From BATV+ed9c6488fdda4253f642+3538+infradead.org+hch@bombadil.srs.infradead.org Wed May 1 01:22:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B75E47F6C for ; Wed, 1 May 2013 01:22:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A71258F8037 for ; Tue, 30 Apr 2013 23:22:13 -0700 (PDT) X-ASG-Debug-ID: 1367389328-04cbb03c2d92650001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id A4hitU2En7ofsUNC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 30 Apr 2013 23:22:09 -0700 (PDT) X-Barracuda-Envelope-From: BATV+ed9c6488fdda4253f642+3538+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1UXQQa-0005cM-JR; Wed, 01 May 2013 06:22:08 +0000 Date: Wed, 1 May 2013 02:22:08 -0400 From: Christoph Hellwig To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [TARBALL] xfsprogs: fixes and updates to current kernel code Message-ID: <20130501062208.GA21563@infradead.org> X-ASG-Orig-Subj: Re: [TARBALL] xfsprogs: fixes and updates to current kernel code References: <20130430121300.GB10481@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130430121300.GB10481@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1367389329 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS All the patches look good to me, Reviewed-by: Christoph Hellwig But I think at least patch 1, maybe 2 and 3 aswell should be submitted for the pending release. From david@fromorbit.com Wed May 1 01:28:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4376B7F6D for ; Wed, 1 May 2013 01:28:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 33DC830406B for ; Tue, 30 Apr 2013 23:28:37 -0700 (PDT) X-ASG-Debug-ID: 1367389715-04cb6c66e28fed0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id I2HBk2xQir0EMS88 for ; Tue, 30 Apr 2013 23:28:35 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoSACK1gFF5LC+Z/2dsb2JhbABTgweDBLcqhRkEAX0XdIIfAQEFOhwjEAgDDgoJJQ8FJQMhE4gLvwoVjWeBHQeDUAOXJZEugx8q Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 15:58:34 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXQWn-0007ue-Ps; Wed, 01 May 2013 16:28:33 +1000 Date: Wed, 1 May 2013 16:28:33 +1000 From: Dave Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [TARBALL] xfsprogs: fixes and updates to current kernel code Message-ID: <20130501062833.GJ10481@dastard> X-ASG-Orig-Subj: Re: [TARBALL] xfsprogs: fixes and updates to current kernel code References: <20130430121300.GB10481@dastard> <20130501062208.GA21563@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130501062208.GA21563@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367389715 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 02:22:08AM -0400, Christoph Hellwig wrote: > All the patches look good to me, > > Reviewed-by: Christoph Hellwig > > But I think at least patch 1, maybe 2 and 3 aswell should be submitted > for the pending release. If the SGI guys want to take them, I'm happy for that to occur. As it is, I've got another bug fix to xfs_logprint (fixes xfs/295) and I found a significant xfs-db regression as a result of the dirv1 removal. I'll post the fixes as delta patches ot this tarball, but like the patch 9/8, the dirv1 fix should probably be rolled back into the original patch... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 01:30:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C1B337F6D for ; Wed, 1 May 2013 01:30:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id AC1A98F8037 for ; Tue, 30 Apr 2013 23:30:35 -0700 (PDT) X-ASG-Debug-ID: 1367389833-04cbb03c2d92df0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id G7mnYFyR8feemmml for ; Tue, 30 Apr 2013 23:30:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApkSAEy2gFF5LC+Z/2dsb2JhbABTgweDBLcqhRkEAX0XdIIfAQEFOhwzCBgMJQ8FJQM0iAu/BxWNZ4Ekg1ADlyWRLoMfKg Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 16:00:07 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXQYJ-0007uo-0J for xfs@oss.sgi.com; Wed, 01 May 2013 16:30:07 +1000 Date: Wed, 1 May 2013 16:30:06 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 10/8] xfsdb: re-instate DA btree node headers Message-ID: <20130501063006.GK10481@dastard> X-ASG-Orig-Subj: [PATCH 10/8] xfsdb: re-instate DA btree node headers References: <20130430121300.GB10481@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130430121300.GB10481@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367389833 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When removing the dirv1 code, it wasn't immediately obvious that the dir v2 code used a small chunk of the dirv1 field definitions. i.e. those for the DA btree node headers. Hence bits of xfs_db didn't work as expected, and some tests failed in non-obvious ways. e.g test 073 failed with this additional line of output: Use of uninitialized value $logstart in numeric gt (>) at /home/dave/src/xfstests-dev/src/fill2fs line 84 which was the result of the command: xfs_db -r -c sb -c $TEST_DEV giving an unexpectedly incorrect output. Re-instate the needed field definitions and rename them from "DIR" to "DA" so it is obvious they are for decoding DA Btree format blocks. Signed-off-by: Dave Chinner --- db/dir2.c | 30 +++++++++++++++++++++++++++--- db/dir2.h | 4 ++++ db/field.c | 7 +++++++ db/field.h | 15 +++------------ 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/db/dir2.c b/db/dir2.c index a13fa25..a539f2d 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -84,9 +84,9 @@ const field_t dir2_flds[] = { FLD_ARRAY|FLD_COUNT, TYP_NONE }, { "ltail", FLDT_DIR2_LEAF_TAIL, dir2_leaf_tail_offset, dir2_leaf_tail_count, FLD_OFFSET|FLD_COUNT, TYP_NONE }, - { "nhdr", FLDT_DIR_NODE_HDR, OI(NOFF(hdr)), dir2_node_hdr_count, + { "nhdr", FLDT_DA_NODE_HDR, OI(NOFF(hdr)), dir2_node_hdr_count, FLD_COUNT, TYP_NONE }, - { "nbtree", FLDT_DIR_NODE_ENTRY, OI(NOFF(btree)), dir2_node_btree_count, + { "nbtree", FLDT_DA_NODE_ENTRY, OI(NOFF(btree)), dir2_node_btree_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, { "fhdr", FLDT_DIR2_FREE_HDR, OI(FOFF(hdr)), dir2_free_hdr_count, FLD_COUNT, TYP_NONE }, @@ -144,7 +144,7 @@ const field_t dir2_leaf_entry_flds[] = { #define LHOFF(f) bitize(offsetof(xfs_dir2_leaf_hdr_t, f)) const field_t dir2_leaf_hdr_flds[] = { - { "info", FLDT_DIR_BLKINFO, OI(LHOFF(info)), C1, 0, TYP_NONE }, + { "info", FLDT_DA_BLKINFO, OI(LHOFF(info)), C1, 0, TYP_NONE }, { "count", FLDT_UINT16D, OI(LHOFF(count)), C1, 0, TYP_NONE }, { "stale", FLDT_UINT16D, OI(LHOFF(stale)), C1, 0, TYP_NONE }, { NULL } @@ -165,6 +165,30 @@ const field_t dir2_free_hdr_flds[] = { { NULL } }; +#define DBOFF(f) bitize(offsetof(xfs_da_blkinfo_t, f)) +const field_t da_blkinfo_flds[] = { + { "forw", FLDT_DIRBLOCK, OI(DBOFF(forw)), C1, 0, TYP_INODATA }, + { "back", FLDT_DIRBLOCK, OI(DBOFF(back)), C1, 0, TYP_INODATA }, + { "magic", FLDT_UINT16X, OI(DBOFF(magic)), C1, 0, TYP_NONE }, + { "pad", FLDT_UINT16X, OI(DBOFF(pad)), C1, FLD_SKIPALL, TYP_NONE }, + { NULL } +}; + +#define EOFF(f) bitize(offsetof(xfs_da_node_entry_t, f)) +const field_t da_node_entry_flds[] = { + { "hashval", FLDT_UINT32X, OI(EOFF(hashval)), C1, 0, TYP_NONE }, + { "before", FLDT_DIRBLOCK, OI(EOFF(before)), C1, 0, TYP_INODATA }, + { NULL } +}; + +#define HOFF(f) bitize(offsetof(xfs_da_node_hdr_t, f)) +const field_t da_node_hdr_flds[] = { + { "info", FLDT_DA_BLKINFO, OI(HOFF(info)), C1, 0, TYP_NONE }, + { "count", FLDT_UINT16D, OI(HOFF(count)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(HOFF(level)), C1, 0, TYP_NONE }, + { NULL } +}; + /*ARGSUSED*/ static int dir2_block_hdr_count( diff --git a/db/dir2.h b/db/dir2.h index 5e117ac..a5f0bec 100644 --- a/db/dir2.h +++ b/db/dir2.h @@ -27,6 +27,10 @@ extern const field_t dir2_leaf_entry_flds[]; extern const field_t dir2_leaf_hdr_flds[]; extern const field_t dir2_leaf_tail_flds[]; +extern const field_t da_blkinfo_flds[]; +extern const field_t da_node_entry_flds[]; +extern const field_t da_node_hdr_flds[]; + /* * generic dir2 structures used by xfs_db */ diff --git a/db/field.c b/db/field.c index 002c5ae..dc72563 100644 --- a/db/field.c +++ b/db/field.c @@ -195,6 +195,13 @@ const ftattr_t ftattrtab[] = { SI(bitsz(xfs_dir2_sf_off_t)), 0, NULL, NULL }, { FLDT_DIR2SF, "dir2sf", NULL, (char *)dir2sf_flds, dir2sf_size, FTARG_SIZE, NULL, dir2sf_flds }, + { FLDT_DA_BLKINFO, "dir_blkinfo", NULL, (char *)da_blkinfo_flds, + SI(bitsz(struct xfs_da_blkinfo)), 0, NULL, da_blkinfo_flds }, + { FLDT_DA_NODE_ENTRY, "dir_node_entry", fp_sarray, + (char *)da_node_entry_flds, SI(bitsz(struct xfs_da_node_entry)), 0, + NULL, da_node_entry_flds }, + { FLDT_DA_NODE_HDR, "dir_node_hdr", NULL, (char *)da_node_hdr_flds, + SI(bitsz(struct xfs_da_node_hdr)), 0, NULL, da_node_hdr_flds }, { FLDT_DIRBLOCK, "dirblock", fp_num, "%u", SI(bitsz(__uint32_t)), 0, fa_dirblock, NULL }, { FLDT_DISK_DQUOT, "disk_dquot", NULL, (char *)disk_dquot_flds, diff --git a/db/field.h b/db/field.h index 6962d69..72c225b 100644 --- a/db/field.h +++ b/db/field.h @@ -75,7 +75,6 @@ typedef enum fldt { FLDT_DINODE_CORE, FLDT_DINODE_FMT, FLDT_DINODE_U, - FLDT_DIR, FLDT_DIR2, FLDT_DIR2_BLOCK_TAIL, FLDT_DIR2_DATA_FREE, @@ -94,18 +93,10 @@ typedef enum fldt { FLDT_DIR2_SF_HDR, FLDT_DIR2_SF_OFF, FLDT_DIR2SF, - FLDT_DIR_BLKINFO, - FLDT_DIR_INO, - FLDT_DIR_LEAF_ENTRY, - FLDT_DIR_LEAF_HDR, - FLDT_DIR_LEAF_MAP, - FLDT_DIR_LEAF_NAME, - FLDT_DIR_NODE_ENTRY, - FLDT_DIR_NODE_HDR, - FLDT_DIR_SF_ENTRY, - FLDT_DIR_SF_HDR, + FLDT_DA_BLKINFO, + FLDT_DA_NODE_ENTRY, + FLDT_DA_NODE_HDR, FLDT_DIRBLOCK, - FLDT_DIRSHORT, FLDT_DISK_DQUOT, FLDT_DQBLK, FLDT_DQID, From david@fromorbit.com Wed May 1 01:31:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E72097F6D for ; Wed, 1 May 2013 01:31:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 75A88AC001 for ; Tue, 30 Apr 2013 23:31:50 -0700 (PDT) X-ASG-Debug-ID: 1367389908-04cbb03c2d92f10001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id qb1LLkkswACJnVtY for ; Tue, 30 Apr 2013 23:31:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApkSAEy2gFF5LC+Z/2dsb2JhbABTgweDBLcqhRkEAX0XdIIfAQEFJxMcMwgYDCUPBSUDNIgLvwcVjWeBJBaDOgOXJYoNhyGDHyo Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 16:01:47 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXQZl-0007ux-1W for xfs@oss.sgi.com; Wed, 01 May 2013 16:31:37 +1000 Date: Wed, 1 May 2013 16:31:37 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 11/8] xfs_logprint: fix continuation transactions Message-ID: <20130501063136.GL10481@dastard> X-ASG-Orig-Subj: [PATCH 11/8] xfs_logprint: fix continuation transactions References: <20130430121300.GB10481@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130430121300.GB10481@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367389908 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner As demonstrated by xfs/295, continuation transactions cause of problems for xfs_logprint. The failure demonstrated by the test is that the buffer log format structures are variable sized on disk - the dirty bitmap is sized according to the buffer length, not fixed to the length of the maximum supported buffer size. xfs_logprint assumes that the buf log format reocrds are of fixed size, and so when a short buffer is found it fails to handle it properly and treats it like a continuation record. This causses the opheader pointer to be incremented incorrectly and then logprint wanders off into a dark corner and gets eaten by a grue. While fixing this, make the xlog_print_record code that does the transaction opheader walking a little easier to read and stop it from outputting binary data direct to the console by converting the no-data-print case to use a hex dumping loop. Signed-off-by: Dave Chinner --- logprint/log_misc.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/logprint/log_misc.c b/logprint/log_misc.c index 30b7ea6..d08f900 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -268,7 +268,13 @@ xlog_print_trans_buffer(xfs_caddr_t *ptr, int len, int *i, int num_ops) blen = f->blf_len; map_size = f->blf_map_size; flags = f->blf_flags; - struct_size = sizeof(xfs_buf_log_format_t); + + /* + * size of the format header is dependent on the size of the bitmap, not + * the size of the in-memory structure. Hence the slightly obtuse + * calculation. + */ + struct_size = offsetof(struct xfs_buf_log_format, blf_map_size) + map_size; if (len >= struct_size) { ASSERT((len - sizeof(struct_size)) % sizeof(int) == 0); @@ -933,22 +939,28 @@ xlog_print_record(int fd, continued = ((op_head->oh_flags & XLOG_WAS_CONT_TRANS) || (op_head->oh_flags & XLOG_CONTINUE_TRANS)); - /* print transaction data */ - if (print_no_data || - (continued && be32_to_cpu(op_head->oh_len) == 0)) { + if (continued && be32_to_cpu(op_head->oh_len) == 0) + continue; + + if (print_no_data) { for (n = 0; n < be32_to_cpu(op_head->oh_len); n++) { - printf("%c", *ptr); + printf("0x%02x ", (unsigned int)*ptr); + if (n % 16 == 15) + printf("\n"); ptr++; } printf("\n"); continue; } + + /* print transaction data */ if (xlog_print_find_tid(be32_to_cpu(op_head->oh_tid), op_head->oh_flags & XLOG_WAS_CONT_TRANS)) { printf(_("Left over region from split log item\n")); ptr += be32_to_cpu(op_head->oh_len); continue; } + if (be32_to_cpu(op_head->oh_len) != 0) { if (*(uint *)ptr == XFS_TRANS_HEADER_MAGIC) { skip = xlog_print_trans_header(&ptr, From dave@fromorbit.com Wed May 1 02:06:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0A2417F76 for ; Wed, 1 May 2013 02:06:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8E8D6AC002 for ; Wed, 1 May 2013 00:06:29 -0700 (PDT) X-ASG-Debug-ID: 1367391984-04cb6c66e391ed0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id vEA4dB9Zk77B0YK5 for ; Wed, 01 May 2013 00:06:24 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au8LAIW+gFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwFcOxhqAzSIC58yn1mNVSeBOoM6A6hTgx8qgS0 Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 16:36:00 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXR70-0007yg-Tn for xfs@oss.sgi.com; Wed, 01 May 2013 17:05:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXR70-0008Sf-PJ for xfs@oss.sgi.com; Wed, 01 May 2013 17:05:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH] xfstests: fix incorrect redirect in generic/232 Date: Wed, 1 May 2013 17:05:58 +1000 X-ASG-Orig-Subj: [PATCH] xfstests: fix incorrect redirect in generic/232 Message-Id: <1367391958-32494-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367391984 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129677 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner generic/232 attempts to direct output to tee, but instead of using a pipe it uses an append operator. Hence it leaves a file named "tee" in the root directory of the xfstests execution path. Just direct the output to the $seqres.full file rather than trying to tee it into the test output as well. Signed-off-by: Dave Chinner --- tests/generic/232 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generic/232 b/tests/generic/232 index 2402c45..8ada8aa 100755 --- a/tests/generic/232 +++ b/tests/generic/232 @@ -55,7 +55,7 @@ _fsstress() count=2000 args=`_scale_fsstress_args -d $out -n $count -p 7` - echo "fsstress $args" >> tee -a $seqres.full + echo "fsstress $args" >> $seqres.full if ! $FSSTRESS_PROG $args | tee -a $seqres.full | _filter_num then echo " fsstress $args returned $?" -- 1.7.10.4 From dave@fromorbit.com Wed May 1 02:53:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 176CE29DF8 for ; Wed, 1 May 2013 02:53:40 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id DAB7630406B for ; Wed, 1 May 2013 00:53:39 -0700 (PDT) X-ASG-Debug-ID: 1367394814-04bdf077c695d40001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id fUMC5ajoLip9nMBz for ; Wed, 01 May 2013 00:53:34 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au8LAMvIgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwFcOxhqAzSIC58tn1aNfIE6gzoDqFODHyo Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 17:23:34 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXRr2-00083B-PF for xfs@oss.sgi.com; Wed, 01 May 2013 17:53:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXRr2-0000IZ-Ky for xfs@oss.sgi.com; Wed, 01 May 2013 17:53:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH] xfstests: fix broken redirects in generic/131 Date: Wed, 1 May 2013 17:53:32 +1000 X-ASG-Orig-Subj: [PATCH] xfstests: fix broken redirects in generic/131 Message-Id: <1367394812-1117-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367394814 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129681 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner generic/131 attempts to kill processes that may no longer exist when the test finishes and has a broken redirect for the error messages and they end up in a file nemaed "1" in the xfstests root instead of /dev/null. Not only that, the attempts to redirect stderr to stdout in the middle of the test use incorrect redirect syntax, so they create an empty file named "1" in the xfstests root... IOWs, all the redirects in the test are broken. Fix them and clean up the failure case to use the exit trap to trigger the cleanup function.... Signed-off-by: Dave Chinner --- tests/generic/131 | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tests/generic/131 b/tests/generic/131 index 95eb612..6c3131c 100755 --- a/tests/generic/131 +++ b/tests/generic/131 @@ -33,8 +33,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { - kill $locktest_pid2 2&>1 /dev/null - kill $locktest_pid1 2&>1 /dev/null + kill $locktest_pid2 > /dev/null 2>&1 + kill $locktest_pid1 > /dev/null 2>&1 _cleanup_testdir } @@ -60,23 +60,21 @@ elif [ $$ -gt 32000 ]; then fi # Start the server -src/locktest -p $PORT $TESTFILE > $testdir/server.out 2>&1 & +src/locktest -p $PORT $TESTFILE 2>&1 > $testdir/server.out & locktest_pid1=$! sleep 1 # Start the client -src/locktest -p $PORT -h localhost $TESTFILE > $testdir/client.out 2>&1 +src/locktest -p $PORT -h localhost $TESTFILE 2>&1 > $testdir/client.out locktest_pid2=$! result=$? if [ $result -eq 0 ]; then - echo success! + echo success! + status=0 else - echo "Client reported failure ($result)" - cat $testdir/*.out - _cleanup - exit $status + echo "Client reported failure ($result)" + cat $testdir/*.out fi -status=0 exit -- 1.7.10.4 From dave@fromorbit.com Wed May 1 03:32:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 731847F76 for ; Wed, 1 May 2013 03:32:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5143E304067 for ; Wed, 1 May 2013 01:32:12 -0700 (PDT) X-ASG-Debug-ID: 1367397127-04cbb03c2c99150001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id sCF8fBItAn0qZuCm for ; Wed, 01 May 2013 01:32:07 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvELAD/SgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwEBBVYzCBgxOQMbGYgLvnyNVSeBOoM6A6hTgx8qgS0 Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:02:07 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXSSL-000876-Jl for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXSSL-0000fh-Gj for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/5] xfstests: filter EA paths used by dump Date: Wed, 1 May 2013 18:32:01 +1000 X-ASG-Orig-Subj: [PATCH 3/5] xfstests: filter EA paths used by dump Message-Id: <1367397123-2530-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367397123-2530-1-git-send-email-david@fromorbit.com> References: <1367397123-2530-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367397127 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Test 063 fails because the diff output now has entire paths to the files in the results directory in it rather than just the file name. Add the results directory to the directory filter used by the dump tests to remove the path from the diff output. Signed-off-by: Dave Chinner --- common/dump | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/dump b/common/dump index 73d0304..7fe50f6 100644 --- a/common/dump +++ b/common/dump @@ -927,6 +927,7 @@ _dir_filter() -e "s#$restore_sdir#RESTORE_SUBDIR#g" \ -e "s#$$#PID#g" \ -e "/Only in SCRATCH_MNT: .use_space/d" \ + -e "s#$RESULT_DIR/##g" \ } @@ -1358,7 +1359,7 @@ _diff_compare_eas() | sed -e "s#$restore_sdir\/##" \ | tee $seqres.ea2 \ | _dir_filter - diff -s $seqres.ea1 $seqres.ea2 + diff -s $seqres.ea1 $seqres.ea2 | _dir_filter } -- 1.7.10.4 From dave@fromorbit.com Wed May 1 03:32:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BE79929E0D for ; Wed, 1 May 2013 03:32:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id AC7528F8049 for ; Wed, 1 May 2013 01:32:18 -0700 (PDT) X-ASG-Debug-ID: 1367397136-04cb6c66e496540001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id U2eyImWz3A3BFkGR for ; Wed, 01 May 2013 01:32:17 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvELAD/SgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwEBBVYzCBgxOQMbGYgLvnyNfIR0A6hTgx8q Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:02:16 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXSSL-000874-I0 for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXSSL-0000fY-E2 for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/5] xfstests: fix last test runtime output Date: Wed, 1 May 2013 18:31:59 +1000 X-ASG-Orig-Subj: [PATCH 1/5] xfstests: fix last test runtime output Message-Id: <1367397123-2530-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367397123-2530-1-git-send-email-david@fromorbit.com> References: <1367397123-2530-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367397136 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Prior to the test directory split-up, xfstests used to output the time it previously took to run a specific test in it's output. This was broken during the split up, as test identifiers changed and the result output changed. To fix this, the search for previous test results needs to look at the sequence number rather than the absolute sequence for the test. The new output looks the same as the old functionality: generic/001 4s ... 5s generic/002 1s ... 0s generic/005 1s ... 1s generic/006 1s ... 1s generic/007 2s ... 1s Where the first column is the time of the previous test run, and the second column is the time that this run took. Further, the check files used to generate this information are not being output properly in the result directory, and so various log files are not getting written to the correct location or file names. For example, the calls to _check_test_fs would output failures to ".full", while other messages would be output to check.full, but none would output to the corect location of RESULT_BASE/check.full. Fix all this mess up so that all the check files for a specific run end up in RESULT_BASE, and ensure the timing code checks the right file and dumps output. Signed-off-by: Dave Chinner --- check | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/check b/check index 966fbe5..a79747e 100755 --- a/check +++ b/check @@ -293,14 +293,17 @@ fi _wrapup() { + seq="check" + check="$RESULT_BASE/check" + if $showme then : elif $needwrap then - if [ -f check.time -a -f $tmp.time ] + if [ -f $check.time -a -f $tmp.time ] then - cat check.time $tmp.time \ + cat $check.time $tmp.time \ | $AWK_PROG ' { t[$1] = $2 } END { if (NR > 0) { @@ -308,13 +311,13 @@ END { if (NR > 0) { } }' \ | sort -n >$tmp.out - mv $tmp.out check.time + mv $tmp.out $check.time fi - echo "" >>check.log - date >>check.log - echo $list | fmt | sed -e 's/^/ /' -e "s;$SRC_DIR/;;g" >>check.log - $interrupt && echo "Interrupted!" >>check.log + echo "" >>$check.log + date >>$check.log + echo $list | fmt | sed -e 's/^/ /' -e "s;$SRC_DIR/;;g" >>$check.log + $interrupt && echo "Interrupted!" >>$check.log if [ ! -z "$n_try" -a $n_try != 0 ] then @@ -324,18 +327,18 @@ END { if (NR > 0) { if [ ! -z "$notrun" ] then echo "Not run:$notrun" - echo "Not run:$notrun" >>check.log + echo "Not run:$notrun" >>$check.log fi if [ ! -z "$n_bad" -a $n_bad != 0 ] then echo "Failures:$bad" echo "Failed $n_bad of $n_try tests" - echo "Failures:$bad" | fmt >>check.log - echo "Failed $n_bad of $n_try tests" >>check.log + echo "Failures:$bad" | fmt >>$check.log + echo "Failed $n_bad of $n_try tests" >>$check.log else echo "Passed all $n_try tests" - echo "Passed all $n_try tests" >>check.log + echo "Passed all $n_try tests" >>$check.log fi needwrap=false fi @@ -346,10 +349,19 @@ END { if (NR > 0) { trap "_wrapup; exit \$status" 0 1 2 3 15 +mkdir -p $RESULT_BASE +if [ ! -d $RESULT_BASE ]; then + echo "failed to create results directory $RESULTS_BASE" + exit 1; +fi + +seq="check" +check="$RESULT_BASE/check" + # don't leave old full output behind on a clean run -rm -f check.full +rm -f $check.full -[ -f check.time ] || touch check.time +[ -f $check.time ] || touch $check.time # print out our test configuration echo "FSTYP -- `_full_fstyp_details`" @@ -385,13 +397,7 @@ if [ ! -z "$SCRATCH_DEV" ]; then fi fi -mkdir -p $RESULT_BASE -if [ ! -d $RESULT_BASE ]; then - echo "failed to create results directory $RESULTS_BASE" - exit 1; -fi - -seq="check" +seqres="$check" _check_test_fs for seq in $list @@ -432,7 +438,7 @@ do fi # slashes now in names, sed barfs on them so use grep - lasttime=`grep -w ^$seq check.time | awk '// {print $2}'` + lasttime=`grep -w ^$seqnum $check.time | awk '// {print $2}'` if [ "X$lasttime" != X ]; then echo -n " ${lasttime}s ..." else -- 1.7.10.4 From dave@fromorbit.com Wed May 1 03:32:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BA85129E0D for ; Wed, 1 May 2013 03:32:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A7BE030406A for ; Wed, 1 May 2013 01:32:19 -0700 (PDT) X-ASG-Debug-ID: 1367397136-04cb6c66e496540002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id TfHJWsynHx6dnqHv for ; Wed, 01 May 2013 01:32:18 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvELAD/SgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwEBBVYzCBgxOQMbGYgLvnyNVSeBOoM6A6hTgx8qgS0 Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:02:16 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXSSV-00087E-Lu for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:15 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXSSV-0000fm-Ha for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:15 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 4/5] xfstests: fix incorrect redirect in generic/232 Date: Wed, 1 May 2013 18:32:02 +1000 X-ASG-Orig-Subj: [PATCH 4/5] xfstests: fix incorrect redirect in generic/232 Message-Id: <1367397123-2530-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367397123-2530-1-git-send-email-david@fromorbit.com> References: <1367397123-2530-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367397138 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner generic/232 attempts to direct output to tee, but instead of using a pipe it uses an append operator. Hence it leaves a file named "tee" in the root directory of the xfstests execution path. Just direct the output to the $seqres.full file rather than trying to tee it into the test output as well. Signed-off-by: Dave Chinner --- tests/generic/232 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generic/232 b/tests/generic/232 index 2402c45..8ada8aa 100755 --- a/tests/generic/232 +++ b/tests/generic/232 @@ -55,7 +55,7 @@ _fsstress() count=2000 args=`_scale_fsstress_args -d $out -n $count -p 7` - echo "fsstress $args" >> tee -a $seqres.full + echo "fsstress $args" >> $seqres.full if ! $FSSTRESS_PROG $args | tee -a $seqres.full | _filter_num then echo " fsstress $args returned $?" -- 1.7.10.4 From dave@fromorbit.com Wed May 1 03:32:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E906629E0F for ; Wed, 1 May 2013 03:32:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id D636E8F8049 for ; Wed, 1 May 2013 01:32:18 -0700 (PDT) X-ASG-Debug-ID: 1367397127-04cbb03c2c99150003-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id sogM5tywjDc3n8LN for ; Wed, 01 May 2013 01:32:17 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvELAD/SgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwEBBVYzCBgxOQMbGYgLvnyNfIR0A6hTgx8q Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:02:16 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXSSL-000875-In for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXSSL-0000fc-Fk for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/5] xfstests: 310 fails with existing directory error Date: Wed, 1 May 2013 18:32:00 +1000 X-ASG-Orig-Subj: [PATCH 2/5] xfstests: 310 fails with existing directory error Message-Id: <1367397123-2530-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367397123-2530-1-git-send-email-david@fromorbit.com> References: <1367397123-2530-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367397137 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Test 310 fails with: mkdir: cannot create directory `/mnt/test/tmp': File exists $TEST_DIR is persistent, so test directories need to be created with "mkdir -p" so they don't fail if the directory already exists. Many other things need fixing, too. - Tests should define directories they use on $TEST_DIR by their sequence number, not generic names. - Use a variable for the directory the test runs in ($SEQ_DIR, in this case) to avoid having to manually code it everywhere. - New binaries need to be added to .gitignore. - Return status for shell functions is 0 for success, non-zero for failure. - Setting status=0 if there is no failure in the first test means that even if the second test fails, the test will still pass. Change the test to use "_fatal" when a kernel bug is detected, and only set status=0 when the entire test has finished. - reduce the default runtime by to roughly a minute and scale it with the stress load factor variables. In most cases, this test is never going to hit problems (as they've already been fixed) so running it for ~4 minutes is mostly a waste of time... Signed-off-by: Dave Chinner --- .gitignore | 2 ++ tests/generic/310 | 35 +++++++++++++++++------------------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 7a10feb..0bd48c3 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,8 @@ /src/preallo_rw_pattern_writer /src/pwrite_mmap_blocked /src/randholes +/src/t_readdir_1 +/src/t_readdir_2 /src/rename /src/resvtest /src/runas diff --git a/tests/generic/310 b/tests/generic/310 index b5316cd..26d2d4a 100755 --- a/tests/generic/310 +++ b/tests/generic/310 @@ -75,12 +75,11 @@ check_kernel_bug() new_warning=`dmesg | grep -c "^WARNING"` new_lockdep=`dmesg | grep -c "possible recursive locking detected"` - # no kernel bug is detected if [ $new_bug -eq $nr_bug -a $new_error -eq $nr_error -a \ $new_null -eq $nr_null -a $new_warning -eq $nr_warning -a \ $new_lockdep -eq $nr_lockdep ]; then - return 1 + return 0 fi nr_bug=$new_bug @@ -88,37 +87,36 @@ check_kernel_bug() nr_null=$new_null nr_warning=$new_warning nr_lockdep=$new_lockdep + return 1 } -mkdir $TEST_DIR/tmp + +RUN_TIME=$((30 * $TIME_FACTOR)) + +SEQ_DIR=$TEST_DIR/$seq +mkdir -p $SEQ_DIR for n in {1..4096}; do - touch $TEST_DIR/tmp/$n + touch $SEQ_DIR/$n done _test_read() { - src/t_readdir_1 $TEST_DIR/tmp & - sleep 100 + src/t_readdir_1 $SEQ_DIR & + sleep $RUN_TIME killall src/t_readdir_1 check_kernel_bug - if [ $? -eq 1 ]; then - status=0 - else - echo "error: kernel bug was found, you can see the - dmesg for more infomation." + if [ $? -ne 0 ]; then + _fatal "kernel bug detected, check dmesg for more infomation." fi } _test_lseek() { - src/t_readdir_2 $TEST_DIR/tmp & - sleep 100 + src/t_readdir_2 $SEQ_DIR & + sleep $RUN_TIME killall src/t_readdir_2 check_kernel_bug - if [ $? -eq 1 ]; then - status=0 - else - echo "error: kernel bug was found, you can see the - dmesg for more infomation." + if [ $? -ne 0 ]; then + _fatal "kernel bug detected, check dmesg for more infomation." fi } @@ -127,4 +125,5 @@ _test_lseek # success, all done echo "*** done" +status=0 exit -- 1.7.10.4 From dave@fromorbit.com Wed May 1 03:32:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9A7F929E0D for ; Wed, 1 May 2013 03:32:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7976E8F8049 for ; Wed, 1 May 2013 01:32:17 -0700 (PDT) X-ASG-Debug-ID: 1367397127-04cbb03c2c99150002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id TxWGBhIeDYCJhLT0 for ; Wed, 01 May 2013 01:32:16 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au8LAD/SgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCfDuBAgOIP58un06NfIE6gzoDqFODHyo Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:02:16 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXSSV-000873-H5 for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:15 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXSSL-0000fV-Cs for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:05 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/5] xfstests: various fixes Date: Wed, 1 May 2013 18:31:58 +1000 X-ASG-Orig-Subj: [PATCH 0/5] xfstests: various fixes Message-Id: <1367397123-2530-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367397132 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi folks, These are various fixes for xfstests. The first patch is an infrastructure regression fix, resulting from the patchset that split up the tests into subdirectories. It also moves all the check.* output files to the result directory rather than leaving them in the root directory of xfstests. The second is a bunch of changes to generic/310 that should have been done in the review cycle. It now works reliably for me. The last 3 patches fix bugs in tests that result in files being left in the root directory of xfstests. Cheers, Dave. From dave@fromorbit.com Wed May 1 03:32:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9BA6829E1D for ; Wed, 1 May 2013 03:32:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 204FDAC002 for ; Wed, 1 May 2013 01:32:20 -0700 (PDT) X-ASG-Debug-ID: 1367397127-04cbb03c2c99150004-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 7VdoFEkblfTJDFVb for ; Wed, 01 May 2013 01:32:18 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvELAD/SgFF5LC+Z/2dsb2JhbABTgwe/RwR+F3SCHwEBBVYzCBgxOQMbGYgLvnyNfIE6gzoDqFODHyo Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:02:16 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXSSV-00087H-Mc for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:15 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXSSV-0000fs-Id for xfs@oss.sgi.com; Wed, 01 May 2013 18:32:15 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 5/5] xfstests: fix broken redirects in generic/131 Date: Wed, 1 May 2013 18:32:03 +1000 X-ASG-Orig-Subj: [PATCH 5/5] xfstests: fix broken redirects in generic/131 Message-Id: <1367397123-2530-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367397123-2530-1-git-send-email-david@fromorbit.com> References: <1367397123-2530-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367397138 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner generic/131 attempts to kill processes that may no longer exist when the test finishes and has a broken redirect for the error messages and they end up in a file nemaed "1" in the xfstests root instead of /dev/null. Not only that, the attempts to redirect stderr to stdout in the middle of the test use incorrect redirect syntax, so they create an empty file named "1" in the xfstests root... IOWs, all the redirects in the test are broken. Fix them and clean up the failure case to use the exit trap to trigger the cleanup function.... Signed-off-by: Dave Chinner --- tests/generic/131 | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tests/generic/131 b/tests/generic/131 index 95eb612..6c3131c 100755 --- a/tests/generic/131 +++ b/tests/generic/131 @@ -33,8 +33,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { - kill $locktest_pid2 2&>1 /dev/null - kill $locktest_pid1 2&>1 /dev/null + kill $locktest_pid2 > /dev/null 2>&1 + kill $locktest_pid1 > /dev/null 2>&1 _cleanup_testdir } @@ -60,23 +60,21 @@ elif [ $$ -gt 32000 ]; then fi # Start the server -src/locktest -p $PORT $TESTFILE > $testdir/server.out 2>&1 & +src/locktest -p $PORT $TESTFILE 2>&1 > $testdir/server.out & locktest_pid1=$! sleep 1 # Start the client -src/locktest -p $PORT -h localhost $TESTFILE > $testdir/client.out 2>&1 +src/locktest -p $PORT -h localhost $TESTFILE 2>&1 > $testdir/client.out locktest_pid2=$! result=$? if [ $result -eq 0 ]; then - echo success! + echo success! + status=0 else - echo "Client reported failure ($result)" - cat $testdir/*.out - _cleanup - exit $status + echo "Client reported failure ($result)" + cat $testdir/*.out fi -status=0 exit -- 1.7.10.4 From dave@fromorbit.com Wed May 1 03:47:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 77AEE29DF8 for ; Wed, 1 May 2013 03:47:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5F8B68F8049 for ; Wed, 1 May 2013 01:47:54 -0700 (PDT) X-ASG-Debug-ID: 1367398072-04cb6c66e2973b0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 1fpXSjuGe0kee1CU for ; Wed, 01 May 2013 01:47:52 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au8LAPXVgFF5LC+Z/2dsb2JhbABTgwe/RwR/F3SCHwFcOxhqAzSIC58zn02NfIE6gzoDqFODHyo Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:17:52 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXShb-00089D-Dx for xfs@oss.sgi.com; Wed, 01 May 2013 18:47:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXShb-0000ok-9b for xfs@oss.sgi.com; Wed, 01 May 2013 18:47:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH] xfstests: generic/241 requires dbench Date: Wed, 1 May 2013 18:47:51 +1000 X-ASG-Orig-Subj: [PATCH] xfstests: generic/241 requires dbench Message-Id: <1367398071-3112-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367398072 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner common/config doesn't configure DBENCH_PROG so it doesn't run. Signed-off-by: Dave Chinner --- common/config | 1 + 1 file changed, 1 insertion(+) diff --git a/common/config b/common/config index dfbb5c2..b55a528 100644 --- a/common/config +++ b/common/config @@ -177,6 +177,7 @@ export FIO_PROG="`set_prog_path fio`" export FILEFRAG_PROG="`set_prog_path filefrag`" export E4DEFRAG_PROG="`set_prog_path e4defrag`" export LOGGER_PROG="`set_prog_path logger`" +export DBENCH_PROG="`set_prog_path dbench`" # Generate a comparable xfsprogs version number in the form of # major * 10000 + minor * 100 + release -- 1.7.10.4 From david@fromorbit.com Wed May 1 04:21:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A61E07F84 for ; Wed, 1 May 2013 04:21:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8FEEB8F8059 for ; Wed, 1 May 2013 02:21:27 -0700 (PDT) X-ASG-Debug-ID: 1367400079-04cbb03c2d9bf50001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id LxJLP0OnQBfjHIsx for ; Wed, 01 May 2013 02:21:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-NotFiltered: toobig X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApsEAEjegFF5LC+Z/2dsb2JhbADEPA Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 18:51:04 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXTDi-0008DF-RO for xfs@oss.sgi.com; Wed, 01 May 2013 19:21:02 +1000 Date: Wed, 1 May 2013 19:21:02 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [TARBALL V2] xfsprogs: fixes and updates to current kernel code Message-ID: <20130501092102.GM10481@dastard> X-ASG-Orig-Subj: [TARBALL V2] xfsprogs: fixes and updates to current kernel code References: <20130430121300.GB10481@dastard> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="cmJC7u66zC7hs+87" Content-Disposition: inline In-Reply-To: <20130430121300.GB10481@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367400079 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129687 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --cmJC7u66zC7hs+87 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Apr 30, 2013 at 10:13:00PM +1000, Dave Chinner wrote: > > Hi folks, > > The attached tarball contains the following patches and a series > file: > > xfs_repair: validate on-disk extent count better > xfs_logprint: print all AGI unlinked buckets > xfs_fsr: file reads should be O_DIRECT > xfsprogs: Die dir1 Die! > xfsprogs: sync code to current kernel code > xfsprogs: update libxfs to 3.9-rc1 + xfsdev > xfsprogs: add CRC32c infrastructure > xfsprogs: update libxlog to current kernel code Version 2 adds: xfs_logprint: fix continuation transactions As the fourth patch in the series. Other updates are folding the dirv1 xfs_db fixes into the "die dir1 die" patch, and the log read IO alignment fixes into the libxlog update. Also of note is that the commit message and a coment in the libxlog has been updated. The comment about not knowing the size of the iclogbuf that wrote the header and hence being unable to validate the CRCs is incorrect. The size is written to the iclog header, so we can CRC validate the log records. However, the patch still doe snot enable that validation as it is still unclear to me what we should do with failures in userspace. If we are trying to determine if the log is dirty, a CRC failure doesn't really matter, and if we are printing the log, then a CRC failure shouldn't stop the logprint output. Hence the error handling is likely to be different to the kernel log recovery code, so it needs some more thought as to the best approach to handling this difference before enabling CRC validation.... Cheers, Dave. -- Dave Chinner david@fromorbit.com --cmJC7u66zC7hs+87 Content-Type: application/octet-stream Content-Disposition: attachment; filename="xfsprogs-kern-sync-patchset-v2.tar.gz" Content-Transfer-Encoding: base64 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 Wgm6lKGl36sXZsvabHLpEzGc/uL6xL2jNoxNj2nnGcilEPUO1XuTyyzIQ9UV8FfNEqM2I58i w2wgGX5N0JZpiQI8FvQh7RiROmkrzMTCmNJvCI45bZeBBDHQo13wUiTxhQSnJQuqfSjMJDxL kQkLllZa2WwCmCNp74Vycbna0sf8EGCekjq9Rxt2QD6mKRLVdN26QpHMafKKaBLP0HTo5Re0 yUe+RxXGtOyHeKgGB/CA+CrS4M88AUIXams+LtpqK5D0d71IPynZdUqP9BtmWvaaX4p5P668 5EIdZUjiskQD0iti1S8GdKzvMpuRBiOMFZ2sVCnQOPUAOAkKGrCnfYOwaQZmkD9QEFGfJ7DS zCZ6WzlC4BVzuOiJCUAVZRqJNsmyr5VxnMZFYDbqnfVko23bm/Bib3cVMA7vAoybWvQ3lWrw 6Mh+6IcEHodRNwrvyjrqehsSjvoNb1+O9gjQ0K3Xn6fNlEuw4U3SjAZi4IVhTgmMWZkrLInB rH5sx+qeVgRRCqAeTjRyFktEgJZJ5OLhqSqnDS0al4t3pkQTRIk3LhZv+fGpZdMrFbJMdbpl EUsHQSlU6H03t2zx5ihVof1RZrvN9Cb26KihPTqmOA0YFEq1ecpZ7hq1Cnwc0ObcVmni1Nar qXlgNdvvTJrQhjTGd+aXFe1dajaBlwRVwjGkYwqfqB/LvYU/A42gv6pYrHcbK6+aNltiR9Q0 q3RrsovPn9W5K3x4eHZ2/O68ye9to9w6VUs8MsUwNye9uvqwxD6wMQ2U/YHTdvZWfEmFl6Y6 iwH78m69WVkQtm02s5lLprCfZxNlcLEl3r96+7378+GZ+/Ltm3P3/N3hm7OW+PiRcKlatdxa iSqcvvnpWFdqqdULVhAqgtSDGgciKNxmuKzkBXznYrRlc1PNhbBbW0sZ9LoI0JvWiVr4EMPP rEiLn8WSa0czWZJK2YrHCeVTU5VNTSlFegd7UKjUqr3Icz4KHrZ5OKtFVy2f2nUooyqaVaoP hZG5F5S8OQ9f6I04qz1ksVfSpzAS6Hd2nmphf9P3VSoqqy0yKRfLhxruMJVa2dT8K0J4dMs4 bN6mAbwzGftPdbSFmhdLplcyQnTAzIRpbkwS8eRWzBKCBBkdEZPT+W4FVy1zsfPsbsPcogPV yTs95sEzs7IzI3u7WXE8blHDOiXN3XF/OD48On63lJsuLmI6YrAW81VIbG5RnP//tsy79bp/ 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 IjEqAJAVAA== --cmJC7u66zC7hs+87-- From david@fromorbit.com Wed May 1 04:32:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E8F197F52 for ; Wed, 1 May 2013 04:32:28 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id D4F658F8065 for ; Wed, 1 May 2013 02:32:28 -0700 (PDT) X-ASG-Debug-ID: 1367400746-04cbb03c2d9c870001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id VubJqkPjIj07cice for ; Wed, 01 May 2013 02:32:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApkSAIrggFF5LC+Z/2dsb2JhbABTgweDBLcrhRkEAX4XdIIfAQEFOhwzCAMYCSUPBSUDNIgLvngVjVQTgSQWgzoDlyWRLoMfKoEu Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail07.adl2.internode.on.net with ESMTP; 01 May 2013 19:01:40 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXTNz-0008E5-NG for xfs@oss.sgi.com; Wed, 01 May 2013 19:31:39 +1000 Date: Wed, 1 May 2013 19:31:39 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: Re: [PATCH 0/5] xfstests: various fixes Message-ID: <20130501093139.GN10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 0/5] xfstests: various fixes References: <1367397123-2530-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1367397123-2530-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1367400746 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129687 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 06:31:58PM +1000, Dave Chinner wrote: > Hi folks, > > These are various fixes for xfstests. > > The first patch is an infrastructure regression fix, resulting from > the patchset that split up the tests into subdirectories. It also > moves all the check.* output files to the result directory rather > than leaving them in the root directory of xfstests. > > The second is a bunch of changes to generic/310 that should have > been done in the review cycle. It now works reliably for me. > > The last 3 patches fix bugs in tests that result in files being left > in the root directory of xfstests. FWIW, with the V2 xfsprogs kernel sync tarball I've posted and these fixes to xfstests, I'm down to only 3 failures in xfstests for 4k block size filesystem tests: Failures: generic/233 shared/298 xfs/296 generic/233 appears to be a small quota accounting mismatch, probably related to speculative preallocation. Not a major issue. shared/298 is failing due to the ENOSPC problem Eric posted patches to fix. Test bug. xfs/296 is failing due to an unresolved xfsdump issue w.r.t restoring security attributes. Unresolved. So, I'm much happier now about the state of xfsprogs and xfstests than I was this morning. I'll be happier still when I fix the fsx failures on 512 byte block size filesystems, because that will bring my 512 byte block size filesystem tests to close to the same level. That's for tomorrow, though. Cheers, Dave. -- Dave Chinner david@fromorbit.com From james.dingwall@zynstra.com Wed May 1 07:39:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B40397F84 for ; Wed, 1 May 2013 07:39:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4664EAC003 for ; Wed, 1 May 2013 05:39:18 -0700 (PDT) X-ASG-Debug-ID: 1367411956-04cbb03c2daa2d0001-NocioJ Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1lp0014.outbound.protection.outlook.com [213.199.154.14]) by cuda.sgi.com with ESMTP id wNyyraUssyhvd5Vr (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Wed, 01 May 2013 05:39:17 -0700 (PDT) X-Barracuda-Envelope-From: james.dingwall@zynstra.com X-Barracuda-Apparent-Source-IP: 213.199.154.14 Received: from DB3PRD0611HT003.eurprd06.prod.outlook.com (157.56.254.229) by DB3PR03MB042.eurprd03.prod.outlook.com (10.242.136.15) with Microsoft SMTP Server (TLS) id 15.0.670.15; Wed, 1 May 2013 12:39:14 +0000 Message-ID: <51810CED.4080003@zynstra.com> Date: Wed, 1 May 2013 13:39:09 +0100 From: James Dingwall User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0 SeaMonkey/2.17.1 MIME-Version: 1.0 To: Subject: Cleancache support in XFS Content-Type: text/plain; charset="UTF-8"; format=flowed X-ASG-Orig-Subj: Cleancache support in XFS Content-Transfer-Encoding: 7bit X-Originating-IP: [157.56.254.229] X-ClientProxiedBy: DB3PR03CA003.eurprd03.prod.outlook.com (10.242.134.13) To DB3PR03MB042.eurprd03.prod.outlook.com (10.242.136.15) X-Forefront-Antispam-Report: SFV:SKI;SFS:;DIR:OUT;SFP:;SCL:0;SRVR:DB3PR03MB042;H:DB3PRD0611HT003.eurprd06.prod.outlook.com;LANG:en; X-OriginatorOrg: zynstra.com X-Barracuda-Connect: mail-am1lp0014.outbound.protection.outlook.com[213.199.154.14] X-Barracuda-Start-Time: 1367411957 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129699 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In reference to: http://oss.sgi.com/archives/xfs/2012-05/msg00046.html $ grep -r cleancache fs/xfs on the 3.9 kernel source suggests that no patch was submitted to enable cleancache for the XFS filesystem. Since it was suggested that this could be a one liner I've had a go and my first effort is inline below. While this seems to compile OK I have no experience in filesystems so I would appreciate it if anyone can point out that it is obviously wrong and likely to eat my data before I try booting the kernel. If it seems a reasonable attempt what would be the best way to check that it isn't doing nasty things? Thanks, James --- xfs_super.c 2013-04-29 10:28:22.000000000 +0100 +++ xfs_super.cleancache.c 2013-05-01 13:22:44.367763564 +0100 @@ -61,6 +61,7 @@ #include #include #include +#include static const struct super_operations xfs_super_operations; static kmem_zone_t *xfs_ioend_zone; @@ -1489,6 +1490,8 @@ goto out_unmount; } + cleancache_init_fs(sb); + return 0; out_filestream_unmount: From jeff.liu@oracle.com Wed May 1 09:25:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 37FD87F96 for ; Wed, 1 May 2013 09:25:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B2C0EAC005 for ; Wed, 1 May 2013 07:25:26 -0700 (PDT) X-ASG-Debug-ID: 1367418324-04cbb03c2fb1120001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id mBBkeGLkcxOoQQ8k (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 May 2013 07:25:24 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r41EPL5o006948 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 1 May 2013 14:25:22 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EPKhl028288 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 1 May 2013 14:25:21 GMT Received: from abhmt118.oracle.com (abhmt118.oracle.com [141.146.116.70]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EPKep005644; Wed, 1 May 2013 14:25:20 GMT Received: from [192.168.1.102] (/221.223.96.52) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 07:25:20 -0700 Message-ID: <518125C9.8000008@oracle.com> Date: Wed, 01 May 2013 22:25:13 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" CC: Dave Chinner , Mark Tinguely Subject: [PATCH 1/2] xfs: Remove XFS_MOUNT_RETERR Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH 1/2] xfs: Remove XFS_MOUNT_RETERR Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367418324 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header From: Jie Liu XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and so we always be emitting a warning and returning an error. Hence, we can remove it and get rid of a couple of redundant check up against it at xfs_upate_alignment(). Thanks Dave Chinner for the confirmation. Signed-off-by: Jie Liu Cc: Dave Chinner Cc: Mark Tinguely --- fs/xfs/xfs_mount.c | 39 ++++++++++++--------------------------- fs/xfs/xfs_mount.h | 2 -- fs/xfs/xfs_super.c | 5 +---- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 3806088..29e8de8 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -872,42 +872,27 @@ xfs_update_alignment(xfs_mount_t *mp) */ if ((BBTOB(mp->m_dalign) & mp->m_blockmask) || (BBTOB(mp->m_swidth) & mp->m_blockmask)) { - if (mp->m_flags & XFS_MOUNT_RETERR) { - xfs_warn(mp, "alignment check failed: " - "(sunit/swidth vs. blocksize)"); - return XFS_ERROR(EINVAL); - } - mp->m_dalign = mp->m_swidth = 0; + xfs_warn(mp, "alignment check failed: " + "(sunit/swidth vs. blocksize)"); + return XFS_ERROR(EINVAL); } else { /* * Convert the stripe unit and width to FSBs. */ mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign); if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) { - if (mp->m_flags & XFS_MOUNT_RETERR) { - xfs_warn(mp, "alignment check failed: " - "(sunit/swidth vs. ag size)"); - return XFS_ERROR(EINVAL); - } - xfs_warn(mp, - "stripe alignment turned off: sunit(%d)/swidth(%d) " - "incompatible with agsize(%d)", - mp->m_dalign, mp->m_swidth, - sbp->sb_agblocks); - - mp->m_dalign = 0; - mp->m_swidth = 0; + xfs_warn(mp, "alignment check failed: " + "sunit(%d)/swidth(%d) incompatible with agsize(%d)", + mp->m_dalign, mp->m_swidth, + sbp->sb_agblocks); + return XFS_ERROR(EINVAL); } else if (mp->m_dalign) { mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth); } else { - if (mp->m_flags & XFS_MOUNT_RETERR) { - xfs_warn(mp, "alignment check failed: " - "sunit(%d) less than bsize(%d)", - mp->m_dalign, - mp->m_blockmask +1); - return XFS_ERROR(EINVAL); - } - mp->m_swidth = 0; + xfs_warn(mp, "alignment check failed: " + "sunit(%d) less than bsize(%d)", + mp->m_dalign, mp->m_blockmask + 1); + return XFS_ERROR(EINVAL); } } diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index bc90706..8145412 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -230,8 +230,6 @@ typedef struct xfs_mount { operations, typically for disk errors in metadata */ #define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */ -#define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to - user */ #define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment allocations */ #define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index ea341ce..51da4d2 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -446,11 +446,8 @@ done: * Before the mount call ends we will convert * these to FSBs. */ - if (dsunit) { + if (dsunit) mp->m_dalign = dsunit; - mp->m_flags |= XFS_MOUNT_RETERR; - } - if (dswidth) mp->m_swidth = dswidth; } -- 1.7.9.5 From jeff.liu@oracle.com Wed May 1 09:25:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DA7F77F9B for ; Wed, 1 May 2013 09:25:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 584F7AC001 for ; Wed, 1 May 2013 07:25:30 -0700 (PDT) X-ASG-Debug-ID: 1367418328-04cb6c66e2af560001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id BoAvyiDafS55EzoT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 May 2013 07:25:28 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r41EPPHX016446 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 1 May 2013 14:25:26 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EPPHt013008 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 1 May 2013 14:25:26 GMT Received: from abhmt107.oracle.com (abhmt107.oracle.com [141.146.116.59]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EPP2d005743; Wed, 1 May 2013 14:25:25 GMT Received: from [192.168.1.102] (/221.223.96.52) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 07:25:25 -0700 Message-ID: <518125CF.3050806@oracle.com> Date: Wed, 01 May 2013 22:25:19 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" CC: Mark Tinguely , Dave Chinner Subject: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367418328 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header From: Jie Liu As per the mount man page, sunit and swidth can be changed via mount options. For XFS, on the face of it, those options seems works if the specified alignments is properly, e.g. # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt # mount | grep sdb1 /dev/sdb1 on /mnt type xfs (rw,sunit=4096,swidth=8192) However, neither sunit nor swidth is shown from the xfs_info output. # xfs_info /mnt meta-data=/dev/sdb1 isize=256 agcount=4, agsize=262144 blks = sectsz=512 attr=2 data = bsize=4096 blocks=1048576, imaxpct=25 = sunit=0 swidth=0 blks ^^^^^^^^^^^^^^^^^^^^^^^^^^ naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 The reason is that the alignment can only be changed if the relevant super block is already configured with alignments, otherwise, the given value is silently ignored. With this fix, the attempt to mount a storage without strip alignment setup on a super block will get an error with a warning in syslog to indicate the true cause. # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt mount: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so # dmesg|tail ....... XFS (sdb1): can not change alignment: superblock does not support data alignment Signed-off-by: Jie Liu Cc: Mark Tinguely Cc: Dave Chinner --- fs/xfs/xfs_mount.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 29e8de8..2836ef6 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -909,6 +909,10 @@ xfs_update_alignment(xfs_mount_t *mp) sbp->sb_width = mp->m_swidth; mp->m_update_flags |= XFS_SB_WIDTH; } + } else { + xfs_warn(mp, "cannot change alignment: " + "superblock does not support data alignment"); + return XFS_ERROR(EINVAL); } } else if ((mp->m_flags & XFS_MOUNT_NOALIGN) != XFS_MOUNT_NOALIGN && xfs_sb_version_hasdalign(&mp->m_sb)) { -- 1.7.9.5 From jeff.liu@oracle.com Wed May 1 09:26:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BCBFF7F9B for ; Wed, 1 May 2013 09:26:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 47753AC001 for ; Wed, 1 May 2013 07:26:37 -0700 (PDT) X-ASG-Debug-ID: 1367418395-04cbb03c2cb12b0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id QjrUpNiLlhEoXHIp (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 May 2013 07:26:35 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r41EQXcK017612 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 1 May 2013 14:26:34 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EQXe6007768 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Wed, 1 May 2013 14:26:34 GMT Received: from abhmt115.oracle.com (abhmt115.oracle.com [141.146.116.67]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EQXh0018240 for ; Wed, 1 May 2013 14:26:33 GMT Received: from [192.168.1.102] (/221.223.96.52) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 07:26:33 -0700 Message-ID: <51812614.2010807@oracle.com> Date: Wed, 01 May 2013 22:26:28 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH] xfs: Remove xfs_krash from struct xfs_mount Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] xfs: Remove xfs_krash from struct xfs_mount Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367418395 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Remove struct xfs_krash from xfs_mount as there is no user of it nowadays. Signed-off-by: Jie Liu --- fs/xfs/xfs_mount.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index bc90706..b68e56b 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -192,8 +192,6 @@ typedef struct xfs_mount { xfs_dablk_t m_dirleafblk; /* blockno of dir non-data v2 */ xfs_dablk_t m_dirfreeblk; /* blockno of dirfreeindex v2 */ uint m_chsize; /* size of next field */ - struct xfs_chash *m_chash; /* fs private inode per-cluster - * hash table */ atomic_t m_active_trans; /* number trans frozen */ #ifdef HAVE_PERCPU_SB xfs_icsb_cnts_t __percpu *m_sb_cnts; /* per-cpu superblock counters */ -- 1.7.9.5 From jeff.liu@oracle.com Wed May 1 09:27:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ED6D07F4C for ; Wed, 1 May 2013 09:27:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id CAF9D304066 for ; Wed, 1 May 2013 07:27:43 -0700 (PDT) X-ASG-Debug-ID: 1367418462-04bdf077c9b0430001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id zamhVrc07eGQOhOv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 May 2013 07:27:42 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r41ERfrk009318 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 1 May 2013 14:27:42 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EReqn017312 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Wed, 1 May 2013 14:27:41 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41EReH3017299 for ; Wed, 1 May 2013 14:27:40 GMT Received: from [192.168.1.102] (/221.223.96.52) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 07:27:40 -0700 Message-ID: <51812658.4060505@oracle.com> Date: Wed, 01 May 2013 22:27:36 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH] xfs: Remove XFS_SWRITE_LOG_RES macros Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] xfs: Remove XFS_SWRITE_LOG_RES macros Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367418462 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Remove the XFS_SWRITE_LOG_RES macros as there is no user of it nowadays. Signed-off-by: Jie Liu --- fs/xfs/xfs_trans.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index cd29f61..cdff1c6 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -246,10 +246,8 @@ struct xfs_log_item_desc { #define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc) #define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero) #define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree) -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) /* - * Logging the inode timestamps on an fsync -- same as SWRITE - * as long as SWRITE logs the entire inode core + * Logging the inode timestamps on an fsync */ #define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) #define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) -- 1.7.9.5 From sbohrer@rgmadvisors.com Wed May 1 09:43:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1256929DF8 for ; Wed, 1 May 2013 09:43:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D5D99304066 for ; Wed, 1 May 2013 07:43:51 -0700 (PDT) X-ASG-Debug-ID: 1367419428-04bdf077c7b1690001-NocioJ Received: from na3sys009aog103.obsmtp.com (na3sys009aog103.obsmtp.com [74.125.149.71]) by cuda.sgi.com with SMTP id FAcsGTL9Znv8mQR6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 May 2013 07:43:50 -0700 (PDT) X-Barracuda-Envelope-From: sbohrer@rgmadvisors.com X-Barracuda-RBL-Trusted-Forwarder: 74.125.149.71 Received: from mail-ob0-f198.google.com ([209.85.214.198]) (using TLSv1) by na3sys009aob103.postini.com ([74.125.148.12]) with SMTP ID DSNKUYEqI/cSSyWYfq0l0RV6tbUejfXrbFIg@postini.com; Wed, 01 May 2013 07:43:50 PDT Received: by mail-ob0-f198.google.com with SMTP id tb18so8339115obb.1 for ; Wed, 01 May 2013 07:43:47 -0700 (PDT) X-Barracuda-BBL-Trusted-Forwarder: 209.85.214.198 X-Barracuda-RBL-Trusted-Forwarder: 209.85.214.198 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-received:date:from:to:subject:message-id:mime-version :user-agent:content-type:content-disposition:x-gm-message-state; bh=RuEg2ytj0XaRUO6Z2oC3Y9yQ9KZTgicurhzF6KfhkCQ=; b=OzkT23DQNc6jOVEzz/dha0Cf3A7Y1ye8OzUT0ahOs1hHLUL1e/ltzRqC7CS3Hkm+Yg FooqCH9XgfbKL3NusPhyFfwxZBGbs+JtJpdifXsSK2ijT+uhtx0N8rOj/DiQpFUvSlWx ecVEws9of+MdOlh4Wbwa1YiXluTjfiQKyZGy3GvsMQ29bbwB1chsme3fLvXOmtpMoDXN j8LugxX57ux6ZnV2d1xtoobgvc6U4Q8+HLDdmaHNcQ3rkZk07EV1q5DnFg0+B3ZZimKR TOqGuMQZLDpjgkHiRCBCK9O9nYIeh2roydO9Ahl2R4/U7FZ9XQVcSQmEt9pzmSU8Vkuk nBfg== X-Barracuda-BBL-IP: nil X-Received: by 10.50.78.229 with SMTP id e5mr13037510igx.85.1367419427551; Wed, 01 May 2013 07:43:47 -0700 (PDT) X-Received: by 10.50.78.229 with SMTP id e5mr13037507igx.85.1367419427480; Wed, 01 May 2013 07:43:47 -0700 (PDT) Received: from BohrerMBP.rgmadvisors.com ([173.227.92.65]) by mx.google.com with ESMTPSA id q3sm3986412igw.0.2013.05.01.07.43.46 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 01 May 2013 07:43:46 -0700 (PDT) Date: Wed, 1 May 2013 09:43:41 -0500 X-Barracuda-Apparent-Source-IP: 173.227.92.65 From: Shawn Bohrer To: xfs@oss.sgi.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: deadlock on vmap_area_lock Message-ID: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> X-ASG-Orig-Subj: deadlock on vmap_area_lock MIME-Version: 1.0 User-Agent: Mutt/1.5.21 (2010-09-15) Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline X-Gm-Message-State: ALoCoQnJcxZCZ3zyE/7o2hNqgSc2Z1FuozSAjIG+08JVDTbW1ma2SlMT+KWVNkV0TjMLjn+Rka93rY5ie7pqtalJYRUkqo+Z7my/wMe+egiSoe/2MBuHd9MRaUUjhdPZo4pzsFHyTF0nn0JToTP3TEnh7Z+QM/TEnA== X-Barracuda-Connect: na3sys009aog103.obsmtp.com[74.125.149.71] X-Barracuda-Start-Time: 1367419430 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- I've got two compute clusters with around 350 machines each which are running kernels based off of 3.1.9 (Yes I realize this is ancient by todays standards). All of the machines run a 'find' command once an hour on one of the mounted XFS filesystems. Occasionally these find commands get stuck requiring a reboot of the system. I took a peek today and see this with perf: 72.22% find [kernel.kallsyms] [k] _raw_spin_lock | --- _raw_spin_lock | |--98.84%-- vm_map_ram | _xfs_buf_map_pages | xfs_buf_get | xfs_buf_read | xfs_trans_read_buf | xfs_da_do_buf | xfs_da_read_buf | xfs_dir2_block_getdents | xfs_readdir | xfs_file_readdir | vfs_readdir | sys_getdents | system_call_fastpath | __getdents64 | |--1.12%-- _xfs_buf_map_pages | xfs_buf_get | xfs_buf_read | xfs_trans_read_buf | xfs_da_do_buf | xfs_da_read_buf | xfs_dir2_block_getdents | xfs_readdir | xfs_file_readdir | vfs_readdir | sys_getdents | system_call_fastpath | __getdents64 --0.04%-- [...] Looking at the code my best guess is that we are spinning on vmap_area_lock, but I could be wrong. This is the only process spinning on the machine so I'm assuming either another process has blocked while holding the lock, or perhaps this find process has tried to acquire the vmap_area_lock twice? I've skimmed through the change logs between 3.1 and 3.9 but nothing stood out as fix for this bug. Does this ring a bell with anyone? If I have a machine that is currently in one of these stuck states does anyone have any tips to identifying the processes currently holding the lock? Additionally as I mentioned before I have two clusters of roughly equal size though one cluster hits this issue more frequently. On that cluster with approximately 350 machines we get about 10 stuck machines a month. The other cluster has about 450 machines but we only get about 1 or 2 stuck machines a month. Both clusters run the same find command every hour, but the workloads on the machines are different. The cluster that hits the issue more frequently tends to run more memory intensive jobs. I'm open to building some debug kernels to help track this down, though I can't upgrade all of the machines in one shot so it may take a while to reproduce. I'm happy to provide any other information if people have questions. Thanks, Shawn -- --------------------------------------------------------------- This email, along with any attachments, is confidential. If you believe you received this message in error, please contact the sender immediately and delete all copies of the message. Thank you. From rientjes@google.com Wed May 1 10:57:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A85497F76 for ; Wed, 1 May 2013 10:57:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 96025304064 for ; Wed, 1 May 2013 08:57:41 -0700 (PDT) X-ASG-Debug-ID: 1367423860-04cb6c66e1b4bf0001-NocioJ Received: from mail-pa0-f45.google.com (mail-pa0-f45.google.com [209.85.220.45]) by cuda.sgi.com with ESMTP id SLj1J1G7uFl7rDbF (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 May 2013 08:57:40 -0700 (PDT) X-Barracuda-Envelope-From: rientjes@google.com X-Barracuda-Apparent-Source-IP: 209.85.220.45 X-Barracuda-IPDD: Level1 [google.com/209.85.220.45] Received: by mail-pa0-f45.google.com with SMTP id lf10so926370pab.32 for ; Wed, 01 May 2013 08:57:39 -0700 (PDT) X-Barracuda-IPDD: Level1 [google.com/209.85.220.45] X-Barracuda-IPDD: Level1 [google.com/209.85.220.45] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:date:from:x-x-sender:to:cc:subject:in-reply-to :message-id:references:user-agent:mime-version:content-type; bh=inMMfCfbPE0vfF/WAW6o3/mzFDP77NUJ/tRyJ4+W7qg=; b=YdpU8nQaXAHioB3zEwl6ixzZndp+MlkTe3/59LP5fei4HsltbuRTlsjzYJncD0i0Y0 hpkwc09K5heuz6ONzAjABkhAKDk9Ctu6PdSx8/iU3akkbGnr6bp2RPfh2rlpPBWPwir8 ebR5M9yIww1Vm9O/AKzeHz/NHyqJqJLH8Z2qgPOmqcXkevTZow5irby/eyRxTNpXCYT2 fxY99skm6Pc7sH8EALgoO1y2LIjVcp9EdemMTxjxkm6MUZM7C7hJ13/hHZaAK01fQuQA +44ORRUdU+kBENDAQB+ilm6vm1X3KLUmHzpQoguYksgmJP/gQH6lSBEkFxxTFMUHxlvk MuHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:date:from:x-x-sender:to:cc:subject:in-reply-to :message-id:references:user-agent:mime-version:content-type :x-gm-message-state; bh=inMMfCfbPE0vfF/WAW6o3/mzFDP77NUJ/tRyJ4+W7qg=; b=GmOshfqpJii9QjpoT8a3UeF6UX+PgTw2+pdDfrMFgW6277OaCjjqmzPfpEMrPysyG9 r+4iFWmskmPym52+t9iqtZt76tK7VpXXz6eNT9JAU/vIEahqNt4snNGNlNpHbuEwvpcy vuPKZqEmoir3xE3ALkKSAxw1HzEgUZKLCm/SLCWFj60FskDiVnycYTKZfAvpQAG1P+tc 84PN9T2lgh9iFjVomQCjy3sKo08nK845lrFT0bJc6OgMA0RaF1QheAdmcs+n00Ghu54Z TqiwYZgnSorgp1ojkS/Gy1Sf1c9nyNKFwxwMFFOhf/TXwUljcWQ3osDXc7cUBbu4R3h6 SE9Q== X-Received: by 10.68.216.37 with SMTP id on5mr4949036pbc.35.1367423859800; Wed, 01 May 2013 08:57:39 -0700 (PDT) Received: from [2620:0:1008:1101:be30:5bff:fed8:5e64] ([2620:0:1008:1101:be30:5bff:fed8:5e64]) by mx.google.com with ESMTPSA id do4sm3475488pbc.8.2013.05.01.08.57.38 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 01 May 2013 08:57:39 -0700 (PDT) Date: Wed, 1 May 2013 08:57:38 -0700 (PDT) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: Shawn Bohrer cc: xfs@oss.sgi.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: deadlock on vmap_area_lock In-Reply-To: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> X-ASG-Orig-Subj: Re: deadlock on vmap_area_lock Message-ID: References: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Gm-Message-State: ALoCoQl+Uzmo8ZYUsiZ1vPl/66Zh4DXdV54iUM9uK+POpliq4p9Cxlrw/HJYccRY2T3HAOhARlltcEsPzn/oBccI4cb9kRVAicwjcnfaIl6gQ1tM/aKD99xFiqh5WKmJKsB9Bt5IhgsW7BcxIrq/+KaVkrzlJozMSGlU1R2C0S+Sv9SlAYjpWS8JjZ6I3Ul6OcMO4KHzc4yQ X-Barracuda-Connect: mail-pa0-f45.google.com[209.85.220.45] X-Barracuda-Start-Time: 1367423860 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129713 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Wed, 1 May 2013, Shawn Bohrer wrote: > I've got two compute clusters with around 350 machines each which are > running kernels based off of 3.1.9 (Yes I realize this is ancient by > todays standards). All of the machines run a 'find' command once an > hour on one of the mounted XFS filesystems. Occasionally these find > commands get stuck requiring a reboot of the system. I took a peek > today and see this with perf: > > 72.22% find [kernel.kallsyms] [k] _raw_spin_lock > | > --- _raw_spin_lock > | > |--98.84%-- vm_map_ram > | _xfs_buf_map_pages > | xfs_buf_get > | xfs_buf_read > | xfs_trans_read_buf > | xfs_da_do_buf > | xfs_da_read_buf > | xfs_dir2_block_getdents > | xfs_readdir > | xfs_file_readdir > | vfs_readdir > | sys_getdents > | system_call_fastpath > | __getdents64 > | > |--1.12%-- _xfs_buf_map_pages > | xfs_buf_get > | xfs_buf_read > | xfs_trans_read_buf > | xfs_da_do_buf > | xfs_da_read_buf > | xfs_dir2_block_getdents > | xfs_readdir > | xfs_file_readdir > | vfs_readdir > | sys_getdents > | system_call_fastpath > | __getdents64 > --0.04%-- [...] > > Looking at the code my best guess is that we are spinning on > vmap_area_lock, but I could be wrong. This is the only process > spinning on the machine so I'm assuming either another process has > blocked while holding the lock, or perhaps this find process has tried > to acquire the vmap_area_lock twice? > Significant spinlock contention doesn't necessarily mean that there's a deadlock, but it also doesn't mean the opposite. Depending on your definition of "occassionally", would it be possible to run with CONFIG_PROVE_LOCKING and CONFIG_LOCKDEP to see if it uncovers any real deadlock potential? From jeff.liu@oracle.com Wed May 1 10:58:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AA3B37F80 for ; Wed, 1 May 2013 10:58:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4D252304064 for ; Wed, 1 May 2013 08:58:42 -0700 (PDT) X-ASG-Debug-ID: 1367423919-04bdf077c6b4f70001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id 0psa1JuCxfZ3ZYvv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 May 2013 08:58:39 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r41Fwbgg027035 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 1 May 2013 15:58:38 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41Fwbkt020267 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 1 May 2013 15:58:38 GMT Received: from abhmt106.oracle.com (abhmt106.oracle.com [141.146.116.58]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r41FwbXR007999; Wed, 1 May 2013 15:58:37 GMT Received: from [192.168.1.102] (/221.223.96.52) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 08:58:36 -0700 Message-ID: <51813BA5.3070306@oracle.com> Date: Wed, 01 May 2013 23:58:29 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" CC: Dave Chinner Subject: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367423919 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129713 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, About two weeks ago, Dave has found an issue by running xfstests/297. http://oss.sgi.com/archives/xfs/2013-03/msg00273.html According to our previous discussion, if the log stripe unit is configured, we should take it into account as it will dynamically increase the log reservation twice of it per ticket. This patch is trying to fix it by checking the given log space against the maximum request among those transactions(this procedure is implemented similar to xfsprogs/mkfs/maxres.c), because the fundamental limit is that no single transaction can be larger than half of the log. Also, looks at least another two log stripe unit should be added when calculating the minimum log space, or else I can simply trigger a DEAD LOOP via create large number of files, I think I need some time to digest Dave's comments posted on original bug ticket, i.e. >> The question is this: how much space do we need to reserve. I'm >> thinking a minimum of 4*lsu - 2*lsu for the existing CIL context, and >> another 2*lsu for any queued ticket waiting for space to come >> available. Put simply, with this fix, mount a partition with an improper log space setup vs log stripe unit will failed although mkfs still works. Ah, maybe we can improve the user space xfs_mkfs with some pre-checkup similar to the implementation inside kernel? Besides that, it will drop a warning to syslog and the suggested log space for the given log stripe unit is shown there, which looks like the following: # mkfs.xfs -f -b size=512 -d agcount=16,su=256k,sw=12 -l su=256k,size=2560b /dev/sdb1 meta-data=/dev/sdb1 isize=256 agcount=16, agsize=524288 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=512 blocks=8388608, imaxpct=25 = sunit=512 swidth=6144 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=512 blocks=2560, version=2 = sectsz=512 sunit=512 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # mount /dev/sdb1 /xfs1 mount: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so # dmesg: ....... XFS (sdb1): log space of 2560 blocks too small, minimum request 6656 XFS (sdb1): log space validation failed XFS (sdb1): log mount failed Tests: Ran some cases in xfstests as well as a few self-defined Bonnie++/FIO tests with above configuration(6656 log blocks), looks the current fix works, at least no crash to me. :) But I have not yet dig into the detailed of how the suggested minimum log space would affect the performance, given that the AIL push thresholds is defined to 25% of the log space, a small logs might introduce IO overheads for pushing AIL too frequently. In addition, considering the backgroup CIL commit threshold is 1/8 of the log, this would also impact the log IO throughput IMHO. Maybe we can figure out an optimized log space combine those two cases and drop it to syslog along with the minimum size? To Dave, Sorry for the delay in drop this patch since I have mentioned that I'll post a fix last night. However, I have ran into an issue when testing it by creating/removing a tons of files in parallel at that time :( --- fs/xfs/xfs_log.c | 130 ++++++++++++++++++++++++++++++++++------- fs/xfs/xfs_log.h | 3 + fs/xfs/xfs_mount.c | 1 + fs/xfs/xfs_mount.h | 61 +++++++++++--------- fs/xfs/xfs_trans.c | 163 +++++++++++++++++++++++++++++++++++++++++++--------- fs/xfs/xfs_trans.h | 61 ++++++++++---------- 6 files changed, 314 insertions(+), 105 deletions(-) diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index eec226f..3efd1d2 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -598,6 +598,64 @@ xfs_log_release_iclog( } /* + * Check if the specified log space is sufficient for a file system + * with a given log strip unit. + */ +STATIC int +xfs_mount_validate_log_size( + struct xfs_mount *mp) +{ + struct xlog *log = mp->m_log; + struct xfs_trans_res tres; + int unit_bytes; + int min_lblks, lsu = 0; + + xfs_max_trans_res_by_mount(mp, &tres); + + /* + * Figure out the total space needed for the maximum transaction + * log space reservation by adding some extra spaces which should + * be taken into account. + */ + unit_bytes = xlog_ticket_unit_res(log, &tres); + if (tres.tr_cnt > 1) + unit_bytes = unit_bytes * tres.tr_cnt; + + min_lblks = BTOBB(unit_bytes); + /* + * FIXME: why we should add another 2 log strip units if it + * is specified? As per my tryout, creat a dozens dirs/files + * on a partition without another 2 log strip units will + * cause DEAD LOOP, it's fine if taken this into account. + * + * As per Dave's comments: + * I'm thinking a minimum of 4*lsu - 2*lsu for the existing + * CIL context, and another 2*lsu for any queued ticket + * waiting for space to come available. + */ + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && + log->l_mp->m_sb.sb_logsunit > 1) + lsu = BTOBB(log->l_mp->m_sb.sb_logsunit); + + /* + * The fundamental limit is that no single transaction can be + * larger than half the size of the log space, take another + * two log strip unit account as well. + */ + if ((log->l_logBBsize >> 1) < (min_lblks + lsu)) { + xfs_warn(mp, + "log space of %d blocks too small, minimum request %d", + log->l_logBBsize, + roundup((int)min_lblks << 1, (int)lsu) + + 2 * lsu); + + return XFS_ERROR(EINVAL); + } + + return 0; +} + +/* * Mount a log filesystem * * mp - ubiquitous xfs mount point structure @@ -630,6 +688,12 @@ xfs_log_mount( goto out; } + error = xfs_mount_validate_log_size(mp); + if (error) { + xfs_warn(mp, "log space validation failed"); + goto out_free_log; + } + /* * Initialize the AIL now we have a log. */ @@ -3377,24 +3441,23 @@ xfs_log_ticket_get( } /* - * Allocate and initialise a new log ticket. + * Figure out how many bytes would be reserved totally per ticket. + * Especially, take log strip unit into account if it is specified. + * + * FIXME: this is totally copied from xlog_ticket_alloc(), it's better + * to introduce a new helper to calculate the extra space reservation + * that can be shared with xlog_ticket_alloc() if the current though + * is reasonable. */ -struct xlog_ticket * -xlog_ticket_alloc( - struct xlog *log, - int unit_bytes, - int cnt, - char client, - bool permanent, - xfs_km_flags_t alloc_flags) +int +xlog_ticket_unit_res( + struct xlog *log, + struct xfs_trans_res *tres) { - struct xlog_ticket *tic; - uint num_headers; - int iclog_space; - - tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); - if (!tic) - return NULL; + uint unit_bytes = tres->tr_res; + int total_bytes = unit_bytes; + int iclog_space; + uint num_headers; /* * Permanent reservations have up to 'cnt'-1 active log operations @@ -3459,8 +3522,8 @@ xlog_ticket_alloc( /* add extra header reservations if we overrun */ while (!num_headers || - howmany(unit_bytes, iclog_space) > num_headers) { - unit_bytes += sizeof(xlog_op_header_t); + howmany(total_bytes, iclog_space) > num_headers) { + total_bytes += sizeof(xlog_op_header_t); num_headers++; } unit_bytes += log->l_iclog_hsize * num_headers; @@ -3478,11 +3541,38 @@ xlog_ticket_alloc( unit_bytes += 2*BBSIZE; } + return unit_bytes; +} + +/* + * Allocate and initialise a new log ticket. + */ +struct xlog_ticket * +xlog_ticket_alloc( + struct xlog *log, + int unit_bytes, + int cnt, + char client, + bool permanent, + xfs_km_flags_t alloc_flags) +{ + struct xlog_ticket *tic; + struct xfs_trans_res tres; + int unit_res; + + tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); + if (!tic) + return NULL; + + tres.tr_res = unit_bytes; + tres.tr_cnt = cnt; + unit_res = xlog_ticket_unit_res(log, &tres); + atomic_set(&tic->t_ref, 1); tic->t_task = current; INIT_LIST_HEAD(&tic->t_queue); - tic->t_unit_res = unit_bytes; - tic->t_curr_res = unit_bytes; + tic->t_unit_res = unit_res; + tic->t_curr_res = unit_res; tic->t_cnt = cnt; tic->t_ocnt = cnt; tic->t_tid = random32(); diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h index 5caee96..d3f7187 100644 --- a/fs/xfs/xfs_log.h +++ b/fs/xfs/xfs_log.h @@ -119,11 +119,13 @@ typedef struct xfs_log_callback { #ifdef __KERNEL__ /* Log manager interfaces */ struct xfs_mount; +struct xlog; struct xlog_in_core; struct xlog_ticket; struct xfs_log_item; struct xfs_item_ops; struct xfs_trans; +struct xfs_trans_res; void xfs_log_item_init(struct xfs_mount *mp, struct xfs_log_item *item, @@ -184,6 +186,7 @@ bool xfs_log_item_in_current_chkpt(struct xfs_log_item *lip); void xfs_log_work_queue(struct xfs_mount *mp); void xfs_log_worker(struct work_struct *work); void xfs_log_quiesce(struct xfs_mount *mp); +int xlog_ticket_unit_res(struct xlog *log, struct xfs_trans_res *tres); #endif #endif /* __XFS_LOG_H__ */ diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 2836ef6..cb67f96 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -20,6 +20,7 @@ #include "xfs_types.h" #include "xfs_bit.h" #include "xfs_log.h" +#include "xfs_log_priv.h" #include "xfs_inum.h" #include "xfs_trans.h" #include "xfs_trans_priv.h" diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 8145412..3f9a73c 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -18,35 +18,40 @@ #ifndef __XFS_MOUNT_H__ #define __XFS_MOUNT_H__ +typedef struct xfs_trans_res { + uint tr_res; + int tr_cnt; +} xfs_tr_t; + typedef struct xfs_trans_reservations { - uint tr_write; /* extent alloc trans */ - uint tr_itruncate; /* truncate trans */ - uint tr_rename; /* rename trans */ - uint tr_link; /* link trans */ - uint tr_remove; /* unlink trans */ - uint tr_symlink; /* symlink trans */ - uint tr_create; /* create trans */ - uint tr_mkdir; /* mkdir trans */ - uint tr_ifree; /* inode free trans */ - uint tr_ichange; /* inode update trans */ - uint tr_growdata; /* fs data section grow trans */ - uint tr_swrite; /* sync write inode trans */ - uint tr_addafork; /* cvt inode to attributed trans */ - uint tr_writeid; /* write setuid/setgid file */ - uint tr_attrinval; /* attr fork buffer invalidation */ - uint tr_attrsetm; /* set/create an attribute at mount time */ - uint tr_attrsetrt; /* set/create an attribute at runtime */ - uint tr_attrrm; /* remove an attribute */ - uint tr_clearagi; /* clear bad agi unlinked ino bucket */ - uint tr_growrtalloc; /* grow realtime allocations */ - uint tr_growrtzero; /* grow realtime zeroing */ - uint tr_growrtfree; /* grow realtime freeing */ - uint tr_qm_sbchange; /* change quota flags */ - uint tr_qm_setqlim; /* adjust quota limits */ - uint tr_qm_dqalloc; /* allocate quota on disk */ - uint tr_qm_quotaoff; /* turn quota off */ - uint tr_qm_equotaoff;/* end of turn quota off */ - uint tr_sb; /* modify superblock */ + xfs_tr_t tr_write; /* extent alloc trans */ + xfs_tr_t tr_itruncate; /* truncate trans */ + xfs_tr_t tr_rename; /* rename trans */ + xfs_tr_t tr_link; /* link trans */ + xfs_tr_t tr_remove; /* unlink trans */ + xfs_tr_t tr_symlink; /* symlink trans */ + xfs_tr_t tr_create; /* create trans */ + xfs_tr_t tr_mkdir; /* mkdir trans */ + xfs_tr_t tr_ifree; /* inode free trans */ + xfs_tr_t tr_ichange; /* inode update trans */ + xfs_tr_t tr_growdata; /* fs data section grow trans */ + xfs_tr_t tr_swrite; /* sync write inode trans */ + xfs_tr_t tr_addafork; /* cvt inode to attributed trans */ + xfs_tr_t tr_writeid; /* write setuid/setgid file */ + xfs_tr_t tr_attrinval; /* attr fork buffer invalidation */ + xfs_tr_t tr_attrsetm; /* set/create an attribute at mount time */ + xfs_tr_t tr_attrsetrt; /* set/create an attribute at runtime */ + xfs_tr_t tr_attrrm; /* remove an attribute */ + xfs_tr_t tr_clearagi; /* clear bad agi unlinked ino bucket */ + xfs_tr_t tr_growrtalloc; /* grow realtime allocations */ + xfs_tr_t tr_growrtzero; /* grow realtime zeroing */ + xfs_tr_t tr_growrtfree; /* grow realtime freeing */ + xfs_tr_t tr_qm_sbchange; /* change quota flags */ + xfs_tr_t tr_qm_setqlim; /* adjust quota limits */ + xfs_tr_t tr_qm_dqalloc; /* allocate quota on disk */ + xfs_tr_t tr_qm_quotaoff; /* turn quota off */ + xfs_tr_t tr_qm_equotaoff;/* end of turn quota off */ + xfs_tr_t tr_sb; /* modify superblock */ } xfs_trans_reservations_t; #ifndef __KERNEL__ diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 2fd7c1f..f2b18a5 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -43,6 +43,7 @@ #include "xfs_inode_item.h" #include "xfs_log_priv.h" #include "xfs_buf_item.h" +#include "xfs_attr_leaf.h" #include "xfs_trace.h" kmem_zone_t *xfs_trans_zone; @@ -645,34 +646,140 @@ xfs_trans_init( { struct xfs_trans_reservations *resp = &mp->m_reservations; - resp->tr_write = xfs_calc_write_reservation(mp); - resp->tr_itruncate = xfs_calc_itruncate_reservation(mp); - resp->tr_rename = xfs_calc_rename_reservation(mp); - resp->tr_link = xfs_calc_link_reservation(mp); - resp->tr_remove = xfs_calc_remove_reservation(mp); - resp->tr_symlink = xfs_calc_symlink_reservation(mp); - resp->tr_create = xfs_calc_create_reservation(mp); - resp->tr_mkdir = xfs_calc_mkdir_reservation(mp); - resp->tr_ifree = xfs_calc_ifree_reservation(mp); - resp->tr_ichange = xfs_calc_ichange_reservation(mp); - resp->tr_growdata = xfs_calc_growdata_reservation(mp); - resp->tr_swrite = xfs_calc_swrite_reservation(mp); - resp->tr_writeid = xfs_calc_writeid_reservation(mp); - resp->tr_addafork = xfs_calc_addafork_reservation(mp); - resp->tr_attrinval = xfs_calc_attrinval_reservation(mp); - resp->tr_attrsetm = xfs_calc_attrsetm_reservation(mp); - resp->tr_attrsetrt = xfs_calc_attrsetrt_reservation(mp); - resp->tr_attrrm = xfs_calc_attrrm_reservation(mp); - resp->tr_clearagi = xfs_calc_clear_agi_bucket_reservation(mp); - resp->tr_growrtalloc = xfs_calc_growrtalloc_reservation(mp); - resp->tr_growrtzero = xfs_calc_growrtzero_reservation(mp); - resp->tr_growrtfree = xfs_calc_growrtfree_reservation(mp); - resp->tr_qm_sbchange = xfs_calc_qm_sbchange_reservation(mp); - resp->tr_qm_setqlim = xfs_calc_qm_setqlim_reservation(mp); - resp->tr_qm_dqalloc = xfs_calc_qm_dqalloc_reservation(mp); - resp->tr_qm_quotaoff = xfs_calc_qm_quotaoff_reservation(mp); - resp->tr_qm_equotaoff = xfs_calc_qm_quotaoff_end_reservation(mp); - resp->tr_sb = xfs_calc_sb_reservation(mp); + resp->tr_write.tr_res = xfs_calc_write_reservation(mp); + resp->tr_write.tr_cnt = XFS_WRITE_LOG_COUNT; + + resp->tr_itruncate.tr_res = xfs_calc_itruncate_reservation(mp); + resp->tr_itruncate.tr_cnt = XFS_ITRUNCATE_LOG_COUNT; + + resp->tr_rename.tr_res = xfs_calc_rename_reservation(mp); + resp->tr_rename.tr_cnt = XFS_RENAME_LOG_COUNT; + + resp->tr_link.tr_res = xfs_calc_link_reservation(mp); + resp->tr_link.tr_cnt = XFS_LINK_LOG_COUNT; + + resp->tr_remove.tr_res = xfs_calc_remove_reservation(mp); + resp->tr_remove.tr_cnt = XFS_REMOVE_LOG_COUNT; + + resp->tr_symlink.tr_res = xfs_calc_symlink_reservation(mp); + resp->tr_symlink.tr_cnt = XFS_SYMLINK_LOG_COUNT; + + resp->tr_create.tr_res = xfs_calc_create_reservation(mp); + resp->tr_create.tr_cnt = XFS_CREATE_LOG_COUNT; + + resp->tr_mkdir.tr_res = xfs_calc_mkdir_reservation(mp); + resp->tr_mkdir.tr_cnt = XFS_CREATE_LOG_COUNT; + + resp->tr_ifree.tr_res = xfs_calc_ifree_reservation(mp); + resp->tr_ifree.tr_cnt = XFS_INACTIVE_LOG_COUNT; + + resp->tr_ichange.tr_res = xfs_calc_ichange_reservation(mp); + resp->tr_ichange.tr_cnt = 0; + + resp->tr_growdata.tr_res = xfs_calc_growdata_reservation(mp); + resp->tr_growdata.tr_cnt = 0; + + resp->tr_swrite.tr_res = xfs_calc_swrite_reservation(mp); + resp->tr_swrite.tr_cnt = 0; + + resp->tr_writeid.tr_res = xfs_calc_writeid_reservation(mp); + resp->tr_writeid.tr_cnt = 0; + + resp->tr_addafork.tr_res = xfs_calc_addafork_reservation(mp); + resp->tr_addafork.tr_cnt = XFS_ADDAFORK_LOG_COUNT; + + resp->tr_attrinval.tr_res = xfs_calc_attrinval_reservation(mp); + resp->tr_attrinval.tr_cnt = XFS_ATTRINVAL_LOG_COUNT; + + resp->tr_attrsetm.tr_res = xfs_calc_attrsetm_reservation(mp); + resp->tr_attrsetm.tr_cnt = XFS_ATTRSET_LOG_COUNT; + + resp->tr_attrsetrt.tr_res = xfs_calc_attrsetrt_reservation(mp); + resp->tr_attrsetrt.tr_cnt = XFS_ATTRSET_LOG_COUNT; + + resp->tr_attrrm.tr_res = xfs_calc_attrrm_reservation(mp); + resp->tr_attrrm.tr_cnt = XFS_ATTRRM_LOG_COUNT; + + resp->tr_clearagi.tr_res = xfs_calc_clear_agi_bucket_reservation(mp); + resp->tr_clearagi.tr_cnt = 0; + + resp->tr_growrtalloc.tr_res = xfs_calc_growrtalloc_reservation(mp); + resp->tr_growrtalloc.tr_cnt = 0; + + resp->tr_growrtzero.tr_res = xfs_calc_growrtzero_reservation(mp); + resp->tr_growrtzero.tr_cnt = 0; + + resp->tr_growrtfree.tr_res = xfs_calc_growrtfree_reservation(mp); + resp->tr_growrtfree.tr_cnt = 0; + + resp->tr_qm_sbchange.tr_res = xfs_calc_qm_sbchange_reservation(mp); + resp->tr_qm_sbchange.tr_cnt = XFS_DEFAULT_LOG_COUNT; + + resp->tr_qm_setqlim.tr_res = xfs_calc_qm_setqlim_reservation(mp); + resp->tr_qm_setqlim.tr_cnt = XFS_DEFAULT_LOG_COUNT; + + resp->tr_qm_dqalloc.tr_res = xfs_calc_qm_dqalloc_reservation(mp); + resp->tr_qm_dqalloc.tr_cnt = XFS_WRITE_LOG_COUNT; + + resp->tr_qm_quotaoff.tr_res = xfs_calc_qm_quotaoff_reservation(mp); + resp->tr_qm_quotaoff.tr_cnt = XFS_DEFAULT_LOG_COUNT; + + resp->tr_qm_equotaoff.tr_res = xfs_calc_qm_quotaoff_end_reservation(mp); + resp->tr_qm_equotaoff.tr_cnt = XFS_DEFAULT_LOG_COUNT; + + resp->tr_sb.tr_res = xfs_calc_sb_reservation(mp); + resp->tr_sb.tr_cnt = XFS_DEFAULT_LOG_COUNT; +} + +STATIC void +xfs_max_attrsetm_trans_res_adjust( + struct xfs_mount *mp) +{ + int local; + int size; + int nblks; + int res; + + /* + * Determine space the maximal sized attribute will use, + * to calculate the largest reservatoin size needed. + */ + size = xfs_attr_leaf_newentsize(MAXNAMELEN, 64 * 1024, + mp->m_sb.sb_blocksize, &local); + ASSERT(!local); + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); + nblks += XFS_B_TO_FSB(mp, size); + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); + res = XFS_ATTRSETM_LOG_RES(mp) + XFS_ATTRSETRT_LOG_RES(mp) * nblks; + mp->m_reservations.tr_attrsetm.tr_res = res; +} + +/* + * Figure out the total log space a transaction would required in terms + * of the pre-calculated values which are done at mount time, then find + * out and return the maximum reservation among them. + */ +void +xfs_max_trans_res_by_mount( + struct xfs_mount *mp, + struct xfs_trans_res *mres) +{ + struct xfs_trans_reservations *resp = &mp->m_reservations; + struct xfs_trans_res *p, *tres = NULL; + int res; + + for (res = 0, p = (struct xfs_trans_res *)resp; + p < (struct xfs_trans_res *)(resp + 1); p++) { + int tmp = p->tr_cnt > 1 ? p->tr_res * p->tr_cnt : + p->tr_res; + if (res < tmp) { + res = tmp; + tres = p; + } + } + + ASSERT(tres != NULL); + *mres = *tres; } /* diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index cd29f61..b304bb8 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -19,6 +19,7 @@ #define __XFS_TRANS_H__ struct xfs_log_item; +struct xfs_trans_res; /* * This is the structure written in the log at the head of @@ -232,39 +233,39 @@ struct xfs_log_item_desc { XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) -#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write) -#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate) -#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename) -#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link) -#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove) -#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink) -#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create) -#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir) -#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree) -#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange) -#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata) -#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc) -#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero) -#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree) -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) +#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write.tr_res) +#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate.tr_res) +#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename.tr_res) +#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link.tr_res) +#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove.tr_res) +#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink.tr_res) +#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create.tr_res) +#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir.tr_res) +#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree.tr_res) +#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange.tr_res) +#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata.tr_res) +#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc.tr_res) +#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero.tr_res) +#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree.tr_res) +#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_res) /* * Logging the inode timestamps on an fsync -- same as SWRITE * as long as SWRITE logs the entire inode core */ -#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) -#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) -#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork) -#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval) -#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm) -#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt) -#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm) -#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp) ((mp)->m_reservations.tr_clearagi) -#define XFS_QM_SBCHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_qm_sbchange) -#define XFS_QM_SETQLIM_LOG_RES(mp) ((mp)->m_reservations.tr_qm_setqlim) -#define XFS_QM_DQALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_qm_dqalloc) -#define XFS_QM_QUOTAOFF_LOG_RES(mp) ((mp)->m_reservations.tr_qm_quotaoff) -#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) ((mp)->m_reservations.tr_qm_equotaoff) -#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb) +#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_res) +#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_res) +#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork.tr_res) +#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval.tr_res) +#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm.tr_res) +#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt.tr_res) +#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm.tr_res) +#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp) ((mp)->m_reservations.tr_clearagi.tr_res) +#define XFS_QM_SBCHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_qm_sbchange.tr_res) +#define XFS_QM_SETQLIM_LOG_RES(mp) ((mp)->m_reservations.tr_qm_setqlim.tr_res) +#define XFS_QM_DQALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_qm_dqalloc.tr_res) +#define XFS_QM_QUOTAOFF_LOG_RES(mp) ((mp)->m_reservations.tr_qm_quotaoff.tr_res) +#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) ((mp)->m_reservations.tr_qm_equotaoff.tr_res) +#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb.tr_res) /* * Various log count values. @@ -526,6 +527,8 @@ int xfs_trans_commit(xfs_trans_t *, uint flags); void xfs_trans_cancel(xfs_trans_t *, int); int xfs_trans_ail_init(struct xfs_mount *); void xfs_trans_ail_destroy(struct xfs_mount *); +void xfs_max_trans_res_by_mount(struct xfs_mount *, + struct xfs_trans_res *); extern kmem_zone_t *xfs_trans_zone; extern kmem_zone_t *xfs_log_item_desc_zone; -- 1.7.9.5 From bpm@sgi.com Wed May 1 11:20:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 44B857F80 for ; Wed, 1 May 2013 11:20:48 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id EDD828F804B; Wed, 1 May 2013 09:20:44 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id C1467500B4F; Wed, 1 May 2013 11:20:44 -0500 (CDT) Date: Wed, 1 May 2013 11:20:44 -0500 From: Ben Myers To: James Dingwall Cc: xfs@oss.sgi.com Subject: Re: Cleancache support in XFS Message-ID: <20130501162044.GN29359@sgi.com> References: <51810CED.4080003@zynstra.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51810CED.4080003@zynstra.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hi James, On Wed, May 01, 2013 at 01:39:09PM +0100, James Dingwall wrote: > In reference to: http://oss.sgi.com/archives/xfs/2012-05/msg00046.html > > $ grep -r cleancache fs/xfs > on the 3.9 kernel source suggests that no patch was submitted to > enable cleancache for the XFS filesystem. Since it was suggested > that this could be a one liner I've had a go and my first effort is > inline below. While this seems to compile OK I have no experience > in filesystems so I would appreciate it if anyone can point out that > it is obviously wrong and likely to eat my data before I try booting > the kernel. > > If it seems a reasonable attempt what would be the best way to check > that it isn't doing nasty things? Hrm.. Looks like there is a doc in Documentation/vm/cleancache.txt which includes a list of attributes the filesystem needs to have to work properly with cleancache. I'd suggest going over that list and the code by inspection first, followed by some xfstests runs, and then wait for it to make a release before trusting any data to it. For a test machine that I'm willing to crater, no worries. But I wouldn't run this on my main workstation without doing the above first. We can probably explore this for 3.11. Thanks for the patch. Regards, Ben From tinguely@sgi.com Wed May 1 11:40:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1773C7F52 for ; Wed, 1 May 2013 11:40:21 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id AADA78F804B; Wed, 1 May 2013 09:40:20 -0700 (PDT) Message-ID: <51814578.9060408@sgi.com> Date: Wed, 01 May 2013 11:40:24 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" , Dave Chinner Subject: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified References: <51813BA5.3070306@oracle.com> In-Reply-To: <51813BA5.3070306@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/01/13 10:58, Jeff Liu wrote: > Hello, > > About two weeks ago, Dave has found an issue by running xfstests/297. > http://oss.sgi.com/archives/xfs/2013-03/msg00273.html > > According to our previous discussion, if the log stripe unit is configured, we should > take it into account as it will dynamically increase the log reservation twice of it > per ticket. > > This patch is trying to fix it by checking the given log space against the maximum > request among those transactions(this procedure is implemented similar to xfsprogs/mkfs/maxres.c), > because the fundamental limit is that no single transaction can be larger than half of the log. > Also, looks at least another two log stripe unit should be added when calculating the minimum log > space, or else I can simply trigger a DEAD LOOP via create large number of files, I think I need > some time to digest Dave's comments posted on original bug ticket, i.e. >>> >> The question is this: how much space do we need to reserve. I'm >>> >> thinking a minimum of 4*lsu - 2*lsu for the existing CIL context, and >>> >> another 2*lsu for any queued ticket waiting for space to come >>> >> available. > > Put simply, with this fix, mount a partition with an improper log space setup vs log stripe > unit will failed although mkfs still works. Ah, maybe we can improve the user space xfs_mkfs > with some pre-checkup similar to the implementation inside kernel? Besides that, it will > drop a warning to syslog and the suggested log space for the given log stripe unit is shown > there, which looks like the following: > > # mkfs.xfs -f -b size=512 -d agcount=16,su=256k,sw=12 -l su=256k,size=2560b /dev/sdb1 > meta-data=/dev/sdb1 isize=256 agcount=16, agsize=524288 blks > = sectsz=512 attr=2, projid32bit=0 > data = bsize=512 blocks=8388608, imaxpct=25 > = sunit=512 swidth=6144 blks > naming =version 2 bsize=4096 ascii-ci=0 > log =internal log bsize=512 blocks=2560, version=2 > = sectsz=512 sunit=512 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 > Shouldn't mkfs.xfs also know it is building a filesystem that cannot be mounted? When mkfs.xfs is given a log stripe unit is greater than 256KB, should we divide the specified log stripe unit by 2 until it is under 256KB rather than reset to 32KB? > # mount /dev/sdb1 /xfs1 > mount: wrong fs type, bad option, bad superblock on /dev/sdb1, > missing codepage or helper program, or other error > In some cases useful info is found in syslog - try > dmesg | tail or so > > # dmesg: > ....... > XFS (sdb1): log space of 2560 blocks too small, minimum request 6656 > XFS (sdb1): log space validation failed > XFS (sdb1): log mount failed > > > Tests: > Ran some cases in xfstests as well as a few self-defined Bonnie++/FIO tests with above > configuration(6656 log blocks), looks the current fix works, at least no crash to me.:) > > But I have not yet dig into the detailed of how the suggested minimum log space would > affect the performance, given that the AIL push thresholds is defined to 25% of the log > space, a small logs might introduce IO overheads for pushing AIL too frequently. > In addition, considering the backgroup CIL commit threshold is 1/8 of the log, this would > also impact the log IO throughput IMHO. Maybe we can figure out an optimized log space > combine those two cases and drop it to syslog along with the minimum size? > I think 1 MB is the smallest log size before we soft hang even without stripe units define. > > To Dave, > > Sorry for the delay in drop this patch since I have mentioned that I'll post a fix > last night. However, I have ran into an issue when testing it by creating/removing a > tons of files in parallel at that time:( The iclog buffers have to be a multiple of the log stripe unit or we start punching the lsn in places that it should not. I think the idea that was mentioned is to remove the power of two on the iclog buffer size and replace with multiple of log stripe unit. http://oss.sgi.com/archives/xfs/2013-03/msg00039.html --Mark. From sbohrer@rgmadvisors.com Wed May 1 11:44:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 130C07F72 for ; Wed, 1 May 2013 11:44:33 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id DCB708F8065 for ; Wed, 1 May 2013 09:44:32 -0700 (PDT) X-ASG-Debug-ID: 1367426655-04cb6c66e2b6a00001-NocioJ Received: from na3sys009aog130.obsmtp.com (na3sys009aog130.obsmtp.com [74.125.149.143]) by cuda.sgi.com with SMTP id u1fMa2rcU80IyBfu (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 May 2013 09:44:31 -0700 (PDT) X-Barracuda-Envelope-From: sbohrer@rgmadvisors.com X-Barracuda-RBL-Trusted-Forwarder: 74.125.149.143 Received: from mail-oa0-f69.google.com ([209.85.219.69]) (using TLSv1) by na3sys009aob130.postini.com ([74.125.148.12]) with SMTP ID DSNKUYFGXw0+qb+9jpGNma2484k7pQ2c+V3V@postini.com; Wed, 01 May 2013 09:44:31 PDT Received: by mail-oa0-f69.google.com with SMTP id l20so10449007oag.8 for ; Wed, 01 May 2013 09:44:10 -0700 (PDT) X-Barracuda-Apparent-Source-IP: 209.85.219.69 X-Barracuda-BBL-IP: 209.85.219.69 X-Barracuda-RBL-IP: 209.85.219.69 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-received:date:from:to:cc:subject:message-id:references :mime-version:in-reply-to:user-agent:content-type :content-disposition:x-gm-message-state; bh=XB6Cj+BzlqXZJeb42WpmJrNIY8tcZW59B9kJWwzb/oM=; b=LY/ljLah9bT1fQfij+1j5hR/qm4ld3ISTWTjf3QfjgTwWUPNLSJnLcyRe4KtxS/X1R vl0EmkVT+HEUf/juKHBFh3vYWbLnPfbZ0zVTPpsOg88bGcS1M6mBY7GCVfrK0rbayrMh mjMDkGNcIkUCGDHd8CRWeQPuUAJ0ksF1TkkoMPeBZe7Ju3oBEG95Jk7ovwvRmI/RRv9J mVXVhYPct98+f3SnGqmA9acd/5q8eRRqoMv0Bz+kqJ0EvNbgFNXgVDLK8NljJz+wNcIB wnorrX4V/8TfL3AfHEPBj6WEVcDIcN+NroGikz82J9yq3V/E8NZ7M/LlN6yEIPw7/hrs XlMg== X-Received: by 10.50.78.37 with SMTP id y5mr6977635igw.43.1367426649963; Wed, 01 May 2013 09:44:09 -0700 (PDT) X-Received: by 10.50.78.37 with SMTP id y5mr6977632igw.43.1367426649895; Wed, 01 May 2013 09:44:09 -0700 (PDT) Received: from BohrerMBP.rgmadvisors.com ([173.227.92.65]) by mx.google.com with ESMTPSA id d4sm28389726igc.3.2013.05.01.09.44.08 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 01 May 2013 09:44:09 -0700 (PDT) Date: Wed, 1 May 2013 11:44:06 -0500 From: Shawn Bohrer To: David Rientjes Cc: xfs@oss.sgi.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: deadlock on vmap_area_lock Message-ID: <20130501164406.GC2404@BohrerMBP.rgmadvisors.com> X-ASG-Orig-Subj: Re: deadlock on vmap_area_lock References: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> MIME-Version: 1.0 In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline X-Gm-Message-State: ALoCoQlbzsFdxSyKjsMXUifrslO9sbyaszWDvXItVJH4ofha3ekC/rGdHpaca2t4NH3cLtpRb7X5/sPK9YqQpTv9SZe+t/TBGs9Z65Q/wPWS3nitS/fy1NTxeVe48C18Q2xYmdtBVsX6ztNgAg+4PlIKIavNbtM5wQ== X-Barracuda-Connect: na3sys009aog130.obsmtp.com[74.125.149.143] X-Barracuda-Start-Time: 1367426671 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129715 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 08:57:38AM -0700, David Rientjes wrote: > On Wed, 1 May 2013, Shawn Bohrer wrote: > > > I've got two compute clusters with around 350 machines each which are > > running kernels based off of 3.1.9 (Yes I realize this is ancient by > > todays standards). All of the machines run a 'find' command once an > > hour on one of the mounted XFS filesystems. Occasionally these find > > commands get stuck requiring a reboot of the system. I took a peek > > today and see this with perf: > > > > 72.22% find [kernel.kallsyms] [k] _raw_spin_lock > > | > > --- _raw_spin_lock > > | > > |--98.84%-- vm_map_ram > > | _xfs_buf_map_pages > > | xfs_buf_get > > | xfs_buf_read > > | xfs_trans_read_buf > > | xfs_da_do_buf > > | xfs_da_read_buf > > | xfs_dir2_block_getdents > > | xfs_readdir > > | xfs_file_readdir > > | vfs_readdir > > | sys_getdents > > | system_call_fastpath > > | __getdents64 > > | > > |--1.12%-- _xfs_buf_map_pages > > | xfs_buf_get > > | xfs_buf_read > > | xfs_trans_read_buf > > | xfs_da_do_buf > > | xfs_da_read_buf > > | xfs_dir2_block_getdents > > | xfs_readdir > > | xfs_file_readdir > > | vfs_readdir > > | sys_getdents > > | system_call_fastpath > > | __getdents64 > > --0.04%-- [...] > > > > Looking at the code my best guess is that we are spinning on > > vmap_area_lock, but I could be wrong. This is the only process > > spinning on the machine so I'm assuming either another process has > > blocked while holding the lock, or perhaps this find process has tried > > to acquire the vmap_area_lock twice? > > > > Significant spinlock contention doesn't necessarily mean that there's a > deadlock, but it also doesn't mean the opposite. Correct it doesn't and I can't prove the find command is not making progress, however these finds normally complete in under 15 min and we've let the stuck ones run for days. Additionally if this was just contention I'd expect to see multiple threads/CPUs contending and I only have a single CPU pegged running find at 99%. I should clarify that the perf snippet above was for the entire system. Profiling just the find command shows: 82.56% find [kernel.kallsyms] [k] _raw_spin_lock 16.63% find [kernel.kallsyms] [k] vm_map_ram 0.13% find [kernel.kallsyms] [k] hrtimer_interrupt 0.04% find [kernel.kallsyms] [k] update_curr 0.03% find [igb] [k] igb_poll 0.03% find [kernel.kallsyms] [k] irqtime_account_process_tick 0.03% find [kernel.kallsyms] [k] account_system_vtime 0.03% find [kernel.kallsyms] [k] task_tick_fair 0.03% find [kernel.kallsyms] [k] perf_event_task_tick 0.03% find [kernel.kallsyms] [k] scheduler_tick 0.03% find [kernel.kallsyms] [k] rb_erase 0.02% find [kernel.kallsyms] [k] native_write_msr_safe 0.02% find [kernel.kallsyms] [k] native_sched_clock 0.02% find [kernel.kallsyms] [k] dma_issue_pending_all 0.02% find [kernel.kallsyms] [k] handle_irq_event_percpu 0.02% find [kernel.kallsyms] [k] timerqueue_del 0.02% find [kernel.kallsyms] [k] run_timer_softirq 0.02% find [kernel.kallsyms] [k] get_mm_counter 0.02% find [kernel.kallsyms] [k] __rcu_pending 0.02% find [kernel.kallsyms] [k] tick_program_event 0.01% find [kernel.kallsyms] [k] __netif_receive_skb 0.01% find [kernel.kallsyms] [k] ip_route_input_common 0.01% find [kernel.kallsyms] [k] __insert_vmap_area 0.01% find [igb] [k] igb_alloc_rx_buffers_adv 0.01% find [kernel.kallsyms] [k] irq_exit 0.01% find [kernel.kallsyms] [k] acct_update_integrals 0.01% find [kernel.kallsyms] [k] apic_timer_interrupt 0.01% find [kernel.kallsyms] [k] tick_sched_timer 0.01% find [kernel.kallsyms] [k] __remove_hrtimer 0.01% find [kernel.kallsyms] [k] do_IRQ 0.01% find [kernel.kallsyms] [k] dev_gro_receive 0.01% find [kernel.kallsyms] [k] net_rx_action 0.01% find [kernel.kallsyms] [k] classify 0.01% find [kernel.kallsyms] [k] __udp4_lib_mcast_deliver 0.01% find [kernel.kallsyms] [k] rb_next 0.01% find [kernel.kallsyms] [k] smp_apic_timer_interrupt 0.01% find [kernel.kallsyms] [k] intel_pmu_disable_all 0.01% find [ioatdma] [k] ioat2_issue_pending 0.01% find [kernel.kallsyms] [k] get_partial_node 0.01% find [kernel.kallsyms] [k] ktime_get 0.01% find [kernel.kallsyms] [k] radix_tree_lookup_element 0.01% find [kernel.kallsyms] [k] swiotlb_map_page 0.01% find [kernel.kallsyms] [k] __schedule 0.01% find [kernel.kallsyms] [k] _raw_spin_lock_irq 0.01% find [kernel.kallsyms] [k] hrtimer_forward 0.01% find [kernel.kallsyms] [k] sched_clock_tick 0.01% find [kernel.kallsyms] [k] clockevents_program_event 0.01% find [kernel.kallsyms] [k] raw_local_deliver 0.01% find [kernel.kallsyms] [k] exit_idle 0.01% find [kernel.kallsyms] [k] sched_clock_cpu 0.01% find [kernel.kallsyms] [k] sched_clock 0.01% find [kernel.kallsyms] [k] idle_cpu 0.01% find [kernel.kallsyms] [k] update_process_times 0.01% find [kernel.kallsyms] [k] tick_dev_program_event > Depending on your > definition of "occassionally", would it be possible to run with > CONFIG_PROVE_LOCKING and CONFIG_LOCKDEP to see if it uncovers any real > deadlock potential? Yeah, I can probably enable these on a few machines and hope I get lucky. These machines are used for real work so I'll have to gauge what how significant the performance impact is to determine how many machines I can sacrifice to the cause. Thanks, Shawn -- --------------------------------------------------------------- This email, along with any attachments, is confidential. If you believe you received this message in error, please contact the sender immediately and delete all copies of the message. Thank you. From rientjes@google.com Wed May 1 12:01:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9A5FC7F89 for ; Wed, 1 May 2013 12:01:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 88185304077 for ; Wed, 1 May 2013 10:01:45 -0700 (PDT) X-ASG-Debug-ID: 1367427704-04cb6c66e1b74e0001-NocioJ Received: from mail-da0-f42.google.com (mail-da0-f42.google.com [209.85.210.42]) by cuda.sgi.com with ESMTP id DqMdQ6DzDnXViSI3 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 May 2013 10:01:44 -0700 (PDT) X-Barracuda-Envelope-From: rientjes@google.com X-Barracuda-Apparent-Source-IP: 209.85.210.42 X-Barracuda-IPDD: Level1 [google.com/209.85.210.42] Received: by mail-da0-f42.google.com with SMTP id n15so736564dad.15 for ; Wed, 01 May 2013 10:01:43 -0700 (PDT) X-Barracuda-IPDD: Level1 [google.com/209.85.210.42] X-Barracuda-IPDD: Level1 [google.com/209.85.210.42] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:date:from:x-x-sender:to:cc:subject:in-reply-to :message-id:references:user-agent:mime-version:content-type; bh=wUS/AaAH+mIoLu1MlJqwRyOnBtXqgaXhJvl1K3gNqx8=; b=S5p7ojiPYXLzuPSJ8yOiqL3FvtwdqzjCDItZ/dSYIL630X0FHBOJhHYbWIhvgnxjCW mvgNSw6GuaE4TjSfepOhRcO4JQJvtzlhcavzj2rsB6CfoTHAX6ODKCxovkU8uKvOFFgd 4WVImfLbU6e1rBpBkOiK/PBi82iwHk0s4CN2rEfzeemFTyQPByQtwe0eLHnGdXscm3fi LJg2UZrCdZqkjoCfAzmfe/3LO7IBNh+R6Rl4dyggSc5UmdVxWQ6ShPyncJdAu/u1IEdb FqJoV9DaAMR4Pjdk9DbVElmL9iei6aAQkfRhJ5Up1QTUwCermyI53C6gIjfjEGXbmBew niFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:date:from:x-x-sender:to:cc:subject:in-reply-to :message-id:references:user-agent:mime-version:content-type :x-gm-message-state; bh=wUS/AaAH+mIoLu1MlJqwRyOnBtXqgaXhJvl1K3gNqx8=; b=XtdFHJ+PyyCbYgKS8+UvqPZ5wSMDHOf3xCYUdCwG7tURPWqmkI1CFbGp0aXqdNuVLp upy+eByVrllRzabUXHgfgJeOy+wmBCa61ua5lj0Npis38NlM7DfUPkjBqFm6Hcu/4/S4 wlGaTKxHsz0CstDL0iOCoBZAUsyyX90q9YCi1QSW5RoNlHrM2M2oEBNsEYycgqhvX5gf VkQQSyvT+CsKpQ+wnm9L6LxTI/symFHUijyil04OcV03v/kMnjZ45tL5keXZE0KD/nqH B1V6E8jQ/iw8ghsQvS+agNAhk2eH2MJGf90CMjAWkRrw2GwVbzxlPvMETH8i2fCUahTy SGEg== X-Received: by 10.66.175.73 with SMTP id by9mr5716513pac.191.1367427703858; Wed, 01 May 2013 10:01:43 -0700 (PDT) Received: from [2620:0:1008:1101:be30:5bff:fed8:5e64] ([2620:0:1008:1101:be30:5bff:fed8:5e64]) by mx.google.com with ESMTPSA id ts3sm3659562pbc.12.2013.05.01.10.01.42 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 01 May 2013 10:01:43 -0700 (PDT) Date: Wed, 1 May 2013 10:01:41 -0700 (PDT) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: Shawn Bohrer cc: xfs@oss.sgi.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: deadlock on vmap_area_lock In-Reply-To: <20130501164406.GC2404@BohrerMBP.rgmadvisors.com> X-ASG-Orig-Subj: Re: deadlock on vmap_area_lock Message-ID: References: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> <20130501164406.GC2404@BohrerMBP.rgmadvisors.com> User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Gm-Message-State: ALoCoQmOKbcUSUti8DnuEjsmu90k9QZo0JI5WnGPJfbocz2a7ozWaQxhicNEWZRWdstF4HA4Geu7Lz4TjC2qSqTqcTTK4ax0P/qtEbH0yoqjkuyRG7Zwed9Ml0NcLSvrCLbDeuS8BZyctkQl1TD1sftHVsFD8MUt7+BOhdR3ON+a67Sb0uze9nX/XZcWuUlkQTHm9YjFoAjH X-Barracuda-Connect: mail-da0-f42.google.com[209.85.210.42] X-Barracuda-Start-Time: 1367427704 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129717 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Wed, 1 May 2013, Shawn Bohrer wrote: > Correct it doesn't and I can't prove the find command is not making > progress, however these finds normally complete in under 15 min and > we've let the stuck ones run for days. Additionally if this was just > contention I'd expect to see multiple threads/CPUs contending and I > only have a single CPU pegged running find at 99%. I should clarify > that the perf snippet above was for the entire system. Profiling just > the find command shows: > > 82.56% find [kernel.kallsyms] [k] _raw_spin_lock Couple of options to figure out what spinlock this is: use lockstat (see Documentation/lockstat.txt), which will also require a kernel rebuild, some human intervention to collect the stats, and the accompanying performance degradation, or you could try collecting /proc/$(pidof find)/stack at regular intervals and figure out which spinlock it is. > > Depending on your > > definition of "occassionally", would it be possible to run with > > CONFIG_PROVE_LOCKING and CONFIG_LOCKDEP to see if it uncovers any real > > deadlock potential? > > Yeah, I can probably enable these on a few machines and hope I get > lucky. These machines are used for real work so I'll have to gauge > what how significant the performance impact is to determine how many > machines I can sacrifice to the cause. > You'll probably only need to enable it on one machine, if a deadlock possibility exists here then lockdep will find it even without hitting it, it simply has to exercise the path that leads to it. It does have a performance degradation for that one machine, though. From eflorac@intellique.com Wed May 1 13:06:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8AE927F37 for ; Wed, 1 May 2013 13:06:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7A494304070 for ; Wed, 1 May 2013 11:06:55 -0700 (PDT) X-ASG-Debug-ID: 1367431611-04cb6c66e4b9d00001-NocioJ Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by cuda.sgi.com with ESMTP id 0S1bua9qlBwfQdMA for ; Wed, 01 May 2013 11:06:52 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.3 Received: from galadriel.home (unknown [82.235.234.79]) by smtp3-g21.free.fr (Postfix) with ESMTP id C6F55A6289 for ; Wed, 1 May 2013 20:06:48 +0200 (CEST) Date: Wed, 1 May 2013 20:06:33 +0200 From: Emmanuel Florac To: "xfs@oss.sgi.com" Subject: Weird message from xfs_repair Message-ID: <20130501200633.5d24caf5@galadriel.home> X-ASG-Orig-Subj: Weird message from xfs_repair Organization: Intellique X-Mailer: Claws Mail 3.7.8 (GTK+ 2.24.4; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtp3-g21.free.fr[212.27.42.3] X-Barracuda-Start-Time: 1367431611 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129721 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi everyone, I've just had to resort to the latest devel version of xfs_repair to get back some heavily damaged filesystem (thanks to a failing RAID controller), and it ended with the following message: cache_purge: shake on cache 0x672030 left 1 nodes!? What's this about? I didn't look at the source, but a new run of xfs_repair detected nothing. -- ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From sandeen@redhat.com Wed May 1 14:20:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E4F2B7F4E for ; Wed, 1 May 2013 14:20:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 744C2AC002 for ; Wed, 1 May 2013 12:20:46 -0700 (PDT) X-ASG-Debug-ID: 1367436042-04cbb03c2ebed00001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Y7mhbRtrGfSOqSOZ for ; Wed, 01 May 2013 12:20:42 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r41JKff8002354 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 1 May 2013 15:20:42 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r41JKeYu019105 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 1 May 2013 15:20:41 -0400 Message-ID: <51816B08.7060305@redhat.com> Date: Wed, 01 May 2013 14:20:40 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss Subject: xfs_metadump of frozen fs? X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: xfs_metadump of frozen fs? Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367436042 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 xfs_metadump(8) xfs_metadump(8) ... xfs_metadump should only be used to copy unmounted filesystems, read-only mounted filesystems, or frozen filesystems (see xfs_freeze(8)). Other- wise, the generated dump could be inconsistent or corrupt. ... However, it doesn't work on a frozen fs. There's no way to programatically detect a frozen fs AFAIK... Has this ever worked? I see 3 potential solutions: 1) a --force option to proceed even if mounted 2) teach xfs_metadump to optionally freeze a mounted fs and proceed 3) fix the manpage Thoughts? Thanks, -Eric From bpm@sgi.com Wed May 1 14:43:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6CFF07F52 for ; Wed, 1 May 2013 14:43:21 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id F2043AC002; Wed, 1 May 2013 12:43:20 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 9ED0A500B4F; Wed, 1 May 2013 14:43:20 -0500 (CDT) Date: Wed, 1 May 2013 14:43:20 -0500 From: Ben Myers To: Emmanuel Florac Cc: "xfs@oss.sgi.com" Subject: Re: Weird message from xfs_repair Message-ID: <20130501194320.GP29359@sgi.com> References: <20130501200633.5d24caf5@galadriel.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130501200633.5d24caf5@galadriel.home> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Emmanuel, On Wed, May 01, 2013 at 08:06:33PM +0200, Emmanuel Florac wrote: > I've just had to resort to the latest devel version of xfs_repair to > get back some heavily damaged filesystem (thanks to a failing RAID > controller), and it ended with the following message: > > cache_purge: shake on cache 0x672030 left 1 nodes!? > > What's this about? I didn't look at the source, but a new run of > xfs_repair detected nothing. xfs_repair/libxfs has caches for xfs_bufs and inodes to speed things up. cache_purge is trying to flush out all entries from one of those caches. After the purge one entry was left unexpectedly, maybe because someone leaked a reference on it or something. The message doesn't indicate an on-disk problem, it's a problem in xfs_repair. Regards, Ben From rjohnston@sgi.com Wed May 1 15:11:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 342797F52 for ; Wed, 1 May 2013 15:11:49 -0500 (CDT) Received: from gulag1.americas.sgi.com (gulag1.americas.sgi.com [128.162.236.41]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0127E8F8054; Wed, 1 May 2013 13:11:45 -0700 (PDT) Received: by gulag1.americas.sgi.com (Postfix, from userid 48222) id C9480ACDB17D; Wed, 1 May 2013 15:11:45 -0500 (CDT) Message-Id: <20130501195229.468657797@sgi.com> User-Agent: quilt/0.47-15.17.1 Date: Wed, 01 May 2013 14:52:29 -0500 From: rjohnston@sgi.com To: xfs@oss.sgi.com Cc: nathans@debian.org Subject: xfsdump: Release 3.1.3 References: <20130501195229.468657797@sgi.com> Content-Disposition: inline; filename=v3-xfsdump-update-version-numbers-and-changelog.patch Update version numbers and changelog. Signed-off-by: Rich Johnston --- v3: Updated doc/CHANGES since v2 v2: fix spelling errors reported by Nathan. my goodness! VERSION | 2 +- configure.ac | 2 +- debian/changelog | 6 ++++++ doc/CHANGES | 11 +++++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) Index: b/VERSION =================================================================== --- a/VERSION +++ b/VERSION @@ -3,5 +3,5 @@ # PKG_MAJOR=3 PKG_MINOR=1 -PKG_REVISION=2 +PKG_REVISION=3 PKG_BUILD=1 Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([xfsdump], [3.1.2]) +AC_INIT([xfsdump], [3.1.3]) AC_PREREQ(2.50) AC_CONFIG_AUX_DIR([.]) AC_CONFIG_MACRO_DIR([m4]) Index: b/debian/changelog =================================================================== --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +xfsdump (3.1.3) unstable; urgency=low + + * New upstream release + + -- Nathan Scott Tue, 19 Mar 2013 14:20:01 +1100 + xfsdump (3.1.1) unstable; urgency=low * New upstream release Index: b/doc/CHANGES =================================================================== --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,3 +1,14 @@ +xfsdump-3.1.3 (1 May 2013) + - Fix a segfault in xfsrestore when a path name is too long, + thanks to Nigel Tamplin. + - Fix a backward compatibility problem. Dumps created with + version 3.1.2 where extended attributes are in use failed + to restore with v3.1.0 due to file header checksum errors. + Thanks to Fugazzi for reporting. + - Refactored release scripts to conform to using git archive. + - Changed the build process so that 'make deb' uses the same + process of creating a source tree as the release script. + xfsdump-3.1.2 (13 December 2012) - Update release script to create a source tarball. From rjohnston@sgi.com Wed May 1 15:12:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4E8F87F56 for ; Wed, 1 May 2013 15:12:07 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id AF398AC006; Wed, 1 May 2013 13:12:03 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 1 May 2013 15:11:55 -0500 Message-ID: <51817712.6000807@sgi.com> Date: Wed, 1 May 2013 15:12:02 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss CC: Nathan Scott Subject: xfsprogs-3.1.11 pre-release please test! Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Hi Folks, Here are the changes for this release: xfsprogs-3.1.11 (30 April 2013) - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. - mkfs.xfs will always go into multidisk mode when filesystem geometry is specified on the command line. - Document all commands in xfs_io. - Remove setfl command from xfs_io. - xfs_metadump will obfuscate symlinks by path component. - mkfs.xfs no longer accepts geometry settings smaller than the physical sector size. - xfs_logprint now supports multiply-logged inode fields and handles continued inode transactions correctly. - kill XLOG_SET - Update release scripts to use git archive to address a missing source file reported by Arkadiusz Mi?kiewicz - Fix a build error with -Werror=format-security, reported by Arkadiusz Mi?kiewicz - mkfs.xfs no longer attempts to discard when -N option is used. - Update 'make deb' to use tarball - Sync up with log reservation changes in the kernel. - Fix possible unallocated memory access in fiemap. - Guard against string overflow in path_to_fspath. - Fix setup_cursor array allocation. - Fix free of unintialized pointer in xfs_acl_valid error path. - Guard against path string overflows. - Check strdup results properly in initallfs(). - Fix attribute no_change_count logic. - Remove extraneous close() in fsrallfs(). - xfs_repair now skips the freelist scan of a corrupt agf when in no-modify mode. - xfs_db now skips freelist scans of corrupt agfs. - Remove unconditional ASSERT(0) in xfs_repair. - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. - Add depraction message for xfs_check. - xfs_quota allow user or group names beginning with digits reported by James Carter. - Fix manpages and usage() spelling, errors and omissions. I have placed a pre-release tarball here: ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz Please take a look and report any issues before next Wednesday (08 May 2013). If there are other patches which you feel are essential, now is the time to say so. Regards --Rich From rjohnston@sgi.com Wed May 1 15:12:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 499407F5D for ; Wed, 1 May 2013 15:12:12 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id AD55CAC008; Wed, 1 May 2013 13:12:11 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 1 May 2013 15:12:11 -0500 Message-ID: <51817723.9090603@sgi.com> Date: Wed, 1 May 2013 15:12:19 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss CC: Nathan Scott Subject: xfsdump-3.1.3 pre-release please test! Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Hi Folks, Here are the changes for this release: xfsdump-3.1.3 (1 May 2013) - Fix a segfault in xfsrestore when a path name is too long, thanks to Nigel Tamplin. - Fix a backward compatibility problem. Dumps created with version 3.1.2 where extended attributes are in use failed to restore with v3.1.0 due to file header checksum errors. Thanks to Fugazzi for reporting. - Refactored release scripts to conform to using git archive. - Changed the build process so that 'make deb' uses the same process of creating a source tree as the release script. I have placed a pre-release tarball here: ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsdump-pre-3.1.3-3.tar.gz Please take a look and report any issues before next Wednesday (08 May 2013). If there are other patches which you feel are essential, now is the time to say so. Regards --Rich From tinguely@sgi.com Wed May 1 15:35:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D7A657F52 for ; Wed, 1 May 2013 15:35:19 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id A355E8F8049; Wed, 1 May 2013 13:35:19 -0700 (PDT) Message-ID: <51817C88.4060208@sgi.com> Date: Wed, 01 May 2013 15:35:20 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Rich Johnston CC: xfs-oss Subject: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> In-Reply-To: <51817712.6000807@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/01/13 15:12, Rich Johnston wrote: > Hi Folks, > > Here are the changes for this release: > > xfsprogs-3.1.11 (30 April 2013) > > - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. > - mkfs.xfs will always go into multidisk mode when filesystem > geometry is specified on the command line. > - Document all commands in xfs_io. > - Remove setfl command from xfs_io. > - xfs_metadump will obfuscate symlinks by path component. > - mkfs.xfs no longer accepts geometry settings smaller than the > physical sector size. > - xfs_logprint now supports multiply-logged inode fields and > handles continued inode transactions correctly. > - kill XLOG_SET > - Update release scripts to use git archive to address a > missing source file reported by Arkadiusz Mi?kiewicz > - Fix a build error with -Werror=format-security, reported > by Arkadiusz Mi?kiewicz > - mkfs.xfs no longer attempts to discard when -N option is used. > - Update 'make deb' to use tarball > - Sync up with log reservation changes in the kernel. > - Fix possible unallocated memory access in fiemap. > - Guard against string overflow in path_to_fspath. > - Fix setup_cursor array allocation. > - Fix free of unintialized pointer in xfs_acl_valid error path. > - Guard against path string overflows. > - Check strdup results properly in initallfs(). > - Fix attribute no_change_count logic. > - Remove extraneous close() in fsrallfs(). > - xfs_repair now skips the freelist scan of a corrupt agf > when in no-modify mode. > - xfs_db now skips freelist scans of corrupt agfs. > - Remove unconditional ASSERT(0) in xfs_repair. > - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. > - Add depraction message for xfs_check. > - xfs_quota allow user or group names beginning with digits reported by > James Carter. > - Fix manpages and usage() spelling, errors and omissions. > > I have placed a pre-release tarball here: > > ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz > > > Please take a look and report any issues before next Wednesday (08 May > 2013). If there are other patches which you feel are essential, now is > the time to say so. > > Regards > --Rich The new lines (below) in xfs_check.sh breaks older xfstests: xfs_check is deprecated and scheduled for removal in June 2014. Please use xfs_repair -n instead. xfstests' ./check thinks the TEST directory is inconsistent and stops. I simply commented the lines out of the installed /usr/sbin/xfs_check for my tests. FSTYP -- xfs (debug) PLATFORM -- Linux/x86_64 host 3.9.0-rc1+ MKFS_OPTIONS -- -f -bsize=4096 {SCRATCH_DEV} MOUNT_OPTIONS -- {SCRATCH_DEV} {SCRATCH_MNT} _check_xfs_filesystem: filesystem on {TEST_DEV} is inconsistent (c) (see check.full) Passed all 0 tests --Mark. From sandeen@sandeen.net Wed May 1 15:58:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 52CEF7F52 for ; Wed, 1 May 2013 15:58:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D414BAC003 for ; Wed, 1 May 2013 13:58:11 -0700 (PDT) X-ASG-Debug-ID: 1367441890-04cb6c66e1c5890001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id o2vH338JYFkFlvUs for ; Wed, 01 May 2013 13:58:10 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 398F863C3CA7; Wed, 1 May 2013 15:58:10 -0500 (CDT) Message-ID: <518181E1.2000604@sandeen.net> Date: Wed, 01 May 2013 15:58:09 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Ben Myers CC: Emmanuel Florac , "xfs@oss.sgi.com" Subject: Re: Weird message from xfs_repair References: <20130501200633.5d24caf5@galadriel.home> <20130501194320.GP29359@sgi.com> X-ASG-Orig-Subj: Re: Weird message from xfs_repair In-Reply-To: <20130501194320.GP29359@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367441890 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129733 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/1/13 2:43 PM, Ben Myers wrote: > Hi Emmanuel, > > On Wed, May 01, 2013 at 08:06:33PM +0200, Emmanuel Florac wrote: >> I've just had to resort to the latest devel version of xfs_repair to >> get back some heavily damaged filesystem (thanks to a failing RAID >> controller), and it ended with the following message: >> >> cache_purge: shake on cache 0x672030 left 1 nodes!? >> >> What's this about? I didn't look at the source, but a new run of >> xfs_repair detected nothing. > > xfs_repair/libxfs has caches for xfs_bufs and inodes to speed things up. > cache_purge is trying to flush out all entries from one of those caches. After > the purge one entry was left unexpectedly, maybe because someone leaked a > reference on it or something. The message doesn't indicate an on-disk problem, > it's a problem in xfs_repair. Several of those internal cache housekeeping messages can be alarming. Indeed anything out of the ordinary during repair is alarming to most users. ;) At any rate they're completely useless to the administrator. We should consider a way to reassure the user, and make them useful at the same time. Maybe a global set when something like this happens, and then at the end, a friendly message about what it meant and how to report the error and/or help debug? Although if repair is done now, it's probably unlikely(?) that the message would pop out again, so is there really anything which could be done at this point? Emmanuael - if another xfs_repair pops out the same error, then capturing a metadump of the fs would probably let someone look into it. Someone who has time, that is. ;) -Eric > Ben > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Wed May 1 16:01:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E1DA07F52 for ; Wed, 1 May 2013 16:01:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7E555AC005 for ; Wed, 1 May 2013 14:01:49 -0700 (PDT) X-ASG-Debug-ID: 1367442107-04bdf077c7c7bc0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id FKrIIg0iAG64Qwc6 for ; Wed, 01 May 2013 14:01:47 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 084DA63C3CA7; Wed, 1 May 2013 16:01:46 -0500 (CDT) Message-ID: <518182BA.4010406@sandeen.net> Date: Wed, 01 May 2013 16:01:46 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Mark Tinguely CC: Rich Johnston , xfs-oss Subject: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> <51817C88.4060208@sgi.com> X-ASG-Orig-Subj: Re: xfsprogs-3.1.11 pre-release please test! In-Reply-To: <51817C88.4060208@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367442107 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129733 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/1/13 3:35 PM, Mark Tinguely wrote: > On 05/01/13 15:12, Rich Johnston wrote: >> Hi Folks, >> >> Here are the changes for this release: >> >> xfsprogs-3.1.11 (30 April 2013) >> >> - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. >> - mkfs.xfs will always go into multidisk mode when filesystem >> geometry is specified on the command line. >> - Document all commands in xfs_io. >> - Remove setfl command from xfs_io. >> - xfs_metadump will obfuscate symlinks by path component. >> - mkfs.xfs no longer accepts geometry settings smaller than the >> physical sector size. >> - xfs_logprint now supports multiply-logged inode fields and >> handles continued inode transactions correctly. >> - kill XLOG_SET >> - Update release scripts to use git archive to address a >> missing source file reported by Arkadiusz Mi?kiewicz >> - Fix a build error with -Werror=format-security, reported >> by Arkadiusz Mi?kiewicz >> - mkfs.xfs no longer attempts to discard when -N option is used. >> - Update 'make deb' to use tarball >> - Sync up with log reservation changes in the kernel. >> - Fix possible unallocated memory access in fiemap. >> - Guard against string overflow in path_to_fspath. >> - Fix setup_cursor array allocation. >> - Fix free of unintialized pointer in xfs_acl_valid error path. >> - Guard against path string overflows. >> - Check strdup results properly in initallfs(). >> - Fix attribute no_change_count logic. >> - Remove extraneous close() in fsrallfs(). >> - xfs_repair now skips the freelist scan of a corrupt agf >> when in no-modify mode. >> - xfs_db now skips freelist scans of corrupt agfs. >> - Remove unconditional ASSERT(0) in xfs_repair. >> - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. >> - Add depraction message for xfs_check. >> - xfs_quota allow user or group names beginning with digits reported by >> James Carter. >> - Fix manpages and usage() spelling, errors and omissions. >> >> I have placed a pre-release tarball here: >> >> ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz >> >> >> Please take a look and report any issues before next Wednesday (08 May >> 2013). If there are other patches which you feel are essential, now is >> the time to say so. >> >> Regards >> --Rich > > The new lines (below) in xfs_check.sh breaks older xfstests: > > xfs_check is deprecated and scheduled for removal in June 2014. > Please use xfs_repair -n instead. Hum, I thought xfstests stopped calling xfs_check.sh and implemented its own xfs_check internally: commit 187bccd310dc253feaebd69df4ccdda21eee12d0 Author: Chandra Seetharaman Date: Thu Apr 18 17:44:02 2013 +0000 xfstests: Remove dependence of xfs_check script Replace the usage of the script xfs_check and add the relevant code to xfstests. ... - [ "$XFS_CHECK_PROG" = "" ] && _fatal "xfs_check not found" ... etc ... where is check getting called directly? (Or: is your xfstests up to date?) -Eric > xfstests' ./check thinks the TEST directory is inconsistent and stops. > I simply commented the lines out of the installed /usr/sbin/xfs_check > for my tests. > > FSTYP -- xfs (debug) > PLATFORM -- Linux/x86_64 host 3.9.0-rc1+ > MKFS_OPTIONS -- -f -bsize=4096 {SCRATCH_DEV} > MOUNT_OPTIONS -- {SCRATCH_DEV} {SCRATCH_MNT} > > _check_xfs_filesystem: filesystem on {TEST_DEV} is inconsistent (c) (see check.full) > Passed all 0 tests > > --Mark. > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From tinguely@sgi.com Wed May 1 16:17:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5F1017F52 for ; Wed, 1 May 2013 16:17:44 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2B39E304087; Wed, 1 May 2013 14:17:41 -0700 (PDT) Message-ID: <51818679.1030408@sgi.com> Date: Wed, 01 May 2013 16:17:45 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Eric Sandeen CC: Rich Johnston , xfs-oss Subject: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> <51817C88.4060208@sgi.com> <518182BA.4010406@sandeen.net> In-Reply-To: <518182BA.4010406@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/01/13 16:01, Eric Sandeen wrote: > On 5/1/13 3:35 PM, Mark Tinguely wrote: >> On 05/01/13 15:12, Rich Johnston wrote: >>> Hi Folks, >>> >>> Here are the changes for this release: >>> >>> xfsprogs-3.1.11 (30 April 2013) >>> >>> - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. >>> - mkfs.xfs will always go into multidisk mode when filesystem >>> geometry is specified on the command line. >>> - Document all commands in xfs_io. >>> - Remove setfl command from xfs_io. >>> - xfs_metadump will obfuscate symlinks by path component. >>> - mkfs.xfs no longer accepts geometry settings smaller than the >>> physical sector size. >>> - xfs_logprint now supports multiply-logged inode fields and >>> handles continued inode transactions correctly. >>> - kill XLOG_SET >>> - Update release scripts to use git archive to address a >>> missing source file reported by Arkadiusz Mi?kiewicz >>> - Fix a build error with -Werror=format-security, reported >>> by Arkadiusz Mi?kiewicz >>> - mkfs.xfs no longer attempts to discard when -N option is used. >>> - Update 'make deb' to use tarball >>> - Sync up with log reservation changes in the kernel. >>> - Fix possible unallocated memory access in fiemap. >>> - Guard against string overflow in path_to_fspath. >>> - Fix setup_cursor array allocation. >>> - Fix free of unintialized pointer in xfs_acl_valid error path. >>> - Guard against path string overflows. >>> - Check strdup results properly in initallfs(). >>> - Fix attribute no_change_count logic. >>> - Remove extraneous close() in fsrallfs(). >>> - xfs_repair now skips the freelist scan of a corrupt agf >>> when in no-modify mode. >>> - xfs_db now skips freelist scans of corrupt agfs. >>> - Remove unconditional ASSERT(0) in xfs_repair. >>> - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. >>> - Add depraction message for xfs_check. >>> - xfs_quota allow user or group names beginning with digits reported by >>> James Carter. >>> - Fix manpages and usage() spelling, errors and omissions. >>> >>> I have placed a pre-release tarball here: >>> >>> ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz >>> >>> >>> Please take a look and report any issues before next Wednesday (08 May >>> 2013). If there are other patches which you feel are essential, now is >>> the time to say so. >>> >>> Regards >>> --Rich >> >> The new lines (below) in xfs_check.sh breaks older xfstests: >> >> xfs_check is deprecated and scheduled for removal in June 2014. >> Please use xfs_repair -n instead. > > Hum, I thought xfstests stopped calling xfs_check.sh and implemented > its own xfs_check internally: > > commit 187bccd310dc253feaebd69df4ccdda21eee12d0 > Author: Chandra Seetharaman > Date: Thu Apr 18 17:44:02 2013 +0000 > > xfstests: Remove dependence of xfs_check script > > Replace the usage of the script xfs_check and add the relevant code to > xfstests. > > ... > - [ "$XFS_CHECK_PROG" = "" ]&& _fatal "xfs_check not found" > ... etc ... > > where is check getting called directly? > > (Or: is your xfstests up to date?) > > -Eric I disclosed it as an older xfstests. It is conceivable that people will install the latest xfsprogs and not upgrade xfstests. I can hear it now, "It used to just work..." :) --Mark. From sandeen@sandeen.net Wed May 1 16:23:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 49DDF7F52 for ; Wed, 1 May 2013 16:23:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB666AC003 for ; Wed, 1 May 2013 14:23:30 -0700 (PDT) X-ASG-Debug-ID: 1367443409-04cb6c66e2c7130001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 7AQWVLEUEE9ELBqV for ; Wed, 01 May 2013 14:23:29 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 007B463C3BD0; Wed, 1 May 2013 16:23:28 -0500 (CDT) Message-ID: <518187D0.6000809@sandeen.net> Date: Wed, 01 May 2013 16:23:28 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Mark Tinguely CC: Rich Johnston , xfs-oss Subject: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> <51817C88.4060208@sgi.com> <518182BA.4010406@sandeen.net> <51818679.1030408@sgi.com> X-ASG-Orig-Subj: Re: xfsprogs-3.1.11 pre-release please test! In-Reply-To: <51818679.1030408@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367443409 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129735 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/1/13 4:17 PM, Mark Tinguely wrote: > On 05/01/13 16:01, Eric Sandeen wrote: >> On 5/1/13 3:35 PM, Mark Tinguely wrote: >>> On 05/01/13 15:12, Rich Johnston wrote: >>>> Hi Folks, >>>> >>>> Here are the changes for this release: >>>> >>>> xfsprogs-3.1.11 (30 April 2013) >>>> >>>> - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. >>>> - mkfs.xfs will always go into multidisk mode when filesystem >>>> geometry is specified on the command line. >>>> - Document all commands in xfs_io. >>>> - Remove setfl command from xfs_io. >>>> - xfs_metadump will obfuscate symlinks by path component. >>>> - mkfs.xfs no longer accepts geometry settings smaller than the >>>> physical sector size. >>>> - xfs_logprint now supports multiply-logged inode fields and >>>> handles continued inode transactions correctly. >>>> - kill XLOG_SET >>>> - Update release scripts to use git archive to address a >>>> missing source file reported by Arkadiusz Mi?kiewicz >>>> - Fix a build error with -Werror=format-security, reported >>>> by Arkadiusz Mi?kiewicz >>>> - mkfs.xfs no longer attempts to discard when -N option is used. >>>> - Update 'make deb' to use tarball >>>> - Sync up with log reservation changes in the kernel. >>>> - Fix possible unallocated memory access in fiemap. >>>> - Guard against string overflow in path_to_fspath. >>>> - Fix setup_cursor array allocation. >>>> - Fix free of unintialized pointer in xfs_acl_valid error path. >>>> - Guard against path string overflows. >>>> - Check strdup results properly in initallfs(). >>>> - Fix attribute no_change_count logic. >>>> - Remove extraneous close() in fsrallfs(). >>>> - xfs_repair now skips the freelist scan of a corrupt agf >>>> when in no-modify mode. >>>> - xfs_db now skips freelist scans of corrupt agfs. >>>> - Remove unconditional ASSERT(0) in xfs_repair. >>>> - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. >>>> - Add depraction message for xfs_check. >>>> - xfs_quota allow user or group names beginning with digits reported by >>>> James Carter. >>>> - Fix manpages and usage() spelling, errors and omissions. >>>> >>>> I have placed a pre-release tarball here: >>>> >>>> ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz >>>> >>>> >>>> Please take a look and report any issues before next Wednesday (08 May >>>> 2013). If there are other patches which you feel are essential, now is >>>> the time to say so. >>>> >>>> Regards >>>> --Rich >>> >>> The new lines (below) in xfs_check.sh breaks older xfstests: >>> >>> xfs_check is deprecated and scheduled for removal in June 2014. >>> Please use xfs_repair -n instead. >> >> Hum, I thought xfstests stopped calling xfs_check.sh and implemented >> its own xfs_check internally: >> >> commit 187bccd310dc253feaebd69df4ccdda21eee12d0 >> Author: Chandra Seetharaman >> Date: Thu Apr 18 17:44:02 2013 +0000 >> >> xfstests: Remove dependence of xfs_check script >> >> Replace the usage of the script xfs_check and add the relevant code to >> xfstests. >> >> ... >> - [ "$XFS_CHECK_PROG" = "" ]&& _fatal "xfs_check not found" >> ... etc ... >> >> where is check getting called directly? >> >> (Or: is your xfstests up to date?) >> >> -Eric > > I disclosed it as an older xfstests. Sorry, I missed that. > It is conceivable that people will install the latest xfsprogs and not upgrade xfstests. I can hear it now, "It used to just work..." :) So what's the proposed solution? ;) TBH I think xfstests is the kind of thing that is in so much flux you should always assume you need a newer version. And since it's mostly qe/devel types using it, I'd submit that they can figure it out, but if you have a better idea, I'm all ears! Is it the return code of xfs_check or the extra output that's breaking xfstests? It's the extra output I guess. I don't know how to issue a deprecation message w/o adding output, so it seems like this is a hiccup we'll have to live with. I suppose we could add "if you're using xfstests, upgrade it now!" to the message. :) -Eric > --Mark. > From david@fromorbit.com Wed May 1 17:03:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 35BB67F52 for ; Wed, 1 May 2013 17:03:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 191738F8035 for ; Wed, 1 May 2013 15:03:13 -0700 (PDT) X-ASG-Debug-ID: 1367445786-04cb6c66e4c88b0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id wGjlZMI0nNvSzjio for ; Wed, 01 May 2013 15:03:07 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvoRAE2QgVF5LC+Z/2dsb2JhbABSgwe6N4UZBAF7F3SCHwEBBAE6HCMQCAMYCSUPBSUDIROIBgW/GRWNcIEdB4NSA5coig+HI4MfKg Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 07:33:06 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXf7A-0001Ag-1O; Thu, 02 May 2013 08:03:04 +1000 Date: Thu, 2 May 2013 08:03:04 +1000 From: Dave Chinner To: David Rientjes Cc: Shawn Bohrer , linux-mm@kvack.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: deadlock on vmap_area_lock Message-ID: <20130501220303.GO10481@dastard> X-ASG-Orig-Subj: Re: deadlock on vmap_area_lock References: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367445786 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129737 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 08:57:38AM -0700, David Rientjes wrote: > On Wed, 1 May 2013, Shawn Bohrer wrote: > > > I've got two compute clusters with around 350 machines each which are > > running kernels based off of 3.1.9 (Yes I realize this is ancient by > > todays standards). xfs_info output of one of those filesystems? What platform are you running (32 or 64 bit)? > > All of the machines run a 'find' command once an > > hour on one of the mounted XFS filesystems. Occasionally these find > > commands get stuck requiring a reboot of the system. I took a peek > > today and see this with perf: > > > > 72.22% find [kernel.kallsyms] [k] _raw_spin_lock > > | > > --- _raw_spin_lock > > | > > |--98.84%-- vm_map_ram > > | _xfs_buf_map_pages > > | xfs_buf_get > > | xfs_buf_read > > | xfs_trans_read_buf > > | xfs_da_do_buf > > | xfs_da_read_buf > > | xfs_dir2_block_getdents > > | xfs_readdir > > | xfs_file_readdir > > | vfs_readdir > > | sys_getdents > > | system_call_fastpath > > | __getdents64 > > | > > |--1.12%-- _xfs_buf_map_pages > > | xfs_buf_get > > | xfs_buf_read > > | xfs_trans_read_buf > > | xfs_da_do_buf > > | xfs_da_read_buf > > | xfs_dir2_block_getdents > > | xfs_readdir > > | xfs_file_readdir > > | vfs_readdir > > | sys_getdents > > | system_call_fastpath > > | __getdents64 > > --0.04%-- [...] > > > > Looking at the code my best guess is that we are spinning on > > vmap_area_lock, but I could be wrong. This is the only process > > spinning on the machine so I'm assuming either another process has > > blocked while holding the lock, or perhaps this find process has tried > > to acquire the vmap_area_lock twice? > > > > Significant spinlock contention doesn't necessarily mean that there's a > deadlock, but it also doesn't mean the opposite. Depending on your > definition of "occassionally", would it be possible to run with > CONFIG_PROVE_LOCKING and CONFIG_LOCKDEP to see if it uncovers any real > deadlock potential? It sure will. We've been reporting that vm_map_ram is doing GFP_KERNEL allocations from GFP_NOFS context for years, and have reported plenty of lockdep dumps as a result of it. But that's not the problem that is occurring above - lockstat is probably a good thing to look at here to determine exactly what locks are being contended on.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 17:10:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 896A27F52 for ; Wed, 1 May 2013 17:10:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6B2C9304039 for ; Wed, 1 May 2013 15:10:11 -0700 (PDT) X-ASG-Debug-ID: 1367446208-04cbb03c2ccb660001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id dTHPiuoCR4gBgwtI for ; Wed, 01 May 2013 15:10:09 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av8RAGqRgVF5LC+Z/2dsb2JhbABSgwc3ugKFGQQBexd0gh8BAQQBOhwjBQsIAxQECSUPBSUDIRMbh2sFvxoVjXCBHQeDUgOXKJEygx8q Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 07:40:08 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXfDz-0001Bi-Kh; Thu, 02 May 2013 08:10:07 +1000 Date: Thu, 2 May 2013 08:10:07 +1000 From: Dave Chinner To: Eric Sandeen Cc: Mark Tinguely , Rich Johnston , xfs-oss Subject: Re: xfsprogs-3.1.11 pre-release please test! Message-ID: <20130501221007.GP10481@dastard> X-ASG-Orig-Subj: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> <51817C88.4060208@sgi.com> <518182BA.4010406@sandeen.net> <51818679.1030408@sgi.com> <518187D0.6000809@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518187D0.6000809@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367446208 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129737 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 04:23:28PM -0500, Eric Sandeen wrote: > On 5/1/13 4:17 PM, Mark Tinguely wrote: > > On 05/01/13 16:01, Eric Sandeen wrote: > >> On 5/1/13 3:35 PM, Mark Tinguely wrote: > >>> On 05/01/13 15:12, Rich Johnston wrote: > >>>> I have placed a pre-release tarball here: > >>>> > >>>> ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz > >>>> > >>>> > >>>> Please take a look and report any issues before next Wednesday (08 May > >>>> 2013). If there are other patches which you feel are essential, now is > >>>> the time to say so. > >>>> > >>>> Regards > >>>> --Rich > >>> > >>> The new lines (below) in xfs_check.sh breaks older xfstests: > >>> > >>> xfs_check is deprecated and scheduled for removal in June 2014. > >>> Please use xfs_repair -n instead. > >> > >> Hum, I thought xfstests stopped calling xfs_check.sh and implemented > >> its own xfs_check internally: > >> > >> commit 187bccd310dc253feaebd69df4ccdda21eee12d0 > >> Author: Chandra Seetharaman > >> Date: Thu Apr 18 17:44:02 2013 +0000 > >> > >> xfstests: Remove dependence of xfs_check script > >> > >> Replace the usage of the script xfs_check and add the relevant code to > >> xfstests. > >> > >> ... > >> - [ "$XFS_CHECK_PROG" = "" ]&& _fatal "xfs_check not found" > >> ... etc ... > >> > >> where is check getting called directly? > >> > >> (Or: is your xfstests up to date?) > >> > >> -Eric > > > > I disclosed it as an older xfstests. > > Sorry, I missed that. > > > It is conceivable that people will install the latest xfsprogs and not upgrade xfstests. I can hear it now, "It used to just work..." :) > > So what's the proposed solution? ;) Upgrade xfstests. > TBH I think xfstests is the kind of thing that is in so much flux > you should always assume you need a newer version. That has always been the case. > And since it's mostly qe/devel types using it, I'd submit that > they can figure it out, but if you have a better idea, I'm all > ears! Given the number of people that are likely to hit this, then I think leaving it as it stands is just fine. The expectation is that you should be using an xfstests that matches the age of your userspace tools, otherwise you are not going be running all the tests necessary to exercise the current userspace functionality you have installed... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 17:30:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 687A37F52 for ; Wed, 1 May 2013 17:30:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 41B97304043 for ; Wed, 1 May 2013 15:30:26 -0700 (PDT) X-ASG-Debug-ID: 1367447424-04cbb03c2ccc3d0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id MfmXlne4id8R2RZf for ; Wed, 01 May 2013 15:30:24 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av4RAD2WgVF5LC+Z/2dsb2JhbABSgwc3ugKFGQQBexd0gh8BAQUnExwjEAgDDgoJJQ8FJQMhE4gLDb8IFY1wgR0Hg1IDlyiRMoMfKg Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 08:00:23 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXfXa-0001Dy-7y; Thu, 02 May 2013 08:30:22 +1000 Date: Thu, 2 May 2013 08:30:22 +1000 From: Dave Chinner To: Ben Myers Cc: James Dingwall , xfs@oss.sgi.com Subject: Re: Cleancache support in XFS Message-ID: <20130501223022.GQ10481@dastard> X-ASG-Orig-Subj: Re: Cleancache support in XFS References: <51810CED.4080003@zynstra.com> <20130501162044.GN29359@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130501162044.GN29359@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367447424 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 11:20:44AM -0500, Ben Myers wrote: > Hi James, > > On Wed, May 01, 2013 at 01:39:09PM +0100, James Dingwall wrote: > > In reference to: http://oss.sgi.com/archives/xfs/2012-05/msg00046.html > > > > $ grep -r cleancache fs/xfs > > on the 3.9 kernel source suggests that no patch was submitted to > > enable cleancache for the XFS filesystem. Since it was suggested > > that this could be a one liner I've had a go and my first effort is > > inline below. While this seems to compile OK I have no experience > > in filesystems so I would appreciate it if anyone can point out that > > it is obviously wrong and likely to eat my data before I try booting > > the kernel. > > > > If it seems a reasonable attempt what would be the best way to check > > that it isn't doing nasty things? > > Hrm.. Looks like there is a doc in Documentation/vm/cleancache.txt which > includes a list of attributes the filesystem needs to have to work properly > with cleancache. So, those points are: | Some points for a filesystem to consider: | | - The FS should be block-device-based (e.g. a ram-based FS such | as tmpfs should not enable cleancache) OK. |- To ensure coherency/correctness, the FS must ensure that all | file removal or truncation operations either go through VFS or | add hooks to do the equivalent cleancache "invalidate" operations There be dragons - do all the XFS ioctls do the right thing? |- To ensure coherency/correctness, either inode numbers must | be unique across the lifetime of the on-disk file OR the | FS must provide an "encode_fh" function. Ok. |- The FS must call the VFS superblock alloc and deactivate routines | or add hooks to do the equivalent cleancache calls done there. OK. |- To maximize performance, all pages fetched from the FS should | go through the do_mpag_readpage routine or the FS should add | hooks to do the equivalent (cf. btrfs) xfs uses mpage_readpages() so should be fine. |- Currently, the FS blocksize must be the same as PAGESIZE. This | is not an architectural restriction, but no backends currently | support anything different. Which means that we need hooks in the mount path to determine if this is the case or not. I note that neither ext3/ext4 do this check so I can't determine why this restriction is mentioned, and I'm not sure if it has any relevance to btrfs. IOWs, I'd like to know why this restriction exists - what does cleancache care about how the filesystem maps blocks to the page in the page cache - any way the filesystem does this it uses page->private to hide this fact from the page cache.... |- A clustered FS should invoke the "shared_init_fs" cleancache | hook to get best performance for some backends. Not a problem. So there's a couple of things that need to be explained and explored, and a bunch of testing to be done.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From nscott@redhat.com Wed May 1 17:47:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 20BDE7F52 for ; Wed, 1 May 2013 17:47:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0BB1C30407E for ; Wed, 1 May 2013 15:47:11 -0700 (PDT) X-ASG-Debug-ID: 1367448430-04cb6c66e2ca210001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 6HdwXUFNycWdVgdc; Wed, 01 May 2013 15:47:10 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r41Ml956023495; Wed, 1 May 2013 18:47:09 -0400 Date: Wed, 1 May 2013 18:47:09 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: rjohnston@sgi.com Cc: xfs@oss.sgi.com Message-ID: <2140281730.8604872.1367448429485.JavaMail.root@redhat.com> In-Reply-To: <20130501195229.468657797@sgi.com> References: <20130501195229.468657797@sgi.com> <20130501195229.468657797@sgi.com> Subject: Re: xfsdump: Release 3.1.3 MIME-Version: 1.0 X-ASG-Orig-Subj: Re: xfsdump: Release 3.1.3 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF17 (Linux)/8.0.3_GA_5664) Thread-Topic: xfsdump: Release 3.1.3 Thread-Index: ESZCUdnTNCDj8YfwF28C9WZoTYq86A== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1367448430 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hi Rich, ----- Original Message ----- > Update version numbers and changelog. > > + -- Nathan Scott Tue, 19 Mar 2013 14:20:01 +1100 Not sure if the release script updates the date here - if not, output from "date -R" would be appropriate. No need to CC me btw, I'm on the list. thanks. -- Nathan From bpm@oss.sgi.com Wed May 1 19:56:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 4B0527F53; Wed, 1 May 2013 19:56:09 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.9-rc1-46-gcab09a8 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 123887e8433e58ebbcc4c91491d8b8cde31d6d79 X-Git-Newrev: cab09a81fbefcb21db5213a84461d421946f6eb8 Message-Id: <20130502005609.4B0527F53@oss.sgi.com> Date: Wed, 1 May 2013 19:56:09 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated cab09a8 xfs: fix da node magic number mismatches 946217b xfs: Remote attr validation fixes and optimisations from 123887e8433e58ebbcc4c91491d8b8cde31d6d79 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cab09a81fbefcb21db5213a84461d421946f6eb8 Author: Dave Chinner Date: Tue Apr 30 21:39:36 2013 +1000 xfs: fix da node magic number mismatches Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 946217ba28637d7a08e03e93ef40586ce621f557 Author: Dave Chinner Date: Tue Apr 30 21:39:35 2013 +1000 xfs: Remote attr validation fixes and optimisations - optimise the calcuation for the number of blocks in a remote xattr. - check attribute length against MAX_XATTR_SIZE, not MAXPATHLEN - whitespace fixes Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_attr_remote.c | 19 +++++-------------- fs/xfs/xfs_da_btree.c | 2 +- fs/xfs/xfs_log_recover.c | 3 +-- 3 files changed, 7 insertions(+), 17 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Wed May 1 19:56:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 491BD7F58; Wed, 1 May 2013 19:56:27 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. v3.9-rc1-46-gcab09a8 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 123887e8433e58ebbcc4c91491d8b8cde31d6d79 X-Git-Newrev: cab09a81fbefcb21db5213a84461d421946f6eb8 Message-Id: <20130502005627.491BD7F58@oss.sgi.com> Date: Wed, 1 May 2013 19:56:27 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated cab09a8 xfs: fix da node magic number mismatches 946217b xfs: Remote attr validation fixes and optimisations from 123887e8433e58ebbcc4c91491d8b8cde31d6d79 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cab09a81fbefcb21db5213a84461d421946f6eb8 Author: Dave Chinner Date: Tue Apr 30 21:39:36 2013 +1000 xfs: fix da node magic number mismatches Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 946217ba28637d7a08e03e93ef40586ce621f557 Author: Dave Chinner Date: Tue Apr 30 21:39:35 2013 +1000 xfs: Remote attr validation fixes and optimisations - optimise the calcuation for the number of blocks in a remote xattr. - check attribute length against MAX_XATTR_SIZE, not MAXPATHLEN - whitespace fixes Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_attr_remote.c | 19 +++++-------------- fs/xfs/xfs_da_btree.c | 2 +- fs/xfs/xfs_log_recover.c | 3 +-- 3 files changed, 7 insertions(+), 17 deletions(-) hooks/post-receive -- XFS development tree From david@fromorbit.com Wed May 1 20:12:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D1F007F52 for ; Wed, 1 May 2013 20:12:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A22A0304070 for ; Wed, 1 May 2013 18:12:19 -0700 (PDT) X-ASG-Debug-ID: 1367457137-04bdf077c8d0f20001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id Nbt0NbHov65kRFM6 for ; Wed, 01 May 2013 18:12:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvsRALK6gVF5LC+Z/2dsb2JhbABSgwe6OoUZBAGBABd0gh8BAQUnExwjEAgDFQMJJQ8FJQMhE4gLvzUVjXCBHQeDUgOXKIoPhyODHyo Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 10:42:14 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXi4B-0001Y9-Ul; Thu, 02 May 2013 11:12:12 +1000 Date: Thu, 2 May 2013 11:12:11 +1000 From: Dave Chinner To: Jeff Liu Cc: "xfs@oss.sgi.com" , Mark Tinguely Subject: Re: [PATCH 1/2] xfs: Remove XFS_MOUNT_RETERR Message-ID: <20130502011211.GR10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs: Remove XFS_MOUNT_RETERR References: <518125C9.8000008@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518125C9.8000008@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367457137 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129749 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 10:25:13PM +0800, Jeff Liu wrote: > From: Jie Liu > > XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if > mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" > branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and > so we always be emitting a warning and returning an error. > > Hence, we can remove it and get rid of a couple of redundant > check up against it at xfs_upate_alignment(). > > Thanks Dave Chinner for the confirmation. > > Signed-off-by: Jie Liu > Cc: Dave Chinner > Cc: Mark Tinguely > --- > fs/xfs/xfs_mount.c | 39 ++++++++++++--------------------------- > fs/xfs/xfs_mount.h | 2 -- > fs/xfs/xfs_super.c | 5 +---- > 3 files changed, 13 insertions(+), 33 deletions(-) > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 3806088..29e8de8 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -872,42 +872,27 @@ xfs_update_alignment(xfs_mount_t *mp) > */ > if ((BBTOB(mp->m_dalign) & mp->m_blockmask) || > (BBTOB(mp->m_swidth) & mp->m_blockmask)) { > - if (mp->m_flags & XFS_MOUNT_RETERR) { > - xfs_warn(mp, "alignment check failed: " > - "(sunit/swidth vs. blocksize)"); > - return XFS_ERROR(EINVAL); > - } > - mp->m_dalign = mp->m_swidth = 0; > + xfs_warn(mp, "alignment check failed: " > + "(sunit/swidth vs. blocksize)"); Let's convert these format strings to a single line at the same time and be consistent with output. ie: xfs_warn(mp, "alignment check failed: sunit/swidth vs. blocksize(%d)", sbp->sb_blocksize); > + return XFS_ERROR(EINVAL); > } else { > /* > * Convert the stripe unit and width to FSBs. > */ > mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign); > if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) { > - if (mp->m_flags & XFS_MOUNT_RETERR) { > - xfs_warn(mp, "alignment check failed: " > - "(sunit/swidth vs. ag size)"); > - return XFS_ERROR(EINVAL); > - } > - xfs_warn(mp, > - "stripe alignment turned off: sunit(%d)/swidth(%d) " > - "incompatible with agsize(%d)", > - mp->m_dalign, mp->m_swidth, > - sbp->sb_agblocks); > - > - mp->m_dalign = 0; > - mp->m_swidth = 0; > + xfs_warn(mp, "alignment check failed: " > + "sunit(%d)/swidth(%d) incompatible with agsize(%d)", "alignment check failed: sunit/swidth vs. agsize(%d)", sbp->sb_agblocks); > + mp->m_dalign, mp->m_swidth, > + sbp->sb_agblocks); > + return XFS_ERROR(EINVAL); > } else if (mp->m_dalign) { > mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth); > } else { > - if (mp->m_flags & XFS_MOUNT_RETERR) { > - xfs_warn(mp, "alignment check failed: " > - "sunit(%d) less than bsize(%d)", > - mp->m_dalign, > - mp->m_blockmask +1); > - return XFS_ERROR(EINVAL); > - } > - mp->m_swidth = 0; > + xfs_warn(mp, "alignment check failed: " > + "sunit(%d) less than bsize(%d)", > + mp->m_dalign, mp->m_blockmask + 1); "alignment check failed: sunit(%d) less than bsize(%d)", mp->m_dalign, sbp->sb_blocksize); > + return XFS_ERROR(EINVAL); > } > } > > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index bc90706..8145412 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -230,8 +230,6 @@ typedef struct xfs_mount { > operations, typically for > disk errors in metadata */ > #define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */ > -#define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to > - user */ > #define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment > allocations */ > #define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */ > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index ea341ce..51da4d2 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -446,11 +446,8 @@ done: > * Before the mount call ends we will convert > * these to FSBs. > */ > - if (dsunit) { > + if (dsunit) > mp->m_dalign = dsunit; > - mp->m_flags |= XFS_MOUNT_RETERR; > - } > - > if (dswidth) > mp->m_swidth = dswidth; This code can be simplified, too. We've already done this check: if ((dsunit && !dswidth) || (!dsunit && dswidth)) { xfs_warn(mp, "sunit and swidth must be specified together"); return EINVAL; } So we know that dsunit/dswidth are either both zero or both set, so the above code could simply end up as: if (dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) { /* * At this point the superblock has not been read * in, therefore we do not know the block size. * Before the mount call ends we will convert * these to FSBs. */ mp->m_dalign = dsunit; mp->m_swidth = dswidth; } Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 20:13:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 04ED67F52 for ; Wed, 1 May 2013 20:13:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 91FF1AC001 for ; Wed, 1 May 2013 18:13:05 -0700 (PDT) X-ASG-Debug-ID: 1367457183-04bdf077c6d0f90001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id VCmP6ORlVUpyFiCG for ; Wed, 01 May 2013 18:13:04 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvsRALK6gVF5LC+Z/2dsb2JhbABSgwe6OoUZBAGBABd0gh8BAQUnExwjEAgDFQMJJQ8FJQMhE4gLvzUVjWEPgR0Hg1IDlyiRMoFVgUoqgS4 Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 10:43:03 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXi50-0001YI-Qi; Thu, 02 May 2013 11:13:02 +1000 Date: Thu, 2 May 2013 11:13:02 +1000 From: Dave Chinner To: Jeff Liu Cc: "xfs@oss.sgi.com" , Mark Tinguely Subject: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount Message-ID: <20130502011302.GS10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount References: <518125CF.3050806@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518125CF.3050806@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367457183 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129749 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 10:25:19PM +0800, Jeff Liu wrote: > From: Jie Liu > > As per the mount man page, sunit and swidth can be changed via > mount options. For XFS, on the face of it, those options seems > works if the specified alignments is properly, e.g. > # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt > # mount | grep sdb1 > /dev/sdb1 on /mnt type xfs (rw,sunit=4096,swidth=8192) > > However, neither sunit nor swidth is shown from the xfs_info output. > # xfs_info /mnt > meta-data=/dev/sdb1 isize=256 agcount=4, agsize=262144 blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=1048576, imaxpct=25 > = sunit=0 swidth=0 blks > ^^^^^^^^^^^^^^^^^^^^^^^^^^ > naming =version 2 bsize=4096 ascii-ci=0 > log =internal bsize=4096 blocks=2560, version=2 > = sectsz=512 sunit=0 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 > > The reason is that the alignment can only be changed if the relevant > super block is already configured with alignments, otherwise, the > given value is silently ignored. > > With this fix, the attempt to mount a storage without strip alignment > setup on a super block will get an error with a warning in syslog to > indicate the true cause. > > # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt > mount: wrong fs type, bad option, bad superblock on /dev/sdb1, > missing codepage or helper program, or other error > In some cases useful info is found in syslog - try > dmesg | tail or so > # dmesg|tail > ....... > XFS (sdb1): can not change alignment: superblock does not support data > alignment > > Signed-off-by: Jie Liu > Cc: Mark Tinguely > Cc: Dave Chinner > --- > fs/xfs/xfs_mount.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 29e8de8..2836ef6 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -909,6 +909,10 @@ xfs_update_alignment(xfs_mount_t *mp) > sbp->sb_width = mp->m_swidth; > mp->m_update_flags |= XFS_SB_WIDTH; > } > + } else { > + xfs_warn(mp, "cannot change alignment: " > + "superblock does not support data alignment"); Same comment again about single line format strings. Otherwise it's ok. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 20:13:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2F6EB7F52 for ; Wed, 1 May 2013 20:13:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0ED5F8F8050 for ; Wed, 1 May 2013 18:13:56 -0700 (PDT) X-ASG-Debug-ID: 1367457234-04bdf077c8d1000001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id Cjei1Fpisphzu0iX for ; Wed, 01 May 2013 18:13:54 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvoRALK6gVF5LC+Z/2dsb2JhbABSgwe6OoUZBAGBABd0gh8BAQU6HCMQCAMVAwklDwUlAyETiAu/NRWNcIEdB4NSA5coig+HI4MfKg Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 10:43:54 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXi5p-0001YQ-Hj; Thu, 02 May 2013 11:13:53 +1000 Date: Thu, 2 May 2013 11:13:53 +1000 From: Dave Chinner To: Jeff Liu Cc: "xfs@oss.sgi.com" Subject: Re: [PATCH] xfs: Remove xfs_krash from struct xfs_mount Message-ID: <20130502011353.GT10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: Remove xfs_krash from struct xfs_mount References: <51812614.2010807@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51812614.2010807@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367457234 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129749 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 10:26:28PM +0800, Jeff Liu wrote: > From: Jie Liu > > Remove struct xfs_krash from xfs_mount as there is no user of it nowadays. xfs_chash Otherwise looks good. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 20:14:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 376857F52 for ; Wed, 1 May 2013 20:14:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 134358F8059 for ; Wed, 1 May 2013 18:14:36 -0700 (PDT) X-ASG-Debug-ID: 1367457274-04cbb03c2ed12b0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id iQzsfmTNprMKAypQ for ; Wed, 01 May 2013 18:14:34 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvoRALK6gVF5LC+Z/2dsb2JhbABSgwe6OoUZBAGBABd0gh8BAQU6HCMQCAMVAwklDwUlAyETiAu/NRWNcIEdB4NSA5coig+HI4MfKg Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 10:44:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXi6T-0001YY-2w; Thu, 02 May 2013 11:14:33 +1000 Date: Thu, 2 May 2013 11:14:33 +1000 From: Dave Chinner To: Jeff Liu Cc: "xfs@oss.sgi.com" Subject: Re: [PATCH] xfs: Remove XFS_SWRITE_LOG_RES macros Message-ID: <20130502011433.GU10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: Remove XFS_SWRITE_LOG_RES macros References: <51812658.4060505@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51812658.4060505@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367457274 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129749 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 10:27:36PM +0800, Jeff Liu wrote: > From: Jie Liu > > Remove the XFS_SWRITE_LOG_RES macros as there is no user of it nowadays. Looks good. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From bpm@oss.sgi.com Wed May 1 20:14:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 771787F60; Wed, 1 May 2013 20:14:41 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v3.9-rc1-46-gcab09a8 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: e001873853d87674dd5b3cfa2851885023616695 X-Git-Newrev: cab09a81fbefcb21db5213a84461d421946f6eb8 Message-Id: <20130502011441.771787F60@oss.sgi.com> Date: Wed, 1 May 2013 20:14:39 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated discards e001873853d87674dd5b3cfa2851885023616695 (commit) discards 3325beed46d8d14d873e94d89ea57ee900dec942 (commit) discards 83cdadd8b0559c93728d065d23ca3485fa567e54 (commit) cab09a8 xfs: fix da node magic number mismatches 946217b xfs: Remote attr validation fixes and optimisations 123887e xfs: Teach dquot recovery about CONFIG_XFS_QUOTA e721f50 xfs: implement extended feature masks 04a1e6c xfs: add CRC checks to the superblock 61fe135 xfs: buffer type overruns blf_flags field d75afeb xfs: add buffer types to directory and attribute buffers d2e448d xfs: add CRC protection to remote attributes 95920cd xfs: split remote attribute code out 517c222 xfs: add CRCs to attr leaf blocks f5ea110 xfs: add CRCs to dir2/da node blocks 6b2647a xfs: shortform directory offsets change for dir3 format 24df33b xfs: add CRC checking to dir2 leaf blocks 33363fe xfs: add CRC checking to dir2 data blocks cbc8adf xfs: add CRC checking to dir2 free blocks f5f3d9b xfs: add CRC checks to block format directory blocks f948dd7 xfs: add CRC checks to remote symlinks 19de735 xfs: split out symlink code into it's own file. 93848a9 xfs: add version 3 inode format with CRCs 3fe58f3 xfs: add CRC checks for quota blocks 983d09f xfs: add CRC checks to the AGI 77c95bb xfs: add CRC checks to the AGFL 4e0e604 xfs: add CRC checks to the AGF ee1a47a xfs: add support for large btree blocks a205064 xfs: increase hexdump output in xfs_corruption_error 7fe3258 xfs: Update xfs_log_commit_cil() comments d4fd0e9 xfs: Remove the obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros 666d644 xfs: don't free EFIs before the EFDs are committed 3d6e036 xfs: Add ratelimited printk for different alert levels ff9a28f xfs: Fix WARN_ON(delalloc) in xfs_vm_releasepage() 19cb7e3 xfs: xfs_iomap_prealloc_size() tracepoint 76a4202 xfs: add quota-driven speculative preallocation throttling b136645 xfs: xfs_dquot prealloc throttling watermarks and low free space 4b6eae2e xfs: pass xfs_dquot to xfs_qm_adjust_dqlimits() instead of xfs_disk_dquot_t c9bdbdc xfs: push rounddown_pow_of_two() to after prealloc throttle 3c58b5f xfs: reorganize xfs_iomap_prealloc_size to remove indentation 56cea2d xfs: take inode version into account in XFS_LITINO c163f9a xfs: ensure we capture IO errors correctly d8ddfe8 xfs: Remove obsoleted m_inode_shrink from xfs_mount structure 9e5987a xfs: rearrange some code in xfs_bmap for better locality ecb3403 xfs: rename random32() to prandom_u32() d5929de xfs: don't verify buffers after IO errors e8108ce xfs: fix xfs_iomap_eof_prealloc_initial_size type e114b5f xfs: increase prealloc size to double that of the previous extent e78c420 xfs: fix potential infinite loop in xfs_iomap_prealloc_size() from e001873853d87674dd5b3cfa2851885023616695 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cab09a81fbefcb21db5213a84461d421946f6eb8 Author: Dave Chinner Date: Tue Apr 30 21:39:36 2013 +1000 xfs: fix da node magic number mismatches Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 946217ba28637d7a08e03e93ef40586ce621f557 Author: Dave Chinner Date: Tue Apr 30 21:39:35 2013 +1000 xfs: Remote attr validation fixes and optimisations - optimise the calcuation for the number of blocks in a remote xattr. - check attribute length against MAX_XATTR_SIZE, not MAXPATHLEN - whitespace fixes Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 123887e8433e58ebbcc4c91491d8b8cde31d6d79 Author: Dave Chinner Date: Tue Apr 30 21:39:33 2013 +1000 xfs: Teach dquot recovery about CONFIG_XFS_QUOTA Fix a build error when CONFIG_XFS_QUOTA=n: fs/built-in.o: In function `xlog_recovery_validate_buf_type': /home/dave/src/build/x86-64/xfsdev/fs/xfs/xfs_log_recover.c:1948: undefined reference to `xfs_dquot_buf_ops' Reported-by: Michael L. Semon Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit e721f504cf46a0c84741ba2137d7a052d79436db Author: Dave Chinner Date: Wed Apr 3 16:11:32 2013 +1100 xfs: implement extended feature masks The version 5 superblock has extended feature masks for compatible, incompatible and read-only compatible feature sets. Implement the masking and mount-time checking for these feature masks. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 04a1e6c5b222b089c6960dfc5352002002a4355f Author: Dave Chinner Date: Wed Apr 3 16:11:31 2013 +1100 xfs: add CRC checks to the superblock With the addition of CRCs, there is such a wide and varied change to the on disk format that it makes sense to bump the superblock version number rather than try to use feature bits for all the new functionality. This commit introduces all the new superblock fields needed for all the new functionality: feature masks similar to ext4, separate project quota inodes, a LSN field for recovery and the CRC field. This commit does not bump the superblock version number, however. That will be done as a separate commit at the end of the series after all the new functionality is present so we switch it all on in one commit. This means that we can slowly introduce the changes without them being active and hence maintain bisectability of the tree. This patch is based on a patch originally written by myself back from SGI days, which was subsequently modified by Christoph Hellwig. There is relatively little of that patch remaining, but the history of the patch still should be acknowledged here. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 61fe135c1dde112f483bba01d645debd881b5428 Author: Dave Chinner Date: Wed Apr 3 16:11:30 2013 +1100 xfs: buffer type overruns blf_flags field The buffer type passed to log recvoery in the buffer log item overruns the blf_flags field. I had assumed that flags field was a 32 bit value, and it turns out it is a unisgned short. Therefore having 19 flags doesn't really work. Convert the buffer type field to numeric value, and use the top 5 bits of the flags field for it. We currently have 17 types of buffers, so using 5 bits gives us plenty of room for expansion in future.... Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit d75afeb3d302019527331520a2632b6614425b40 Author: Dave Chinner Date: Wed Apr 3 16:11:29 2013 +1100 xfs: add buffer types to directory and attribute buffers Add buffer types to the buffer log items so that log recovery can validate the buffers and calculate CRCs correctly after the buffers are recovered. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit d2e448d5fdebdcda93ed171339a3d864f65c227e Author: Dave Chinner Date: Wed Apr 3 16:11:28 2013 +1100 xfs: add CRC protection to remote attributes There are two ways of doing this - the first is to add a CRC to the remote attribute entry in the attribute block. The second is to treat them similar to the remote symlink, where each fragment has it's own header and identifies fragment location in the attribute. The problem with the CRC in the remote attr entry is that we cannot identify the owner of the metadata from the metadata blocks themselves, or where the blocks fit into the remote attribute. The down side to this approach is that we never know when the attribute has been read from disk or not and so we have to verify it every time it is read, and we must calculate it during the create transaction and log it. We do not log CRCs for any other metadata, and so this creates a unique set of coherency problems that, in general, are best avoided. Adding an identifying header to each allocated block allows us to identify each fragment and where in the attribute it is located. It enables us to rebuild the remote attribute from just the raw blocks containing the attribute. It also provides us to do per-block CRCs verification at IO time rather than during the transaction context that creates it or every time it is read into a user buffer. Hence it avoids all the problems that an external, logged CRC has, and provides all the benefits of self identifying metadata. The only complexity is that we have to add a header per fragment, and we don't know how many fragments will be needed prior to allocations. If we take the symlink example, the header is 56 bytes and hence for a 4k block size filesystem, in the worst case 16 headers requires 1 extra block for the 64k attribute data. For 512 byte filesystems the worst case is an extra block for every 9 fragments (i.e. 16 extra blocks in the worse case). This will be very rare and so it's not really a major concern. Because allocation is done in two steps - the first finds a hole large enough in the attribute file, the second does the allocation - we only need to find a hole big enough for a worst case allocation. We only need to allocate enough extra blocks for number of headers required by the fragments, and we can calculate that as we go.... Hence it really only makes sense to use the same model as for symlinks - it doesn't add that much complexity, does not require an attribute tree format change, and does not require logging calculated CRC values. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 95920cd6ce1c9cd8d3a0f639a674aa26c974ed57 Author: Dave Chinner Date: Wed Apr 3 16:11:27 2013 +1100 xfs: split remote attribute code out Adding CRC support to remote attributes adds a significant amount of remote attribute specific code. Split the existing remote attribute code out into it's own file so that all the relevant remote attribute code is in a single, easy to find place. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 517c22207b045993a6529e1f8684095adaae9cf3 Author: Dave Chinner Date: Wed Apr 24 18:58:55 2013 +1000 xfs: add CRCs to attr leaf blocks Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit f5ea110044fa858925a880b4fa9f551bfa2dfc38 Author: Dave Chinner Date: Wed Apr 24 18:58:02 2013 +1000 xfs: add CRCs to dir2/da node blocks Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 6b2647a12a00bdad431ac1e9049c5e8579aa7869 Author: Dave Chinner Date: Wed Apr 3 16:11:24 2013 +1100 xfs: shortform directory offsets change for dir3 format Because the header size for the CRC enabled directory blocks is larger, the offset of the first entry into a directory block is different to the dir2 format. The shortform directory stores the dirent's offset so that it doesn't change when moving from shortform to block form and back again, and hence it needs to take into account the different header sizes to maintain the correct offsets. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 24df33b45ecf5ca413ef1530e0aca5506d9be2cc Author: Dave Chinner Date: Fri Apr 12 07:30:21 2013 +1000 xfs: add CRC checking to dir2 leaf blocks This addition follows the same pattern as the dir2 block CRCs. Seeing as both LEAF1 and LEAFN types need to changed at the same time, this is a pretty large amount of change. leaf block headers need to be abstracted away from the on-disk structures (struct xfs_dir3_icleaf_hdr), as do the base leaf entry locations. This header abstract allows the in-core header and leaf entry location to be passed around instead of the leaf block itself. This saves a lot of converting individual variables from on-disk format to host format where they are used, so there's a good chance that the compiler will be able to produce much more optimal code as it's not having to byteswap variables all over the place. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 33363feed1614def83d0a6870051f0a7828cd61b Author: Dave Chinner Date: Wed Apr 3 16:11:22 2013 +1100 xfs: add CRC checking to dir2 data blocks This addition follows the same pattern as the dir2 block CRCs. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit cbc8adf89724b961c08b823d8bfb6dadbfa8733d Author: Dave Chinner Date: Wed Apr 3 16:11:21 2013 +1100 xfs: add CRC checking to dir2 free blocks This addition follows the same pattern as the dir2 block CRCs, but with a few differences. The main difference is that the free block header is different between the v2 and v3 formats, so an "in-core" free block header has been added and _todisk/_from_disk functions used to abstract the differences in structure format from the code. This is similar to the on-disk superblock versus the in-core superblock setup. The in-core strucutre is populated when the buffer is read from disk, all the in memory checks and modifications are done on the in-core version of the structure which is written back to the buffer before the buffer is logged. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit f5f3d9b0161633e8943520e83df634ad540b3b7f Author: Dave Chinner Date: Wed Apr 3 16:11:20 2013 +1100 xfs: add CRC checks to block format directory blocks Now that directory buffers are made from a single struct xfs_buf, we can add CRC calculation and checking callbacks. While there, add all the fields to the on disk structures for future functionality such as d_type support, uuids, block numbers, owner inode, etc. To distinguish between the different on disk formats, change the magic numbers for the new format directory blocks. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit f948dd76dde021c050c7c35720dc066a8b9a5e35 Author: Dave Chinner Date: Wed Apr 3 16:11:19 2013 +1100 xfs: add CRC checks to remote symlinks Add a header to the remote symlink block, containing location and owner information, as well as CRCs and LSN fields. This requires verifiers to be added to the remote symlink buffers for CRC enabled filesystems. This also fixes a bug reading multiple block symlinks, where the second block overwrites the first block when copying out the link name. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 19de7351a8eb82dc99745e60e8f43474831d99c7 Author: Dave Chinner Date: Wed Apr 3 16:11:18 2013 +1100 xfs: split out symlink code into it's own file. The symlink code is about to get more complicated when CRCs are added for remote symlink blocks. The symlink management code is mostly self contained, so move it to it's own files so that all the new code and the existing symlink code will not be intermingled with other unrelated code. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 93848a999cf9b9e4f4f77dba843a48c393f33c59 Author: Christoph Hellwig Date: Wed Apr 3 16:11:17 2013 +1100 xfs: add version 3 inode format with CRCs Add a new inode version with a larger core. The primary objective is to allow for a crc of the inode, and location information (uuid and ino) to verify it was written in the right place. We also extend it by: a creation time (for Samba); a changecount (for NFSv4); a flush sequence (in LSN format for recovery); an additional inode flags field; and some additional padding. These additional fields are not implemented yet, but already laid out in the structure. [dchinner@redhat.com] Added LSN and flags field, some factoring and rework to capture all the necessary information in the crc calculation. Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 3fe58f30b4fc3f8a9084b035a02bc0c67bee8d00 Author: Christoph Hellwig Date: Wed Apr 3 16:11:16 2013 +1100 xfs: add CRC checks for quota blocks Use the reserved space in struct xfs_dqblk to store a UUID and a crc for the quota blocks. [dchinner@redhat.com] Add a LSN field and update for current verifier infrastructure. Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 983d09ffe396ed5d5339a1b9ff994dd0b0f2069f Author: Dave Chinner Date: Wed Apr 3 16:11:15 2013 +1100 xfs: add CRC checks to the AGI Same set of changes made to the AGF need to be made to the AGI. This patch has a similar history to the AGF, hence a similar sign-off chain. Signed-off-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 77c95bba013089fa868217283eb6d98a05913e53 Author: Christoph Hellwig Date: Wed Apr 3 16:11:14 2013 +1100 xfs: add CRC checks to the AGFL Add CRC checks, location information and a magic number to the AGFL. Previously the AGFL was just a block containing nothing but the free block pointers. The new AGFL has a real header with the usual boilerplate instead, so that we can verify it's not corrupted and written into the right place. [dchinner@redhat.com] Added LSN field, reworked significantly to fit into new verifier structure and growfs structure, enabled full verifier functionality now there is a header to verify and we can guarantee an initialised AGFL. Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 4e0e6040c4052aff15a494ac05778f4086d24c33 Author: Dave Chinner Date: Wed Apr 3 16:11:13 2013 +1100 xfs: add CRC checks to the AGF The AGF already has some self identifying fields (e.g. the sequence number) so we only need to add the uuid to it to identify the filesystem it belongs to. The location is fixed based on the sequence number, so there's no need to add a block number, either. Hence the only additional fields are the CRC and LSN fields. These are unlogged, so place some space between the end of the logged fields and them so that future expansion of the AGF for logged fields can be placed adjacent to the existing logged fields and hence not complicate the field-derived range based logging we currently have. Based originally on a patch from myself, modified further by Christoph Hellwig and then modified again to fit into the verifier structure with additional fields by myself. The multiple signed-off-by tags indicate the age and history of this patch. Signed-off-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit ee1a47ab0e77600fcbdf1c87d461bd8f3f63150d Author: Christoph Hellwig Date: Sun Apr 21 14:53:46 2013 -0500 xfs: add support for large btree blocks Add support for larger btree blocks that contains a CRC32C checksum, a filesystem uuid and block number for detecting filesystem consistency and out of place writes. [dchinner@redhat.com] Also include an owner field to allow reverse mappings to be implemented for improved repairability and a LSN field to so that log recovery can easily determine the last modification that made it to disk for each buffer. [dchinner@redhat.com] Add buffer log format flags to indicate the type of buffer to recovery so that we don't have to do blind magic number tests to determine what the buffer is. [dchinner@redhat.com] Modified to fit into the verifier structure. Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit a2050646f655a90400cbb66c3866d2e0137eee0c Author: Dave Chinner Date: Wed Apr 3 16:11:11 2013 +1100 xfs: increase hexdump output in xfs_corruption_error Currently xfs_corruption_error() dumps the first 16 bytes of the buffer that is passed to it when a corruption occurs. This is not large enough to see the entire state of the header of the block that was determined to be corrupt. increase the output to 64 bytes to capture the majority of all headers in all types of metadata blocks. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 7fe3258c50de383037102129c57df5cb66ab2000 Author: Jeff Liu Date: Thu Apr 4 16:07:14 2013 +0800 xfs: Update xfs_log_commit_cil() comments xfs_log_commit_iclog() function has been removed by commits 93b8a585: xfs: remove the deprecated nodelaylog option Beginning from Linux 3.3, only delayed logging is supported so that we call xfs_log_commit_cil() at xfs_trans_commit() only, remove the useless comments so. Signed-off-by: Jie Liu Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit d4fd0e92fbcfdba7bb2c789504a957ab8f835c38 Author: Jeff Liu Date: Thu Apr 4 12:10:42 2013 +0800 xfs: Remove the obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros There is no more users of this Macro, so it's time to kill it dead. Signed-off-by: Jie Liu Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 666d644cd72a9ec58b353209ff191d7430f3b357 Author: Dave Chinner Date: Wed Apr 3 14:09:21 2013 +1100 xfs: don't free EFIs before the EFDs are committed Filesystems are occasionally being shut down with this error: xfs_trans_ail_delete_bulk: attempting to delete a log item that is not in the AIL. It was diagnosed to be related to the EFI/EFD commit order when the EFI and EFD are in different checkpoints and the EFD is committed before the EFI here: http://oss.sgi.com/archives/xfs/2013-01/msg00082.html The real problem is that a single bit cannot fully describe the states that the EFI/EFD processing can be in. These completion states are: EFI EFI in AIL EFD Result committed/unpinned Yes committed OK committed/pinned No committed Shutdown uncommitted No committed Shutdown Note that the "result" field is what should happen, not what does happen. The current logic is broken and handles the first two cases correctly by luck. That is, the code will free the EFI if the XFS_EFI_COMMITTED bit is *not* set, rather than if it is set. The inverted logic "works" because if both EFI and EFD are committed, then the first __xfs_efi_release() call clears the XFS_EFI_COMMITTED bit, and the second frees the EFI item. Hence as long as xfs_efi_item_committed() has been called, everything appears to be fine. It is the third case where the logic fails - where xfs_efd_item_committed() is called before xfs_efi_item_committed(), and that results in the EFI being freed before it has been committed. That is the bug that triggered the shutdown, and hence keeping track of whether the EFI has been committed or not is insufficient to correctly order the EFI/EFD operations w.r.t. the AIL. What we really want is this: the EFI is always placed into the AIL before the last reference goes away. The only way to guarantee that is that the EFI is not freed until after it has been unpinned *and* the EFD has been committed. That is, restructure the logic so that the only case that can occur is the first case. This can be done easily by replacing the XFS_EFI_COMMITTED with an EFI reference count. The EFI is initialised with it's own count, and that is not released until it is unpinned. However, there is a complication to this method - the high level EFI/EFD code in xfs_bmap_finish() does not hold direct references to the EFI structure, and runs a transaction commit between the EFI and EFD processing. Hence the EFI can be freed even before the EFD is created using such a method. Further, log recovery uses the AIL for tracking EFI/EFDs that need to be recovered, but it uses the AIL *differently* to the EFI transaction commit. Hence log recovery never pins or unpins EFIs, so we can't drop the EFI reference count indirectly to free the EFI. However, this doesn't prevent us from using a reference count here. There is a 1:1 relationship between EFIs and EFDs, so when we initialise the EFI we can take a reference count for the EFD as well. This solves the xfs_bmap_finish() issue - the EFI will never be freed until the EFD is processed. In terms of log recovery, during the committing of the EFD we can look for the XFS_EFI_RECOVERED bit being set and drop the EFI reference as well, thereby ensuring everything works correctly there as well. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 3d6e036193bfa67a8a1cc1908fe910c7a014d183 Author: Rich Johnston Date: Wed Mar 27 09:26:49 2013 -0500 xfs: Add ratelimited printk for different alert levels Ratelimited printk will be useful in printing xfs messages which are otherwise not required to be printed always due to their high rate (to prevent kernel ring buffer from overflowing), while at the same time required to be printed. Signed-off-by: Raghavendra D Prabhu Reviewed-by: Rich Johnston Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit ff9a28f6c25d18a635abcab1f49db68108203dfb Author: Jan Kara Date: Thu Mar 14 14:30:54 2013 +0100 xfs: Fix WARN_ON(delalloc) in xfs_vm_releasepage() When a dirty page is truncated from a file but reclaim gets to it before truncate_inode_pages(), we hit WARN_ON(delalloc) in xfs_vm_releasepage(). This is because reclaim tries to write the page, xfs_vm_writepage() just bails out (leaving page clean) and thus reclaim thinks it can continue and calls xfs_vm_releasepage() on page with dirty buffers. Fix the issue by redirtying the page in xfs_vm_writepage(). This makes reclaim stop reclaiming the page and also logically it keeps page in a more consistent state where page with dirty buffers has PageDirty set. Signed-off-by: Jan Kara Reviewed-by: Carlos Maiolino Signed-off-by: Ben Myers commit 19cb7e3854c9afe2ee968cbdd92293ec09e43bf3 Author: Brian Foster Date: Mon Mar 18 10:51:48 2013 -0400 xfs: xfs_iomap_prealloc_size() tracepoint Add a tracepoint to provide some feedback on preallocation size calculation. Signed-off-by: Brian Foster Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 76a4202a388690e664668c4f668ee12d709100b3 Author: Brian Foster Date: Mon Mar 18 10:51:47 2013 -0400 xfs: add quota-driven speculative preallocation throttling Introduce the need_throttle() and calc_throttle() functions to independently check whether throttling is required for a particular dquot and if so, calculate the associated throttling metrics based on the state of the quota. We use the same general algorithm to calculate the throttle shift as for global free space with the exception of using three stages rather than five. Update xfs_iomap_prealloc_size() to use the smallest available prealloc size based on each of the constraints and apply the maximum shift to obtain the throttled preallocation size. Signed-off-by: Brian Foster Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit b136645116e5471cf0b037a1759dc83620236631 Author: Brian Foster Date: Mon Mar 18 10:51:46 2013 -0400 xfs: xfs_dquot prealloc throttling watermarks and low free space Enable tracking of high and low watermarks for preallocation throttling of files under quota restrictions. These values are calculated when the quota limit is read from disk or modified and cached for later use by the throttling algorithm. The high watermark specifies when preallocation is disabled, the low watermark specifies when throttling is enabled and the low free space data structure contains precalculated low free space limits to serve as input to determine the level of throttling required. Note that the low free space data structure is based on the existing global low free space data structure with the exception of using three stages (5%, 3% and 1%) rather than five to reduce the impact of xfs_dquot memory overhead. Signed-off-by: Brian Foster Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 4b6eae2e6ac8a6671839ccaea1c2e3dd5684f5df Author: Brian Foster Date: Mon Mar 18 10:51:45 2013 -0400 xfs: pass xfs_dquot to xfs_qm_adjust_dqlimits() instead of xfs_disk_dquot_t Modify xfs_qm_adjust_dqlimits() to take the xfs_dquot as a parameter instead of just the xfs_disk_dquot_t so we can update in-memory fields if necessary. Signed-off-by: Brian Foster Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit c9bdbdc0741d90908f492415c890b630f43f17f8 Author: Brian Foster Date: Mon Mar 18 10:51:44 2013 -0400 xfs: push rounddown_pow_of_two() to after prealloc throttle The round down occurs towards the beginning of the function. Push it down after throttling has occurred. This is to support adding further transformations to 'alloc_blocks' that might not preserve power-of-two alignment (and thus could lead to rounding down multiple times). Signed-off-by: Brian Foster Reviewed-by: Ben Myers Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 3c58b5f809eda8ae8d891b7a87d0a235ab0f9bf5 Author: Brian Foster Date: Mon Mar 18 10:51:43 2013 -0400 xfs: reorganize xfs_iomap_prealloc_size to remove indentation The majority of xfs_iomap_prealloc_size() executes within the check for lack of default I/O size. Reverse the logic to remove the extra indentation. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Reviewed-by: Ben Myers Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 56cea2d088811b8cf7d2893e29bcf369a912de69 Author: Christoph Hellwig Date: Tue Mar 12 23:30:36 2013 +1100 xfs: take inode version into account in XFS_LITINO Add a version argument to XFS_LITINO so that it can return different values depending on the inode version. This is required for the upcoming v3 inodes with a larger fixed layout dinode. Signed-off-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit c163f9a1760229a95d04e37b332de7d5c1c225cd Author: Dave Chinner Date: Tue Mar 12 23:30:34 2013 +1100 xfs: ensure we capture IO errors correctly Failed buffer readahead can leave the buffer in the cache marked with an error. Most callers that then issue a subsequent read on the buffer do not zero the b_error field out, and so we may incorectly detect an error during IO completion due to the stale error value left on the buffer. Avoid this problem by zeroing the error before IO submission. This ensures that the only IO errors that are detected those captured from are those captured from bio submission or completion. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit d8ddfe81c7e4fe41b8ec342cc288d58aecdf7c47 Author: Jeff Liu Date: Mon Mar 11 14:31:02 2013 +0800 xfs: Remove obsoleted m_inode_shrink from xfs_mount structure Looks the old m_inode_shrink is obsoleted as we perform inodes reclaim per AG via m_reclaim_workqueue, this patch remove it from the xfs_mount structure if so. Signed-off-by: Jie Liu Cc: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 9e5987a7792194ec338f53643237150c0db5f5e0 Author: Dave Chinner Date: Mon Feb 25 12:31:26 2013 +1100 xfs: rearrange some code in xfs_bmap for better locality xfs_bmap.c is a big file, and some of the related code is spread all throughout the file requiring function prototypes for static function and jumping all through the file to follow a single call path. Rearrange the code so that: a) related functionality is grouped together; and b) functions are grouped in call dependency order While the diffstat is large, there are no code changes in the patch; it is just moving the functionality around and removing the function prototypes at the top of the file. The resulting layout of the code is as follows (top of file to bottom): - miscellaneous helper functions - extent tree block counting routines - debug/sanity checking code - bmap free list manipulation functions - inode fork format manipulation functions - internal/external extent tree seach functions - extent tree manipulation functions used during allocation - functions used during extent read/allocate/removal operations (i.e. xfs_bmapi_write, xfs_bmapi_read, xfs_bunmapi and xfs_getbmap) This means that following logic paths through the bmapi code is much simpler - most of the code relevant to a specific operation is now clustered together rather than spread all over the file.... Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit ecb3403de1efb56f78d9093376aec0a8af76b316 Author: Akinobu Mita Date: Mon Mar 4 21:58:20 2013 +0900 xfs: rename random32() to prandom_u32() Use more preferable function name which implies using a pseudo-random number generator. Signed-off-by: Akinobu Mita Acked-by: Cc: Ben Myers Cc: Alex Elder Cc: xfs@oss.sgi.com Signed-off-by: Ben Myers commit d5929de8337fef46f3e307914ed0f3cb845e66c1 Author: Dave Chinner Date: Wed Feb 27 13:25:54 2013 +1100 xfs: don't verify buffers after IO errors When we read a buffer, we might get an error from the underlying block device and not the real data. Hence if we get an IO error, we shouldn't run the verifier but instead just pass the IO error straight through. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit e8108cedb1c5d1dc359690d18ca997e97a0061d2 Author: Mark Tinguely Date: Sun Feb 24 13:04:37 2013 -0600 xfs: fix xfs_iomap_eof_prealloc_initial_size type Fix the return type of xfs_iomap_eof_prealloc_initial_size() to xfs_fsblock_t to reflect the fact that the return value may be an unsigned 64 bits if XFS_BIG_BLKNOS is defined. Signed-off-by: Mark Tinguely Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit e114b5fce6befb8fa345d7cf1a4de8ce5a211910 Author: Brian Foster Date: Tue Feb 19 10:24:41 2013 -0500 xfs: increase prealloc size to double that of the previous extent The updated speculative preallocation algorithm for handling sparse files can becomes less effective in situations with a high number of concurrent, sequential writers. The number of writers and amount of available RAM affect the writeback bandwidth slicing algorithm, which in turn affects the block allocation pattern of XFS. For example, running 32 sequential writers on a system with 32GB RAM, preallocs become fixed at a value of around 128MB (instead of steadily increasing to the 8GB maximum as sequential writes proceed). Update the speculative prealloc heuristic to base the size of the next prealloc on double the size of the preceding extent. This preserves the original aggressive speculative preallocation behavior and continues to accomodate sparse files at a slight cost of increasing the size of preallocated data regions following holes of sparse files. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit e78c420bfc2608bb5f9a0b9165b1071c1e31166a Author: Brian Foster Date: Fri Feb 22 13:32:56 2013 -0500 xfs: fix potential infinite loop in xfs_iomap_prealloc_size() If freesp == 0, we could end up in an infinite loop while squashing the preallocation. Break the loop when we've killed the prealloc entirely. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/Makefile | 6 +- fs/xfs/xfs_ag.h | 56 +- fs/xfs/xfs_alloc.c | 201 +- fs/xfs/xfs_alloc_btree.c | 105 +- fs/xfs/xfs_alloc_btree.h | 12 +- fs/xfs/xfs_aops.c | 12 +- fs/xfs/xfs_attr.c | 454 +-- fs/xfs/xfs_attr.h | 1 - fs/xfs/xfs_attr_leaf.c | 1781 +++++---- fs/xfs/xfs_attr_leaf.h | 122 +- fs/xfs/xfs_attr_remote.c | 541 +++ fs/xfs/xfs_attr_remote.h | 46 + fs/xfs/xfs_bmap.c | 9214 ++++++++++++++++++++++----------------------- fs/xfs/xfs_bmap_btree.c | 110 +- fs/xfs/xfs_bmap_btree.h | 19 +- fs/xfs/xfs_btree.c | 256 +- fs/xfs/xfs_btree.h | 64 +- fs/xfs/xfs_buf.c | 4 +- fs/xfs/xfs_buf_item.h | 64 +- fs/xfs/xfs_da_btree.c | 1501 +++++--- fs/xfs/xfs_da_btree.h | 130 +- fs/xfs/xfs_dinode.h | 43 +- fs/xfs/xfs_dir2_block.c | 179 +- fs/xfs/xfs_dir2_data.c | 266 +- fs/xfs/xfs_dir2_format.h | 278 +- fs/xfs/xfs_dir2_leaf.c | 898 +++-- fs/xfs/xfs_dir2_node.c | 1007 +++-- fs/xfs/xfs_dir2_priv.h | 50 +- fs/xfs/xfs_dir2_sf.c | 12 +- fs/xfs/xfs_dquot.c | 160 +- fs/xfs/xfs_dquot.h | 16 +- fs/xfs/xfs_error.c | 4 +- fs/xfs/xfs_extfree_item.c | 27 +- fs/xfs/xfs_extfree_item.h | 14 +- fs/xfs/xfs_file.c | 2 +- fs/xfs/xfs_fsops.c | 34 +- fs/xfs/xfs_ialloc.c | 109 +- fs/xfs/xfs_ialloc_btree.c | 87 +- fs/xfs/xfs_ialloc_btree.h | 9 +- fs/xfs/xfs_inode.c | 212 +- fs/xfs/xfs_inode.h | 31 +- fs/xfs/xfs_inode_item.c | 2 +- fs/xfs/xfs_iomap.c | 163 +- fs/xfs/xfs_linux.h | 1 + fs/xfs/xfs_log.c | 2 +- fs/xfs/xfs_log_cil.c | 4 - fs/xfs/xfs_log_priv.h | 1 - fs/xfs/xfs_log_recover.c | 246 +- fs/xfs/xfs_message.h | 26 + fs/xfs/xfs_mount.c | 146 +- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_qm.c | 25 +- fs/xfs/xfs_qm.h | 4 +- fs/xfs/xfs_qm_syscalls.c | 9 +- fs/xfs/xfs_quota.h | 11 +- fs/xfs/xfs_sb.h | 166 +- fs/xfs/xfs_symlink.c | 730 ++++ fs/xfs/xfs_symlink.h | 66 + fs/xfs/xfs_trace.c | 2 +- fs/xfs/xfs_trace.h | 24 + fs/xfs/xfs_trans_buf.c | 63 +- fs/xfs/xfs_trans_dquot.c | 10 +- fs/xfs/xfs_vnodeops.c | 478 +-- 63 files changed, 12022 insertions(+), 8296 deletions(-) create mode 100644 fs/xfs/xfs_attr_remote.c create mode 100644 fs/xfs/xfs_attr_remote.h create mode 100644 fs/xfs/xfs_symlink.c create mode 100644 fs/xfs/xfs_symlink.h hooks/post-receive -- XFS development tree From david@fromorbit.com Wed May 1 20:37:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D4E317F52 for ; Wed, 1 May 2013 20:37:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6944BAC001 for ; Wed, 1 May 2013 18:37:02 -0700 (PDT) X-ASG-Debug-ID: 1367458620-04bdf077c8d1d90001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id h9NbWmo9yDMsbJQV for ; Wed, 01 May 2013 18:37:00 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av8RAOTCgVF5LC+Z/2dsb2JhbABSgwc3ugOFGQQBgQAXdIIfAQEEATocIwULCAMYCQwZDwUlAyETiAYFDb8pFY1VAQYJC4EdBwqDSAOXKJEygVWBSiqBLQEBHgY Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 11:06:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXiRk-0001af-W3; Thu, 02 May 2013 11:36:33 +1000 Date: Thu, 2 May 2013 11:36:32 +1000 From: Dave Chinner To: Mark Tinguely Cc: Jeff Liu , Dave Chinner , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified Message-ID: <20130502013632.GV10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified References: <51813BA5.3070306@oracle.com> <51814578.9060408@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51814578.9060408@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367458620 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129751 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 11:40:24AM -0500, Mark Tinguely wrote: > On 05/01/13 10:58, Jeff Liu wrote: > >Hello, > > > >About two weeks ago, Dave has found an issue by running xfstests/297. > >http://oss.sgi.com/archives/xfs/2013-03/msg00273.html > > > >According to our previous discussion, if the log stripe unit is configured, we should > >take it into account as it will dynamically increase the log reservation twice of it > >per ticket. > > > >This patch is trying to fix it by checking the given log space against the maximum > >request among those transactions(this procedure is implemented similar to xfsprogs/mkfs/maxres.c), > >because the fundamental limit is that no single transaction can be larger than half of the log. > >Also, looks at least another two log stripe unit should be added when calculating the minimum log > >space, or else I can simply trigger a DEAD LOOP via create large number of files, I think I need > >some time to digest Dave's comments posted on original bug ticket, i.e. > >>>>> The question is this: how much space do we need to reserve. I'm > >>>>> thinking a minimum of 4*lsu - 2*lsu for the existing CIL context, and > >>>>> another 2*lsu for any queued ticket waiting for space to come > >>>>> available. > > > >Put simply, with this fix, mount a partition with an improper log space setup vs log stripe > >unit will failed although mkfs still works. Ah, maybe we can improve the user space xfs_mkfs > >with some pre-checkup similar to the implementation inside kernel? Besides that, it will > >drop a warning to syslog and the suggested log space for the given log stripe unit is shown > >there, which looks like the following: > > > ># mkfs.xfs -f -b size=512 -d agcount=16,su=256k,sw=12 -l su=256k,size=2560b /dev/sdb1 > >meta-data=/dev/sdb1 isize=256 agcount=16, agsize=524288 blks > > = sectsz=512 attr=2, projid32bit=0 > >data = bsize=512 blocks=8388608, imaxpct=25 > > = sunit=512 swidth=6144 blks > >naming =version 2 bsize=4096 ascii-ci=0 > >log =internal log bsize=512 blocks=2560, version=2 > > = sectsz=512 sunit=512 blks, lazy-count=1 > >realtime =none extsz=4096 blocks=0, rtextents=0 > > > > Shouldn't mkfs.xfs also know it is building a filesystem that cannot > be mounted? Yes, it should - this is what mkfs/maxtrres.c does. It looks like some of this patch came from that code..... > When mkfs.xfs is given a log stripe unit is greater than 256KB, > should we divide the specified log stripe unit by 2 until it is > under 256KB rather than reset to 32KB? I think if it is specified on the command line, it shoul dbe rejected. If it's automatically determined from the data device sunit, then the divide-by-2-until-in-range algorithm seems fine to me. > > ># mount /dev/sdb1 /xfs1 > >mount: wrong fs type, bad option, bad superblock on /dev/sdb1, > > missing codepage or helper program, or other error > > In some cases useful info is found in syslog - try > > dmesg | tail or so > > > ># dmesg: > >....... > >XFS (sdb1): log space of 2560 blocks too small, minimum request 6656 > >XFS (sdb1): log space validation failed > >XFS (sdb1): log mount failed > > > > > >Tests: > >Ran some cases in xfstests as well as a few self-defined Bonnie++/FIO tests with above > >configuration(6656 log blocks), looks the current fix works, at least no crash to me.:) > > > >But I have not yet dig into the detailed of how the suggested minimum log space would > >affect the performance, given that the AIL push thresholds is defined to 25% of the log > >space, a small logs might introduce IO overheads for pushing AIL too frequently. That's already a problem of using small logs. That's not something we need to worry about when trying to determine the minimum valid log size.... > >In addition, considering the backgroup CIL commit threshold is 1/8 of the log, this would > >also impact the log IO throughput IMHO. Maybe we can figure out an optimized log space > >combine those two cases and drop it to syslog along with the minimum size? Anyone who cares about metadata performance on their small filesystems is not going to use a minimum sized log. As it is, on any filesystem larger than about 50GB using a default log size (about 25MB for a default mkfs), the log stripe unit simply isn't an issue... > I think 1 MB is the smallest log size before we soft hang even > without stripe units define. $ sudo mkfs.xfs -f -l size=256b -dsize=1g /dev/vdc log size 256 blocks too small, minimum size is 512 blocks $ mkfs won't allow a log size smaller than 2MB for default configurations. > >To Dave, > > > >Sorry for the delay in drop this patch since I have mentioned that I'll post a fix > >last night. However, I have ran into an issue when testing it by creating/removing a > >tons of files in parallel at that time:( > > The iclog buffers have to be a multiple of the log stripe unit or we > start punching the lsn in places that it should not. I think the > idea that was mentioned is to remove the power of two on the iclog > buffer size and replace with multiple of log stripe unit. > > http://oss.sgi.com/archives/xfs/2013-03/msg00039.html Right: | Personally, I'd prefer that logbsize be limited to power-of-2 | multiples of the lsunit or XLOG_MIN_RECORD_BSIZE (if lsunit = 0) as | allowing arbitrary values to be specified by users leads to a | testing and bug triage nightmare. ie I think that the valid values for logbsize are: 32k <= logbsize <= 256k logbsize = logsunit * 2^N for N that does not violate the first rule. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 1 21:42:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E9DE97F52 for ; Wed, 1 May 2013 21:42:47 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 65DD9AC001 for ; Wed, 1 May 2013 19:42:47 -0700 (PDT) X-ASG-Debug-ID: 1367462563-04cb6c66e1d22c0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id yjyRIyhgBMubd03p for ; Wed, 01 May 2013 19:42:43 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ai0QACbSgVF5LC+Z/2dsb2JhbABSgwc3gk63N4UZBAGBABd0gh8BAQQBJxMcERIFCwgDGAkMGQ8FJQMhE4gGBQ2/OhWNVg8LgR0HCoNIA5cokTKBVYFKKoEuAR4G Received: from ppp121-44-47-153.lns20.syd6.internode.on.net (HELO dastard) ([121.44.47.153]) by ipmail06.adl6.internode.on.net with ESMTP; 02 May 2013 12:12:08 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXjT4-0001iI-Hq; Thu, 02 May 2013 12:41:58 +1000 Date: Thu, 2 May 2013 12:41:58 +1000 From: Dave Chinner To: Jeff Liu Cc: "xfs@oss.sgi.com" , Dave Chinner Subject: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified Message-ID: <20130502024158.GW10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified References: <51813BA5.3070306@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51813BA5.3070306@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367462563 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129755 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 01, 2013 at 11:58:29PM +0800, Jeff Liu wrote: > Hello, > > About two weeks ago, Dave has found an issue by running xfstests/297. > http://oss.sgi.com/archives/xfs/2013-03/msg00273.html ... > > --- > fs/xfs/xfs_log.c | 130 ++++++++++++++++++++++++++++++++++------- > fs/xfs/xfs_log.h | 3 + > fs/xfs/xfs_mount.c | 1 + > fs/xfs/xfs_mount.h | 61 +++++++++++--------- > fs/xfs/xfs_trans.c | 163 +++++++++++++++++++++++++++++++++++++++++++--------- > fs/xfs/xfs_trans.h | 61 ++++++++++---------- > 6 files changed, 314 insertions(+), 105 deletions(-) Hmmmm. That's a lot more change that I expected..... > diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c > index eec226f..3efd1d2 100644 > --- a/fs/xfs/xfs_log.c > +++ b/fs/xfs/xfs_log.c > @@ -598,6 +598,64 @@ xfs_log_release_iclog( > } > /* > + * Check if the specified log space is sufficient for a file system > + * with a given log strip unit. > + */ > +STATIC int > +xfs_mount_validate_log_size( > + struct xfs_mount *mp) > +{ > + struct xlog *log = mp->m_log; > + struct xfs_trans_res tres; > + int unit_bytes; > + int min_lblks, lsu = 0; > + > + xfs_max_trans_res_by_mount(mp, &tres); Ok, that's been copied from mkfs, right? What I'd suggest we need to do here is separate out all this reservation/validation code into it's own file so we can easily share it with libxfs in userspace. > + > + /* > + * Figure out the total space needed for the maximum transaction > + * log space reservation by adding some extra spaces which should > + * be taken into account. > + */ > + unit_bytes = xlog_ticket_unit_res(log, &tres); > + if (tres.tr_cnt > 1) > + unit_bytes = unit_bytes * tres.tr_cnt; Hmmmm - it's a bit different to userspace - there's no count in the userspace code. But yes, we do need to take into account the permanent log reservations... > + > + min_lblks = BTOBB(unit_bytes); > + /* > + * FIXME: why we should add another 2 log strip units if it > + * is specified? As per my tryout, creat a dozens dirs/files > + * on a partition without another 2 log strip units will > + * cause DEAD LOOP, it's fine if taken this into account. > + * > + * As per Dave's comments: > + * I'm thinking a minimum of 4*lsu - 2*lsu for the existing > + * CIL context, and another 2*lsu for any queued ticket > + * waiting for space to come available. > + */ > + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && > + log->l_mp->m_sb.sb_logsunit > 1) > + lsu = BTOBB(log->l_mp->m_sb.sb_logsunit); > + > + /* > + * The fundamental limit is that no single transaction can be > + * larger than half the size of the log space, take another > + * two log strip unit account as well. > + */ > + if ((log->l_logBBsize >> 1) < (min_lblks + lsu)) { A transaction requires 2 LSU for the reservation because there are two log writes that can require padding - the transaction data and the commit record are written separately and both can require padding to the LSU. And as per my comments above, we can have an active CIL reservation (holding 2*LSU), but the CIL is not over a push threshold. If we don't have space for at one new transaction, which includes *another* 2*LSU in the reservation, that's when we have problems. So, the log size needs to be able to contain two maximally sized and padded transactions, which is (2 * (2 * LSU + maxtrres)). Hence if you are comparing this against half the log size (i.e. maximum transaction size), it needs to be (2 * (2 * LSU + maxtrres)) / 2. i.e. (minlblks + 2 * lsu) > + xfs_warn(mp, > + "log space of %d blocks too small, minimum request %d", > + log->l_logBBsize, > + roundup((int)min_lblks << 1, (int)lsu) + > + 2 * lsu); > + > + return XFS_ERROR(EINVAL); But, we can't just reject the mount if this fails. This would mean that people would have to downgrade their kernel just to remedy the situation as there is no way to grow the log (short of black magic surgery with xfs_db). So this should just remain a warning message, though I'd make it of "xfs_crit" level (i.e. critical) so people notice it as well as making the message a little more informative. > @@ -3377,24 +3441,23 @@ xfs_log_ticket_get( > } > /* > - * Allocate and initialise a new log ticket. > + * Figure out how many bytes would be reserved totally per ticket. > + * Especially, take log strip unit into account if it is specified. > + * > + * FIXME: this is totally copied from xlog_ticket_alloc(), it's better > + * to introduce a new helper to calculate the extra space reservation > + * that can be shared with xlog_ticket_alloc() if the current though > + * is reasonable. That FIXME looks like you've already fixed it ;) > */ > -struct xlog_ticket * > -xlog_ticket_alloc( > - struct xlog *log, > - int unit_bytes, > - int cnt, > - char client, > - bool permanent, > - xfs_km_flags_t alloc_flags) > +int > +xlog_ticket_unit_res( > + struct xlog *log, > + struct xfs_trans_res *tres) > { > - struct xlog_ticket *tic; > - uint num_headers; > - int iclog_space; > - > - tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); > - if (!tic) > - return NULL; > + uint unit_bytes = tres->tr_res; > + int total_bytes = unit_bytes; > + int iclog_space; > + uint num_headers; > /* > * Permanent reservations have up to 'cnt'-1 active log operations > @@ -3459,8 +3522,8 @@ xlog_ticket_alloc( > /* add extra header reservations if we overrun */ > while (!num_headers || > - howmany(unit_bytes, iclog_space) > num_headers) { > - unit_bytes += sizeof(xlog_op_header_t); > + howmany(total_bytes, iclog_space) > num_headers) { > + total_bytes += sizeof(xlog_op_header_t); > num_headers++; > } > unit_bytes += log->l_iclog_hsize * num_headers; What is the reason for using total_bytes here? We've got to take into account the size of the xlog_op_header_t headers in the ticket reservation, so adding them to unit_bytes is correct AFAICT.... > @@ -3478,11 +3541,38 @@ xlog_ticket_alloc( > unit_bytes += 2*BBSIZE; > } > + return unit_bytes; > +} This patch hunk is broken. > + > +/* > + * Allocate and initialise a new log ticket. > + */ > +struct xlog_ticket * > +xlog_ticket_alloc( > + struct xlog *log, > + int unit_bytes, > + int cnt, > + char client, > + bool permanent, > + xfs_km_flags_t alloc_flags) > +{ > + struct xlog_ticket *tic; > + struct xfs_trans_res tres; > + int unit_res; > + > + tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); > + if (!tic) > + return NULL; > + > + tres.tr_res = unit_bytes; > + tres.tr_cnt = cnt; > + unit_res = xlog_ticket_unit_res(log, &tres); Ok, I'm starting to see where this tres stuff is going. More on that later.... > + > atomic_set(&tic->t_ref, 1); > tic->t_task = current; > INIT_LIST_HEAD(&tic->t_queue); > - tic->t_unit_res = unit_bytes; > - tic->t_curr_res = unit_bytes; > + tic->t_unit_res = unit_res; > + tic->t_curr_res = unit_res; > tic->t_cnt = cnt; > tic->t_ocnt = cnt; > tic->t_tid = random32(); > diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h > index 5caee96..d3f7187 100644 > --- a/fs/xfs/xfs_log.h > +++ b/fs/xfs/xfs_log.h > @@ -119,11 +119,13 @@ typedef struct xfs_log_callback { > #ifdef __KERNEL__ > /* Log manager interfaces */ > struct xfs_mount; > +struct xlog; > struct xlog_in_core; > struct xlog_ticket; > struct xfs_log_item; > struct xfs_item_ops; > struct xfs_trans; > +struct xfs_trans_res; > void xfs_log_item_init(struct xfs_mount *mp, > struct xfs_log_item *item, > @@ -184,6 +186,7 @@ bool xfs_log_item_in_current_chkpt(struct xfs_log_item *lip); > void xfs_log_work_queue(struct xfs_mount *mp); > void xfs_log_worker(struct work_struct *work); > void xfs_log_quiesce(struct xfs_mount *mp); > +int xlog_ticket_unit_res(struct xlog *log, struct xfs_trans_res *tres); We generally name the log external functions as "xfs_log_..." and pass a struct xfs_mount around with them. i.e.: int xfs_log_ticket_unit_res(struct xfs_mount *mp, struct xfs_trans_res *tres); As it is, I'm not sure what that means from the name of the function. It has nothing to do with log tickets, but it's calculating the unit reservation for the ticket. Perhaps a better name is something like xfs_log_calc_unit_res()? > #endif > #endif /* __XFS_LOG_H__ */ > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 2836ef6..cb67f96 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -20,6 +20,7 @@ > #include "xfs_types.h" > #include "xfs_bit.h" > #include "xfs_log.h" > +#include "xfs_log_priv.h" stray include? > #include "xfs_inum.h" > #include "xfs_trans.h" > #include "xfs_trans_priv.h" > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index 8145412..3f9a73c 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -18,35 +18,40 @@ > #ifndef __XFS_MOUNT_H__ > #define __XFS_MOUNT_H__ > +typedef struct xfs_trans_res { > + uint tr_res; > + int tr_cnt; > +} xfs_tr_t; No new typedefs, please. > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > index 2fd7c1f..f2b18a5 100644 > --- a/fs/xfs/xfs_trans.c > +++ b/fs/xfs/xfs_trans.c > @@ -43,6 +43,7 @@ > #include "xfs_inode_item.h" > #include "xfs_log_priv.h" > #include "xfs_buf_item.h" > +#include "xfs_attr_leaf.h" Another stray include? > #include "xfs_trace.h" > kmem_zone_t *xfs_trans_zone; > @@ -645,34 +646,140 @@ xfs_trans_init( > { > struct xfs_trans_reservations *resp = &mp->m_reservations; > - resp->tr_write = xfs_calc_write_reservation(mp); > - resp->tr_itruncate = xfs_calc_itruncate_reservation(mp); > - resp->tr_rename = xfs_calc_rename_reservation(mp); > - resp->tr_link = xfs_calc_link_reservation(mp); > - resp->tr_remove = xfs_calc_remove_reservation(mp); > - resp->tr_symlink = xfs_calc_symlink_reservation(mp); > - resp->tr_create = xfs_calc_create_reservation(mp); > - resp->tr_mkdir = xfs_calc_mkdir_reservation(mp); > - resp->tr_ifree = xfs_calc_ifree_reservation(mp); > - resp->tr_ichange = xfs_calc_ichange_reservation(mp); > - resp->tr_growdata = xfs_calc_growdata_reservation(mp); > - resp->tr_swrite = xfs_calc_swrite_reservation(mp); > - resp->tr_writeid = xfs_calc_writeid_reservation(mp); > - resp->tr_addafork = xfs_calc_addafork_reservation(mp); > - resp->tr_attrinval = xfs_calc_attrinval_reservation(mp); > - resp->tr_attrsetm = xfs_calc_attrsetm_reservation(mp); > - resp->tr_attrsetrt = xfs_calc_attrsetrt_reservation(mp); > - resp->tr_attrrm = xfs_calc_attrrm_reservation(mp); > - resp->tr_clearagi = xfs_calc_clear_agi_bucket_reservation(mp); > - resp->tr_growrtalloc = xfs_calc_growrtalloc_reservation(mp); > - resp->tr_growrtzero = xfs_calc_growrtzero_reservation(mp); > - resp->tr_growrtfree = xfs_calc_growrtfree_reservation(mp); > - resp->tr_qm_sbchange = xfs_calc_qm_sbchange_reservation(mp); > - resp->tr_qm_setqlim = xfs_calc_qm_setqlim_reservation(mp); > - resp->tr_qm_dqalloc = xfs_calc_qm_dqalloc_reservation(mp); > - resp->tr_qm_quotaoff = xfs_calc_qm_quotaoff_reservation(mp); > - resp->tr_qm_equotaoff = xfs_calc_qm_quotaoff_end_reservation(mp); > - resp->tr_sb = xfs_calc_sb_reservation(mp); > + resp->tr_write.tr_res = xfs_calc_write_reservation(mp); > + resp->tr_write.tr_cnt = XFS_WRITE_LOG_COUNT; > + > + resp->tr_itruncate.tr_res = xfs_calc_itruncate_reservation(mp); > + resp->tr_itruncate.tr_cnt = XFS_ITRUNCATE_LOG_COUNT; > + > + resp->tr_rename.tr_res = xfs_calc_rename_reservation(mp); > + resp->tr_rename.tr_cnt = XFS_RENAME_LOG_COUNT; ..... I like the idea, but I don't think you've carried it through far enough. :) i.e. This patch leaves us with having multiple places where this information has to be maintained (here and the xfs_trans_reserve() calls). What I think is the best way to approach this is to separate out this table change into a separate patch (i.e. without all the other code that uses it), and then change the xfs_trans_reserve() interface to take a struct xfs_trans_res *. At that point, we can then do: xfs_trans_reserve(tp, &mp->m_reservations.tr_rename, blockres, rtblockres, flags); and now we can propagate the logspace/logcount through xfs_log_reserve(), xlog_ticket_alloc() and so on via the reservation structure. That leaves us with a single place that we set up and maintain log space reservations, makes the transaction reservation calls cleaner (no more messy macros everywhere), and if we rename mp->m_reservations to mp->m_resv there's a whole lot less typing, too. We could potentially also add the XFS_TRANS_PERM_LOG_RES flag to the struct xfs_trans_res, so most xfs_trans_reserve() calls don't need to pass a flag in at all (even cleaner!). > +STATIC void > +xfs_max_attrsetm_trans_res_adjust( > + struct xfs_mount *mp) > +{ > + int local; > + int size; > + int nblks; > + int res; > + > + /* > + * Determine space the maximal sized attribute will use, > + * to calculate the largest reservatoin size needed. > + */ > + size = xfs_attr_leaf_newentsize(MAXNAMELEN, 64 * 1024, > + mp->m_sb.sb_blocksize, &local); > + ASSERT(!local); > + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); > + nblks += XFS_B_TO_FSB(mp, size); > + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); > + res = XFS_ATTRSETM_LOG_RES(mp) + XFS_ATTRSETRT_LOG_RES(mp) * nblks; > + mp->m_reservations.tr_attrsetm.tr_res = res; That's copied from mkfs, right? I need to look a bit closer, but I don't think this is correct - large attributes end up out of line and not logged, while this assumes that the full 64k of the remote attribute is logged. Over estimating is fine, though, for the moment. > +} > + > +/* > + * Figure out the total log space a transaction would required in terms > + * of the pre-calculated values which are done at mount time, then find > + * out and return the maximum reservation among them. > + */ > +void > +xfs_max_trans_res_by_mount( > + struct xfs_mount *mp, > + struct xfs_trans_res *mres) > +{ > + struct xfs_trans_reservations *resp = &mp->m_reservations; > + struct xfs_trans_res *p, *tres = NULL; > + int res; > + > + for (res = 0, p = (struct xfs_trans_res *)resp; > + p < (struct xfs_trans_res *)(resp + 1); p++) { I don't really like the pointer arithmetic here. Something like res = 0; for (i = 0; i < ARRAY_SIZE(mp->m_reservations); i++) { p = &mp->m_reservations[i]; is a much neater way of iterating an array.... > + int tmp = p->tr_cnt > 1 ? p->tr_res * p->tr_cnt : > + p->tr_res; > + if (res < tmp) { > + res = tmp; > + tres = p; > + } > + } > + > + ASSERT(tres != NULL); > + *mres = *tres; > } All these changes look to me like something we shoul dbe sharing with libxfs in userspace so that mkfs can re-use the code without modifications.... > /* > diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h > index cd29f61..b304bb8 100644 > --- a/fs/xfs/xfs_trans.h > +++ b/fs/xfs/xfs_trans.h > @@ -19,6 +19,7 @@ > #define __XFS_TRANS_H__ > struct xfs_log_item; > +struct xfs_trans_res; > /* > * This is the structure written in the log at the head of > @@ -232,39 +233,39 @@ struct xfs_log_item_desc { > XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) > -#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write) > -#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate) > -#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename) > -#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link) > -#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove) > -#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink) > -#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create) > -#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir) > -#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree) > -#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange) > -#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata) > -#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc) > -#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero) > -#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree) > -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) > +#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write.tr_res) > +#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate.tr_res) > +#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename.tr_res) > +#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link.tr_res) > +#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove.tr_res) > +#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink.tr_res) > +#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create.tr_res) > +#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir.tr_res) > +#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree.tr_res) > +#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange.tr_res) > +#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata.tr_res) > +#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc.tr_res) > +#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero.tr_res) > +#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree.tr_res) > +#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_res) If we do the "pass xfs_trans_res to xfs_trans_reserve(), all these macros could go away.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From eflorac@intellique.com Thu May 2 01:50:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1F63C7F54 for ; Thu, 2 May 2013 01:50:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0EB1B8F8049 for ; Wed, 1 May 2013 23:50:46 -0700 (PDT) X-ASG-Debug-ID: 1367477443-04cb6c66e1104df0001-NocioJ Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by cuda.sgi.com with ESMTP id HYm31UDY0EcrmS5y for ; Wed, 01 May 2013 23:50:44 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.3 Received: from galadriel.home (unknown [82.235.234.79]) by smtp3-g21.free.fr (Postfix) with ESMTP id A369EA6108; Thu, 2 May 2013 08:50:39 +0200 (CEST) Date: Thu, 2 May 2013 08:50:24 +0200 From: Emmanuel Florac To: Eric Sandeen Cc: Ben Myers , "xfs@oss.sgi.com" Subject: Re: Weird message from xfs_repair Message-ID: <20130502085024.2a1d096c@galadriel.home> X-ASG-Orig-Subj: Re: Weird message from xfs_repair In-Reply-To: <518181E1.2000604@sandeen.net> References: <20130501200633.5d24caf5@galadriel.home> <20130501194320.GP29359@sgi.com> <518181E1.2000604@sandeen.net> Organization: Intellique X-Mailer: Claws Mail 3.7.8 (GTK+ 2.24.4; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp3-g21.free.fr[212.27.42.3] X-Barracuda-Start-Time: 1367477443 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129773 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Wed, 01 May 2013 15:58:09 -0500 vous =C3=A9criviez: > Several of those internal cache housekeeping messages can be > alarming. Indeed anything out of the ordinary during repair > is alarming to most users. ;) >=20 Well I've had xfs_repair happily wiping several terabytes of data in the past, so I'm easily concerned :) But I supposed this is mostly related to the fact I was running a pre-release. > Emmanuael - if another xfs_repair pops out the same error, > then capturing a metadump of the fs would probably let someone > look into it. Someone who has time, that is. ;) In that case the filesystem was in extremely poor shape with lots of errors I've never seen before, and a lot of users waiting for it to come back online. Fortunately recent xfs_repair seem to be reliable enough. --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From jeff.liu@oracle.com Thu May 2 01:54:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 22CCB7F56 for ; Thu, 2 May 2013 01:54:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 92558AC001 for ; Wed, 1 May 2013 23:54:21 -0700 (PDT) X-ASG-Debug-ID: 1367477659-04cb6c66e1105080001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id ajib7AnJvocEpci9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 May 2013 23:54:20 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r426sGj7005792 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 06:54:17 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r426sGCv027144 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 06:54:17 GMT Received: from abhmt102.oracle.com (abhmt102.oracle.com [141.146.116.54]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r426sG9A027141; Thu, 2 May 2013 06:54:16 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 23:54:16 -0700 Message-ID: <51820D8E.7040308@oracle.com> Date: Thu, 02 May 2013 14:54:06 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Dave Chinner CC: Mark Tinguely , "xfs@oss.sgi.com" Subject: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount References: <518125CF.3050806@oracle.com> <20130502011302.GS10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount In-Reply-To: <20130502011302.GS10481@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367477660 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129773 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 09:13 AM, Dave Chinner wrote: > On Wed, May 01, 2013 at 10:25:19PM +0800, Jeff Liu wrote: >> From: Jie Liu >> >> As per the mount man page, sunit and swidth can be changed via >> mount options. For XFS, on the face of it, those options seems >> works if the specified alignments is properly, e.g. >> # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt >> # mount | grep sdb1 >> /dev/sdb1 on /mnt type xfs (rw,sunit=4096,swidth=8192) >> >> However, neither sunit nor swidth is shown from the xfs_info output. >> # xfs_info /mnt >> meta-data=/dev/sdb1 isize=256 agcount=4, agsize=262144 blks >> = sectsz=512 attr=2 >> data = bsize=4096 blocks=1048576, imaxpct=25 >> = sunit=0 swidth=0 blks >> ^^^^^^^^^^^^^^^^^^^^^^^^^^ >> naming =version 2 bsize=4096 ascii-ci=0 >> log =internal bsize=4096 blocks=2560, version=2 >> = sectsz=512 sunit=0 blks, lazy-count=1 >> realtime =none extsz=4096 blocks=0, rtextents=0 >> >> The reason is that the alignment can only be changed if the relevant >> super block is already configured with alignments, otherwise, the >> given value is silently ignored. >> >> With this fix, the attempt to mount a storage without strip alignment >> setup on a super block will get an error with a warning in syslog to >> indicate the true cause. >> >> # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt >> mount: wrong fs type, bad option, bad superblock on /dev/sdb1, >> missing codepage or helper program, or other error >> In some cases useful info is found in syslog - try >> dmesg | tail or so >> # dmesg|tail >> ....... >> XFS (sdb1): can not change alignment: superblock does not support data >> alignment >> >> Signed-off-by: Jie Liu >> Cc: Mark Tinguely >> Cc: Dave Chinner >> --- >> fs/xfs/xfs_mount.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c >> index 29e8de8..2836ef6 100644 >> --- a/fs/xfs/xfs_mount.c >> +++ b/fs/xfs/xfs_mount.c >> @@ -909,6 +909,10 @@ xfs_update_alignment(xfs_mount_t *mp) >> sbp->sb_width = mp->m_swidth; >> mp->m_update_flags |= XFS_SB_WIDTH; >> } >> + } else { >> + xfs_warn(mp, "cannot change alignment: " >> + "superblock does not support data alignment"); > > Same comment again about single line format strings. Otherwise it's > ok. Ah, sorry! I misunderstood the comments of Mark before. I was bluffed into believing that I should cut the length of log string as short as possible. :( It will be fixed so. Thanks, -Jeff From jeff.liu@oracle.com Thu May 2 01:55:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2975A7F55 for ; Thu, 2 May 2013 01:55:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 09B1F8F8037 for ; Wed, 1 May 2013 23:55:20 -0700 (PDT) X-ASG-Debug-ID: 1367477719-04cb6c66e1105140001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id I3M61pGzCyWJ7Gcs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 May 2013 23:55:19 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r426tHG7004378 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 06:55:18 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r426tFRJ012509 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 06:55:16 GMT Received: from abhmt117.oracle.com (abhmt117.oracle.com [141.146.116.69]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r426tFAZ002544; Thu, 2 May 2013 06:55:15 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 May 2013 23:55:15 -0700 Message-ID: <51820DCC.4070606@oracle.com> Date: Thu, 02 May 2013 14:55:08 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Dave Chinner CC: "xfs@oss.sgi.com" , Mark Tinguely Subject: Re: [PATCH 1/2] xfs: Remove XFS_MOUNT_RETERR References: <518125C9.8000008@oracle.com> <20130502011211.GR10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs: Remove XFS_MOUNT_RETERR In-Reply-To: <20130502011211.GR10481@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367477719 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129773 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 09:12 AM, Dave Chinner wrote: > On Wed, May 01, 2013 at 10:25:13PM +0800, Jeff Liu wrote: >> From: Jie Liu >> >> XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if >> mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" >> branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and >> so we always be emitting a warning and returning an error. >> >> Hence, we can remove it and get rid of a couple of redundant >> check up against it at xfs_upate_alignment(). >> >> Thanks Dave Chinner for the confirmation. >> >> Signed-off-by: Jie Liu >> Cc: Dave Chinner >> Cc: Mark Tinguely >> --- >> fs/xfs/xfs_mount.c | 39 ++++++++++++--------------------------- >> fs/xfs/xfs_mount.h | 2 -- >> fs/xfs/xfs_super.c | 5 +---- >> 3 files changed, 13 insertions(+), 33 deletions(-) >> >> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c >> index 3806088..29e8de8 100644 >> --- a/fs/xfs/xfs_mount.c >> +++ b/fs/xfs/xfs_mount.c >> @@ -872,42 +872,27 @@ xfs_update_alignment(xfs_mount_t *mp) >> */ >> if ((BBTOB(mp->m_dalign) & mp->m_blockmask) || >> (BBTOB(mp->m_swidth) & mp->m_blockmask)) { >> - if (mp->m_flags & XFS_MOUNT_RETERR) { >> - xfs_warn(mp, "alignment check failed: " >> - "(sunit/swidth vs. blocksize)"); >> - return XFS_ERROR(EINVAL); >> - } >> - mp->m_dalign = mp->m_swidth = 0; >> + xfs_warn(mp, "alignment check failed: " >> + "(sunit/swidth vs. blocksize)"); > > Let's convert these format strings to a single line at the same > time and be consistent with output. ie: > > xfs_warn(mp, > "alignment check failed: sunit/swidth vs. blocksize(%d)", > sbp->sb_blocksize); Ok. > >> + return XFS_ERROR(EINVAL); >> } else { >> /* >> * Convert the stripe unit and width to FSBs. >> */ >> mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign); >> if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) { >> - if (mp->m_flags & XFS_MOUNT_RETERR) { >> - xfs_warn(mp, "alignment check failed: " >> - "(sunit/swidth vs. ag size)"); >> - return XFS_ERROR(EINVAL); >> - } >> - xfs_warn(mp, >> - "stripe alignment turned off: sunit(%d)/swidth(%d) " >> - "incompatible with agsize(%d)", >> - mp->m_dalign, mp->m_swidth, >> - sbp->sb_agblocks); >> - >> - mp->m_dalign = 0; >> - mp->m_swidth = 0; >> + xfs_warn(mp, "alignment check failed: " >> + "sunit(%d)/swidth(%d) incompatible with agsize(%d)", > > "alignment check failed: sunit/swidth vs. agsize(%d)", > sbp->sb_agblocks); > >> + mp->m_dalign, mp->m_swidth, >> + sbp->sb_agblocks); >> + return XFS_ERROR(EINVAL); >> } else if (mp->m_dalign) { >> mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth); >> } else { >> - if (mp->m_flags & XFS_MOUNT_RETERR) { >> - xfs_warn(mp, "alignment check failed: " >> - "sunit(%d) less than bsize(%d)", >> - mp->m_dalign, >> - mp->m_blockmask +1); >> - return XFS_ERROR(EINVAL); >> - } >> - mp->m_swidth = 0; >> + xfs_warn(mp, "alignment check failed: " >> + "sunit(%d) less than bsize(%d)", >> + mp->m_dalign, mp->m_blockmask + 1); > > "alignment check failed: sunit(%d) less than bsize(%d)", > mp->m_dalign, sbp->sb_blocksize); >> + return XFS_ERROR(EINVAL); >> } >> } >> >> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h >> index bc90706..8145412 100644 >> --- a/fs/xfs/xfs_mount.h >> +++ b/fs/xfs/xfs_mount.h >> @@ -230,8 +230,6 @@ typedef struct xfs_mount { >> operations, typically for >> disk errors in metadata */ >> #define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */ >> -#define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to >> - user */ >> #define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment >> allocations */ >> #define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */ >> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c >> index ea341ce..51da4d2 100644 >> --- a/fs/xfs/xfs_super.c >> +++ b/fs/xfs/xfs_super.c >> @@ -446,11 +446,8 @@ done: >> * Before the mount call ends we will convert >> * these to FSBs. >> */ >> - if (dsunit) { >> + if (dsunit) >> mp->m_dalign = dsunit; >> - mp->m_flags |= XFS_MOUNT_RETERR; >> - } >> - >> if (dswidth) >> mp->m_swidth = dswidth; > > This code can be simplified, too. We've already done this check: > > if ((dsunit && !dswidth) || (!dsunit && dswidth)) { > xfs_warn(mp, "sunit and swidth must be specified together"); > return EINVAL; > } > > So we know that dsunit/dswidth are either both zero or both set, so > the above code could simply end up as: > > if (dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) { > /* > * At this point the superblock has not been read > * in, therefore we do not know the block size. > * Before the mount call ends we will convert > * these to FSBs. > */ > mp->m_dalign = dsunit; > mp->m_swidth = dswidth; > } Exactly, will take care of this in next round of post. Thanks, -Jeff From david@fromorbit.com Thu May 2 02:20:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 99B047F54 for ; Thu, 2 May 2013 02:20:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6A633304071 for ; Thu, 2 May 2013 00:20:29 -0700 (PDT) X-ASG-Debug-ID: 1367479227-04bdf077c9103650001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id leHZwFVwtNQITGQz for ; Thu, 02 May 2013 00:20:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AigQAFkSglF5LCUo/2dsb2JhbABICoMHgwW3OYUZBAGBARd0gh8BAQUnExwjEAgDGAklDwUlAyETiAu/ORWNUR+BHQeDUgOXKJEygVWBSio Received: from ppp121-44-37-40.lns20.syd6.internode.on.net (HELO dastard) ([121.44.37.40]) by ipmail06.adl2.internode.on.net with ESMTP; 02 May 2013 16:50:26 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXnoW-0002A7-Ai; Thu, 02 May 2013 17:20:24 +1000 Date: Thu, 2 May 2013 17:20:24 +1000 From: Dave Chinner To: Jeff Liu Cc: Mark Tinguely , "xfs@oss.sgi.com" Subject: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount Message-ID: <20130502072024.GX10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount References: <518125CF.3050806@oracle.com> <20130502011302.GS10481@dastard> <51820D8E.7040308@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51820D8E.7040308@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367479227 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129775 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 02, 2013 at 02:54:06PM +0800, Jeff Liu wrote: > On 05/02/2013 09:13 AM, Dave Chinner wrote: > > On Wed, May 01, 2013 at 10:25:19PM +0800, Jeff Liu wrote: > >> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > >> index 29e8de8..2836ef6 100644 > >> --- a/fs/xfs/xfs_mount.c > >> +++ b/fs/xfs/xfs_mount.c > >> @@ -909,6 +909,10 @@ xfs_update_alignment(xfs_mount_t *mp) > >> sbp->sb_width = mp->m_swidth; > >> mp->m_update_flags |= XFS_SB_WIDTH; > >> } > >> + } else { > >> + xfs_warn(mp, "cannot change alignment: " > >> + "superblock does not support data alignment"); > > > > Same comment again about single line format strings. Otherwise it's > > ok. > Ah, sorry! I misunderstood the comments of Mark before. I was bluffed > into believing that I should cut the length of log string as short as > possible. :( Thing of being able cut-n-paste the error message out of the log and then being able to grep the source tree for it. i.e. $ git grep "cannot change alignment: superblock does not support data alignment" Will fail to find anything in the former case, but in the single line case it will identify the file the error lies in immediately. So the question I always ask myself is "is that format string easy to find with grep?" :) Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Thu May 2 02:45:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8410C7F54 for ; Thu, 2 May 2013 02:45:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5FD778F804B for ; Thu, 2 May 2013 00:45:17 -0700 (PDT) X-ASG-Debug-ID: 1367480715-04cbb03c2f1086b0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id h2El18Vst3LhCtMa for ; Thu, 02 May 2013 00:45:16 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArsLAGgYglF5LCUo/2dsb2JhbABSgwe/VwQBgQEXdIIfAS0vOxhqAzSIC6ASny2OBYESg2QDqFqDHyo Received: from ppp121-44-37-40.lns20.syd6.internode.on.net (HELO dastard) ([121.44.37.40]) by ipmail06.adl2.internode.on.net with ESMTP; 02 May 2013 17:15:14 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXoCY-0002DM-6f for xfs@oss.sgi.com; Thu, 02 May 2013 17:45:14 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXoCT-0006CU-22 for xfs@oss.sgi.com; Thu, 02 May 2013 17:45:09 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH] xfs: fix sub-page blocksize data integrity writes Date: Thu, 2 May 2013 17:45:09 +1000 X-ASG-Orig-Subj: [PATCH] xfs: fix sub-page blocksize data integrity writes Message-Id: <1367480709-23804-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367480715 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129775 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner --- fs/xfs/xfs_aops.c | 21 +++++++++++++++++++++ fs/xfs/xfs_vnodeops.c | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3244c98..72d08b6 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -439,6 +439,7 @@ xfs_start_page_writeback( int clear_dirty, int buffers) { + trace_xfs_writepage(page->mapping->host, page, 0); ASSERT(PageLocked(page)); ASSERT(!PageWriteback(page)); if (clear_dirty) @@ -724,12 +725,32 @@ xfs_convert_page( (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, i_size_read(inode)); + /* + * If the current map does not span the entire page we are about to try + * to write, then give up. The only way we can write a page that spans + * multiple mappings in a single writeback iteration is via the + * xfs_vm_writepage() function. Data integrity writeback requires the + * entire page to be written in a single attempt, otherwise the part of + * the page we don't write here doesn't get written as part of the data + * integrity sync. + * + * For normal writeback, we also don't attempt to write partial pages + * here as it simply means that write_cache_pages() will see it under + * writeback and ignore the page until some pointin the future, at which + * time this will be the only page inteh file that needs writeback. + * Hence for more optimal IO patterns, we should always avoid partial + * page writeback due to multiple mappings on a page here. + */ + if (!xfs_imap_valid(inode, imap, end_offset)) + goto fail_unlock_page; + len = 1 << inode->i_blkbits; p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), PAGE_CACHE_SIZE); p_offset = p_offset ? roundup(p_offset, len) : PAGE_CACHE_SIZE; page_dirty = p_offset / len; + bh = head = page_buffers(page); do { if (offset >= end_offset) diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..0176bb2 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -1453,7 +1453,7 @@ xfs_free_file_space( xfs_mount_t *mp; int nimap; uint resblks; - uint rounding; + xfs_off_t rounding; int rt; xfs_fileoff_t startoffset_fsb; xfs_trans_t *tp; @@ -1482,7 +1482,7 @@ xfs_free_file_space( inode_dio_wait(VFS_I(ip)); } - rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); + rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); ioffset = offset & ~(rounding - 1); error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, -1); -- 1.7.10.4 From david@fromorbit.com Thu May 2 02:58:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C16037F54 for ; Thu, 2 May 2013 02:58:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id ACD02304064 for ; Thu, 2 May 2013 00:58:39 -0700 (PDT) X-ASG-Debug-ID: 1367481517-04cb6c66e3108b40001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id IjtudKaZUbxnCzFO for ; Thu, 02 May 2013 00:58:38 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AigQAKwbglF5LCUo/2dsb2JhbABSgweDBbc5hRkEAYECF3SCHwEBBAEnExwoCwgDFQMJJQ8FJQM0iAYFv0kVjXCBEhIWgzwDlyiRMoMfKg Received: from ppp121-44-37-40.lns20.syd6.internode.on.net (HELO dastard) ([121.44.37.40]) by ipmail06.adl2.internode.on.net with ESMTP; 02 May 2013 17:28:37 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UXoPU-0002Ek-Oz for xfs@oss.sgi.com; Thu, 02 May 2013 17:58:36 +1000 Date: Thu, 2 May 2013 17:58:36 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: fix sub-page blocksize data integrity writes Message-ID: <20130502075836.GY10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix sub-page blocksize data integrity writes References: <1367480709-23804-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1367480709-23804-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367481517 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129777 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 02, 2013 at 05:45:09PM +1000, Dave Chinner wrote: > From: Dave Chinner > > FSX on 512 byte block size filesystems has been failing for some > time with corrupted data. The fault dates back to the change in > the writeback data integrity algorithm that uses a mark-and-sweep > approach to avoid data writeback livelocks. ..... > + * time this will be the only page inteh file that needs writeback. > + * Hence for more optimal IO patterns, we should always avoid partial > + * page writeback due to multiple mappings on a page here. > + */ > + if (!xfs_imap_valid(inode, imap, end_offset)) > + goto fail_unlock_page; > + > len = 1 << inode->i_blkbits; > p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), > PAGE_CACHE_SIZE); > p_offset = p_offset ? roundup(p_offset, len) : PAGE_CACHE_SIZE; > page_dirty = p_offset / len; > > + Oh, stray whitespace.... > bh = head = page_buffers(page); > do { > if (offset >= end_offset) > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index 1501f4f..0176bb2 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -1453,7 +1453,7 @@ xfs_free_file_space( > xfs_mount_t *mp; > int nimap; > uint resblks; > - uint rounding; > + xfs_off_t rounding; > int rt; > xfs_fileoff_t startoffset_fsb; > xfs_trans_t *tp; > @@ -1482,7 +1482,7 @@ xfs_free_file_space( > inode_dio_wait(VFS_I(ip)); > } > > - rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); > + rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); > ioffset = offset & ~(rounding - 1); > error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, > ioffset, -1); And I forgot I had noticed a second problem while dealing with this one (i.e. the rounding masks is wrong for offsets > 32 bits).... I'll repost them both as separate patches. Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Thu May 2 03:08:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 69F687F54 for ; Thu, 2 May 2013 03:08:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E0117AC001 for ; Thu, 2 May 2013 01:08:19 -0700 (PDT) X-ASG-Debug-ID: 1367482097-04cbb03c2e109df0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id XDGf1UoZ6kArV5Ce for ; Thu, 02 May 2013 01:08:18 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgLAAkeglF5LCUo/2dsb2JhbABSgwe/VwSBAhd0gh8BLS87GGoDNIgLoCafMY4FhHYDqFqDHyo Received: from ppp121-44-37-40.lns20.syd6.internode.on.net (HELO dastard) ([121.44.37.40]) by ipmail06.adl2.internode.on.net with ESMTP; 02 May 2013 17:38:17 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXoYq-0002GU-Q0 for xfs@oss.sgi.com; Thu, 02 May 2013 18:08:16 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXoYq-0006Wd-Lb for xfs@oss.sgi.com; Thu, 02 May 2013 18:08:16 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/2] xfs: fix sub-page blocksize data integrity writes Date: Thu, 2 May 2013 18:08:00 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfs: fix sub-page blocksize data integrity writes Message-Id: <1367482081-25045-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367482097 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129777 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner --- fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3244c98..d6de08e 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -724,6 +724,25 @@ xfs_convert_page( (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, i_size_read(inode)); + /* + * If the current map does not span the entire page we are about to try + * to write, then give up. The only way we can write a page that spans + * multiple mappings in a single writeback iteration is via the + * xfs_vm_writepage() function. Data integrity writeback requires the + * entire page to be written in a single attempt, otherwise the part of + * the page we don't write here doesn't get written as part of the data + * integrity sync. + * + * For normal writeback, we also don't attempt to write partial pages + * here as it simply means that write_cache_pages() will see it under + * writeback and ignore the page until some pointin the future, at which + * time this will be the only page inteh file that needs writeback. + * Hence for more optimal IO patterns, we should always avoid partial + * page writeback due to multiple mappings on a page here. + */ + if (!xfs_imap_valid(inode, imap, end_offset)) + goto fail_unlock_page; + len = 1 << inode->i_blkbits; p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), PAGE_CACHE_SIZE); -- 1.7.10.4 From dave@fromorbit.com Thu May 2 03:08:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B13FD7F55 for ; Thu, 2 May 2013 03:08:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A0126304075 for ; Thu, 2 May 2013 01:08:20 -0700 (PDT) X-ASG-Debug-ID: 1367482097-04cbb03c2e109df0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Y8F1D1oJMAbC1J6f for ; Thu, 02 May 2013 01:08:19 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArwLAAkeglF5LCUo/2dsb2JhbABSgwe/VwQBgQEXdIIfAQEFJy8zCBgxOQMbGYgLv1eOBYESKIM8A6E3hyODHyo Received: from ppp121-44-37-40.lns20.syd6.internode.on.net (HELO dastard) ([121.44.37.40]) by ipmail06.adl2.internode.on.net with ESMTP; 02 May 2013 17:38:17 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UXoYq-0002GV-Qn for xfs@oss.sgi.com; Thu, 02 May 2013 18:08:16 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UXoYq-0006Wg-Mo for xfs@oss.sgi.com; Thu, 02 May 2013 18:08:16 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/2] xfs: fix rounding in xfs_free_file_space Date: Thu, 2 May 2013 18:08:01 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfs: fix rounding in xfs_free_file_space Message-Id: <1367482081-25045-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367482081-25045-1-git-send-email-david@fromorbit.com> References: <1367482081-25045-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367482099 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129777 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The offset passed into xfs_free_file_space() needs to be rounded down to a certain size, but the rounding mask is built by a 32 bit variable. Hence the mask will always mask off the upper 32 bits of the offset and lead to incorrect writeback and invalidation ranges. This is not actually exposed as a bug because we writeback and invalidate from the rounded offset to the end of the file, and hence the offset we are actually punching a hole out of will always be covered by the code. This needs fixing, however, if we ever want to use exact ranges for writeback/invalidation here... Signed-off-by: Dave Chinner --- fs/xfs/xfs_vnodeops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..0176bb2 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -1453,7 +1453,7 @@ xfs_free_file_space( xfs_mount_t *mp; int nimap; uint resblks; - uint rounding; + xfs_off_t rounding; int rt; xfs_fileoff_t startoffset_fsb; xfs_trans_t *tp; @@ -1482,7 +1482,7 @@ xfs_free_file_space( inode_dio_wait(VFS_I(ip)); } - rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); + rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); ioffset = offset & ~(rounding - 1); error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, -1); -- 1.7.10.4 From james.dingwall@zynstra.com Thu May 2 03:25:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3EB047F54 for ; Thu, 2 May 2013 03:25:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2C8858F8035 for ; Thu, 2 May 2013 01:25:06 -0700 (PDT) X-ASG-Debug-ID: 1367483104-04cbb03c2e10ade0001-NocioJ Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1lp0011.outbound.protection.outlook.com [213.199.154.11]) by cuda.sgi.com with ESMTP id Y16zB5ZsBgByHj74 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 01:25:04 -0700 (PDT) X-Barracuda-Envelope-From: james.dingwall@zynstra.com X-Barracuda-Apparent-Source-IP: 213.199.154.11 Received: from AMSPRD0111HT003.eurprd01.prod.exchangelabs.com (157.56.250.229) by DB3PR03MB042.eurprd03.prod.outlook.com (10.242.136.15) with Microsoft SMTP Server (TLS) id 15.0.670.15; Thu, 2 May 2013 08:25:02 +0000 Message-ID: <518222D3.3080109@zynstra.com> Date: Thu, 2 May 2013 09:24:51 +0100 From: James Dingwall User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0 SeaMonkey/2.17.1 MIME-Version: 1.0 To: Dave Chinner , Ben Myers , CC: Subject: Re: Cleancache support in XFS References: <51810CED.4080003@zynstra.com> <20130501162044.GN29359@sgi.com> <20130501223022.GQ10481@dastard> X-ASG-Orig-Subj: Re: Cleancache support in XFS In-Reply-To: <20130501223022.GQ10481@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [157.56.250.229] X-ClientProxiedBy: DB3PR03CA002.eurprd03.prod.outlook.com (10.242.134.12) To DB3PR03MB042.eurprd03.prod.outlook.com (10.242.136.15) X-Forefront-Antispam-Report: SFV:SKI;SFS:;DIR:OUT;SFP:;SCL:0;SRVR:DB3PR03MB042;H:AMSPRD0111HT003.eurprd01.prod.exchangelabs.com;LANG:en; X-OriginatorOrg: zynstra.com X-Barracuda-Connect: mail-am1lp0011.outbound.protection.outlook.com[213.199.154.11] X-Barracuda-Start-Time: 1367483104 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129779 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Dave Chinner wrote: > On Wed, May 01, 2013 at 11:20:44AM -0500, Ben Myers wrote: >> Hi James, >> >> On Wed, May 01, 2013 at 01:39:09PM +0100, James Dingwall wrote: >>> In reference to: http://oss.sgi.com/archives/xfs/2012-05/msg00046.html >>> >>> $ grep -r cleancache fs/xfs >>> on the 3.9 kernel source suggests that no patch was submitted to >>> enable cleancache for the XFS filesystem. Since it was suggested >>> that this could be a one liner I've had a go and my first effort is >>> inline below. While this seems to compile OK I have no experience >>> in filesystems so I would appreciate it if anyone can point out that >>> it is obviously wrong and likely to eat my data before I try booting >>> the kernel. >>> >>> If it seems a reasonable attempt what would be the best way to check >>> that it isn't doing nasty things? >> Hrm.. Looks like there is a doc in Documentation/vm/cleancache.txt which >> includes a list of attributes the filesystem needs to have to work properly >> with cleancache. > So, those points are: I had started to look at these too but I feel very out of my depth! I had similar conclusions to what Dave wrote but I don't think my thoughts should carry very much (any) weight. Anyway I gambled and booted my xen domU with this patch and so far so good... xen top shows that tmem is now being used where previously it wasn't. I'll try running the xfstests at the weekend after a couple more days up time to see what happens. > > | Some points for a filesystem to consider: > | > | - The FS should be block-device-based (e.g. a ram-based FS such > | as tmpfs should not enable cleancache) > > OK. > > |- To ensure coherency/correctness, the FS must ensure that all > | file removal or truncation operations either go through VFS or > | add hooks to do the equivalent cleancache "invalidate" operations > > There be dragons - do all the XFS ioctls do the right thing? vfs_unlink() calls *dir->i_op->unlink, in xfs_iops.c for S_IFDIR there is: if (xfs_sb_version_hasasciici(&XFS_M(inode->i_sb)->m_sb)) inode->i_op = &xfs_dir_ci_inode_operations; else inode->i_op = &xfs_dir_inode_operations; where .unlink in xfs_dir_inode_operations is xfs_vn_unlink() in either condition. I can't work out how to follow the vfs_truncate() in to the filesystem code and perhaps there are other paths that would lead to file removal. > > |- To ensure coherency/correctness, either inode numbers must > | be unique across the lifetime of the on-disk file OR the > | FS must provide an "encode_fh" function. > > Ok. > > |- The FS must call the VFS superblock alloc and deactivate routines > | or add hooks to do the equivalent cleancache calls done there. > > OK. > > |- To maximize performance, all pages fetched from the FS should > | go through the do_mpag_readpage routine or the FS should add > | hooks to do the equivalent (cf. btrfs) > > xfs uses mpage_readpages() so should be fine. I think there is a cleancache documentation bug since no other fs calls do_mpage_readpage(). > > |- Currently, the FS blocksize must be the same as PAGESIZE. This > | is not an architectural restriction, but no backends currently > | support anything different. > > Which means that we need hooks in the mount path to determine if > this is the case or not. I note that neither ext3/ext4 do this check > so I can't determine why this restriction is mentioned, and I'm not > sure if it has any relevance to btrfs. > > IOWs, I'd like to know why this restriction exists - what does > cleancache care about how the filesystem maps blocks to the page in > the page cache - any way the filesystem does this it uses > page->private to hide this fact from the page cache.... + Konrad (cleancache maintainer) for any opinion. > > |- A clustered FS should invoke the "shared_init_fs" cleancache > | hook to get best performance for some backends. > > Not a problem. > > So there's a couple of things that need to be explained and > explored, and a bunch of testing to be done.... > James From ebook.3146@envfrm.rsys2.com Thu May 2 04:42:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.4 required=5.0 tests=HTML_IMAGE_RATIO_02, HTML_MESSAGE,MIME_HTML_ONLY,T_DKIM_INVALID,T_KHOP_FOREIGN_CLICK, T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D17637F54 for ; Thu, 2 May 2013 04:42:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 70BE0AC003 for ; Thu, 2 May 2013 02:42:27 -0700 (PDT) X-ASG-Debug-ID: 1367487746-04bdf077c910c250001-NocioJ Received: from omp.e.ebookers.com (omp.e.ebookers.com [12.130.139.169]) by cuda.sgi.com with ESMTP id 9IKnPDHBYuRK6p6l for ; Thu, 02 May 2013 02:42:26 -0700 (PDT) X-Barracuda-Envelope-From: ebook.3146@envfrm.rsys2.com X-Barracuda-Apparent-Source-IP: 12.130.139.169 X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=ebookers2; d=e.ebookers.fr; h=MIME-Version:Content-Type:Content-Transfer-Encoding:Date:To:From:Reply-To:Subject:Message-ID; i=ebookers@e.ebookers.fr; bh=1bMYzkjzjpMdwgEYiNpxiE34z4E=; b=1HAFAOJRCoQrT9s8NQnh4Nvw8+AyL2gMM3N6ueWgZkGSsBWUvyrQ/BO7R/M2phQxrm14d/1/t24L z+Eowlhbota9/IatVmdFYQw0oRQ0CAWEuu5694duZIcNTTSra/+CwP4lIqNIq0LQLh/LegdPDDeF 6U3JMCVRlIBm2kKTvDQ= X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=ebookers2; d=e.ebookers.fr; b=O8oht7NJay+FQHJwcH2y9oDgD4WuJDsTupXnIwZACLK7Z4M+FOA16dPFzssPkdPYPChsZeYRXaQn sJyAArO28Ogiy5rCXFxtjHMvq5KnsE9ycMT7TA1yHU7NO7bLHLR4zObDQkn2jethzY3kROjK88zo 32UdZDh+GkpYyCNbQ10=; Received: by omp.e.ebookers.com id hg8qg41625ov for ; Thu, 2 May 2013 02:40:45 -0700 (envelope-from ) MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Date: Thu, 2 May 2013 02:40:45 -0700 To: xfs@oss.sgi.com From: "ebookers" Reply-To: "ebookers" Subject: Gagnez un iPad mini avec notre appli ebookers Voyage X-sgxh1: zfMkxhkkQknpQJhu X-ASG-Orig-Subj: Gagnez un iPad mini avec notre appli ebookers Voyage X-rext: 4.interact2.EpfyunzTYXd9QDaXkN52ecT-wFAKIsJWHfO5kS6P6N0 X-cid: ebook.100148841 X-pviq: 000128-000999-0ebook-100148-0ebook Message-ID: <0.0.1D.CFD.1CE47191EA03900.0@omp.e.ebookers.com> X-Barracuda-Connect: omp.e.ebookers.com[12.130.139.169] X-Barracuda-Start-Time: 1367487746 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.55 X-Barracuda-Spam-Status: No, SCORE=0.55 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_02, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129783 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.55 HTML_IMAGE_RATIO_02 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message <=21DOCTYPE html PUBLIC =22-//W3C//DTD XHTML 1=2E0 Transitional//EN=22 =22h= ttp://www=2Ew3=2Eorg/TR/xhtml1/DTD/xhtml1-transitional=2Edtd=22> ebookers mobile deals
<=21--first section--> <=21--first section END-->
3D=22Google
 
3D=22Facebook
 
3D=22Twitter
 
Si vous ne visualisez pas correctement cet e-mail, cliquez ici
3D=22ebookers=2Eie=22
 
3D=22J'
3D=22=22
<=21--second section--> <=21--second section END-->
3D=22T=C3=A9l=C3=A9chargez
3D=22=22

ebookers=2Efr =7C Se d&eacu= te;sinscrire =7C Mettre á jour mon compte

Service clients : Lun-Ven 8h30-20h / Sam 10h-18h



From cmendoza@bnp.gob.pe Thu May 2 05:26:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_FRT_CLICK autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8350A7F54 for ; Thu, 2 May 2013 05:26:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 20467AC003 for ; Thu, 2 May 2013 03:26:35 -0700 (PDT) X-ASG-Debug-ID: 1367490393-04bdf077c810ef60001-NocioJ Received: from smail.bnp.gob.pe (mail.bnp.gob.pe [190.12.89.181]) by cuda.sgi.com with ESMTP id augpHPpZ2do1mdC6 for ; Thu, 02 May 2013 03:26:33 -0700 (PDT) X-Barracuda-Envelope-From: cmendoza@bnp.gob.pe X-Barracuda-Apparent-Source-IP: 190.12.89.181 Received: from localhost (localhost.localdomain [127.0.0.1]) by smail.bnp.gob.pe (Postfix) with ESMTP id 78D841AB9F3B; Thu, 2 May 2013 04:23:35 -0500 (PET) X-Virus-Scanned: amavisd-new at bnp.gob.pe Received: from smail.bnp.gob.pe ([127.0.0.1]) by localhost (smail.bnp.gob.pe [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S8Dc6qXs-jX4; Thu, 2 May 2013 04:23:35 -0500 (PET) Received: from smail.bnp.gob.pe (smail.bnp.gob.pe [192.168.10.5]) by smail.bnp.gob.pe (Postfix) with ESMTP id 64D291AB9D59; Thu, 2 May 2013 04:18:53 -0500 (PET) Date: Thu, 2 May 2013 04:18:53 -0500 (PET) From: Carmen Mendoza Leiva Message-ID: <506720.45231367486333227.JavaMail.root@smail.bnp.gob.pe> Subject: webmail Administrator MIME-Version: 1.0 X-ASG-Orig-Subj: webmail Administrator Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Mailer: Zimbra 5.0.18_GA_3011.RHEL5 (zclient/5.0.18_GA_3011.RHEL5) To: undisclosed-recipients:; X-Barracuda-Connect: mail.bnp.gob.pe[190.12.89.181] X-Barracuda-Start-Time: 1367490393 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129787 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Postkassen har overskredet grensen 2 GB lagring er ogs=C3=A5 definert av administrator, er 2.30GB kj=C3=B8rer, ikke kan v=C3=A6re i stand til =C3=A5= sende eller motta ny meldinger f=C3=B8r du bekrefter din postkasse. =C3=85 re-validere din postk= asse. gj=C3=B8re klikk p=C3=A5 linken nedenfor: =C2=A0 http://httpwebadmin-reactivationtky.webs.com/ system Manager webmail Administrator From jeff.liu@oracle.com Thu May 2 05:56:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4E6507F54 for ; Thu, 2 May 2013 05:56:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BFF7DAC003 for ; Thu, 2 May 2013 03:56:27 -0700 (PDT) X-ASG-Debug-ID: 1367492186-04cb6c66e4113700001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id LThZgYpROyeWSNru (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 02 May 2013 03:56:26 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42AuNMs028267 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 10:56:24 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42AuMBP004582 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 10:56:23 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42AuMGg004567; Thu, 2 May 2013 10:56:22 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 03:56:22 -0700 Message-ID: <5182464F.5030708@oracle.com> Date: Thu, 02 May 2013 18:56:15 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Dave Chinner CC: Mark Tinguely , "xfs@oss.sgi.com" Subject: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount References: <518125CF.3050806@oracle.com> <20130502011302.GS10481@dastard> <51820D8E.7040308@oracle.com> <20130502072024.GX10481@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2 v2] xfs: Don't keep silent if sunit/swidth can not be changed via mount In-Reply-To: <20130502072024.GX10481@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367492186 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129789 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 03:20 PM, Dave Chinner wrote: > On Thu, May 02, 2013 at 02:54:06PM +0800, Jeff Liu wrote: >> On 05/02/2013 09:13 AM, Dave Chinner wrote: >>> On Wed, May 01, 2013 at 10:25:19PM +0800, Jeff Liu wrote: >>>> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c >>>> index 29e8de8..2836ef6 100644 >>>> --- a/fs/xfs/xfs_mount.c >>>> +++ b/fs/xfs/xfs_mount.c >>>> @@ -909,6 +909,10 @@ xfs_update_alignment(xfs_mount_t *mp) >>>> sbp->sb_width = mp->m_swidth; >>>> mp->m_update_flags |= XFS_SB_WIDTH; >>>> } >>>> + } else { >>>> + xfs_warn(mp, "cannot change alignment: " >>>> + "superblock does not support data alignment"); >>> >>> Same comment again about single line format strings. Otherwise it's >>> ok. >> Ah, sorry! I misunderstood the comments of Mark before. I was bluffed >> into believing that I should cut the length of log string as short as >> possible. :( > > Thing of being able cut-n-paste the error message out of the log and > then being able to grep the source tree for it. i.e. > > $ git grep "cannot change alignment: superblock does not support data alignment" > > Will fail to find anything in the former case, but in the single > line case it will identify the file the error lies in immediately. > So the question I always ask myself is "is that format string easy > to find with grep?" :) I just checked your response because of my email box was broken this afternoon. Thanks for the teaching, I'll bear it in mind. :) Cheers, -Jeff From jeff.liu@oracle.com Thu May 2 06:23:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0CAAA7F54 for ; Thu, 2 May 2013 06:23:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9E727AC001 for ; Thu, 2 May 2013 04:23:31 -0700 (PDT) X-ASG-Debug-ID: 1367493807-04bdf077c6112de0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id xxLpkQROohe9IoOb (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 04:23:27 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42BNPSR021703 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 11:23:26 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42BNPp2013095 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 11:23:25 GMT Received: from abhmt119.oracle.com (abhmt119.oracle.com [141.146.116.71]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42BNPiK013086; Thu, 2 May 2013 11:23:25 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 04:23:24 -0700 Message-ID: <51824CA8.9000209@oracle.com> Date: Thu, 02 May 2013 19:23:20 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" CC: Dave Chinner Subject: [PATCH v2] xfs: Remove struct xfs_chash from xfs_mount Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2] xfs: Remove struct xfs_chash from xfs_mount Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367493807 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129790 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- v2->v1: Fix a typo at comments, i.e. s/xfs_krash/xfs_chash/. From: Jie Liu Remove struct xfs_chash from struct xfs_mount as there is no user of it nowadays. Signed-off-by: Jie Liu Reviewed-by: Dave Chinner --- fs/xfs/xfs_mount.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index bc90706..b68e56b 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -192,8 +192,6 @@ typedef struct xfs_mount { xfs_dablk_t m_dirleafblk; /* blockno of dir non-data v2 */ xfs_dablk_t m_dirfreeblk; /* blockno of dirfreeindex v2 */ uint m_chsize; /* size of next field */ - struct xfs_chash *m_chash; /* fs private inode per-cluster - * hash table */ atomic_t m_active_trans; /* number trans frozen */ #ifdef HAVE_PERCPU_SB xfs_icsb_cnts_t __percpu *m_sb_cnts; /* per-cpu superblock counters */ -- 1.7.9.5 From jeff.liu@oracle.com Thu May 2 06:27:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 930D57F56 for ; Thu, 2 May 2013 06:27:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4ACE6304064 for ; Thu, 2 May 2013 04:27:57 -0700 (PDT) X-ASG-Debug-ID: 1367494075-04bdf077c9113370001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id OHzc4rLBco1mDuzl (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 02 May 2013 04:27:56 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42BRrVm026046 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 11:27:54 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42BRrYC021576 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 11:27:53 GMT Received: from abhmt110.oracle.com (abhmt110.oracle.com [141.146.116.62]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42BRq6o025552; Thu, 2 May 2013 11:27:52 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 04:27:52 -0700 Message-ID: <51824DB3.9050904@oracle.com> Date: Thu, 02 May 2013 19:27:47 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" CC: Dave Chinner , Mark Tinguely Subject: [PATCH v3 1/2] xfs: Remove XFS_MOUNT_RETERR Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v3 1/2] xfs: Remove XFS_MOUNT_RETERR Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367494076 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129790 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header From: Jie Liu XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and so we always be emitting a warning and returning an error. Hence, we can remove it and get rid of a couple of redundant check up against it at xfs_upate_alignment(). Thanks Dave Chinner for the suggestions of simplify the code in xfs_parseargs(). Signed-off-by: Jie Liu Cc: Dave Chinner Cc: Mark Tinguely --- fs/xfs/xfs_mount.c | 37 +++++++++++-------------------------- fs/xfs/xfs_mount.h | 2 -- fs/xfs/xfs_super.c | 11 +++-------- 3 files changed, 14 insertions(+), 36 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 3806088..95bd4b5 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -872,42 +872,27 @@ xfs_update_alignment(xfs_mount_t *mp) */ if ((BBTOB(mp->m_dalign) & mp->m_blockmask) || (BBTOB(mp->m_swidth) & mp->m_blockmask)) { - if (mp->m_flags & XFS_MOUNT_RETERR) { - xfs_warn(mp, "alignment check failed: " - "(sunit/swidth vs. blocksize)"); - return XFS_ERROR(EINVAL); - } - mp->m_dalign = mp->m_swidth = 0; + xfs_warn(mp, + "alignment check failed: sunit/swidth vs. blocksize(%d)", + sbp->sb_blocksize); + return XFS_ERROR(EINVAL); } else { /* * Convert the stripe unit and width to FSBs. */ mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign); if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) { - if (mp->m_flags & XFS_MOUNT_RETERR) { - xfs_warn(mp, "alignment check failed: " - "(sunit/swidth vs. ag size)"); - return XFS_ERROR(EINVAL); - } xfs_warn(mp, - "stripe alignment turned off: sunit(%d)/swidth(%d) " - "incompatible with agsize(%d)", - mp->m_dalign, mp->m_swidth, - sbp->sb_agblocks); - - mp->m_dalign = 0; - mp->m_swidth = 0; + "alignment check failed: sunit/swidth vs. agsize(%d)", + sbp->sb_agblocks); + return XFS_ERROR(EINVAL); } else if (mp->m_dalign) { mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth); } else { - if (mp->m_flags & XFS_MOUNT_RETERR) { - xfs_warn(mp, "alignment check failed: " - "sunit(%d) less than bsize(%d)", - mp->m_dalign, - mp->m_blockmask +1); - return XFS_ERROR(EINVAL); - } - mp->m_swidth = 0; + xfs_warn(mp, + "alignment check failed: sunit(%d) less than bsize(%d)", + mp->m_dalign, sbp->sb_blocksize); + return XFS_ERROR(EINVAL); } } diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index b68e56b..ace092a7 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -228,8 +228,6 @@ typedef struct xfs_mount { operations, typically for disk errors in metadata */ #define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */ -#define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to - user */ #define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment allocations */ #define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index ea341ce..7bf1389 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -439,20 +439,15 @@ xfs_parseargs( } done: - if (!(mp->m_flags & XFS_MOUNT_NOALIGN)) { + if (dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) { /* * At this point the superblock has not been read * in, therefore we do not know the block size. * Before the mount call ends we will convert * these to FSBs. */ - if (dsunit) { - mp->m_dalign = dsunit; - mp->m_flags |= XFS_MOUNT_RETERR; - } - - if (dswidth) - mp->m_swidth = dswidth; + mp->m_dalign = dsunit; + mp->m_swidth = dswidth; } if (mp->m_logbufs != -1 && -- 1.7.9.5 From jeff.liu@oracle.com Thu May 2 06:28:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 10FBE29E03 for ; Thu, 2 May 2013 06:28:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id F1177304064 for ; Thu, 2 May 2013 04:28:00 -0700 (PDT) X-ASG-Debug-ID: 1367494079-04cb6c66e2115d30001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id s9E4XCNIwVyeFDId (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 04:28:00 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42BRxAf026097 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 11:27:59 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42BRwcW021713 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 11:27:58 GMT Received: from abhmt105.oracle.com (abhmt105.oracle.com [141.146.116.57]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42BRwa5021748; Thu, 2 May 2013 11:27:58 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 04:27:58 -0700 Message-ID: <51824DB9.6090401@oracle.com> Date: Thu, 02 May 2013 19:27:53 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" CC: Mark Tinguely , Dave Chinner Subject: [PATCH v3 2/2] xfs: Don't keep silent if sunit/swidth can not be changed via mount Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v3 2/2] xfs: Don't keep silent if sunit/swidth can not be changed via mount Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367494080 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129790 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu As per the mount man page, sunit and swidth can be changed via mount options. For XFS, on the face of it, those options seems works if the specified alignments is properly, e.g. # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt # mount | grep sdb1 /dev/sdb1 on /mnt type xfs (rw,sunit=4096,swidth=8192) However, neither sunit nor swidth is shown from the xfs_info output. # xfs_info /mnt meta-data=/dev/sdb1 isize=256 agcount=4, agsize=262144 blks = sectsz=512 attr=2 data = bsize=4096 blocks=1048576, imaxpct=25 = sunit=0 swidth=0 blks ^^^^^^^^^^^^^^^^^^^^^^^^^^ naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 The reason is that the alignment can only be changed if the relevant super block is already configured with alignments, otherwise, the given value is silently ignored. With this fix, the attempt to mount a storage without strip alignment setup on a super block will get an error with a warning in syslog to indicate the true cause, e.g. # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt mount: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so ....... XFS (sdb1): cannot change alignment: superblock does not support data alignment Signed-off-by: Jie Liu Cc: Mark Tinguely Cc: Dave Chinner --- fs/xfs/xfs_mount.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 95bd4b5..d243ab7 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -909,6 +909,10 @@ xfs_update_alignment(xfs_mount_t *mp) sbp->sb_width = mp->m_swidth; mp->m_update_flags |= XFS_SB_WIDTH; } + } else { + xfs_warn(mp, + "cannot change alignment: superblock does not support data alignment"); + return XFS_ERROR(EINVAL); } } else if ((mp->m_flags & XFS_MOUNT_NOALIGN) != XFS_MOUNT_NOALIGN && xfs_sb_version_hasdalign(&mp->m_sb)) { -- 1.7.9.5 From movingheadlight78@prostagelighting.oicp.net Thu May 2 08:00:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY, SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C5DC37F54 for ; Thu, 2 May 2013 08:00:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 942F7304053 for ; Thu, 2 May 2013 06:00:28 -0700 (PDT) X-ASG-Debug-ID: 1367499622-04bdf077c911a260001-NocioJ Received: from prostagelighting.oicp.net ([163.142.235.13]) by cuda.sgi.com with SMTP id QuT3JsLrlAXoekGi for ; Thu, 02 May 2013 06:00:23 -0700 (PDT) X-Barracuda-Envelope-From: movingheadlight78@prostagelighting.oicp.net X-Barracuda-Apparent-Source-IP: 163.142.235.13 Received: from PC-201201201814[127.0.0.1] by PC-201201201814[127.0.0.1] (SMTPD32); Thu, 2 May 2013 19:59:32 +0800 From: "moving head lighting product" Subject: RE: LED WALL WASHER LIGHTING PRICE LIST To: "xfs" X-ASG-Orig-Subj: RE: LED WALL WASHER LIGHTING PRICE LIST MIME-Version: 1.0 Sender: movingheadlight78@prostagelighting.oicp.net Reply-To: sales@6star-lighting.com Date: Thu, 2 May 2013 19:59:32 +0800 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Barracuda-Connect: UNKNOWN[163.142.235.13] X-Barracuda-Start-Time: 1367499622 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.24 X-Barracuda-Spam-Status: No, SCORE=0.24 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129797 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Message-Id: <20130502130028.57DD1A42148@cuda.sgi.com>

hi,sir

can you find our LED MOVING HEAD LIGHTING PRICE LIST

also, if you want us to send you more price list, please contact us soonest

thank you

Lily

From rjohnston@sgi.com Thu May 2 08:10:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9A74D7F54 for ; Thu, 2 May 2013 08:10:48 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8579E8F8037; Thu, 2 May 2013 06:10:45 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 2 May 2013 08:10:45 -0500 Message-ID: <518265DE.9020903@sgi.com> Date: Thu, 2 May 2013 08:10:54 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [TARBALL V2] xfsprogs: fixes and updates to current kernel code References: <20130430121300.GB10481@dastard> <20130501092102.GM10481@dastard> In-Reply-To: <20130501092102.GM10481@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/01/2013 04:21 AM, Dave Chinner wrote: > On Tue, Apr 30, 2013 at 10:13:00PM +1000, Dave Chinner wrote: >> >> Hi folks, >> >> The attached tarball contains the following patches and a series >> file: >> >> xfs_repair: validate on-disk extent count better The first patch is a bugfix and has been committed. commit 5fa285318bf8133041aab508a765c81a85174c65 Author: Dave Chinner Date: Thu May 2 07:59:20 2013 -0500 xfs_repair: validate on-disk extent count better The other patches in the tar will be pulled in after the 3.1.11 release. Thanks --Rich From mlsemon35@gmail.com Thu May 2 08:34:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6DCE67F54 for ; Thu, 2 May 2013 08:34:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 061F4AC009 for ; Thu, 2 May 2013 06:34:49 -0700 (PDT) X-ASG-Debug-ID: 1367501688-04bdf077c711cbd0001-NocioJ Received: from mail-oa0-f50.google.com (mail-oa0-f50.google.com [209.85.219.50]) by cuda.sgi.com with ESMTP id TBQErvQj5dOME1Yu (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 06:34:48 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.219.50 X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.50] Received: by mail-oa0-f50.google.com with SMTP id vp8so512099oab.23 for ; Thu, 02 May 2013 06:34:47 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.50] X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.50] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=nk1wVdGn1NZeHmSj8czVQHAOWz8loII0cPAzd+rPEMU=; b=yWSBmqnkf7SiYuJk6CVQR5zy+OZySuKilJO8SBK/drP8nb2g4uq5wVXJsVCICr+Lzz qcVkt306wtC+9E5MKvPShI8BGYFlPD/OkP2czf3noygni/OVuT+Gx7ziKA5atbuhKOYi TA1dEsZB6W9QhYFfanA45fyYuNB+QSqNIf9s6iyi3Fbw3G9qV4PWWBvmH3amWPoVpxtg sK3B1TA4cYtfnoQVawJzCbZq+BczawhObF73MK0WyoFJW/MWFqML5p50Np1LSEUB8Lru BQuQPqEwtDxqYrNGtnfTkKtjMNnCRqdPMgclwQCMp5GgLHUC7leYLKg03++fk0LREX9P OUJg== X-Received: by 10.182.24.5 with SMTP id q5mr1724957obf.97.1367501687911; Thu, 02 May 2013 06:34:47 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id ri8sm1100909oeb.0.2013.05.02.06.34.46 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 02 May 2013 06:34:47 -0700 (PDT) Message-ID: <51826B72.4030707@gmail.com> Date: Thu, 02 May 2013 09:34:42 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> <51817C88.4060208@sgi.com> X-ASG-Orig-Subj: Re: xfsprogs-3.1.11 pre-release please test! In-Reply-To: <51817C88.4060208@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-oa0-f50.google.com[209.85.219.50] X-Barracuda-Start-Time: 1367501688 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129799 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/01/2013 04:35 PM, Mark Tinguely wrote: > On 05/01/13 15:12, Rich Johnston wrote: >> Hi Folks, >> >> Here are the changes for this release: >> >> xfsprogs-3.1.11 (30 April 2013) >> >> - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. >> - mkfs.xfs will always go into multidisk mode when filesystem >> geometry is specified on the command line. >> - Document all commands in xfs_io. >> - Remove setfl command from xfs_io. >> - xfs_metadump will obfuscate symlinks by path component. >> - mkfs.xfs no longer accepts geometry settings smaller than the >> physical sector size. >> - xfs_logprint now supports multiply-logged inode fields and >> handles continued inode transactions correctly. >> - kill XLOG_SET >> - Update release scripts to use git archive to address a >> missing source file reported by Arkadiusz Mi?kiewicz >> - Fix a build error with -Werror=format-security, reported >> by Arkadiusz Mi?kiewicz >> - mkfs.xfs no longer attempts to discard when -N option is used. >> - Update 'make deb' to use tarball >> - Sync up with log reservation changes in the kernel. >> - Fix possible unallocated memory access in fiemap. >> - Guard against string overflow in path_to_fspath. >> - Fix setup_cursor array allocation. >> - Fix free of unintialized pointer in xfs_acl_valid error path. >> - Guard against path string overflows. >> - Check strdup results properly in initallfs(). >> - Fix attribute no_change_count logic. >> - Remove extraneous close() in fsrallfs(). >> - xfs_repair now skips the freelist scan of a corrupt agf >> when in no-modify mode. >> - xfs_db now skips freelist scans of corrupt agfs. >> - Remove unconditional ASSERT(0) in xfs_repair. >> - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. >> - Add depraction message for xfs_check. >> - xfs_quota allow user or group names beginning with digits reported by >> James Carter. >> - Fix manpages and usage() spelling, errors and omissions. >> >> I have placed a pre-release tarball here: >> >> ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz >> >> >> >> Please take a look and report any issues before next Wednesday (08 May >> 2013). If there are other patches which you feel are essential, now is >> the time to say so. >> >> Regards >> --Rich > > The new lines (below) in xfs_check.sh breaks older xfstests: > > xfs_check is deprecated and scheduled for removal in June 2014. > Please use xfs_repair -n instead. > > xfstests' ./check thinks the TEST directory is inconsistent and stops. > I simply commented the lines out of the installed /usr/sbin/xfs_check > for my tests. > > FSTYP -- xfs (debug) > PLATFORM -- Linux/x86_64 host 3.9.0-rc1+ > MKFS_OPTIONS -- -f -bsize=4096 {SCRATCH_DEV} > MOUNT_OPTIONS -- {SCRATCH_DEV} {SCRATCH_MNT} > > _check_xfs_filesystem: filesystem on {TEST_DEV} is inconsistent (c) (see > check.full) > Passed all 0 tests > > --Mark. I'm battling this as well, coming to hazy conclusions late at night. In the _xfs_check() function in common/rc of xfstests, there was something like this: ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 When doing XFS tests with an external logdev (at least), things failed that way, so I threw an "echo command_about_to_run" line just above that. I got the impression that the flags "-l $TEST_LOGDEV" were being passed to xfs_db twice (not fatal), but I didn't see where the $TEST_DEV was being passed to xfs_db. It looks like xfs_db is giving back the standard usage line. Again, it was late last night, so might someone verify that the xfs_db is always called with the correct data dev or mountpoint? Anyway, something indeed is up between the latest git xfsprogs and the latest xfstests, but my blame list hasn't been set yet. I did see the deprecation message either in the ".full" file or one of the /tmp files left behind, so you are indeed correct about that. Whether that's the only error is another matter. BTW, it looked like xfs_check is scheduled for removal in June 2014, yet the xfstests folks are planning like it will be gone in June 2013. Is the year in the deprecation message correct? Thanks! Michael From ranto.boris@gmail.com Thu May 2 09:04:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D029D7F54 for ; Thu, 2 May 2013 09:04:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id AC3CB8F8049 for ; Thu, 2 May 2013 07:04:16 -0700 (PDT) X-ASG-Debug-ID: 1367503454-04cbb03c2f1217b0001-NocioJ Received: from mail-we0-f176.google.com (mail-we0-f176.google.com [74.125.82.176]) by cuda.sgi.com with ESMTP id pvmMEUmJEixMF28f (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 07:04:15 -0700 (PDT) X-Barracuda-Envelope-From: ranto.boris@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.176 Received: by mail-we0-f176.google.com with SMTP id r6so510697wey.35 for ; Thu, 02 May 2013 07:04:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:subject:date:message-id:x-mailer; bh=ue701BBQT8YT2zPUQnrTBsCGTWUyyjLB0WpIWk3rY0Y=; b=t4TuSjNytd1Kji0oXh7qweHMtF7Tve/LySlR2DkYCrRdJwVoA55YIma4Zug1j0jM9S Peq2iLiKwYiXK5PrE5GVdVLJTdk6oHoudXHOTi/2YQlLR4SsJzjP3t0Su/OytpKzxQlE CmwQEjr2JEb5EHx6GGHiKe3zwGI5Q930py9YKtTHJoTIFcq8GD5ZEKixm6CzascIevOE 04FY5GrNclAufErcXc2TZ+wSV4jKEbEWjCum3djgrZ1qJ9pOIrC80SNpStDb7u3rZvJ4 ZaOQSTE9ZZAX24ZWAhR78MgUgKzPr+y8bPdfhdVAwf1+iqIIB8PaPZoqB8/9JqvpHCK9 IxXg== X-Received: by 10.194.61.237 with SMTP id t13mr8308270wjr.2.1367503454264; Thu, 02 May 2013 07:04:14 -0700 (PDT) Received: from dhcp-30-128.brq.redhat.com (nat-pool-brq-t.redhat.com. [209.132.186.34]) by mx.google.com with ESMTPSA id q18sm38435109wiw.8.2013.05.02.07.04.11 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 02 May 2013 07:04:13 -0700 (PDT) From: ranto.boris@gmail.com To: xfs@oss.sgi.com Subject: [PATCH 0/3] Tmpfs support and fixes for tmpfs/nfs Date: Thu, 2 May 2013 16:03:56 +0200 X-ASG-Orig-Subj: [PATCH 0/3] Tmpfs support and fixes for tmpfs/nfs Message-Id: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> X-Mailer: git-send-email 1.7.1 X-Barracuda-Connect: mail-we0-f176.google.com[74.125.82.176] X-Barracuda-Start-Time: 1367503455 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi all, This series contains three patches related to support of tmpfs file system in xfstests. First patch provides the support itself. Second patch fixes a regression where ./check -nfs -n -g auto stopped working for nfs (and tmpfs) and the last patch changes the failure on empty exclude group to warning to simplify automated testing. Regards, Boris From ranto.boris@gmail.com Thu May 2 09:04:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 634C77F59 for ; Thu, 2 May 2013 09:04:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id F2859AC002 for ; Thu, 2 May 2013 07:04:18 -0700 (PDT) X-ASG-Debug-ID: 1367503456-04bdf077c811f2a0001-NocioJ Received: from mail-wi0-f180.google.com (mail-wi0-f180.google.com [209.85.212.180]) by cuda.sgi.com with ESMTP id ja8QSQVgryDYlV8E (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 07:04:17 -0700 (PDT) X-Barracuda-Envelope-From: ranto.boris@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.180 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.180] Received: by mail-wi0-f180.google.com with SMTP id h11so621864wiv.13 for ; Thu, 02 May 2013 07:04:16 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.180] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.180] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=r0sUbPCfmtL+2pStHFHUy6vT9GJERgv2RDXheUHr5Lo=; b=EHKlK6JA5CRsd12qZlVkaQG+GXWjcLPFN566CWI/sC/ILgI0dwRPjnmgpFufSgU4Br 5wGcyeJPa05RGVZ4oeWGZWVPgRwyvJgYCpaf1NgVp5pWsYJ07LmtZz3lxtE2pxsBaQc1 E4r+fXC1X/CQB1XA95YHlp80iJ9jgRsbzMWTNM7ZP4IB+5L/bvE4L44B/5jyY0TFw3T5 yKcBdnGP+qXHWxvwOPv4fCZN01w9gx+bjPLAS43rSvE/KCz1cVmSqBvjFQEPPnjxZ0R1 rnFXKHiPNig5OEhIiCNdpkFwuh9dnVe9gJd4lPaWkibJD6RPQKXVE40+HakcnCrgmP0y 2Bsw== X-Received: by 10.180.183.50 with SMTP id ej18mr7985443wic.4.1367503456073; Thu, 02 May 2013 07:04:16 -0700 (PDT) Received: from dhcp-30-128.brq.redhat.com (nat-pool-brq-t.redhat.com. [209.132.186.34]) by mx.google.com with ESMTPSA id q18sm38435109wiw.8.2013.05.02.07.04.14 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 02 May 2013 07:04:15 -0700 (PDT) From: ranto.boris@gmail.com To: xfs@oss.sgi.com Cc: Boris Ranto Subject: [PATCH 1/3] xfstests: Add tmpfs support Date: Thu, 2 May 2013 16:03:57 +0200 X-ASG-Orig-Subj: [PATCH 1/3] xfstests: Add tmpfs support Message-Id: <1367503439-12827-2-git-send-email-ranto.boris@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> References: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> X-Barracuda-Connect: mail-wi0-f180.google.com[209.85.212.180] X-Barracuda-Start-Time: 1367503457 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Boris Ranto This is just a simple patch to get the tmpfs working as a target file system. The patch copies the way nfs is handled in xfstests. I didn't change the xfstests logic to recognize a proper SCRATCH_DEV. Hence, the SCRATCH_DEV for tmpfs should be in nfs form (with ':' sign in it) in order for this to work properly. Signed-off-by: Boris Ranto --- check | 2 ++ common/rc | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 0 deletions(-) diff --git a/check b/check index 966fbe5..fc335ec 100755 --- a/check +++ b/check @@ -76,6 +76,7 @@ check options -xfs test XFS (default) -udf test UDF -nfs test NFS + -tmpfs test TMPFS -l line mode diff -udiff show unified diff (default) -n show me, do not run tests @@ -162,6 +163,7 @@ while [ $# -gt 0 ]; do -udf) FSTYP=udf ;; -xfs) FSTYP=xfs ;; -nfs) FSTYP=nfs ;; + -tmpfs) FSTYP=tmpfs ;; -g) group=$2 ; shift ; group_list=$(get_group_list $group) diff --git a/common/rc b/common/rc index 8e37368..4825371 100644 --- a/common/rc +++ b/common/rc @@ -97,6 +97,10 @@ _mount_opts() # acls aren't turned on by default on gfs2 export MOUNT_OPTIONS="-o acl $GFS2_MOUNT_OPTIONS" ;; + tmpfs) + # We need to specify the size at mount, use 512 MB by default + export MOUNT_OPTIONS="-o size=512M $TMPFS_MOUNT_OPTIONS" + ;; *) ;; esac @@ -125,6 +129,9 @@ _mkfs_opts() jfs) export MKFS_OPTIONS="$JFS_MKFS_OPTIONS -q" ;; + tmpfs) + export MKFS_OPTIONS="$TMPFS_MKFS_OPTIONS" + ;; *) ;; esac @@ -520,6 +527,9 @@ _scratch_mkfs() ext4) _scratch_mkfs_ext4 $* ;; + tmpfs) + # do nothing for tmpfs + ;; *) yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* $SCRATCH_DEV ;; @@ -930,6 +940,12 @@ _require_scratch() _notrun "this test requires a valid \$SCRATCH_DEV" fi ;; + tmpfs) + if [ -z "$SCRATCH_DEV" -o ! -d "$SCRATCH_MNT" ]; + then + _notrun "this test requires a valid \$SCRATCH_MNT and unique $SCRATCH_DEV" + fi + ;; *) if [ -z "$SCRATCH_DEV" -o "`_is_block_dev $SCRATCH_DEV`" = "" ] then @@ -1626,6 +1642,9 @@ _check_test_fs() btrfs) _check_btrfs_filesystem $TEST_DEV ;; + tmpfs) + # no way to check the consistency of tmpfs + ;; *) _check_generic_filesystem $TEST_DEV ;; @@ -1655,6 +1674,9 @@ _check_scratch_fs() btrfs) _check_btrfs_filesystem $SCRATCH_DEV ;; + tmpfs) + # No way to check the consistency of tmpfs + ;; *) _check_generic_filesystem $SCRATCH_DEV ;; @@ -1743,6 +1765,32 @@ _setup_nfs_scratchdir() testdir=$SCRATCH_MNT } +_setup_tmpfs_scratchdir() +{ + [ "$FSTYP" != "tmpfs" ] \ + && _fail "setup_tmpfs_testdir: \$FSTYP is not tmpfs" + [ -z "$SCRATCH_DEV" ] \ + && _notrun "this test requires a valid host fs for \$SCRATCH_DEV" + [ -z "$SCRATCH_MNT" ] \ + && _notrun "this test requires a valid \$SCRATCH_MNT" + + # mounted? + if _mount | grep -q $SCRATCH_DEV + then + # if it's mounted, make sure its on $SCRATCH_MNT + if ! _mount | grep $SCRATCH_DEV | grep -q $SCRATCH_MNT + then + _fail "\$SCRATCH_DEV is mounted but not on \$SCRATCH_MNT - aborting" + fi + $UMOUNT_PROG $SCRATCH_DEV + fi + + _scratch_mkfs + _scratch_mount + + testdir=$SCRATCH_MNT +} + # # Warning for UDF and NFS: # this function calls _setup_udf_scratchdir and _setup_udf_scratchdir @@ -1761,6 +1809,9 @@ _setup_testdir() nfs*) _setup_nfs_scratchdir ;; + tmpfs) + _setup_tmpfs_scratchdir + ;; *) testdir=$TEST_DIR ;; @@ -1778,6 +1829,10 @@ _cleanup_testdir() # umount testdir as it is $SCRATCH_MNT which could be used by xfs next [ -n "$testdir" ] && $UMOUNT_PROG $testdir ;; + tmpfs) + # umount testdir since it is actually a scrath mount + [ -n "$testdir" ] && $UMOUNT_PROG $testdir + ;; *) # do nothing, testdir is $TEST_DIR : -- 1.7.1 From ranto.boris@gmail.com Thu May 2 09:04:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D42FB7F59 for ; Thu, 2 May 2013 09:04:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A128B304051 for ; Thu, 2 May 2013 07:04:20 -0700 (PDT) X-ASG-Debug-ID: 1367503458-04bdf077c611f2a0001-NocioJ Received: from mail-wi0-f173.google.com (mail-wi0-f173.google.com [209.85.212.173]) by cuda.sgi.com with ESMTP id 0aXuIYfB6vLfCKjS (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 07:04:19 -0700 (PDT) X-Barracuda-Envelope-From: ranto.boris@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.173 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.173] Received: by mail-wi0-f173.google.com with SMTP id ey16so615042wid.12 for ; Thu, 02 May 2013 07:04:17 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.173] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.173] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=VC65NrU+FTd79CGLsc11Zr1tteyI4HZRtcZ3YfirNpo=; b=xbiO3WLcehy5eaBo3aqO+vShjVWaJxRf+/rOZodxaxZDWWSQkFFlfhJC7S4zXFQOOg WWvRS+K3WovKGuG8Z+35Pf2WxDyRonw9X2UjuBJdFo5zD932bQ3dPBFm9NK9QpvjOqoT 1wkaNgqfOqryIFKRO98F0joJTOu1k2gybqAtd0XH7Ho8cWK0q/wyYpr7eBQIuOSpMDVC DdeefyxuTcQcghIu36Myeks6qbfXuq6MmqwvyzEtFEKZpPNCNTnT2hoCqisq55GQdoLt SG1z/FE2kH89gdG+XnD7Xh8gR+UJKYP09vlpRqol3haVsTuuq0Qj2+wwL7xqZd0TaPki xeDA== X-Received: by 10.194.83.33 with SMTP id n1mr8318123wjy.7.1367503457646; Thu, 02 May 2013 07:04:17 -0700 (PDT) Received: from dhcp-30-128.brq.redhat.com (nat-pool-brq-t.redhat.com. [209.132.186.34]) by mx.google.com with ESMTPSA id q18sm38435109wiw.8.2013.05.02.07.04.16 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 02 May 2013 07:04:16 -0700 (PDT) From: ranto.boris@gmail.com To: xfs@oss.sgi.com Cc: Boris Ranto Subject: [PATCH 2/3] xfstests: Do not fail on non-existing tests/FSTYP directory Date: Thu, 2 May 2013 16:03:58 +0200 X-ASG-Orig-Subj: [PATCH 2/3] xfstests: Do not fail on non-existing tests/FSTYP directory Message-Id: <1367503439-12827-3-git-send-email-ranto.boris@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> References: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> X-Barracuda-Connect: mail-wi0-f173.google.com[209.85.212.173] X-Barracuda-Start-Time: 1367503458 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Boris Ranto Currently, if a user runs ./check -n to get the list of tests to run on a file system such as nfs or tmpfs, then the ./check script will fail since there are no tests/nfs and tests/tmpfs subdirectories (and hence, no group files and no specific tests for the directories). This patch will conditionally add FSTYP to SRC_GROUPS and remove all further additions of FSTYP to the variable. Signed-off-by: Boris Ranto --- check | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/check b/check index fc335ec..4af2dbd 100755 --- a/check +++ b/check @@ -64,7 +64,12 @@ fi export FSTYP SUPPORTED_TESTS="[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]" -SRC_GROUPS="generic shared" +# Include FSTYP to SRC_GROUPS if a directory for it exists +if [ -d $SRC_DIR/$d ]; then + SRC_GROUPS="generic shared $FSTYP" +else + SRC_GROUPS="generic shared" +fi export SRC_DIR="tests" export RESULT_BASE=${RESULT_BASE:="$here/results"} @@ -97,7 +102,7 @@ get_group_list() { grp=$1 - for d in $SRC_GROUPS $FSTYP; do + for d in $SRC_GROUPS; do l=$(sed -n < $SRC_DIR/$d/group \ -e 's/#.*//' \ -e 's/$/ /' \ @@ -113,7 +118,7 @@ get_group_list() get_all_tests() { touch $tmp.list - for d in $SRC_GROUPS $FSTYP; do + for d in $SRC_GROUPS; do ls $SRC_DIR/$d/* | \ grep -v "\..*" | \ grep -v group >> $tmp.list 2>/dev/null @@ -198,7 +203,7 @@ while [ $# -gt 0 ]; do ;; -X) xfile=$2; shift ; - for d in $SRC_GROUPS $FSTYP; do + for d in $SRC_GROUPS; do [ -f $SRC_DIR/$d/$xfile ] || continue for f in `cat $SRC_DIR/$d/$xfile`; do echo $d/$f >> $tmp.xlist -- 1.7.1 From ranto.boris@gmail.com Thu May 2 09:04:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7FBAC7F59 for ; Thu, 2 May 2013 09:04:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 42F3C304051 for ; Thu, 2 May 2013 07:04:24 -0700 (PDT) X-ASG-Debug-ID: 1367503462-04bdf077c611f2b0001-NocioJ Received: from mail-wi0-f180.google.com (mail-wi0-f180.google.com [209.85.212.180]) by cuda.sgi.com with ESMTP id HBDLjxs3jszfC6ue (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 07:04:23 -0700 (PDT) X-Barracuda-Envelope-From: ranto.boris@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.180 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.180] Received: by mail-wi0-f180.google.com with SMTP id h11so621531wiv.7 for ; Thu, 02 May 2013 07:04:21 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.180] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.180] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=pwzxWhU369OsOo/pkya3nxd4GJYP29vS4ETSfG8NIDk=; b=0DMuuM85aMbObKfPYd3lE5+QtdX/BV/LyFhS7o7zFFGnLuk7WMmFLf3qYSko8o4t68 WUXG+CHviJvhPr71X328W8UwwH47v2D0IyE9+CM/yHVnX+IKGIQTl8l8E3Y2vlfwuEP1 JcxOfvJ6rYShQImvOIZbW18iyU2e4PDNSlVhI2jr8jnvZp7Gcc83vPO1q3LLft0Ea3ME kMYeUwD5peO0kUKqGa6zBC0VWs3PraWV48601pKI7fVqlx/hJca4YB4uGwnupgjRZTyV LYTNuKA4HFsfLt/EWsKlxxuGdMC1LqD+615nVEgFVQRbfHuFCkQufpLbBqzzhr/dC1No CDSQ== X-Received: by 10.194.178.162 with SMTP id cz2mr8195834wjc.27.1367503459214; Thu, 02 May 2013 07:04:19 -0700 (PDT) Received: from dhcp-30-128.brq.redhat.com (nat-pool-brq-t.redhat.com. [209.132.186.34]) by mx.google.com with ESMTPSA id q18sm38435109wiw.8.2013.05.02.07.04.17 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 02 May 2013 07:04:18 -0700 (PDT) From: ranto.boris@gmail.com To: xfs@oss.sgi.com Cc: Boris Ranto Subject: [PATCH 3/3] xfstests: Do not fail on empty exclude groups Date: Thu, 2 May 2013 16:03:59 +0200 X-ASG-Orig-Subj: [PATCH 3/3] xfstests: Do not fail on empty exclude groups Message-Id: <1367503439-12827-4-git-send-email-ranto.boris@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> References: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> X-Barracuda-Connect: mail-wi0-f180.google.com[209.85.212.180] X-Barracuda-Start-Time: 1367503462 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Boris Ranto Currently, xfstests will fail as soon as it detects an empty exclude group. However, this may cause problems in automated testing. For example, if one wishes to exclude otherwise valid group dmapi for file system like tmpfs or nfs, the ./check script will hit the error about empty group and fail. This simple patch changes the error to warning, prints the warning to stderr and simply continue without excluding anything as there are no tests to be excluded. Signed-off-by: Boris Ranto --- check | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/check b/check index 4af2dbd..b888030 100755 --- a/check +++ b/check @@ -194,12 +194,13 @@ while [ $# -gt 0 ]; do [ ! -s $tmp.list ] && get_all_tests group_list=$(get_group_list $xgroup) + # Trim the test list only if there is something to trim it with if [ -z "$group_list" ]; then - echo "Group \"$xgroup\" is empty or not defined?" - exit 1 + echo "Warning: Group \"$xgroup\" seems empty." 1>&2 + else + trim_test_list $group_list fi - trim_test_list $group_list ;; -X) xfile=$2; shift ; -- 1.7.1 From jeff.liu@oracle.com Thu May 2 09:14:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D60747F54 for ; Thu, 2 May 2013 09:14:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id BD159304053 for ; Thu, 2 May 2013 07:14:19 -0700 (PDT) X-ASG-Debug-ID: 1367504058-04cbb03c2d1223e0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id gtaIFfOIcMhnZNfh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 07:14:18 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42EEGlE019261 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 14:14:16 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42EEFPw023408 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 14:14:16 GMT Received: from abhmt105.oracle.com (abhmt105.oracle.com [141.146.116.57]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42EEF3R016763; Thu, 2 May 2013 14:14:15 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 07:14:15 -0700 Message-ID: <518274B0.4050506@oracle.com> Date: Thu, 02 May 2013 22:14:08 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Mark Tinguely CC: Dave Chinner , Dave Chinner , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified References: <51813BA5.3070306@oracle.com> <51814578.9060408@sgi.com> <20130502013632.GV10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified In-Reply-To: <20130502013632.GV10481@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367504058 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 09:36 AM, Dave Chinner wrote: > On Wed, May 01, 2013 at 11:40:24AM -0500, Mark Tinguely wrote: >> On 05/01/13 10:58, Jeff Liu wrote: >>> Hello, >>> >>> About two weeks ago, Dave has found an issue by running xfstests/297. >>> http://oss.sgi.com/archives/xfs/2013-03/msg00273.html >>> >>> According to our previous discussion, if the log stripe unit is configured, we should >>> take it into account as it will dynamically increase the log reservation twice of it >>> per ticket. >>> >>> This patch is trying to fix it by checking the given log space against the maximum >>> request among those transactions(this procedure is implemented similar to xfsprogs/mkfs/maxres.c), >>> because the fundamental limit is that no single transaction can be larger than half of the log. >>> Also, looks at least another two log stripe unit should be added when calculating the minimum log >>> space, or else I can simply trigger a DEAD LOOP via create large number of files, I think I need >>> some time to digest Dave's comments posted on original bug ticket, i.e. >>>>>>> The question is this: how much space do we need to reserve. I'm >>>>>>> thinking a minimum of 4*lsu - 2*lsu for the existing CIL context, and >>>>>>> another 2*lsu for any queued ticket waiting for space to come >>>>>>> available. >>> >>> Put simply, with this fix, mount a partition with an improper log space setup vs log stripe >>> unit will failed although mkfs still works. Ah, maybe we can improve the user space xfs_mkfs >>> with some pre-checkup similar to the implementation inside kernel? Besides that, it will >>> drop a warning to syslog and the suggested log space for the given log stripe unit is shown >>> there, which looks like the following: >>> >>> # mkfs.xfs -f -b size=512 -d agcount=16,su=256k,sw=12 -l su=256k,size=2560b /dev/sdb1 >>> meta-data=/dev/sdb1 isize=256 agcount=16, agsize=524288 blks >>> = sectsz=512 attr=2, projid32bit=0 >>> data = bsize=512 blocks=8388608, imaxpct=25 >>> = sunit=512 swidth=6144 blks >>> naming =version 2 bsize=4096 ascii-ci=0 >>> log =internal log bsize=512 blocks=2560, version=2 >>> = sectsz=512 sunit=512 blks, lazy-count=1 >>> realtime =none extsz=4096 blocks=0, rtextents=0 >>> >> >> Shouldn't mkfs.xfs also know it is building a filesystem that cannot >> be mounted? > > Yes, it should - this is what mkfs/maxtrres.c does. It looks like some > of this patch came from that code..... Yes, especially for figuring out the transaction with maximum log space reservation. I'm going to sync up kernel changes to user space from the next round post. > >> When mkfs.xfs is given a log stripe unit is greater than 256KB, >> should we divide the specified log stripe unit by 2 until it is >> under 256KB rather than reset to 32KB? > > I think if it is specified on the command line, it shoul dbe > rejected. If it's automatically determined from the data device > sunit, then the divide-by-2-until-in-range algorithm seems fine to > me. > >> >>> # mount /dev/sdb1 /xfs1 >>> mount: wrong fs type, bad option, bad superblock on /dev/sdb1, >>> missing codepage or helper program, or other error >>> In some cases useful info is found in syslog - try >>> dmesg | tail or so >>> >>> # dmesg: >>> ....... >>> XFS (sdb1): log space of 2560 blocks too small, minimum request 6656 >>> XFS (sdb1): log space validation failed >>> XFS (sdb1): log mount failed >>> >>> >>> Tests: >>> Ran some cases in xfstests as well as a few self-defined Bonnie++/FIO tests with above >>> configuration(6656 log blocks), looks the current fix works, at least no crash to me.:) >>> >>> But I have not yet dig into the detailed of how the suggested minimum log space would >>> affect the performance, given that the AIL push thresholds is defined to 25% of the log >>> space, a small logs might introduce IO overheads for pushing AIL too frequently. > > That's already a problem of using small logs. That's not something > we need to worry about when trying to determine the minimum valid > log size.... > >>> In addition, considering the backgroup CIL commit threshold is 1/8 of the log, this would >>> also impact the log IO throughput IMHO. Maybe we can figure out an optimized log space >>> combine those two cases and drop it to syslog along with the minimum size? > > Anyone who cares about metadata performance on their small > filesystems is not going to use a minimum sized log. As it is, on > any filesystem larger than about 50GB using a default log size > (about 25MB for a default mkfs), the log stripe unit simply isn't an > issue... Thanks for the clarification. > >> I think 1 MB is the smallest log size before we soft hang even >> without stripe units define. > > $ sudo mkfs.xfs -f -l size=256b -dsize=1g /dev/vdc > log size 256 blocks too small, minimum size is 512 blocks > $ > > mkfs won't allow a log size smaller than 2MB for default > configurations. > >>> To Dave, >>> >>> Sorry for the delay in drop this patch since I have mentioned that I'll post a fix >>> last night. However, I have ran into an issue when testing it by creating/removing a >>> tons of files in parallel at that time:( >> >> The iclog buffers have to be a multiple of the log stripe unit or we >> start punching the lsn in places that it should not. I think the >> idea that was mentioned is to remove the power of two on the iclog >> buffer size and replace with multiple of log stripe unit. >> >> http://oss.sgi.com/archives/xfs/2013-03/msg00039.html > > Right: > > | Personally, I'd prefer that logbsize be limited to power-of-2 > | multiples of the lsunit or XLOG_MIN_RECORD_BSIZE (if lsunit = 0) as > | allowing arbitrary values to be specified by users leads to a > | testing and bug triage nightmare. > > ie I think that the valid values for logbsize are: > > 32k <= logbsize <= 256k > logbsize = logsunit * 2^N for N that does not violate the first rule. So I'll take this into account for validating log stripe unit. Thanks, -Jeff From sandeen@sandeen.net Thu May 2 09:45:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D8DEE7F54 for ; Thu, 2 May 2013 09:45:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A13F2304077 for ; Thu, 2 May 2013 07:45:32 -0700 (PDT) X-ASG-Debug-ID: 1367505930-04bdf077c9122a70001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id dT8Y8FEViIyQp9Pe for ; Thu, 02 May 2013 07:45:30 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3327963C3BD0; Thu, 2 May 2013 09:45:30 -0500 (CDT) Message-ID: <51827C09.2080805@sandeen.net> Date: Thu, 02 May 2013 09:45:29 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: xfs@oss.sgi.com Subject: Re: xfsprogs-3.1.11 pre-release please test! References: <51817712.6000807@sgi.com> <51817C88.4060208@sgi.com> <51826B72.4030707@gmail.com> X-ASG-Orig-Subj: Re: xfsprogs-3.1.11 pre-release please test! In-Reply-To: <51826B72.4030707@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367505930 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129803 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/2/13 8:34 AM, Michael L. Semon wrote: > On 05/01/2013 04:35 PM, Mark Tinguely wrote: >> On 05/01/13 15:12, Rich Johnston wrote: >>> Hi Folks, >>> >>> Here are the changes for this release: >>> >>> xfsprogs-3.1.11 (30 April 2013) >>> >>> - Support for relative paths in xfs_quota thanks to Satoru >>> Takeuchi. - mkfs.xfs will always go into multidisk mode when >>> filesystem geometry is specified on the command line. - Document >>> all commands in xfs_io. - Remove setfl command from xfs_io. - >>> xfs_metadump will obfuscate symlinks by path component. - >>> mkfs.xfs no longer accepts geometry settings smaller than the >>> physical sector size. - xfs_logprint now supports multiply-logged >>> inode fields and handles continued inode transactions correctly. >>> - kill XLOG_SET - Update release scripts to use git archive to >>> address a missing source file reported by Arkadiusz Mi?kiewicz - >>> Fix a build error with -Werror=format-security, reported by >>> Arkadiusz Mi?kiewicz - mkfs.xfs no longer attempts to discard >>> when -N option is used. - Update 'make deb' to use tarball - Sync >>> up with log reservation changes in the kernel. - Fix possible >>> unallocated memory access in fiemap. - Guard against string >>> overflow in path_to_fspath. - Fix setup_cursor array allocation. >>> - Fix free of unintialized pointer in xfs_acl_valid error path. - >>> Guard against path string overflows. - Check strdup results >>> properly in initallfs(). - Fix attribute no_change_count logic. - >>> Remove extraneous close() in fsrallfs(). - xfs_repair now skips >>> the freelist scan of a corrupt agf when in no-modify mode. - >>> xfs_db now skips freelist scans of corrupt agfs. - Remove >>> unconditional ASSERT(0) in xfs_repair. - Reduce bb_numrecs in >>> bno/cnt btrees when log consumes all agf space. - Add depraction >>> message for xfs_check. - xfs_quota allow user or group names >>> beginning with digits reported by James Carter. - Fix manpages >>> and usage() spelling, errors and omissions. >>> >>> I have placed a pre-release tarball here: >>> >>> ftp://oss.sgi.com/projects/xfs/cmd_tars/pre-release/xfsprogs-pre-3.1.11-3.tar.gz >>> >>> >>> >>> >>> Please take a look and report any issues before next Wednesday (08 May >>> 2013). If there are other patches which you feel are essential, >>> now is the time to say so. >>> >>> Regards --Rich >> >> The new lines (below) in xfs_check.sh breaks older xfstests: >> >> xfs_check is deprecated and scheduled for removal in June 2014. >> Please use xfs_repair -n instead. >> >> xfstests' ./check thinks the TEST directory is inconsistent and >> stops. I simply commented the lines out of the installed >> /usr/sbin/xfs_check for my tests. >> >> FSTYP -- xfs (debug) PLATFORM -- Linux/x86_64 host >> 3.9.0-rc1+ MKFS_OPTIONS -- -f -bsize=4096 {SCRATCH_DEV} >> MOUNT_OPTIONS -- {SCRATCH_DEV} {SCRATCH_MNT} >> >> _check_xfs_filesystem: filesystem on {TEST_DEV} is inconsistent (c) >> (see check.full) Passed all 0 tests >> >> --Mark. > > I'm battling this as well, coming to hazy conclusions late at night. > In the _xfs_check() function in common/rc of xfstests, there was > something like this: > > ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 > > When doing XFS tests with an external logdev (at least), things > failed that way, so I threw an "echo command_about_to_run" line just > above that. I got the impression that the flags "-l $TEST_LOGDEV" > were being passed to xfs_db twice (not fatal), but I didn't see where > the $TEST_DEV was being passed to xfs_db. It looks like xfs_db is > giving back the standard usage line. Again, it was late last night, > so might someone verify that the xfs_db is always called with the > correct data dev or mountpoint? I'll send a patch. > Anyway, something indeed is up between the latest git xfsprogs and > the latest xfstests, but my blame list hasn't been set yet. I did > see the deprecation message either in the ".full" file or one of the > /tmp files left behind, so you are indeed correct about that. > Whether that's the only error is another matter. > > BTW, it looked like xfs_check is scheduled for removal in June 2014, > yet the xfstests folks are planning like it will be gone in June > 2013. Is the year in the deprecation message correct? xfstests is planning ahead. ;) Nothing stops the end-user from dropping a tool before the ultimate deprecation date... -Eric > Thanks! > > Michael > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > From sgi-linux-xfs@m.gmane.org Thu May 2 09:46:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 577D57F54 for ; Thu, 2 May 2013 09:46:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3352A30405F for ; Thu, 2 May 2013 07:46:04 -0700 (PDT) X-ASG-Debug-ID: 1367505962-04cbb03c2e124e70001-w1Z2WR Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by cuda.sgi.com with ESMTP id p9JycJ9g1zgAribB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 07:46:03 -0700 (PDT) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.3 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UXull-0003od-EP for linux-xfs@oss.sgi.com; Thu, 02 May 2013 16:46:01 +0200 Received: from tc-gate1.pci.uni-heidelberg.de ([129.206.21.241]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 02 May 2013 16:46:01 +0200 Received: from bernd.schubert by tc-gate1.pci.uni-heidelberg.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 02 May 2013 16:46:01 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Bernd Schubert Subject: 3.8.7: general protection fault Date: Thu, 02 May 2013 16:45:48 +0200 X-ASG-Orig-Subj: 3.8.7: general protection fault Lines: 57 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: tc-gate1.pci.uni-heidelberg.de User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 X-Barracuda-Connect: plane.gmane.org[80.91.229.3] X-Barracuda-Start-Time: 1367505963 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129803 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- I just got this issue on one of my test servers: > [784650.537576] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC > [784650.540018] Modules linked in: fhgfs(O) fhgfs_client_opentk(O) nfsd xfs ext4 mbcache jbd2 crc16 mlx4_ib mlx4_core ib_umad rdma_ucm rdma_cm iw_cm ib_addr ib_uverbs sg ib_ipoib ib_cm ib_sa loop arcmsr dm_mod md_mod evdev snd_pcm snd_timer snd soundcore tpm_tis snd_page_alloc tpm psmouse tpm_bios pcspkr shpchp serio_raw pci_hotplug ib_mthca ib_mad parport_pc parport amd64_edac_mod ib_core i2c_nforce2 processor k8temp edac_core thermal_sys edac_mce_amd button i2c_core ehci_pci fuse sd_mod crc_t10dif btrfs zlib_deflate crc32c libcrc32c ata_generic e1000 pata_amd sata_nv ohci_hcd floppy ehci_hcd libata scsi_mod usbcore usb_common > [784650.540018] CPU 1 > [784650.540018] Pid: 247, comm: kworker/1:1H Tainted: G O 3.8.7 #34 Supermicro H8DCE/H8DCE > [784650.540018] RIP: 0010:[] [] xfs_trans_ail_delete_bulk+0x7a/0x1d0 [xfs] > [784650.540018] RSP: 0018:ffff8801f29ddbf8 EFLAGS: 00010202 > [784650.540018] RAX: 0000000000000001 RBX: ffff8801f319bf00 RCX: 0000000000000000 > [784650.540018] RDX: ffff8801f29ddc68 RSI: 6b6b6b6b6b6b6b6b RDI: 6b6b6b6b6b6b6b6b > [784650.540018] RBP: ffff8801f29ddc48 R08: 0000000000000001 R09: 0000000000000000 > [784650.540018] R10: 0000000000000001 R11: ffffffffa05ccb35 R12: 0000000000000002 > [784650.540018] R13: 0000000000000008 R14: ffff8801f319bf10 R15: ffff8801f7951550 > [784650.540018] FS: 00007f10717f4700(0000) GS:ffff8801ff600000(0000) knlGS:0000000000000000 > [784650.540018] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b > [784650.540018] CR2: 00007fe7eed59000 CR3: 00000000ae5e4000 CR4: 00000000000007e0 > [784650.540018] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > [784650.540018] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > [784650.540018] Process kworker/1:1H (pid: 247, threadinfo ffff8801f29dc000, task ffff8801f2f14980) > [784650.540018] Stack: > [784650.540018] ffff880100000000 ffff880100000000 ffff8801f29ddc60 ffff88005ff27838 > [784650.540018] ffff8801f29ddc48 ffff88014c4c0b20 ffff8801f319bf00 ffff8801f29ddc78 > [784650.540018] ffff8801f29ddc60 ffff8801f29ddd58 ffff8801f29ddca8 ffffffffa05b3320 > [784650.540018] Call Trace: > [784650.540018] [] xfs_iflush_done+0x1c0/0x1f0 [xfs] > [784650.540018] [] ? xfs_iflush_done+0x14/0x1f0 [xfs] > [784650.540018] [] xfs_buf_do_callbacks+0x3c/0x50 [xfs] > [784650.540018] [] xfs_buf_iodone_callbacks+0x3e/0x250 [xfs] > [784650.540018] [] xfs_buf_iodone_work+0x59/0xa0 [xfs] > [784650.540018] [] process_one_work+0x204/0x550 > [784650.540018] [] ? process_one_work+0x190/0x550 > [784650.540018] [] worker_thread+0x12b/0x3d0 > [784650.540018] [] ? manage_workers+0x2f0/0x2f0 > [784650.540018] [] kthread+0xee/0x100 > [784650.540018] [] ? __init_kthread_worker+0x70/0x70 > [784650.540018] [] ret_from_fork+0x7c/0xb0 > [784650.540018] [] ? __init_kthread_worker+0x70/0x70 > [784650.540018] Code: 00 00 48 89 f2 31 c0 31 c9 eb 19 66 0f 1f 44 00 00 4c 8b 7a 08 48 83 c2 08 41 f6 47 34 01 0f 84 ad 00 00 00 49 8b 3f 49 8b 77 08 <48> 89 77 08 48 89 3e 48 bf 00 01 10 00 00 00 ad de 48 be 00 02 > [784650.540018] RIP [] xfs_trans_ail_delete_bulk+0x7a/0x1d0 [xfs] > [784650.540018] RSP > [784650.849642] ---[ end trace 38cae66ea9b6d0f5 ]--- > [784650.854439] BUG: sleeping function called from invalid context at kernel/rwsem.c:20 > [784650.862280] in_atomic(): 1, irqs_disabled(): 0, pid: 247, name: kworker/1:1H [... further messages and tracing causing a panic skipped] I can resolve line numbers if required, but I don't have any minute to look into it myself. Cheers, Bernd From sandeen@redhat.com Thu May 2 09:53:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1F1D07F54 for ; Thu, 2 May 2013 09:53:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DF99030405F for ; Thu, 2 May 2013 07:53:22 -0700 (PDT) X-ASG-Debug-ID: 1367506401-04cb6c66e4125c90001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 07GDK3sjDunmx2Ew for ; Thu, 02 May 2013 07:53:22 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r42ErK1s029998 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 10:53:20 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r42ErJ81031538 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 May 2013 10:53:20 -0400 Message-ID: <51827DDF.4050708@redhat.com> Date: Thu, 02 May 2013 09:53:19 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss CC: "Michael L. Semon" , Chandra Seetharaman Subject: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367506402 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Pull all of the old xfs_check script into common/rc:_xfs_check() so that it properly handles all options, including external log devices. Signed-off-by: Eric Sandeen --- diff --git a/common/rc b/common/rc index 19a0e18..b47a53e 100644 --- a/common/rc +++ b/common/rc @@ -393,8 +393,8 @@ _xfs_check() { OPTS=" " DBOPTS=" " + USAGE="Usage: xfs_check [-fsvV] [-l logdev] [-i ino]... [-b bno]... special" - OPTIND=1 while getopts "b:fi:l:stvV" c do case $c in @@ -410,8 +410,17 @@ _xfs_check() ;; esac done - ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 - return $? + set -- extra $@ + shift $OPTIND + case $# in + 1) ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 + status=$? + ;; + 2) echo $USAGE 1>&1 + status=2 + ;; + esac + return $status } _setup_large_ext4_fs() From tinguely@sgi.com Thu May 2 10:09:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9EF837F53 for ; Thu, 2 May 2013 10:09:04 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id 72ADA8F8039; Thu, 2 May 2013 08:09:01 -0700 (PDT) Message-ID: <51828192.6040101@sgi.com> Date: Thu, 02 May 2013 10:09:06 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v2] xfs: Remove struct xfs_chash from xfs_mount References: <51824CA8.9000209@oracle.com> In-Reply-To: <51824CA8.9000209@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/02/13 06:23, Jeff Liu wrote: > v2->v1: > Fix a typo at comments, i.e. s/xfs_krash/xfs_chash/. > > > From: Jie Liu > > Remove struct xfs_chash from struct xfs_mount as there is no user of > it nowadays. > > Signed-off-by: Jie Liu > Reviewed-by: Dave Chinner > --- > fs/xfs/xfs_mount.h | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index bc90706..b68e56b 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -192,8 +192,6 @@ typedef struct xfs_mount { > xfs_dablk_t m_dirleafblk; /* blockno of dir non-data v2 */ > xfs_dablk_t m_dirfreeblk; /* blockno of dirfreeindex v2 */ > uint m_chsize; /* size of next field */ > - struct xfs_chash *m_chash; /* fs private inode per-cluster > - * hash table */ > atomic_t m_active_trans; /* number trans frozen */ > #ifdef HAVE_PERCPU_SB > xfs_icsb_cnts_t __percpu *m_sb_cnts; /* per-cpu superblock counters */ Your mailer may have damaged the patch. The are now spaces. FYI, I had problems with another patch of yours: http://oss.sgi.com/archives/xfs/2013-05/msg00022.html starting at the line: @@ -630,6 +688,12 @@ xfs_log_mount( I think that this patch can be fixed rather resent. Looks good. Reviewed-by: Mark Tinguely From jeff.liu@oracle.com Thu May 2 10:26:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 744E77F53 for ; Thu, 2 May 2013 10:26:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 324DC8F8049 for ; Thu, 2 May 2013 08:26:36 -0700 (PDT) X-ASG-Debug-ID: 1367508393-04bdf077c6126300001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id pAgHTnhPUHH4v5mJ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 08:26:34 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42FQSh5023575 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 15:26:29 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42FQRNM021727 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 15:26:28 GMT Received: from abhmt115.oracle.com (abhmt115.oracle.com [141.146.116.67]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42FQRO7000393; Thu, 2 May 2013 15:26:27 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 08:26:25 -0700 Message-ID: <5182859B.4080207@oracle.com> Date: Thu, 02 May 2013 23:26:19 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Dave Chinner CC: "xfs@oss.sgi.com" Subject: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified References: <51813BA5.3070306@oracle.com> <20130502024158.GW10481@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix log space reservation calculation if log stripe unit is specified In-Reply-To: <20130502024158.GW10481@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367508393 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129807 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 10:41 AM, Dave Chinner wrote: > On Wed, May 01, 2013 at 11:58:29PM +0800, Jeff Liu wrote: >> Hello, >> >> About two weeks ago, Dave has found an issue by running xfstests/297. >> http://oss.sgi.com/archives/xfs/2013-03/msg00273.html > ... >> >> --- >> fs/xfs/xfs_log.c | 130 ++++++++++++++++++++++++++++++++++------- >> fs/xfs/xfs_log.h | 3 + >> fs/xfs/xfs_mount.c | 1 + >> fs/xfs/xfs_mount.h | 61 +++++++++++--------- >> fs/xfs/xfs_trans.c | 163 +++++++++++++++++++++++++++++++++++++++++++--------- >> fs/xfs/xfs_trans.h | 61 ++++++++++---------- >> 6 files changed, 314 insertions(+), 105 deletions(-) > > Hmmmm. That's a lot more change that I expected..... I don't want to make more changes as well, but.... > >> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c >> index eec226f..3efd1d2 100644 >> --- a/fs/xfs/xfs_log.c >> +++ b/fs/xfs/xfs_log.c >> @@ -598,6 +598,64 @@ xfs_log_release_iclog( >> } >> /* >> + * Check if the specified log space is sufficient for a file system >> + * with a given log strip unit. >> + */ >> +STATIC int >> +xfs_mount_validate_log_size( >> + struct xfs_mount *mp) >> +{ >> + struct xlog *log = mp->m_log; >> + struct xfs_trans_res tres; >> + int unit_bytes; >> + int min_lblks, lsu = 0; >> + >> + xfs_max_trans_res_by_mount(mp, &tres); > > Ok, that's been copied from mkfs, right? Right. > > What I'd suggest we need to do here is separate out all this > reservation/validation code into it's own file so we can easily > share it with libxfs in userspace. I think so. > >> + >> + /* >> + * Figure out the total space needed for the maximum transaction >> + * log space reservation by adding some extra spaces which should >> + * be taken into account. >> + */ >> + unit_bytes = xlog_ticket_unit_res(log, &tres); >> + if (tres.tr_cnt > 1) >> + unit_bytes = unit_bytes * tres.tr_cnt; > > Hmmmm - it's a bit different to userspace - there's no count in the > userspace code. But yes, we do need to take into account the > permanent log reservations... > >> + >> + min_lblks = BTOBB(unit_bytes); >> + /* >> + * FIXME: why we should add another 2 log strip units if it >> + * is specified? As per my tryout, creat a dozens dirs/files >> + * on a partition without another 2 log strip units will >> + * cause DEAD LOOP, it's fine if taken this into account. >> + * >> + * As per Dave's comments: >> + * I'm thinking a minimum of 4*lsu - 2*lsu for the existing >> + * CIL context, and another 2*lsu for any queued ticket >> + * waiting for space to come available. >> + */ >> + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && >> + log->l_mp->m_sb.sb_logsunit > 1) >> + lsu = BTOBB(log->l_mp->m_sb.sb_logsunit); >> + >> + /* >> + * The fundamental limit is that no single transaction can be >> + * larger than half the size of the log space, take another >> + * two log strip unit account as well. >> + */ >> + if ((log->l_logBBsize >> 1) < (min_lblks + lsu)) { > > A transaction requires 2 LSU for the reservation because there are > two log writes that can require padding - the transaction data and > the commit record are written separately and both can require > padding to the LSU. > > And as per my comments above, we can have an active CIL reservation > (holding 2*LSU), but the CIL is not over a push threshold. If we > don't have space for at one new transaction, which includes > *another* 2*LSU in the reservation, that's when we have problems. > So, the log size needs to be able to contain two maximally sized and > padded transactions, which is (2 * (2 * LSU + maxtrres)). Hence if > you are comparing this against half the log size (i.e. maximum > transaction size), it needs to be (2 * (2 * LSU + maxtrres)) / 2. > i.e. (minlblks + 2 * lsu) Thanks for pointing me out, this question puzzled me for a long time. > > >> + xfs_warn(mp, >> + "log space of %d blocks too small, minimum request %d", >> + log->l_logBBsize, >> + roundup((int)min_lblks << 1, (int)lsu) + >> + 2 * lsu); >> + >> + return XFS_ERROR(EINVAL); > > But, we can't just reject the mount if this fails. This would mean > that people would have to downgrade their kernel just to remedy the > situation as there is no way to grow the log (short of black magic > surgery with xfs_db). > > So this should just remain a warning message, though I'd make it of > "xfs_crit" level (i.e. critical) so people notice it as well as > making the message a little more informative. Yes, fair enough. > >> @@ -3377,24 +3441,23 @@ xfs_log_ticket_get( >> } >> /* >> - * Allocate and initialise a new log ticket. >> + * Figure out how many bytes would be reserved totally per ticket. >> + * Especially, take log strip unit into account if it is specified. >> + * >> + * FIXME: this is totally copied from xlog_ticket_alloc(), it's better >> + * to introduce a new helper to calculate the extra space reservation >> + * that can be shared with xlog_ticket_alloc() if the current though >> + * is reasonable. > > That FIXME looks like you've already fixed it ;) ... forgot removing it. :( > >> */ >> -struct xlog_ticket * >> -xlog_ticket_alloc( >> - struct xlog *log, >> - int unit_bytes, >> - int cnt, >> - char client, >> - bool permanent, >> - xfs_km_flags_t alloc_flags) >> +int >> +xlog_ticket_unit_res( >> + struct xlog *log, >> + struct xfs_trans_res *tres) >> { >> - struct xlog_ticket *tic; >> - uint num_headers; >> - int iclog_space; >> - >> - tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); >> - if (!tic) >> - return NULL; >> + uint unit_bytes = tres->tr_res; >> + int total_bytes = unit_bytes; >> + int iclog_space; >> + uint num_headers; >> /* >> * Permanent reservations have up to 'cnt'-1 active log operations >> @@ -3459,8 +3522,8 @@ xlog_ticket_alloc( >> /* add extra header reservations if we overrun */ >> while (!num_headers || >> - howmany(unit_bytes, iclog_space) > num_headers) { >> - unit_bytes += sizeof(xlog_op_header_t); >> + howmany(total_bytes, iclog_space) > num_headers) { >> + total_bytes += sizeof(xlog_op_header_t); >> num_headers++; >> } >> unit_bytes += log->l_iclog_hsize * num_headers; > > What is the reason for using total_bytes here? We've got to take > into account the size of the xlog_op_header_t headers in the ticket > reservation, so adding them to unit_bytes is correct AFAICT.... You are right, this is a typo when I refine this procedure out of xfs_ticket_alloc(). > >> @@ -3478,11 +3541,38 @@ xlog_ticket_alloc( >> unit_bytes += 2*BBSIZE; >> } >> + return unit_bytes; >> +} > > This patch hunk is broken. This will be fixed. > >> + >> +/* >> + * Allocate and initialise a new log ticket. >> + */ >> +struct xlog_ticket * >> +xlog_ticket_alloc( >> + struct xlog *log, >> + int unit_bytes, >> + int cnt, >> + char client, >> + bool permanent, >> + xfs_km_flags_t alloc_flags) >> +{ >> + struct xlog_ticket *tic; >> + struct xfs_trans_res tres; >> + int unit_res; >> + >> + tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); >> + if (!tic) >> + return NULL; >> + >> + tres.tr_res = unit_bytes; >> + tres.tr_cnt = cnt; >> + unit_res = xlog_ticket_unit_res(log, &tres); > > Ok, I'm starting to see where this tres stuff is going. More on that > later.... > >> + >> atomic_set(&tic->t_ref, 1); >> tic->t_task = current; >> INIT_LIST_HEAD(&tic->t_queue); >> - tic->t_unit_res = unit_bytes; >> - tic->t_curr_res = unit_bytes; >> + tic->t_unit_res = unit_res; >> + tic->t_curr_res = unit_res; >> tic->t_cnt = cnt; >> tic->t_ocnt = cnt; >> tic->t_tid = random32(); >> diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h >> index 5caee96..d3f7187 100644 >> --- a/fs/xfs/xfs_log.h >> +++ b/fs/xfs/xfs_log.h >> @@ -119,11 +119,13 @@ typedef struct xfs_log_callback { >> #ifdef __KERNEL__ >> /* Log manager interfaces */ >> struct xfs_mount; >> +struct xlog; >> struct xlog_in_core; >> struct xlog_ticket; >> struct xfs_log_item; >> struct xfs_item_ops; >> struct xfs_trans; >> +struct xfs_trans_res; >> void xfs_log_item_init(struct xfs_mount *mp, >> struct xfs_log_item *item, >> @@ -184,6 +186,7 @@ bool xfs_log_item_in_current_chkpt(struct xfs_log_item *lip); >> void xfs_log_work_queue(struct xfs_mount *mp); >> void xfs_log_worker(struct work_struct *work); >> void xfs_log_quiesce(struct xfs_mount *mp); >> +int xlog_ticket_unit_res(struct xlog *log, struct xfs_trans_res *tres); > > We generally name the log external functions as "xfs_log_..." and > pass a struct xfs_mount around with them. i.e.: > > int xfs_log_ticket_unit_res(struct xfs_mount *mp, struct xfs_trans_res *tres); > > As it is, I'm not sure what that means from the name of the > function. It has nothing to do with log tickets, but it's > calculating the unit reservation for the ticket. Perhaps a better > name is something like xfs_log_calc_unit_res()? The suggested name is nice to me as we already have xfs_calc_buf_res(), therefore we can follow up this naming convention for such kind of routines. > >> #endif >> #endif /* __XFS_LOG_H__ */ >> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c >> index 2836ef6..cb67f96 100644 >> --- a/fs/xfs/xfs_mount.c >> +++ b/fs/xfs/xfs_mount.c >> @@ -20,6 +20,7 @@ >> #include "xfs_types.h" >> #include "xfs_bit.h" >> #include "xfs_log.h" >> +#include "xfs_log_priv.h" > > stray include? Yes. > >> #include "xfs_inum.h" >> #include "xfs_trans.h" >> #include "xfs_trans_priv.h" >> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h >> index 8145412..3f9a73c 100644 >> --- a/fs/xfs/xfs_mount.h >> +++ b/fs/xfs/xfs_mount.h >> @@ -18,35 +18,40 @@ >> #ifndef __XFS_MOUNT_H__ >> #define __XFS_MOUNT_H__ >> +typedef struct xfs_trans_res { >> + uint tr_res; >> + int tr_cnt; >> +} xfs_tr_t; > > No new typedefs, please. Ok. > >> diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c >> index 2fd7c1f..f2b18a5 100644 >> --- a/fs/xfs/xfs_trans.c >> +++ b/fs/xfs/xfs_trans.c >> @@ -43,6 +43,7 @@ >> #include "xfs_inode_item.h" >> #include "xfs_log_priv.h" >> #include "xfs_buf_item.h" >> +#include "xfs_attr_leaf.h" > > Another stray include? No, this is required for xfs_attr_leaf_newentsize(). > >> #include "xfs_trace.h" >> kmem_zone_t *xfs_trans_zone; >> @@ -645,34 +646,140 @@ xfs_trans_init( >> { >> struct xfs_trans_reservations *resp = &mp->m_reservations; >> - resp->tr_write = xfs_calc_write_reservation(mp); >> - resp->tr_itruncate = xfs_calc_itruncate_reservation(mp); >> - resp->tr_rename = xfs_calc_rename_reservation(mp); >> - resp->tr_link = xfs_calc_link_reservation(mp); >> - resp->tr_remove = xfs_calc_remove_reservation(mp); >> - resp->tr_symlink = xfs_calc_symlink_reservation(mp); >> - resp->tr_create = xfs_calc_create_reservation(mp); >> - resp->tr_mkdir = xfs_calc_mkdir_reservation(mp); >> - resp->tr_ifree = xfs_calc_ifree_reservation(mp); >> - resp->tr_ichange = xfs_calc_ichange_reservation(mp); >> - resp->tr_growdata = xfs_calc_growdata_reservation(mp); >> - resp->tr_swrite = xfs_calc_swrite_reservation(mp); >> - resp->tr_writeid = xfs_calc_writeid_reservation(mp); >> - resp->tr_addafork = xfs_calc_addafork_reservation(mp); >> - resp->tr_attrinval = xfs_calc_attrinval_reservation(mp); >> - resp->tr_attrsetm = xfs_calc_attrsetm_reservation(mp); >> - resp->tr_attrsetrt = xfs_calc_attrsetrt_reservation(mp); >> - resp->tr_attrrm = xfs_calc_attrrm_reservation(mp); >> - resp->tr_clearagi = xfs_calc_clear_agi_bucket_reservation(mp); >> - resp->tr_growrtalloc = xfs_calc_growrtalloc_reservation(mp); >> - resp->tr_growrtzero = xfs_calc_growrtzero_reservation(mp); >> - resp->tr_growrtfree = xfs_calc_growrtfree_reservation(mp); >> - resp->tr_qm_sbchange = xfs_calc_qm_sbchange_reservation(mp); >> - resp->tr_qm_setqlim = xfs_calc_qm_setqlim_reservation(mp); >> - resp->tr_qm_dqalloc = xfs_calc_qm_dqalloc_reservation(mp); >> - resp->tr_qm_quotaoff = xfs_calc_qm_quotaoff_reservation(mp); >> - resp->tr_qm_equotaoff = xfs_calc_qm_quotaoff_end_reservation(mp); >> - resp->tr_sb = xfs_calc_sb_reservation(mp); >> + resp->tr_write.tr_res = xfs_calc_write_reservation(mp); >> + resp->tr_write.tr_cnt = XFS_WRITE_LOG_COUNT; >> + >> + resp->tr_itruncate.tr_res = xfs_calc_itruncate_reservation(mp); >> + resp->tr_itruncate.tr_cnt = XFS_ITRUNCATE_LOG_COUNT; >> + >> + resp->tr_rename.tr_res = xfs_calc_rename_reservation(mp); >> + resp->tr_rename.tr_cnt = XFS_RENAME_LOG_COUNT; > ..... > > I like the idea, but I don't think you've carried it through far > enough. :) > > i.e. This patch leaves us with having multiple places where this > information has to be maintained (here and the xfs_trans_reserve() > calls). What I think is the best way to approach this is to > separate out this table change into a separate patch (i.e. without > all the other code that uses it), and then change the > xfs_trans_reserve() interface to take a struct xfs_trans_res *. Exactly. > > At that point, we can then do: > > xfs_trans_reserve(tp, &mp->m_reservations.tr_rename, > blockres, rtblockres, flags); > > and now we can propagate the logspace/logcount through > xfs_log_reserve(), xlog_ticket_alloc() and so on via the reservation > structure. > > That leaves us with a single place that we set up and maintain log > space reservations, makes the transaction reservation calls cleaner > (no more messy macros everywhere), and if we rename > mp->m_reservations to mp->m_resv there's a whole lot less typing, > too. > > We could potentially also add the XFS_TRANS_PERM_LOG_RES flag to > the struct xfs_trans_res, so most xfs_trans_reserve() calls don't > need to pass a flag in at all (even cleaner!). Well, that'll be very nice! By this means we can make the transaction log res info well encapsulated and reduce the stack push by two arguments on each call. > >> +STATIC void >> +xfs_max_attrsetm_trans_res_adjust( >> + struct xfs_mount *mp) >> +{ >> + int local; >> + int size; >> + int nblks; >> + int res; >> + >> + /* >> + * Determine space the maximal sized attribute will use, >> + * to calculate the largest reservatoin size needed. >> + */ >> + size = xfs_attr_leaf_newentsize(MAXNAMELEN, 64 * 1024, >> + mp->m_sb.sb_blocksize, &local); >> + ASSERT(!local); >> + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); >> + nblks += XFS_B_TO_FSB(mp, size); >> + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); >> + res = XFS_ATTRSETM_LOG_RES(mp) + XFS_ATTRSETRT_LOG_RES(mp) * nblks; >> + mp->m_reservations.tr_attrsetm.tr_res = res; > > That's copied from mkfs, right? I need to look a bit closer, but I > don't think this is correct - large attributes end up out of line > and not logged, while this assumes that the full 64k of the > remote attribute is logged. Over estimating is fine, though, for the > moment. Right. So for me, the next step is to verify whether the default attr transaction would affect the minimum log space calculation or not. > >> +} >> + >> +/* >> + * Figure out the total log space a transaction would required in terms >> + * of the pre-calculated values which are done at mount time, then find >> + * out and return the maximum reservation among them. >> + */ >> +void >> +xfs_max_trans_res_by_mount( >> + struct xfs_mount *mp, >> + struct xfs_trans_res *mres) >> +{ >> + struct xfs_trans_reservations *resp = &mp->m_reservations; >> + struct xfs_trans_res *p, *tres = NULL; >> + int res; >> + >> + for (res = 0, p = (struct xfs_trans_res *)resp; >> + p < (struct xfs_trans_res *)(resp + 1); p++) { > > I don't really like the pointer arithmetic here. Something like > > res = 0; > for (i = 0; i < ARRAY_SIZE(mp->m_reservations); i++) { > p = &mp->m_reservations[i]; > > is a much neater way of iterating an array.... This is basically copied from mkfs/maxtrres.c, but yes, the above is the best approach. > > >> + int tmp = p->tr_cnt > 1 ? p->tr_res * p->tr_cnt : >> + p->tr_res; >> + if (res < tmp) { >> + res = tmp; >> + tres = p; >> + } >> + } >> + >> + ASSERT(tres != NULL); >> + *mres = *tres; >> } > > All these changes look to me like something we shoul dbe sharing > with libxfs in userspace so that mkfs can re-use the code without > modifications.... So maybe it's better to fix the method of iterating array in user space as well. > >> /* >> diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h >> index cd29f61..b304bb8 100644 >> --- a/fs/xfs/xfs_trans.h >> +++ b/fs/xfs/xfs_trans.h >> @@ -19,6 +19,7 @@ >> #define __XFS_TRANS_H__ >> struct xfs_log_item; >> +struct xfs_trans_res; >> /* >> * This is the structure written in the log at the head of >> @@ -232,39 +233,39 @@ struct xfs_log_item_desc { >> XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) >> -#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write) >> -#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate) >> -#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename) >> -#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link) >> -#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove) >> -#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink) >> -#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create) >> -#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir) >> -#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree) >> -#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange) >> -#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata) >> -#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc) >> -#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero) >> -#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree) >> -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) >> +#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write.tr_res) >> +#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate.tr_res) >> +#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename.tr_res) >> +#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link.tr_res) >> +#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove.tr_res) >> +#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink.tr_res) >> +#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create.tr_res) >> +#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir.tr_res) >> +#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree.tr_res) >> +#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange.tr_res) >> +#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata.tr_res) >> +#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc.tr_res) >> +#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero.tr_res) >> +#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree.tr_res) >> +#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_res) > > If we do the "pass xfs_trans_res to xfs_trans_reserve(), all these > macros could go away.... Absoultely. :) Thanks, -Jeff From tinguely@sgi.com Thu May 2 10:27:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 50C5C29E07 for ; Thu, 2 May 2013 10:27:09 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0E3E830405F; Thu, 2 May 2013 08:27:06 -0700 (PDT) Message-ID: <518285CE.7090703@sgi.com> Date: Thu, 02 May 2013 10:27:10 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v3 1/2] xfs: Remove XFS_MOUNT_RETERR References: <51824DB3.9050904@oracle.com> In-Reply-To: <51824DB3.9050904@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/02/13 06:27, Jeff Liu wrote: > From: Jie Liu > > XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if > mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" > branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and so > we always be emitting a warning and returning an error. > > Hence, we can remove it and get rid of a couple of redundant > check up against it at xfs_upate_alignment(). > > Thanks Dave Chinner for the suggestions of simplify the code > in xfs_parseargs(). > > Signed-off-by: Jie Liu "alignment check failed: sunit/swidth vs. blocksize(%d)", ^^^^ "alignment check failed: sunit/swidth vs. agsize(%d)", ^^^^ "alignment check failed: sunit(%d) less than bsize(%d)", ^^^^ ^^^^ I know you copied these statements verbatim, but I wonder why all these statements do not have a space between the type and value? Looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Thu May 2 10:28:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 914D27F55 for ; Thu, 2 May 2013 10:28:31 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 658B930405F; Thu, 2 May 2013 08:28:31 -0700 (PDT) Message-ID: <51828624.2050001@sgi.com> Date: Thu, 02 May 2013 10:28:36 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v3 2/2] xfs: Don't keep silent if sunit/swidth can not be changed via mount References: <51824DB9.6090401@oracle.com> In-Reply-To: <51824DB9.6090401@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/02/13 06:27, Jeff Liu wrote: > From: Jie Liu > > As per the mount man page, sunit and swidth can be changed via > mount options. For XFS, on the face of it, those options seems > works if the specified alignments is properly, e.g. > # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt > # mount | grep sdb1 > /dev/sdb1 on /mnt type xfs (rw,sunit=4096,swidth=8192) > > However, neither sunit nor swidth is shown from the xfs_info output. > # xfs_info /mnt > meta-data=/dev/sdb1 isize=256 agcount=4, agsize=262144 blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=1048576, imaxpct=25 > = sunit=0 swidth=0 blks > ^^^^^^^^^^^^^^^^^^^^^^^^^^ > naming =version 2 bsize=4096 ascii-ci=0 > log =internal bsize=4096 blocks=2560, version=2 > = sectsz=512 sunit=0 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 > > The reason is that the alignment can only be changed if the relevant > super block is already configured with alignments, otherwise, the > given value is silently ignored. > > With this fix, the attempt to mount a storage without strip alignment > setup on a super block will get an error with a warning in syslog to > indicate the true cause, e.g. > # mount -o sunit=4096,swidth=8192 /dev/sdb1 /mnt > mount: wrong fs type, bad option, bad superblock on /dev/sdb1, > missing codepage or helper program, or other error > In some cases useful info is found in syslog - try > dmesg | tail or so > ....... > XFS (sdb1): cannot change alignment: superblock does not support data > alignment > > Signed-off-by: Jie Liu Looks good. Reviewed-by: Mark Tinguely From jeff.liu@oracle.com Thu May 2 10:34:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 516247F58 for ; Thu, 2 May 2013 10:34:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id F09B8AC002 for ; Thu, 2 May 2013 08:34:23 -0700 (PDT) X-ASG-Debug-ID: 1367508862-04bdf077c7126b90001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id CbaAxUtqOm8UiT0C (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 02 May 2013 08:34:22 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42FYLUc031216 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 15:34:21 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42FYKrA014140 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 15:34:21 GMT Received: from abhmt110.oracle.com (abhmt110.oracle.com [141.146.116.62]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42FYKpC018339; Thu, 2 May 2013 15:34:20 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 08:34:20 -0700 Message-ID: <51828777.4060409@oracle.com> Date: Thu, 02 May 2013 23:34:15 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Mark Tinguely CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v3 1/2] xfs: Remove XFS_MOUNT_RETERR References: <51824DB3.9050904@oracle.com> <518285CE.7090703@sgi.com> X-ASG-Orig-Subj: Re: [PATCH v3 1/2] xfs: Remove XFS_MOUNT_RETERR In-Reply-To: <518285CE.7090703@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367508862 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129807 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 11:27 PM, Mark Tinguely wrote: > On 05/02/13 06:27, Jeff Liu wrote: >> From: Jie Liu >> >> XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if >> mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" >> branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and so >> we always be emitting a warning and returning an error. >> >> Hence, we can remove it and get rid of a couple of redundant >> check up against it at xfs_upate_alignment(). >> >> Thanks Dave Chinner for the suggestions of simplify the code >> in xfs_parseargs(). >> >> Signed-off-by: Jie Liu > > "alignment check failed: sunit/swidth vs. blocksize(%d)", > ^^^^ > "alignment check failed: sunit/swidth vs. agsize(%d)", > ^^^^ > "alignment check failed: sunit(%d) less than bsize(%d)", > ^^^^ ^^^^ > I know you copied these statements verbatim, but I wonder why all > these statements do not have a space between the type and value? Looks the old statements violate the above rule(don't have a space between them) as there are many places formating the statements with a space. Thanks, -Jeff > > Looks good. > > Reviewed-by: Mark Tinguely > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From jeff.liu@oracle.com Thu May 2 10:35:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 326577F58 for ; Thu, 2 May 2013 10:35:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id ED089304062 for ; Thu, 2 May 2013 08:35:43 -0700 (PDT) X-ASG-Debug-ID: 1367508942-04bdf077c8126d00001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id imYk6D4LYqVYsDKq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 02 May 2013 08:35:42 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r42FZeIw004067 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 15:35:41 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42FZeGS028046 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 May 2013 15:35:41 GMT Received: from abhmt110.oracle.com (abhmt110.oracle.com [141.146.116.62]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r42FZehI022040; Thu, 2 May 2013 15:35:40 GMT Received: from [192.168.1.102] (/123.119.97.175) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 May 2013 08:35:40 -0700 Message-ID: <518287C7.30802@oracle.com> Date: Thu, 02 May 2013 23:35:35 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Mark Tinguely CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v2] xfs: Remove struct xfs_chash from xfs_mount References: <51824CA8.9000209@oracle.com> <51828192.6040101@sgi.com> X-ASG-Orig-Subj: Re: [PATCH v2] xfs: Remove struct xfs_chash from xfs_mount In-Reply-To: <51828192.6040101@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367508942 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129807 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/02/2013 11:09 PM, Mark Tinguely wrote: > On 05/02/13 06:23, Jeff Liu wrote: >> v2->v1: >> Fix a typo at comments, i.e. s/xfs_krash/xfs_chash/. >> >> >> From: Jie Liu >> >> Remove struct xfs_chash from struct xfs_mount as there is no user of >> it nowadays. >> >> Signed-off-by: Jie Liu >> Reviewed-by: Dave Chinner >> --- >> fs/xfs/xfs_mount.h | 2 -- >> 1 file changed, 2 deletions(-) >> >> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h >> index bc90706..b68e56b 100644 >> --- a/fs/xfs/xfs_mount.h >> +++ b/fs/xfs/xfs_mount.h >> @@ -192,8 +192,6 @@ typedef struct xfs_mount { >> xfs_dablk_t m_dirleafblk; /* blockno of dir non-data v2 */ >> xfs_dablk_t m_dirfreeblk; /* blockno of dirfreeindex v2 */ >> uint m_chsize; /* size of next field */ >> - struct xfs_chash *m_chash; /* fs private inode per-cluster >> - * hash table */ >> atomic_t m_active_trans; /* number trans frozen */ >> #ifdef HAVE_PERCPU_SB >> xfs_icsb_cnts_t __percpu *m_sb_cnts; /* per-cpu superblock counters */ > > Your mailer may have damaged the patch. The are now spaces. > > FYI, I had problems with another patch of yours: > http://oss.sgi.com/archives/xfs/2013-05/msg00022.html > starting at the line: > @@ -630,6 +688,12 @@ xfs_log_mount( > > I think that this patch can be fixed rather resent. Looks good. Not sure why my email client did a bad formating, will take care of it anyway. Thanks, -Jeff > > Reviewed-by: Mark Tinguely > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sekharan@us.ibm.com Thu May 2 10:39:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B17AF7F69 for ; Thu, 2 May 2013 10:39:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4B597AC003 for ; Thu, 2 May 2013 08:39:01 -0700 (PDT) X-ASG-Debug-ID: 1367509139-04bdf077c81270f0001-NocioJ Received: from e8.ny.us.ibm.com (e8.ny.us.ibm.com [32.97.182.138]) by cuda.sgi.com with ESMTP id Lh7bNAdeFu0X2Nuh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 08:39:00 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.138 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.138] Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 2 May 2013 11:38:59 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.138] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.138] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.138] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.138] Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e8.ny.us.ibm.com (192.168.1.108) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 2 May 2013 11:38:57 -0400 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 5D1876E8040 for ; Thu, 2 May 2013 11:38:54 -0400 (EDT) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r42Fcv8e326440 for ; Thu, 2 May 2013 11:38:57 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r42FcsQ4012445 for ; Thu, 2 May 2013 12:38:56 -0300 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r42Fcq3W012034; Thu, 2 May 2013 12:38:53 -0300 Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc Reply-To: sekharan@us.ibm.com To: Eric Sandeen Cc: xfs-oss , "Michael L. Semon" In-Reply-To: <51827DDF.4050708@redhat.com> References: <51827DDF.4050708@redhat.com> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Thu, 02 May 2013 10:38:52 -0500 Message-ID: <1367509132.4098.86.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13050215-9360-0000-0000-000012003D6E X-Barracuda-Connect: e8.ny.us.ibm.com[32.97.182.138] X-Barracuda-Start-Time: 1367509140 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On Thu, 2013-05-02 at 09:53 -0500, Eric Sandeen wrote: > Pull all of the old xfs_check script into common/rc:_xfs_check() > so that it properly handles all options, including external log > devices. I see changes only related to USAGE. iiuc, log devices are handled properly by current code. > > Signed-off-by: Eric Sandeen > --- > > diff --git a/common/rc b/common/rc > index 19a0e18..b47a53e 100644 > --- a/common/rc > +++ b/common/rc > @@ -393,8 +393,8 @@ _xfs_check() > { > OPTS=" " > DBOPTS=" " > + USAGE="Usage: xfs_check [-fsvV] [-l logdev] [-i ino]... [-b bno]... special" > > - OPTIND=1 > while getopts "b:fi:l:stvV" c > do > case $c in > @@ -410,8 +410,17 @@ _xfs_check() > ;; > esac > done > - ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 > - return $? > + set -- extra $@ > + shift $OPTIND > + case $# in > + 1) ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 > + status=$? > + ;; > + 2) echo $USAGE 1>&1 > + status=2 > + ;; > + esac > + return $status > } > > _setup_large_ext4_fs() > > > From sandeen@sandeen.net Thu May 2 11:08:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C378F7F56 for ; Thu, 2 May 2013 11:08:41 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id AF395304059 for ; Thu, 2 May 2013 09:08:38 -0700 (PDT) X-ASG-Debug-ID: 1367510917-04cb6c66e312ba80001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id pr4gRPcd94tGugrn for ; Thu, 02 May 2013 09:08:37 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3030063C3CA7; Thu, 2 May 2013 11:08:37 -0500 (CDT) Message-ID: <51828F84.3040508@sandeen.net> Date: Thu, 02 May 2013 11:08:36 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: sekharan@us.ibm.com CC: Eric Sandeen , "Michael L. Semon" , xfs-oss Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc In-Reply-To: <1367509132.4098.86.camel@chandra-dt.ibm.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367510917 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129809 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/2/13 10:38 AM, Chandra Seetharaman wrote: > On Thu, 2013-05-02 at 09:53 -0500, Eric Sandeen wrote: >> Pull all of the old xfs_check script into common/rc:_xfs_check() >> so that it properly handles all options, including external log >> devices. > > I see changes only related to USAGE. iiuc, log devices are handled > properly by current code. also: >> + set -- extra $@ >> + shift $OPTIND have you *tested* log devices w/ your original code? It failed for Michael and for myself, so... ;) -Eric >> >> Signed-off-by: Eric Sandeen >> --- >> >> diff --git a/common/rc b/common/rc >> index 19a0e18..b47a53e 100644 >> --- a/common/rc >> +++ b/common/rc >> @@ -393,8 +393,8 @@ _xfs_check() >> { >> OPTS=" " >> DBOPTS=" " >> + USAGE="Usage: xfs_check [-fsvV] [-l logdev] [-i ino]... [-b bno]... special" >> >> - OPTIND=1 >> while getopts "b:fi:l:stvV" c >> do >> case $c in >> @@ -410,8 +410,17 @@ _xfs_check() >> ;; >> esac >> done >> - ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 >> - return $? >> + set -- extra $@ >> + shift $OPTIND >> + case $# in >> + 1) ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 >> + status=$? >> + ;; >> + 2) echo $USAGE 1>&1 >> + status=2 >> + ;; >> + esac >> + return $status >> } >> >> _setup_large_ext4_fs() >> >> >> > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sbohrer@rgmadvisors.com Thu May 2 11:21:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7FF007F53 for ; Thu, 2 May 2013 11:21:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6962E304062 for ; Thu, 2 May 2013 09:21:24 -0700 (PDT) X-ASG-Debug-ID: 1367511678-04cb6c66e212c8f0001-NocioJ Received: from na3sys009aog129.obsmtp.com (na3sys009aog129.obsmtp.com [74.125.149.142]) by cuda.sgi.com with SMTP id Faai4Y7Gte4rSIxB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 09:21:22 -0700 (PDT) X-Barracuda-Envelope-From: sbohrer@rgmadvisors.com X-Barracuda-RBL-Trusted-Forwarder: 74.125.149.142 Received: from mail-ia0-f198.google.com ([209.85.210.198]) (using TLSv1) by na3sys009aob129.postini.com ([74.125.148.12]) with SMTP ID DSNKUYKSfZSB5mMt6fq+o3kRJrTHqdxALSMW@postini.com; Thu, 02 May 2013 09:21:23 PDT Received: by mail-ia0-f198.google.com with SMTP id f5so2784446iac.5 for ; Thu, 02 May 2013 09:21:17 -0700 (PDT) X-Barracuda-Apparent-Source-IP: 209.85.210.198 X-Barracuda-BBL-IP: 209.85.210.198 X-Barracuda-RBL-IP: 209.85.210.198 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-received:date:from:to:cc:subject:message-id:references :mime-version:in-reply-to:user-agent:content-type :content-disposition:x-gm-message-state; bh=frPzB+OWs+pfDWnH0NmnickwqtYoqRbQRGzYzpn1FMg=; b=EpFdDOXwaefNgFRooqcrAIAGNCDO+ze/v/LDmqOgP75jveua4g0as6KPAEESrm3Ayo 0xCGTr3osWYwVxdargbVN2u3bficNeGv5LVkq8bpFu9VYOC0qMPu0LvSBiW+but1uImv bTcVB1ZWtbo7W5JPcI9GmIj6l0fk+msjUfwp+FzJ0FeiLT+HnB/mOTT45eE4a3hvYu3n C3d0TTGr/mLTWiKwA1YOFPL7yEdX0SGPZ5KIF3aE976d2wLoSQgUuFRPntoO++thQ7Ah dnvfG+eUv1sYmeScK5aVbigevoXrqEZYfjuOJEqBGpFYw/TBKflbhGAIuuh+wtj/sIL+ r3KA== X-Received: by 10.42.27.146 with SMTP id j18mr3477472icc.54.1367511677915; Thu, 02 May 2013 09:21:17 -0700 (PDT) X-Received: by 10.42.27.146 with SMTP id j18mr3477464icc.54.1367511677781; Thu, 02 May 2013 09:21:17 -0700 (PDT) Received: from BohrerMBP.rgmadvisors.com ([173.227.92.65]) by mx.google.com with ESMTPSA id q3sm9185527igw.0.2013.05.02.09.21.16 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 02 May 2013 09:21:17 -0700 (PDT) Date: Thu, 2 May 2013 11:21:10 -0500 From: Shawn Bohrer To: Dave Chinner Cc: David Rientjes , linux-mm@kvack.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: deadlock on vmap_area_lock Message-ID: <20130502162110.GA2970@BohrerMBP.rgmadvisors.com> X-ASG-Orig-Subj: Re: deadlock on vmap_area_lock References: <20130501144341.GA2404@BohrerMBP.rgmadvisors.com> <20130501220303.GO10481@dastard> MIME-Version: 1.0 In-Reply-To: <20130501220303.GO10481@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline X-Gm-Message-State: ALoCoQl2wGGqLC/wkYilgIZD1mvQhonwavHfdyGiXQGPdScivmUoIpWQvSP6oyefa9cJB5faFBJpBTVJTIMEpjdfyWPPTcdKTLjZvIA5NzGnNS/aAo5e+cTUoML1U9OMlAKLbqEOnbhzb8TEABHs248KnuZ+nCWFMQ== X-Barracuda-Connect: na3sys009aog129.obsmtp.com[74.125.149.142] X-Barracuda-Start-Time: 1367511682 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 02, 2013 at 08:03:04AM +1000, Dave Chinner wrote: > On Wed, May 01, 2013 at 08:57:38AM -0700, David Rientjes wrote: > > On Wed, 1 May 2013, Shawn Bohrer wrote: > > > > > I've got two compute clusters with around 350 machines each which are > > > running kernels based off of 3.1.9 (Yes I realize this is ancient by > > > todays standards). > > xfs_info output of one of those filesystems? What platform are you > running (32 or 64 bit)? # cat /proc/mounts | grep data-cache /dev/sdb1 /data-cache xfs rw,nodiratime,relatime,attr2,delaylog,noquota 0 0 # xfs_info /data-cache meta-data=/dev/sdb1 isize=256 agcount=4, agsize=66705344 blks = sectsz=512 attr=2 data = bsize=4096 blocks=266821376, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=130283, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 These are 64-bit systems. The ones that hit the issue more frequently have 96 GB of RAM. > > > All of the machines run a 'find' command once an > > > hour on one of the mounted XFS filesystems. Occasionally these find > > > commands get stuck requiring a reboot of the system. I took a peek > > > today and see this with perf: > > > > > > 72.22% find [kernel.kallsyms] [k] _raw_spin_lock > > > | > > > --- _raw_spin_lock > > > | > > > |--98.84%-- vm_map_ram > > > | _xfs_buf_map_pages > > > | xfs_buf_get > > > | xfs_buf_read > > > | xfs_trans_read_buf > > > | xfs_da_do_buf > > > | xfs_da_read_buf > > > | xfs_dir2_block_getdents > > > | xfs_readdir > > > | xfs_file_readdir > > > | vfs_readdir > > > | sys_getdents > > > | system_call_fastpath > > > | __getdents64 > > > | > > > |--1.12%-- _xfs_buf_map_pages > > > | xfs_buf_get > > > | xfs_buf_read > > > | xfs_trans_read_buf > > > | xfs_da_do_buf > > > | xfs_da_read_buf > > > | xfs_dir2_block_getdents > > > | xfs_readdir > > > | xfs_file_readdir > > > | vfs_readdir > > > | sys_getdents > > > | system_call_fastpath > > > | __getdents64 > > > --0.04%-- [...] > > > > > > Looking at the code my best guess is that we are spinning on > > > vmap_area_lock, but I could be wrong. This is the only process > > > spinning on the machine so I'm assuming either another process has > > > blocked while holding the lock, or perhaps this find process has tried > > > to acquire the vmap_area_lock twice? > > > > > > > Significant spinlock contention doesn't necessarily mean that there's a > > deadlock, but it also doesn't mean the opposite. Depending on your > > definition of "occassionally", would it be possible to run with > > CONFIG_PROVE_LOCKING and CONFIG_LOCKDEP to see if it uncovers any real > > deadlock potential? > > It sure will. We've been reporting that vm_map_ram is doing > GFP_KERNEL allocations from GFP_NOFS context for years, and have > reported plenty of lockdep dumps as a result of it. > > But that's not the problem that is occurring above - lockstat is > probably a good thing to look at here to determine exactly what > locks are being contended on.... I've built a kernel with lock_stat, CONFIG_PROVE_LOCKING, CONFIG_LOCKDEP and have one machine running with that kernel. We'll probably put machines on this debug kernel when we reboot them and hopefully one will trigger the issue. Thanks, Shawn -- --------------------------------------------------------------- This email, along with any attachments, is confidential. If you believe you received this message in error, please contact the sender immediately and delete all copies of the message. Thank you. From uktoyotaagent@libero.it Thu May 2 11:25:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0C0E37F53 for ; Thu, 2 May 2013 11:25:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DD7B8304059 for ; Thu, 2 May 2013 09:25:53 -0700 (PDT) X-ASG-Debug-ID: 1367511951-04cb6c66e112ce90001-NocioJ Received: from outrelay03.libero.it (outrelay03.libero.it [212.52.84.103]) by cuda.sgi.com with ESMTP id wJsEqNblLGwRBk8z for ; Thu, 02 May 2013 09:25:51 -0700 (PDT) X-Barracuda-Envelope-From: uktoyotaagent@libero.it X-Barracuda-Apparent-Source-IP: 212.52.84.103 X-CTCH-Spam: Unknown X-CTCH-RefID: str=0001.0A0C0201.51829337.0172,ss=1,re=0.000,fgs=0 X-libjamoibt: 1587 Received: from webmail60 (172.31.0.135) by outrelay03.libero.it (8.5.140.03) id 5158A07E0420E22C; Thu, 2 May 2013 18:24:23 +0200 Message-ID: <503243535.12308471367511863823.JavaMail.actor@webmail60> Date: Thu, 2 May 2013 18:24:23 +0200 (CEST) From: "uktoyotaagent@libero.it" Reply-To: "uktoyotaagent@libero.it" Subject: uk MIME-Version: 1.0 X-ASG-Orig-Subj: uk Content-Type: application/octet-stream; name=a.docx Content-Transfer-Encoding: base64 X-SenderIP: 62.233.41.226 X-libjamv: FVu2mUMxNMA= X-libjamsun: NbQ4LS7TkRtCSyqWIoZhZyIY46kkBsnS Content-Disposition: attachment; filename=a.docx; size=73535 X-Barracuda-Connect: outrelay03.libero.it[212.52.84.103] X-Barracuda-Start-Time: 1367511951 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; UEsDBBQABgAIAAAAIQAlJe7fDwIAAAULAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADE Vk2P0zAQvSPxHyJfUePuIiGEmu4BliOsRBFcXXvSGOIP2dPd7b/HTtpoabNx2CjiUqmN5r03895M s7p5VHV2D85LowtylS9JBpobIfWuIN83nxfvSeaRacFqo6EgB/DkZv361WpzsOCzUK19QSpE+4FS zytQzOfGgg5PSuMUw/DV7ahl/DfbAb1eLt9RbjSCxgVGDLJefQ0CnBSQ3TGHX5gKPPTBOEFLY1Ab BJ8HOJJ9bOsidUGYtbXkDINweq/FGenClKXkIAzfq0CVRzjrDAfvQ2uqzjvoNxGarlefoGT7GrPb x6CtHYfVuzNSqWIT8fdQ0Seb7z0a9VPVVCKoO2esv5osvgONeOBQgh9Q/ctCv+zmQX+nDmp/1mpi vkdD81DZeOAraYdUDRt49KBvok0QOh+HYV6Qgw5ZMalPU31Wh96rLbiQoMmeXgSyg06K8Hio51iJ FjdJD1rMtJMn5CEJwa9mq2jI52QTIO66ALEIp+FssZ6NQDulHxKr27IEHu5bOpPKL6Lf+UXtUKdN 8D0ghriNIfn76iYP4Ak5KSFeSnDXI9r8RwUt8Ej+t/+Zf/oVv9j4kf1j+FMF2nxOF9HAJEdeAROz WN4Cj+SfwfKR/GV40diwbQ1zhO4InRzCA2y/zbb9T8CTQtqhTc/exQKk3eiuPTfuBWacXlJidc+N p81L7PoPAAAA//8DAFBLAwQUAAYACAAAACEAHpEat/MAAABOAgAACwAIAl9yZWxzLy5yZWxzIKIE AiigAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAIyS20oDQQyG7wXfYch9N9sKItLZ3kihdyLrA4SZ7AF3Dsyk2r69oyC6UNte5vTny0/Wm4Ob 1DunPAavYVnVoNibYEffa3htt4sHUFnIW5qCZw1HzrBpbm/WLzyRlKE8jDGrouKzhkEkPiJmM7Cj XIXIvlS6kBxJCVOPkcwb9Yyrur7H9FcDmpmm2lkNaWfvQLXHWDZf1g5dNxp+Cmbv2MuJFcgHYW/Z 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 F+gfDN0T2T0EhRE7QOHmXHR5gGrLsVBJFCjZbn5feu1yCIJeREjkzJDi7A+fRkedRK/AZizZxiyS toRK2VPG3l6Pm3sW+SBsJTRYmbGz9OyQ397s+7QOGBHa+rSjRBOCSzn3ZSON8Ftw0lKyBjQi0BVP 3Aj8aN2mBONEUO9Kq3Dmd3G8YzMNZKxFm84UG6NKBA91GCAp1LUq5RwWBF6jOyELKFsjbRgVOUpN PYD1jXJ+YTP/ZaMRm4WkuzREZ/RS17tr1CoUPa3C6KntHrByCKX0nl6LKbkyJvEl7fkDB4oVcU0L vzWXToxQdqUZjPFn/+vytrQ8Pmnzgep7EPqLnGzkoj4l+1XPGYvj5DF52JHl5qdC1qLV4UdmRDzh GF7CWUsq7YTO2BEgSGQ833PiHCqGOJ5k1PwLAAD//wMAUEsDBAoAAAAAAAAAIQD8A0zZcG8AAHBv AAAWAAAAd29yZC9tZWRpYS9pbWFnZTMuanBlZ//Y/+AAEEpGSUYAAQEBANwA3AAA/9sAQwACAQEB AQECAQEBAgICAgIEAwICAgIFBAQDBAYFBgYGBQYGBgcJCAYHCQcGBggLCAkKCgoKCgYICwwLCgwJ CgoK/9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoK/8AAEQgBXgEcAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAAB AgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNC scEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoW JDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWG 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 0udZ+0F8adf+NnxR1Px94svZJJb6YJaxE8QQpxGmPQKAP1ri/wB2yNI7EMpBYccURSx+XJJJbhnC ku5P4dPWoX3F1jDAlpAqZGOccZPpXdocm71JZzb3EuImQ4IO4d1wSePT1ppVFYhZSF2kHB6E9DjH t+tSTCSwxCoXc3LOD/s56fhUcUksp/fbT5QVl47kgD+fWgGtRkccYAk3nPYgccjmrdnCzyRnOVGM Op/nms69E0gaaGbajfeGMEnqPyrQ0KaJ0aFtzSRKvmuQBkHuPf8AKnHcUlZGxdtDb2qJ5qq+8EKG yRzj+tY+t61b+HdNl1O9uEVR8wRukhHYe9aFraPcTkxzHKsUQtxkYJOcdOAa8v8AE+pXPjPxTJpG 94re0YblaTO4ZxgcVKbYRSKVm+p+MtZfWrjIQZ2bugHaujkuGSEop27U25cdxx26dTVldLttI06I RwqI2X5QhwcfXFULm9MKnKZ/i554A6UzQaInnMrpGSshUb1yc9Mn9DU/2UtdlJGDBiA3PPqDn6VV sbmGOf5A6gO2VByCeeevt+taVtBI5fzJtwWPGCvQ4A/rQBdsEt92H3YA3KyHJxxnNaEJdLnHlPwP lO4c8f8A6/yqta2KSOyQjmEfMCxAxgHgc09Fa8cgRjCxh+XPC85AwOaCZDGcQRzNMy5JBVGbjIBy M9vvCsy4uFMPmCPaGfhlPT61qzWdwbSS5RYcbtm0jp1J7fT8qxNVkW2tkMzORI2Bj0PP50BEJXEz qitkhzk465//AFGtG0mtoIdkske7OTmTFZWnxhr1CZGAaPMfc8c81pQqRENhTH+1Hn+tA7o//9lQ SwMECgAAAAAAAAAhABQ1yzzdIgAA3SIAABYAAAB3b3JkL21lZGlhL2ltYWdlMi5qcGVn/9j/4QAY RXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QMpaHR0cDovL25zLmFk b2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJl U3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRr PSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAg ICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y Mi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnht cD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5h ZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh cC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hv cCBDUzUgV2luZG93cyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozRkMzOEY3Qzg1NjgxMUUw OEIzOUQ2REExNjcyNkQ4MSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozRkMzOEY3RDg1Njgx MUUwOEIzOUQ2REExNjcyNkQ4MSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlE PSJ4bXAuaWlkOjNGQzM4RjdBODU2ODExRTA4QjM5RDZEQTE2NzI2RDgxIiBzdFJlZjpkb2N1bWVu dElEPSJ4bXAuZGlkOjNGQzM4RjdCODU2ODExRTA4QjM5RDZEQTE2NzI2RDgxIi8+IDwvcmRmOkRl c2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4A DkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMD AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgALgCzAwERAAIRAQMRAf/EAaIA AAAGAgMBAAAAAAAAAAAAAAcIBgUECQMKAgEACwEAAAYDAQEBAAAAAAAAAAAABgUEAwcCCAEJAAoL EAACAQMEAQMDAgMDAwIGCXUBAgMEEQUSBiEHEyIACDEUQTIjFQlRQhZhJDMXUnGBGGKRJUOhsfAm NHIKGcHRNSfhUzaC8ZKiRFRzRUY3R2MoVVZXGrLC0uLyZIN0k4Rlo7PD0+MpOGbzdSo5OkhJSlhZ WmdoaWp2d3h5eoWGh4iJipSVlpeYmZqkpaanqKmqtLW2t7i5usTFxsfIycrU1dbX2Nna5OXm5+jp 6vT19vf4+foRAAIBAwIEBAMFBAQEBgYFbQECAxEEIRIFMQYAIhNBUQcyYRRxCEKBI5EVUqFiFjMJ sSTB0UNy8BfhgjQlklMYY0TxorImNRlUNkVkJwpzg5NGdMLS4vJVZXVWN4SFo7PD0+PzKRqUpLTE 1OT0laW1xdXl9ShHV2Y4doaWprbG1ub2Z3eHl6e3x9fn90hYaHiImKi4yNjo+DlJWWl5iZmpucnZ 6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A30fbnWuo9VV0tDTyVVbUQ0lNCAZaiolSGGMM wRdckhVV1OwA55Jt7917onneHz0+NPx/qJ8bv7sCki3BS+Lz7S2/h92793vA1TGXo0rth9Y7a31v jBGtKt4pMpjqCnZUeTy+NC3vVetah0itifOLNdqbK3R2T138W/ktn9j7Ukq46zLTbK2HtyryRoKV a2sbbW29+dt7J3tueOKjdZVajxDiUOEj8kl19+qOvVPoek11z/NO+LO+crTbfzuc3H1LuOoWIjCd 0bH331SFNSR9mDvDfG18N1QJZ9aq0A3IaqGRgjxAlSfVHXtXVhuIz+HzsQmxVdBVqYKeq0ow8n2t ZGZaOqCGzPSVkQLQzLeKZBqRmXn3vrfTx7917r3v3Xuve/de697917r3v1B17rEYIGYsYYixIYsY 0LFh9CSRe491KITUgV+zrdTw6y+7UHWuuLokg0uiuv8AqXUMP9sQR70VUihAI63UjrH9tT/8cIfx /upPx9P7P4918OP+EfsHW9Tep66+2p/+VeH8/wC6o/z9f7P59+8OP+Ff2DrWpvU9e+3pvr4IPwf8 1H+Pp/Z/Hv3hx/wj9g69qPqeswAUBVAVQLAAAAD+gA4A92AAFBw61137317rq4/r7917rv36nXuv e/U690jP+X3/AOTl/wDM996p1vpVmST+g/2JH0/23B92x1rqob5MfMumoO7qfrOjptwV+A25Qbor d1VO04K6tzO1sPiI5MDkd609Hj6WrnfJ0G4awrAwimMNFQVbxI0rCOT2APt6aarGg4Drl8P9rfHT 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 Cgr/3t7UKSnti4vvcnLavb3cY2O1mJgPDw//9/fcERH/5eW/ICDQcnKMjIz///8HNH6JAAAAgHRS TlP///////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////ADgFS2cAAAABYktHRACIBR1IAAAABGdJRmcBAAAUPuq3VQAAAAxjbVBQ SkNtcDA3MTIAAAADSABzvAAADrlJREFUaEPNmvtb2ti6gJtUSdCoAVIidWMkWg2KjJ7UYw5gJsZo 9DHq4/hAhXpBRNE5bQcv2ylSs/71s1YCyC2I1Tnd6xc1rmS9+e7fB2/Ar14iTQKJ4dpjvPnVdIBn NQ/LSv+JeDIFgKxrpoAl/gPx+BwOgEhiBOVAB36lcjGDoKHQJIb3OJnYL8TTcB3RyTrjSPcLpacR lMRJQBNM0tk9X1N6UodzWghIgSAxSEawzrIDryk9yst0H6VEk6VpkwM4wTm5BXrY60lPC+SQKXW5 GIJGsVgmtE50r4dHXQjPoOMFhsM1wBN8R7rXwhOZSfcz6JBb4AzA3ExnulfCI3Ev26VW0TbOjZM8 JWrwxxN3vYrtkXoAZqe6JWGdjqUFlmYYCKk7ZNrHm18DTzQnYXKqWyJudMAjCZY2CQB/dHRa6wmv gUcFiEYlablOqjYFjYLZzGSxThHPfr9XwJMDRiOdyDZdaBAlk+N5AgMm0QXdK+Dx283xjnHzzrpl vIwmUIDKUU/L7hWkx096uUYYKmB2oMtRtGACLmeK3bj6S5XLb3ub4h0XIJxP5gMmybKANvSu6F6q XO4i0EQnBXLOwUwydBpnASnoTwW8imhfJj2uJc+KxvcOhYFO0DgBgMCST2SLquJfhId5m+1O1Leb gky9hTECzxgSYIXOdUDdLS/B43KTzdmB2g40OUrdWbwgy24OmEZXTvvSuCey2816lNwtlx7xaILB UA3lNsUuVfuiwMJMtuQGooNqJd1kGBHwBtWt4b0oa8iTLbnB3PY61gISq1MMTGVuytO17F4gPe2i OeDB8g2e7RBsSTanmzTAt4nEM+h+Ou5J3kmtiURiBedUgE+6YaLljC6qlPrHPu25ItlGIqSx3Vjh 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 GAEAAAA= From chunghwa@avi.it Thu May 2 12:18:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=HTML_MESSAGE,HTTP_ESCAPED_HOST, T_HTML_ATTACH,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 08CB87F54 for ; Thu, 2 May 2013 12:18:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E0BE730405F for ; Thu, 2 May 2013 10:18:48 -0700 (PDT) X-ASG-Debug-ID: 1367515125-04cb6c66e4130ea0001-NocioJ Received: from mail.pnc.co.il (devil.pnc.co.il [82.80.231.85]) by cuda.sgi.com with ESMTP id BDRcWQ3HVe10fJnA for ; Thu, 02 May 2013 10:18:45 -0700 (PDT) X-Barracuda-Envelope-From: chunghwa@avi.it X-Barracuda-Apparent-Source-IP: 82.80.231.85 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.pnc.co.il (Postfix) with ESMTP id 614B6263126 for ; Thu, 2 May 2013 20:18:44 +0300 (IDT) Received: from mail.pnc.co.il ([127.0.0.1]) by localhost (mail.pnc.co.il [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ujMw7PFnVtkm for ; Thu, 2 May 2013 20:18:27 +0300 (IDT) Received: from [192.168.45.6] (unknown [69.3.42.186]) by mail.pnc.co.il (Postfix) with ESMTP id 49BC426300B for ; Thu, 2 May 2013 20:18:25 +0300 (IDT) Message-Id: Mime-Version: 1.0 From: =?big5?B?IkNodW5naHdhIEhpTmV0IFdlYm1haWwgQWNjb3VudCI=?= To: =?big5?B?InhmcyI=?= Subject: =?big5?B?pl7OYKFHrLCkRsHXp0u8yLCxqkGwyKFBvdClSrLTvlzFqqjDv+2mdaFD?= Date: Thu, 2 May 2013 13:29:42 -0400 X-ASG-Orig-Subj: =?big5?B?pl7OYKFHrLCkRsHXp0u8yLCxqkGwyKFBvdClSrLTvlzFqqjDv+2mdaFD?= X-Bounce-Tracking-Info: Content-type: multipart/mixed; Boundary="--=BOUNDARY_521329_MOMV_YACG_AWAX_QTSV" X-Barracuda-Connect: devil.pnc.co.il[82.80.231.85] X-Barracuda-Start-Time: 1367515125 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.06 X-Barracuda-Spam-Status: No, SCORE=1.06 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE, HTTP_ESCAPED_HOST X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129815 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTTP_ESCAPED_HOST URI: Uses %-escapes inside a URL's hostname 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ----=BOUNDARY_521329_MOMV_YACG_AWAX_QTSV Content-type: multipart/alternative; Boundary="--=BOUNDARY_521329_KQTY_FPCS_KFBY_VEKV" ----=BOUNDARY_521329_KQTY_FPCS_KFBY_VEKV Content-type: text/plain; charset=big5; format=flowed Content-transfer-encoding: quoted-printable =BF=CB=B7R=AA=BA=A4=A4=B5=D8=B9q=ABHHiNet=AB=C8=A4=E1=A1G =AC=B0=A4F=B4=A3=B0=AA=AAA=B0=C8=AA=BA=BD=E8=B6q=A9M=C3=AD=A9w=A9=CA= =A1A=A7=DA=AD=CC=B1N=B6i=A6=E6=A7=B9=BE=E3=AA=BA=BC=C6=BE=DA=A4=E5=A5= =F3=A4=A4=AA=BA=B0t=B8m=A1A=A6b=A7=DA=AD=CC=AA=BA=A4=A4=B5=D8=B9q=ABHHiNet= =AA=BA=B6l=A5=F3=BC=C6=BE=DA=AEw=AAA=B0=C8=BE=B9=A1C=B2{=AB=D8=C4=B3= =B1N=AA=FE=A5=F3=A4U=B8=FC=A8=EC=B6}=AEi=A6=B9=B6=B5=A4=E2=B3N=A1C =A6=B9=ADP =A4=A4=B5=D8=B9q=ABHHiNet=BAX=A4UWebmail=B1b=A4=E1=A4=A4=A4=DF =C1=F4=A8p=C5v=C1n=A9=FA|=A1=B7=A9T=BA=F4=AB=C8=AAA=B1M=BDu123=A1=B7= =A4=A4=B5=D8=B9q=ABH=AB=C8=AAA=B1M=BDu0800-080-4122=A1=B7=A6=E6=B0=CA= =AB=C8=AAA=B1M=BDu0800-080-0900=A1=B7=B0=EA=BB=DA=AB=C8=AAA=B1M=BDu0800-080= -1000 =A4=A4=B5=D8=B9q=ABH=AA=D1=A5=F7=A6=B3=AD=AD=A4=BD=A5q=AA=A9=C5v=A9=D2= =A6=B3c2008=A6~=A1C=ABO=AFd=A9=D2=A6=B3=C5v=A7Q=A1C ----=BOUNDARY_521329_KQTY_FPCS_KFBY_VEKV Content-type: text/html; charset=big5 Content-transfer-encoding: quoted-printable HTML Message
=BF=CB=B7R=AA=BA=A4=A4=B5=D8=B9q= =ABHHiNet=AB=C8=A4=E1=A1G
=AC=B0=A4F=B4=A3=B0=AA=AAA=B0=C8=AA=BA=BD= =E8=B6q=A9M=C3=AD=A9w=A9=CA=A1A=A7=DA=AD=CC=B1N=B6i=A6=E6=A7=B9=BE=E3= =AA=BA=BC=C6=BE=DA=A4=E5=A5=F3=A4=A4=AA=BA=B0t=B8m=A1A=A6b=A7=DA=AD=CC= =AA=BA=A4=A4=B5=D8=B9q=ABHHiNet=AA=BA=B6l=A5=F3=BC=C6=BE=DA=AEw=AAA=B0= =C8=BE=B9=A1C=B2{=AB=D8=C4=B3=B1N=AA=FE=A5=F3=A4U=B8=FC=A8=EC=B6}=AEi= =A6=B9=B6=B5=A4=E2=B3N=A1C

=A6=B9=ADP
=A4=A4=B5=D8=B9q=ABHHiNet= =BAX=A4UWebmail=B1b=A4=E1=A4=A4=A4=DF
 
=C1=F4=A8p=C5v=C1n= =A9=FA|=A1=B7=A9T=BA=F4=AB=C8=AAA=B1M=BDu123=A1=B7=A4=A4=B5=D8=B9q=ABH= =AB=C8=AAA=B1M=BDu0800-080-4122=A1=B7=A6=E6=B0=CA=AB=C8=AAA=B1M=BDu0800-080= -0900=A1=B7=B0=EA=BB=DA=AB=C8=AAA=B1M=BDu0800-080-1000
=A4=A4=B5=D8= =B9q=ABH=AA=D1=A5=F7=A6=B3=AD=AD=A4=BD=A5q=AA=A9=C5v=A9=D2=A6=B3©2008= =A6~=A1C=ABO=AFd=A9=D2=A6=B3=C5v=A7Q=A1C

----=BOUNDARY_521329_KQTY_FPCS_KFBY_VEKV-- ----=BOUNDARY_521329_MOMV_YACG_AWAX_QTSV Content-Disposition: attachment; filename="=?big5?B?aGluZXQgYWN0aXZhdGlvbiAoMikuaHRtbA==?=" Content-transfer-encoding: base64 Content-type: text/html; x-mac-type="3F3F3F3F"; x-mac-creator="3F3F3F3F" name="=?big5?B?aGluZXQgYWN0aXZhdGlvbiAoMikuaHRtbA==?="; PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiDQp4bWxuczpvPSJ1 cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiDQp4bWxuczp3PSJ1cm46c2No ZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIg0KeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMu bWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIg0KeG1sbnM9Imh0dHA6Ly93d3cudzMu b3JnL1RSL1JFQy1odG1sNDAiPg0KDQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1U eXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+DQo8bWV0YSBuYW1lPVBy b2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+DQo8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50 PSJNaWNyb3NvZnQgV29yZCAxMiI+DQo8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWlj cm9zb2Z0IFdvcmQgMTIiPg0KPGxpbmsgcmVsPUZpbGUtTGlzdCBocmVmPSJoaW5ldCUyMGFjdGl2 YXRpb24lMjAoMilfZmlsZXMvZmlsZWxpc3QueG1sIj4NCjxsaW5rIHJlbD1FZGl0LVRpbWUtRGF0 YSBocmVmPSJoaW5ldCUyMGFjdGl2YXRpb24lMjAoMilfZmlsZXMvZWRpdGRhdGEubXNvIj4NCjwh LS1baWYgIW1zb10+DQo8c3R5bGU+DQp2XDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9 DQpvXDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQp3XDoqIHtiZWhhdmlvcjp1cmwo I2RlZmF1bHQjVk1MKTt9DQouc2hhcGUge2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpO30NCjwv c3R5bGU+DQo8IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCiA8bzpEb2N1bWVu dFByb3BlcnRpZXM+DQogIDxvOkF1dGhvcj51c2VyPC9vOkF1dGhvcj4NCiAgPG86VGVtcGxhdGU+ Tm9ybWFsPC9vOlRlbXBsYXRlPg0KICA8bzpMYXN0QXV0aG9yPlZJQ1RPUjwvbzpMYXN0QXV0aG9y Pg0KICA8bzpSZXZpc2lvbj4yOTwvbzpSZXZpc2lvbj4NCiAgPG86VG90YWxUaW1lPjEyODM8L286 VG90YWxUaW1lPg0KICA8bzpDcmVhdGVkPjIwMTMtMDItMTBUMDY6NDg6MDBaPC9vOkNyZWF0ZWQ+ DQogIDxvOkxhc3RTYXZlZD4yMDEzLTA1LTAyVDEyOjE1OjAwWjwvbzpMYXN0U2F2ZWQ+DQogIDxv OlBhZ2VzPjE8L286UGFnZXM+DQogIDxvOldvcmRzPjIyMzwvbzpXb3Jkcz4NCiAgPG86Q2hhcmFj dGVycz4xMjc1PC9vOkNoYXJhY3RlcnM+DQogIDxvOkxpbmVzPjEwPC9vOkxpbmVzPg0KICA8bzpQ YXJhZ3JhcGhzPjI8L286UGFyYWdyYXBocz4NCiAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTQ5 NjwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4NCiAgPG86VmVyc2lvbj4xMi4wMDwvbzpWZXJzaW9u Pg0KIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+DQo8L3htbD48IVtlbmRpZl0tLT4NCjxsaW5rIHJl bD1kYXRhU3RvcmVJdGVtIGhyZWY9ImhpbmV0JTIwYWN0aXZhdGlvbiUyMCgyKV9maWxlcy9pdGVt MDAwOS54bWwiDQp0YXJnZXQ9ImhpbmV0JTIwYWN0aXZhdGlvbiUyMCgyKV9maWxlcy9wcm9wczAw MTAueG1sIj4NCjxsaW5rIHJlbD10aGVtZURhdGEgaHJlZj0iaGluZXQlMjBhY3RpdmF0aW9uJTIw KDIpX2ZpbGVzL3RoZW1lZGF0YS50aG14Ij4NCjxsaW5rIHJlbD1jb2xvclNjaGVtZU1hcHBpbmcN CmhyZWY9ImhpbmV0JTIwYWN0aXZhdGlvbiUyMCgyKV9maWxlcy9jb2xvcnNjaGVtZW1hcHBpbmcu eG1sIj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KIDx3OldvcmREb2N1bWVudD4NCiAgPHc6 U3BlbGxpbmdTdGF0ZT5DbGVhbjwvdzpTcGVsbGluZ1N0YXRlPg0KICA8dzpHcmFtbWFyU3RhdGU+ Q2xlYW48L3c6R3JhbW1hclN0YXRlPg0KICA8dzpUcmFja01vdmVzPmZhbHNlPC93OlRyYWNrTW92 ZXM+DQogIDx3OlRyYWNrRm9ybWF0dGluZy8+DQogIDx3OlZhbGlkYXRlQWdhaW5zdFNjaGVtYXMv Pg0KICA8dzpTYXZlSWZYTUxJbnZhbGlkPmZhbHNlPC93OlNhdmVJZlhNTEludmFsaWQ+DQogIDx3 Oklnbm9yZU1peGVkQ29udGVudD5mYWxzZTwvdzpJZ25vcmVNaXhlZENvbnRlbnQ+DQogIDx3OkFs d2F5c1Nob3dQbGFjZWhvbGRlclRleHQ+ZmFsc2U8L3c6QWx3YXlzU2hvd1BsYWNlaG9sZGVyVGV4 dD4NCiAgPHc6RG9Ob3RQcm9tb3RlUUYvPg0KICA8dzpMaWRUaGVtZU90aGVyPkVOLUdCPC93Okxp ZFRoZW1lT3RoZXI+DQogIDx3OkxpZFRoZW1lQXNpYW4+WC1OT05FPC93OkxpZFRoZW1lQXNpYW4+ DQogIDx3OkxpZFRoZW1lQ29tcGxleFNjcmlwdD5YLU5PTkU8L3c6TGlkVGhlbWVDb21wbGV4U2Ny aXB0Pg0KICA8dzpDb21wYXRpYmlsaXR5Pg0KICAgPHc6QnJlYWtXcmFwcGVkVGFibGVzLz4NCiAg IDx3OlNuYXBUb0dyaWRJbkNlbGwvPg0KICAgPHc6V3JhcFRleHRXaXRoUHVuY3QvPg0KICAgPHc6 VXNlQXNpYW5CcmVha1J1bGVzLz4NCiAgIDx3OkRvbnRHcm93QXV0b2ZpdC8+DQogICA8dzpTcGxp dFBnQnJlYWtBbmRQYXJhTWFyay8+DQogICA8dzpEb250VmVydEFsaWduQ2VsbFdpdGhTcC8+DQog ICA8dzpEb250QnJlYWtDb25zdHJhaW5lZEZvcmNlZFRhYmxlcy8+DQogICA8dzpEb250VmVydEFs aWduSW5UeGJ4Lz4NCiAgIDx3OldvcmQxMUtlcm5pbmdQYWlycy8+DQogICA8dzpDYWNoZWRDb2xC YWxhbmNlLz4NCiAgIDx3OlVzZUZFTGF5b3V0Lz4NCiAgPC93OkNvbXBhdGliaWxpdHk+DQogIDx3 OkJyb3dzZXJMZXZlbD5NaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyNDwvdzpCcm93c2VyTGV2ZWw+ DQogIDxtOm1hdGhQcj4NCiAgIDxtOm1hdGhGb250IG06dmFsPSJDYW1icmlhIE1hdGgiLz4NCiAg IDxtOmJya0JpbiBtOnZhbD0iYmVmb3JlIi8+DQogICA8bTpicmtCaW5TdWIgbTp2YWw9IiYjNDU7 LSIvPg0KICAgPG06c21hbGxGcmFjIG06dmFsPSJvZmYiLz4NCiAgIDxtOmRpc3BEZWYvPg0KICAg PG06bE1hcmdpbiBtOnZhbD0iMCIvPg0KICAgPG06ck1hcmdpbiBtOnZhbD0iMCIvPg0KICAgPG06 ZGVmSmMgbTp2YWw9ImNlbnRlckdyb3VwIi8+DQogICA8bTp3cmFwSW5kZW50IG06dmFsPSIxNDQw Ii8+DQogICA8bTppbnRMaW0gbTp2YWw9InN1YlN1cCIvPg0KICAgPG06bmFyeUxpbSBtOnZhbD0i dW5kT3ZyIi8+DQogIDwvbTptYXRoUHI+PC93OldvcmREb2N1bWVudD4NCjwveG1sPjwhW2VuZGlm XS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KIDx3OkxhdGVudFN0eWxlcyBEZWZMb2NrZWRT dGF0ZT0iZmFsc2UiIERlZlVuaGlkZVdoZW5Vc2VkPSJ0cnVlIg0KICBEZWZTZW1pSGlkZGVuPSJ0 cnVlIiBEZWZRRm9ybWF0PSJmYWxzZSIgRGVmUHJpb3JpdHk9Ijk5Ig0KICBMYXRlbnRTdHlsZUNv dW50PSIyNjciPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjAi IFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0 cnVlIiBOYW1lPSJOb3JtYWwiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFBy aW9yaXR5PSI5IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg UUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyAxIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2Nr ZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyAyIi8+ DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0i dHJ1ZSIgTmFtZT0iaGVhZGluZyAzIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNl IiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyA0Ii8+DQogIDx3Okxz ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFt ZT0iaGVhZGluZyA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyA2Ii8+DQogIDx3OkxzZEV4Y2VwdGlv biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGlu ZyA3Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZv cm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyA4Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9 ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyA5Ii8+DQog IDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyAx Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9 InRvYyAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzki IE5hbWU9InRvYyAzIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iMzkiIE5hbWU9InRvYyA0Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ cmlvcml0eT0iMzkiIE5hbWU9InRvYyA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh bHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyA2Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2Nr ZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyA3Ii8+DQogIDx3OkxzZEV4Y2VwdGlv biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyA4Ii8+DQogIDx3OkxzZEV4 Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyA5Ii8+DQogIDx3 OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzUiIFFGb3JtYXQ9InRydWUi IE5hbWU9ImNhcHRpb24iLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y aXR5PSIxMCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFG b3JtYXQ9InRydWUiIE5hbWU9IlRpdGxlIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh bHNlIiBQcmlvcml0eT0iMSIgTmFtZT0iRGVmYXVsdCBQYXJhZ3JhcGggRm9udCIvPg0KICA8dzpM c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjExIiBTZW1pSGlkZGVuPSJmYWxz ZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iU3VidGl0 bGUiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIyMiIgU2Vt aUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUi IE5hbWU9IlN0cm9uZyIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3Jp dHk9IjIwIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZv cm1hdD0idHJ1ZSIgTmFtZT0iRW1waGFzaXMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i ZmFsc2UiIFByaW9yaXR5PSI1OSIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNl ZD0iZmFsc2UiIE5hbWU9IlRhYmxlIEdyaWQiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iUGxhY2Vob2xkZXIgVGV4dCIvPg0K ICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjEiIFNlbWlIaWRkZW49 ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJO byBTcGFjaW5nIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0i NjAiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJM aWdodCBTaGFkaW5nIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iNjEiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1l PSJMaWdodCBMaXN0Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iNjIiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1l PSJMaWdodCBHcmlkIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1l PSJNZWRpdW0gU2hhZGluZyAxIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ cmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNl IiBOYW1lPSJNZWRpdW0gU2hhZGluZyAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh bHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9 ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAxIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9 ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVz ZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2Nr ZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hl blVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAxIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBM b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRl V2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlv biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5o aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIi8+DQogIDx3OkxzZEV4Y2Vw dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAg VW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExpc3QiLz4NCiAgPHc6THNkRXhjZXB0 aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MSIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBV bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIFNoYWRpbmciLz4NCiAgPHc6THNk RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2Ui DQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIExpc3QiLz4NCiAgPHc6 THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFs c2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIEdyaWQiLz4NCiAg PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0i ZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNj ZW50IDEiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIg U2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0 IExpc3QgQWNjZW50IDEiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y aXR5PSI2MiIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5h bWU9IkxpZ2h0IEdyaWQgQWNjZW50IDEiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFs c2UiIFByaW9yaXR5PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0i ZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDEiLz4NCiAgPHc6THNkRXhjZXB0 aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBV bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDEiLz4N CiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2VtaUhpZGRl bj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEg QWNjZW50IDEiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFVuaGlkZVdoZW5V c2VkPSJmYWxzZSIgTmFtZT0iUmV2aXNpb24iLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i ZmFsc2UiIFByaW9yaXR5PSIzNCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNl ZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9Ikxpc3QgUGFyYWdyYXBoIi8+DQogIDx3Okxz ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMjkiIFNlbWlIaWRkZW49ImZhbHNl Ig0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJRdW90ZSIv Pg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjMwIiBTZW1pSGlk ZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFt ZT0iSW50ZW5zZSBRdW90ZSIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJp b3JpdHk9IjY2IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg TmFtZT0iTWVkaXVtIExpc3QgMiBBY2NlbnQgMSIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2Vk PSJmYWxzZSIgUHJpb3JpdHk9IjY3IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5V c2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMSBBY2NlbnQgMSIvPg0KICA8dzpMc2RFeGNl cHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAg IFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMiBBY2NlbnQgMSIvPg0K ICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBTZW1pSGlkZGVu PSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMyBB Y2NlbnQgMSIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9Ijcw IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iRGFy ayBMaXN0IEFjY2VudCAxIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv cml0eT0iNzEiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBO YW1lPSJDb2xvcmZ1bCBTaGFkaW5nIEFjY2VudCAxIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2Nr ZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzIiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hl blVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCAxIi8+DQogIDx3OkxzZEV4 Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIFNlbWlIaWRkZW49ImZhbHNlIg0K ICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCAxIi8+ DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIFNlbWlIaWRk ZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBTaGFkaW5n IEFjY2VudCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0i NjEiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJM aWdodCBMaXN0IEFjY2VudCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ cmlvcml0eT0iNjIiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNl IiBOYW1lPSJMaWdodCBHcmlkIEFjY2VudCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9 ImZhbHNlIiBQcmlvcml0eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVz ZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAxIEFjY2VudCAyIi8+DQogIDx3OkxzZEV4 Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNlIg0K ICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAyIEFjY2VudCAy Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlI aWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlz dCAxIEFjY2VudCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iNjYiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1l PSJNZWRpdW0gTGlzdCAyIEFjY2VudCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh bHNlIiBQcmlvcml0eT0iNjciIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9 ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlv biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5o aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCAyIi8+DQogIDx3 OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZh bHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2Vu dCAyIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNl bWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExp c3QgQWNjZW50IDIiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5 PSI3MSIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9 IkNvbG9yZnVsIFNoYWRpbmcgQWNjZW50IDIiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i ZmFsc2UiIFByaW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNl ZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIExpc3QgQWNjZW50IDIiLz4NCiAgPHc6THNkRXhjZXB0 aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBV bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIEdyaWQgQWNjZW50IDIiLz4NCiAg PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0i ZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNj ZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIg U2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0 IExpc3QgQWNjZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y aXR5PSI2MiIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5h bWU9IkxpZ2h0IEdyaWQgQWNjZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFs c2UiIFByaW9yaXR5PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0i ZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0 aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBV bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDMiLz4N CiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2VtaUhpZGRl bj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEg QWNjZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2 NiIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1l ZGl1bSBMaXN0IDIgQWNjZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui IFByaW9yaXR5PSI2NyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFs c2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDEgQWNjZW50IDMiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExv Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVX aGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDIgQWNjZW50IDMiLz4NCiAgPHc6THNk RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OSIgU2VtaUhpZGRlbj0iZmFsc2Ui DQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDMgQWNjZW50IDMi Lz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MCIgU2VtaUhp ZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkRhcmsgTGlzdCBB Y2NlbnQgMyIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9Ijcx IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29s b3JmdWwgU2hhZGluZyBBY2NlbnQgMyIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz ZSIgUHJpb3JpdHk9IjcyIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJm YWxzZSIgTmFtZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgMyIvPg0KICA8dzpMc2RFeGNlcHRpb24g TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjczIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlk ZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgMyIvPg0KICA8dzpM c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBTZW1pSGlkZGVuPSJmYWxz ZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQg NCIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBTZW1p SGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTGlnaHQgTGlz dCBBY2NlbnQgNCIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9 IjYyIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0i TGlnaHQgR3JpZCBBY2NlbnQgNCIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIg UHJpb3JpdHk9IjYzIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxz ZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgNCIvPg0KICA8dzpMc2RFeGNlcHRpb24g TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY0IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlk ZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2NlbnQgNCIvPg0KICA8 dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY1IiBTZW1pSGlkZGVuPSJm YWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3QgMSBBY2Nl bnQgNCIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY2IiBT ZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVt IExpc3QgMiBBY2NlbnQgNCIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJp b3JpdHk9IjY3IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg TmFtZT0iTWVkaXVtIEdyaWQgMSBBY2NlbnQgNCIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2Vk PSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5V c2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMiBBY2NlbnQgNCIvPg0KICA8dzpMc2RFeGNl cHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAg IFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMyBBY2NlbnQgNCIvPg0K ICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBTZW1pSGlkZGVu PSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iRGFyayBMaXN0IEFjY2Vu dCA0Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIFNl bWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1 bCBTaGFkaW5nIEFjY2VudCA0Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ cmlvcml0eT0iNzIiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNl IiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCA0Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2Nr ZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hl blVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCA0Ii8+DQogIDx3OkxzZEV4 Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIFNlbWlIaWRkZW49ImZhbHNlIg0K ICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBTaGFkaW5nIEFjY2VudCA1Ii8+ DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIFNlbWlIaWRk ZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBMaXN0IEFj Y2VudCA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIi IFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdo dCBHcmlkIEFjY2VudCA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv cml0eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBO YW1lPSJNZWRpdW0gU2hhZGluZyAxIEFjY2VudCA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2Nr ZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hl blVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAyIEFjY2VudCA1Ii8+DQogIDx3Okxz ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRkZW49ImZhbHNl Ig0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAxIEFjY2VudCA1 Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNlbWlI aWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlz dCAyIEFjY2VudCA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0 eT0iNjciIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1l PSJNZWRpdW0gR3JpZCAxIEFjY2VudCA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh bHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9 ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCA1Ii8+DQogIDx3OkxzZEV4Y2VwdGlv biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5o aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2VudCA1Ii8+DQogIDx3 OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNlbWlIaWRkZW49ImZh bHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExpc3QgQWNjZW50IDUi Lz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MSIgU2VtaUhp ZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIFNo YWRpbmcgQWNjZW50IDUiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y aXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5h bWU9IkNvbG9yZnVsIExpc3QgQWNjZW50IDUiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i ZmFsc2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNl ZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIEdyaWQgQWNjZW50IDUiLz4NCiAgPHc6THNkRXhjZXB0 aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBV bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNjZW50IDYiLz4NCiAg PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIgU2VtaUhpZGRlbj0i ZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IExpc3QgQWNjZW50 IDYiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgU2Vt aUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IEdy aWQgQWNjZW50IDYiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5 PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9 Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDYiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i ZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNl ZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDYiLz4NCiAgPHc6THNkRXhj ZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2VtaUhpZGRlbj0iZmFsc2UiDQog ICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNjZW50IDYiLz4N CiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NiIgU2VtaUhpZGRl bj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDIg QWNjZW50IDYiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2 NyIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1l ZGl1bSBHcmlkIDEgQWNjZW50IDYiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui IFByaW9yaXR5PSI2OCIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVXaGVuVXNlZD0iZmFs c2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDIgQWNjZW50IDYiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExv Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OSIgU2VtaUhpZGRlbj0iZmFsc2UiDQogICBVbmhpZGVX aGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDMgQWNjZW50IDYiLz4NCiAgPHc6THNk RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MCIgU2VtaUhpZGRlbj0iZmFsc2Ui DQogICBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkRhcmsgTGlzdCBBY2NlbnQgNiIvPg0K ICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcxIiBTZW1pSGlkZGVu PSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgU2hhZGlu ZyBBY2NlbnQgNiIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9 IjcyIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0i Q29sb3JmdWwgTGlzdCBBY2NlbnQgNiIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz ZSIgUHJpb3JpdHk9IjczIiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJm YWxzZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgNiIvPg0KICA8dzpMc2RFeGNlcHRpb24g TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjE5IiBTZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlk ZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iU3VidGxlIEVtcGhhc2lzIi8+ DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMjEiIFNlbWlIaWRk ZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1l PSJJbnRlbnNlIEVtcGhhc2lzIi8+DQogIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ cmlvcml0eT0iMzEiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAgVW5oaWRlV2hlblVzZWQ9ImZhbHNl IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJTdWJ0bGUgUmVmZXJlbmNlIi8+DQogIDx3OkxzZEV4Y2Vw dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzIiIFNlbWlIaWRkZW49ImZhbHNlIg0KICAg VW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJJbnRlbnNlIFJlZmVy ZW5jZSIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjMzIiBT ZW1pSGlkZGVuPSJmYWxzZSINCiAgIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1 ZSIgTmFtZT0iQm9vayBUaXRsZSIvPg0KICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIg UHJpb3JpdHk9IjM3IiBOYW1lPSJCaWJsaW9ncmFwaHkiLz4NCiAgPHc6THNkRXhjZXB0aW9uIExv Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iVE9DIEhlYWRp bmciLz4NCiA8L3c6TGF0ZW50U3R5bGVzPg0KPC94bWw+PCFbZW5kaWZdLS0+DQo8c3R5bGU+DQo8 IS0tDQogLyogRm9udCBEZWZpbml0aW9ucyAqLw0KIEBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 Ik1TIE1pbmNobyI7DQoJcGFub3NlLTE6MiAyIDYgOSA0IDIgNSA4IDMgNDsNCgltc28tZm9udC1h bHQ6IlxGRjJEXEZGMzMgXDY2MEVcNjcxRCI7DQoJbXNvLWZvbnQtY2hhcnNldDoxMjg7DQoJbXNv LWdlbmVyaWMtZm9udC1mYW1pbHk6bW9kZXJuOw0KCW1zby1mb250LXBpdGNoOmZpeGVkOw0KCW1z by1mb250LXNpZ25hdHVyZTotNTM2ODcwMTQ1IDE3OTE0OTE1NzkgMTggMCAxMzEyMzEgMDt9DQpA Zm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOw0KCXBhbm9zZS0xOjIgNCA1 IDMgNSA0IDYgMyAyIDQ7DQoJbXNvLWZvbnQtY2hhcnNldDoxOw0KCW1zby1nZW5lcmljLWZvbnQt ZmFtaWx5OnJvbWFuOw0KCW1zby1mb250LWZvcm1hdDpvdGhlcjsNCgltc28tZm9udC1waXRjaDp2 YXJpYWJsZTsNCgltc28tZm9udC1zaWduYXR1cmU6MCAwIDAgMCAwIDA7fQ0KQGZvbnQtZmFjZQ0K CXtmb250LWZhbWlseTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0Ow0K CW1zby1mb250LWNoYXJzZXQ6MDsNCgltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsNCglt c28tZm9udC1waXRjaDp2YXJpYWJsZTsNCgltc28tZm9udC1zaWduYXR1cmU6LTUzNjg3MDE0NSAx MDczNzg2MTExIDEgMCA0MTUgMDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OlRhaG9tYTsN CglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsNCgltc28tZm9udC1jaGFyc2V0OjA7DQoJ bXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7DQoJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7 DQoJbXNvLWZvbnQtc2lnbmF0dXJlOi01MjAwODE2NjUgLTEwNzM3MTcxNTcgNDEgMCA2NjA0NyAw O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IlxATVMgTWluY2hvIjsNCglwYW5vc2UtMToy IDIgNiA5IDQgMiA1IDggMyA0Ow0KCW1zby1mb250LWNoYXJzZXQ6MTI4Ow0KCW1zby1nZW5lcmlj LWZvbnQtZmFtaWx5Om1vZGVybjsNCgltc28tZm9udC1waXRjaDpmaXhlZDsNCgltc28tZm9udC1z aWduYXR1cmU6LTUzNjg3MDE0NSAxNzkxNDkxNTc5IDE4IDAgMTMxMjMxIDA7fQ0KQGZvbnQtZmFj ZQ0KCXtmb250LWZhbWlseTpWZXJkYW5hOw0KCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0 Ow0KCW1zby1mb250LWNoYXJzZXQ6MDsNCgltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsN Cgltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCgltc28tZm9udC1zaWduYXR1cmU6LTE1OTM4MzM3 MjkgMTA3Mzc1MDEwNyAxNiAwIDQxNSAwO30NCiAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KIHAu TXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwNCgl7bXNvLXN0eWxlLXVuaGlk ZTpubzsNCgltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0eWxlLXBhcmVudDoiIjsNCglt YXJnaW4tdG9wOjBjbTsNCgltYXJnaW4tcmlnaHQ6MGNtOw0KCW1hcmdpbi1ib3R0b206MTAuMHB0 Ow0KCW1hcmdpbi1sZWZ0OjBjbTsNCglsaW5lLWhlaWdodDoxMTUlOw0KCW1zby1wYWdpbmF0aW9u OndpZG93LW9ycGhhbjsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJp Iiwic2Fucy1zZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWFz Y2lpLXRoZW1lLWZvbnQ6bWlub3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRp bWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0Ow0K CW1zby1oYW5zaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1p bm9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1z by1iaWRpLXRoZW1lLWZvbnQ6bWlub3ItYmlkaTsNCgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsN Cgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzsNCgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzt9 DQpoMQ0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1z by1zdHlsZS1xZm9ybWF0OnllczsNCgltc28tc3R5bGUtbGluazoiSGVhZGluZyAxIENoYXIiOw0K CW1zby1zdHlsZS1uZXh0Ok5vcm1hbDsNCgltYXJnaW4tdG9wOjI0LjBwdDsNCgltYXJnaW4tcmln aHQ6MGNtOw0KCW1hcmdpbi1ib3R0b206MGNtOw0KCW1hcmdpbi1sZWZ0OjBjbTsNCgltYXJnaW4t Ym90dG9tOi4wMDAxcHQ7DQoJbGluZS1oZWlnaHQ6MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRv dy1vcnBoYW4gbGluZXMtdG9nZXRoZXI7DQoJcGFnZS1icmVhay1hZnRlcjphdm9pZDsNCgltc28t b3V0bGluZS1sZXZlbDoxOw0KCWZvbnQtc2l6ZToxNC4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJy aWEiLCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lp LXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVz IE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1z by1oYW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9y LWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1i aWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojQjM1RTA2Ow0KCW1zby10aGVtZWNv bG9yOmFjY2VudDE7DQoJbXNvLXRoZW1lc2hhZGU6MTkxOw0KCW1zby1mb250LWtlcm5pbmc6MHB0 Ow0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVTOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVT Ow0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVTOw0KCWZvbnQtd2VpZ2h0OmJvbGQ7fQ0KaDINCgl7 bXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk7DQoJbXNvLXN0eWxl LXFmb3JtYXQ6eWVzOw0KCW1zby1zdHlsZS1saW5rOiJIZWFkaW5nIDIgQ2hhciI7DQoJbXNvLXN0 eWxlLW5leHQ6Tm9ybWFsOw0KCW1hcmdpbi10b3A6MTAuMHB0Ow0KCW1hcmdpbi1yaWdodDowY207 DQoJbWFyZ2luLWJvdHRvbTowY207DQoJbWFyZ2luLWxlZnQ6MGNtOw0KCW1hcmdpbi1ib3R0b206 LjAwMDFwdDsNCglsaW5lLWhlaWdodDoxMTUlOw0KCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhh biBsaW5lcy10b2dldGhlcjsNCglwYWdlLWJyZWFrLWFmdGVyOmF2b2lkOw0KCW1zby1vdXRsaW5l LWxldmVsOjI7DQoJZm9udC1zaXplOjEzLjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNl cmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUt Zm9udDptYWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJv bWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNp LWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47 DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhl bWUtZm9udDptYWpvci1iaWRpOw0KCWNvbG9yOiNGMDdGMDk7DQoJbXNvLXRoZW1lY29sb3I6YWNj ZW50MTsNCgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpF Ti1VUzsNCgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzsNCglmb250LXdlaWdodDpib2xkO30NCmgz DQoJe21zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5Ow0KCW1zby1z dHlsZS1xZm9ybWF0OnllczsNCgltc28tc3R5bGUtbGluazoiSGVhZGluZyAzIENoYXIiOw0KCW1z by1zdHlsZS1uZXh0Ok5vcm1hbDsNCgltYXJnaW4tdG9wOjEwLjBwdDsNCgltYXJnaW4tcmlnaHQ6 MGNtOw0KCW1hcmdpbi1ib3R0b206MGNtOw0KCW1hcmdpbi1sZWZ0OjBjbTsNCgltYXJnaW4tYm90 dG9tOi4wMDAxcHQ7DQoJbGluZS1oZWlnaHQ6MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1v cnBoYW4gbGluZXMtdG9nZXRoZXI7DQoJcGFnZS1icmVhay1hZnRlcjphdm9pZDsNCgltc28tb3V0 bGluZS1sZXZlbDozOw0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEi LCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRo ZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5l dyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1o YW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxh dGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRp LXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojRjA3RjA5Ow0KCW1zby10aGVtZWNvbG9y OmFjY2VudDE7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3Vh Z2U6RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7DQoJZm9udC13ZWlnaHQ6Ym9sZDt9 DQpoNA0KCXttc28tc3R5bGUtbm9zaG93OnllczsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTsNCglt c28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0eWxlLWxpbms6IkhlYWRpbmcgNCBDaGFyIjsN Cgltc28tc3R5bGUtbmV4dDpOb3JtYWw7DQoJbWFyZ2luLXRvcDoxMC4wcHQ7DQoJbWFyZ2luLXJp Z2h0OjBjbTsNCgltYXJnaW4tYm90dG9tOjBjbTsNCgltYXJnaW4tbGVmdDowY207DQoJbWFyZ2lu LWJvdHRvbTouMDAwMXB0Ow0KCWxpbmUtaGVpZ2h0OjExNSU7DQoJbXNvLXBhZ2luYXRpb246d2lk b3ctb3JwaGFuIGxpbmVzLXRvZ2V0aGVyOw0KCXBhZ2UtYnJlYWstYWZ0ZXI6YXZvaWQ7DQoJbXNv LW91dGxpbmUtbGV2ZWw6NDsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYW1i cmlhIiwic2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1hc2Np aS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1l cyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWFqb3ItZmFyZWFzdDsNCglt c28taGFuc2ktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28taGFuc2ktdGhlbWUtZm9udDptYWpv ci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28t YmlkaS10aGVtZS1mb250Om1ham9yLWJpZGk7DQoJY29sb3I6I0YwN0YwOTsNCgltc28tdGhlbWVj b2xvcjphY2NlbnQxOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVTOw0KCW1zby1mYXJlYXN0LWxh bmd1YWdlOkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVTOw0KCWZvbnQtd2VpZ2h0OmJv bGQ7DQoJZm9udC1zdHlsZTppdGFsaWM7fQ0KaDUNCgl7bXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJ bXNvLXN0eWxlLXByaW9yaXR5Ojk7DQoJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KCW1zby1zdHls ZS1saW5rOiJIZWFkaW5nIDUgQ2hhciI7DQoJbXNvLXN0eWxlLW5leHQ6Tm9ybWFsOw0KCW1hcmdp bi10b3A6MTAuMHB0Ow0KCW1hcmdpbi1yaWdodDowY207DQoJbWFyZ2luLWJvdHRvbTowY207DQoJ bWFyZ2luLWxlZnQ6MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglsaW5lLWhlaWdodDox MTUlOw0KCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbiBsaW5lcy10b2dldGhlcjsNCglwYWdl LWJyZWFrLWFmdGVyOmF2b2lkOw0KCW1zby1vdXRsaW5lLWxldmVsOjU7DQoJZm9udC1zaXplOjEx LjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNlcmlmIjsNCgltc28tYXNjaWktZm9udC1m YW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28t ZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVt ZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJ bXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6 IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhlbWUtZm9udDptYWpvci1iaWRpOw0KCWNv bG9yOiM3NzNGMDQ7DQoJbXNvLXRoZW1lY29sb3I6YWNjZW50MTsNCgltc28tdGhlbWVzaGFkZTox Mjc7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4t VVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7DQoJZm9udC13ZWlnaHQ6bm9ybWFsO30NCmg2 DQoJe21zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5Ow0KCW1zby1z dHlsZS1xZm9ybWF0OnllczsNCgltc28tc3R5bGUtbGluazoiSGVhZGluZyA2IENoYXIiOw0KCW1z by1zdHlsZS1uZXh0Ok5vcm1hbDsNCgltYXJnaW4tdG9wOjEwLjBwdDsNCgltYXJnaW4tcmlnaHQ6 MGNtOw0KCW1hcmdpbi1ib3R0b206MGNtOw0KCW1hcmdpbi1sZWZ0OjBjbTsNCgltYXJnaW4tYm90 dG9tOi4wMDAxcHQ7DQoJbGluZS1oZWlnaHQ6MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1v cnBoYW4gbGluZXMtdG9nZXRoZXI7DQoJcGFnZS1icmVhay1hZnRlcjphdm9pZDsNCgltc28tb3V0 bGluZS1sZXZlbDo2Ow0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEi LCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRo ZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5l dyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1o YW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxh dGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRp LXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojNzczRjA0Ow0KCW1zby10aGVtZWNvbG9y OmFjY2VudDE7DQoJbXNvLXRoZW1lc2hhZGU6MTI3Ow0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVT Ow0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVT Ow0KCWZvbnQtd2VpZ2h0Om5vcm1hbDsNCglmb250LXN0eWxlOml0YWxpYzt9DQpwLk1zb0hlYWRp bmc3LCBsaS5Nc29IZWFkaW5nNywgZGl2Lk1zb0hlYWRpbmc3DQoJe21zby1zdHlsZS1ub3Nob3c6 eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5Ow0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCglt c28tc3R5bGUtbGluazoiSGVhZGluZyA3IENoYXIiOw0KCW1zby1zdHlsZS1uZXh0Ok5vcm1hbDsN CgltYXJnaW4tdG9wOjEwLjBwdDsNCgltYXJnaW4tcmlnaHQ6MGNtOw0KCW1hcmdpbi1ib3R0b206 MGNtOw0KCW1hcmdpbi1sZWZ0OjBjbTsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJbGluZS1o ZWlnaHQ6MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW4gbGluZXMtdG9nZXRoZXI7 DQoJcGFnZS1icmVhay1hZnRlcjphdm9pZDsNCgltc28tb3V0bGluZS1sZXZlbDo3Ow0KCWZvbnQt c2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJbXNvLWFzY2lp LWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47 DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVh c3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYW1i cmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQt ZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlk aTsNCgljb2xvcjojNDA0MDQwOw0KCW1zby10aGVtZWNvbG9yOnRleHQxOw0KCW1zby10aGVtZXRp bnQ6MTkxOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVTOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdl OkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVTOw0KCWZvbnQtc3R5bGU6aXRhbGljO30N CnAuTXNvSGVhZGluZzgsIGxpLk1zb0hlYWRpbmc4LCBkaXYuTXNvSGVhZGluZzgNCgl7bXNvLXN0 eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk7DQoJbXNvLXN0eWxlLXFmb3Jt YXQ6eWVzOw0KCW1zby1zdHlsZS1saW5rOiJIZWFkaW5nIDggQ2hhciI7DQoJbXNvLXN0eWxlLW5l eHQ6Tm9ybWFsOw0KCW1hcmdpbi10b3A6MTAuMHB0Ow0KCW1hcmdpbi1yaWdodDowY207DQoJbWFy Z2luLWJvdHRvbTowY207DQoJbWFyZ2luLWxlZnQ6MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFw dDsNCglsaW5lLWhlaWdodDoxMTUlOw0KCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbiBsaW5l cy10b2dldGhlcjsNCglwYWdlLWJyZWFrLWFmdGVyOmF2b2lkOw0KCW1zby1vdXRsaW5lLWxldmVs Ojg7DQoJZm9udC1zaXplOjEwLjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNlcmlmIjsN Cgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUtZm9udDpt YWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsN Cgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNpLWZvbnQt ZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNv LWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhlbWUtZm9u dDptYWpvci1iaWRpOw0KCWNvbG9yOiNGMDdGMDk7DQoJbXNvLXRoZW1lY29sb3I6YWNjZW50MTsN Cgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzsN Cgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzt9DQpwLk1zb0hlYWRpbmc5LCBsaS5Nc29IZWFkaW5n OSwgZGl2Lk1zb0hlYWRpbmc5DQoJe21zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1w cmlvcml0eTo5Ow0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCgltc28tc3R5bGUtbGluazoiSGVh ZGluZyA5IENoYXIiOw0KCW1zby1zdHlsZS1uZXh0Ok5vcm1hbDsNCgltYXJnaW4tdG9wOjEwLjBw dDsNCgltYXJnaW4tcmlnaHQ6MGNtOw0KCW1hcmdpbi1ib3R0b206MGNtOw0KCW1hcmdpbi1sZWZ0 OjBjbTsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJbGluZS1oZWlnaHQ6MTE1JTsNCgltc28t cGFnaW5hdGlvbjp3aWRvdy1vcnBoYW4gbGluZXMtdG9nZXRoZXI7DQoJcGFnZS1icmVhay1hZnRl cjphdm9pZDsNCgltc28tb3V0bGluZS1sZXZlbDo5Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7DQoJZm9u dC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJy aWE7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9u dC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpv ci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10 aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcg Um9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojNDA0MDQw Ow0KCW1zby10aGVtZWNvbG9yOnRleHQxOw0KCW1zby10aGVtZXRpbnQ6MTkxOw0KCW1zby1hbnNp LWxhbmd1YWdlOkVOLVVTOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTOw0KCW1zby1iaWRp LWxhbmd1YWdlOkVOLVVTOw0KCWZvbnQtc3R5bGU6aXRhbGljO30NCnAuTXNvSGVhZGVyLCBsaS5N c29IZWFkZXIsIGRpdi5Nc29IZWFkZXINCgl7bXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0 eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS1saW5rOiJIZWFkZXIgQ2hhciI7DQoJbWFyZ2lu OjBjbTsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJbGluZS1oZWlnaHQ6bm9ybWFsOw0KCW1z by1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsNCgl0YWItc3RvcHM6Y2VudGVyIDIyNS42NXB0IHJp Z2h0IDQ1MS4zcHQ7DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIs InNhbnMtc2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1hc2Np aS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1l cyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWlub3ItZmFyZWFzdDsNCglt c28taGFuc2ktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28taGFuc2ktdGhlbWUtZm9udDptaW5v ci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28t YmlkaS10aGVtZS1mb250Om1pbm9yLWJpZGk7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJ bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7fQ0K cC5Nc29Gb290ZXIsIGxpLk1zb0Zvb3RlciwgZGl2Lk1zb0Zvb3Rlcg0KCXttc28tc3R5bGUtbm9z aG93OnllczsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNvLXN0eWxlLWxpbms6IkZvb3Rl ciBDaGFyIjsNCgltYXJnaW46MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglsaW5lLWhl aWdodDpub3JtYWw7DQoJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KCXRhYi1zdG9wczpj ZW50ZXIgMjI1LjY1cHQgcmlnaHQgNDUxLjNwdDsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQt ZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNh bGlicmk7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWlub3ItbGF0aW47DQoJbXNvLWZhcmVhc3Qt Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDpt aW5vci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5z aS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBO ZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWlub3ItYmlkaTsNCgltc28tYW5zaS1s YW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzsNCgltc28tYmlkaS1s YW5ndWFnZTpFTi1VUzt9DQpwLk1zb0NhcHRpb24sIGxpLk1zb0NhcHRpb24sIGRpdi5Nc29DYXB0 aW9uDQoJe21zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTozNTsNCglt c28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0eWxlLW5leHQ6Tm9ybWFsOw0KCW1hcmdpbi10 b3A6MGNtOw0KCW1hcmdpbi1yaWdodDowY207DQoJbWFyZ2luLWJvdHRvbToxMC4wcHQ7DQoJbWFy Z2luLWxlZnQ6MGNtOw0KCWxpbmUtaGVpZ2h0Om5vcm1hbDsNCgltc28tcGFnaW5hdGlvbjp3aWRv dy1vcnBoYW47DQoJZm9udC1zaXplOjkuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fu cy1zZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWFzY2lpLXRo ZW1lLWZvbnQ6bWlub3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5l dyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0Ow0KCW1zby1o YW5zaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1pbm9yLWxh dGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRp LXRoZW1lLWZvbnQ6bWlub3ItYmlkaTsNCgljb2xvcjojRjA3RjA5Ow0KCW1zby10aGVtZWNvbG9y OmFjY2VudDE7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3Vh Z2U6RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7DQoJZm9udC13ZWlnaHQ6Ym9sZDt9 DQpwLk1zb1RpdGxlLCBsaS5Nc29UaXRsZSwgZGl2Lk1zb1RpdGxlDQoJe21zby1zdHlsZS1wcmlv cml0eToxMDsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsN Cgltc28tc3R5bGUtbGluazoiVGl0bGUgQ2hhciI7DQoJbXNvLXN0eWxlLW5leHQ6Tm9ybWFsOw0K CW1hcmdpbi10b3A6MGNtOw0KCW1hcmdpbi1yaWdodDowY207DQoJbWFyZ2luLWJvdHRvbToxNS4w cHQ7DQoJbWFyZ2luLWxlZnQ6MGNtOw0KCW1zby1hZGQtc3BhY2U6YXV0bzsNCglsaW5lLWhlaWdo dDpub3JtYWw7DQoJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KCWJvcmRlcjpub25lOw0K CW1zby1ib3JkZXItYm90dG9tLWFsdDpzb2xpZCAjRjA3RjA5IDEuMHB0Ow0KCW1zby1ib3JkZXIt Ym90dG9tLXRoZW1lY29sb3I6YWNjZW50MTsNCglwYWRkaW5nOjBjbTsNCgltc28tcGFkZGluZy1h bHQ6MGNtIDBjbSA0LjBwdCAwY207DQoJZm9udC1zaXplOjI2LjBwdDsNCglmb250LWZhbWlseToi Q2FtYnJpYSIsInNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28t YXNjaWktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToi VGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7 DQoJbXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6 bWFqb3ItbGF0aW47DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJ bXNvLWJpZGktdGhlbWUtZm9udDptYWpvci1iaWRpOw0KCWNvbG9yOiMyNTI1MjU7DQoJbXNvLXRo ZW1lY29sb3I6dGV4dDI7DQoJbXNvLXRoZW1lc2hhZGU6MTkxOw0KCWxldHRlci1zcGFjaW5nOi4y NXB0Ow0KCW1zby1mb250LWtlcm5pbmc6MTQuMHB0Ow0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVT Ow0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVT O30NCnAuTXNvVGl0bGVDeFNwRmlyc3QsIGxpLk1zb1RpdGxlQ3hTcEZpcnN0LCBkaXYuTXNvVGl0 bGVDeFNwRmlyc3QNCgl7bXNvLXN0eWxlLXByaW9yaXR5OjEwOw0KCW1zby1zdHlsZS11bmhpZGU6 bm87DQoJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KCW1zby1zdHlsZS1saW5rOiJUaXRsZSBDaGFy IjsNCgltc28tc3R5bGUtbmV4dDpOb3JtYWw7DQoJbXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7 DQoJbWFyZ2luOjBjbTsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJbXNvLWFkZC1zcGFjZTph dXRvOw0KCWxpbmUtaGVpZ2h0Om5vcm1hbDsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47 DQoJYm9yZGVyOm5vbmU7DQoJbXNvLWJvcmRlci1ib3R0b20tYWx0OnNvbGlkICNGMDdGMDkgMS4w cHQ7DQoJbXNvLWJvcmRlci1ib3R0b20tdGhlbWVjb2xvcjphY2NlbnQxOw0KCXBhZGRpbmc6MGNt Ow0KCW1zby1wYWRkaW5nLWFsdDowY20gMGNtIDQuMHB0IDBjbTsNCglmb250LXNpemU6MjYuMHB0 Ow0KCWZvbnQtZmFtaWx5OiJDYW1icmlhIiwic2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWls eTpDYW1icmlhOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1mYXJl YXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1lLWZv bnQ6bWFqb3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28t aGFuc2ktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToiVGlt ZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1ham9yLWJpZGk7DQoJY29sb3I6 IzI1MjUyNTsNCgltc28tdGhlbWVjb2xvcjp0ZXh0MjsNCgltc28tdGhlbWVzaGFkZToxOTE7DQoJ bGV0dGVyLXNwYWNpbmc6LjI1cHQ7DQoJbXNvLWZvbnQta2VybmluZzoxNC4wcHQ7DQoJbXNvLWFu c2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWJp ZGktbGFuZ3VhZ2U6RU4tVVM7fQ0KcC5Nc29UaXRsZUN4U3BNaWRkbGUsIGxpLk1zb1RpdGxlQ3hT cE1pZGRsZSwgZGl2Lk1zb1RpdGxlQ3hTcE1pZGRsZQ0KCXttc28tc3R5bGUtcHJpb3JpdHk6MTA7 DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0 eWxlLWxpbms6IlRpdGxlIENoYXIiOw0KCW1zby1zdHlsZS1uZXh0Ok5vcm1hbDsNCgltc28tc3R5 bGUtdHlwZTpleHBvcnQtb25seTsNCgltYXJnaW46MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFw dDsNCgltc28tYWRkLXNwYWNlOmF1dG87DQoJbGluZS1oZWlnaHQ6bm9ybWFsOw0KCW1zby1wYWdp bmF0aW9uOndpZG93LW9ycGhhbjsNCglib3JkZXI6bm9uZTsNCgltc28tYm9yZGVyLWJvdHRvbS1h bHQ6c29saWQgI0YwN0YwOSAxLjBwdDsNCgltc28tYm9yZGVyLWJvdHRvbS10aGVtZWNvbG9yOmFj Y2VudDE7DQoJcGFkZGluZzowY207DQoJbXNvLXBhZGRpbmctYWx0OjBjbSAwY20gNC4wcHQgMGNt Ow0KCWZvbnQtc2l6ZToyNi4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJ bXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFq b3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJ bXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZh bWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1i aWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6 bWFqb3ItYmlkaTsNCgljb2xvcjojMjUyNTI1Ow0KCW1zby10aGVtZWNvbG9yOnRleHQyOw0KCW1z by10aGVtZXNoYWRlOjE5MTsNCglsZXR0ZXItc3BhY2luZzouMjVwdDsNCgltc28tZm9udC1rZXJu aW5nOjE0LjBwdDsNCgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFzdC1sYW5n dWFnZTpFTi1VUzsNCgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzt9DQpwLk1zb1RpdGxlQ3hTcExh c3QsIGxpLk1zb1RpdGxlQ3hTcExhc3QsIGRpdi5Nc29UaXRsZUN4U3BMYXN0DQoJe21zby1zdHls ZS1wcmlvcml0eToxMDsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0 OnllczsNCgltc28tc3R5bGUtbGluazoiVGl0bGUgQ2hhciI7DQoJbXNvLXN0eWxlLW5leHQ6Tm9y bWFsOw0KCW1zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KCW1hcmdpbi10b3A6MGNtOw0KCW1h cmdpbi1yaWdodDowY207DQoJbWFyZ2luLWJvdHRvbToxNS4wcHQ7DQoJbWFyZ2luLWxlZnQ6MGNt Ow0KCW1zby1hZGQtc3BhY2U6YXV0bzsNCglsaW5lLWhlaWdodDpub3JtYWw7DQoJbXNvLXBhZ2lu YXRpb246d2lkb3ctb3JwaGFuOw0KCWJvcmRlcjpub25lOw0KCW1zby1ib3JkZXItYm90dG9tLWFs dDpzb2xpZCAjRjA3RjA5IDEuMHB0Ow0KCW1zby1ib3JkZXItYm90dG9tLXRoZW1lY29sb3I6YWNj ZW50MTsNCglwYWRkaW5nOjBjbTsNCgltc28tcGFkZGluZy1hbHQ6MGNtIDBjbSA0LjBwdCAwY207 DQoJZm9udC1zaXplOjI2LjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNlcmlmIjsNCglt c28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUtZm9udDptYWpv ci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCglt c28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNpLWZvbnQtZmFt aWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWJp ZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhlbWUtZm9udDpt YWpvci1iaWRpOw0KCWNvbG9yOiMyNTI1MjU7DQoJbXNvLXRoZW1lY29sb3I6dGV4dDI7DQoJbXNv LXRoZW1lc2hhZGU6MTkxOw0KCWxldHRlci1zcGFjaW5nOi4yNXB0Ow0KCW1zby1mb250LWtlcm5p bmc6MTQuMHB0Ow0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVTOw0KCW1zby1mYXJlYXN0LWxhbmd1 YWdlOkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVTO30NCnAuTXNvU3VidGl0bGUsIGxp Lk1zb1N1YnRpdGxlLCBkaXYuTXNvU3VidGl0bGUNCgl7bXNvLXN0eWxlLXByaW9yaXR5OjExOw0K CW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KCW1zby1zdHls ZS1saW5rOiJTdWJ0aXRsZSBDaGFyIjsNCgltc28tc3R5bGUtbmV4dDpOb3JtYWw7DQoJbWFyZ2lu LXRvcDowY207DQoJbWFyZ2luLXJpZ2h0OjBjbTsNCgltYXJnaW4tYm90dG9tOjEwLjBwdDsNCglt YXJnaW4tbGVmdDowY207DQoJbGluZS1oZWlnaHQ6MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRv dy1vcnBoYW47DQoJZm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNl cmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUt Zm9udDptYWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJv bWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNp LWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47 DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhl bWUtZm9udDptYWpvci1iaWRpOw0KCWNvbG9yOiNGMDdGMDk7DQoJbXNvLXRoZW1lY29sb3I6YWNj ZW50MTsNCglsZXR0ZXItc3BhY2luZzouNzVwdDsNCgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsN Cgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzsNCgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzsN Cglmb250LXN0eWxlOml0YWxpYzt9DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQoJe21zby1z dHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpibHVlOw0K CXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQoJdGV4dC11bmRlcmxpbmU6c2luZ2xlO30NCmE6 dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtbm9zaG93Onll czsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxlOw0KCXRleHQtZGVjb3Jh dGlvbjp1bmRlcmxpbmU7DQoJdGV4dC11bmRlcmxpbmU6c2luZ2xlO30NCnANCgl7bXNvLXN0eWxl LW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1tYXJnaW4tdG9wLWFs dDphdXRvOw0KCW1hcmdpbi1yaWdodDowY207DQoJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87 DQoJbWFyZ2luLWxlZnQ6MGNtOw0KCWxpbmUtaGVpZ2h0OjExNSU7DQoJbXNvLXBhZ2luYXRpb246 d2lkb3ctb3JwaGFuOw0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmki LCJzYW5zLXNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28tYXNj aWktdGhlbWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGlt ZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1pbm9yLWZhcmVhc3Q7DQoJ bXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWlu b3ItbGF0aW47DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNv LWJpZGktdGhlbWUtZm9udDptaW5vci1iaWRpOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVTOw0K CW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVTO30N CnAuTXNvQWNldGF0ZSwgbGkuTXNvQWNldGF0ZSwgZGl2Lk1zb0FjZXRhdGUNCgl7bXNvLXN0eWxl LW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS1saW5rOiJC YWxsb29uIFRleHQgQ2hhciI7DQoJbWFyZ2luLXRvcDowY207DQoJbWFyZ2luLXJpZ2h0OjBjbTsN CgltYXJnaW4tYm90dG9tOjEwLjBwdDsNCgltYXJnaW4tbGVmdDowY207DQoJbGluZS1oZWlnaHQ6 MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQoJZm9udC1zaXplOjguMHB0Ow0K CWZvbnQtZmFtaWx5OiJUYWhvbWEiLCJzYW5zLXNlcmlmIjsNCgltc28tZmFyZWFzdC1mb250LWZh bWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1pbm9yLWZh cmVhc3Q7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6 RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7fQ0KcC5Nc29Ob1NwYWNpbmcsIGxpLk1z b05vU3BhY2luZywgZGl2Lk1zb05vU3BhY2luZw0KCXttc28tc3R5bGUtcHJpb3JpdHk6MTsNCglt c28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCgltc28tc3R5bGUt cGFyZW50OiIiOw0KCW1zby1zdHlsZS1saW5rOiJObyBTcGFjaW5nIENoYXIiOw0KCW1hcmdpbjow Y207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWxpbmUtaGVpZ2h0Om5vcm1hbDsNCgltc28t cGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWls eToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWlseTpDYWxpYnJp Ow0KCW1zby1hc2NpaS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1mYXJlYXN0LWZvbnQt ZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWlub3It ZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28taGFuc2ktdGhl bWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJv bWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1pbm9yLWJpZGk7DQoJbXNvLWFuc2ktbGFuZ3Vh Z2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3Vh Z2U6RU4tVVM7fQ0KcC5Nc29MaXN0UGFyYWdyYXBoLCBsaS5Nc29MaXN0UGFyYWdyYXBoLCBkaXYu TXNvTGlzdFBhcmFncmFwaA0KCXttc28tc3R5bGUtcHJpb3JpdHk6MzQ7DQoJbXNvLXN0eWxlLXVu aGlkZTpubzsNCgltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbWFyZ2luLXRvcDowY207DQoJbWFy Z2luLXJpZ2h0OjBjbTsNCgltYXJnaW4tYm90dG9tOjEwLjBwdDsNCgltYXJnaW4tbGVmdDozNi4w cHQ7DQoJbXNvLWFkZC1zcGFjZTphdXRvOw0KCWxpbmUtaGVpZ2h0OjExNSU7DQoJbXNvLXBhZ2lu YXRpb246d2lkb3ctb3JwaGFuOw0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNh bGlicmkiLCJzYW5zLXNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCglt c28tYXNjaWktdGhlbWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWls eToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1pbm9yLWZhcmVh c3Q7DQoJbXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWhhbnNpLXRoZW1lLWZv bnQ6bWlub3ItbGF0aW47DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7 DQoJbXNvLWJpZGktdGhlbWUtZm9udDptaW5vci1iaWRpOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVO LVVTOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTOw0KCW1zby1iaWRpLWxhbmd1YWdlOkVO LVVTO30NCnAuTXNvTGlzdFBhcmFncmFwaEN4U3BGaXJzdCwgbGkuTXNvTGlzdFBhcmFncmFwaEN4 U3BGaXJzdCwgZGl2Lk1zb0xpc3RQYXJhZ3JhcGhDeFNwRmlyc3QNCgl7bXNvLXN0eWxlLXByaW9y aXR5OjM0Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0K CW1zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KCW1hcmdpbi10b3A6MGNtOw0KCW1hcmdpbi1y aWdodDowY207DQoJbWFyZ2luLWJvdHRvbTowY207DQoJbWFyZ2luLWxlZnQ6MzYuMHB0Ow0KCW1h cmdpbi1ib3R0b206LjAwMDFwdDsNCgltc28tYWRkLXNwYWNlOmF1dG87DQoJbGluZS1oZWlnaHQ6 MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQoJZm9udC1zaXplOjExLjBwdDsN Cglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZh bWlseTpDYWxpYnJpOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1m YXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1l LWZvbnQ6bWlub3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCglt c28taGFuc2ktdGhlbWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToi VGltZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1pbm9yLWJpZGk7DQoJbXNv LWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7DQoJbXNv LWJpZGktbGFuZ3VhZ2U6RU4tVVM7fQ0KcC5Nc29MaXN0UGFyYWdyYXBoQ3hTcE1pZGRsZSwgbGku TXNvTGlzdFBhcmFncmFwaEN4U3BNaWRkbGUsIGRpdi5Nc29MaXN0UGFyYWdyYXBoQ3hTcE1pZGRs ZQ0KCXttc28tc3R5bGUtcHJpb3JpdHk6MzQ7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28t c3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7DQoJbWFyZ2lu LXRvcDowY207DQoJbWFyZ2luLXJpZ2h0OjBjbTsNCgltYXJnaW4tYm90dG9tOjBjbTsNCgltYXJn aW4tbGVmdDozNi4wcHQ7DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCW1zby1hZGQtc3BhY2U6 YXV0bzsNCglsaW5lLWhlaWdodDoxMTUlOw0KCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsN Cglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7 DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6 bWlub3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7 DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250 LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1z by1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZv bnQ6bWlub3ItYmlkaTsNCgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFzdC1s YW5ndWFnZTpFTi1VUzsNCgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzt9DQpwLk1zb0xpc3RQYXJh Z3JhcGhDeFNwTGFzdCwgbGkuTXNvTGlzdFBhcmFncmFwaEN4U3BMYXN0LCBkaXYuTXNvTGlzdFBh cmFncmFwaEN4U3BMYXN0DQoJe21zby1zdHlsZS1wcmlvcml0eTozNDsNCgltc28tc3R5bGUtdW5o aWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCgltc28tc3R5bGUtdHlwZTpleHBvcnQt b25seTsNCgltYXJnaW4tdG9wOjBjbTsNCgltYXJnaW4tcmlnaHQ6MGNtOw0KCW1hcmdpbi1ib3R0 b206MTAuMHB0Ow0KCW1hcmdpbi1sZWZ0OjM2LjBwdDsNCgltc28tYWRkLXNwYWNlOmF1dG87DQoJ bGluZS1oZWlnaHQ6MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQoJZm9udC1z aXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOw0KCW1zby1h c2NpaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1pbm9yLWxh dGluOw0KCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1m YXJlYXN0LXRoZW1lLWZvbnQ6bWlub3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6 Q2FsaWJyaTsNCgltc28taGFuc2ktdGhlbWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tYmlkaS1m b250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1pbm9y LWJpZGk7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6 RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7fQ0KcC5Nc29RdW90ZSwgbGkuTXNvUXVv dGUsIGRpdi5Nc29RdW90ZQ0KCXttc28tc3R5bGUtcHJpb3JpdHk6Mjk7DQoJbXNvLXN0eWxlLXVu aGlkZTpubzsNCgltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0eWxlLWxpbms6IlF1b3Rl IENoYXIiOw0KCW1zby1zdHlsZS1uZXh0Ok5vcm1hbDsNCgltYXJnaW4tdG9wOjBjbTsNCgltYXJn aW4tcmlnaHQ6MGNtOw0KCW1hcmdpbi1ib3R0b206MTAuMHB0Ow0KCW1hcmdpbi1sZWZ0OjBjbTsN CglsaW5lLWhlaWdodDoxMTUlOw0KCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsNCglmb250 LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7DQoJbXNv LWFzY2lpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWlub3It bGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNv LWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWls eTpDYWxpYnJpOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1iaWRp LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWlu b3ItYmlkaTsNCgljb2xvcjpibGFjazsNCgltc28tdGhlbWVjb2xvcjp0ZXh0MTsNCgltc28tYW5z aS1sYW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzsNCgltc28tYmlk aS1sYW5ndWFnZTpFTi1VUzsNCglmb250LXN0eWxlOml0YWxpYzt9DQpwLk1zb0ludGVuc2VRdW90 ZSwgbGkuTXNvSW50ZW5zZVF1b3RlLCBkaXYuTXNvSW50ZW5zZVF1b3RlDQoJe21zby1zdHlsZS1w cmlvcml0eTozMDsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0Onll czsNCgltc28tc3R5bGUtbGluazoiSW50ZW5zZSBRdW90ZSBDaGFyIjsNCgltc28tc3R5bGUtbmV4 dDpOb3JtYWw7DQoJbWFyZ2luLXRvcDoxMC4wcHQ7DQoJbWFyZ2luLXJpZ2h0OjQ2LjhwdDsNCglt YXJnaW4tYm90dG9tOjE0LjBwdDsNCgltYXJnaW4tbGVmdDo0Ni44cHQ7DQoJbGluZS1oZWlnaHQ6 MTE1JTsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQoJYm9yZGVyOm5vbmU7DQoJbXNv LWJvcmRlci1ib3R0b20tYWx0OnNvbGlkICNGMDdGMDkgLjVwdDsNCgltc28tYm9yZGVyLWJvdHRv bS10aGVtZWNvbG9yOmFjY2VudDE7DQoJcGFkZGluZzowY207DQoJbXNvLXBhZGRpbmctYWx0OjBj bSAwY20gNC4wcHQgMGNtOw0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGli cmkiLCJzYW5zLXNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28t YXNjaWktdGhlbWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToi VGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1pbm9yLWZhcmVhc3Q7 DQoJbXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6 bWlub3ItbGF0aW47DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJ bXNvLWJpZGktdGhlbWUtZm9udDptaW5vci1iaWRpOw0KCWNvbG9yOiNGMDdGMDk7DQoJbXNvLXRo ZW1lY29sb3I6YWNjZW50MTsNCgltc28tYW5zaS1sYW5ndWFnZTpFTi1VUzsNCgltc28tZmFyZWFz dC1sYW5ndWFnZTpFTi1VUzsNCgltc28tYmlkaS1sYW5ndWFnZTpFTi1VUzsNCglmb250LXdlaWdo dDpib2xkOw0KCWZvbnQtc3R5bGU6aXRhbGljO30NCnNwYW4uTXNvU3VidGxlRW1waGFzaXMNCgl7 bXNvLXN0eWxlLXByaW9yaXR5OjE5Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxl LXFmb3JtYXQ6eWVzOw0KCWNvbG9yOmdyYXk7DQoJbXNvLXRoZW1lY29sb3I6dGV4dDE7DQoJbXNv LXRoZW1ldGludDoxMjc7DQoJZm9udC1zdHlsZTppdGFsaWM7fQ0Kc3Bhbi5Nc29JbnRlbnNlRW1w aGFzaXMNCgl7bXNvLXN0eWxlLXByaW9yaXR5OjIxOw0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJ bXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KCWNvbG9yOiNGMDdGMDk7DQoJbXNvLXRoZW1lY29sb3I6 YWNjZW50MTsNCglmb250LXdlaWdodDpib2xkOw0KCWZvbnQtc3R5bGU6aXRhbGljO30NCnNwYW4u TXNvU3VidGxlUmVmZXJlbmNlDQoJe21zby1zdHlsZS1wcmlvcml0eTozMTsNCgltc28tc3R5bGUt dW5oaWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCglmb250LXZhcmlhbnQ6c21hbGwt Y2FwczsNCgljb2xvcjojOUYyOTM2Ow0KCW1zby10aGVtZWNvbG9yOmFjY2VudDI7DQoJdGV4dC1k ZWNvcmF0aW9uOnVuZGVybGluZTsNCgl0ZXh0LXVuZGVybGluZTpzaW5nbGU7fQ0Kc3Bhbi5Nc29J bnRlbnNlUmVmZXJlbmNlDQoJe21zby1zdHlsZS1wcmlvcml0eTozMjsNCgltc28tc3R5bGUtdW5o aWRlOm5vOw0KCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCglmb250LXZhcmlhbnQ6c21hbGwtY2Fw czsNCgljb2xvcjojOUYyOTM2Ow0KCW1zby10aGVtZWNvbG9yOmFjY2VudDI7DQoJbGV0dGVyLXNw YWNpbmc6LjI1cHQ7DQoJZm9udC13ZWlnaHQ6Ym9sZDsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJs aW5lOw0KCXRleHQtdW5kZXJsaW5lOnNpbmdsZTt9DQpzcGFuLk1zb0Jvb2tUaXRsZQ0KCXttc28t c3R5bGUtcHJpb3JpdHk6MzM7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tc3R5bGUtcWZv cm1hdDp5ZXM7DQoJZm9udC12YXJpYW50OnNtYWxsLWNhcHM7DQoJbGV0dGVyLXNwYWNpbmc6LjI1 cHQ7DQoJZm9udC13ZWlnaHQ6Ym9sZDt9DQpwLk1zb1RvY0hlYWRpbmcsIGxpLk1zb1RvY0hlYWRp bmcsIGRpdi5Nc29Ub2NIZWFkaW5nDQoJe21zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHls ZS1wcmlvcml0eTozOTsNCgltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJbXNvLXN0eWxlLXBhcmVu dDoiSGVhZGluZyAxIjsNCgltc28tc3R5bGUtbmV4dDpOb3JtYWw7DQoJbWFyZ2luLXRvcDoyNC4w cHQ7DQoJbWFyZ2luLXJpZ2h0OjBjbTsNCgltYXJnaW4tYm90dG9tOjBjbTsNCgltYXJnaW4tbGVm dDowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWxpbmUtaGVpZ2h0OjExNSU7DQoJbXNv LXBhZ2luYXRpb246d2lkb3ctb3JwaGFuIGxpbmVzLXRvZ2V0aGVyOw0KCXBhZ2UtYnJlYWstYWZ0 ZXI6YXZvaWQ7DQoJZm9udC1zaXplOjE0LjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNl cmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUt Zm9udDptYWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJv bWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNp LWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47 DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhl bWUtZm9udDptYWpvci1iaWRpOw0KCWNvbG9yOiNCMzVFMDY7DQoJbXNvLXRoZW1lY29sb3I6YWNj ZW50MTsNCgltc28tdGhlbWVzaGFkZToxOTE7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tVVM7DQoJ bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6RU4tVVM7DQoJ Zm9udC13ZWlnaHQ6Ym9sZDt9DQpzcGFuLkhlYWRpbmcxQ2hhcg0KCXttc28tc3R5bGUtbmFtZToi SGVhZGluZyAxIENoYXIiOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5Ow0KCW1zby1zdHlsZS11bmhp ZGU6bm87DQoJbXNvLXN0eWxlLWxvY2tlZDp5ZXM7DQoJbXNvLXN0eWxlLWxpbms6IkhlYWRpbmcg MSI7DQoJbXNvLWFuc2ktZm9udC1zaXplOjE0LjBwdDsNCgltc28tYmlkaS1mb250LXNpemU6MTQu MHB0Ow0KCWZvbnQtZmFtaWx5OiJDYW1icmlhIiwic2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZh bWlseTpDYW1icmlhOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1m YXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1l LWZvbnQ6bWFqb3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCglt c28taGFuc2ktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToi VGltZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1ham9yLWJpZGk7DQoJY29s b3I6I0IzNUUwNjsNCgltc28tdGhlbWVjb2xvcjphY2NlbnQxOw0KCW1zby10aGVtZXNoYWRlOjE5 MTsNCglmb250LXdlaWdodDpib2xkO30NCnNwYW4uSGVhZGluZzJDaGFyDQoJe21zby1zdHlsZS1u YW1lOiJIZWFkaW5nIDIgQ2hhciI7DQoJbXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxl LXByaW9yaXR5Ojk7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tc3R5bGUtbG9ja2VkOnll czsNCgltc28tc3R5bGUtbGluazoiSGVhZGluZyAyIjsNCgltc28tYW5zaS1mb250LXNpemU6MTMu MHB0Ow0KCW1zby1iaWRpLWZvbnQtc2l6ZToxMy4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEi LCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRo ZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5l dyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1o YW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxh dGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRp LXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojRjA3RjA5Ow0KCW1zby10aGVtZWNvbG9y OmFjY2VudDE7DQoJZm9udC13ZWlnaHQ6Ym9sZDt9DQpzcGFuLkhlYWRpbmczQ2hhcg0KCXttc28t c3R5bGUtbmFtZToiSGVhZGluZyAzIENoYXIiOw0KCW1zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1z by1zdHlsZS1wcmlvcml0eTo5Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLWxv Y2tlZDp5ZXM7DQoJbXNvLXN0eWxlLWxpbms6IkhlYWRpbmcgMyI7DQoJZm9udC1mYW1pbHk6IkNh bWJyaWEiLCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFz Y2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRp bWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0K CW1zby1oYW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1h am9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1z by1iaWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojRjA3RjA5Ow0KCW1zby10aGVt ZWNvbG9yOmFjY2VudDE7DQoJZm9udC13ZWlnaHQ6Ym9sZDt9DQpzcGFuLkhlYWRpbmc0Q2hhcg0K CXttc28tc3R5bGUtbmFtZToiSGVhZGluZyA0IENoYXIiOw0KCW1zby1zdHlsZS1ub3Nob3c6eWVz Ow0KCW1zby1zdHlsZS1wcmlvcml0eTo5Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0 eWxlLWxvY2tlZDp5ZXM7DQoJbXNvLXN0eWxlLWxpbms6IkhlYWRpbmcgNCI7DQoJZm9udC1mYW1p bHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJ bXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1p bHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJl YXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1m b250Om1ham9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4i Ow0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCgljb2xvcjojRjA3RjA5Ow0KCW1z by10aGVtZWNvbG9yOmFjY2VudDE7DQoJZm9udC13ZWlnaHQ6Ym9sZDsNCglmb250LXN0eWxlOml0 YWxpYzt9DQpzcGFuLkhlYWRpbmc1Q2hhcg0KCXttc28tc3R5bGUtbmFtZToiSGVhZGluZyA1IENo YXIiOw0KCW1zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5Ow0KCW1z by1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLWxvY2tlZDp5ZXM7DQoJbXNvLXN0eWxlLWxp bms6IkhlYWRpbmcgNSI7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJbXNvLWFz Y2lpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0 aW47DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZh cmVhc3QtdGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpD YW1icmlhOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1iaWRpLWZv bnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWFqb3It YmlkaTsNCgljb2xvcjojNzczRjA0Ow0KCW1zby10aGVtZWNvbG9yOmFjY2VudDE7DQoJbXNvLXRo ZW1lc2hhZGU6MTI3O30NCnNwYW4uSGVhZGluZzZDaGFyDQoJe21zby1zdHlsZS1uYW1lOiJIZWFk aW5nIDYgQ2hhciI7DQoJbXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5 Ojk7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tc3R5bGUtbG9ja2VkOnllczsNCgltc28t c3R5bGUtbGluazoiSGVhZGluZyA2IjsNCglmb250LWZhbWlseToiQ2FtYnJpYSIsInNlcmlmIjsN Cgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWktdGhlbWUtZm9udDpt YWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsN Cgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNvLWhhbnNpLWZvbnQt ZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJbXNv LWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJpZGktdGhlbWUtZm9u dDptYWpvci1iaWRpOw0KCWNvbG9yOiM3NzNGMDQ7DQoJbXNvLXRoZW1lY29sb3I6YWNjZW50MTsN Cgltc28tdGhlbWVzaGFkZToxMjc7DQoJZm9udC1zdHlsZTppdGFsaWM7fQ0Kc3Bhbi5IZWFkaW5n N0NoYXINCgl7bXNvLXN0eWxlLW5hbWU6IkhlYWRpbmcgNyBDaGFyIjsNCgltc28tc3R5bGUtbm9z aG93OnllczsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0K CW1zby1zdHlsZS1sb2NrZWQ6eWVzOw0KCW1zby1zdHlsZS1saW5rOiJIZWFkaW5nIDciOw0KCWZv bnQtZmFtaWx5OiJDYW1icmlhIiwic2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWlseTpDYW1i cmlhOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1mYXJlYXN0LWZv bnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWFq b3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28taGFuc2kt dGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3 IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1ham9yLWJpZGk7DQoJY29sb3I6IzQwNDA0 MDsNCgltc28tdGhlbWVjb2xvcjp0ZXh0MTsNCgltc28tdGhlbWV0aW50OjE5MTsNCglmb250LXN0 eWxlOml0YWxpYzt9DQpzcGFuLkhlYWRpbmc4Q2hhcg0KCXttc28tc3R5bGUtbmFtZToiSGVhZGlu ZyA4IENoYXIiOw0KCW1zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5 Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLWxvY2tlZDp5ZXM7DQoJbXNvLXN0 eWxlLWxpbms6IkhlYWRpbmcgOCI7DQoJbXNvLWFuc2ktZm9udC1zaXplOjEwLjBwdDsNCgltc28t YmlkaS1mb250LXNpemU6MTAuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYW1icmlhIiwic2VyaWYiOw0K CW1zby1hc2NpaS1mb250LWZhbWlseTpDYW1icmlhOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1h am9yLWxhdGluOw0KCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0K CW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWFqb3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1m YW1pbHk6Q2FtYnJpYTsNCgltc28taGFuc2ktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28t YmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250 Om1ham9yLWJpZGk7DQoJY29sb3I6I0YwN0YwOTsNCgltc28tdGhlbWVjb2xvcjphY2NlbnQxO30N CnNwYW4uSGVhZGluZzlDaGFyDQoJe21zby1zdHlsZS1uYW1lOiJIZWFkaW5nIDkgQ2hhciI7DQoJ bXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk7DQoJbXNvLXN0eWxl LXVuaGlkZTpubzsNCgltc28tc3R5bGUtbG9ja2VkOnllczsNCgltc28tc3R5bGUtbGluazoiSGVh ZGluZyA5IjsNCgltc28tYW5zaS1mb250LXNpemU6MTAuMHB0Ow0KCW1zby1iaWRpLWZvbnQtc2l6 ZToxMC4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJbXNvLWFzY2lpLWZv bnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQoJ bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3Qt dGhlbWUtZm9udDptYWpvci1mYXJlYXN0Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYW1icmlh Ow0KCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1iaWRpLWZvbnQtZmFt aWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsN Cgljb2xvcjojNDA0MDQwOw0KCW1zby10aGVtZWNvbG9yOnRleHQxOw0KCW1zby10aGVtZXRpbnQ6 MTkxOw0KCWZvbnQtc3R5bGU6aXRhbGljO30NCnNwYW4uSGVhZGVyQ2hhcg0KCXttc28tc3R5bGUt bmFtZToiSGVhZGVyIENoYXIiOw0KCW1zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1w cmlvcml0eTo5OTsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1sb2NrZWQ6eWVz Ow0KCW1zby1zdHlsZS1saW5rOkhlYWRlcjsNCgltc28tYW5zaS1mb250LXNpemU6MTEuMHB0Ow0K CW1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQ7fQ0Kc3Bhbi5Gb290ZXJDaGFyDQoJe21zby1zdHls ZS1uYW1lOiJGb290ZXIgQ2hhciI7DQoJbXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxl LXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLWxvY2tlZDp5 ZXM7DQoJbXNvLXN0eWxlLWxpbms6Rm9vdGVyOw0KCW1zby1hbnNpLWZvbnQtc2l6ZToxMS4wcHQ7 DQoJbXNvLWJpZGktZm9udC1zaXplOjExLjBwdDt9DQpzcGFuLlRpdGxlQ2hhcg0KCXttc28tc3R5 bGUtbmFtZToiVGl0bGUgQ2hhciI7DQoJbXNvLXN0eWxlLXByaW9yaXR5OjEwOw0KCW1zby1zdHls ZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLWxvY2tlZDp5ZXM7DQoJbXNvLXN0eWxlLWxpbms6VGl0 bGU7DQoJbXNvLWFuc2ktZm9udC1zaXplOjI2LjBwdDsNCgltc28tYmlkaS1mb250LXNpemU6MjYu MHB0Ow0KCWZvbnQtZmFtaWx5OiJDYW1icmlhIiwic2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZh bWlseTpDYW1icmlhOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KCW1zby1m YXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1l LWZvbnQ6bWFqb3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCglt c28taGFuc2ktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToi VGltZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1ham9yLWJpZGk7DQoJY29s b3I6IzI1MjUyNTsNCgltc28tdGhlbWVjb2xvcjp0ZXh0MjsNCgltc28tdGhlbWVzaGFkZToxOTE7 DQoJbGV0dGVyLXNwYWNpbmc6LjI1cHQ7DQoJbXNvLWZvbnQta2VybmluZzoxNC4wcHQ7fQ0Kc3Bh bi5TdWJ0aXRsZUNoYXINCgl7bXNvLXN0eWxlLW5hbWU6IlN1YnRpdGxlIENoYXIiOw0KCW1zby1z dHlsZS1wcmlvcml0eToxMTsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1sb2Nr ZWQ6eWVzOw0KCW1zby1zdHlsZS1saW5rOlN1YnRpdGxlOw0KCW1zby1hbnNpLWZvbnQtc2l6ZTox Mi4wcHQ7DQoJbXNvLWJpZGktZm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiQ2FtYnJp YSIsInNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCgltc28tYXNjaWkt dGhlbWUtZm9udDptYWpvci1sYXRpbjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMg TmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQoJbXNv LWhhbnNpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQoJbXNvLWhhbnNpLXRoZW1lLWZvbnQ6bWFqb3It bGF0aW47DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWJp ZGktdGhlbWUtZm9udDptYWpvci1iaWRpOw0KCWNvbG9yOiNGMDdGMDk7DQoJbXNvLXRoZW1lY29s b3I6YWNjZW50MTsNCglsZXR0ZXItc3BhY2luZzouNzVwdDsNCglmb250LXN0eWxlOml0YWxpYzt9 DQpzcGFuLkJhbGxvb25UZXh0Q2hhcg0KCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IENo YXIiOw0KCW1zby1zdHlsZS1ub3Nob3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5OTsNCglt c28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1sb2NrZWQ6eWVzOw0KCW1zby1zdHlsZS1s aW5rOiJCYWxsb29uIFRleHQiOw0KCW1zby1hbnNpLWZvbnQtc2l6ZTo4LjBwdDsNCgltc28tYmlk aS1mb250LXNpemU6OC4wcHQ7DQoJZm9udC1mYW1pbHk6IlRhaG9tYSIsInNhbnMtc2VyaWYiOw0K CW1zby1hc2NpaS1mb250LWZhbWlseTpUYWhvbWE7DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6 IlRpbWVzIE5ldyBSb21hbiI7DQoJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0 Ow0KCW1zby1oYW5zaS1mb250LWZhbWlseTpUYWhvbWE7DQoJbXNvLWJpZGktZm9udC1mYW1pbHk6 VGFob21hO30NCnNwYW4uTm9TcGFjaW5nQ2hhcg0KCXttc28tc3R5bGUtbmFtZToiTm8gU3BhY2lu ZyBDaGFyIjsNCgltc28tc3R5bGUtcHJpb3JpdHk6MTsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0K CW1zby1zdHlsZS1sb2NrZWQ6eWVzOw0KCW1zby1zdHlsZS1saW5rOiJObyBTcGFjaW5nIjt9DQpz cGFuLlF1b3RlQ2hhcg0KCXttc28tc3R5bGUtbmFtZToiUXVvdGUgQ2hhciI7DQoJbXNvLXN0eWxl LXByaW9yaXR5OjI5Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLWxvY2tlZDp5 ZXM7DQoJbXNvLXN0eWxlLWxpbms6UXVvdGU7DQoJY29sb3I6YmxhY2s7DQoJbXNvLXRoZW1lY29s b3I6dGV4dDE7DQoJZm9udC1zdHlsZTppdGFsaWM7fQ0Kc3Bhbi5JbnRlbnNlUXVvdGVDaGFyDQoJ e21zby1zdHlsZS1uYW1lOiJJbnRlbnNlIFF1b3RlIENoYXIiOw0KCW1zby1zdHlsZS1wcmlvcml0 eTozMDsNCgltc28tc3R5bGUtdW5oaWRlOm5vOw0KCW1zby1zdHlsZS1sb2NrZWQ6eWVzOw0KCW1z by1zdHlsZS1saW5rOiJJbnRlbnNlIFF1b3RlIjsNCgljb2xvcjojRjA3RjA5Ow0KCW1zby10aGVt ZWNvbG9yOmFjY2VudDE7DQoJZm9udC13ZWlnaHQ6Ym9sZDsNCglmb250LXN0eWxlOml0YWxpYzt9 DQpwLnQxOHcsIGxpLnQxOHcsIGRpdi50MTh3DQoJe21zby1zdHlsZS1uYW1lOnQxOHc7DQoJbXNv LXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLW1hcmdpbi10 b3AtYWx0OmF1dG87DQoJbWFyZ2luLXJpZ2h0OjBjbTsNCgltc28tbWFyZ2luLWJvdHRvbS1hbHQ6 YXV0bzsNCgltYXJnaW4tbGVmdDowY207DQoJbGluZS1oZWlnaHQ6bm9ybWFsOw0KCW1zby1wYWdp bmF0aW9uOndpZG93LW9ycGhhbjsNCglmb250LXNpemU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5OiJU aW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVz IE5ldyBSb21hbiI7DQoJbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7DQoJbXNvLWZhcmVhc3QtbGFu Z3VhZ2U6RU4tR0I7DQoJbXNvLWJpZGktbGFuZ3VhZ2U6QVItU0E7fQ0KcC5ibHVlMywgbGkuYmx1 ZTMsIGRpdi5ibHVlMw0KCXttc28tc3R5bGUtbmFtZTpibHVlMzsNCgltc28tc3R5bGUtcHJpb3Jp dHk6OTk7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsN CgltYXJnaW4tcmlnaHQ6MGNtOw0KCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOw0KCW1hcmdp bi1sZWZ0OjBjbTsNCglsaW5lLWhlaWdodDpub3JtYWw7DQoJbXNvLXBhZ2luYXRpb246d2lkb3ct b3JwaGFuOw0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21h biIsInNlcmlmIjsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsN Cgltc28tYW5zaS1sYW5ndWFnZTpFTi1HQjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjsN Cgltc28tYmlkaS1sYW5ndWFnZTpBUi1TQTt9DQpzcGFuLmFwcGxlLWNvbnZlcnRlZC1zcGFjZQ0K CXttc28tc3R5bGUtbmFtZTphcHBsZS1jb252ZXJ0ZWQtc3BhY2U7DQoJbXNvLXN0eWxlLXVuaGlk ZTpubzt9DQpzcGFuLnJlZA0KCXttc28tc3R5bGUtbmFtZTpyZWQ7DQoJbXNvLXN0eWxlLXVuaGlk ZTpubzt9DQpzcGFuLlNwZWxsRQ0KCXttc28tc3R5bGUtbmFtZToiIjsNCgltc28tc3BsLWU6eWVz O30NCnNwYW4uR3JhbUUNCgl7bXNvLXN0eWxlLW5hbWU6IiI7DQoJbXNvLWdyYW0tZTp5ZXM7fQ0K Lk1zb0NocERlZmF1bHQNCgl7bXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7DQoJbXNvLWRlZmF1 bHQtcHJvcHM6eWVzOw0KCWZvbnQtc2l6ZToxMC4wcHQ7DQoJbXNvLWFuc2ktZm9udC1zaXplOjEw LjBwdDsNCgltc28tYmlkaS1mb250LXNpemU6MTAuMHB0Ow0KCW1zby1hc2NpaS1mb250LWZhbWls eTpDYWxpYnJpOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1mYXJl YXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCW1zby1mYXJlYXN0LXRoZW1lLWZv bnQ6bWlub3ItZmFyZWFzdDsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28t aGFuc2ktdGhlbWUtZm9udDptaW5vci1sYXRpbjsNCgltc28tYmlkaS1mb250LWZhbWlseToiVGlt ZXMgTmV3IFJvbWFuIjsNCgltc28tYmlkaS10aGVtZS1mb250Om1pbm9yLWJpZGk7DQoJbXNvLWFu c2ktbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7DQoJbXNvLWJp ZGktbGFuZ3VhZ2U6RU4tVVM7fQ0KIC8qIFBhZ2UgRGVmaW5pdGlvbnMgKi8NCiBAcGFnZQ0KCXtt c28tZm9vdG5vdGUtc2VwYXJhdG9yOnVybCgiaGluZXQlMjBhY3RpdmF0aW9uJTIwXCgyXClfZmls ZXMvaGVhZGVyLmh0bWwiKSBmczsNCgltc28tZm9vdG5vdGUtY29udGludWF0aW9uLXNlcGFyYXRv cjp1cmwoImhpbmV0JTIwYWN0aXZhdGlvbiUyMFwoMlwpX2ZpbGVzL2hlYWRlci5odG1sIikgZmNz Ow0KCW1zby1lbmRub3RlLXNlcGFyYXRvcjp1cmwoImhpbmV0JTIwYWN0aXZhdGlvbiUyMFwoMlwp X2ZpbGVzL2hlYWRlci5odG1sIikgZXM7DQoJbXNvLWVuZG5vdGUtY29udGludWF0aW9uLXNlcGFy YXRvcjp1cmwoImhpbmV0JTIwYWN0aXZhdGlvbiUyMFwoMlwpX2ZpbGVzL2hlYWRlci5odG1sIikg ZWNzO30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjYxMi4wcHQgNzkyLjBwdDsNCgltYXJn aW46NzIuMHB0IDcyLjBwdCA3Mi4wcHQgNzIuMHB0Ow0KCW1zby1oZWFkZXItbWFyZ2luOjM2LjBw dDsNCgltc28tZm9vdGVyLW1hcmdpbjozNi4wcHQ7DQoJbXNvLWV2ZW4taGVhZGVyOnVybCgiaGlu ZXQlMjBhY3RpdmF0aW9uJTIwXCgyXClfZmlsZXMvaGVhZGVyLmh0bWwiKSBlaDE7DQoJbXNvLWhl YWRlcjp1cmwoImhpbmV0JTIwYWN0aXZhdGlvbiUyMFwoMlwpX2ZpbGVzL2hlYWRlci5odG1sIikg aDE7DQoJbXNvLWV2ZW4tZm9vdGVyOnVybCgiaGluZXQlMjBhY3RpdmF0aW9uJTIwXCgyXClfZmls ZXMvaGVhZGVyLmh0bWwiKSBlZjE7DQoJbXNvLWZvb3Rlcjp1cmwoImhpbmV0JTIwYWN0aXZhdGlv biUyMFwoMlwpX2ZpbGVzL2hlYWRlci5odG1sIikgZjE7DQoJbXNvLWZpcnN0LWhlYWRlcjp1cmwo ImhpbmV0JTIwYWN0aXZhdGlvbiUyMFwoMlwpX2ZpbGVzL2hlYWRlci5odG1sIikgZmgxOw0KCW1z by1maXJzdC1mb290ZXI6dXJsKCJoaW5ldCUyMGFjdGl2YXRpb24lMjBcKDJcKV9maWxlcy9oZWFk ZXIuaHRtbCIpIGZmMTsNCgltc28tcGFwZXItc291cmNlOjA7fQ0KZGl2LldvcmRTZWN0aW9uMQ0K CXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT4NCjwvc3R5bGU+DQo8IS0tW2lmIGd0ZSBtc28gMTBd Pg0KPHN0eWxlPg0KIC8qIFN0eWxlIERlZmluaXRpb25zICovDQogdGFibGUuTXNvTm9ybWFsVGFi bGUNCgl7bXNvLXN0eWxlLW5hbWU6IlRhYmxlIE5vcm1hbCI7DQoJbXNvLXRzdHlsZS1yb3diYW5k LXNpemU6MDsNCgltc28tdHN0eWxlLWNvbGJhbmQtc2l6ZTowOw0KCW1zby1zdHlsZS1ub3Nob3c6 eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5OTsNCgltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQoJ bXNvLXN0eWxlLXBhcmVudDoiIjsNCgltc28tcGFkZGluZy1hbHQ6MGNtIDUuNHB0IDBjbSA1LjRw dDsNCgltc28tcGFyYS1tYXJnaW46MGNtOw0KCW1zby1wYXJhLW1hcmdpbi1ib3R0b206LjAwMDFw dDsNCgltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQoJZm9udC1zaXplOjEwLjBwdDsNCglm b250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWls eTpDYWxpYnJpOw0KCW1zby1hc2NpaS10aGVtZS1mb250Om1pbm9yLWxhdGluOw0KCW1zby1oYW5z aS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5zaS10aGVtZS1mb250Om1pbm9yLWxhdGlu Ow0KCW1zby1hbnNpLWxhbmd1YWdlOkVOLVVTOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVT Ow0KCW1zby1iaWRpLWxhbmd1YWdlOkVOLVVTO30NCjwvc3R5bGU+DQo8IVtlbmRpZl0tLT48IS0t W2lmIGd0ZSBtc28gOV0+PHhtbD4NCiA8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlk bWF4PSIyOTY5OCI+DQogIDxvOmNvbG9ybWVudSB2OmV4dD0iZWRpdCIgZmlsbGNvbG9yPSIjOTJk MDUwIi8+DQogPC9vOnNoYXBlZGVmYXVsdHM+PC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUg bXNvIDldPjx4bWw+DQogPG86c2hhcGVsYXlvdXQgdjpleHQ9ImVkaXQiPg0KICA8bzppZG1hcCB2 OmV4dD0iZWRpdCIgZGF0YT0iMSIvPg0KIDwvbzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0t LT4NCjwvaGVhZD4NCg0KPGJvZHkgYmdjb2xvcj0iIzkyRDA1MCIgbGFuZz1FTi1HQiBsaW5rPWJs dWUgdmxpbms9cHVycGxlIHN0eWxlPSd0YWItaW50ZXJ2YWw6DQozNi4wcHQnPg0KDQo8ZGl2IGNs YXNzPVdvcmRTZWN0aW9uMT4NCg0KPGRpdiBhbGlnbj1jZW50ZXI+DQoNCjx0YWJsZSBjbGFzcz1N c29Ob3JtYWxUYWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTAgd2lkdGg9 IjEwMCUiDQogc3R5bGU9J3dpZHRoOjEwMC4wJTttc28tY2VsbHNwYWNpbmc6MGNtO21zby15ZnRp LXRibGxvb2s6MTE4NDttc28tcGFkZGluZy1hbHQ6DQogMGNtIDBjbSAwY20gMGNtJz4NCiA8dHIg c3R5bGU9J21zby15ZnRpLWlyb3c6MDttc28teWZ0aS1maXJzdHJvdzp5ZXM7bXNvLXlmdGktbGFz dHJvdzp5ZXMnPg0KICA8dGQgc3R5bGU9J3BhZGRpbmc6MGNtIDBjbSAwY20gMGNtJz4NCiAgPHAg Y2xhc3M9TXNvTm9ybWFsIGFsaWduPXJpZ2h0IHN0eWxlPSdtYXJnaW4tYm90dG9tOjBjbTttYXJn aW4tYm90dG9tOi4wMDAxcHQ7DQogIHRleHQtYWxpZ246cmlnaHQ7bGluZS1oZWlnaHQ6MTYuNXB0 Jz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDsNCiAgZm9udC1mYW1pbHk6Ik1TIE1pbmNo byI7bXNvLWJpZGktZm9udC1mYW1pbHk6Ik1TIE1pbmNobyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQog IEVOLUdCO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNB Jz4mIzEyMzA0Ozwvc3Bhbj48c3Bhbg0KICBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlk aS1mb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7 DQogIG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO21zby1hbnNpLWxh bmd1YWdlOkVOLUdCO21zby1mYXJlYXN0LWxhbmd1YWdlOg0KICBFTi1HQjttc28tYmlkaS1sYW5n dWFnZTpBUi1TQSc+Jm5ic3A7PC9zcGFuPjxzcGFuIGNsYXNzPVNwZWxsRT48c3Bhbg0KICBzdHls ZT0nZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseToiTVMgTWluY2hvIjttc28tYmlkaS1mb250 LWZhbWlseToiTVMgTWluY2hvIjsNCiAgbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVh c3QtbGFuZ3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPiYjMjMzODM7JiMzOTYz Njs8L3NwYW4+PC9zcGFuPjxzcGFuDQogIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRp LWZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjsN CiAgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWFuc2ktbGFu Z3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6DQogIEVOLUdCO21zby1iaWRpLWxhbmd1 YWdlOkFSLVNBJz4mbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQog IGZvbnQtZmFtaWx5OiJNUyBNaW5jaG8iO21zby1iaWRpLWZvbnQtZmFtaWx5OiJNUyBNaW5jaG8i O21zby1hbnNpLWxhbmd1YWdlOg0KICBFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjtt c28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+JiMxMjMwNTs8L3NwYW4+PHNwYW4NCiAgc3R5bGU9J2Zv bnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjttc28t ZmFyZWFzdC1mb250LWZhbWlseToNCiAgIlRpbWVzIE5ldyBSb21hbiI7bXNvLWFuc2ktbGFuZ3Vh Z2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7DQogIG1zby1iaWRpLWxhbmd1YWdl OkFSLVNBJz4gPC9zcGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5 Og0KICAiTVMgTWluY2hvIjttc28tYmlkaS1mb250LWZhbWlseToiTVMgTWluY2hvIjttc28tYW5z aS1sYW5ndWFnZTpFTi1HQjsNCiAgbXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7bXNvLWJpZGkt bGFuZ3VhZ2U6QVItU0EnPiYjMTIzMDQ7PC9zcGFuPjxzcGFuDQogIHN0eWxlPSdmb250LXNpemU6 MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBS b21hbiIsInNlcmlmIjsNCiAgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21h biI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6DQogIEVOLUdC O21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4mbmJzcDs8L3NwYW4+PHNwYW4gY2xhc3M9U3BlbGxF PjxzcGFuDQogIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiJNUyBNaW5jaG8i O21zby1iaWRpLWZvbnQtZmFtaWx5OiJNUyBNaW5jaG8iOw0KICBtc28tYW5zaS1sYW5ndWFnZTpF Ti1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+ JiMzNTQ4NjsmIzMxOTk1Ozwvc3Bhbj48L3NwYW4+PHNwYW4NCiAgc3R5bGU9J2ZvbnQtc2l6ZTox MC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseToiVGltZXMgTmV3IFJv bWFuIiwic2VyaWYiOw0KICBtc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFu Ijttc28tYW5zaS1sYW5ndWFnZTpFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZToNCiAgRU4tR0I7 bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0nZm9udC1z aXplOjEwLjBwdDsNCiAgZm9udC1mYW1pbHk6Ik1TIE1pbmNobyI7bXNvLWJpZGktZm9udC1mYW1p bHk6Ik1TIE1pbmNobyI7bXNvLWFuc2ktbGFuZ3VhZ2U6DQogIEVOLUdCO21zby1mYXJlYXN0LWxh bmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4mIzEyMzA1Ozwvc3Bhbj48c3Bh bg0KICBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0O2Zv bnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7DQogIG1zby1mYXJlYXN0LWZvbnQt ZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO21zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21zby1mYXJl YXN0LWxhbmd1YWdlOg0KICBFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+Jm5ic3A7PC9z cGFuPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Ow0KICBmb250LWZhbWlseToiVGltZXMg TmV3IFJvbWFuIiwic2VyaWYiO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9t YW4iOw0KICBtc28tYW5zaS1sYW5ndWFnZTpFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1H Qjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+PG86cD48L286cD48L3NwYW4+PC9wPg0KICA8L3Rk Pg0KIDwvdHI+DQo8L3RhYmxlPg0KDQo8L2Rpdj4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxl PSdtYXJnaW4tYm90dG9tOjBjbTttYXJnaW4tYm90dG9tOi4wMDAxcHQ7bGluZS1oZWlnaHQ6DQpu b3JtYWwnPjxzcGFuIGNsYXNzPUdyYW1FPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTMuNXB0O2Zv bnQtZmFtaWx5OlN5bWJvbDsNCm1zby1hc2NpaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFu Ijttc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCm1zby1iaWRpLWZv bnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2NvbG9yOiM2NjY2NjY7bXNvLWFuc2ktbGFuZ3Vh Z2U6RU4tR0I7DQptc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpB Ui1TQSc+Jm1pZGRvdDs8L3NwYW4+PHNwYW4NCnN0eWxlPSdmb250LXNpemU6MTMuNXB0O2ZvbnQt ZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6 DQoiVGltZXMgTmV3IFJvbWFuIjtjb2xvcjojNjY2NjY2O21zby1hbnNpLWxhbmd1YWdlOkVOLUdC O21zby1mYXJlYXN0LWxhbmd1YWdlOg0KRU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPjxz cGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz4mbmJzcDsgPC9zcGFuPjwvc3Bhbj48L3NwYW4+ PHNwYW4NCnN0eWxlPSdmb250LXNpemU6MTMuNXB0O2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9t YW4iLCJzZXJpZiI7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6DQoiVGltZXMgTmV3IFJvbWFuIjtj b2xvcjojNjY2NjY2O21zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21zby1mYXJlYXN0LWxhbmd1YWdl Og0KRU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPjxhDQpocmVmPSJodHRwOi8vd3d3LjI0 bm92YS5jb20vYm94YmlsbC9uZXQvd2VibWFpbC5oaW5ldC5uZXQvaW5kZXguaHRtbCINCnRhcmdl dD0iX2JsYW5rIj48c3BhbiBzdHlsZT0nbXNvLWJpZGktZm9udC1zaXplOjExLjBwdDtjb2xvcjoj MDAzMzg4Ow0KdGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC11bmRlcmxpbmU6bm9uZSc+TUVNQkVS IENFTlRFUjwvc3Bhbj48L2E+PCEtLVtpZiBndGUgdm1sIDFdPjx2OnNoYXBldHlwZQ0KIGlkPSJf eDAwMDBfdDc1IiBjb29yZHNpemU9IjIxNjAwLDIxNjAwIiBvOnNwdD0iNzUiIG86cHJlZmVycmVs YXRpdmU9InQiDQogcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJv a2VkPSJmIj4NCiA8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPg0KIDx2OmZvcm11bGFzPg0K ICA8djpmIGVxbj0iaWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiLz4NCiAgPHY6ZiBlcW49 InN1bSBAMCAxIDAiLz4NCiAgPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4NCiAgPHY6ZiBlcW49InBy b2QgQDIgMSAyIi8+DQogIDx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsV2lkdGgiLz4NCiAg PHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4NCiAgPHY6ZiBlcW49InN1bSBA MCAwIDEiLz4NCiAgPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+DQogIDx2OmYgZXFuPSJwcm9kIEA3 IDIxNjAwIHBpeGVsV2lkdGgiLz4NCiAgPHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIi8+DQogIDx2 OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+DQogIDx2OmYgZXFuPSJzdW0gQDEw IDIxNjAwIDAiLz4NCiA8L3Y6Zm9ybXVsYXM+DQogPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBn cmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4NCiA8bzpsb2NrIHY6ZXh0 PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPg0KPC92OnNoYXBldHlwZT48djpzaGFwZSBpZD0iX3gw MDAwX2kxMDI1IiB0eXBlPSIjX3gwMDAwX3Q3NSIgYWx0PSIiIHN0eWxlPSd3aWR0aDozLjc1cHQ7 DQogaGVpZ2h0OjYuNzVwdCcvPjwhW2VuZGlmXS0tPjwhW2lmICF2bWxdPjxpbWcgYm9yZGVyPTAg d2lkdGg9NSBoZWlnaHQ9OQ0Kc3JjPSJoaW5ldCUyMGFjdGl2YXRpb24lMjAoMilfZmlsZXMvaW1h Z2UwMDMuZ2lmIiB2OnNoYXBlcz0iX3gwMDAwX2kxMDI1Ij48IVtlbmRpZl0+PG86cD48L286cD48 L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1ib3R0b206MGNt O21hcmdpbi1ib3R0b206LjAwMDFwdDtsaW5lLWhlaWdodDoNCm5vcm1hbCc+PHNwYW4gY2xhc3M9 R3JhbUU+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6U3ltYm9sOw0K bXNvLWFzY2lpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO21zby1mYXJlYXN0LWZvbnQt ZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5l dyBSb21hbiI7Y29sb3I6IzY2NjY2Njttc28tYW5zaS1sYW5ndWFnZTpFTi1HQjsNCm1zby1mYXJl YXN0LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4mbWlkZG90Ozwvc3Bh bj48c3Bhbg0Kc3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBS b21hbiIsInNlcmlmIjttc28tZmFyZWFzdC1mb250LWZhbWlseToNCiJUaW1lcyBOZXcgUm9tYW4i O2NvbG9yOiM2NjY2NjY7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3Vh Z2U6DQpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+PHNwYW4gc3R5bGU9J21zby1zcGFj ZXJ1bjp5ZXMnPiZuYnNwOyA8L3NwYW4+PC9zcGFuPjwvc3Bhbj48c3Bhbg0Kc3R5bGU9J2ZvbnQt c2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjttc28tZmFy ZWFzdC1mb250LWZhbWlseToNCiJUaW1lcyBOZXcgUm9tYW4iO2NvbG9yOiM2NjY2NjY7bXNvLWFu c2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6DQpFTi1HQjttc28tYmlkaS1s YW5ndWFnZTpBUi1TQSc+PGENCmhyZWY9Imh0dHA6Ly93d3cuMjRub3ZhLmNvbS9ib3hiaWxsL25l dC93ZWJtYWlsLmhpbmV0Lm5ldC9pbmRleC5odG1sIg0KdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0 eWxlPSdtc28tYmlkaS1mb250LXNpemU6MTEuMHB0O2NvbG9yOiMwMDMzODg7DQp0ZXh0LWRlY29y YXRpb246bm9uZTt0ZXh0LXVuZGVybGluZTpub25lJz5DaHVuZ2h3YSA8c3BhbiBjbGFzcz1TcGVs bEU+SGlOZXQ8L3NwYW4+DQpXZWJtYWlsIEFjY291bnQ8L3NwYW4+PC9hPjxvOnA+PC9vOnA+PC9z cGFuPjwvcD4NCg0KPGRpdiBhbGlnbj1jZW50ZXI+DQoNCjx0YWJsZSBjbGFzcz1Nc29Ob3JtYWxU YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTAgd2lkdGg9ODIwDQogc3R5 bGU9J3dpZHRoOjYxNS4wcHQ7bXNvLWNlbGxzcGFjaW5nOjBjbTttc28teWZ0aS10Ymxsb29rOjEx ODQ7bXNvLXBhZGRpbmctYWx0Og0KIDBjbSAwY20gMGNtIDBjbSc+DQogPHRyIHN0eWxlPSdtc28t eWZ0aS1pcm93OjA7bXNvLXlmdGktZmlyc3Ryb3c6eWVzO21zby15ZnRpLWxhc3Ryb3c6eWVzJz4N CiAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kOndoaXRlO3BhZGRpbmc6MGNtIDBjbSAwY20gMGNtJz4N CiAgPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBjbTttYXJnaW4tYm90 dG9tOi4wMDAxcHQ7bGluZS1oZWlnaHQ6DQogIG5vcm1hbCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6 ZToxMi4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjsNCiAgbXNvLWZh cmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4t R0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6DQogIEVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNB Jz48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQogIDxwIGNsYXNzPU1zb05vcm1hbCBzdHls ZT0nbWFyZ2luLWJvdHRvbTowY207bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUtaGVpZ2h0Og0K ICBub3JtYWwnPjxzcGFuIGxhbmc9RU4tVVM+PGENCiAgaHJlZj0iaHR0cDovL3d3dy4yNG5vdmEu Y29tL2JveGJpbGwvbmV0L3dlYm1haWwuaGluZXQubmV0L2luZGV4Lmh0bWwiPjxzcGFuDQogIGxh bmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMi4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBS b21hbiIsInNlcmlmIjsNCiAgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21h biI7Y29sb3I6d2luZG93dGV4dDttc28tYW5zaS1sYW5ndWFnZToNCiAgRU4tR0I7bXNvLWZhcmVh c3QtbGFuZ3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0E7bXNvLW5vLXByb29mOnll czsNCiAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC11bmRlcmxpbmU6bm9uZSc+PCEtLVtpZiBn dGUgdm1sIDFdPjx2OnNoYXBlIGlkPSJQaWN0dXJlX3gwMDIwXzAiDQogICBvOnNwaWQ9Il94MDAw MF9pMTAyNiIgdHlwZT0iI194MDAwMF90NzUiIGFsdD0iMzAweDEwMC0wNDI1b3RwMDIuZ2lmIg0K ICAgaHJlZj0iaHR0cDovL3d3dy4yNG5vdmEuY29tL2JveGJpbGwvbmV0L3dlYm1haWwuaGluZXQu bmV0L2luZGV4Lmh0bWwiDQogICBzdHlsZT0nd2lkdGg6NjM1LjI1cHQ7aGVpZ2h0Ojc1cHQ7dmlz aWJpbGl0eTp2aXNpYmxlO21zby13cmFwLXN0eWxlOnNxdWFyZScNCiAgIG86YnV0dG9uPSJ0Ij4N CiAgIDx2OmZpbGwgbzpkZXRlY3Rtb3VzZWNsaWNrPSJ0Ii8+DQogICA8djppbWFnZWRhdGEgc3Jj PSJoaW5ldCUyMGFjdGl2YXRpb24lMjAoMilfZmlsZXMvaW1hZ2UwMDIuZ2lmIiBvOnRpdGxlPSIz MDB4MTAwLTA0MjVvdHAwMiIvPg0KICA8L3Y6c2hhcGU+PCFbZW5kaWZdLS0+PCFbaWYgIXZtbF0+ PHNwYW4gc3R5bGU9J21zby1pZ25vcmU6dmdsYXlvdXQnPjxpbWcNCiAgYm9yZGVyPTAgd2lkdGg9 ODQ3IGhlaWdodD0xMDANCiAgc3JjPSJoaW5ldCUyMGFjdGl2YXRpb24lMjAoMilfZmlsZXMvaW1h Z2UwMDIuZ2lmIiBhbHQ9MzAweDEwMC0wNDI1b3RwMDIuZ2lmDQogIHY6c2hhcGVzPSJQaWN0dXJl X3gwMDIwXzAiPjwvc3Bhbj48IVtlbmRpZl0+PC9zcGFuPjwvYT48L3NwYW4+PHNwYW4NCiAgc3R5 bGU9J2ZvbnQtc2l6ZToxMi4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlm Ijttc28tZmFyZWFzdC1mb250LWZhbWlseToNCiAgIlRpbWVzIE5ldyBSb21hbiI7bXNvLWFuc2kt bGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7DQogIG1zby1iaWRpLWxh bmd1YWdlOkFSLVNBJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQogIDxkaXYgYWxpZ249Y2VudGVy Pg0KICA8dGFibGUgY2xhc3M9TXNvTm9ybWFsVGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBj ZWxscGFkZGluZz0wIHdpZHRoPTc5MQ0KICAgc3R5bGU9J3dpZHRoOjU5My4yNXB0O21zby1jZWxs c3BhY2luZzowY207bXNvLXlmdGktdGJsbG9vazoxMTg0O21zby1wYWRkaW5nLWFsdDoNCiAgIDQu NXB0IDQuNXB0IDQuNXB0IDQuNXB0Jz4NCiAgIDx0ciBzdHlsZT0nbXNvLXlmdGktaXJvdzowO21z by15ZnRpLWZpcnN0cm93Onllczttc28teWZ0aS1sYXN0cm93OnllczsNCiAgICBoZWlnaHQ6MjEw LjBwdCc+DQogICAgPHRkIHN0eWxlPSdwYWRkaW5nOjQuNXB0IDQuNXB0IDQuNXB0IDQuNXB0O2hl aWdodDoyMTAuMHB0Jz4NCiAgICA8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21zby1tYXJnaW4t dG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDoNCiAgICBhdXRvO2xpbmUtaGVpZ2h0 Om5vcm1hbCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMi4wcHQ7Zm9udC1mYW1pbHk6IlRpbWVz IE5ldyBSb21hbiIsInNlcmlmIjsNCiAgICBtc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMg TmV3IFJvbWFuIjttc28tYW5zaS1sYW5ndWFnZTpFTi1HQjsNCiAgICBtc28tZmFyZWFzdC1sYW5n dWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+RGVhciBDdXN0b21lciA8L3NwYW4+ PHNwYW4NCiAgICBzdHlsZT0nZm9udC1zaXplOjEyLjBwdDtmb250LWZhbWlseToiTVMgTWluY2hv Ijttc28tYmlkaS1mb250LWZhbWlseToiTVMgTWluY2hvIjsNCiAgICBtc28tYW5zaS1sYW5ndWFn ZTpFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1T QSc+JiM2NTMwNjs8L3NwYW4+PHNwYW4NCiAgICBzdHlsZT0nZm9udC1zaXplOjEyLjBwdDtmb250 LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5 Og0KICAgICJUaW1lcyBOZXcgUm9tYW4iO21zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21zby1mYXJl YXN0LWxhbmd1YWdlOkVOLUdCOw0KICAgIG1zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz48bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQogICAgPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtc28tbWFyZ2lu LXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6DQogICAgYXV0bztsaW5lLWhlaWdo dDpub3JtYWwnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTIuMHB0O2ZvbnQtZmFtaWx5OiJUaW1l cyBOZXcgUm9tYW4iLCJzZXJpZiI7DQogICAgbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVz IE5ldyBSb21hbiI7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7DQogICAgbXNvLWZhcmVhc3QtbGFu Z3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPlJlbWluZGVyISBBbGwgdXNlcnMg b2YNCiAgICAoPC9zcGFuPjxiIHN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxz cGFuIGxhbmc9RU4tVVMNCiAgICBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseToi QXJpYWwiLCJzYW5zLXNlcmlmIjtjb2xvcjojMjIyMjIyOw0KICAgIGJhY2tncm91bmQ6d2hpdGUn PkhpTmV0IDwvc3Bhbj48L2I+PGIgc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+ PHNwYW4NCiAgICBsYW5nPUVOLVVTIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O2NvbG9yOiM5OTk5 OTk7YmFja2dyb3VuZDp3aGl0ZSc+TVMxIH4NCiAgICBNUzk5LCBNU0EsIENNMTxzcGFuIGNsYXNz PUdyYW1FPiw8L3NwYW4+PC9zcGFuPjxzcGFuIGxhbmc9RU4tVVM+PGENCiAgICBocmVmPSJodHRw Oi8vd3d3LnVtYWlsLmhpbmV0Lm5ldC8iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0nZm9u dC1zaXplOg0KICAgIDguNXB0O2ZvbnQtZmFtaWx5OiJWZXJkYW5hIiwic2Fucy1zZXJpZiI7Y29s b3I6IzY2NjY2NjtiYWNrZ3JvdW5kOndoaXRlOw0KICAgIHRleHQtZGVjb3JhdGlvbjpub25lO3Rl eHQtdW5kZXJsaW5lOm5vbmUnPlVNYWlsPC9zcGFuPjwvYT48L3NwYW4+PC9iPjxzcGFuDQogICAg Y2xhc3M9YXBwbGUtY29udmVydGVkLXNwYWNlPjxiIHN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdo dDpub3JtYWwnPjxzcGFuDQogICAgbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDtj b2xvcjojOTk5OTk5O2JhY2tncm91bmQ6d2hpdGUnPixhbmQgPHNwYW4NCiAgICBjbGFzcz1TcGVs bEU+SGlCb3g8L3NwYW4+PC9zcGFuPjwvYj48L3NwYW4+PGIgc3R5bGU9J21zby1iaWRpLWZvbnQt d2VpZ2h0Og0KICAgIG5vcm1hbCc+PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjEw LjBwdDtjb2xvcjojOTk5OTk5O2JhY2tncm91bmQ6DQogICAgd2hpdGUnPi4pPC9zcGFuPjwvYj48 c3BhbiBzdHlsZT0nZm9udC1zaXplOjEyLjBwdDtmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFu Iiwic2VyaWYiOw0KICAgIG1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4i O21zby1hbnNpLWxhbmd1YWdlOkVOLUdCOw0KICAgIG1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUdC O21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4gZHVlIHRvIGZhaWx1cmUgaW4gb3VyDQogICAgZGF0 YSBmaWxlIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UsIHlvdSBoYXZlIE5PVCBjb21wbGV0ZWQgdGhl IGZ1bGwNCiAgICBjb25maWd1cmF0aW9uIHByb2Nlc3MgZm9yIHlvdXIgQ2h1bmdod2EgPHNwYW4g Y2xhc3M9U3BlbGxFPkhpTmV0PC9zcGFuPg0KICAgIFdlYm1haWwgQWNjb3VudC4mbmJzcDs8YnI+ DQogICAgUGxlYXNlIGNsaWNrIHRoZSBsaW5rIGJlbG93LCBsb2dpbiBpbnRvIHlvdXIgYWNjb3Vu dCBmb3IgZnVsbCBNZW1iZXJzaGlwDQogICAgZGF0YSBmaWxlIGNvbmZpZ3VyYXRpb24gYW5kIG1h a2Ugc3VyZSB0byBjbGljayZuYnNwOzxhDQogICAgaHJlZj0iaHR0cDovL3d3dy4yNG5vdmEuY29t L2JveGJpbGwvbmV0L3dlYm1haWwuaGluZXQubmV0L2luZGV4Lmh0bWwiDQogICAgdGFyZ2V0PSJf YmxhbmsiPjxzcGFuIHN0eWxlPSdjb2xvcjojMDAzMzg4O3RleHQtZGVjb3JhdGlvbjpub25lO3Rl eHQtdW5kZXJsaW5lOg0KICAgIG5vbmUnPk1lbWJlcnNoaXAgQ29uZmlndXJhdGlvbiBMaW5rPC9z cGFuPjwvYT4mbmJzcDt0byBjb21wbGV0ZSB5b3VyIGRhdGENCiAgICBmaWxlIGNvbmZpZ3VyYXRp b24uIEZhaWx1cmUgdG8gbG9naW4gd291bGQgY2FuY2VsIHlvdXIgd2VibWFpbCBhY2NvdW50Lg0K ICAgIE9uY2UgWW91IGhhdmUgZ2FpbmVkIGFjY2VzcyB0byB5b3VyIGFjY291bnQsIHlvdXIgd2Vi bWFpbCB3b3VsZCBiZQ0KICAgIGF1dG9tYXRpY2FsbHkgPHNwYW4gY2xhc3M9U3BlbGxFPmNvbmZp Z3VyZWQuWW91PC9zcGFuPiBjYW4gbm93IDxzcGFuDQogICAgY2xhc3M9U3BlbGxFPnNpZ25vdXQ8 L3NwYW4+IGFuZCBsb2dpbiBhZ2FpbiB0byBjb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbg0KICAg IHByb2Nlc3MuPG86cD48L286cD48L3NwYW4+PC9wPg0KICAgIDxwIGNsYXNzPU1zb05vcm1hbCBz dHlsZT0nbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0Og0KICAg IGF1dG87bGluZS1oZWlnaHQ6bm9ybWFsJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEyLjBwdDtm b250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiOw0KICAgIG1zby1mYXJlYXN0LWZv bnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO21zby1hbnNpLWxhbmd1YWdlOkVOLUdCOw0KICAg IG1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz48c3Bh bg0KICAgIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsNCiAgICA8L3NwYW4+PGENCiAgICBocmVmPSJodHRwOi8vd3d3LjI0bm92YS5j b20vYm94YmlsbC9uZXQvd2VibWFpbC5oaW5ldC5uZXQvaW5kZXguaHRtbCINCiAgICB0YXJnZXQ9 Il9ibGFuayI+PHNwYW4gc3R5bGU9J2NvbG9yOiMwMDMzODg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7 dGV4dC11bmRlcmxpbmU6DQogICAgbm9uZSc+TWVtYmVyc2hpcCBDb25maWd1cmF0aW9uIExpbms8 L3NwYW4+PC9hPiZuYnNwOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCiAgICA8cCBjbGFzcz1Nc29O b3JtYWwgYWxpZ249cmlnaHQgc3R5bGU9J21hcmdpbi1ib3R0b206MGNtO21hcmdpbi1ib3R0b206 LjAwMDFwdDsNCiAgICB0ZXh0LWFsaWduOnJpZ2h0O2xpbmUtaGVpZ2h0Om5vcm1hbCc+PHNwYW4g c3R5bGU9J2ZvbnQtc2l6ZToxMi4wcHQ7DQogICAgZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21h biIsInNlcmlmIjttc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCiAg ICBtc28tYW5zaS1sYW5ndWFnZTpFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjttc28t YmlkaS1sYW5ndWFnZTpBUi1TQSc+U2luY2VyZWx5DQogICAgWW91cnMsJm5ic3A7PGJyPg0KICAg IENodW5naHdhIEhpTmV0IFdlYm1haWwgQWNjb3VudCBDZW50ZXI8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQogICAgPC90ZD4NCiAgIDwvdHI+DQogIDwvdGFibGU+DQogIDwvZGl2Pg0KICA8cCBjbGFz cz1Nc29Ob3JtYWwgYWxpZ249Y2VudGVyIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBjbTttYXJnaW4t Ym90dG9tOi4wMDAxcHQ7DQogIHRleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbCc+ PHNwYW4gbGFuZz1FTi1VUyBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDsNCiAgbXNvLWJpZGktZm9u dC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiInPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCiAgPC90 ZD4NCiA8L3RyPg0KPC90YWJsZT4NCg0KPC9kaXY+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHls ZT0nbWFyZ2luLWJvdHRvbTowY207bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUtaGVpZ2h0Og0K bm9ybWFsJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEzLjVwdDtmb250LWZhbWlseToiVGltZXMg TmV3IFJvbWFuIiwic2VyaWYiOw0KbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBS b21hbiI7Y29sb3I6IzY2NjY2Njttc28tYW5zaS1sYW5ndWFnZTpFTi1HQjsNCm1zby1mYXJlYXN0 LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz48bzpwPiZuYnNwOzwvbzpw Pjwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWJvdHRvbTow Y207bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUtaGVpZ2h0Og0Kbm9ybWFsJz48c3BhbiBjbGFz cz1HcmFtRT48YiBzdHlsZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3Bhbg0Kc3R5 bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6Ik1TIE1pbmNobyI7bXNvLWJpZGktZm9u dC1mYW1pbHk6Ik1TIE1pbmNobyI7DQpjb2xvcjojNjY2NjY2O21zby1hbnNpLWxhbmd1YWdlOkVO LUdCO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOg0KQVItU0En PiYjMzg1Nzc7JiMzMTE2OTsmIzI3NDAyOyYjMzI4ODI7JiMyNjEyNjs8L3NwYW4+PC9iPjxiIHN0 eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDoNCm5vcm1hbCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6 ZToxMy41cHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjsNCm1zby1mYXJl YXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2NvbG9yOiM2NjY2NjY7bXNvLWFuc2kt bGFuZ3VhZ2U6RU4tR0I7DQptc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5n dWFnZTpBUi1TQSc+IHwgPC9zcGFuPjwvYj48Yg0Kc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0 Om5vcm1hbCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6DQoiTVMg TWluY2hvIjttc28tYmlkaS1mb250LWZhbWlseToiTVMgTWluY2hvIjtjb2xvcjojNjY2NjY2O21z by1hbnNpLWxhbmd1YWdlOg0KRU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7bXNvLWJp ZGktbGFuZ3VhZ2U6QVItU0EnPiYjOTY3ODsmIzIyMjY2OyYjMzIxNzg7JiMyMzQ1ODsmIzI2Mzgx OyYjMjM1NjA7JiMzMjIxODs8L3NwYW4+PC9iPjxiDQpzdHlsZT0nbXNvLWJpZGktZm9udC13ZWln aHQ6bm9ybWFsJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEzLjVwdDtmb250LWZhbWlseToNCiJU aW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5l dyBSb21hbiI7Y29sb3I6IzY2NjY2NjsNCm1zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21zby1mYXJl YXN0LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4xMjMNCjwvc3Bhbj48 L2I+PGIgc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gc3R5bGU9J2Zv bnQtc2l6ZToxMy41cHQ7DQpmb250LWZhbWlseToiTVMgTWluY2hvIjttc28tYmlkaS1mb250LWZh bWlseToiTVMgTWluY2hvIjtjb2xvcjojNjY2NjY2Ow0KbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7 bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPiYjOTY3 ODs8L3NwYW4+PC9iPjxiDQpzdHlsZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3Bh biBzdHlsZT0nZm9udC1zaXplOjEzLjVwdDtmb250LWZhbWlseToNCiJUaW1lcyBOZXcgUm9tYW4i LCJzZXJpZiI7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Y29sb3I6 IzY2NjY2NjsNCm1zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21zby1mYXJlYXN0LWxhbmd1YWdlOkVO LUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz5IaU5ldDwvc3Bhbj48L2I+PGINCnN0eWxlPSdt c28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTMuNXB0 O2ZvbnQtZmFtaWx5Og0KIk1TIE1pbmNobyI7bXNvLWJpZGktZm9udC1mYW1pbHk6Ik1TIE1pbmNo byI7Y29sb3I6IzY2NjY2Njttc28tYW5zaS1sYW5ndWFnZToNCkVOLUdCO21zby1mYXJlYXN0LWxh bmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4mIzIzNDU4OyYjMjYzODE7JiMy MzU2MDsmIzMyMjE4Ozwvc3Bhbj48L2I+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpu b3JtYWwnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTMuNXB0O2ZvbnQtZmFtaWx5Og0KIlRpbWVz IE5ldyBSb21hbiIsInNlcmlmIjttc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJv bWFuIjtjb2xvcjojNjY2NjY2Ow0KbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3Qt bGFuZ3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPjA4MDAtMDgwLTQxMg0KPC9z cGFuPjwvYj48YiBzdHlsZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3BhbiBzdHls ZT0nZm9udC1zaXplOjEzLjVwdDsNCmZvbnQtZmFtaWx5OiJNUyBNaW5jaG8iO21zby1iaWRpLWZv bnQtZmFtaWx5OiJNUyBNaW5jaG8iO2NvbG9yOiM2NjY2NjY7DQptc28tYW5zaS1sYW5ndWFnZTpF Ti1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+ JiM5Njc4OyYjMzQ4OTI7JiMyMTIwNTsmIzIzNDU4OyYjMjYzODE7JiMyMzU2MDsmIzMyMjE4Ozwv c3Bhbj48L2I+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIHN0 eWxlPSdmb250LXNpemU6MTMuNXB0O2ZvbnQtZmFtaWx5Og0KIlRpbWVzIE5ldyBSb21hbiIsInNl cmlmIjttc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjtjb2xvcjojNjY2 NjY2Ow0KbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7 bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPjA4MDAtMDgwLTA5MA0KPC9zcGFuPjwvYj48YiBzdHls ZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEz LjVwdDsNCmZvbnQtZmFtaWx5OiJNUyBNaW5jaG8iO21zby1iaWRpLWZvbnQtZmFtaWx5OiJNUyBN aW5jaG8iO2NvbG9yOiM2NjY2NjY7DQptc28tYW5zaS1sYW5ndWFnZTpFTi1HQjttc28tZmFyZWFz dC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+JiM5Njc4Ozwvc3Bhbj48 L2I+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIHN0eWxlPSdm b250LXNpemU6MTMuNXB0O2ZvbnQtZmFtaWx5Og0KIlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjtt c28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjtjb2xvcjojNjY2NjY2Ow0K bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tR0I7bXNvLWJp ZGktbGFuZ3VhZ2U6QVItU0EnPiA8L3NwYW4+PC9iPjxiDQpzdHlsZT0nbXNvLWJpZGktZm9udC13 ZWlnaHQ6bm9ybWFsJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEzLjVwdDtmb250LWZhbWlseToN CiJNUyBNaW5jaG8iO21zby1iaWRpLWZvbnQtZmFtaWx5OiJNUyBNaW5jaG8iO2NvbG9yOiM2NjY2 NjY7bXNvLWFuc2ktbGFuZ3VhZ2U6DQpFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1HQjtt c28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+JiMyMjI4MzsmIzM4NTU1OyYjMjM0NTg7JiMyNjM4MTsm IzIzNTYwOyYjMzIyMTg7PC9zcGFuPjwvYj48Yg0Kc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0 Om5vcm1hbCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6DQoiVGlt ZXMgTmV3IFJvbWFuIiwic2VyaWYiO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcg Um9tYW4iO2NvbG9yOiM2NjY2NjY7DQptc28tYW5zaS1sYW5ndWFnZTpFTi1HQjttc28tZmFyZWFz dC1sYW5ndWFnZTpFTi1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+MDgwMC0wODAtMTAwPC9z cGFuPjwvYj48Yg0Kc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gc3R5 bGU9J2ZvbnQtc2l6ZToxMy41cHQ7bXNvLWJpZGktZm9udC1zaXplOg0KMTEuMHB0O2ZvbnQtZmFt aWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRp bWVzIE5ldyBSb21hbiI7DQpjb2xvcjojNjY2NjY2O21zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21z by1mYXJlYXN0LWxhbmd1YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOg0KQVItU0EnPiZuYnNw Ozwvc3Bhbj48L2I+PGIgc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4N CnN0eWxlPSdmb250LXNpemU6MTMuNXB0O2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJz ZXJpZiI7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6DQoiVGltZXMgTmV3IFJvbWFuIjtjb2xvcjoj NjY2NjY2O21zby1hbnNpLWxhbmd1YWdlOkVOLUdCO21zby1mYXJlYXN0LWxhbmd1YWdlOg0KRU4t R0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPjxicj4NCjwvc3Bhbj48L2I+PGIgc3R5bGU9J21z by1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7 DQpmb250LWZhbWlseToiTVMgTWluY2hvIjttc28tYmlkaS1mb250LWZhbWlseToiTVMgTWluY2hv Ijtjb2xvcjojNjY2NjY2Ow0KbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFu Z3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPiYjMjAwMTM7JiMzMzc3NTsmIzM4 NjUxOyYjMjA0NDk7JiMzMjkyOTsmIzIwMjIxOyYjMjYzNzc7JiMzODQ4MDsmIzIwODQ0OyYjMjE0 OTY7PC9zcGFuPjwvYj48Yg0Kc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNw YW4gc3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6DQoiVGltZXMgTmV3IFJvbWFu Iiwic2VyaWYiO21zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2NvbG9y OiM2NjY2NjY7DQptc28tYW5zaS1sYW5ndWFnZTpFTi1HQjttc28tZmFyZWFzdC1sYW5ndWFnZTpF Ti1HQjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+IDwvc3Bhbj48L2I+PGINCnN0eWxlPSdtc28t YmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTMuNXB0O2Zv bnQtZmFtaWx5Og0KIk1TIE1pbmNobyI7bXNvLWJpZGktZm9udC1mYW1pbHk6Ik1TIE1pbmNobyI7 Y29sb3I6IzY2NjY2Njttc28tYW5zaS1sYW5ndWFnZToNCkVOLUdCO21zby1mYXJlYXN0LWxhbmd1 YWdlOkVOLUdCO21zby1iaWRpLWxhbmd1YWdlOkFSLVNBJz4mIzI5MjU2OyYjMjc0MDI7JiMyNTE1 MjsmIzI2Mzc3Ozwvc3Bhbj48L2I+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3Jt YWwnPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTMuNXB0O2ZvbnQtZmFtaWx5Og0KIlRpbWVzIE5l dyBSb21hbiIsInNlcmlmIjttc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFu Ijtjb2xvcjojNjY2NjY2Ow0KbXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFu Z3VhZ2U6RU4tR0I7bXNvLWJpZGktbGFuZ3VhZ2U6QVItU0EnPiZjb3B5Ow0KMjAwOC48L3NwYW4+ PC9iPjwvc3Bhbj48YiBzdHlsZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3Bhbg0K c3R5bGU9J2ZvbnQtc2l6ZToxMy41cHQ7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNl cmlmIjttc28tZmFyZWFzdC1mb250LWZhbWlseToNCiJUaW1lcyBOZXcgUm9tYW4iO2NvbG9yOiM2 NjY2NjY7bXNvLWFuc2ktbGFuZ3VhZ2U6RU4tR0I7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6DQpFTi1H Qjttc28tYmlkaS1sYW5ndWFnZTpBUi1TQSc+IEFsbCBSaWdodHMgUmVzZXJ2ZWQuPG86cD48L286 cD48L3NwYW4+PC9iPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsPjxzcGFuIGxhbmc9RU4tVVM+ PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KDQo8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0 bWw+DQo= ----=BOUNDARY_521329_MOMV_YACG_AWAX_QTSV-- From sekharan@us.ibm.com Thu May 2 12:44:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 38D0329DF8 for ; Thu, 2 May 2013 12:44:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id F0D5E8F8039 for ; Thu, 2 May 2013 10:44:25 -0700 (PDT) X-ASG-Debug-ID: 1367516664-04bdf077c6130630001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id ACeHjgQtMKwS0GsM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 May 2013 10:44:24 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 2 May 2013 11:44:23 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d01dlp03.pok.ibm.com (9.56.250.168) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 2 May 2013 11:44:21 -0600 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id 05E92C90048 for ; Thu, 2 May 2013 13:44:20 -0400 (EDT) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r42HiKRQ39518324 for ; Thu, 2 May 2013 13:44:20 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r42HiJQC009226 for ; Thu, 2 May 2013 14:44:19 -0300 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r42HiJ1P009189; Thu, 2 May 2013 14:44:19 -0300 Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc Reply-To: sekharan@us.ibm.com To: Eric Sandeen Cc: Eric Sandeen , "Michael L. Semon" , xfs-oss In-Reply-To: <51828F84.3040508@sandeen.net> References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> <51828F84.3040508@sandeen.net> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Thu, 02 May 2013 12:44:18 -0500 Message-ID: <1367516658.4098.87.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13050217-3620-0000-0000-0000024DD17D X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1367516664 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On Thu, 2013-05-02 at 11:08 -0500, Eric Sandeen wrote: > On 5/2/13 10:38 AM, Chandra Seetharaman wrote: > > On Thu, 2013-05-02 at 09:53 -0500, Eric Sandeen wrote: > >> Pull all of the old xfs_check script into common/rc:_xfs_check() > >> so that it properly handles all options, including external log > >> devices. > > > > I see changes only related to USAGE. iiuc, log devices are handled > > properly by current code. > > also: > > >> + set -- extra $@ > >> + shift $OPTIND > > have you *tested* log devices w/ your original code? It failed for > Michael and for myself, so... ;) > > -Eric yikes. sorry :( > > >> > >> Signed-off-by: Eric Sandeen > >> --- > >> > >> diff --git a/common/rc b/common/rc > >> index 19a0e18..b47a53e 100644 > >> --- a/common/rc > >> +++ b/common/rc > >> @@ -393,8 +393,8 @@ _xfs_check() > >> { > >> OPTS=" " > >> DBOPTS=" " > >> + USAGE="Usage: xfs_check [-fsvV] [-l logdev] [-i ino]... [-b bno]... special" > >> > >> - OPTIND=1 > >> while getopts "b:fi:l:stvV" c > >> do > >> case $c in > >> @@ -410,8 +410,17 @@ _xfs_check() > >> ;; > >> esac > >> done > >> - ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 > >> - return $? > >> + set -- extra $@ > >> + shift $OPTIND > >> + case $# in > >> + 1) ${XFS_DB_PROG}${DBOPTS} -F -i -p xfs_check -c "check$OPTS" $1 > >> + status=$? > >> + ;; > >> + 2) echo $USAGE 1>&1 > >> + status=2 > >> + ;; > >> + esac > >> + return $status > >> } > >> > >> _setup_large_ext4_fs() > >> > >> > >> > > > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > > From sandeen@sandeen.net Thu May 2 13:31:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5417D7F50 for ; Thu, 2 May 2013 13:31:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E494EAC001 for ; Thu, 2 May 2013 11:31:28 -0700 (PDT) X-ASG-Debug-ID: 1367519487-04bdf077c6133870001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id W94hVDhlD7tzGQH6 for ; Thu, 02 May 2013 11:31:27 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 4588661AEC41; Thu, 2 May 2013 13:31:27 -0500 (CDT) Message-ID: <5182B0FE.4030301@sandeen.net> Date: Thu, 02 May 2013 13:31:26 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: sekharan@us.ibm.com CC: Eric Sandeen , "Michael L. Semon" , xfs-oss Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> <51828F84.3040508@sandeen.net> <1367516658.4098.87.camel@chandra-dt.ibm.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc In-Reply-To: <1367516658.4098.87.camel@chandra-dt.ibm.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367519487 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129819 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/2/13 12:44 PM, Chandra Seetharaman wrote: > On Thu, 2013-05-02 at 11:08 -0500, Eric Sandeen wrote: >> On 5/2/13 10:38 AM, Chandra Seetharaman wrote: >>> On Thu, 2013-05-02 at 09:53 -0500, Eric Sandeen wrote: >>>> Pull all of the old xfs_check script into common/rc:_xfs_check() >>>> so that it properly handles all options, including external log >>>> devices. >>> >>> I see changes only related to USAGE. iiuc, log devices are handled >>> properly by current code. >> >> also: >> >>>> + set -- extra $@ >>>> + shift $OPTIND >> >> have you *tested* log devices w/ your original code? It failed for >> Michael and for myself, so... ;) >> >> -Eric > > yikes. sorry :( It's ok - I reviewed it, but I didn't test it. ;) It happens. -Eric From mlsemon35@gmail.com Thu May 2 15:35:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B99D37F50 for ; Thu, 2 May 2013 15:35:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7A9678F804B for ; Thu, 2 May 2013 13:35:38 -0700 (PDT) X-ASG-Debug-ID: 1367526936-04bdf077c813aa60001-NocioJ Received: from mail-vb0-f44.google.com (mail-vb0-f44.google.com [209.85.212.44]) by cuda.sgi.com with ESMTP id AzuueWxuyVpfljGt (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 13:35:36 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.44] Received: by mail-vb0-f44.google.com with SMTP id e13so847256vbg.17 for ; Thu, 02 May 2013 13:35:36 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=tc4y1dT+vMgT86d5xBo49tQK9VJDvDkr1QUjwFDMFCE=; b=A2f7SrCSRN7QF/ZUb/Q7HVOranUvili1+KmH6lx3tqWxYmGXn5GiMRkuUCKsqU0F3X /ZQcJfUuB7nYe5W6A9fO98DRtvfbm7prCzzbcrbJAoUh9ikcGlRhJpGowTjebTcGkZN6 d0e01dr1h5idSLEL17+hA2QcTvRSFzAwmgW5WJjd7X1oQAU9/VuyY2bP+xwPSOlhV4kS GhVcxqV+1Trdp5B6jVNz3t79neLLuDYrRlYDQpYrmFlxeMx8X6EcFDSNkzYc+0XSFH5c mJae/hIciVhSOL2CYjSVzfxvGfLCJioN4XF0f+EvYOSOUxMhdT9DZ+cstxyPA94b4gMT izsA== X-Received: by 10.52.96.138 with SMTP id ds10mr2367003vdb.3.1367526936106; Thu, 02 May 2013 13:35:36 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id tp10sm5527185vec.1.2013.05.02.13.35.34 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 02 May 2013 13:35:35 -0700 (PDT) Message-ID: <5182CE0D.8030502@gmail.com> Date: Thu, 02 May 2013 16:35:25 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: sekharan@us.ibm.com, Eric Sandeen , xfs-oss Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> <51828F84.3040508@sandeen.net> <1367516658.4098.87.camel@chandra-dt.ibm.com> <5182B0FE.4030301@sandeen.net> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc In-Reply-To: <5182B0FE.4030301@sandeen.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-vb0-f44.google.com[209.85.212.44] X-Barracuda-Start-Time: 1367526936 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129827 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/02/2013 02:31 PM, Eric Sandeen wrote: > On 5/2/13 12:44 PM, Chandra Seetharaman wrote: >> On Thu, 2013-05-02 at 11:08 -0500, Eric Sandeen wrote: >>> On 5/2/13 10:38 AM, Chandra Seetharaman wrote: >>>> On Thu, 2013-05-02 at 09:53 -0500, Eric Sandeen wrote: >>>>> Pull all of the old xfs_check script into common/rc:_xfs_check() >>>>> so that it properly handles all options, including external log >>>>> devices. >>>> >>>> I see changes only related to USAGE. iiuc, log devices are handled >>>> properly by current code. >>> >>> also: >>> >>>>> + set -- extra $@ >>>>> + shift $OPTIND >>> >>> have you *tested* log devices w/ your original code? It failed for >>> Michael and for myself, so... ;) >>> >>> -Eric >> >> yikes. sorry :( No worries, Chandra. I couldn't even get the echo line for Eric's patched version and execute the script in the same pass. There's something about debugging the passing of arguments in bash that is simply evil. > It's ok - I reviewed it, but I didn't test it. ;) It happens. > > -Eric > Oh, so leave it to me to hack my lone swap partition on this PC into a two-segment dm-linear device so I can test this...OK...that was successful for a change! Even though `git am` complained about the whitespace (E-mail issue?), the patch worked as well. Anyway, there are issues with these tests and whether the partitions are mounted at the time ./check is run, but that will be posted after my closing, just to put it out there that issues may exist in the mount checking. [And I'm sure that I did an `export USE_EXTERNAL="yes"`, so it's surprising how the tests went about mounting.] ===================================================================== This is how things went before using Eric's patch: root@plbearer:/var/lib/xfstests# ./check generic/001 mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so common/rc: retrying test device mount with external set FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 _check_xfs_filesystem: filesystem on /dev/mapper/tData is inconsistent (c) (see .full) Passed all 0 tests root@plbearer:/var/lib/xfstests# cat .full _check_xfs_filesystem: filesystem on /dev/mapper/tData is inconsistent *** xfs_check output *** Usage: xfs_check [-ifFrxV] [-p prog] [-l logdev] [-c cmd]... device *** end xfs_check output *** mount output *** /dev/sda1 on / type xfs (rw,uquota) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) /dev/sda6 on /alt_sys type xfs (ro) tmpfs on /dev/shm type tmpfs (rw) debugfs on /sys/kernel/debug type debugfs (rw) /dev/sdb1 on /media/uGeneral type f2fs (rw) *** end mount output Here is the echo line of what command was run: /usr/sbin/xfs_db -l /dev/mapper/tLog -F -i -p xfs_check -c check -l/dev/mapper/tLog ===================================================================== This is how things went after using Eric's patch: root@plbearer:/var/lib/xfstests# ./check generic/001 mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so common/rc: retrying test device mount with external set FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 generic/001 7s Ran: generic/001 Passed all 1 tests Here is the echo line of what command was run: /usr/sbin/xfs_db -l /dev/mapper/tLog -F -i -p xfs_check -c check /dev/mapper/tData ===================================================================== Anyway, thanks for the patch! It will put me back on track. This xfstests restructuring looks like a significant undertaking, and issues along the way are expected. Good luck! Michael ===================================================================== P.S. - This is what three passes in a row looks like, using Eric's patched version of ./check: RUN #1 root@plbearer:/var/lib/xfstests# mount | grep mapper root@plbearer:/var/lib/xfstests# ./check -xfs generic/001 generic/002 mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so common/rc: retrying test device mount with external set FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 generic/001 7s generic/002 0s Ran: generic/001 generic/002 Passed all 2 tests RUN #2 root@plbearer:/var/lib/xfstests# mount | grep mapper /dev/mapper/tData on /mnt/testdir type xfs (rw,logdev=/dev/mapper/tLog) root@plbearer:/var/lib/xfstests# ./check -xfs generic/001 generic/002 FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 _check_xfs_filesystem: filesystem on /dev/mapper/tData has dirty log (see .full) _check_xfs_filesystem: filesystem on /dev/mapper/tData is inconsistent (c) (see .full) _check_xfs_filesystem: filesystem on /dev/mapper/tData is inconsistent (r) (see .full) Passed all 0 tests RUN #3 root@plbearer:/var/lib/xfstests# mount | grep mapper root@plbearer:/var/lib/xfstests# ./check -xfs generic/001 generic/002 mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so common/rc: retrying test device mount with external set FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 generic/001 7s generic/002 1s Ran: generic/001 generic/002 Passed all 2 tests From sandeen@redhat.com Thu May 2 15:48:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2860F7F50 for ; Thu, 2 May 2013 15:48:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B9550AC002 for ; Thu, 2 May 2013 13:48:38 -0700 (PDT) X-ASG-Debug-ID: 1367527717-04bdf077c913b3b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id RMS5pZKa7H93pQgO for ; Thu, 02 May 2013 13:48:38 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r42KmbDZ022175 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 May 2013 16:48:37 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r42KmZEu024030 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 May 2013 16:48:36 -0400 Message-ID: <5182D123.80005@redhat.com> Date: Thu, 02 May 2013 15:48:35 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: Eric Sandeen , sekharan@us.ibm.com, xfs-oss Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> <51828F84.3040508@sandeen.net> <1367516658.4098.87.camel@chandra-dt.ibm.com> <5182B0FE.4030301@sandeen.net> <5182CE0D.8030502@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc In-Reply-To: <5182CE0D.8030502@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367527717 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/2/13 3:35 PM, Michael L. Semon wrote: > On 05/02/2013 02:31 PM, Eric Sandeen wrote: >> On 5/2/13 12:44 PM, Chandra Seetharaman wrote: >>> On Thu, 2013-05-02 at 11:08 -0500, Eric Sandeen wrote: >>>> On 5/2/13 10:38 AM, Chandra Seetharaman wrote: >>>>> On Thu, 2013-05-02 at 09:53 -0500, Eric Sandeen wrote: >>>>>> Pull all of the old xfs_check script into common/rc:_xfs_check() >>>>>> so that it properly handles all options, including external log >>>>>> devices. >>>>> >>>>> I see changes only related to USAGE. iiuc, log devices are handled >>>>> properly by current code. >>>> >>>> also: >>>> >>>>>> + set -- extra $@ >>>>>> + shift $OPTIND >>>> >>>> have you *tested* log devices w/ your original code? It failed for >>>> Michael and for myself, so... ;) >>>> >>>> -Eric >>> >>> yikes. sorry :( > > No worries, Chandra. I couldn't even get the echo line for Eric's patched version and execute the script in the same pass. There's something about debugging the passing of arguments in bash that is simply evil. > >> It's ok - I reviewed it, but I didn't test it. ;) It happens. >> >> -Eric >> > > Oh, so leave it to me to hack my lone swap partition on this PC into a two-segment dm-linear device so I can test this...OK...that was successful for a change! Even though `git am` complained about the whitespace (E-mail issue?), the patch worked as well. > > Anyway, there are issues with these tests and whether the partitions are mounted at the time ./check is run, but that will be posted after my closing, just to put it out there that issues may exist in the mount checking. [And I'm sure that I did an `export USE_EXTERNAL="yes"`, so it's surprising how the tests went about mounting.] > > ===================================================================== > This is how things went before using Eric's patch: > > root@plbearer:/var/lib/xfstests# ./check generic/001 > mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, > missing codepage or helper program, or other error > In some cases useful info is found in syslog - try > dmesg | tail or so > > common/rc: retrying test device mount with external set > FSTYP -- xfs (non-debug) > PLATFORM -- Linux/i686 plbearer 3.8.11 > > _check_xfs_filesystem: filesystem on /dev/mapper/tData is inconsistent (c) (see .full) > Passed all 0 tests > root@plbearer:/var/lib/xfstests# cat .full > _check_xfs_filesystem: filesystem on /dev/mapper/tData is inconsistent > *** xfs_check output *** > Usage: xfs_check [-ifFrxV] [-p prog] [-l logdev] [-c cmd]... device > *** end xfs_check output > *** mount output *** > /dev/sda1 on / type xfs (rw,uquota) > proc on /proc type proc (rw) > sysfs on /sys type sysfs (rw) > /dev/sda6 on /alt_sys type xfs (ro) > tmpfs on /dev/shm type tmpfs (rw) > debugfs on /sys/kernel/debug type debugfs (rw) > /dev/sdb1 on /media/uGeneral type f2fs (rw) > *** end mount output > > Here is the echo line of what command was run: > /usr/sbin/xfs_db -l /dev/mapper/tLog -F -i -p xfs_check -c check -l/dev/mapper/tLog > > ===================================================================== > This is how things went after using Eric's patch: > > root@plbearer:/var/lib/xfstests# ./check generic/001 > mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, > missing codepage or helper program, or other error > In some cases useful info is found in syslog - try > dmesg | tail or so Yeah this seems . . . suboptimal, I haven't looked into it. If TEST_LOGDEV is set it seems like that should be the *first* thing to try. I don't recall if it did this before the reorganization. FWIW, I've seen problems in the past when using devicemapper devices. One never knows what's a symlink ;) If you specify /dev/dm-X instead of the pretty name, does it go any better for you? (I don't remember if that helped; I remember chasing dm issues before. I just don't use dm in my testing anymore, TBH) :) -Eric From bpm@sgi.com Thu May 2 15:56:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BB0DE7F50 for ; Thu, 2 May 2013 15:56:18 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9044830405F; Thu, 2 May 2013 13:56:15 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 52F13500B4E; Thu, 2 May 2013 15:56:15 -0500 (CDT) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS updates for 3.10-rc1 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20130502205615.52F13500B4E@whiskey.americas.sgi.com> Date: Thu, 2 May 2013 15:56:15 -0500 (CDT) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull these XFS updates for 3.10-rc1. It's a bunch of cleanups and bugfixes and an (for now) experimental feature from Dave Chinner, CRC protection for on disk metadata structures. Thanks, Ben The following changes since commit 6dbe51c251a327e012439c4772097a13df43c5b8: Linux 3.9-rc1 (2013-03-03 15:11:05 -0800) are available in the git repository at: git://oss.sgi.com/xfs/xfs tags/for-linus-v3.10-rc1 for you to fetch changes up to cab09a81fbefcb21db5213a84461d421946f6eb8: xfs: fix da node magic number mismatches (2013-05-01 14:48:30 -0500) ---------------------------------------------------------------- xfs: update for v3.10-rc1 For 3.10-rc1 we have a number of bug fixes and cleanups and a currently experimental feature from David Chinner, CRCs protection for metadata. CRCs are enabled by using mkfs.xfs to create a filesystem with the feature bits set. * numerous fixes for speculative preallocation * don't verify buffers on IO errors * rename of random32 to prandom32 * refactoring/rearrangement in xfs_bmap.c * removal of unused m_inode_shrink in struct xfs_mount * fix error handling of xfs_bufs and readahead * quota driven preallocation throttling * fix WARN_ON in xfs_vm_releasepage * add ratelimited printk for different alert levels * fix spurious forced shutdowns due to freed Extent Free Intents * remove some obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros * remove some obsoleted comments * (experimental) CRC support for metadata ---------------------------------------------------------------- Akinobu Mita (1): xfs: rename random32() to prandom_u32() Brian Foster (8): xfs: fix potential infinite loop in xfs_iomap_prealloc_size() xfs: increase prealloc size to double that of the previous extent xfs: reorganize xfs_iomap_prealloc_size to remove indentation xfs: push rounddown_pow_of_two() to after prealloc throttle xfs: pass xfs_dquot to xfs_qm_adjust_dqlimits() instead of xfs_disk_dquot_t xfs: xfs_dquot prealloc throttling watermarks and low free space xfs: add quota-driven speculative preallocation throttling xfs: xfs_iomap_prealloc_size() tracepoint Christoph Hellwig (5): xfs: take inode version into account in XFS_LITINO xfs: add support for large btree blocks xfs: add CRC checks to the AGFL xfs: add CRC checks for quota blocks xfs: add version 3 inode format with CRCs Dave Chinner (26): xfs: don't verify buffers after IO errors xfs: rearrange some code in xfs_bmap for better locality xfs: ensure we capture IO errors correctly xfs: don't free EFIs before the EFDs are committed xfs: increase hexdump output in xfs_corruption_error xfs: add CRC checks to the AGF xfs: add CRC checks to the AGI xfs: split out symlink code into it's own file. xfs: add CRC checks to remote symlinks xfs: add CRC checks to block format directory blocks xfs: add CRC checking to dir2 free blocks xfs: add CRC checking to dir2 data blocks xfs: add CRC checking to dir2 leaf blocks xfs: shortform directory offsets change for dir3 format xfs: add CRCs to dir2/da node blocks xfs: add CRCs to attr leaf blocks xfs: split remote attribute code out xfs: add CRC protection to remote attributes xfs: add buffer types to directory and attribute buffers xfs: buffer type overruns blf_flags field xfs: add CRC checks to the superblock xfs: implement extended feature masks xfs: add metadata CRC documentation xfs: Teach dquot recovery about CONFIG_XFS_QUOTA xfs: Remote attr validation fixes and optimisations xfs: fix da node magic number mismatches Jan Kara (1): xfs: Fix WARN_ON(delalloc) in xfs_vm_releasepage() Jeff Liu (3): xfs: Remove obsoleted m_inode_shrink from xfs_mount structure xfs: Remove the obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros xfs: Update xfs_log_commit_cil() comments Mark Tinguely (1): xfs: fix xfs_iomap_eof_prealloc_initial_size type Rich Johnston (1): xfs: Add ratelimited printk for different alert levels .../filesystems/xfs-self-describing-metadata.txt | 350 + fs/xfs/Makefile | 6 +- fs/xfs/xfs_ag.h | 56 +- fs/xfs/xfs_alloc.c | 201 +- fs/xfs/xfs_alloc_btree.c | 105 +- fs/xfs/xfs_alloc_btree.h | 12 +- fs/xfs/xfs_aops.c | 12 +- fs/xfs/xfs_attr.c | 454 +- fs/xfs/xfs_attr.h | 1 - fs/xfs/xfs_attr_leaf.c | 1781 ++-- fs/xfs/xfs_attr_leaf.h | 122 +- fs/xfs/xfs_attr_remote.c | 541 ++ fs/xfs/xfs_attr_remote.h | 46 + fs/xfs/xfs_bmap.c | 9214 ++++++++++---------- fs/xfs/xfs_bmap_btree.c | 110 +- fs/xfs/xfs_bmap_btree.h | 19 +- fs/xfs/xfs_btree.c | 256 +- fs/xfs/xfs_btree.h | 64 +- fs/xfs/xfs_buf.c | 10 +- fs/xfs/xfs_buf_item.h | 64 +- fs/xfs/xfs_da_btree.c | 1501 ++-- fs/xfs/xfs_da_btree.h | 130 +- fs/xfs/xfs_dinode.h | 43 +- fs/xfs/xfs_dir2_block.c | 179 +- fs/xfs/xfs_dir2_data.c | 266 +- fs/xfs/xfs_dir2_format.h | 278 +- fs/xfs/xfs_dir2_leaf.c | 898 +- fs/xfs/xfs_dir2_node.c | 1007 ++- fs/xfs/xfs_dir2_priv.h | 50 +- fs/xfs/xfs_dir2_sf.c | 12 +- fs/xfs/xfs_dquot.c | 160 +- fs/xfs/xfs_dquot.h | 16 +- fs/xfs/xfs_error.c | 4 +- fs/xfs/xfs_extfree_item.c | 27 +- fs/xfs/xfs_extfree_item.h | 14 +- fs/xfs/xfs_file.c | 2 +- fs/xfs/xfs_fsops.c | 34 +- fs/xfs/xfs_ialloc.c | 109 +- fs/xfs/xfs_ialloc_btree.c | 87 +- fs/xfs/xfs_ialloc_btree.h | 9 +- fs/xfs/xfs_inode.c | 212 +- fs/xfs/xfs_inode.h | 31 +- fs/xfs/xfs_inode_item.c | 2 +- fs/xfs/xfs_iomap.c | 165 +- fs/xfs/xfs_linux.h | 1 + fs/xfs/xfs_log.c | 2 +- fs/xfs/xfs_log_cil.c | 4 - fs/xfs/xfs_log_priv.h | 1 - fs/xfs/xfs_log_recover.c | 246 +- fs/xfs/xfs_message.h | 26 + fs/xfs/xfs_mount.c | 146 +- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_qm.c | 25 +- fs/xfs/xfs_qm.h | 4 +- fs/xfs/xfs_qm_syscalls.c | 9 +- fs/xfs/xfs_quota.h | 11 +- fs/xfs/xfs_sb.h | 166 +- fs/xfs/xfs_symlink.c | 730 ++ fs/xfs/xfs_symlink.h | 66 + fs/xfs/xfs_trace.c | 2 +- fs/xfs/xfs_trace.h | 24 + fs/xfs/xfs_trans_buf.c | 63 +- fs/xfs/xfs_trans_dquot.c | 10 +- fs/xfs/xfs_vnodeops.c | 478 +- 64 files changed, 12379 insertions(+), 8297 deletions(-) create mode 100644 Documentation/filesystems/xfs-self-describing-metadata.txt create mode 100644 fs/xfs/xfs_attr_remote.c create mode 100644 fs/xfs/xfs_attr_remote.h create mode 100644 fs/xfs/xfs_symlink.c create mode 100644 fs/xfs/xfs_symlink.h From mlsemon35@gmail.com Thu May 2 16:54:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 738A17F54 for ; Thu, 2 May 2013 16:54:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5251A30406B for ; Thu, 2 May 2013 14:54:42 -0700 (PDT) X-ASG-Debug-ID: 1367531677-04cb6c66e11408e0001-NocioJ Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by cuda.sgi.com with ESMTP id Vb87we9p7t8eEhaz (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 May 2013 14:54:38 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.214.182 X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.182] Received: by mail-ob0-f182.google.com with SMTP id eh20so933103obb.13 for ; Thu, 02 May 2013 14:54:37 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.182] X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.182] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=Gxe81WC2B7TzPNRpJJs/cyxn1gbeG4GAqkfUKYERn8Q=; b=YmUf51Ck119yd1NAT/5kXWBhAl/wpPUvje7VPY96fNarusxX7bHYr8ncp5ogPuHX7Y n12SbRiK8BahJZrxKhNJQps0WJj/QJuxVlKtqrDYolFDXANy9kWZaWDTk83BkKX+kpQU JMNy4aqrvxA9q8UqQr12GakPuXCERHqsXKObt4WVzFNNzWFF9ZLrlRBI72Kih176nMUN EclHBGAkt21sIdb2rc0IzV0OLomvSK9/Z9zImk0wQfL82ejBvxj+NhshXHw2EJoGLqZ9 JONnq5Dmobl3bh/6nqwj2zlxtLUC9/WDwAd7ZVG1ZtAFW2zW3U+9/BFNqavUuP5SHqyW Cnuw== X-Received: by 10.182.153.36 with SMTP id vd4mr2302699obb.72.1367531677620; Thu, 02 May 2013 14:54:37 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id n5sm1762442obi.8.2013.05.02.14.54.36 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 02 May 2013 14:54:36 -0700 (PDT) Message-ID: <5182E09B.7070109@gmail.com> Date: Thu, 02 May 2013 17:54:35 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Eric Sandeen , sekharan@us.ibm.com, xfs-oss Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> <51828F84.3040508@sandeen.net> <1367516658.4098.87.camel@chandra-dt.ibm.com> <5182B0FE.4030301@sandeen.net> <5182CE0D.8030502@gmail.com> <5182D123.80005@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc In-Reply-To: <5182D123.80005@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ob0-f182.google.com[209.85.214.182] X-Barracuda-Start-Time: 1367531678 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129833 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/02/2013 04:48 PM, Eric Sandeen wrote: >> ===================================================================== >> This is how things went after using Eric's patch: >> >> root@plbearer:/var/lib/xfstests# ./check generic/001 >> mount: wrong fs type, bad option, bad superblock on /dev/mapper/tData, >> missing codepage or helper program, or other error >> In some cases useful info is found in syslog - try >> dmesg | tail or so > > Yeah this seems . . . suboptimal, I haven't looked into it. > > If TEST_LOGDEV is set it seems like that should be the *first* thing > to try. I don't recall if it did this before the reorganization. > > FWIW, I've seen problems in the past when using devicemapper devices. > One never knows what's a symlink ;) > > If you specify /dev/dm-X instead of the pretty name, does it go any > better for you? > > (I don't remember if that helped; I remember chasing dm issues before. > I just don't use dm in my testing anymore, TBH) :) > > -Eric Ugh, that was a rather sobering experience. Lesson learned. To use /dev/dm-X goes much worse. The /dev/dm-0 for logdev goes untranslated, but the /dev/dm-1 seems to get auto-translated back to /dev/mapper/tData (more commentary after this): ====================================================================== root@plbearer:~# export TEST_DEV=/dev/dm-1 root@plbearer:~# export TEST_LOGDEV=/dev/dm-0 root@plbearer:~# export USE_EXTERNAL="yes" root@plbearer:~# cd /var/lib/xfstests/ root@plbearer:/var/lib/xfstests# mount | grep mapper /dev/mapper/tData on /mnt/testdir type xfs (rw,logdev=/dev/mapper/tLog) root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 mount: /dev/mapper/tData already mounted or /mnt/testdir busy mount: according to mtab, /dev/mapper/tData is already mounted on /mnt/testdir common/rc: retrying test device mount with external set mount: /dev/mapper/tData already mounted or /mnt/testdir busy mount: according to mtab, /dev/mapper/tData is already mounted on /mnt/testdir common/rc: could not mount /dev/dm-1 on /mnt/testdir root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 mount: /dev/mapper/tData already mounted or /mnt/testdir busy mount: according to mtab, /dev/mapper/tData is already mounted on /mnt/testdir common/rc: retrying test device mount with external set mount: /dev/mapper/tData already mounted or /mnt/testdir busy mount: according to mtab, /dev/mapper/tData is already mounted on /mnt/testdir common/rc: could not mount /dev/dm-1 on /mnt/testdir root@plbearer:/var/lib/xfstests# umount $TEST_DEV root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 common/rc: Error: $TEST_DEV (/dev/dm-1) is not a MOUNTED xfs filesystem Filesystem Type 1K-blocks Used Available Use% Mounted on - - 385460 0 385460 0% /dev root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 mount: /dev/mapper/tData already mounted or /mnt/testdir busy mount: according to mtab, /dev/mapper/tData is already mounted on /mnt/testdir common/rc: retrying test device mount with external set mount: /dev/mapper/tData already mounted or /mnt/testdir busy mount: according to mtab, /dev/mapper/tData is already mounted on /mnt/testdir common/rc: could not mount /dev/dm-1 on /mnt/testdir root@plbearer:/var/lib/xfstests# umount $TEST_DEV root@plbearer:/var/lib/xfstests# mount -t xfs -o logdev=$TEST_LOGDEV $TEST_DEV $TEST_DIR root@plbearer:/var/lib/xfstests# mount | grep mapper /dev/mapper/tData on /mnt/testdir type xfs (rw,logdev=/dev/dm-0) root@plbearer:/var/lib/xfstests# echo $TEST_DEV /dev/dm-1 ====================================================================== So I got rid of the linear objects, went to cfdisk, brewed up some good-old-fashioned MBR logical partitions, and then... ====================================================================== root@plbearer:~# mkfs.xfs -l logdev=/dev/sda5 /dev/sda6 meta-data=/dev/sda6 isize=256 agcount=4, agsize=69774 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=279095, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =/dev/sda5 bsize=4096 blocks=16057, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 root@plbearer:~# export TEST_DEV=/dev/sda6 root@plbearer:~# export TEST_LOGDEV=/dev/sda5 root@plbearer:~# export TEST_DIR=/mnt/testdir root@plbearer:~# export USE_EXTERNAL="yes" root@plbearer:~# cd /var/lib/xfstests/ root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 generic/001 7s generic/002 1s Ran: generic/001 generic/002 Passed all 2 tests root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 generic/001 6s generic/002 1s Ran: generic/001 generic/002 Passed all 2 tests root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 generic/001 7s generic/002 1s Ran: generic/001 generic/002 Passed all 2 tests ====================================================================== And here's how it runs on bare partitions after reversing the patch and reinstalling xfstests, as a sort of check figure... ====================================================================== root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 _check_xfs_filesystem: filesystem on /dev/sda6 is inconsistent (c) (see .full) Passed all 0 tests root@plbearer:/var/lib/xfstests# ./check generic/001 generic/002 FSTYP -- xfs (non-debug) PLATFORM -- Linux/i686 plbearer 3.8.11 _check_xfs_filesystem: filesystem on /dev/sda6 is inconsistent (c) (see .full) Passed all 0 tests ====================================================================== So I'll consider this problem solved as well as another trial-by-fire lesson in using the device-mapper objects. Thanks again! Michael From sandeen@sandeen.net Thu May 2 16:58:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 666187F54 for ; Thu, 2 May 2013 16:58:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id F3405AC002 for ; Thu, 2 May 2013 14:58:52 -0700 (PDT) X-ASG-Debug-ID: 1367531928-04bdf077c713e910001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id jD5DUQkr4tyi8YtA for ; Thu, 02 May 2013 14:58:48 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 37CE761AEC42; Thu, 2 May 2013 16:58:48 -0500 (CDT) Message-ID: <5182E197.2030807@sandeen.net> Date: Thu, 02 May 2013 16:58:47 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: Eric Sandeen , sekharan@us.ibm.com, xfs-oss Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> <1367509132.4098.86.camel@chandra-dt.ibm.com> <51828F84.3040508@sandeen.net> <1367516658.4098.87.camel@chandra-dt.ibm.com> <5182B0FE.4030301@sandeen.net> <5182CE0D.8030502@gmail.com> <5182D123.80005@redhat.com> <5182E09B.7070109@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc In-Reply-To: <5182E09B.7070109@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367531928 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129833 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/2/13 4:54 PM, Michael L. Semon wrote: ... > So I'll consider this problem solved as well as another trial-by-fire lesson in using the device-mapper objects. Thanks again! > > Michael well . . . it *should* work. :( Feel free to send patches to make it work. :) -Eric From jeff.liu@oracle.com Fri May 3 02:41:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 49E4729DF8 for ; Fri, 3 May 2013 02:41:32 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id C0E34AC001 for ; Fri, 3 May 2013 00:41:28 -0700 (PDT) X-ASG-Debug-ID: 1367566887-04cb6c66e3160a20001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id u8KtIokNCDKFjHKh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 May 2013 00:41:27 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r437fP8A021333 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 3 May 2013 07:41:26 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r437fOHw010657 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 3 May 2013 07:41:25 GMT Received: from abhmt102.oracle.com (abhmt102.oracle.com [141.146.116.54]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r437fOJj002312 for ; Fri, 3 May 2013 07:41:24 GMT Received: from [192.168.1.104] (/221.223.102.100) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 03 May 2013 00:41:24 -0700 Message-ID: <51836A1F.2020804@oracle.com> Date: Fri, 03 May 2013 15:41:19 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH] xfs: Remove two dead transaction log reservaion macros Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] xfs: Remove two dead transaction log reservaion macros Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1367566887 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129871 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Upstream commit 5b292ae3a951a58e32119d73c7ac8f5bec7395a3 xfs: make use of xfs_calc_buf_res() in xfs_trans.c Beginning from above commit, neither XFS_ALLOCFREE_LOG_RES() nor XFS_DIROP_LOG_RES() is used by those routines for calculating transaction space reservations, so it's safe to remove them now. Also, with a slightly update for the relevant comments to reflect the ideas of why those log count numbers should be. Signed-off-by: Jie Liu --- fs/xfs/xfs_trans.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index cd29f61..0b4db9b 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -210,23 +210,18 @@ struct xfs_log_item_desc { /* * Per-extent log reservation for the allocation btree changes * involved in freeing or allocating an extent. - * 2 trees * (2 blocks/level * max depth - 1) * block size + * 2 trees * (2 blocks/level * max depth - 1) */ -#define XFS_ALLOCFREE_LOG_RES(mp,nx) \ - ((nx) * (2 * XFS_FSB_TO_B((mp), 2 * XFS_AG_MAXLEVELS(mp) - 1))) #define XFS_ALLOCFREE_LOG_COUNT(mp,nx) \ ((nx) * (2 * (2 * XFS_AG_MAXLEVELS(mp) - 1))) /* * Per-directory log reservation for any directory change. - * dir blocks: (1 btree block per level + data block + free block) * dblock size - * bmap btree: (levels + 2) * max depth * block size + * dir blocks: (1 btree block per level + data block + free block) + * bmap btree: (levels + 2) * max depth * v2 directory blocks can be fragmented below the dirblksize down to the fsb * size, so account for that in the DAENTER macros. */ -#define XFS_DIROP_LOG_RES(mp) \ - (XFS_FSB_TO_B(mp, XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK)) + \ - (XFS_FSB_TO_B(mp, XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1))) #define XFS_DIROP_LOG_COUNT(mp) \ (XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK) + \ XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) -- 1.7.9.5 From rjohnston@sgi.com Fri May 3 07:28:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 133477F4C for ; Fri, 3 May 2013 07:28:51 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 33C67AC001; Fri, 3 May 2013 05:28:47 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 07:27:53 -0500 Message-ID: <5183AD53.7030403@sgi.com> Date: Fri, 3 May 2013 07:28:03 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: , Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> In-Reply-To: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Josef, The patch does not compile on older kernels (i.e. SLES11 SP2). fsync-tester.c: In function 'test_three': fsync-tester.c:133: warning: implicit declaration of function 'syncfs' /tmp/cciHR6Gb.o: In function `test_three': /data/lwork/gulag1c/rjohnston/xfstests/src/fsync-tester.c:133: undefined reference to `syncfs' collect2: ld returned 1 exit status gmake[3]: *** [fsync-tester] Error 1 gmake[2]: *** [src] Error 2 make[1]: *** [default] Error 2 make: *** [default] Error 2 src/fsync-tester.c 133 syncfs(test_fd); Typo ????? ^^^^^^ Did you mean fsync? Regards, --Rich From rjohnston@sgi.com Fri May 3 07:49:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 11DCC7F53 for ; Fri, 3 May 2013 07:49:12 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay2.corp.sgi.com (Postfix) with ESMTP id E3B8B30405F; Fri, 3 May 2013 05:49:08 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 07:48:49 -0500 Message-ID: <5183B23B.2070708@sgi.com> Date: Fri, 3 May 2013 07:48:59 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: , Subject: Re: [PATCH] [PATCH] xfstests: use -F when making scratch ext4 fs References: <1367003813-17686-1-git-send-email-jbacik@fusionio.com> In-Reply-To: <1367003813-17686-1-git-send-email-jbacik@fusionio.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Hi Josef, Thanks for this patch, it has been committed, Regards, --Rich commit c150d937f506912da8c48419d6939731d5063967 Author: Josef Bacik Date: Fri Apr 26 19:16:53 2013 +0000 xfstests: use -F when making scratch ext4 fs From cmaiolino@redhat.com Fri May 3 07:51:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1260E29DFA for ; Fri, 3 May 2013 07:51:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0169B8F8052 for ; Fri, 3 May 2013 05:51:04 -0700 (PDT) X-ASG-Debug-ID: 1367585464-04cbb03c2d17ac90001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id apEd3FfrGkwhsm2m for ; Fri, 03 May 2013 05:51:04 -0700 (PDT) X-Barracuda-Envelope-From: cmaiolino@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r43Cp3ab008785 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 3 May 2013 08:51:03 -0400 Received: from andromeda.usersys.redhat.com (ovpn-113-156.phx2.redhat.com [10.3.113.156]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r43CowlH029764 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO) for ; Fri, 3 May 2013 08:51:02 -0400 Date: Fri, 3 May 2013 09:50:57 -0300 From: Carlos Maiolino To: xfs@oss.sgi.com Subject: Out for vacations Message-ID: <20130503125056.GB22648@andromeda.usersys.redhat.com> X-ASG-Orig-Subj: Out for vacations MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367585464 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi guys, Just a heads-up that I'll be enjoining some vacations this month and will be out until June-3rd. -- Carlos From rjohnston@sgi.com Fri May 3 08:00:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E69CE7F55 for ; Fri, 3 May 2013 08:00:32 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 44856AC001; Fri, 3 May 2013 06:00:32 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 08:00:31 -0500 Message-ID: <5183B4F9.2000008@sgi.com> Date: Fri, 3 May 2013 08:00:41 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH V2] xfstests shared/298: various fixes References: <517AE12C.2050902@redhat.com> <517FF548.1010309@sandeen.net> In-Reply-To: <517FF548.1010309@sandeen.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 04/30/2013 11:46 AM, Eric Sandeen wrote: > fix shared/298: > > * don't include common/config, not needed and breaks > stuff when $SCRATCH_DEV_POOL is defined: > Error: $SCRATCH_DEV should be unset when $SCRATCH_DEV_POOL is set > * make sure xfs_io has fiemap, we'll need it > * add -F to the xfs_io invocation, again, for use on > old xfsprogs on non-xfs filesystems > * ignore ENOSPC errors from "garbage" loop; the only goal > is to fill it, ENOSPC doesn't matter. > > Signed-off-by: Eric Sandeen > --- > > V2: break out of copy loop when full Dave, looks like Eric applied your suggestions, may I put your Reviewed-by on this one? From rjohnston@sgi.com Fri May 3 08:06:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EEA947F55 for ; Fri, 3 May 2013 08:06:18 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay1.corp.sgi.com (Postfix) with ESMTP id ADCC48F8049; Fri, 3 May 2013 06:06:15 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 08:06:15 -0500 Message-ID: <5183B652.8020300@sgi.com> Date: Fri, 3 May 2013 08:06:26 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Jan Schmidt , Eric Sandeen , linux-btrfs , xfs-oss Subject: Re: [PATCH] xfstests: btrfs/276 - stop all fsstress before exiting References: <517A10B1.7040107@redhat.com> <517A3C49.9090703@jan-o-sch.net> <7DC41D7F-396D-4769-B573-816E80372456@redhat.com> In-Reply-To: <7DC41D7F-396D-4769-B573-816E80372456@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 04/26/2013 08:10 AM, Eric Sandeen wrote: > On Apr 26, 2013, at 3:35 AM, Jan Schmidt wrote: > >> On Fri, April 26, 2013 at 07:29 (+0200), Eric Sandeen wrote: >>> Tests after 276 were failing because the background fsstress >>> hadn't quit prior to exit, devices couldn't be unmounted, etc. >> >> I don't see how that would happen. Any further insight? >> > Yes, sorry for not including it. The parent process was killed, but the fsstress processes just got reparented to init. > > I tried for a while to use pkill to knock them of first but this seems simpler, actually. > > Eric > Jan, with Eric's explanation, may I put your Reviewed-by: on this patch? From wstanton@mail.smu.edu Fri May 3 08:58:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EB2457F55 for ; Fri, 3 May 2013 08:58:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B7E5D304032 for ; Fri, 3 May 2013 06:58:12 -0700 (PDT) X-ASG-Debug-ID: 1367589489-04bdf077c8179960001-NocioJ Received: from smtap1.systems.smu.edu (smtap1.systems.smu.edu [129.119.65.148]) by cuda.sgi.com with ESMTP id qxAZGXZT8pgQ43Ed (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 03 May 2013 06:58:09 -0700 (PDT) X-Barracuda-Envelope-From: wstanton@mail.smu.edu X-Barracuda-Apparent-Source-IP: 129.119.65.148 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As1RAJrBg1GBd0GH/2dsb2JhbABMAQMQglYhN7FnjUkZYBZkEIIbBgUHOAlDASoLAwExFiYBFQqFQQc+gWAHFwELMqE3jwwFgQSBCSNZbIUshw+NZRUMcEIEAwdogXJhA4c8gSOffh2CcEADgQkDARsHFx59 X-IPAS-Result: As1RAJrBg1GBd0GH/2dsb2JhbABMAQMQglYhN7FnjUkZYBZkEIIbBgUHOAlDASoLAwExFiYBFQqFQQc+gWAHFwELMqE3jwwFgQSBCSNZbIUshw+NZRUMcEIEAwdogXJhA4c8gSOffh2CcEADgQkDARsHFx59 Received: from sxht1p4.systems.smu.edu ([129.119.65.135]) by smtah1.systems.smu.edu with ESMTP/TLS/AES128-SHA; 03 May 2013 08:58:09 -0500 Received: from SXMB1PF.SYSTEMS.SMU.EDU ([fe80::b084:e61a:53b4:7629]) by SXHT1P4.SYSTEMS.SMU.EDU ([fe80::4003:49d5:389b:a18%26]) with mapi id 14.02.0342.003; Fri, 3 May 2013 08:58:08 -0500 From: "Stanton, Walter John" Subject: USER VERIFICATION Thread-Topic: USER VERIFICATION X-ASG-Orig-Subj: USER VERIFICATION Thread-Index: Ac5IBj1dzVJ7ia/yROe7cQSkid5kmw== Date: Fri, 3 May 2013 13:58:07 +0000 Message-ID: <9D2EFFDF399FF54493C16F7E6EB9088E335D810D@SXMB1PF.SYSTEMS.SMU.EDU> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [129.119.65.139] Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: smtap1.systems.smu.edu[129.119.65.148] X-Barracuda-Start-Time: 1367589489 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.93 X-Barracuda-Spam-Status: No, SCORE=1.93 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA074, BSF_SC0_SA074b, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129897 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.50 BSF_SC0_SA074 URI: Custom Rule SA074 0.00 TO_CC_NONE No To: or Cc: header 0.20 BSF_SC0_SA074b Custom Rule SA074b To: undisclosed-recipients:; Dear Webmail User, There are security check on our webmail database system and have your onlin= e access disabled, pending the confirmation of your sign on details. Click the link below to confirm and type in the confirmation number: 1265-6= 778-8250-8393-5727 along with various information in the activation portal. To verify your account Click here Please ensure your enter your username and password details correctly, to a= void losing your email account access permanently. However, your access would be restored after this confirmation; 2013=A9 Webmail Hosting. All rights reserved. Webmail- Support From rjohnston@sgi.com Fri May 3 09:24:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C4C437F55 for ; Fri, 3 May 2013 09:24:19 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay2.corp.sgi.com (Postfix) with ESMTP id 962C230404E; Fri, 3 May 2013 07:24:16 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:24:15 -0500 Message-ID: <5183C89B.8010002@sgi.com> Date: Fri, 3 May 2013 09:24:27 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 1/5] xfstests: fix last test runtime output References: <1367397123-2530-1-git-send-email-david@fromorbit.com> <1367397123-2530-2-git-send-email-david@fromorbit.com> In-Reply-To: <1367397123-2530-2-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 3 09:24:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B823C7F55 for ; Fri, 3 May 2013 09:24:59 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2955CAC002; Fri, 3 May 2013 07:24:56 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:24:55 -0500 Message-ID: <5183C8C2.6050804@sgi.com> Date: Fri, 3 May 2013 09:25:06 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 2/5] xfstests: 310 fails with existing directory error References: <1367397123-2530-1-git-send-email-david@fromorbit.com> <1367397123-2530-3-git-send-email-david@fromorbit.com> In-Reply-To: <1367397123-2530-3-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 3 09:25:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B61737F55 for ; Fri, 3 May 2013 09:25:31 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay1.corp.sgi.com (Postfix) with ESMTP id 95DA88F8035; Fri, 3 May 2013 07:25:28 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:25:28 -0500 Message-ID: <5183C8E3.7000509@sgi.com> Date: Fri, 3 May 2013 09:25:39 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 3/5] xfstests: filter EA paths used by dump References: <1367397123-2530-1-git-send-email-david@fromorbit.com> <1367397123-2530-4-git-send-email-david@fromorbit.com> In-Reply-To: <1367397123-2530-4-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 3 09:25:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CF0D929DF8 for ; Fri, 3 May 2013 09:25:56 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay2.corp.sgi.com (Postfix) with ESMTP id AC47F30404E for ; Fri, 3 May 2013 07:25:56 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:25:56 -0500 Message-ID: <5183C8FF.8000503@sgi.com> Date: Fri, 3 May 2013 09:26:07 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Subject: Re: [PATCH 4/5] xfstests: fix incorrect redirect in generic/232 References: <1367397123-2530-1-git-send-email-david@fromorbit.com> <1367397123-2530-5-git-send-email-david@fromorbit.com> In-Reply-To: <1367397123-2530-5-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 3 09:26:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 018437F59 for ; Fri, 3 May 2013 09:26:35 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay1.corp.sgi.com (Postfix) with ESMTP id C68CE8F8035; Fri, 3 May 2013 07:26:34 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:26:34 -0500 Message-ID: <5183C925.70106@sgi.com> Date: Fri, 3 May 2013 09:26:45 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 5/5] xfstests: fix broken redirects in generic/131 References: <1367397123-2530-1-git-send-email-david@fromorbit.com> <1367397123-2530-6-git-send-email-david@fromorbit.com> In-Reply-To: <1367397123-2530-6-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 3 09:31:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 223247F58 for ; Fri, 3 May 2013 09:31:50 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 92E7CAC002; Fri, 3 May 2013 07:31:49 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:31:49 -0500 Message-ID: <5183CA60.2020308@sgi.com> Date: Fri, 3 May 2013 09:32:00 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 0/5] xfstests: various fixes References: <1367397123-2530-1-git-send-email-david@fromorbit.com> <20130501093139.GN10481@dastard> In-Reply-To: <20130501093139.GN10481@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Thanks Dave, this patchset has been committed. --Rich commit 87f5e8e2dbf02b3c4d804a797ed5a7a643f4b64e Author: Dave Chinner Date: Wed May 1 08:31:59 2013 +0000 xfstests: fix last test runtime output commit 97540f14f71e6785838532a982c443571380cfcc Author: Dave Chinner Date: Wed May 1 08:32:00 2013 +0000 xfstests: 310 fails with existing directory error commit 3ac75605de1fbbaae9505799b46c44fbe053f04e Author: Dave Chinner Date: Wed May 1 08:32:01 2013 +0000 xfstests: filter EA paths used by dump commit e6c6abd6dcacafa778d610451a023ec93c1b352e Author: Dave Chinner Date: Wed May 1 08:32:02 2013 +0000 xfstests: fix incorrect redirect in generic/232 commit 627427bb1bb4007c661a178bbeb4ea0bd0167c6f Author: Dave Chinner Date: Wed May 1 08:32:03 2013 +0000 xfstests: fix broken redirects in generic/131 From list.xfs@jan-o-sch.net Fri May 3 09:41:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 846CD7F5F for ; Fri, 3 May 2013 09:41:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 70E868F8035 for ; Fri, 3 May 2013 07:41:49 -0700 (PDT) X-ASG-Debug-ID: 1367592107-04cb6c66e31808f0001-NocioJ Received: from mail.in8.de (brockman.in8.de [85.214.220.56]) by cuda.sgi.com with ESMTP id VznfIw83yUnu2Lml for ; Fri, 03 May 2013 07:41:48 -0700 (PDT) X-Barracuda-Envelope-From: list.xfs@jan-o-sch.net X-Barracuda-Apparent-Source-IP: 85.214.220.56 Received: from [172.24.1.213] (unknown [192.166.201.94]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.in8.de (Postfix) with ESMTPSA id 8A18F6AC203 for ; Fri, 3 May 2013 16:41:47 +0200 (CEST) Message-ID: <5183CCAA.30302@jan-o-sch.net> Date: Fri, 03 May 2013 16:41:46 +0200 From: Jan Schmidt User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: btrfs/276 - stop all fsstress before exiting References: <517A10B1.7040107@redhat.com> <517A3C49.9090703@jan-o-sch.net> <7DC41D7F-396D-4769-B573-816E80372456@redhat.com> <5183B652.8020300@sgi.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs/276 - stop all fsstress before exiting In-Reply-To: <5183B652.8020300@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: brockman.in8.de[85.214.220.56] X-Barracuda-Start-Time: 1367592108 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129899 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 03, 2013 at 15:06 (+0200), Rich Johnston wrote: > On 04/26/2013 08:10 AM, Eric Sandeen wrote: >> On Apr 26, 2013, at 3:35 AM, Jan Schmidt wrote: >> >>> On Fri, April 26, 2013 at 07:29 (+0200), Eric Sandeen wrote: >>>> Tests after 276 were failing because the background fsstress >>>> hadn't quit prior to exit, devices couldn't be unmounted, etc. >>> >>> I don't see how that would happen. Any further insight? >>> >> Yes, sorry for not including it. The parent process was killed, but the >> fsstress processes just got reparented to init. >> >> I tried for a while to use pkill to knock them of first but this seems >> simpler, actually. >> >> Eric >> > > Jan, with Eric's explanation, may I put your Reviewed-by: on this patch? Yes, you may :-) -Jan From list.xfs@jan-o-sch.net Fri May 3 09:43:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6B84529DF8 for ; Fri, 3 May 2013 09:43:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 579E98F8052 for ; Fri, 3 May 2013 07:43:09 -0700 (PDT) X-ASG-Debug-ID: 1367592188-04cbb03c2c184440001-NocioJ Received: from mail.in8.de (brockman.in8.de [85.214.220.56]) by cuda.sgi.com with ESMTP id BmHpbyQYjgI0hfzR for ; Fri, 03 May 2013 07:43:08 -0700 (PDT) X-Barracuda-Envelope-From: list.xfs@jan-o-sch.net X-Barracuda-Apparent-Source-IP: 85.214.220.56 Received: from [172.24.1.213] (unknown [192.166.201.94]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.in8.de (Postfix) with ESMTPSA id B64EA6AC1FA; Fri, 3 May 2013 16:43:07 +0200 (CEST) Message-ID: <5183CCFB.8060505@jan-o-sch.net> Date: Fri, 03 May 2013 16:43:07 +0200 From: Jan Schmidt User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: xfs@oss.sgi.com CC: Dave Chinner Subject: Re: [PATCH] xfstests: add execution of a custom command to fsstress (-x and -X options) References: <1363863585-25598-1-git-send-email-list.xfs@jan-o-sch.net> <20130321195054.GO17758@dastard> <514B72B9.1010005@jan-o-sch.net> <20130321211218.GP17758@dastard> <514C0309.1000104@jan-o-sch.net> <20130324235135.GH6369@dastard> <515EBE9E.3000905@jan-o-sch.net> X-ASG-Orig-Subj: Re: [PATCH] xfstests: add execution of a custom command to fsstress (-x and -X options) In-Reply-To: <515EBE9E.3000905@jan-o-sch.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: brockman.in8.de[85.214.220.56] X-Barracuda-Start-Time: 1367592188 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129899 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, April 05, 2013 at 14:07 (+0200), Jan Schmidt wrote: > > On Mon, March 25, 2013 at 00:51 (+0100), Dave Chinner wrote: >> On Fri, Mar 22, 2013 at 08:06:49AM +0100, Jan Schmidt wrote: >>> On Thu, March 21, 2013 at 22:12 (+0100), Dave Chinner wrote:> On Thu, Mar 21, >>> 2013 at 09:51:05PM +0100, Jan Schmidt wrote: >>>>> >>>>> >>>>> On 21.03.2013 20:50, Dave Chinner wrote: >>>>>> On Thu, Mar 21, 2013 at 11:59:45AM +0100, Jan Schmidt wrote: >>>>>>> From: Jan Schmidt >>>>>>> >>>>>>> This patch adds execution of a custom command in the middle of all fsstress >>>>>>> operations. Its intended use is the creation of snapshots in the middle of a >>>>>>> test run. >>>>>> >>>>>> Why do you need fsstress to do this? Why can't you just run fsstress >>>>>> in the background and run a loop creating periodic snapshots in the >>>>>> control script? >>>>> >>>>> Because I want reproducible results. Same random seed should result in >>>>> the very same snapshots being created. >>>> >>>> Why can't you run fsstress for N operations, run a snapshot, >>>> then run it again for M operations? That will give you exactly the >>>> same results, wouldn't it? >>> >>> As far as I have understood what fsstress does, the second run would generate >>> different filenames, i.e. it would never rename / truncate / punch holes into / >>> ... files created by the first run - it cannot even know that they exist. >> >> Yes, you are right. >> >>>>>> Also, did you intend that every process creates a snapshot? i.e. it >>>>>> looks lik eif you run a 1000 processes, they'll all run a snapshot >>>>>> operation at X operations? i.e. this will generate nproc * X >>>>>> snapshots in a single run. This doesn't seem very wise to me.... >>>>> >>>>> Agreed, I haven't thought of running more than one process. For the sake >>>>> of reproducibility, I wouldn't want multiple processes for my test case >>>>> either. >>>>> >>>>> I'm not sure if there are other applications than snapshot creation for >>>>> such a feature, so I cannot argue whether to have each process execute >>>>> such a command or not. >>>> >>>> If such a feature is necessary, I'd suggest that implementing the >>>> snapshot ioctl as just another operation directly into fsstress is >>>> probably a better way to implement this functionality. That way you >>>> can control the frequency via the command line in exactly the same >>>> way as every other operation.... >>> >>> What I currently need is a function to make one reasonably weird snapshot. So my >>> plan goes like this: do n weird operations, make a snapshot (this is going to be >>> the base snapshot), do n weird operations (partly to the same files), make a >>> second snapshot (this is going to be the incremental snapshot, I create that one >>> myself after fsstress is done, currently). Having both snapshots with an equal >>> number of modification operations isn't required, however at least a fair number >>> of operations for each of them is desired. >> >> Ah, so you're wanting to test incremental backups based on >> snapshots. Ok, that context puts it in a different light.... >> >>> Adding it as a normal fsstress operation would generate a whole lot of >>> snapshots. I could, for like 50k operations, scale all the factors for each >>> operation accordingly to get a single snapshot out of it. I still won't force it >>> anywhere near the middle that way, though. Also, going from 50k operation to 60k >>> operations gets cumbersome that way. >> >> *nod* >> >>> Plumbing that into fsstress the way I did is the only solution I could think of >>> to reach the mentioned goals. If nobody else needs it, I can of course keep it >>> local, here. However, I'd really like to make an xfstest out of it sooner or >>> later - currently, we've no test at all for (btrfs) send and receive. >> >> For send/receive, you should probably start with some basic tests >> that are easy to verify first. e.g. the equivalent of the basic >> incremental xfsdump/restore tests like 064/065 which do well >> defined, easy to verify operations to determine correct behaviour. > > That sounds like a good start. > >> I can see the value in adding a random variant in addition to these >> basic tests, so I can see how having a predictable callout from >> fsstress would be useful for incremental xfsdump/restore testing as >> well. >> >> FWIW, what does you current callout execute? A shell script that >> runs a bunch of other commands that ends with a btrfs send? > > It's basically just "btrfs subvol snapshot", but yeah, for more complex things > I'd put a shell script there. > >> The biggest question I have about this is how to make it valuable >> for more types of fsstress execution, especially concurrent >> execution. I can't see a use (yet) for a per-process callout, but >> I'm wondering if we should have some kind of "wait for all processes >> to do N ops, then run the callout" style of synchronisation. >> >> I'm not sure what is best here as I don't know the full context of >> what you are wanting to test (and how), but I think we can come up >> with something better than "only works for single process >> invocations". :) > > Well, in fact you do have the full context of what I'm wanting to test, as far > as I can see it. > > I bet we could came up with a suggestion how to interpret something like the > proposed -x switch in multi process context. However, I don't like to code for > hypothetic situations I cannot really imagine a use case for. So, the best thing > I came up with is a switch that can do something meaningful in single process > applications of fsstress. > > I'm happy to code the rest of it, if a good suggestion comes up how this could > be handled and how it could be useful to others as well. Looks like there are no suggestions how to make -x useful for multiple workers. Can we then have the single worker solution (original patch) merged for now? -Jan From rjohnston@sgi.com Fri May 3 09:54:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 07C2E29DF8 for ; Fri, 3 May 2013 09:54:11 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 35570AC002; Fri, 3 May 2013 07:54:10 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 09:54:09 -0500 Message-ID: <5183CF9C.3060808@sgi.com> Date: Fri, 3 May 2013 09:54:20 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH V2] xfstests generic/306 fixes and updates References: <517AD562.3060208@redhat.com> <517E9B52.7030008@sandeen.net> In-Reply-To: <517E9B52.7030008@sandeen.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Thanks Eric, this has been committed. --Rich commit f9e301572071dbde0f1bba348a08b3ffd4fca758 Author: Eric Sandeen Date: Mon Apr 29 16:09:54 2013 +0000 xfstests generic/306 fixes and updates From rjohnston@sgi.com Fri May 3 10:03:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 315E07F60 for ; Fri, 3 May 2013 10:03:37 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay1.corp.sgi.com (Postfix) with ESMTP id 945958F8035; Fri, 3 May 2013 08:03:33 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 10:03:33 -0500 Message-ID: <5183D1D0.40608@sgi.com> Date: Fri, 3 May 2013 10:03:44 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , linux-btrfs Subject: Re: [PATCH] xfstests: btrfs/276 - stop all fsstress before exiting References: <517A10B1.7040107@redhat.com> In-Reply-To: <517A10B1.7040107@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Thanks for the patch Eric and the review Jan, this has been committed. --Rich commit 0b5677123b5d8c0a29b45f55c7b981aeeca9b2c8 Author: Eric Sandeen Date: Fri Apr 26 05:29:21 2013 +0000 xfstests: btrfs/276 - stop all fsstress before exiting From ghro.conf2009@puan.org Fri May 3 10:41:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=DATE_IN_PAST_03_06 autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3236E7F60 for ; Fri, 3 May 2013 10:41:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id BAA96AC001 for ; Fri, 3 May 2013 08:40:57 -0700 (PDT) X-ASG-Debug-ID: 1367595652-04cbb0409c02c40001-NocioJ Received: from ns.clubnet.co.mz (ns.clubnet.co.mz [41.223.152.53]) by cuda.sgi.com with ESMTP id G2mH56jQsRI1wDfc for ; Fri, 03 May 2013 08:40:56 -0700 (PDT) X-Barracuda-Envelope-From: ghro.conf2009@puan.org X-Barracuda-Apparent-Source-IP: 41.223.152.53 Received: from adilgroup.co.mz (localhost.localdomain [127.0.0.1]) by ns.clubnet.co.mz (Postfix) with ESMTP id A34F435699; Fri, 3 May 2013 12:28:12 +0200 (CAT) From: "INFO" Subject: Conference Invitation Notice! Date: Fri, 3 May 2013 13:28:12 +0300 X-ASG-Orig-Subj: Conference Invitation Notice! Message-Id: <20130503102759.M61548@adilgroup.co.mz> X-Mailer: Clubnet WebMail 2.52 20060502 X-OriginatingIP: 41.82.70.235 (adilwaterworld@adilgroup.co.mz) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 To: undisclosed-recipients:; X-Clubnet-MailScanner-Information: Please contact the ISP for more information X-Clubnet-MailScanner-ID: A34F435699.A1381 X-Clubnet-MailScanner: Found to be clean X-Clubnet-MailScanner-SpamScore: s X-Clubnet-MailScanner-From: ghro.conf2009@puan.org X-Barracuda-Connect: ns.clubnet.co.mz[41.223.152.53] X-Barracuda-Start-Time: 1367595655 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.59 X-Barracuda-Spam-Status: No, SCORE=1.59 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620a, DATE_IN_PAST_03_06, DATE_IN_PAST_03_06_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129903 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 DATE_IN_PAST_03_06 Date: is 3 to 6 hours before Received: date 0.50 BSF_SC0_SA620a Custom Rule SA620a 1.08 DATE_IN_PAST_03_06_2 DATE_IN_PAST_03_06_2 You are kindly invited to participate in the upcoming International conference meeting on Human Right and Global Financial Crisis, taking place from 12th to 14th June 2013 here in United States of America, California and in Dakar- Senegal Africa from 17th to 21st June 2013. Registration is freely open to all interested participants; please contact the event secretary email for more information on registration: secertarydesk1@aim.com If you are a holder of an international passport that may require visa to enter the United States and Dakar Senegal, you are to inform us when sending your request for registration, as the organizers of the event is fully responsible for all visa arrangements and travel assistance. Once again we thank you for taking out your time in your busy scheduled to attend these conference meetings with us and we hope to see you at the event venues. Yours faithfully, Miss. Nancy Jeffrey Program Coordinator -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. From rjohnston@sgi.com Fri May 3 11:00:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 156417F5D for ; Fri, 3 May 2013 11:00:29 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 82201AC004; Fri, 3 May 2013 09:00:28 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 11:00:27 -0500 Message-ID: <5183DF27.7030102@sgi.com> Date: Fri, 3 May 2013 11:00:39 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH] xfstests: generic/241 requires dbench References: <1367398071-3112-1-git-send-email-david@fromorbit.com> In-Reply-To: <1367398071-3112-1-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 3 11:02:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8E67129DF8 for ; Fri, 3 May 2013 11:02:23 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id F123EAC001; Fri, 3 May 2013 09:02:19 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 11:02:19 -0500 Message-ID: <5183DF95.6010306@sgi.com> Date: Fri, 3 May 2013 11:02:29 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH] xfstests: generic/241 requires dbench References: <1367398071-3112-1-git-send-email-david@fromorbit.com> In-Reply-To: <1367398071-3112-1-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Thanks Dave, this patch has been committed. --Rich commit 9982cdd2d8d5c2de5d27ac9d1013d98a259b6bae Author: Dave Chinner Date: Wed May 1 08:47:51 2013 +0000 xfstests: generic/241 requires dbench From rjohnston@sgi.com Fri May 3 11:09:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B3B8729DF8 for ; Fri, 3 May 2013 11:09:10 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay1.corp.sgi.com (Postfix) with ESMTP id E3ECD8F8035; Fri, 3 May 2013 09:09:06 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 11:09:06 -0500 Message-ID: <5183E12D.6070706@sgi.com> Date: Fri, 3 May 2013 11:09:17 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , "Michael L. Semon" , Chandra Seetharaman Subject: Re: [PATCH] xfstests: fix internal _xfs_check to handle logdev etc References: <51827DDF.4050708@redhat.com> In-Reply-To: <51827DDF.4050708@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Thanks Eric, this patch has been committeed. --Rich commit 120752942a542742a32aafa2cd5d247f3e0d1479 Author: Eric Sandeen Date: Thu May 2 14:53:19 2013 +0000 xfstests: fix internal _xfs_check to handle logdev etc From JBacik@fusionio.com Fri May 3 12:30:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EBB6529E09 for ; Fri, 3 May 2013 12:30:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 88215AC005 for ; Fri, 3 May 2013 10:30:05 -0700 (PDT) X-ASG-Debug-ID: 1367602204-04bdf047270a5d0001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id KKHQGlLKA3xBfqrZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 May 2013 10:30:04 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx1.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id 2E5609A0687 for ; Fri, 3 May 2013 11:30:04 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1367602204; bh=qMR7lyZGwIXe9sVSuMwvti8sdjHFWl2XztYGjPtzYsc=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=MM5n9pHm25J9cgOhoRLLdBh7a5H+VrpDAg7scOJAbGF+3AjAyyDNj/Z88Ldm8Ljg8 CR7U/5IE6766KQdCHoRHgq3+8vEAfqmKeW14OKqLmaxO5qqOKj6ZYHt7ERZaeiUKU1 VeIOfWQYliryzJLcpLQOgYwfaWkK8gsoqehoh2m0= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx1.fusionio.com with ESMTP id UF2gODoQ3yOVHY0P (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Fri, 03 May 2013 11:30:03 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Fri, 3 May 2013 11:30:02 -0600 Date: Fri, 3 May 2013 13:30:01 -0400 From: Josef Bacik To: Rich Johnston CC: Josef Bacik , "linux-btrfs@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 Message-ID: <20130503173001.GC12414@localhost.localdomain> X-ASG-Orig-Subj: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> <5183AD53.7030403@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <5183AD53.7030403@sgi.com> User-Agent: Mutt/1.5.21 (2011-07-01) X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1367602204 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129911 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Fri, May 03, 2013 at 06:28:03AM -0600, Rich Johnston wrote: > Josef, > > The patch does not compile on older kernels (i.e. SLES11 SP2). > > fsync-tester.c: In function 'test_three': > fsync-tester.c:133: warning: implicit declaration of function 'syncfs' > /tmp/cciHR6Gb.o: In function `test_three': > /data/lwork/gulag1c/rjohnston/xfstests/src/fsync-tester.c:133: undefined > reference to `syncfs' > collect2: ld returned 1 exit status > gmake[3]: *** [fsync-tester] Error 1 > gmake[2]: *** [src] Error 2 > make[1]: *** [default] Error 2 > make: *** [default] Error 2 > > > src/fsync-tester.c > 133 syncfs(test_fd); > Typo ????? ^^^^^^ > Did you mean fsync? > Argh crap I should have noticed this in the manpage syncfs() first appeared in Linux 2.6.39 You can just replace it with sync(), or do you want me to resend the patch with that change? Thanks, Josef From rjohnston@sgi.com Fri May 3 12:54:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 216617F4E for ; Fri, 3 May 2013 12:54:51 -0500 (CDT) Received: from gulag1.americas.sgi.com (gulag1.americas.sgi.com [128.162.236.41]) by relay2.corp.sgi.com (Postfix) with ESMTP id 08C56304043; Fri, 3 May 2013 10:54:47 -0700 (PDT) Received: by gulag1.americas.sgi.com (Postfix, from userid 48222) id B3F98AD10C2D; Fri, 3 May 2013 12:54:47 -0500 (CDT) Message-Id: <20130503173918.138615197@cxfsxe4.americas.sgi.com> User-Agent: quilt/0.47-15.17.1 Date: Fri, 03 May 2013 12:39:18 -0500 From: rjohnston@sgi.com To: xfs@oss.sgi.com Cc: Wang Sheng-Hui Subject: [PATCH V4] xfstests: make install support common/ and tests/ dirs Content-Disposition: inline; filename=v4-xfstests-make-install-support-common-and-tests-dirs.patch xfstests have some change on the organization of the testcases and common* files: * The common* scripts have been reorganized into the common/ dir. * The testcases have been reorganized into sub test dirs under tests/. * The run.* scripts have been removed. This patch uses the simple way to make install support above changes: Make up one Makefile for each newly created subdirs, which can control 'make install' separately. Signed-off-by: Wang Sheng-Hui [rjohnston@sgi.com Reposted for current top of tree changes] --- v4 introduces the following change compared with v3: * reposted for current top of tree changes. [rjohnston@sgi.com] v3 introduces the following change compared with v2: * use the neater way by Dave to get the TESTS_SUBDIRS in tests/Makefile. v2 introduces the following changes compared with v1: * Ingore the file 'group' under the topdir, for it's useless in the new structures. * Remove the redundant comments in the Makefiles. * Use XXX_DIR instead of XXX_SUBDIR in the Makefiles under common/ and tests/. * Export TESTS_DIR in the top level Makefile instead of tests/Makefile. * Obtain the names of dirs for testcases by interating sub dirs under /tests, not by enumeration in tests/Makefile. Makefile | 11 ++++------- common/Makefile | 16 ++++++++++++++++ tests/Makefile | 19 +++++++++++++++++++ tests/btrfs/Makefile | 20 ++++++++++++++++++++ tests/ext4/Makefile | 20 ++++++++++++++++++++ tests/generic/Makefile | 20 ++++++++++++++++++++ tests/shared/Makefile | 20 ++++++++++++++++++++ tests/udf/Makefile | 20 ++++++++++++++++++++ tests/xfs/Makefile | 20 ++++++++++++++++++++ 9 files changed, 159 insertions(+), 7 deletions(-) Index: b/Makefile =================================================================== --- a/Makefile +++ b/Makefile @@ -52,12 +52,14 @@ LDIRT += $(SRCTAR) endif LIB_SUBDIRS = include lib -TOOL_SUBDIRS = ltp src m4 +TOOL_SUBDIRS = ltp src m4 common ifeq ($(HAVE_DMAPI), true) TOOL_SUBDIRS += dmapi endif -SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) +TESTS_DIR = tests +export TESTS_DIR +SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) $(TESTS_DIR) default: include/builddefs $(DMAPI_MAKEFILE) $(TESTS) ifeq ($(HAVE_BUILDDEFS), no) @@ -91,12 +93,7 @@ depend: include/builddefs $(addsuffix -d install: default $(addsuffix -install,$(SUBDIRS)) $(INSTALL) -m 755 -d $(PKG_LIB_DIR) $(INSTALL) -m 755 check $(PKG_LIB_DIR) - $(INSTALL) -m 755 [0-9]?? $(PKG_LIB_DIR) - $(INSTALL) -m 755 run.* $(PKG_LIB_DIR) - $(INSTALL) -m 644 group $(PKG_LIB_DIR) $(INSTALL) -m 644 randomize.awk $(PKG_LIB_DIR) - $(INSTALL) -m 644 [0-9]??.* $(PKG_LIB_DIR) - $(INSTALL) -m 644 common* $(PKG_LIB_DIR) # Nothing. install-dev install-lib: Index: b/common/Makefile =================================================================== --- /dev/null +++ b/common/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (c) 2003-2006 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = .. +include $(TOPDIR)/include/builddefs + +COMMON_DIR = common + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/$(COMMON_DIR) + $(INSTALL) -m 644 * $(PKG_LIB_DIR)/$(COMMON_DIR) + +install-dev install-lib: Index: b/tests/Makefile =================================================================== --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,19 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = .. +include $(TOPDIR)/include/builddefs + +TESTS_SUBDIRS = $(sort $(dir $(wildcard $(PWD)/$(TESTS_DIR)/[a-z]*/))) + +include $(BUILDRULES) + +install: $(addsuffix -install,$(TESTS_SUBDIRS)) + $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/$(TESTS_DIR) + +# Nothing. +install-dev install-lib: + +%-install: + $(MAKE) $(MAKEOPTS) -C $* install Index: b/tests/btrfs/Makefile =================================================================== --- /dev/null +++ b/tests/btrfs/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = ../.. +include $(TOPDIR)/include/builddefs + +BTRFS_DIR = btrfs +TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(BTRFS_DIR) + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(TARGET_DIR) + $(INSTALL) -m 755 [0-9]?? $(TARGET_DIR) + $(INSTALL) -m 644 group $(TARGET_DIR) + $(INSTALL) -m 644 [0-9]??.* $(TARGET_DIR) + +# Nothing. +install-dev install-lib: Index: b/tests/ext4/Makefile =================================================================== --- /dev/null +++ b/tests/ext4/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = ../.. +include $(TOPDIR)/include/builddefs + +EXT4_DIR = ext4 +TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(EXT4_DIR) + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(TARGET_DIR) + $(INSTALL) -m 755 [0-9]?? $(TARGET_DIR) + $(INSTALL) -m 644 group $(TARGET_DIR) + $(INSTALL) -m 644 [0-9]??.* $(TARGET_DIR) + +# Nothing. +install-dev install-lib: Index: b/tests/generic/Makefile =================================================================== --- /dev/null +++ b/tests/generic/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = ../.. +include $(TOPDIR)/include/builddefs + +GENERIC_DIR = generic +TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(GENERIC_DIR) + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(TARGET_DIR) + $(INSTALL) -m 755 [0-9]?? $(TARGET_DIR) + $(INSTALL) -m 644 group $(TARGET_DIR) + $(INSTALL) -m 644 [0-9]??.* $(TARGET_DIR) + +# Nothing. +install-dev install-lib: Index: b/tests/shared/Makefile =================================================================== --- /dev/null +++ b/tests/shared/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = ../.. +include $(TOPDIR)/include/builddefs + +SHARED_DIR = shared +TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(SHARED_DIR) + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(TARGET_DIR) + $(INSTALL) -m 755 [0-9]?? $(TARGET_DIR) + $(INSTALL) -m 644 group $(TARGET_DIR) + $(INSTALL) -m 644 [0-9]??.* $(TARGET_DIR) + +# Nothing. +install-dev install-lib: Index: b/tests/udf/Makefile =================================================================== --- /dev/null +++ b/tests/udf/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = ../.. +include $(TOPDIR)/include/builddefs + +UDF_DIR = udf +TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(UDF_DIR) + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(TARGET_DIR) + $(INSTALL) -m 755 [0-9]?? $(TARGET_DIR) + $(INSTALL) -m 644 group $(TARGET_DIR) + $(INSTALL) -m 644 [0-9]??.* $(TARGET_DIR) + +# Nothing. +install-dev install-lib: Index: b/tests/xfs/Makefile =================================================================== --- /dev/null +++ b/tests/xfs/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (c) 2003-2005 Silicon Graphics, Inc. All Rights Reserved. +# + +TOPDIR = ../.. +include $(TOPDIR)/include/builddefs + +XFS_DIR = xfs +TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(XFS_DIR) + +include $(BUILDRULES) + +install: + $(INSTALL) -m 755 -d $(TARGET_DIR) + $(INSTALL) -m 755 [0-9]?? $(TARGET_DIR) + $(INSTALL) -m 644 group $(TARGET_DIR) + $(INSTALL) -m 644 [0-9]??.* $(TARGET_DIR) + +# Nothing. +install-dev install-lib: From rjohnston@sgi.com Fri May 3 12:58:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6D1B27F4E for ; Fri, 3 May 2013 12:58:57 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4A667304051; Fri, 3 May 2013 10:58:57 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 12:58:56 -0500 Message-ID: <5183FAEC.1040309@sgi.com> Date: Fri, 3 May 2013 12:59:08 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: CC: Wang Sheng-Hui Subject: Re: [PATCH V4] xfstests: make install support common/ and tests/ dirs References: <20130503173918.138615197@cxfsxe4.americas.sgi.com> In-Reply-To: <20130503173918.138615197@cxfsxe4.americas.sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Note you will need to 'git revert 2519a97d' before applying this patch. From g-15258175393-15223-1500242317-1367603983774@bounce.courrier.sofactory.fr Fri May 3 12:59:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EDBE07F4E for ; Fri, 3 May 2013 12:59:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id DB7E98F8035 for ; Fri, 3 May 2013 10:59:48 -0700 (PDT) X-ASG-Debug-ID: 1367603985-04cbb0409d0c1c0001-NocioJ Received: from unusduosx.sigma.ec-cluster.com (unusduosx.sigma.ec-cluster.com [195.140.184.126]) by cuda.sgi.com with ESMTP id Gnu8NbuJM1r16RcN for ; Fri, 03 May 2013 10:59:45 -0700 (PDT) X-Barracuda-Envelope-From: g-15258175393-15223-1500242317-1367603983774@bounce.courrier.sofactory.fr X-Barracuda-Apparent-Source-IP: 195.140.184.126 Received: from app31.muc.ec-messenger.com (app31.muc.domeus.com [172.16.8.61]) by mta40.muc.ec-messenger.com (READY) with ESMTP id BE47D3003CBAE for ; Fri, 3 May 2013 19:59:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=courrier.sofactory.fr; s=ecm1; t=1367603983; bh=v/fV0+C29QV7JBBToj6iLYt+ofpr1WD+kc4XMmBUXSE=; h=Date:From:Reply-To:To:Message-ID:Subject:MIME-Version: Content-Type:List-Id; b=cIgpK1xOYZrisTQLagbwRFGe/3YviNOXmULzp9X8uyYe/t0HICBgE5qrVyOCe2R3V q75czb8KRJbvxB+Xc3qpwXZuNVtIWtXTvKv3hB+Xf9/UJP9pO1f8LKVgtTM1mro7rW q4NScLw9cgd5xBQXx2XjEdtbrFvxCeRN4+xNjdtc= Date: Fri, 3 May 2013 19:59:43 +0200 (CEST) From: "Sofactory.fr" Reply-To: Newsletter Sofactory To: xfs@oss.sgi.com Message-ID: Subject: =?ISO-8859-1?Q?Bienvenue,_8_euros_offerts_sur_votre_premi=E8re_commande_!?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?ISO-8859-1?Q?Bienvenue,_8_euros_offerts_sur_votre_premi=E8re_commande_!?= Content-Type: multipart/alternative; boundary="----=_Part_50662_1936659673.1367603983771" X-eC-messenger-mid: 1500242317 List-Id: <1500003765.courrier.sofactory.fr> X-eC-messenger-cid: 15223 X-eC-messenger-token: ot7edpI70cbnhd X-eC-messenger-sender-domain: bounce.courrier.sofactory.fr X-eCircle-Complaints: complaint@ecircle.com X-CSA-Complaints: whitelist-complaints@eco.de X-Mailer: eC-Messenger Build 6.80.149 X-eC-messenger-email: xfs@oss.sgi.com X-Barracuda-Connect: unusduosx.sigma.ec-cluster.com[195.140.184.126] X-Barracuda-Start-Time: 1367603985 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129913 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message ------=_Part_50662_1936659673.1367603983771 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-ecm-part-format: email-text Succombez =E0 la tentation d'un mobilier design de qualit=E9. Tables, chaises ou canap=E9s : laissez-vous charmer par notre large gamme d= e mobilier design. El=E9gant et tendance, chacun de nos mod=E8les trouvera sa place tout natur= ellement au coeur de votre int=E9rieur. Sofactory, le sp=E9cialiste de la vente de mobilier sur Internet. Sofactory.fr LA NEWSLETTER Nouveaut=E9s =E0 ne pas rater http://courrier.sofactory.fr/re?l=3Dot7edpI70cbnhdI0Iot27fj Acheter chez Sofactory.fr c'est la garantie d'un achat serein. Diff=E9rents moyens de paiement 100% s=E9curis=E9s. Une garantie satisfait ou rembours=E9 15 jours. Des facilit=E9s de paiements. Un service client =E0 votre =E9coute joignable 5j/7 Cette lettre a pour but de vous informer des nouveaut=E9s et des bonnes aff= aires pr=E9sentes sur Sofactory.fr. Pour =EAtre s=FBr de recevoir tous nos e-mails, ajouter newsletter@courrier= .sofactory.fr =E0 votre carnet d'adresses. ------=_Part_50662_1936659673.1367603983771 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-ecm-part-format: email-html D=E9couvrez la newsletter Sofactory
=09 =09
-8€ sur les meu= bles design, =E7a ne se refuse pas ! Profitez de notre offre de bienvenue s= ur votre premi=E8re commande !
Ce message ne s'affi= che pas correctement ? Consultez notre version en ligne.
Vous re= cevez cette offre car vous avez accepté de recevoir les informations= de Sofactory.
Vous pouvez à tout moment, choisir d'être <= a href=3D"http://courrier.sofactory.fr/public/unsubscribe.jsp?gid=3D1500003= 765&uid=3D15258175393&mid=3D1500242317&sig=3DGCMJOPFCJBJHDPGL" target=3D"_b= lank" style=3D"color:#646363; text-decoration:underline;">retiré d&e= acute;finitivement de nos listes de diffusion.
Ajoutez newsletter@courrier.sofactory.fr &a= grave; votre carnet d'adresses.
=09 =09=09=20 =09
3D"
=09 =09=09 =09 =09
CANAPÉ CHAISE TABLE TABLE BASSE RANGEMENT LITERIE JARDIN DÉCO<= /a> Styles
=09
3D"Bienve=<= /a> 3D"Pour
=09 =09=09
3D"Offre =09=09xfs@oss.sgi.com
=09
3D"Sp&eac=
=09 =09=09
NREDUC8
=09
3D"Offre 3D"J'en
=09 =09=09
3D"jusqu'= 3D"&agrav=3D"jusqu'&a= 3D"jusqu'= 3D"Et
=09
3D"Avanta=
=09 =09=09 =09=09 =09=09 =09
3D"Des3D"En =09=093D"Des 3D"Paiement= 3D"Nos<= /a>
=09 =09=09 =09=09 =09
Des prix
imbattables
en stock =3D livraison
sous 10 jours
Des magasins pour voir
et tester nos produits
Paiement en 4 fois
par CB à partir de 100€
Nos conseillers
à votre écoute
=09=09 =09
Ce message ne s'affiche pas correcte= ment ? Consultez notre version en ligne.
Vous recevez cette offre car vous avez accepté de recevoir l= es informations de Sofactory.
Vous pouvez à tout moment, choisir= d'être re= tiré définitivement de nos listes de diffusion.

= =20 Sofactory.fr est le sp=E9cialiste du de la vente de meubles sur Int= ernet =E0 prix cass=E9 : Retrouvez des Canap=E9s, Tables,
Tables basses,= Meubles TV =E0 des prix allant jusqu'=E0 -40% par rapport aux prix constat= =E9s en magasins.
D=E9couvrez =E9galement nos rayons Mobilier de Jardin = et D=E9coration pour embellir votre int=E9rieur et votre ext=E9rieur
=E0= moindre co=FBt.

Sofactory s'engage =E0 vous d=E9livrer plus de 5 000 produits en st= ock, livrables chez vous sous 10 jours seulement,
garantis 2 ans avec un paiement s=E9curis=E9.

=20 Pour toute question, notre service commercial est disponible au 01 73 604 604 (Prix d'un appel local)
du lundi au vendredi de = 9H30 =E0 19H. Vous pouvez =E9galement nous contacter =E0 l'adresse e-mail s= uivante : contact@sofactory.fr.

=20 =20 Conform=E9ment =E0 la loi n=B0 78-17 du 6 janvier 1978 dite "infor= matique et libert=E9s", vous disposez d'un droit d'acc=E8s,
de modifica= tion, de rectification et de suppression des donn=E9es vous concernant. Vou= s avez la possibilit=E9 d'exercer
ce droit sur simple demande par courr= ier =E0 Service Clients Sofactory - 14/32 rue Edouard Vaillant - 91200 Athi= s Mons.
=20 =20 Sofactory.fr est une soci=E9t=E9 fran=E7aise, dont le si=E8ge socia= l est situ=E9 14/32 rue Edouard Vaillant - 91200 Athis Mons.
Vous pouve= z consulter nos Mentions L=E9gales. =20
=20
=20 ------=_Part_50662_1936659673.1367603983771-- From rjohnston@sgi.com Fri May 3 13:01:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 15C977F78 for ; Fri, 3 May 2013 13:01:01 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay2.corp.sgi.com (Postfix) with ESMTP id C69FF304051; Fri, 3 May 2013 11:01:00 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 13:01:00 -0500 Message-ID: <5183FB67.8000202@sgi.com> Date: Fri, 3 May 2013 13:01:11 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: "linux-btrfs@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> <5183AD53.7030403@sgi.com> <20130503173001.GC12414@localhost.localdomain> In-Reply-To: <20130503173001.GC12414@localhost.localdomain> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/03/2013 12:30 PM, Josef Bacik wrote: > On Fri, May 03, 2013 at 06:28:03AM -0600, Rich Johnston wrote: >> Josef, >> >> The patch does not compile on older kernels (i.e. SLES11 SP2). >> >> fsync-tester.c: In function 'test_three': >> fsync-tester.c:133: warning: implicit declaration of function 'syncfs' >> /tmp/cciHR6Gb.o: In function `test_three': >> /data/lwork/gulag1c/rjohnston/xfstests/src/fsync-tester.c:133: undefined >> reference to `syncfs' >> collect2: ld returned 1 exit status >> gmake[3]: *** [fsync-tester] Error 1 >> gmake[2]: *** [src] Error 2 >> make[1]: *** [default] Error 2 >> make: *** [default] Error 2 >> >> >> src/fsync-tester.c >> 133 syncfs(test_fd); >> Typo ????? ^^^^^^ >> Did you mean fsync? >> > > Argh crap I should have noticed this in the manpage > > syncfs() first appeared in Linux 2.6.39 > > You can just replace it with sync(), or do you want me to resend the patch with > that change? Thanks, > > Josef > No need to repost I will change it to sync() at commit time ;-) --Rich From rjohnston@sgi.com Fri May 3 13:21:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C593D7F77 for ; Fri, 3 May 2013 13:21:53 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.102.196]) by relay3.corp.sgi.com (Postfix) with ESMTP id 24DC3AC002; Fri, 3 May 2013 11:21:50 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 13:21:49 -0500 Message-ID: <51840047.4020908@sgi.com> Date: Fri, 3 May 2013 13:21:59 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: , Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> In-Reply-To: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Thanks for another patch Josef, it has been committed with the change discussed. --Rich commit 2ca254dfddbbab8def35472b6ca39140400aff76 Author: Josef Bacik Date: Fri Apr 26 19:13:59 2013 +0000 xfstests 311: test fsync with dm flakey V3 From JBacik@fusionio.com Fri May 3 14:05:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 05ED87F82 for ; Fri, 3 May 2013 14:05:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CAE248F8065 for ; Fri, 3 May 2013 12:05:18 -0700 (PDT) X-ASG-Debug-ID: 1367607917-04bdf0472a0e9d0001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id kxEHSOlsovRyH1vB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 May 2013 12:05:17 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx1.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id 51C409A0420 for ; Fri, 3 May 2013 13:05:17 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1367607917; bh=KyWvRUsptWUfeFKtZCTPbSmVyZm/rmy1I9gk9MTf4HY=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=qd32QoLlrg1VFWHY4zLPMQlhZQWk+kxXGDGYW+waV0qqQJ2faYrLBBwiRHu2opUf3 DEjYy998jhs1kqiUmwFyVPuKvNnsMDtQ5Q5Ru/a91CwaNyMINasDzpIq/7oHwHdWLF CL6gxpdYrZLgFK9H0cM/sSBB2FTRuz45EYFQVPW4= Received: from mail1.int.fusionio.com ([10.101.1.21]) by mx1.fusionio.com with ESMTP id XaF2VayhxPdyLwpF (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Fri, 03 May 2013 13:05:16 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Fri, 3 May 2013 13:05:15 -0600 Date: Fri, 3 May 2013 15:05:14 -0400 From: Josef Bacik To: Rich Johnston CC: Josef Bacik , "linux-btrfs@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 Message-ID: <20130503190514.GD12414@localhost.localdomain> X-ASG-Orig-Subj: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> <51840047.4020908@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <51840047.4020908@sgi.com> User-Agent: Mutt/1.5.21 (2011-07-01) X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1367607917 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129917 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Fri, May 03, 2013 at 12:21:59PM -0600, Rich Johnston wrote: > Thanks for another patch Josef, it has been committed with the change > discussed. > Err I forgot to point out I already have a "sync" variable in there so it fails to compile, we'll need to change the var to do_sync or something. Want me to send a patch along? Thanks, Josef From rjohnston@sgi.com Fri May 3 14:26:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 174157F89 for ; Fri, 3 May 2013 14:26:04 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21-nlb.corp.sgi.com [137.38.102.197]) by relay2.corp.sgi.com (Postfix) with ESMTP id DB6B3304043; Fri, 3 May 2013 12:26:00 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 3 May 2013 14:26:00 -0500 Message-ID: <51840F54.9060206@sgi.com> Date: Fri, 3 May 2013 14:26:12 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: "linux-btrfs@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> <51840047.4020908@sgi.com> <20130503190514.GD12414@localhost.localdomain> In-Reply-To: <20130503190514.GD12414@localhost.localdomain> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/03/2013 02:05 PM, Josef Bacik wrote: > On Fri, May 03, 2013 at 12:21:59PM -0600, Rich Johnston wrote: >> Thanks for another patch Josef, it has been committed with the change >> discussed. >> > > Err I forgot to point out I already have a "sync" variable in there so it fails > to compile, we'll need to change the var to do_sync or something. Want me to > send a patch along? Thanks, > > Josef > Sorry this was my fault, I have reverted commit 7f622f44b651aec13b99ef62c2942388a6fbee5d Author: Rich Johnston Date: Fri May 3 14:07:59 2013 -0500 Revert "xfstests 311: test fsync with dm flakey V3" and committed it again. commit dd3b5268312e0518ae695e8ee2a618f13805c425 Author: Josef Bacik Date: Fri Apr 26 19:13:59 2013 +0000 xfstests 311: test fsync with dm flakey V4 From delivery@mx.sailthru.com Fri May 3 14:37:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_IMAGE_RATIO_08, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C13EA7F8A for ; Fri, 3 May 2013 14:37:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id ABEA98F8066 for ; Fri, 3 May 2013 12:37:21 -0700 (PDT) X-ASG-Debug-ID: 1367609839-04cbb0409b10df0001-NocioJ Received: from mx-fab-e.sailthru.com (mx-fab-e.sailthru.com [65.39.215.63]) by cuda.sgi.com with ESMTP id oTMROwEHCbgDd1lk for ; Fri, 03 May 2013 12:37:19 -0700 (PDT) X-Barracuda-Envelope-From: delivery@mx.sailthru.com X-Barracuda-Apparent-Source-IP: 65.39.215.63 Received: from nyp1-jmailer24.sailthru.pvt (nyp1-jmailer24.sailthru.com [65.39.215.176]) by mx-fab-e.sailthru.com (Postfix) with ESMTP id 21ECE6447F0 for ; Fri, 3 May 2013 12:37:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; t=1367609839; s=sailthru; d=eu.fab.com; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-ID:List-Unsubscribe; bh=SuH7bRSBXSutVr4QZSwS4w9gnIXV6GdGdKv8NkK/h30=; b=mhWvm8WBvHjRQQcdXI8GUImF3U7bUXcJJXIg9cKeeLZNHslIfRao6nbyBWvKZElG yXwBmwFbgwcsWsHmzxBErZkG9OpXphANlfVI3NUcezXTv3Nx9AsNezRjUaFkU93mGLa +JM981nFLo9OvfKfdbsgpXO6HUTho31dHTe+L8Po= Date: Fri, 3 May 2013 15:37:19 -0400 (EDT) From: Fab To: xfs@oss.sgi.com Message-ID: <20130503193719.518411efd2f8805e4c000148@sailthru.com> Subject: Invite from stripainaaste@inbox.lv to Fab MIME-Version: 1.0 X-ASG-Orig-Subj: Invite from stripainaaste@inbox.lv to Fab Content-Type: multipart/alternative; boundary="----=_Part_2289212_1330014511.1367609839142" X-TM-ID: 20130503193719.518411efd2f8805e4c000148 X-Info: Message sent by sailthru.com customer Fab Europe X-Info: We do not permit unsolicited commercial email X-Info: Please report abuse by forwarding complete headers to X-Info: abuse@sailthru.com X-Mailer: sailthru.com X-IADB-IP: 65.39.215.63 X-IADB-IP-REVERSE: 63.215.39.65 X-IADB-URL: http://www.isipp.com/iadb.php X-Unsubscribe-Web: http://mailer.eu.fab.com/oc/518411ef1e240a9c3f720b9e518411efd2f8805e4c000148/bf289280 List-ID: List-Unsubscribe: , X-Barracuda-Connect: mx-fab-e.sailthru.com[65.39.215.63] X-Barracuda-Start-Time: 1367609839 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.40 X-Barracuda-Spam-Status: No, SCORE=0.40 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA038b, DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_08, HTML_MESSAGE, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129919 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_IMAGE_RATIO_08 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) 0.20 BSF_SC0_SA038b Custom Rule SA038b ------=_Part_2289212_1330014511.1367609839142 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable =C2=A0 =C2=A0 =C2=A0 If you are unable to see this message, click here to viewTo ensure delivery to = your inbox, please add info@eu.fab.com to your address book. =C2=A0 =C2=A0 Great News!xfs@o= ss.sgi.com
Here's your exclusive i= nvite from stripainaaste@inbox.lv to join FabFab provides daily design = inspirations and sales from the world's leading designers at prices up to 70% off retail. About Help Contact= Us Return Policy Shipping Terms Privacy tw fb =C2=A0 If you believe this has been sent to you in error, please click to safely unsubscribe. ------=_Part_2289212_1330014511.1367609839142 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
If you are una= ble to see this message, click here to viewTo ensure delivery to your inbox, please add = info@eu.fab.com to your address bo= ok.
3DSmile,
3D"" Great News!xfs@o= ss.sgi.com
Here's your exclusive i= nvite from stripainaaste@inbox.lv to join FabFab provides daily design = inspirations and sales from the world's leading designers at prices up to 70% off retail.
=
3D"" 3D"" 3D""
3D""
About Help Contact Us Return Policy Shipping Terms Privacy 3D"tw= 3D"fb"
You received this email becaus= e you are registered on eu.fab.com with the = email address: xfs@oss.sgi.com. We respec= t your privacy. View our privacy polic= y. If you believe this has been sent to you in error, please safely unsubscribe.
3D""
Fab.com GmbH, Rungestrasse= 22-24, 3. Hof, 10179 Berlin
Managing = Directors: Jason Goldberg, Maria Molland
District = Court Charlottenburg: HRB 135921, USt.-IdNr. DE815298117
------=_Part_2289212_1330014511.1367609839142-- From JBacik@fusionio.com Fri May 3 15:11:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 291F829DF8 for ; Fri, 3 May 2013 15:11:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 079E2304051 for ; Fri, 3 May 2013 13:11:39 -0700 (PDT) X-ASG-Debug-ID: 1367611898-04cb6c44f213410001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id yQEDC6srCW3eNtTD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 May 2013 13:11:38 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id 19C179A0017 for ; Fri, 3 May 2013 14:11:38 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1367611898; bh=IBMrD/CaxlxFqq5kMjx11mtUk+tZFdES9u8yft7hcWA=; h=From:To:Subject:Date; b=MoHXyspDHU4uWFCLb2J5ZX92XhSUaJYO4NzalA4LnUSY73g4tJhuicGse668tSuP5 AryBARnfyTGh9xRqJq9X4gwZrsiNa3hJNWo6myecuckcO2lcEesMgdY9I3FxPA49Uf sWUcnG7D/LQ/uA1NP0xCXgP4vmYmxECZgcqc8WBw= Received: from mail1.int.fusionio.com ([10.101.1.21]) by mx2.fusionio.com with ESMTP id WL8TX7f42H4R76mT (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Fri, 03 May 2013 14:11:37 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Fri, 3 May 2013 14:11:36 -0600 From: Josef Bacik To: , Subject: [PATCH] xfstests: unmount scratch mnt in test 307 Date: Fri, 3 May 2013 16:11:35 -0400 X-ASG-Orig-Subj: [PATCH] xfstests: unmount scratch mnt in test 307 Message-ID: <1367611895-6852-1-git-send-email-jbacik@fusionio.com> X-Mailer: git-send-email 1.7.7.6 MIME-Version: 1.0 Content-Type: text/plain X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1367611898 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129921 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature So if you have a mount command that doesn't use /etc/mtab then it will spit out a different device for the mounted device. So say we have SCRATCH_DEV_POOL="/dev/sda /dev/sdb /dev/sdc" we will turn this into SCRATCH_DEV="/dev/sda" SCRATCH_DEV_POOL="/dev/sdb /dev/sdc" and then when you mkfs this you do _scratch_mkfs $SCRATCH_DEV_POOL which turns into this mkfs.btrfs /dev/sdb /dev/sdc /dev/sda becuase we do mkfs $* $SCRATCH_DEV Then btrfs will always show the lowest devid in /proc/mounts to maintain consistency, so even though we do mount /dev/sda $SCRATCH_MNT, you will see /dev/sdb as the mounted device in /proc/mounts. So then say the next test wants to just use $SCRATCH_DEV, it will do _require_scratchdev which will check to see if $SCRATCH_DEV is mounted, which it will look like it is not because /proc/mounts shows /dev/sdb instead of /dev/sda, and so it won't umount $SCRATCH_MNT, and then that test will fail because we can't mkfs the device because it is busy. I reproduced this on a box that doesn't use /etc/mtab by doing ./check btrfs/307 generic/015 and 015 would fail. With this patch it passes now. Thanks, Signed-off-by: Josef Bacik --- tests/btrfs/307 | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/tests/btrfs/307 b/tests/btrfs/307 index 87314c6..15157b3 100644 --- a/tests/btrfs/307 +++ b/tests/btrfs/307 @@ -35,6 +35,7 @@ _cleanup() { cd / rm -f $tmp.* + umount $SCRATCH_MNT } # get standard environment, filters and checks -- 1.7.7.6 From sandeen@redhat.com Fri May 3 15:15:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 944147F4E for ; Fri, 3 May 2013 15:15:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 819108F806F for ; Fri, 3 May 2013 13:15:11 -0700 (PDT) X-ASG-Debug-ID: 1367612107-04cbb0409e12f00001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 5YPwbFM2OgGRhqes for ; Fri, 03 May 2013 13:15:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r43KF2L6016047 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 3 May 2013 16:15:05 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r43KF1JF024625 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 3 May 2013 16:15:02 -0400 Message-ID: <51841AC5.3090309@redhat.com> Date: Fri, 03 May 2013 15:15:01 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: xfs@oss.sgi.com, linux-btrfs@vger.kernel.org Subject: Re: [PATCH] xfstests: unmount scratch mnt in test 307 References: <1367611895-6852-1-git-send-email-jbacik@fusionio.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: unmount scratch mnt in test 307 In-Reply-To: <1367611895-6852-1-git-send-email-jbacik@fusionio.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367612107 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/3/13 3:11 PM, Josef Bacik wrote: > So if you have a mount command that doesn't use /etc/mtab then it will spit out > a different device for the mounted device. So say we have > > SCRATCH_DEV_POOL="/dev/sda /dev/sdb /dev/sdc" > > we will turn this into > > SCRATCH_DEV="/dev/sda" > SCRATCH_DEV_POOL="/dev/sdb /dev/sdc" > > and then when you mkfs this you do _scratch_mkfs $SCRATCH_DEV_POOL which turns > into this > > mkfs.btrfs /dev/sdb /dev/sdc /dev/sda > > becuase we do > > mkfs $* $SCRATCH_DEV > > Then btrfs will always show the lowest devid in /proc/mounts to maintain > consistency, so even though we do mount /dev/sda $SCRATCH_MNT, you will see > /dev/sdb as the mounted device in /proc/mounts. So then say the next test wants > to just use $SCRATCH_DEV, it will do _require_scratchdev which will check to see > if $SCRATCH_DEV is mounted, which it will look like it is not because > /proc/mounts shows /dev/sdb instead of /dev/sda, and so it won't umount > $SCRATCH_MNT, and then that test will fail because we can't mkfs the device > because it is busy. I reproduced this on a box that doesn't use /etc/mtab by > doing > > ./check btrfs/307 generic/015 > > and 015 would fail. With this patch it passes now. Thanks, > > Signed-off-by: Josef Bacik > --- > tests/btrfs/307 | 1 + > 1 files changed, 1 insertions(+), 0 deletions(-) > > diff --git a/tests/btrfs/307 b/tests/btrfs/307 > index 87314c6..15157b3 100644 > --- a/tests/btrfs/307 > +++ b/tests/btrfs/307 > @@ -35,6 +35,7 @@ _cleanup() > { > cd / > rm -f $tmp.* > + umount $SCRATCH_MNT > } > > # get standard environment, filters and checks > This seems fine for this particular test. Is it really a hard requirement that each test unmount SCRATCH_[DEV|MNT] if it used it? If so, fine... the README does indicate this. But I wonder if we can make it a little more foolproof by updating _require_scratch to handle this situation more gracefully? -Eric From uscanga@bcm.edu Fri May 3 15:28:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0236C29DF8 for ; Fri, 3 May 2013 15:28:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8F04DAC003 for ; Fri, 3 May 2013 13:28:58 -0700 (PDT) X-ASG-Debug-ID: 1367612935-04cbb0409d13a40001-NocioJ Received: from iron3.corp.bcm.tmc.edu (iron3.bcm.edu [128.249.224.15]) by cuda.sgi.com with ESMTP id vOWQbDB37nlm03f4 for ; Fri, 03 May 2013 13:28:55 -0700 (PDT) X-Barracuda-Envelope-From: uscanga@bcm.edu X-Barracuda-Apparent-Source-IP: 128.249.224.15 X-IronPort-AV: E=Sophos;i="4.87,607,1363150800"; d="scan'208";a="3113883" Received: from unknown (HELO epw-exhub1-p020.ad.bcm.edu) ([10.22.132.47]) by iron3-out.bcm.edu with ESMTP; 03 May 2013 15:28:54 -0500 Received: from EXCMSMBX04.ad.bcm.edu ([fe80::c465:f44:8c54:8d18]) by epw-exhub1-p020.ad.bcm.edu ([::1]) with mapi; Fri, 3 May 2013 15:28:54 -0500 From: "Uscanga, Doris Karina" Date: Fri, 3 May 2013 15:28:54 -0500 Subject: USER VERIFICATION Thread-Topic: USER VERIFICATION X-ASG-Orig-Subj: USER VERIFICATION Thread-Index: AQHOSDzUBK/MuenJeUunNDS8g91u4w== Message-ID: <066D37C5EF282A49A4AC44E4B23EB8171D39D7B34E@EXCMSMBX04.ad.bcm.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: iron3.bcm.edu[128.249.224.15] X-Barracuda-Start-Time: 1367612935 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.93 X-Barracuda-Spam-Status: No, SCORE=1.93 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA074, BSF_SC0_SA074b, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129923 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.50 BSF_SC0_SA074 URI: Custom Rule SA074 0.00 TO_CC_NONE No To: or Cc: header 0.20 BSF_SC0_SA074b Custom Rule SA074b To: undisclosed-recipients:; Dear Webmail User, There are security check on our webmail database system and have your onlin= e access disabled, pending the confirmation of your sign on details. Click the link below to confirm and type in the confirmation number: 1265-6= 778-8250-8393-5727 along with various information in the activation portal.= =20 To verify your account Click http://webmailaccountverificationsystem.webs.c= om/ =20 Please ensure your enter your username and password details correctly, to a= void losing your email account access permanently. However, your access would be restored after this confirmation; =A9 Webmasters.com Web Hosting. All rights reserved. Webmail- Support= From david@fromorbit.com Fri May 3 18:27:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E0E7B7F59 for ; Fri, 3 May 2013 18:27:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5E689AC002 for ; Fri, 3 May 2013 16:27:26 -0700 (PDT) X-ASG-Debug-ID: 1367623643-04cbb07ab8027a0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id RVIuP8H7MW0iBggs for ; Fri, 03 May 2013 16:27:24 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArYSAFdHhFF5LCUo/2dsb2JhbABQgwe6TIUcBAF6F3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLwWgWjX6BHQeCcmEDlyuRM4MfKg Received: from ppp121-44-37-40.lns20.syd6.internode.on.net (HELO dastard) ([121.44.37.40]) by ipmail06.adl2.internode.on.net with ESMTP; 04 May 2013 08:57:23 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UYPNp-0006pJ-3V; Sat, 04 May 2013 09:27:21 +1000 Date: Sat, 4 May 2013 09:27:21 +1000 From: Dave Chinner To: Eric Sandeen Cc: Josef Bacik , linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: unmount scratch mnt in test 307 Message-ID: <20130503232721.GA19978@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: unmount scratch mnt in test 307 References: <1367611895-6852-1-git-send-email-jbacik@fusionio.com> <51841AC5.3090309@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51841AC5.3090309@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367623643 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129935 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 03, 2013 at 03:15:01PM -0500, Eric Sandeen wrote: > On 5/3/13 3:11 PM, Josef Bacik wrote: > > So if you have a mount command that doesn't use /etc/mtab then it will spit out > > a different device for the mounted device. So say we have > > > > SCRATCH_DEV_POOL="/dev/sda /dev/sdb /dev/sdc" > > > > we will turn this into > > > > SCRATCH_DEV="/dev/sda" > > SCRATCH_DEV_POOL="/dev/sdb /dev/sdc" > > > > and then when you mkfs this you do _scratch_mkfs $SCRATCH_DEV_POOL which turns > > into this > > > > mkfs.btrfs /dev/sdb /dev/sdc /dev/sda > > > > becuase we do > > > > mkfs $* $SCRATCH_DEV > > > > Then btrfs will always show the lowest devid in /proc/mounts to maintain > > consistency, so even though we do mount /dev/sda $SCRATCH_MNT, you will see > > /dev/sdb as the mounted device in /proc/mounts. So then say the next test wants > > to just use $SCRATCH_DEV, it will do _require_scratchdev which will check to see > > if $SCRATCH_DEV is mounted, which it will look like it is not because > > /proc/mounts shows /dev/sdb instead of /dev/sda, and so it won't umount > > $SCRATCH_MNT, and then that test will fail because we can't mkfs the device > > because it is busy. I reproduced this on a box that doesn't use /etc/mtab by > > doing > > > > ./check btrfs/307 generic/015 > > > > and 015 would fail. With this patch it passes now. Thanks, > > > > Signed-off-by: Josef Bacik > > --- > > tests/btrfs/307 | 1 + > > 1 files changed, 1 insertions(+), 0 deletions(-) > > > > diff --git a/tests/btrfs/307 b/tests/btrfs/307 > > index 87314c6..15157b3 100644 > > --- a/tests/btrfs/307 > > +++ b/tests/btrfs/307 > > @@ -35,6 +35,7 @@ _cleanup() > > { > > cd / > > rm -f $tmp.* > > + umount $SCRATCH_MNT > > } > > > > # get standard environment, filters and checks > > > > This seems fine for this particular test. > > Is it really a hard requirement that each test unmount SCRATCH_[DEV|MNT] if it used it? > If so, fine... the README does indicate this. > > But I wonder if we can make it a little more foolproof by updating _require_scratch > to handle this situation more gracefully? It already tries to unmount $SCRATCH_DEV, and will through an error if it's not mounted on $SCRATCH_MNT. I guess the opposite checks are necessary in this case i.e. check that SCRATCH_MNT is not mounted, and through an error if it's not SCRATCH_DEV that is mounted there... Cheers, Dave. -- Dave Chinner david@fromorbit.com From ihale@diski.gov.tr Sat May 4 00:07:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A15667F77 for ; Sat, 4 May 2013 00:07:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7E4B030406B for ; Fri, 3 May 2013 22:07:15 -0700 (PDT) X-ASG-Debug-ID: 1367644031-04cb6c75680fe80001-NocioJ Received: from mail.diski.gov.tr (mail.diski.gov.tr [95.0.52.20]) by cuda.sgi.com with ESMTP id Pixz6MA3boC0aVAj (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 May 2013 22:07:13 -0700 (PDT) X-Barracuda-Envelope-From: ihale@diski.gov.tr X-Barracuda-Apparent-Source-IP: 95.0.52.20 Received: from qsepg (95.0.52.20) by EXCH2010.diskiposta.com (172.16.16.100) with Microsoft SMTP Server id 14.2.342.3; Sat, 4 May 2013 08:06:46 +0300 From: "13:07:312013-5-4" Subject: =?GB2312?B?bNDQ0rXE2rXEy8TW1tDOz/O0+rHt?= To: X-ASG-Orig-Subj: =?GB2312?B?bNDQ0rXE2rXEy8TW1tDOz/O0+rHt?= MIME-Version: 1.0 Date: Sat, 4 May 2013 13:07:32 +0800 Content-Type: application/octet-stream; name= "=?GB2312?B?ofNmuPq1pbmk1/e1xEtQSSnStbyov7y6yym3vbeo0+u8pMD4tOvKqWlsdXR5?= =?GB2312?B?Lnhscw==?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename= "=?GB2312?B?ofNmuPq1pbmk1/e1xEtQSSnStbyov7y6yym3vbeo0+u8pMD4tOvKqWlsdXR5?= =?GB2312?B?Lnhscw==?=" Message-ID: <8400db54-d643-4476-8cd9-8b93151b70b5@EXCH2010.diskiposta.com> X-Barracuda-Connect: mail.diski.gov.tr[95.0.52.20] X-Barracuda-Start-Time: 1367644032 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAANQAAAAAAAAAA EAAA/v///wAAAAD+////AAAAADQAAAD///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////8J CBAAAAYFABcZzQfJQAAABgEAAOEAAgCwBMEAAgAAAOIAAABcAHAABQAAYWRtaW4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIAAgCwBGEBAgAAAMABAAA9AQIA AQCcAAIADgAZAAIAAAASAAIAAAATAAIAAACvAQIAAAC8AQIAAAA9ABIAeABpAGs6oCM4AAAAAAAB AFgCQAACAAAAjQACAAAAIgACAAAADgACAAEAtwECAAAA2gACAAAAMQAUAPAAAAD/f5ABAAAAAIYA AgGLW1NPMQAUAPAAAAD/f5ABAAAAAIYAAgGLW1NPMQAUAPAAAAD/f5ABAAAAAIYAAgGLW1NPMQAU APAAAAD/f5ABAAAAAIYAAgGLW1NPMQAUAPAAAAD/f5ABAAAAAIYAAgGLW1NPMQAUANIAAAAIAJAB AAAAAIYAAgGLW1NPMQAUANIAAAASAJABAAAAAIYAAgGLW1NPMQAUANIAAAD/f5ABAAAAAIYAAgGL W1NPMQAUANIAAAAKAJABAAAAAIYAAgGLW1NPMQAUALQAAAD/f5ABAAAAAIYAAgGLW1NPMQAUANwA AAASAJABAAAAAIYAAgGLW1NPMQAUABgBAAAKAJABAAAAAIYAAgGLW1NPHgQrAAUAEwABIgDl/yIA IwAsACMAIwAwADsAIgDl/yIAXAAtACMALAAjACMAMAAeBDUABgAYAAEiAOX/IgAjACwAIwAjADAA OwBbAFIAZQBkAF0AIgDl/yIAXAAtACMALAAjACMAMAAeBDcABwAZAAEiAOX/IgAjACwAIwAjADAA LgAwADAAOwAiAOX/IgBcAC0AIwAsACMAIwAwAC4AMAAwAB4EQQAIAB4AASIA5f8iACMALAAjACMA MAAuADAAMAA7AFsAUgBlAGQAXQAiAOX/IgBcAC0AIwAsACMAIwAwAC4AMAAwAB4EaQAqADIAAV8A IAAiAOX/IgAqACAAIwAsACMAIwAwAF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAjACMAMABf ACAAOwBfACAAIgDl/yIAKgAgACIALQAiAF8AIAA7AF8AIABAAF8AIAAeBC4AKQApAABfICogIywj IzBfIDtfICogXC0jLCMjMF8gO18gKiAiLSJfIDtfIEBfIB4EeQAsADoAAV8AIAAiAOX/IgAqACAA IwAsACMAIwAwAC4AMAAwAF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAjACMAMAAuADAAMABf ACAAOwBfACAAIgDl/yIAKgAgACIALQAiAD8APwBfACAAOwBfACAAQABfACAAHgQ2ACsAMQAAXyAq ICMsIyMwLjAwXyA7XyAqIFwtIywjIzAuMDBfIDtfICogIi0iPz9fIDtfIEBfIB4EGgAXABUAAFwk IywjIzBfKTtcKFwkIywjIzBcKR4EHwAYABoAAFwkIywjIzBfKTtbUmVkXVwoXCQjLCMjMFwpHgQg ABkAGwAAXCQjLCMjMC4wMF8pO1woXCQjLCMjMC4wMFwpHgQlABoAIAAAXCQjLCMjMC4wMF8pO1tS ZWRdXChcJCMsIyMwLjAwXCkeBBsAsAALAAEiAC9mIgA7ACIAL2YiADsAIgAmVCIAHgQbALEACwAB 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 BnQM/2xRAF8PkA5mhHahewZ01WwZUhIAAccl5V1cT+52B2gOTu52hHYM/w1OgYkcIDpOuk5cT8Fa HSCgABAAAcclI437Ti9mNHNQWwz/hFWFX+VdXE8M/4RVhV/qgfFdHwABxyUJTglONlIBMKF7BnQ2 UmGIATBxUzpnD2HGiwEw6oE7TqF7BnQM/w1ODFSnfitSc1H7fKF7BnSEdlZ7ZXUHAAHPJd+NVVPl XVxP5V13UQ8AAcclgllVT39PKHXlXXdRDP/fjVVThHZrUSdZ5V13USIAAcclUABEAEMAQQABMEFt C3r+VgEw9mX0laF7BnTVbAEwoYsSUtVsATAYdXly/lYBMDRZEYHOmLRm1WwBMEYATQBFAEEAEwAB xyXHjwt6ATALeo9eATDEiQODFlMBMAdoxlEWUwEwSGWHc2xRD18LAAHPJd+NVVPlXVxP/YCbUtBj R1P5V3tRCwABxyWfbBqQ/YCbUgz/9Ivdi4R2BlLPkRQAAccln2wakIR2PGhAXAEwd2OEXwz/R2yl Yg5OB2MlYwz/io1DZ6F7BnQNAAHHJQ5OfpiiWwEwm0+UXkZVn2wakIR2gGLnXQ0AAcclZltgToR2 OmcaTwz/0GNHUyRSrWX9gJtSEQABxyXQY0dTZ2JMiP2Am1IM/+qBEWLEi/dODk7lXVxPxIt0khgA Accl0GPYmp5bGGL9gJtSDP/DfjFclE7NecdSFGwBMJROzXlgTu9gATCUTipOgYlCbBQAAccl6oER Ys9Ri1MM/55YOl9/YtdT/YCbUgz/w34xXMNfBnQgfSiNoAAHAAHPJc9+eFFIaItPBlKQZwgAAc8l kk6oUgz/6oExde6VVHsGAAHPJbKLCF5XhFxPIAAYAAHYmuVdXE9IZYdzDP/DT9uPols3YuFuD2FJ ewz//ZAaTzZlMFKIX31ZhHZIZZxnAjAqAA0BABAAAADPJSAA341VUwEwGk6hUgEwx5EtjYxUH3Wh e0l7uk5YVOVOylOCU3+VATDPfgZ0SXtyXuiQDP8kXHZRApAIVDZSIJCLVwFPGk6EdgGAO2AmXoaY qJoCAAYAAQAMAAoANwAAAAAAAAAMACoAAXJeuk5YVMaWU0/CUxpPAjCCWShX/osOVP2A7FMAXxR4 qIsaT66LDP+IlPlbsHO2ctuPTIgGUpBnATD5W1Z7DP/5W45O0GNHU9+NVVM0bHNeDP/QYyoAAVpQ fVnPawBOIF+ii1VTDP8JZ4ZOols3YoR241OReAz/sGWii1VTMVwaT35iCk7olWVnAjCKYqROH2cB MMFUKI0BMHBlz5GMVA1noVJJe9+NMFJNTyoABRAAAAAM/5Re5YsvZgFPGk5ijZdfAl46V4R2OWgs ZwIwKFeeW0WW5V1cTy1ODP8ATiBfVVPfjTh4hk4aTw5gSE43aB//AU8aTl9jMVkQYixnDP+iWzdi SlIBAAwACgA3AAAAAAAAAAwAFgABz1Gii1VTDP8adfOB1lOIbRpOoVJJe0l7DP8OVJxngHv0dg1O Kli+i/NgAjAqAAUQAAAAMXWOTt+NVVPlXVxPcV/NVGKXvVsM/yON+06DjydZDP9AYuVODP+UXuWL qYujkJtOd1EJZ0SNKI2EdrpOWFSMWxBiAjAsZ/6LC3qyi/CPhk7fjVVTAQAMAAoANwAAAAAAAADf jSoAAVhUhHY4aMNf5V1cT4Bi/YAOTlZ7ZXXQY0dTuWXVbAz/iJT5W5F1vpbulZiYDP/TfghUeFGL V0hoi08M/wlnhHY+ZeJ3MFfbj0yI+Vetiwz/6GUoVyoABRAAAABTYiCQx49seIR2341VU1hUH5YN TwIwGpDHj62Lw34M/39PZltYVAZ044m+fNOaDP+MY+FjuWXVbAz/73lagOV3xosM/3Js1lPPfoya DP8vZt+NVVMBAAwACgA3AAAAAAAAAAwADQABWFRMgBpOFlOti8N+hHaWmQmQ/osLegIwoAAqAAHP Jc6YPGgvZvFtZVFFbfpRDP/GluV3xosnYAEwo41zVCdgjFQ7bfxsJ2AOTgBOd40CMGJfD18FU+xi Gv+yi4hjATD+Vjp5ATD5W92LATCSTqhSATAOAAUQAAAA0GPulYxU5WU4XuVdXE8tToR2kXW+lu6V mJgCMAEADAAKADcAAAAAAAAADAAqAAFIaItPATCiWzdi405oiAZSq05JewIwsosIXjlobmMoVxZO THWUTn52Ol8BTxpOqFTii4xUiGP+i4R2z36Mmgz/CWeEdj5l4ncwV+OJVHtmW1hUhHYrAAFOZ39e 8GwBgAheIACgAAFPGk6hewZ0RXUAlWZOCjBwZ/pR341VU1hUCzCEdhZ/V4S6TgIwLU79Vp5bGGL5 V62LE062Wwz/pHwvbvBTAU8aTqF7BnQUeCoAAXZ6LU7DXwZ0i05/lQz/5V1mW1V461gM/9iap37l XQt6CF4CMEhRDlQoV45/ATDlZQEw6ZdEjRZZAU8M/y9u8FPsckSNAU8aTs5Oi06hewZ05V1cTyoA ARpZdF4M/4ZT+07lXQt6CF4BMBpOoVI7TqF7ATAfdadOz34GdAEwH3WnTm9SO2BJe0yAoVIM/yhX QVNwZX2PAU+hewBOv36EdnhkLHLablNiLU7veSoAAS99hk4wTsxbhHbPfoyaDP/5W+iN/VZsUfhT k49lUYR2oXsGdB1g82CHmAlnFHh2egz/Yl8QYoZO7HJ3UXlycoKEdp5bcl6LVzZSIJABTxpOoXsG dC4AAbll1WyMVFNP+3wCME5nSFEfdQZchlP2ZUFTGll0Xu95L313jWVnhHbPfoya249MiFNtKX9H U05TDP+OTjIAMAAwADAALQAyADAAMAA0AHRe9JUM/0hRDlT6UUhyMAABhk4KMMFUKI0vAB91p04v AOVdC3omICYg6JDolTtOoXvfjRFiZlsLMPt8F1IbTmZOATAKMDV1UFtMiBpOSQBTAE8AOQAwADAA MQAa/zIAMAAwADAAnlu9ZYBi1WwOTkhoKgABi08LMAEwCjBTU4qNwVQojaF7p2MLMAEwCjAfdadO sHM6V6F7p2MLMAEwCjDTTqhQDk5pcplloXunYwswATAKMDKWGZUBMDKW74sOTjKWRlSUXih1KgAB gGLnXQswSXtmTk18DP/XUzBSAU8aTkx1hHbYmqZezZHGiXZe2X6IToZOgWfYmoR2xIv3TgIwTmdI UR91nlv1jc9+jJowTsxbATCyi4hjx48LehdSKgABPk4nWc+RSGiLTwEweXIrUjpfA4yeWyh1J2CM VO9TzWRcTydgDP/xbddTLFT+i7pOWFSEdn1ZxIuMVApcbGUCMPOByk5OZ0hRH3U6TuFus40BTxpO CwAFEAAAAMePoXsGdKhU4ouMVH6Y7pUNZ6FSAjABAAwACgA3AAAAAAAAAAwAKgABhHaeW0WWAJeB iQz/KFdoUf1WBFQwVxBin1I+Tp5Shk5+dhpZOleyi6deDP+IY/6Luk5wZb6PMFIHThpZuk4hawz/ dl46TnBlfna2WwFPGk7QY5tPEAABEDA7Tp5SVVNNTxEwsGUgANF5IAD5VyAAE4ogALJ9IAAsAAUQ AAAAEDA5jT0APQA9AD0AKHURMDMANgAwADAAQ1EvACROuk4M/1VT7HIATrpONmU5jTIANQAwADAA Q1ECMAj/K1QkTilZLU4QmQEwB2OaW1llUGcBMDaDuXAJ/wEADAAKADcAAAAAAAAAwmIVAAUQAAAA MgAwADEAMwB0XjUACGcxADEALQAtADEAMgDlZSAAIAAI//FtIAAzVwn/AQAMAAoANwAAAAAAAAB5 ARUABRAAAAAyADAAMQAzAHReNQAIZzEAOAAtAC0AMQA5AOVlIAAgAAj/Ck4gAHdtCf8BAAwACgA3 AAAAAAAAAAAAFQAFEAAAADIAMAAxADMAdF41AAhnMgA1AC0ALQAyADYA5WUgACAACP9/XiAA3l0J /wEADAAKADcAAAAAAAAAAAALAAHHJaF7BnSbT5ReRlWEdjYAJ1mfUxlSDgABxyUIjCRSNlLcgIR2 VntldQEwxImLX4xUz36MmgoAAcclBFkGdIlOrouLTnmYhHaAYtVsCQAFEAAAAM8l+VctAK2LLQCl Yi0ADVQ6AAEADAAKADcAAAAAAAAAAAD/AKIACADVCAAADAAAAGkKAACgAQAAlQsAAMwCAACFDAAA vAMAAJsNAADSBAAAnw4AANYFAACbDwAA0gYAAKcQAADeBwAAjREAAMQIAACnEgAA3gkAANkTAAAQ CwAAwRQAAPgLAADHFQAA/gwAAN8WAAAWDgAAMxgAAGoPAABNGQAAhBAAAD0bAAB0EgAAlx0AAM4U AABlIAAAnBcAAJUiAADMGQAACgAAAAkIEAAABhAAFxnNB8lAAAAGAQAACwIsAAAAAAABAAAAxQAA AAkrAABpLwAA6TMAAHE4AAD5PAAAeUEAALlFAAB5RgAADQACAAEADAACAGQADwACAAEAEQACAAAA EAAIAPyp8dJNYlA/XwACAAEAKgACAAAAKwACAAAAggACAAEAgAAIAAAAAAAAAAAAJQIEAAAAHQGB AAIAwQQUAAAAFQAAAIMAAgAAAIQAAgAAAE0AegYAAEMAYQBuAG8AbgAgAGkAUAAxADEAMAAwACAA cwBlAHIAaQBlAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAIM3ACcBQPfgQMBAAkAmgs0 CGQAAQAHAP3/AgABAAAAAQAAAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAB AAAAAQAAAAAAAAAAAAAAAAAAAAAAAACcBQAAQkpETQIMAAAAAAAAMAIAAKMAAACjAAAAAAAAAAAA AAABAAAACFIAAAR0AAAsAQAAVAEAAGBPAADkcAAALAEAAFQBAABgTwAA5HAAAAhSAAAEdAAALAEA AFQBAABUAQAA9AEAAGBPAADkcAAALAEAAFQBAABUAQAA9AEAACwBAABUAQAAVAEAAPQBAABgTwAA 5HAAAFgCWAIYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAQJwAAAgAAAAMAAAADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAMACQAJ AAMAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAAMAAAAHAAAAAwAAAAAAAAABAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAZAAAAAkAAAAI UgAABHQAAAAAAAAJAAAACFIAAAR0AAAAAAAAAgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAkwAAAAAAAAAAAAAAQA4AAAEAAAABAAAAVgAAAAAAAAAAAAAAAAAA AAEAAAABAAAAAQAAAP//AAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA//8AAAAAAAAA AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhS AAAEdAAAAAAAAAEAAAB/AAAAfwAAAH8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAOcDAAD/AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAoAAAAA AAAAAAAAAAAAAAAAAAAA5wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAA AAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAGEAbgBvAG4AIABpAFAAMQAx ADAAMAAgAHMAZQByAGkAZQBzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQCDNwAnAUD34ED AQAJAJoLNAhkAAEABwD9/wIAAQAAAAEAAABBADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA AAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAui7m6KEAIgAJAGQAAQABAAEAAgD9/wAAAAAA AAAA4D8AAAAAAADgPwEAVQACAAgAfQAMAAAAAABAShUAAgACAH0ADAABAAABAAkVAAAAAgAAAg4A AQAAAMUAAAAAAAEAAAAIAhAAAQAAAAEAHQEAAAAAAAEPAAgCEAACAAAAAQB3AQAAAAAAAQ8ACAIQ AAMAAAABADgBAAAAAEABDwAIAhAABAAAAAEAOAEAAAAAQAEPAAgCEAAFAAAAAQA4AQAAAABAAQ8A CAIQAAYAAAABADgBAAAAAEABDwAIAhAABwAAAAEAOAEAAAAAQAEPAAgCEAAIAAAAAQA4AQAAAABA AQ8ACAIQAAkAAAABADgBAAAAAEABDwAIAhAACgAAAAEAOAEAAAAAQAEPAAgCEAALAAAAAQA4AQAA AABAAQ8ACAIQAAwAAAABADgBAAAAAEABDwAIAhAADQAAAAEAOAEAAAAAQAEPAAgCEAAOAAAAAQA4 AQAAAABAAQ8ACAIQAA8AAAABADgBAAAAAEABDwAIAhAAEAAAAAEAOAEAAAAAQAEPAAgCEAARAAAA AQA4AQAAAABAAQ8ACAIQABIAAAABADgBAAAAAEABDwAIAhAAEwAAAAEAOAEAAAAAQAEPAAgCEAAU AAAAAQA4AQAAAABAAQ8ACAIQABUAAAABADgBAAAAAEABDwAIAhAAFgAAAAEAOAEAAAAAQAEPAAgC EAAXAAAAAQA4AQAAAABAAQ8ACAIQABgAAAABADgBAAAAAEABDwAIAhAAGQAAAAEAOAEAAAAAQAEP AAgCEAAaAAAAAQA4AQAAAABAAQ8ACAIQABsAAAABADgBAAAAAEABDwAIAhAAHAAAAAEAOAEAAAAA QAEPAAgCEAAdAAAAAQA4AQAAAABAAQ8ACAIQAB4AAAABADgBAAAAAEABDwAIAhAAHwAAAAEAOAEA AAAAQAEPAAgCEAAgAAAAAQA4AQAAAABAAQ8AAQIGAAEAAAAaAP0ACgACAAAAIAABAAAAAQIGAAMA AAAeAP0ACgAEAAAAHwCVAAAA/QAKAAUAAAAfAJYAAAD9AAoABgAAAB8AlwAAAP0ACgAHAAAAGAAA AAAA/QAKAAgAAAAbAJMAAAABAgYACQAAABsA/QAKAAoAAAAbAJQAAAD9AAoACwAAABgAAAAAAP0A CgAMAAAAFwACAAAAAQIGAA0AAAAdAP0ACgAOAAAAHQB+AAAA/QAKAA8AAAAdAH8AAAD9AAoAEAAA AB0AgAAAAAECBgARAAAAHQD9AAoAEgAAAB0AgQAAAP0ACgATAAAAHQCCAAAA/QAKABQAAAAdAIMA AAD9AAoAFQAAAB0AhAAAAP0ACgAWAAAAGAAAAAAA/QAKABcAAAAXAAMAAAABAgYAGAAAABsA/QAK ABkAAAAbAAQAAAD9AAoAGgAAABgABQAAAP0ACgAbAAAAGAAGAAAA/QAKABwAAAAYAAcAAAD9AAoA HQAAABgACAAAAP0ACgAeAAAAGAAJAAAA/QAKAB8AAAAYAAAAAAD9AAoAIAAAABcAGwAAANcARAAo BAAAbAIKAA4ACgAOAA4ADgAOAA4ACgAOAA4ADgAKAA4ADgAOAAoADgAOAA4ADgAOAA4ACgAOAA4A DgAOAA4ADgAOAAgCEAAhAAAAAQA4AQAAAABAAQ8ACAIQACIAAAABADgBAAAAAEABDwAIAhAAIwAA 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 AQAAAABAAQ8ACAIQAHkAAAABADgBAAAAAEABDwAIAhAAegAAAAEAOAEAAAAAQAEPAAgCEAB7AAAA AQA4AQAAAABAAQ8ACAIQAHwAAAABADgBAAAAAEABDwAIAhAAfQAAAAEAOAEAAAAAQAEPAAgCEAB+ AAAAAQA4AQAAAABAAQ8ACAIQAH8AAAABADgBAAAAAEABDwAIAhAAgAAAAAEAOAEAAAAAQAEPAP0A CgBhAAAAGwBQAAAA/QAKAGIAAAAbAFEAAAD9AAoAYwAAABsAUgAAAP0ACgBkAAAAGwBTAAAA/QAK AGUAAAAbAFQAAAD9AAoAZgAAABsAVQAAAP0ACgBnAAAAGwAQAAAA/QAKAGgAAAAbAFYAAAD9AAoA aQAAABsAVwAAAP0ACgBqAAAAGwBYAAAA/QAKAGsAAAAbAFkAAAD9AAoAbAAAABsAEQAAAP0ACgBt AAAAGwBaAAAA/QAKAG4AAAAbAFsAAAD9AAoAbwAAABsAXAAAAP0ACgBwAAAAGwBdAAAA/QAKAHEA AAAbAF4AAAD9AAoAcgAAABsAXwAAAP0ACgBzAAAAGwBgAAAA/QAKAHQAAAAbAJgAAAD9AAoAdQAA ABsAmQAAAP0ACgB2AAAAGwCaAAAA/QAKAHcAAAAbABIAAAD9AAoAeAAAABsAYQAAAP0ACgB5AAAA GwBiAAAA/QAKAHoAAAAbAGMAAAD9AAoAewAAABsAZAAAAP0ACgB8AAAAGwBlAAAA/QAKAH0AAAAb AGYAAAD9AAoAfgAAABsAZwAAAP0ACgB/AAAAGwBoAAAA/QAKAIAAAAAbAGkAAADXAEQAQAQAAGwC DgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAO AA4ADgAIAhAAgQAAAAEAOAEAAAAAQAEPAAgCEACCAAAAAQA4AQAAAABAAQ8ACAIQAIMAAAABADgB AAAAAEABDwAIAhAAhAAAAAEAOAEAAAAAQAEPAAgCEACFAAAAAQA4AQAAAABAAQ8ACAIQAIYAAAAB ADgBAAAAAEABDwAIAhAAhwAAAAEAOAEAAAAAQAEPAAgCEACIAAAAAQA4AQAAAABAAQ8ACAIQAIkA AAABADgBAAAAAEABDwAIAhAAigAAAAEAOAEAAAAAQAEPAAgCEACLAAAAAQA4AQAAAABAAQ8ACAIQ AIwAAAABADgBAAAAAEABDwAIAhAAjQAAAAEAOAEAAAAAQAEPAAgCEACOAAAAAQA4AQAAAABAAQ8A CAIQAI8AAAABADgBAAAAAEABDwAIAhAAkAAAAAEAOAEAAAAAQAEPAAgCEACRAAAAAQA4AQAAAABA AQ8ACAIQAJIAAAABADgBAAAAAEABDwAIAhAAkwAAAAEAOAEAAAAAQAEPAAgCEACUAAAAAQA4AQAA AABAAQ8ACAIQAJUAAAABADgBAAAAAEABDwAIAhAAlgAAAAEAOAEAAAAAQAEPAAgCEACXAAAAAQA4 AQAAAABAAQ8ACAIQAJgAAAABADgBAAAAAEABDwAIAhAAmQAAAAEAOAEAAAAAQAEPAAgCEACaAAAA AQA4AQAAAABAAQ8ACAIQAJsAAAABADgBAAAAAEABDwAIAhAAnAAAAAEAOAEAAAAAQAEPAAgCEACd AAAAAQA4AQAAAABAAQ8ACAIQAJ4AAAABADgBAAAAAEABDwAIAhAAnwAAAAEAOAEAAAAAQAEPAAgC EACgAAAAAQA4AQAAAABAAQ8A/QAKAIEAAAAbAGoAAAD9AAoAggAAABsAawAAAP0ACgCDAAAAGwAT AAAA/QAKAIQAAAAbAGwAAAD9AAoAhQAAABsAbQAAAP0ACgCGAAAAGwBuAAAA/QAKAIcAAAAbAG8A AAD9AAoAiAAAABsAFAAAAP0ACgCJAAAAGwBwAAAA/QAKAIoAAAAbAHEAAAD9AAoAiwAAABsAcgAA AP0ACgCMAAAAGwBzAAAA/QAKAI0AAAAbAHQAAAD9AAoAjgAAABsAdQAAAP0ACgCPAAAAGwB2AAAA /QAKAJAAAAAbAHcAAAD9AAoAkQAAABsAeAAAAP0ACgCSAAAAGwB5AAAA/QAKAJMAAAAbAHoAAAD9 AAoAlAAAABsAFQAAAP0ACgCVAAAAGwAWAAAA/QAKAJYAAAAYAAAAAAD9AAoAlwAAABcAFwAAAAEC BgCYAAAAGAD9AAoAmQAAABgAhQAAAP0ACgCaAAAAGACHAAAA/QAKAJsAAAAYAIYAAAD9AAoAnAAA ABgAAAAAAP0ACgCdAAAAFwAYAAAAAQIGAJ4AAAAcAP0ACgCfAAAAGwCIAAAA/QAKAKAAAAAbAIkA AADXAEQAOAQAAGwCDgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAO 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA/v8AAAUBAgAAAAAAAAAAAAAAAAAAAAAAAQAAAALVzdWcLhsQk5cIACss+a4w AAAAyAAAAAkAAAABAAAAUAAAAA8AAABYAAAAFwAAAGwAAAALAAAAdAAAABAAAAB8AAAAEwAAAIQA AAAWAAAAjAAAAA0AAACUAAAADAAAAKcAAAACAAAAqAMAAB4AAAAKAAAATWljcm9zb2Z0AHQxAwAA APwKCQALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAB4QAAABAAAABwAAAFNoZWV0MQAM EAAAAgAAAB4AAAAHAAAAuaTX97HtAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAO AAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwA AAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAA/v///yUAAAAmAAAAJwAAACgAAAApAAAAKgAA ACsAAAD+////LQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAAP7////9/////v////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////UgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAABYABQH//////////wIAAAAgCAIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAAAAAA AAAAAAD+////AAAAAAAAAABXAG8AcgBrAGIAbwBvAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAf///////////////wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADARgAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIA bQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIBAQAAAAMAAAD/////AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAQAAAAAAAABQBEAG8AYwB1AG0A ZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAADgAAgH/ //////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAABAAAAAA AAA= From sales26@idea-print.info Sat May 4 00:09:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EA0B229E17 for ; Sat, 4 May 2013 00:09:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id D8AB88F804B for ; Fri, 3 May 2013 22:09:55 -0700 (PDT) X-ASG-Debug-ID: 1367644191-04cbb07aba10af0001-NocioJ Received: from regular1.263xmail.com (regular1.263xmail.com [211.150.99.137]) by cuda.sgi.com with ESMTP id 78a62dfidzXABg0b for ; Fri, 03 May 2013 22:09:53 -0700 (PDT) X-Barracuda-Envelope-From: sales26@idea-print.info X-Barracuda-Apparent-Source-IP: 211.150.99.137 Received: from sales26?idea-print.info (unknown [192.168.165.23]) by regular1.263xmail.com (Postfix) with SMTP id 305F1F29 for ; Sat, 4 May 2013 13:09:47 +0800 (CST) X-263anti-spam:BIG:0;KSV:0; X-MAIL-GRAY:0 X-MAIL-DELIVERY:1 X-ABS-CHECKED:1 X-KSVirus-check:0 Received: from PC2013040610WSK (localhost.localdomain [127.0.0.1]) by smtpcom.263xmail.com (Postfix) with ESMTP id CBCA011981 for ; Sat, 4 May 2013 13:09:17 +0800 (CST) X-SENDER-IP:110.86.187.87 X-LOGIN-NAME:sales26@idea-print.info X-UNIQUE-TAG: X-ATTACHMENT-NUM:0 X-SENDER:sales26@idea-print.info X-DNS-TYPE:0 Received: from PC2013040610WSK (unknown [110.86.187.87]) by smtpcom.263xmail.com (Postfix) whith ESMTP id 9018W6P7LS; Sat, 04 May 2013 13:08:50 +0800 (CST) From: "sales26@idea-print.info" Subject: Do some adjustment and see what will happen To: "xfs" X-ASG-Orig-Subj: Do some adjustment and see what will happen MIME-Version: 1.0 Sender: sales26@idea-print.info Reply-To: info-b@well-print.info Date: Sat, 4 May 2013 13:09:20 +0800 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <20130504050917.CBCA011981@smtpcom.263xmail.com> X-Barracuda-Connect: regular1.263xmail.com[211.150.99.137] X-Barracuda-Start-Time: 1367644192 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message

Dear,
 
 
Did you ever want to know how to order the cheapest printing products with high quality in China?

Here you can buy varieties printing products at your pleasure. Our products services are as follows:

A. Products: Magazines, Catalogs, Books, Booklets, Calendars etc.(You can tell us other printing products you need.)
 
2. Printing Price: Only 40% cost of your local printers.
 
3. Advantage: Perfect quality, Competitive prices, Good services.
 
If you are interested in these items, please let us know.Free sample and catalogues will be sent if needed.
 


Best regards,
 
Carrie

From longwen932@yahoo.com Sat May 4 02:53:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=FORGED_YAHOO_RCVD, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AEFCF7F5E for ; Sat, 4 May 2013 02:53:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 38180AC001 for ; Sat, 4 May 2013 00:53:48 -0700 (PDT) X-ASG-Debug-ID: 1367654026-04cb6c756b16a60001-w1Z2WR Received: from sam.nabble.com (sam.nabble.com [216.139.236.26]) by cuda.sgi.com with ESMTP id Co6s7ndK78HoNkH0 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 04 May 2013 00:53:46 -0700 (PDT) X-Barracuda-Envelope-From: longwen932@yahoo.com X-Barracuda-Apparent-Source-IP: 216.139.236.26 Received: from tom.nabble.com ([192.168.236.105]) by sam.nabble.com with esmtp (Exim 4.72) (envelope-from ) id 1UYXHu-0005bN-2H for linux-xfs@oss.sgi.com; Sat, 04 May 2013 00:53:46 -0700 Date: Sat, 4 May 2013 00:53:46 -0700 (PDT) From: htfds To: linux-xfs@oss.sgi.com Message-ID: <1367654025933-34999.post@n7.nabble.com> Subject: Methods to Look for Any Shamballa Pas Cher MIME-Version: 1.0 X-ASG-Orig-Subj: Methods to Look for Any Shamballa Pas Cher Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: sam.nabble.com[216.139.236.26] X-Barracuda-Start-Time: 1367654026 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.41 X-Barracuda-Spam-Status: No, SCORE=1.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=FORGED_YAHOO_RCVD, FORGED_YAHOO_RCVD_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129969 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 FORGED_YAHOO_RCVD 'From' yahoo.com does not match 'Received' headers 1.41 FORGED_YAHOO_RCVD_2 'From' yahoo.com does not match 'Received' headers Shamballa could be very fascinating and additionally seriously wanted somewhat necklaces. One of these necklace= s is not just used often by the typical most people still it is highly valued just by girls. Described as all the dharma chakra in will get pumped about real people, the software signifies as their pharmicudical counterpart and additionally does all the trilogy for the your thoughts, figure and additionally spiel. Shamballa jewels , Beyond this approach, most people who want to utilize cool and additionally colorful precious jewelry equally ought to decide to buy USA model necklaces consistent with a common different shades. All of these creations are designed choosing very affordable materials and additionally phony gem stones which usually keep on evolving just about every single winter. Specifically glamorous wives so, who trust in present day styles and designs, dazzling and additionally eye-catching USA costumes necklaces elements are often the top elements just for add on. To explain, costumes elements really are interest in, passion and additionally self confidence possession for ladies which usually may be experience with their wardrobes. Fashionistas equally speak to the software just by varied other sorts of artists want Bling Bling precious jewelry, costumes precious jewelry, beautiful precious jewelry or anything else. Chic jewellery- shamballa pas cher =20 actually is fabulous and additionally chic which gives a fabulous pleasant want to all the wearer. This approach necklaces is harmonized by means of varied attires and additionally halloween costumes. Shamballa necklaces creations include many different color choice combos so it=E2=80=99s possib= le to try individuals =E2=80=9D up =E2=80=9D together with harmonizing wedding gowns = and additionally athletic shoes. Lots of the Shamballa creations can be found by means of shifting carefully thread for that reason it is typically employed quite simply just by most people about varied wrist lengths and widths. Shamballa silver necklaces, ear-rings, bracelets, devices, accessories. has gone certainly by means of just about every single attitude. All of these necklaces creations is employed everyday or possibly located at specialized circumstances when you=E2=80=99re ready to get a elegant. Shamballa , Still, right from For my child Right from You will, you can buy a rendition about shamballa band, at only a fabulous petite percentage for the amount, still, the software must remain referred to which usually the identical your personally seen relating to Produced in Chelsea are likewise advertised just by For my child Right from you will, for that reason you=E2= =80=99ll find that there=E2=80=99s not always a fabulous must contain to invest in a= fabulous replica! Components bracelets really are the best determination. shamballa bracelet , All the list fro= m this precious jewelry is actually procured right from an old Buddhist customs depending round a fabulous magical locale whereby calm and additionally harmony reign substantial. This approach stunning locale is certainly considered to live in Tibet and additionally different think that sole all the normal about middle may well obtain the software. When band is the expected proportions, produce a knot to other sorts of clear terminate. Chic jewellery- Shamballa necklaces actually is fabulous and additionally chic which gives a fabulous pleasant want to all the wearer. Document don=E2=80=99t think the good news is lover alive so, who d= oesn=E2=80=99t have certain times previously had a true damaging scalp moment. Charm bracelets can be your own. When you can be any work goer, a party goer, any sportsman, or possibly could very well be any first of all wedding date, yo= u want to wear which usually most suitable clothes. -- View this message in context: http://xfs.9218.n7.nabble.com/Methods-to-Look= -for-Any-Shamballa-Pas-Cher-tp34999.html Sent from the linux-xfs mailing list archive at Nabble.com. From BATV+37c86adbb78561622954+3541+infradead.org+hch@bombadil.srs.infradead.org Sat May 4 03:11:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CDD7329E15 for ; Sat, 4 May 2013 03:11:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id BE1768F8035 for ; Sat, 4 May 2013 01:11:23 -0700 (PDT) X-ASG-Debug-ID: 1367655081-04cb6c756a17510001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 95eiRdA1sDOqTV5T (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Sat, 04 May 2013 01:11:21 -0700 (PDT) X-Barracuda-Envelope-From: BATV+37c86adbb78561622954+3541+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1UYXYt-0005bc-SB; Sat, 04 May 2013 08:11:19 +0000 Date: Sat, 4 May 2013 04:11:19 -0400 From: Christoph Hellwig To: Ben Myers Cc: xfs@oss.sgi.com, dchinner@redhat.com Subject: Re: [GIT PULL] XFS updates for 3.10-rc1 Message-ID: <20130504081119.GA17324@infradead.org> X-ASG-Orig-Subj: Re: [GIT PULL] XFS updates for 3.10-rc1 References: <20130502205615.52F13500B4E@whiskey.americas.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130502205615.52F13500B4E@whiskey.americas.sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1367655081 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129969 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Thu, May 02, 2013 at 03:56:15PM -0500, Ben Myers wrote: > Hi Linus, > > Please pull these XFS updates for 3.10-rc1. It's a bunch of cleanups > and bugfixes and an (for now) experimental feature from Dave Chinner, > CRC protection for on disk metadata structures. Does this mean the new format is still unstable? It would be a pity to not support the d_type directory additions in the same version bump. From david@fromorbit.com Sat May 4 04:18:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5FA427F6F for ; Sat, 4 May 2013 04:18:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id DFFBEAC002 for ; Sat, 4 May 2013 02:18:35 -0700 (PDT) X-ASG-Debug-ID: 1367659113-04cb6c756a1a790001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id fPmUGllUeHxaTL4C for ; Sat, 04 May 2013 02:18:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ak0QAOzRhFF5LMFk/2dsb2JhbABQgweDCrdQhRwEAXsXdIIfAQEFOhwjEAgDDgoJJQ8FJQMhE4gLwVYWjX6BHQeCcmEDlyuRM4MfKg Received: from ppp121-44-193-100.lns20.syd7.internode.on.net (HELO dastard) ([121.44.193.100]) by ipmail04.adl6.internode.on.net with ESMTP; 04 May 2013 18:48:05 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UYYbS-0007gA-6V; Sat, 04 May 2013 19:18:02 +1000 Date: Sat, 4 May 2013 19:18:02 +1000 From: Dave Chinner To: Christoph Hellwig Cc: Ben Myers , dchinner@redhat.com, xfs@oss.sgi.com Subject: Re: [GIT PULL] XFS updates for 3.10-rc1 Message-ID: <20130504091802.GE19978@dastard> X-ASG-Orig-Subj: Re: [GIT PULL] XFS updates for 3.10-rc1 References: <20130502205615.52F13500B4E@whiskey.americas.sgi.com> <20130504081119.GA17324@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130504081119.GA17324@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367659113 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.129975 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 04, 2013 at 04:11:19AM -0400, Christoph Hellwig wrote: > On Thu, May 02, 2013 at 03:56:15PM -0500, Ben Myers wrote: > > Hi Linus, > > > > Please pull these XFS updates for 3.10-rc1. It's a bunch of cleanups > > and bugfixes and an (for now) experimental feature from Dave Chinner, > > CRC protection for on disk metadata structures. > > Does this mean the new format is still unstable? It would be a pity to > not support the d_type directory additions in the same version bump. d_type is not there yet, so we can discuss whether it will need a incompat feature bit or not once I have it done. It's only about half done right now as I've been concentrating on more critical bits like the fact that unlinked list modifications don't update the inode CRC right now and there's still basic functionality missing from xfs_db.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@redhat.com Sat May 4 08:24:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E299629DF8 for ; Sat, 4 May 2013 08:24:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id CB7DC304043 for ; Sat, 4 May 2013 06:24:03 -0700 (PDT) X-ASG-Debug-ID: 1367673839-04cb6c756a27730001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 3yW28ucerwTEUzeQ for ; Sat, 04 May 2013 06:23:59 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r44DNwZa010209 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 4 May 2013 09:23:58 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r44DNvul008292 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sat, 4 May 2013 09:23:58 -0400 Message-ID: <51850BED.6050109@redhat.com> Date: Sat, 04 May 2013 08:23:57 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfstests: automatically add -F to xfs_io on non-xfs X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: automatically add -F to xfs_io on non-xfs Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367673839 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 The -F flag to xfs_io originally enabled it to operate on non-xfs filesystems. This restriction was removed upstream in favor of gracefully failing on the handful of operations that actually required xfs, and the option was deprecated. However, xfstests is still used on distros with older xfsprogs, and so "xfs_io -F" was necessary throughout xfstests. Simplify this by appending -F to XFS_IO_PROG when it's exported, if we're not running on an xfs filesystem. This will eliminate errors when new tests leave out the -F, and if and when -F is finally removed, there will be one central location in xfstests to update. Signed-off-by: Eric Sandeen --- diff --git a/common/config b/common/config index 67c1498..554a2c2 100644 --- a/common/config +++ b/common/config @@ -157,6 +157,8 @@ export XFS_REPAIR_PROG="`set_prog_path xfs_repair`" export XFS_DB_PROG="`set_prog_path xfs_db`" export XFS_GROWFS_PROG=`set_prog_path xfs_growfs` export XFS_IO_PROG="`set_prog_path xfs_io`" +# Older xfs_io refuses to run w/o -F on non-xfs +[ "$FSTYP" != "xfs" ] && export XFS_IO_PROG="$XFS_IO_PROG -F" export XFS_PARALLEL_REPAIR_PROG="`set_prog_path xfs_prepair`" export XFS_PARALLEL_REPAIR64_PROG="`set_prog_path xfs_prepair64`" export __XFSDUMP_PROG="`set_prog_path xfsdump`" diff --git a/tests/ext4/271 b/tests/ext4/271 index dfb1ec9..274e904 100755 --- a/tests/ext4/271 +++ b/tests/ext4/271 @@ -54,7 +54,7 @@ do dd if=/dev/zero of=$SCRATCH_MNT/file bs=4k count=1 seek=$((i*10)) done # truncate last extent -$XFS_IO_PROG -F -f -c "truncate $((4096*200))" $SCRATCH_MNT/file +$XFS_IO_PROG -f -c "truncate $((4096*200))" $SCRATCH_MNT/file if ! _scratch_unmount; then echo "failed to umount" diff --git a/tests/generic/213 b/tests/generic/213 index a0bfd16..3c8a304 100755 --- a/tests/generic/213 +++ b/tests/generic/213 @@ -61,19 +61,19 @@ avail=`df -P $TEST_DIR | awk 'END {print $4}'` [ "$avail" -ge 1049600 ] || _notrun "Test device is too small ($avail KiB)" # reserve 1GiB, truncate at 100bytes -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'truncate 100' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'truncate 100' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # reserve 1GiB, truncate at 1GiB -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'truncate 1g' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'truncate 1g' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # reserve 1GiB, truncate at 2GiB -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'truncate 2g' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'truncate 2g' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # reserve 1GiB, 1GiB hole, reserve 1MiB, truncate at 3GiB -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'falloc 2g 1m' -c 'truncate 3g' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'falloc 2g 1m' -c 'truncate 3g' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # Try to reserve more space than we have @@ -81,7 +81,7 @@ echo "We should get: fallocate: No space left on device" echo "Strangely, xfs_io sometimes says \"Success\" when something went wrong, FYI" let toobig=$avail*2 -$XFS_IO_PROG -F -f -c "falloc 0 ${toobig}k" $TEST_DIR/ouch +$XFS_IO_PROG -f -c "falloc 0 ${toobig}k" $TEST_DIR/ouch rm -f $TEST_DIR/ouch # success, all done diff --git a/tests/generic/214 b/tests/generic/214 index f1257ee..1885534 100755 --- a/tests/generic/214 +++ b/tests/generic/214 @@ -63,7 +63,7 @@ rm -f $TEST_DIR/test214-* # Super-trivial; preallocate a region and read it; get 0s. echo "=== falloc & read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 4096' \ -c 'pread -v 0 4096' \ $TEST_DIR/test214-1 | _filter_xfs_io_unique @@ -72,7 +72,7 @@ $XFS_IO_PROG -F -f \ # Should get no stale data. Early ext4 bug. echo "=== falloc, write beginning, read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 512' \ -c 'pwrite 0 1' \ -c 'pread -v 0 512' \ @@ -80,7 +80,7 @@ $XFS_IO_PROG -F -f \ # Same but write in the middle of the region echo "=== falloc, write middle, read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 512' \ -c 'pwrite 256 1' \ -c 'pread -v 0 512' \ @@ -88,7 +88,7 @@ $XFS_IO_PROG -F -f \ # Same but write the end of the region echo "=== falloc, write end, read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 512' \ -c 'pwrite 511 1' \ -c 'pread -v 0 512' \ @@ -106,7 +106,7 @@ $XFS_IO_PROG -F -f \ echo "=== falloc, write, sync, truncate, read ===" # Allocate, write, sync, truncate (buffered) -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0x0 0x65C00' \ -c 'pwrite -S 0xAA 0x12000 0x10000' \ -c 'fsync' \ @@ -114,7 +114,7 @@ $XFS_IO_PROG -F -f \ $TEST_DIR/test214-5 | _filter_xfs_io_unique # now do a direct read and see what's on-disk -$XFS_IO_PROG -F -f -d \ +$XFS_IO_PROG -f -d \ -c 'pread -v 0 0x16000' \ $TEST_DIR/test214-5 | _filter_xfs_io_unique @@ -126,7 +126,7 @@ echo "=== delalloc write 16k; fallocate same range ===" # delalloc write 16k, fallocate same range. # Should get caught on fsck when we're done. -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c "pwrite 0 16k" \ -c "falloc 0 16k" \ -c "fsync" \ @@ -136,8 +136,8 @@ $XFS_IO_PROG -F -f \ echo "=== ext4 testcase 2 ===" -$XFS_IO_PROG -F -f \ - -c "fsync" \ +$XFS_IO_PROG -f \ + -c "fsync" \ -c "pwrite 551917 41182" \ -c "falloc 917633 392230" \ -c "pwrite 285771 77718" \ diff --git a/tests/generic/215 b/tests/generic/215 index 6e75645..eaae8d8 100755 --- a/tests/generic/215 +++ b/tests/generic/215 @@ -59,7 +59,7 @@ sleep 2 echo echo "writing via mmap" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'mmap 0 4096' \ -c 'mwrite 0 4096' \ $testfile | _filter_xfs_io_unique diff --git a/tests/generic/219 b/tests/generic/219 index 071d798..2b75b89 100755 --- a/tests/generic/219 +++ b/tests/generic/219 @@ -82,11 +82,11 @@ test_accounting() echo "--- initiating parallel IO..." >>$seqres.full # Small ios here because ext3 will account for indirect blocks too ... # 48k will fit w/o indirect for 4k blocks (default blocksize) - $XFS_IO_PROG -F -c 'pwrite 0 48k' -c 'fsync' \ + $XFS_IO_PROG -c 'pwrite 0 48k' -c 'fsync' \ $SCRATCH_MNT/buffer >>$seqres.full 2>&1 & - $XFS_IO_PROG -F -c 'pwrite 0 48k' -d \ + $XFS_IO_PROG -c 'pwrite 0 48k' -d \ $SCRATCH_MNT/direct >>$seqres.full 2>&1 & - $XFS_IO_PROG -F -c 't 48k' -c 'mm -rw 0 48k' -c 'mw 0 48k' -c 'ms -s' \ + $XFS_IO_PROG -c 't 48k' -c 'mm -rw 0 48k' -c 'mw 0 48k' -c 'ms -s' \ $SCRATCH_MNT/mmap >>$seqres.full 2>&1 & wait echo "--- completed parallel IO ($type)" >>$seqres.full diff --git a/tests/generic/228 b/tests/generic/228 index ca375f4..03d4491 100755 --- a/tests/generic/228 +++ b/tests/generic/228 @@ -73,11 +73,11 @@ flim=`ulimit -f` echo "File size limit is now set to 100 MB." echo "Let us try to preallocate 101 MB. This should fail." -$XFS_IO_PROG -F -f -c 'falloc 0 101m' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 101m' $TEST_DIR/ouch rm -f $TEST_DIR/ouch echo "Let us now try to preallocate 50 MB. This should succeed." -$XFS_IO_PROG -F -f -c 'falloc 0 50m' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 50m' $TEST_DIR/ouch rm -f $TEST_DIR/ouch echo "Test over." diff --git a/tests/generic/230 b/tests/generic/230 index 797755b..b77210f 100755 --- a/tests/generic/230 +++ b/tests/generic/230 @@ -62,23 +62,23 @@ test_enforcement() echo "--- initiating IO..." >>$seqres.full # Firstly fit below block soft limit echo "Write 900k..." - su $qa_user -c "$XFS_IO_PROG -F -c 'pwrite 0 900k' -c fsync \ + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 900k' -c fsync \ $SCRATCH_MNT/file1" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Secondly overcome block soft limit echo "Rewrite 1001k..." - su $qa_user -c "$XFS_IO_PROG -F -c 'pwrite 0 1001k' -c fsync \ + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 1001k' -c fsync \ $SCRATCH_MNT/file1" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Now try to overcome block hardlimit echo "Write 1000k..." - su $qa_user -c "$XFS_IO_PROG -F -c 'pwrite 0 1000k' -c fsync \ + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 1000k' -c fsync \ $SCRATCH_MNT/file2" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Now sleep for grace time and check that softlimit got enforced sleep $((grace+1)) echo "Write 4096..." - su $qa_user -c "$XFS_IO_PROG -F -c 'truncate 0' -c 'pwrite 0 4096' \ + su $qa_user -c "$XFS_IO_PROG -c 'truncate 0' -c 'pwrite 0 4096' \ $SCRATCH_MNT/file2" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # And now the softlimit test for inodes diff --git a/tests/generic/231 b/tests/generic/231 index b50412c..a7cff35 100755 --- a/tests/generic/231 +++ b/tests/generic/231 @@ -57,7 +57,7 @@ _fsx() wait return 1 fi - $XFS_IO_PROG -F -c 'fsync' $SCRATCH_MNT/fsx_file$i + $XFS_IO_PROG -c 'fsync' $SCRATCH_MNT/fsx_file$i cat $tmp.output$i | tee -a $seqres.full done return 0 diff --git a/tests/generic/235 b/tests/generic/235 index f430ba2..237da5e 100755 --- a/tests/generic/235 +++ b/tests/generic/235 @@ -69,7 +69,7 @@ mount -o remount,ro $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch mount -o remount,rw $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch -$XFS_IO_PROG -F -c 'pwrite 0 8k' -c 'fsync' \ +$XFS_IO_PROG -c 'pwrite 0 8k' -c 'fsync' \ $SCRATCH_MNT/testfile >>$seqres.full 2>&1 repquota -u -g $SCRATCH_MNT | grep -v "^root" | _filter_scratch diff --git a/tests/generic/247 b/tests/generic/247 index 295259f..5f16281 100755 --- a/tests/generic/247 +++ b/tests/generic/247 @@ -66,7 +66,7 @@ start=`expr $loops - 1` for i in `seq $start -1 0` do offset=`expr $i \* $iosize` - $XFS_IO_PROG -F -f -c "mmap -w $offset $iosize" -c "mwrite $offset $iosize" $testfile + $XFS_IO_PROG -f -c "mmap -w $offset $iosize" -c "mwrite $offset $iosize" $testfile [ $? -ne 0 ] && exit done diff --git a/tests/generic/249 b/tests/generic/249 index 6ba7ddb..1f25edb 100755 --- a/tests/generic/249 +++ b/tests/generic/249 @@ -53,9 +53,9 @@ SRC=$TEST_DIR/$seq.src DST=$TEST_DIR/$seq.dst rm -f $seqres.full -$XFS_IO_PROG -F -f -c "pwrite -S 0xa5a55a5a 0 32768k" -c fsync $SRC >> $seqres.full 2>&1 +$XFS_IO_PROG -f -c "pwrite -S 0xa5a55a5a 0 32768k" -c fsync $SRC >> $seqres.full 2>&1 [ $? -ne 0 ] && _fail "xfs_io pwrite failed" -$XFS_IO_PROG -F -f -c "sendfile -i $SRC 0 32768k" -c fsync $DST >> $seqres.full 2>&1 +$XFS_IO_PROG -f -c "sendfile -i $SRC 0 32768k" -c fsync $DST >> $seqres.full 2>&1 [ $? -ne 0 ] && _fail "xfs_io sendfile failed" diff -q $SRC $DST diff --git a/tests/generic/256 b/tests/generic/256 index 18ab819..4a53da8 100755 --- a/tests/generic/256 +++ b/tests/generic/256 @@ -92,11 +92,11 @@ _fill_fs() { while [ $file_size -ge $block_size ] do bytes_written=0 - _user_do "$XFS_IO_PROG -F -f -c \"pwrite 0 $file_size\" $dir/$file_count.bin &> /dev/null" + _user_do "$XFS_IO_PROG -f -c \"pwrite 0 $file_size\" $dir/$file_count.bin &> /dev/null" if [ -f $dir/$file_count.bin ] then - bytes_written=`$XFS_IO_PROG -F -c "stat" $dir/$file_count.bin | grep stat.size | cut -d ' ' -f3` + bytes_written=`$XFS_IO_PROG -c "stat" $dir/$file_count.bin | grep stat.size | cut -d ' ' -f3` fi # If there was no room to make the file, @@ -139,7 +139,7 @@ _test_full_fs_punch() rm -f $file_name &> /dev/null - $XFS_IO_PROG -F -f -c "pwrite 0 $file_len" \ + $XFS_IO_PROG -f -c "pwrite 0 $file_len" \ -c "fsync" $file_name &> /dev/null chmod 666 $file_name @@ -149,7 +149,7 @@ _test_full_fs_punch() do # This part must not be done as root in order to # test that reserved blocks are used when needed - _user_do "$XFS_IO_PROG -F -f -c \"fpunch $hole_offset $hole_len\" $file_name" + _user_do "$XFS_IO_PROG -f -c \"fpunch $hole_offset $hole_len\" $file_name" rc=$? if [ $? -ne 0 ] ; then echo Punch hole failed diff --git a/tests/generic/286 b/tests/generic/286 old mode 100644 new mode 100755 index a0d4df9..0652fd4 --- a/tests/generic/286 +++ b/tests/generic/286 @@ -63,7 +63,7 @@ test01() done echo "*** test01() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test01() create sparse file done ***" >>$seqres.full echo >>$seqres.full @@ -91,7 +91,7 @@ test02() done echo "*** test02() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test02() create sparse file done ***" >>$seqres.full echo >>$seqres.full @@ -134,7 +134,7 @@ test03() done echo "*** test03() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test03() create sparse file done ***" >>$seqres.full echo >>$seqres.full @@ -176,7 +176,7 @@ test04() done echo "*** test04() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test04() create sparse file done ***" >>$seqres.full echo >>$seqres.full diff --git a/tests/generic/306 b/tests/generic/306 index e8e0fc0..d225af5 100755 --- a/tests/generic/306 +++ b/tests/generic/306 @@ -73,9 +73,9 @@ _scratch_mount -o ro || _fail "Could not mount scratch readonly" echo "== try to create new file" touch $SCRATCH_MNT/this_should_fail 2>&1 | _filter_scratch echo "== pwrite to null device" -$XFS_IO_PROG -F -c "pwrite 0 512" /dev/null | _filter_xfs_io +$XFS_IO_PROG -c "pwrite 0 512" /dev/null | _filter_xfs_io echo "== pread from zero device" -$XFS_IO_PROG -F -c "pread 0 512" /dev/zero | _filter_xfs_io +$XFS_IO_PROG -c "pread 0 512" /dev/zero | _filter_xfs_io echo "== truncating write to null device" echo foo > $DEVNULL 2>&1 | _filter_scratch @@ -84,16 +84,16 @@ echo foo >> $DEVNULL 2>&1 | _filter_scratch echo "== writing to symlink from ro fs to rw fs" # Various combinations of O_CREAT & O_TRUNC -$XFS_IO_PROG -F -c "pwrite 0 512" $SYMLINK | _filter_xfs_io -$XFS_IO_PROG -F -f -c "pwrite 0 512" $SYMLINK | _filter_xfs_io -$XFS_IO_PROG -F -t -c "pwrite 0 512" $SYMLINK | _filter_xfs_io +$XFS_IO_PROG -c "pwrite 0 512" $SYMLINK | _filter_xfs_io +$XFS_IO_PROG -f -c "pwrite 0 512" $SYMLINK | _filter_xfs_io +$XFS_IO_PROG -t -c "pwrite 0 512" $SYMLINK | _filter_xfs_io echo "== write to bind-mounted rw file on ro fs" mount --bind $TARGET $BINDFILE # with and without -f (adds O_CREAT) -$XFS_IO_PROG -F -c "pwrite 0 512" $BINDFILE | _filter_xfs_io -$XFS_IO_PROG -F -f -c "pwrite 0 512" $BINDFILE | _filter_xfs_io -$XFS_IO_PROG -F -t -c "pwrite 0 512" $BINDFILE | _filter_xfs_io +$XFS_IO_PROG -c "pwrite 0 512" $BINDFILE | _filter_xfs_io +$XFS_IO_PROG -f -c "pwrite 0 512" $BINDFILE | _filter_xfs_io +$XFS_IO_PROG -t -c "pwrite 0 512" $BINDFILE | _filter_xfs_io # success, all done status=0 diff --git a/tests/shared/243 b/tests/shared/243 index 05edc1e..e0f2db2 100755 --- a/tests/shared/243 +++ b/tests/shared/243 @@ -130,7 +130,7 @@ rm -f ${TEST_DIR}/test_? # Begin test cases. echo "Test 1: Fallocate 40960 bytes and write 4096 bytes (buffered io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f \ +${XFS_IO_PROG} -f \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 4096' \ ${TEST_DIR}/test_1 | _filter_xfs_io_unique @@ -138,7 +138,7 @@ _check_ext4_eof_flag test_1 ${BIT_SET} echo "Test 2: Fallocate 40960 bytes and write 4096 bytes (direct io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f -d \ +${XFS_IO_PROG} -f -d \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 4096' \ ${TEST_DIR}/test_2 | _filter_xfs_io_unique @@ -146,7 +146,7 @@ _check_ext4_eof_flag test_2 ${BIT_SET} echo "Test 3: Fallocate 40960 bytes and write 40960 bytes (buffered io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f \ +${XFS_IO_PROG} -f \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 40960' \ ${TEST_DIR}/test_3 | _filter_xfs_io_unique @@ -154,7 +154,7 @@ _check_ext4_eof_flag test_3 ${BIT_NOT_SET} echo "Test 4: Fallocate 40960 bytes and write 40960 bytes (direct io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f -d \ +${XFS_IO_PROG} -f -d \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 40960' \ ${TEST_DIR}/test_4 | _filter_xfs_io_unique @@ -162,7 +162,7 @@ _check_ext4_eof_flag test_4 ${BIT_NOT_SET} echo "Test 5: Fallocate 128k, seek 256k and write 4k block (buffered io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f \ +${XFS_IO_PROG} -f \ -c 'falloc -k 0 128k' \ -c 'pwrite 256k 4k' \ ${TEST_DIR}/test_5 | _filter_xfs_io_unique @@ -170,7 +170,7 @@ _check_ext4_eof_flag test_5 ${BIT_NOT_SET} echo "Test 6: Fallocate 128k, seek to 256k and write a 4k block (direct io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f -d \ +${XFS_IO_PROG} -f -d \ -c 'falloc -k 0 128k' \ -c 'pwrite 256k 4k' \ ${TEST_DIR}/test_6 | _filter_xfs_io_unique From abbott@shilpasfashionworld.org Sat May 4 11:03:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 22F2B7F6C for ; Sat, 4 May 2013 11:03:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 09CBF8F8049 for ; Sat, 4 May 2013 09:03:54 -0700 (PDT) X-ASG-Debug-ID: 1367683431-04cbb07aba302f0001-NocioJ Received: from smtp.net4india.com (smtp.net4india.com [202.71.131.15]) by cuda.sgi.com with ESMTP id Ny1zR1VJ56LRhMvQ for ; Sat, 04 May 2013 09:03:52 -0700 (PDT) X-Barracuda-Envelope-From: abbott@shilpasfashionworld.org X-Barracuda-Apparent-Source-IP: 202.71.131.15 Received: from [121.245.134.81] (helo=hp-65af834cfbe0) by smtp.net4india.com with esmtp (Exim 4.72) (envelope-from ) id 1UYewA-0004fN-Gz for xfs@oss.sgi.com; Sat, 04 May 2013 21:33:50 +0530 From: "Shilpa Sharma" Subject: Shilpas fashion world invite for xfs@oss.sgi.com To: xfs@oss.sgi.com X-ASG-Orig-Subj: Shilpas fashion world invite for xfs@oss.sgi.com Content-Type: multipart/alternative; boundary="mqx2QnIwZQ3bUkW0wDpeod=_zkJmKn69bS0" MIME-Version: 1.0 Reply-To: shilpa@khushiwebworld.com Date: Sat, 4 May 2013 21:33:57 +0530 X-Barracuda-Connect: smtp.net4india.com[202.71.131.15] X-Barracuda-Start-Time: 1367683432 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.34 X-Barracuda-Spam-Status: No, SCORE=0.34 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_MID, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130001 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) Message-Id: <20130504160354.A86A5106CFD1@cuda.sgi.com> This is a multi-part message in MIME format --mqx2QnIwZQ3bUkW0wDpeod=_zkJmKn69bS0 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable - This mail is a HTML mail. Not all elements could be shown in plain = text mode. - Hi, Beauty isn't about looking young, but about looking good, only by best= cosmetics advice and makeup tips. Best Cosmetics and makeup are secre= ts of the essence of the best beauty business. Visit my website http://shilpasfashionworld.org which has the best tips for both male and female. Your valuable feedback is very important. If you received the invitation accidently kindly forward the mail to shilpa@khushiwebworld.com for removal of the email id Regards ... Shilpa Sharma --mqx2QnIwZQ3bUkW0wDpeod=_zkJmKn69bS0 Content-Type: text/html Content-Transfer-Encoding: quoted-printable

Hi,

Beauty isn't about looking young, but about look= ing good, only by best cosmetics advice and makeup tips. Best Cosmetic= s and makeup are secrets of the essence of the best beauty business.

Visit my website http://shilpasfashionworld.org which has the best tips for both male and= female.

Your valuable feedback is very important.=

If you received the invitation accidently kindly= forward the mail to shilpa@khushiwebworld.com for removal of the email id

Regards ...

Shilpa Sharma

--mqx2QnIwZQ3bUkW0wDpeod=_zkJmKn69bS0-- From MAILER-DAEMON Sun May 5 14:24:14 2013 Return-Path: <> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE, T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4214A29DF8 for ; Sun, 5 May 2013 14:24:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C4F95AC001 for ; Sun, 5 May 2013 12:24:10 -0700 (PDT) X-ASG-Debug-ID: 1367781848-04cbb07ab773c70001-NocioJ Received: from CO9EHSNDR001.bigfish.com (mail14-co9on0067.outbound.messaging.microsoft.com [157.56.211.67]) by cuda.sgi.com with ESMTP id kM3V12sTuAK5NhZR (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 05 May 2013 12:24:09 -0700 (PDT) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 157.56.211.67 Received: from co9outboundpool.messaging.microsoft.com (10.236.132.236) by CO9EHSNDR001.bigfish.com (10.236.130.55) with Microsoft SMTP Server (TLS) id 14.1.225.23; Sun, 5 May 2013 19:24:08 +0000 Received: from mail63-co9-R.bigfish.com (10.236.132.232) by CO9EHSOBE040.bigfish.com (10.236.130.103) with Microsoft SMTP Server id 14.1.225.23; Sun, 5 May 2013 19:24:07 +0000 Received: from mail63-co9 (localhost [127.0.0.1]) by mail63-co9-R.bigfish.com (Postfix) with ESMTP id C16A3C8081D; Sun, 5 May 2013 19:24:07 +0000 (UTC) X-Forefront-Antispam-Report: CIP:130.226.47.178;KIP:(null);UIP:(null);IPV:NLI;H:EXEDG01.hhk.dk;RD:mail.cbs.dk;EFVD:NLI X-BigFish: VPS38(z569dhzdb80h7f52hc85dhdb61hzz1f42h1fc6h1ee6h1de0h1d18h1fdah1202h1e76h1d1ah1d2ahzz18c673h8275bh182cceh1a6305s1a62e8m1839f7iz2fh2a8h668h839hd25hf0ahfa3h1288h12a5h12bdh137ah1441h1504h1537h153bh15d0h162dh1631h1758h18e1h1946h19b5h1b0ah1b2fh1bceh1c0dh1d0ch1d2eh1d3fh35h15a5im) X-FB-OUTBOUND-SPAM: yes X-SpamScore: 38 Received-SPF: pass (mail63-co9: domain of cbs.dk designates 130.226.47.178 as permitted sender) client-ip=130.226.47.178; envelope-from=srkj.eco@cbs.dk; helo=EXEDG01.hhk.dk ;EDG01.hhk.dk ; Received: from mail63-co9 (localhost.localdomain [127.0.0.1]) by mail63-co9 (MessageSwitch) id 1367781846967108_12150; Sun, 5 May 2013 19:24:06 +0000 (UTC) Received: from CO9EHSMHS015.bigfish.com (unknown [10.236.132.248]) by mail63-co9.bigfish.com (Postfix) with ESMTP id A9245940071; Sun, 5 May 2013 19:24:06 +0000 (UTC) Received: from EXEDG01.hhk.dk (130.226.47.178) by CO9EHSMHS015.bigfish.com (10.236.130.25) with Microsoft SMTP Server (TLS) id 14.1.225.23; Sun, 5 May 2013 19:24:06 +0000 Received: from EXCAS01.hhk.dk (192.168.61.2) by mail.cbs.dk (192.168.60.2) with Microsoft SMTP Server (TLS) id 8.3.298.1; Sun, 5 May 2013 21:31:03 +0200 Received: from Exchange01.hhk.dk ([169.254.1.88]) by EXCAS01.hhk.dk ([::1]) with mapi; Sun, 5 May 2013 21:24:04 +0200 From: =?iso-8859-1?Q?Simon_Robert_Kj=E6r_Jacobsen?= To: =?iso-8859-1?Q?Simon_Robert_Kj=E6r_Jacobsen?= Date: Sun, 5 May 2013 21:24:03 +0200 Subject: RE: Important Details Thread-Topic: Important Details X-ASG-Orig-Subj: RE: Important Details Thread-Index: AQHOScGOVTrWSGDpnke/LDCNx/f0yJj28OdYgAAB3naAAAEQOoAAAdocgAABbAY= Message-ID: <3F556BE4DAC5D84D9A529635C4EED1146101FDAF51@EXCHANGE01.hhk.dk> References: <3F556BE4DAC5D84D9A529635C4EED1146101FDAEE1@EXCHANGE01.hhk.dk>,<3F556BE4DAC5D84D9A529635C4EED1146101FDAF0A@EXCHANGE01.hhk.dk>,<3F556BE4DAC5D84D9A529635C4EED1146101FDAF17@EXCHANGE01.hhk.dk>,<3F556BE4DAC5D84D9A529635C4EED1146101FDAF21@EXCHANGE01 In-Reply-To: <3F556BE4DAC5D84D9A529635C4EED1146101FDAF38@EXCHANGE01.hhk.dk> Accept-Language: da-DK Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: da-DK Content-Type: multipart/alternative; boundary="_000_3F556BE4DAC5D84D9A529635C4EED1146101FDAF51EXCHANGE01hhk_" MIME-Version: 1.0 X-FOPE-CRA-Verdict: 130.226.47.178$nottingham.ac.uk%19607%4%cbs.dk%False%False%0$ Reply-To: X-OriginatorOrg: cbs.dk X-Barracuda-Connect: mail14-co9on0067.outbound.messaging.microsoft.com[157.56.211.67] X-Barracuda-Start-Time: 1367781849 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.52 X-Barracuda-Spam-Status: No, SCORE=0.52 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH, EMPTY_ENV_FROM, HTML_MESSAGE, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130111 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address --_000_3F556BE4DAC5D84D9A529635C4EED1146101FDAF51EXCHANGE01hhk_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Your Email ID make you as a lucky person of a lump sum pay out of 1,000,000= .00 in Chevrolet UK. send your Names,Mobile,Address to Email: enquiry-chevr= olet2013@hotmail.com --_000_3F556BE4DAC5D84D9A529635C4EED1146101FDAF51EXCHANGE01hhk_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Your Email ID make you as a lucky person of a lump sum pay out of 1,000,000= .00 in Chevrolet UK. send your Names,Mobile,Address to Email: enquiry-chevrolet2013@= hotmail.com
--_000_3F556BE4DAC5D84D9A529635C4EED1146101FDAF51EXCHANGE01hhk_-- From best@ns.name.com Sun May 5 18:44:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLYTO, SUBJECT_NEEDS_ENCODING,T_FRT_CONTACT autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4067329DF8 for ; Sun, 5 May 2013 18:44:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1AAE5304032 for ; Sun, 5 May 2013 16:44:34 -0700 (PDT) X-ASG-Debug-ID: 1367797473-04bdf0752e7dfd0001-NocioJ Received: from ns.name.com ([137.117.169.78]) by cuda.sgi.com with ESMTP id 48m7930FfrHvQDHU (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 05 May 2013 16:44:34 -0700 (PDT) X-Barracuda-Envelope-From: best@ns.name.com X-Barracuda-Apparent-Source-IP: 137.117.169.78 Received: from best by ns.name.com with local (Exim 4.80) (envelope-from ) id 1UZ8ba-0009v0-1h for xfs@oss.sgi.com; Sun, 05 May 2013 23:44:34 +0000 To: xfs@oss.sgi.com Subject: Ich habe Sie früher ohne eine Antwort per E-Mail. X-PHP-Script: 137.117.169.78/~best/css.php for 198.144.116.114 X-ASG-Orig-Subj: Ich habe Sie früher ohne eine Antwort per E-Mail. From: John Cooper LL.B Reply-To: johncooper.qc@outlook.com MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit Message-Id: Date: Sun, 05 May 2013 23:44:34 +0000 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - ns.name.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [501 513] / [47 12] X-AntiAbuse: Sender Address Domain - ns.name.com X-Get-Message-Sender-Via: ns.name.com: authenticated_id: best/only user confirmed/virtual account not confirmed X-Barracuda-Connect: UNKNOWN[137.117.169.78] X-Barracuda-Start-Time: 1367797473 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.88 X-Barracuda-Spam-Status: No, SCORE=1.88 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE, SUBJECT_NEEDS_ENCODING X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130127 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.28 SUBJECT_NEEDS_ENCODING SUBJECT_NEEDS_ENCODING 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 hallo, Ich habe Sie früher ohne eine Antwort per E-Mail. In meinem E-Mail erwähnte ich über meine toten Kunden, deren Angehörige Ich kann nicht in Kontakt zu kommen, aber Sie beide haben den gleichen Familiennamen, so wird es sehr einfach, damit Sie seine offizielle Nachfolger? Ich bin gezwungen, dies zu tun, weil ich nicht möchte die Bank meine Kunden Immobilien in des Finanzinstituts Treasury schieben als nicht identifizierte Vermächtnis. Ich brauche Ihre Hilfe, um als Nachfolger von meinem toten Kunden präsentiert werden, da Sie ein Ausländer sind und nur Sie können auf diesem Erbe zu erkundigen. Das Leitungsgremium des Finanzinstituts hat mich in dieser Angelegenheit kontaktiert, und ich bin noch den Nachfolger geben, um die Nachfrage zu dem Anwesen zu legen. Unter einem klaren und rechtmäßige Vereinbarung mit Ihnen, ich suche Ihre Zustimmung zu als Erbe, so dass mein toter Kunde den Nachlass nicht von der Wertpapierfirma beschlagnahmt werden und dann in die Staatskasse als nicht identifizierte Erbe vorgestellt. Für Transparenz in dieser Angelegenheit können Sie unmittelbaren Kontakt zur weiteren Klärung und Erklärung zu diesem Thema zu machen. Ich werde Sie müssen auch Ihre vollständigen Namen bestätigen und Telefonnummer, um die Tatsache, dass ich mit der richtigen Person zu tun zu ermitteln. Vielen Dank für Ihre voraussichtliche Akzeptanz, während ich Ihre prompte Antwort auf diese Frage, wie die Dringlichkeit Anforderungen erwarten. Grüße, John Cooper LL.B. London Großbritannien From david@fromorbit.com Sun May 5 19:04:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 464EE29DF8 for ; Sun, 5 May 2013 19:04:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id C79ECAC001 for ; Sun, 5 May 2013 17:04:32 -0700 (PDT) X-ASG-Debug-ID: 1367798669-04cb6c75687edc0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id QIcaJfyMDIa4smEA for ; Sun, 05 May 2013 17:04:30 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuUQAKvyhlF5LGwY/2dsb2JhbABQgweDCrdPhRwEAYECF3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLvxIWjX6BHQeDUwOXLYoShyODHyqBLyQ Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail05.adl6.internode.on.net with ESMTP; 06 May 2013 09:34:27 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZ8un-0002Zi-9K; Mon, 06 May 2013 10:04:25 +1000 Date: Mon, 6 May 2013 10:04:25 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] xfstests: automatically add -F to xfs_io on non-xfs Message-ID: <20130506000425.GI19978@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: automatically add -F to xfs_io on non-xfs References: <51850BED.6050109@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51850BED.6050109@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1367798670 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130129 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 04, 2013 at 08:23:57AM -0500, Eric Sandeen wrote: > The -F flag to xfs_io originally enabled it to operate on non-xfs > filesystems. This restriction was removed upstream in favor of > gracefully failing on the handful of operations that actually > required xfs, and the option was deprecated. > > However, xfstests is still used on distros with older xfsprogs, and > so "xfs_io -F" was necessary throughout xfstests. > > Simplify this by appending -F to XFS_IO_PROG when it's exported, > if we're not running on an xfs filesystem. > > This will eliminate errors when new tests leave out the -F, and > if and when -F is finally removed, there will be one central location > in xfstests to update. > > Signed-off-by: Eric Sandeen All looks good, but.... > --- > > diff --git a/common/config b/common/config > index 67c1498..554a2c2 100644 > --- a/common/config > +++ b/common/config > @@ -157,6 +157,8 @@ export XFS_REPAIR_PROG="`set_prog_path xfs_repair`" > export XFS_DB_PROG="`set_prog_path xfs_db`" > export XFS_GROWFS_PROG=`set_prog_path xfs_growfs` > export XFS_IO_PROG="`set_prog_path xfs_io`" > +# Older xfs_io refuses to run w/o -F on non-xfs > +[ "$FSTYP" != "xfs" ] && export XFS_IO_PROG="$XFS_IO_PROG -F" I wonder if we can be smarter about this, and not set it on versions of xfs_io that don't need it so we don't have to care about future versions of xfs_io that might remove the option completely rather than silently ignore it? For example, after we've validated the $TEST_DEV in common/rc, run an xfs_io command on the TEST_DIR and determine if the -F flag is required? We do all sorts of additional checks in common/rc after including common/config, so perhaps fixing this is better done in common/rc rather than common/config.... Other than that, the change looks good. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 5 19:07:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 82EED29DF8 for ; Sun, 5 May 2013 19:07:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 059C5AC004 for ; Sun, 5 May 2013 17:07:17 -0700 (PDT) X-ASG-Debug-ID: 1367798835-04cb6c756a7ef50001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id iybhaSYXuiBMs5zG for ; Sun, 05 May 2013 17:07:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuUQAKvyhlF5LGwY/2dsb2JhbABQgweDCrdPhRwEAYECF3SCHwEBBTocIxAIAxgJJQ8FDRgDNId6Aw63GQ2HbBaMRYE5gR0HFoM9A5VKgWOMFIUhgx8q Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail05.adl6.internode.on.net with ESMTP; 06 May 2013 09:37:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZ8xW-0002aL-UK; Mon, 06 May 2013 10:07:14 +1000 Date: Mon, 6 May 2013 10:07:14 +1000 From: Dave Chinner To: rjohnston@sgi.com Cc: xfs@oss.sgi.com, Wang Sheng-Hui Subject: Re: [PATCH V4] xfstests: make install support common/ and tests/ dirs Message-ID: <20130506000714.GJ19978@dastard> X-ASG-Orig-Subj: Re: [PATCH V4] xfstests: make install support common/ and tests/ dirs References: <20130503173918.138615197@cxfsxe4.americas.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130503173918.138615197@cxfsxe4.americas.sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1367798835 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130129 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Fri, May 03, 2013 at 12:39:18PM -0500, rjohnston@sgi.com wrote: > xfstests have some change on the organization of the testcases > and common* files: > * The common* scripts have been reorganized into the common/ dir. > * The testcases have been reorganized into sub test dirs under tests/. > * The run.* scripts have been removed. > > This patch uses the simple way to make install support above changes: > Make up one Makefile for each newly created subdirs, which can control > 'make install' separately. > > Signed-off-by: Wang Sheng-Hui > [rjohnston@sgi.com Reposted for current top of tree changes] Looks fine. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 5 19:19:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 60FD729DF8 for ; Sun, 5 May 2013 19:19:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4ED90304032 for ; Sun, 5 May 2013 17:19:13 -0700 (PDT) X-ASG-Debug-ID: 1367799550-04cbb07ab77d630001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 5XSyRdaii628dxVJ for ; Sun, 05 May 2013 17:19:11 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AusQAGH2hlF5LGwY/2dsb2JhbABQgwc3glO3T4UcBAGBAhd0gh8BAQU6FAgjEAgDDgYECSUPBR0IAyEICx0Eh2oNvwsWjX6BHQeDUwOXLYEnkA6DHyo Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail05.adl6.internode.on.net with ESMTP; 06 May 2013 09:49:10 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZ993-0002bL-I0; Mon, 06 May 2013 10:19:09 +1000 Date: Mon, 6 May 2013 10:19:09 +1000 From: Dave Chinner To: Rich Johnston Cc: Josef Bacik , "linux-btrfs@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 Message-ID: <20130506001909.GK19978@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests 311: test fsync with dm flakey V3 References: <1367003639-17621-1-git-send-email-jbacik@fusionio.com> <51840047.4020908@sgi.com> <20130503190514.GD12414@localhost.localdomain> <51840F54.9060206@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51840F54.9060206@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1367799550 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130131 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 03, 2013 at 02:26:12PM -0500, Rich Johnston wrote: > On 05/03/2013 02:05 PM, Josef Bacik wrote: > >On Fri, May 03, 2013 at 12:21:59PM -0600, Rich Johnston wrote: > >>Thanks for another patch Josef, it has been committed with the change > >>discussed. > >> > > > >Err I forgot to point out I already have a "sync" variable in there so it fails > >to compile, we'll need to change the var to do_sync or something. Want me to > >send a patch along? Thanks, > > > >Josef > > > Sorry this was my fault, I have reverted > > > commit 7f622f44b651aec13b99ef62c2942388a6fbee5d > Author: Rich Johnston > Date: Fri May 3 14:07:59 2013 -0500 > > Revert "xfstests 311: test fsync with dm flakey V3" > > and committed it again. > > commit dd3b5268312e0518ae695e8ee2a618f13805c425 > Author: Josef Bacik > Date: Fri Apr 26 19:13:59 2013 +0000 > > xfstests 311: test fsync with dm flakey V4 Hi Rich - reverting the entire patch for a small change makes the git history look very strange. Looking at the history I now see 2 commits with the same commit message, and a revert that says "patch will be resubmitted". It doesnt tell me why the commit was reverted, and the nsecond commit doesn't document the changes between the first (reverted) commit and the second. I have to use git diff to find out what the difference between the two commits, and even then I don't know the reason for the change.... In future, can you just add a new commit that fixes the previous problem with a commit message that describes the reason for needing the fix? i.e. rather than a complete revert and a new commit, a single commit like this is much better: xfstests: fix shadow variable in fsync-tester Commit 2ca254d introduced a build error where a variable named sync was used in a function that called the sync() syscall function, resulting in a build error. Rename the sync variable to do_sync to fix. SOB --- diff --git a/src/fsync-tester.c b/src/fsync-tester.c index 4de0d94..f0875fc 100644 --- a/src/fsync-tester.c +++ b/src/fsync-tester.c @@ -95,7 +95,7 @@ static void drop_all_caches() * the file and randomly write within it, depending on the prealloc flag */ static int test_three(int *max_blocks, int prealloc, int rand_fsync, - int sync, int drop_caches) + int do_sync, int drop_caches) { int size = (random() % 2048) + 4; int blocks = size / 2; @@ -128,8 +128,8 @@ static int test_three(int *max_blocks, int prealloc, int rand_ } /* Force a transaction commit in between just for fun */ - if (blocks == sync_block && (sync || drop_caches)) { - if (sync) + if (blocks == sync_block && (do_sync || drop_caches)) { + if (do_sync) sync(); else sync_file_range(test_fd, 0, 0, ---- That leaves a history that gives the reason for the change and the exact change that was necessary to fix the problem, and is much easier to work out what and why stuff was done a couple of years down the track.... Cheers, Dave. > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- Dave Chinner david@fromorbit.com From qcai@redhat.com Mon May 6 02:50:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EC57729DF8 for ; Mon, 6 May 2013 02:50:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B0F038F8052 for ; Mon, 6 May 2013 00:50:16 -0700 (PDT) X-ASG-Debug-ID: 1367826614-04bdf0753092490001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id NArzvk0HR49FGJLS for ; Mon, 06 May 2013 00:50:14 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r467oELg005551 for ; Mon, 6 May 2013 03:50:14 -0400 Date: Mon, 6 May 2013 03:50:13 -0400 (EDT) From: CAI Qian To: xfs@oss.sgi.com Message-ID: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> In-Reply-To: <2105365384.7582278.1367825507929.JavaMail.root@redhat.com> Subject: 3.9.0: XFS rootfs corruption MIME-Version: 1.0 X-ASG-Orig-Subj: 3.9.0: XFS rootfs corruption Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.0: XFS rootfs corruption Thread-Index: 8ypLi6XxFzVlD0lsbsYEuBMkEdZfnQ== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1367826614 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130161 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Saw this on several different Power7 systems after kdump reboot. It has xfsprogs-3.1.10 and rootfs in on LVM. Never saw one of those in any of the RC releases. ] Reached target Basic System. [ 4.919316] bio: create slab at 1 [ 5.078616] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled [ 5.081925] XFS (dm-1): Mounting Filesystem [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 of file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc [ 5.333575] [ 5.333600] CPU: 2 PID: 372 Comm: mount Tainted: G W 3.9.0+ #1 [ 5.333609] Call Trace: [ 5.333619] [c0000003e7e02b40] [c000000000014e48] .show_stack+0x78/0x1e0 (unreliable) [ 5.333635] [c0000003e7e02c10] [c00000000074be70] .dump_stack+0x28/0x3c [ 5.333690] [c0000003e7e02c80] [d00000000234ff14] .xfs_error_report+0x54/0x70 [xfs] [ 5.333747] [c0000003e7e02cf0] [d000000002396e84] .__xfs_dir3_data_check+0x784/0x820 [xfs] [ 5.333805] [c0000003e7e02df0] [d000000002396fdc] .xfs_dir3_data_verify+0xbc/0xe0 [xfs] [ 5.333871] [c0000003e7e02e70] [d00000000239703c] .xfs_dir3_data_write_verify+0x3c/0x1c0 [xfs] [ 5.333936] [c0000003e7e02f20] [d00000000234db94] ._xfs_buf_ioapply+0xd4/0x400 [xfs] [ 5.334003] [c0000003e7e03060] [d00000000234dfcc] .xfs_buf_iorequest+0x4c/0xe0 [xfs] [ 5.334055] [c0000003e7e030f0] [d00000000234e0c4] .xfs_bdstrat_cb+0x64/0x120 [xfs] [ 5.334117] [c0000003e7e03180] [d00000000234e284] .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] [ 5.334180] [c0000003e7e03270] [d00000000234f318] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] [ 5.334237] [c0000003e7e03310] [d0000000023b1904] .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] [ 5.334305] [c0000003e7e033d0] [d0000000023b1c4c] .xlog_recover_process_data+0x26c/0x340 [xfs] [ 5.334372] [c0000003e7e034a0] [d0000000023b2108] .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] [ 5.334438] [c0000003e7e03610] [d0000000023b2360] .xlog_do_log_recovery+0xa0/0x120 [xfs] [ 5.334503] [c0000003e7e036b0] [d0000000023b2400] .xlog_do_recover+0x20/0x150 [xfs] [ 5.334570] [c0000003e7e03740] [d0000000023b25c4] .xlog_recover+0x94/0x100 [xfs] [ 5.334647] [c0000003e7e037d0] [d0000000023bcf84] .xfs_log_mount+0x144/0x1e0 [xfs] [ 5.334705] [c0000003e7e03870] [d0000000023b6098] .xfs_mountfs+0x3c8/0x780 [xfs] [ 5.334768] [c0000003e7e03930] [d00000000236435c] .xfs_fs_fill_super+0x31c/0x3b0 [xfs] [ 5.334801] [c0000003e7e039d0] [c000000000217028] .mount_bdev+0x258/0x2b0 [ 5.334855] [c0000003e7e03aa0] [d000000002361c78] .xfs_fs_mount+0x18/0x30 [xfs] [ 5.334878] [c0000003e7e03b10] [c000000000218040] .mount_fs+0x70/0x230 [ 5.334890] [c0000003e7e03bd0] [c00000000023a9f8] .vfs_kern_mount+0x58/0x140 [ 5.334901] [c0000003e7e03c80] [c00000000023d5f0] .do_mount+0x280/0xb10 [ 5.334912] [c0000003e7e03d70] [c00000000023df30] .SyS_mount+0xb0/0x110 [ 5.334924] [c0000003e7e03e30] [c000000000009e54] syscall_exit+0x0/0x98 [ 5.334945] c00000001bee2000: 58 44 32 44 09 50 00 40 0a 50 00 40 0b 50 00 40 XD2D.P.@.P.@.P.@ [ 5.334957] c00000001bee2010: 00 00 00 00 00 11 a3 8e 32 62 65 61 68 5f 74 61 ........2beah_ta [ 5.334968] c00000001bee2020: 73 6b 5f 65 64 33 33 63 61 62 36 2d 32 65 30 31 sk_ed33cab6-2e01 [ 5.334979] c00000001bee2030: 2d 34 63 34 34 2d 38 63 31 65 2d 66 65 37 36 35 -4c44-8c1e-fe765 [ 5.334992] XFS (dm-1): Internal error xfs_dir3_data_write_verify at line 271 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000234db94 [ 5.334992] [ 5.335017] CPU: 2 PID: 372 Comm: mount Tainted: G W 3.9.0+ #1 [ 5.335025] Call Trace: [ 5.335032] [c0000003e7e02c10] [c000000000014e48] .show_stack+0x78/0x1e0 (unreliable) [ 5.335046] [c0000003e7e02ce0] [c00000000074be70] .dump_stack+0x28/0x3c [ 5.335099] [c0000003e7e02d50] [d00000000234ff14] .xfs_error_report+0x54/0x70 [xfs] [ 5.335153] [c0000003e7e02dc0] [d00000000234ffac] .xfs_corruption_error+0x7c/0xb0 [xfs] [ 5.335220] [c0000003e7e02e70] [d000000002397148] .xfs_dir3_data_write_verify+0x148/0x1c0 [xfs] [ 5.335284] [c0000003e7e02f20] [d00000000234db94] ._xfs_buf_ioapply+0xd4/0x400 [xfs] [ 5.335337] [c0000003e7e03060] [d00000000234dfcc] .xfs_buf_iorequest+0x4c/0xe0 [xfs] [ 5.335403] [c0000003e7e030f0] [d00000000234e0c4] .xfs_bdstrat_cb+0x64/0x120 [xfs] [ 5.335464] [c0000003e7e03180] [d00000000234e284] .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] [ 5.335527] [c0000003e7e03270] [d00000000234f318] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] [ 5.335584] [c0000003e7e03310] [d0000000023b1904] .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] [ 5.335650] [c0000003e7e033d0] [d0000000023b1c4c] .xlog_recover_process_data+0x26c/0x340 [xfs] [ 5.335718] [c0000003e7e034a0] [d0000000023b2108] .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] [ 5.335785] [c0000003e7e03610] [d0000000023b2360] .xlog_do_log_recovery+0xa0/0x120 [xfs] [ 5.335842] [c0000003e7e036b0] [d0000000023b2400] .xlog_do_recover+0x20/0x150 [xfs] [ 5.335909] [c0000003e7e03740] [d0000000023b25c4] .xlog_recover+0x94/0x100 [xfs] [ 5.335976] [c0000003e7e037d0] [d0000000023bcf84] .xfs_log_mount+0x144/0x1e0 [xfs] [ 5.336033] [c0000003e7e03870] [d0000000023b6098] .xfs_mountfs+0x3c8/0x780 [xfs] [ 5.336097] [c0000003e7e03930] [d00000000236435c] .xfs_fs_fill_super+0x31c/0x3b0 [xfs] [ 5.336121] [c0000003e7e039d0] [c000000000217028] .mount_bdev+0x258/0x2b0 [ 5.336174] [c0000003e7e03aa0] [d000000002361c78] .xfs_fs_mount+0x18/0x30 [xfs] [ 5.336206] [c0000003e7e03b10] [c000000000218040] .mount_fs+0x70/0x230 [ 5.336218] [c0000003e7e03bd0] [c00000000023a9f8] .vfs_kern_mount+0x58/0x140 [ 5.336229] [c0000003e7e03c80] [c00000000023d5f0] .do_mount+0x280/0xb10 [ 5.336240] [c0000003e7e03d70] [c00000000023df30] .SyS_mount+0xb0/0x110 [ 5.336251] [c0000003e7e03e30] [c000000000009e54] syscall_exit+0x0/0x98 [ 5.336262] XFS (dm-1): Corruption detected. Unmount and run xfs_repair [ 5.336281] XFS (dm-1): xfs_do_force_shutdown(0x8) called from line 1364 of file fs/xfs/xfs_buf.c. Return address = 0xd00000000234de84 [ 5.336295] XFS (dm-1): Corruption of in-memory data detected. Shutting down filesystem [ 5.336305] XFS (dm-1): Please umount the filesystem and rectify the problem(s) [ 5.336320] XFS (dm-1): metadata I/O error: block 0x8cfa0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336333] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336357] XFS (dm-1): metadata I/O error: block 0xb2250 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336369] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336385] XFS (dm-1): metadata I/O error: block 0xddd00 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336397] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336422] XFS (dm-1): metadata I/O error: block 0xde228 ("xlog_recover_iodone") error 5 numblks 8 [ 5.336434] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336450] XFS (dm-1): metadata I/O error: block 0x25e6e0 ("xlog_recover_iodone") error 5 numblks 8 [ 5.336462] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336486] XFS (dm-1): metadata I/O error: block 0x55bd70 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336499] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336514] XFS (dm-1): metadata I/O error: block 0x562370 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336526] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336552] XFS (dm-1): metadata I/O error: block 0x1900002 ("xlog_recover_iodone") error 5 numblks 1 [ 5.336564] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336579] XFS (dm-1): metadata I/O error: block 0x1900018 ("xlog_recover_iodone") error 5 numblks 8 [ 5.336591] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336617] XFS (dm-1): metadata I/O error: block 0x1900590 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336629] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336644] XFS (dm-1): metadata I/O error: block 0x19005f0 ("xlog_recover_iodone") error 5 numblks 8 [ 5.336656] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336680] XFS (dm-1): metadata I/O error: block 0x1900600 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336719] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336751] XFS (dm-1): metadata I/O error: block 0x1900c10 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336767] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336798] XFS (dm-1): metadata I/O error: block 0x197c7d0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336816] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336838] XFS (dm-1): metadata I/O error: block 0x32685a0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.336855] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336886] XFS (dm-1): metadata I/O error: block 0x32c7fd8 ("xlog_recover_iodone") error 5 numblks 8 [ 5.336904] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336926] XFS (dm-1): metadata I/O error: block 0x4b00002 ("xlog_recover_iodone") error 5 numblks 1 [ 5.336950] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.336968] XFS (dm-1): metadata I/O error: block 0x4be1120 ("xlog_recover_iodone") error 5 numblks 8 [ 5.336982] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337000] XFS (dm-1): metadata I/O error: block 0x4be3820 ("xlog_recover_iodone") error 5 numblks 16 [ 5.337013] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337039] XFS (dm-1): metadata I/O error: block 0x4c3dbf0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.337053] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337071] XFS (dm-1): metadata I/O error: block 0x4c48d80 ("xlog_recover_iodone") error 5 numblks 16 [ 5.337085] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337111] XFS (dm-1): metadata I/O error: block 0x4d88328 ("xlog_recover_iodone") error 5 numblks 8 [ 5.337125] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337143] XFS (dm-1): metadata I/O error: block 0x4e05ad8 ("xlog_recover_iodone") error 5 numblks 8 [ 5.337156] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337184] XFS (dm-1): metadata I/O error: block 0x5066bf0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.337198] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337216] XFS (dm-1): metadata I/O error: block 0x506a808 ("xlog_recover_iodone") error 5 numblks 8 [ 5.337229] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.337300] XFS (dm-1): metadata I/O error: block 0x8a618 ("xlog_recover_iodone") error 117 numblks 8 [ 5.337315] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023ada70 [ 5.348410] XFS (dm-1): log mount/recovery failed: error 117 [ 5.348491] XFS (dm-1): log mount failed dracut-initqueue[275]: mount: mount /dev/mapper/rhel_ibm--p730--06--lp1-root on /sysroot failed: Structure needs cleaning dracut-initqueue[275]: Warning: Failed to mount -t xfs -o ro,ro /dev/mapper/rhel_ibm--p730--06--lp1-root /sysroot dracut-initqueue[275]: Warning: *** An error occurred during the file system check. dracut-initqueue[275]: Warning: *** Dropping you to a shell; the system will try Also, never saw any of those in other architectures like x64, but started get those there in 3.9.0. Unsure if those are related. [ 3224.369782] ============================================================================= [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison overwritten [ 3224.370017] ----------------------------------------------------------------------------- [ 3224.370017] [ 3224.370017] INFO: 0xffff880031199fb8-0xffff880031199fb8. First byte 0x6a instead of 0x6b [ 3224.370017] INFO: Allocated in kmem_zone_alloc+0x67/0xf0 [xfs] age=355660 cpu=0 pid=1846 [ 3224.370017] __slab_alloc+0x474/0x4f2 [ 3224.370017] kmem_cache_alloc+0x192/0x1e0 [ 3224.370017] kmem_zone_alloc+0x67/0xf0 [xfs] [ 3224.370017] kmem_zone_zalloc+0x1d/0x50 [xfs] [ 3224.370017] xfs_efi_init+0x35/0xa0 [xfs] [ 3224.370017] xfs_trans_get_efi+0x21/0x40 [xfs] [ 3224.370017] xfs_bmap_finish+0x66/0x1a0 [xfs] [ 3224.370017] xfs_inactive+0x3b8/0x470 [xfs] [ 3224.370017] xfs_fs_evict_inode+0x84/0xc0 [xfs] [ 3224.370017] evict+0xa7/0x1a0 [ 3224.370017] iput+0x105/0x190 [ 3224.370017] do_unlinkat+0x1d9/0x230 [ 3224.370017] SyS_unlink+0x16/0x20 [ 3224.370017] system_call_fastpath+0x16/0x1b [ 3224.370017] INFO: Freed in xfs_efi_item_free+0x21/0x40 [xfs] age=352306 cpu=2 pid=260 [ 3224.370017] __slab_free+0x35/0x328 [ 3224.370017] kmem_cache_free+0x1d4/0x1f0 [ 3224.370017] xfs_efi_item_free+0x21/0x40 [xfs] [ 3224.370017] __xfs_efi_release+0x53/0x60 [xfs] [ 3224.370017] xfs_efi_release+0x2d/0x50 [xfs] [ 3224.370017] xfs_efd_item_committed+0x26/0x40 [xfs] [ 3224.370017] xfs_trans_committed_bulk+0x9a/0x2a0 [xfs] [ 3224.370017] xlog_cil_committed+0x3b/0xf0 [xfs] [ 3224.370017] xlog_state_do_callback+0x16d/0x2b0 [xfs] [ 3224.370017] xlog_state_done_syncing+0x76/0xa0 [xfs] [ 3224.370017] xlog_iodone+0x4b/0xa0 [xfs] [ 3224.370017] xfs_buf_iodone_work+0x5e/0xc0 [xfs] [ 3224.370017] process_one_work+0x175/0x400 [ 3224.370017] worker_thread+0x11b/0x370 [ 3224.370017] kthread+0xc0/0xd0 [ 3224.370017] ret_from_fork+0x7c/0xb0 [ 3224.370017] INFO: Slab 0xffffea0000c46600 objects=22 used=22 fp=0x (null) flags=0x10000000004080 [ 3224.370017] INFO: Object 0xffff880031199f48 @offset=8008 fp=0xffff88003119bbb8 [ 3224.370017] [ 3224.370017] Bytes b4 ffff880031199f38: 7e 3f 27 00 01 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ~?'.....ZZZZZZZZ [ 3224.370017] Object ffff880031199f48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199f58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199f68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199f78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199f88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199f98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199fa8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199fb8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199fc8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199fd8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199fe8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff880031199ff8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a008: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a018: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a028: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a038: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a048: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a058: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a068: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a078: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a088: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a098: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a0a8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a0b8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 3224.370017] Object ffff88003119a0c8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkkkkkkkkkkkkk. [ 3224.370017] Redzone ffff88003119a0d8: bb bb bb bb bb bb bb bb ........ [ 3224.370017] Padding ffff88003119a218: 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ [ 3224.370017] CPU: 3 PID: 5993 Comm: rm Tainted: GF B 3.9.0+ #1 [ 3224.370017] Hardware name: Dell Computer Corporation PowerEdge 2800/0NJ022, BIOS A07 04/25/2008 [ 3224.370017] ffff880031199f48 ffff88003723f9b8 ffffffff815f105e ffff88003723f9e8 [ 3224.370017] ffffffff8117266e ffff880031199fb9 ffff88003768e880 000000000000006b [ 3224.370017] ffff880031199f48 ffff88003723fa38 ffffffff81172802 ffff880031199fb8 [ 3224.370017] Call Trace: [ 3224.370017] [] dump_stack+0x19/0x1b [ 3224.370017] [] print_trailer+0xfe/0x160 [ 3224.370017] [] check_bytes_and_report+0xe2/0x120 [ 3224.370017] [] check_object+0x1cf/0x250 [ 3224.370017] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 3224.370017] [] alloc_debug_processing+0x67/0x109 [ 3224.370017] [] __slab_alloc+0x474/0x4f2 [ 3224.370017] [] ? xfs_bmap_del_extent+0x576/0xca0 [xfs] [ 3224.370017] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 3224.370017] [] kmem_cache_alloc+0x192/0x1e0 [ 3224.370017] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 3224.370017] [] kmem_zone_alloc+0x67/0xf0 [xfs] [ 3224.370017] [] kmem_zone_zalloc+0x1d/0x50 [xfs] [ 3224.370017] [] xfs_efi_init+0x35/0xa0 [xfs] [ 3224.370017] [] xfs_trans_get_efi+0x21/0x40 [xfs] [ 3224.370017] [] xfs_bmap_finish+0x66/0x1a0 [xfs] [ 3224.370017] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 3224.370017] [] xfs_itruncate_extents+0xf9/0x2c0 [xfs] [ 3224.370017] [] xfs_inactive+0x34d/0x470 [xfs] [ 3224.370017] [] xfs_fs_evict_inode+0x84/0xc0 [xfs] [ 3224.370017] [] evict+0xa7/0x1a0 [ 3224.370017] [] iput+0x105/0x190 [ 3224.370017] [] do_unlinkat+0x1d9/0x230 [ 3224.370017] [] SyS_unlinkat+0x1b/0x40 [ 3224.370017] [] system_call_fastpath+0x16/0x1b [ 3224.370017] FIX xfs_efi_item: Restoring 0xffff880031199fb8-0xffff880031199fb8=0x6b [ 3224.370017] [ 3224.370017] FIX xfs_efi_item: Marking all objects used CAI Qian From sgi-linux-xfs@m.gmane.org Mon May 6 03:14:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9FACD29DFA for ; Mon, 6 May 2013 03:14:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3B8B0AC003 for ; Mon, 6 May 2013 01:14:42 -0700 (PDT) X-ASG-Debug-ID: 1367828080-04bdf0752e93390001-w1Z2WR Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by cuda.sgi.com with ESMTP id w1cvRPdD7chBtPEs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 01:14:41 -0700 (PDT) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.3 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UZGZ9-0003rH-Uc for linux-xfs@oss.sgi.com; Mon, 06 May 2013 10:14:35 +0200 Received: from tc-gate1.pci.uni-heidelberg.de ([129.206.21.241]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 06 May 2013 10:14:35 +0200 Received: from bernd.schubert by tc-gate1.pci.uni-heidelberg.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 06 May 2013 10:14:35 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Bernd Schubert Subject: 3.9.0: general protection fault Date: Mon, 06 May 2013 10:14:22 +0200 X-ASG-Orig-Subj: 3.9.0: general protection fault Lines: 50 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: tc-gate1.pci.uni-heidelberg.de User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 In-Reply-To: X-Barracuda-Connect: plane.gmane.org[80.91.229.3] X-Barracuda-Start-Time: 1367828080 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130161 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- And anpther protection fault, this time with 3.9.0. Always happens on one of the servers. Its ECC memory, so I don't suspect a faulty memory bank. Going to fsck now- > [303340.514052] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC > [303340.517913] Modules linked in: fhgfs(O) fhgfs_client_opentk(O) nfsd xfs ext4 mbcache jbd2 crc16 sg mlx4_ib mlx4_core ib_umad rdma_ucm rdma_cm iw_cm ib_addr ib_uverbs ib_ipoib ib_cm ib_sa loop arcmsr dm_mod md_mod evdev tpm_tis tpm tpm_bios psmouse serio_raw shpchp pcspkr pci_hotplug amd64_edac_mod edac_core edac_mce_amd k8temp ib_mthca ib_mad ib_core processor ehci_pci thermal_sys button i2c_nforce2 i2c_core fuse btrfs sd_mod crc_t10dif raid6_pq xor zlib_deflate crc32c libcrc32c ata_generic pata_amd sata_nv ohci_hcd libata e1000 ehci_hcd scsi_mod floppy > [303340.532909] CPU 1 > [303340.532909] Pid: 256, comm: kworker/1:1H Tainted: G O 3.9.0-debug+ #10 Supermicro H8DCE/H8DCE > [303340.532909] RIP: 0010:[] [] __list_del_entry+0x76/0xd4 > [303340.532909] RSP: 0018:ffff8801f502dbb8 EFLAGS: 00010a83 > [303340.532909] RAX: 6b6b6b6b6b6b6b6b RBX: ffff880099159c18 RCX: dead000000200200 > [303340.532909] RDX: 6b6b6b6b6b6b6b6b RSI: ffff880099159c18 RDI: ffff880099159c18 > [303340.532909] RBP: ffff8801f502dbb8 R08: ffff8801a2c1de08 R09: 0000000000000000 > [303340.532909] R10: 0000000000000008 R11: ffffffff81608e11 R12: ffff8800b65ddf00 > [303340.532909] R13: 0000000000000001 R14: 0000000000000001 R15: ffff8800b65ddf00 > [303340.532909] FS: 00007fcac7da5700(0000) GS:ffff8801fe800000(0000) knlGS:0000000000000000 > [303340.532909] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b > [303340.532909] CR2: ffffffffff600400 CR3: 00000000ae02e000 CR4: 00000000000007e0 > [303340.532909] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > [303340.532909] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > [303340.532909] Process kworker/1:1H (pid: 256, threadinfo ffff8801f502c000, task ffff8801f5029480) > [303340.532909] Stack: > [303340.532909] ffff8801f502dbd8 ffffffff812d4643 ffff8801f502dc28 ffff880099159c18 > [303340.532909] ffff8801f502dbf8 ffffffffa053876c ffff880099159c18 ffff8801f502dc78 > [303340.532909] ffff8801f502dc58 ffffffffa053883e ffff8800b65ddf58 00000008f502dc70 > [303340.532909] Call Trace: > [303340.532909] [] list_del+0x11/0x33 > [303340.532909] [] xfs_ail_delete+0x24/0x3a [xfs] > [303340.532909] [] xfs_trans_ail_delete_bulk+0xbc/0x149 [xfs] > [303340.532909] [] xfs_iflush_done+0x121/0x1be [xfs] > [303340.532909] [] ? xfs_iflush_done+0x14/0x1be [xfs] > [303340.532909] [] xfs_buf_do_callbacks+0x39/0x4c [xfs] > [303340.532909] [] xfs_buf_iodone_callbacks+0x2bd/0x2ee [xfs] > [303340.532909] [] xfs_buf_iodone_work+0x46/0x76 [xfs] > [303340.532909] [] process_one_work+0x2ff/0x4f5 > [303340.532909] [] ? process_one_work+0x245/0x4f5 > [303340.532909] [] ? worker_thread+0x56/0x2d4 > [303340.532909] [] worker_thread+0x213/0x2d4 > [303340.532909] [] ? busy_worker_rebind_fn+0x92/0x92 > [303340.532909] [] kthread+0xe1/0xe9 > [303340.532909] [] ? _raw_spin_unlock_irq+0x30/0x4e > [303340.532909] [] ? __init_kthread_worker+0x6b/0x6b > [303340.532909] [] ret_from_fork+0x7c/0xb0 > [303340.532909] [] ? __init_kthread_worker+0x6b/0x6b > [303340.532909] Code: de 48 39 c8 75 25 49 89 c8 48 89 f9 48 c7 c2 28 6c 7f 81 be 38 00 00 00 48 c7 c7 72 66 7f 81 b8 00 00 00 00 e8 18 22 d8 ff eb 5c <4c> 8b 00 4c 39 c7 74 22 48 89 f9 48 c7 c2 60 6c 7f 81 be 3b 00 > [303340.532909] RIP [] __list_del_entry+0x76/0xd4 > [303340.532909] RSP > [303340.848041] ---[ end trace 0d0b800e14608360 ]--- From dan.carpenter@oracle.com Mon May 6 04:11:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9AE8429DF8 for ; Mon, 6 May 2013 04:11:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 27234AC002 for ; Mon, 6 May 2013 02:11:31 -0700 (PDT) X-ASG-Debug-ID: 1367831486-04cbb07aba951c0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id vN0nBgRgX16vJ89g (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 02:11:27 -0700 (PDT) X-Barracuda-Envelope-From: dan.carpenter@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r469BPtA027071 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 6 May 2013 09:11:26 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r469BOfD004956 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 6 May 2013 09:11:25 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r469BOeV004951; Mon, 6 May 2013 09:11:24 GMT Received: from elgon.mountain (/197.237.137.111) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 06 May 2013 02:11:24 -0700 Date: Mon, 6 May 2013 12:11:16 +0300 From: Dan Carpenter To: dchinner@redhat.com Cc: xfs@oss.sgi.com Subject: re: xfs: add buffer types to directory and attribute buffers Message-ID: <20130506091116.GA2129@elgon.mountain> X-ASG-Orig-Subj: re: xfs: add buffer types to directory and attribute buffers MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367831487 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130165 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Hello Dave Chinner, The patch d75afeb3d302: "xfs: add buffer types to directory and attribute buffers" from Apr 3, 2013, leads to the following Smatch warning: "fs/xfs/xfs_log_recover.c:2042 xlog_recovery_validate_buf_type() warn: always true condition '(magicda != 1480675917) => (0-u16max != 1480675917)'" fs/xfs/xfs_log_recover.c 2039 case XFS_BLFT_ATTR_RMT_BUF: 2040 if (!xfs_sb_version_hascrc(&mp->m_sb)) 2041 break; 2042 if (magicda != XFS_ATTR3_RMT_MAGIC) { ^^^^^^^ This is an unsigned short so it can never be equal to 0x5841524d. Was "magic32" intended here? 2043 xfs_warn(mp, "Bad attr remote magic!"); 2044 ASSERT(0); 2045 break; 2046 } 2047 bp->b_ops = &xfs_attr3_rmt_buf_ops; 2048 break; regards, dan carpenter From jeff.liu@oracle.com Mon May 6 04:27:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C175829DF8 for ; Mon, 6 May 2013 04:27:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id AE17330405F for ; Mon, 6 May 2013 02:27:35 -0700 (PDT) X-ASG-Debug-ID: 1367832454-04cbb07aba95e90001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id VC5oAZYw9NXXQ8dN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 02:27:34 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r469RXTU009322 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 6 May 2013 09:27:33 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r469RVTd015752 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 6 May 2013 09:27:32 GMT Received: from abhmt106.oracle.com (abhmt106.oracle.com [141.146.116.58]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r469RV2f022542; Mon, 6 May 2013 09:27:31 GMT Received: from [192.168.1.104] (/114.248.195.237) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 06 May 2013 02:27:31 -0700 Message-ID: <5187777D.7010802@oracle.com> Date: Mon, 06 May 2013 17:27:25 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: Dan Carpenter CC: dchinner@redhat.com, xfs@oss.sgi.com Subject: Re: xfs: add buffer types to directory and attribute buffers References: <20130506091116.GA2129@elgon.mountain> X-ASG-Orig-Subj: Re: xfs: add buffer types to directory and attribute buffers In-Reply-To: <20130506091116.GA2129@elgon.mountain> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1367832454 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain On 05/06/2013 05:11 PM, Dan Carpenter wrote: > Hello Dave Chinner, > > The patch d75afeb3d302: "xfs: add buffer types to directory and > attribute buffers" from Apr 3, 2013, leads to the following Smatch warning: > "fs/xfs/xfs_log_recover.c:2042 xlog_recovery_validate_buf_type() > warn: always true condition '(magicda != 1480675917) => (0-u16max != 1480675917)'" > > fs/xfs/xfs_log_recover.c > 2039 case XFS_BLFT_ATTR_RMT_BUF: > 2040 if (!xfs_sb_version_hascrc(&mp->m_sb)) > 2041 break; > 2042 if (magicda != XFS_ATTR3_RMT_MAGIC) { > ^^^^^^^ > This is an unsigned short so it can never be equal to 0x5841524d. Was > "magic32" intended here? You are right, but this issue has been fixed by: commit cab09a81fbefcb21db5213a84461d421946f6eb8 Author: Dave Chinner Date: Tue Apr 30 21:39:36 2013 +1000 xfs: fix da node magic number mismatches It has been discussed on following thread before: http://oss.sgi.com/archives/xfs/2013-04/msg00645.html Thanks, -Jeff > > 2043 xfs_warn(mp, "Bad attr remote magic!"); > 2044 ASSERT(0); > 2045 break; > 2046 } > 2047 bp->b_ops = &xfs_attr3_rmt_buf_ops; > 2048 break; > > regards, > dan carpenter > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From ebook.3146@envfrm.rsys2.com Mon May 6 04:28:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=HTML_IMAGE_RATIO_04, HTML_MESSAGE,MIME_HTML_ONLY,T_DKIM_INVALID,T_KHOP_FOREIGN_CLICK, T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 76F9829DF8 for ; Mon, 6 May 2013 04:28:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id C910EAC004 for ; Mon, 6 May 2013 02:28:29 -0700 (PDT) X-ASG-Debug-ID: 1367832506-04cb6c756b97690001-NocioJ Received: from omp.e.ebookers.com (omp.e.ebookers.com [12.130.139.169]) by cuda.sgi.com with ESMTP id CLU2P1crvOQlBwAB for ; Mon, 06 May 2013 02:28:26 -0700 (PDT) X-Barracuda-Envelope-From: ebook.3146@envfrm.rsys2.com X-Barracuda-Apparent-Source-IP: 12.130.139.169 X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=ebookers2; d=e.ebookers.fr; h=MIME-Version:Content-Type:Content-Transfer-Encoding:Date:To:From:Reply-To:Subject:Message-ID; i=ebookers@e.ebookers.fr; bh=NVaz3FS8+b70XAqF3DOgYLi3H5o=; b=KATprBYGEnnGzEbH7Kx1i2uv7LVJZtL9MfqnFebF4SmH15jCjOLGeNEIIWg7yKMXVncqqeMQDESE ufJWZHyTIybmfEmXfepMlNjf7s0DUIZ5kvIK5EsDeVTTHFPQ6V5lU6sh7okUjaHWEOsqJgSFBtOl X/uhDEgp0SgZYNv1K84= X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] X-Barracuda-IPDD: Level1 [envfrm.rsys2.com/12.130.139.169] DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=ebookers2; d=e.ebookers.fr; b=F3sZRPG5tw/PjqOcS2bCrJhPqAFF5EnolYt6yj/mk/efstw27Zm9r0Q9Umute98DFxw0BowbtkFG cXEMbk5TR/RN8MUOJwopmCLN6aPTQWYdxxGcPB5V/hpSkrM9hipXiDxSBp4hm1Zby12Ja3XkMiPK sy8q2g9xSBaaMjLKkkg=; Received: by omp.e.ebookers.com id hgtrrk161agk for ; Mon, 6 May 2013 02:28:21 -0700 (envelope-from ) MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Date: Mon, 6 May 2013 02:28:21 -0700 To: xfs@oss.sgi.com From: "ebookers" Reply-To: "ebookers" Subject: =?UTF-8?B?LCB2b2ljaSB2b3RyZSBjb2RlIHByb21vIGV4Y2x1c2lmISBSw6lz?= =?UTF-8?B?ZXJ2ZXogbWFpbnRlbmFudCE=?= X-sgxh1: zfMkxhkkQknpQJhu X-ASG-Orig-Subj: =?UTF-8?B?LCB2b2ljaSB2b3RyZSBjb2RlIHByb21vIGV4Y2x1c2lmISBSw6lz?= =?UTF-8?B?ZXJ2ZXogbWFpbnRlbmFudCE=?= X-rext: 4.interact2.EhhaMtusE4NUN8wdDouVxiXWiqk_jciY6W5MZsAWU1E X-cid: ebook.100149013 X-pviq: 000128-000999-0ebook-100149-0ebook Message-ID: <0.0.1A.5DC.1CE4A3C0D00D706.0@omp.e.ebookers.com> X-Barracuda-Connect: omp.e.ebookers.com[12.130.139.169] X-Barracuda-Start-Time: 1367832506 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.17 X-Barracuda-Spam-Status: No, SCORE=0.17 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_04, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.17 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message <=21DOCTYPE html PUBLIC =22-//W3C//DTD XHTML 1=2E0 Transitional//EN=22 =22h= ttp://www=2Ew3=2Eorg/TR/xhtml1/DTD/xhtml1-transitional=2Edtd=22> ebookers=2Efr <=21--TITLE TEXT FOR FACEBOOK SHARE LINK-->
=
<= /td>
3D=22Google
 
 
3D=22Twitter
 
Si vous ne visualisez pas correctement cet e-mail, cliquez ici
<= /td>
=3D=22Travel
=20
=
= Accueil
Vols
Hôtels
V= oitures
ePack voyage
Séjours
Promos
3D=22Great
3D=22Weekend
3D=22London=22 3D=22Parijs=22 3D=22Barcelona=22 3D=22Rome=22
3D=22Leaderboard=22
<= /td>
PLUS D&= quot;AUBAINES INCROYABLES
 
SUIVEZ-= NOUS
3D=22Plus
 
3D=22Plus
 
3D=22Plus
 
3D=22Plus
 
3D=22YouTube=22 3D=22Blog=22 3D=22Facebook=22 3D=22Twitter=22
Plus de vols
 
<= font style=3D=22display: block; font-family: Arial; font-size: 10px; color:= =23FFF; text-align:center; text-decoration:underline; line-height: 12px; f= ont-weight:normal;=22>Plus d'h=C3=B4tels
 
<= font style=3D=22display: block; font-family: Arial; font-size: 10px; color:= =23FFF; text-align:center; text-decoration:underline; line-height: 12px; f= ont-weight:normal;=22>Plus de s=C3=A9jours
 
Plus de locations
 
<= /td>

ebookers=2Efr =7C Se d=C3=A9sinscrire =7C Mettre mon compte =C3=A0 jour

 
Besion d'aide pour r= =C3=A9server ? Applez-nous 0892 23 23 16
<= /td>

R=C3=A9servez votre h=C3=B4tel parmi la s=C3=A9lection= propos=C3=A9e (hors h=C3=B4tels de chaine) du 06 au 08 Mai 2013 pour un s= =C3=A9jour jusqu'au 31 decembre 2013 sur Ebookers=2Efr et b=C3=A9n=C3=A9fic= iez de 15% de r=C3=A9duction imm=C3=A9diate gr=C3=A2ce au code promotionnel= =2E Elle ne s'applique que sur le prix hors taxes et frais=2E Cette offre e= st limit=C3=A9e =C3=A0 une r=C3=A9duction par chambre et =C3=A0 un seul cod= e par r=C3=A9servation d=E2=80=99h=C3=B4tel=2E Cette offre ne s=E2=80=99app= lique pas aux r=C3=A9servations de vol+h=C3=B4tel et elle n=E2=80=99est pas= cumulable avec d=E2=80=99autres codes promo=2E La r=C3=A9duction ne peut = =C3=AAtre utilis=C3=A9e sous forme de remise d=E2=80=99esp=C3=A8ces ou tout= e autre forme d=E2=80=99offres promotionnelles Le code promotionnel doit = =C3=AAtre utilis=C3=A9 au moment de la r=C3=A9servation, le cas =C3=A9ch=C3= =A9ant il ne pourra faire l=E2=80=99objet d=E2=80=99aucun remboursement=2E = Toute tentative de fraude sera poursuivie en justice=2E Non valable si inte= rdite, tax=C3=A9e ou restrictive=2E Ebookers=2Efr se r=C3=A9serve le droit = de modifier ou de limiter cette promotion =C3=A0 tout moment=2E

<= /td>
 

3D=22Trust<= /td>
<= /td>


From bernd.schubert@itwm.fraunhofer.de Mon May 6 04:40:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.9 required=5.0 tests=MISSING_HEADERS autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2E93229DF8 for ; Mon, 6 May 2013 04:40:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id BB703AC006 for ; Mon, 6 May 2013 02:40:27 -0700 (PDT) X-ASG-Debug-ID: 1367833225-04bdf0753197000001-w1Z2WR Received: from mailgw1.uni-kl.de (mailgw1.uni-kl.de [131.246.120.220]) by cuda.sgi.com with ESMTP id MdDOVsvSlQuwDZqk (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 02:40:26 -0700 (PDT) X-Barracuda-Envelope-From: bernd.schubert@itwm.fraunhofer.de X-Barracuda-Apparent-Source-IP: 131.246.120.220 Received: from itwm2.itwm.fhg.de (itwm2.itwm.fhg.de [131.246.191.3]) by mailgw1.uni-kl.de (8.14.3/8.14.3/Debian-9.4) with ESMTP id r469eObj023381 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NOT) for ; Mon, 6 May 2013 11:40:24 +0200 Received: from mail2.itwm.fhg.de ([131.246.191.79]:42122) by itwm2.itwm.fhg.de with esmtps (TLSv1:DES-CBC3-SHA:168) (/C=DE/ST=Rheinland-Pfalz/L=Kaiserslautern/O=Fraunhofer ITWM/OU=SLG/CN=mail2.itwm.fhg.de)(verified=1) (Exim 4.74 #1) id 1UZHuC-0002Pl-BL for linux-xfs@oss.sgi.com; Mon, 06 May 2013 11:40:24 +0200 Message-ID: <51877A88.6000009@itwm.fraunhofer.de> Date: Mon, 06 May 2013 11:40:24 +0200 From: Bernd Schubert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 CC: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-ITWM-CharSet: ISO-8859-1 X-ITWM-Scanned-By: mail2.itwm.fhg.de X-Barracuda-Connect: mailgw1.uni-kl.de[131.246.120.220] X-Barracuda-Start-Time: 1367833226 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_HEADERS X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header On 05/06/2013 10:14 AM, Bernd Schubert wrote: > And anpther protection fault, this time with 3.9.0. Always happens on > one of the servers. Its ECC memory, so I don't suspect a faulty memory > bank. Going to fsck now- xfs_repair didn't find anything. From eguan@redhat.com Mon May 6 04:42:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5A42929DF8 for ; Mon, 6 May 2013 04:42:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E6476AC001 for ; Mon, 6 May 2013 02:42:49 -0700 (PDT) X-ASG-Debug-ID: 1367833369-04bdf0753097230001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id UiAFfwmjxEoUuX30 for ; Mon, 06 May 2013 02:42:49 -0700 (PDT) X-Barracuda-Envelope-From: eguan@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r469gmTE010735 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 6 May 2013 05:42:48 -0400 Received: from localhost (dhcp-13-36.nay.redhat.com [10.66.13.36]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r469gknU009899; Mon, 6 May 2013 05:42:47 -0400 From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH v3] xfstests generic 312: test fallocate(2) ENOSPC when file size is greater than 4G Date: Mon, 6 May 2013 17:42:35 +0800 X-ASG-Orig-Subj: [PATCH v3] xfstests generic 312: test fallocate(2) ENOSPC when file size is greater than 4G Message-Id: <1367833355-14473-1-git-send-email-eguan@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367833369 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G Regression test for commit 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() Signed-off-by: Eryu Guan --- v3: rebase on top of master v2: Check for $SCRATCH_DEV size, _notrun if it's smaller than 5G tests/generic/312 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/generic/312.out | 2 ++ tests/generic/group | 1 + 3 files changed, 75 insertions(+) create mode 100644 tests/generic/312 create mode 100644 tests/generic/312.out diff --git a/tests/generic/312 b/tests/generic/312 new file mode 100644 index 0000000..eaec43c --- /dev/null +++ b/tests/generic/312 @@ -0,0 +1,72 @@ +#! /bin/bash +# FS QA Test No. 312 +# +# ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G +# +# Regression test for commit +# 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs generic +_supported_os Linux +_require_xfs_io_falloc +_require_scratch + +# 5G in byte +fssize=$((2**30 * 5)) +required_blocks=$(($fssize / 1024)) +dev_blocks=$(grep $(basename $(readlink -f $SCRATCH_DEV)) /proc/partitions | $AWK_PROG '{print $3}') +if [ $required_blocks -gt $dev_blocks ];then + _notrun "this test requires \$SCRATCH_DEV has ${fssize}B space" +fi + +rm -f $seqres.full +_scratch_mkfs_sized $fssize >>$seqres.full 2>&1 +_scratch_mount >>$seqres.full 2>&1 + +echo "Silence is golden" + +# fallocate(2) a 6G(> 4G) file on a 5G fs +$XFS_IO_PROG -f -c "falloc 0 6g" $SCRATCH_MNT/testfile.$seq >>$seqres.full 2>&1 + +_scratch_unmount +_check_scratch_fs +status=0 +exit diff --git a/tests/generic/312.out b/tests/generic/312.out new file mode 100644 index 0000000..6e72aa9 --- /dev/null +++ b/tests/generic/312.out @@ -0,0 +1,2 @@ +QA output created by 312 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index eb52833..cb15afe 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -114,3 +114,4 @@ 309 auto quick 310 auto 311 auto metadata log +312 auto quick prealloc enospc -- 1.8.2.1 From markus@trippelsdorf.de Mon May 6 06:27:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FROM_12LTRDOM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D60FA29DF8 for ; Mon, 6 May 2013 06:27:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 97FED304051 for ; Mon, 6 May 2013 04:27:22 -0700 (PDT) X-ASG-Debug-ID: 1367839639-04bdf075319c530001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id EWqjOQmTqt973Qdu (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 04:27:20 -0700 (PDT) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:subject:message-id:mime-version:content-type; s= beta; bh=PkQ4Ch1W2EzWRSe7/kzCE1Xoh4k+WcF2j72pfaRUbP4=; b=N87K4iO c6lUNhAemIzRrtgEfzK1DrzLWi/SyBn7q6MVB7N4aSJ1+8cCSC/ZXdGyZliMEEF1 RslWjB09nZQFQOoGt0KxEnUoQTkwBQ7lmCOYxGo4MMuFqmjz66/TuCcLDRs0AsZc k5DVxhMQqlkSazYztuNmxufsA8+qmIxkF1lg= Received: (qmail 8865 invoked from network); 6 May 2013 13:27:18 +0200 Received: from unknown (HELO x4) (ud10?360p3@91.64.96.185) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 6 May 2013 13:27:18 +0200 Date: Mon, 6 May 2013 13:27:17 +0200 From: Markus Trippelsdorf To: xfs@oss.sgi.com Subject: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130506112717.GA502@x4> X-ASG-Orig-Subj: Internal error xfs_sb_read_verify at line 726 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1367839640 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130174 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Today I accidentally tried to mount my backup disk at /dev/sdc instead of /dev/sdc1 and this is what happened: ... EXT4-fs (sdc): VFS: Can't find ext4 filesystem FAT-fs (sdc): bogus number of reserved sectors FAT-fs (sdc): Can't find a valid FAT filesystem FAT-fs (sdc): bogus number of reserved sectors FAT-fs (sdc): Can't find a valid FAT filesystem ISOFS: Unable to identify CD-ROM format. XFS (sdc): bad magic number ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd CPU: 3 PID: 68 Comm: kworker/3:1H Not tainted 3.9.0-10518-gd7ab730-dirty #440 Hardware name: System manufacturer System Product Name/M4A78T-E, BIOS 3503 04/13/2011 Workqueue: xfslogd xfs_buf_iodone_work ffffffff81537e9c ffffffff811a0416 000002d600000000 ffffffff8119e5cd ffff8800db2e7500 0000000000000016 ffff8801c0242800 ffff88021fd94f00 ffffffff811e93d5 ffffffff8119e5cd ffff8802168ed820 ffff8800db2e75a0 Call Trace: [] ? dump_stack+0xc/0x15 [] ? xfs_corruption_error+0x56/0x80 [] ? xfs_buf_iodone_work+0x6d/0xa0 [] ? xfs_sb_read_verify+0xf5/0x120 [] ? xfs_buf_iodone_work+0x6d/0xa0 [] ? xfs_buf_iodone_work+0x6d/0xa0 [] ? process_one_work+0x13c/0x3c0 [] ? worker_thread+0x10d/0x3a0 [] ? process_one_work+0x3c0/0x3c0 [] ? kthread+0xaf/0xc0 [] ? __kthread_parkme+0x80/0x80 [] ? ret_from_fork+0x7c/0xb0 [] ? __kthread_parkme+0x80/0x80 XFS (sdc): Corruption detected. Unmount and run xfs_repair XFS (sdc): SB validate failed with error 22. XFS (sdc1): Mounting Filesystem XFS (sdc1): Ending clean mount Seems a bit overkill to me ;-). -- Markus From filippo.stenico@gmail.com Mon May 6 07:07:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1F4D429DF8 for ; Mon, 6 May 2013 07:07:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0FD578F8035 for ; Mon, 6 May 2013 05:07:35 -0700 (PDT) X-ASG-Debug-ID: 1367842052-04cb6c75699e8c0001-NocioJ Received: from mail-lb0-f175.google.com (mail-lb0-f175.google.com [209.85.217.175]) by cuda.sgi.com with ESMTP id cycqHgQ2l7C3QvGC (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 May 2013 05:07:33 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.217.175 X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.175] Received: by mail-lb0-f175.google.com with SMTP id w20so3263267lbh.6 for ; Mon, 06 May 2013 05:07:32 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.175] X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.175] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:from:date:message-id:subject:to :content-type; bh=jgFxzc0Mk4tXbTNVkem676o8g3Zw9hq//j/3sn+Njlc=; b=XWCWFUYd69Jub+B753p+K/9I3X/vBBD9FYpnIgneG4GNBp/OYNC5nynLE3uhcTzi3E /NRCXno+0V+P3MKXIiyPlAgXThc8zO6Y7gufnV9Kh3tGMY4lPEMxh9r1mIDQjt569iiP xxgAb1Mso19vyEKflMST85QyLEbUAtBzxeF28ZKTgQWfiu/RYIO6NZHx7kFac096A1HH ZzV3hCsYRkANVav3RztBw0ku8lKYnHEELARqHEA0Eu60HGtIEE1Mnn58rUrmgVZ9jw5c SDI/hzpcecwKzR2mbMeh9n2ahhu5btSlB4sfxNw8GHR8Vsgkw71Bfcwl837rz+vDUCzo 9A4g== X-Received: by 10.112.167.168 with SMTP id zp8mr7811632lbb.58.1367842052407; Mon, 06 May 2013 05:07:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Mon, 6 May 2013 05:06:52 -0700 (PDT) From: Filippo Stenico Date: Mon, 6 May 2013 14:06:52 +0200 Message-ID: Subject: Xfs_repair segfaults. To: xfs@oss.sgi.com X-ASG-Orig-Subj: Xfs_repair segfaults. Content-Type: multipart/alternative; boundary=001a11c2a884a4858704dc0b8bf2 X-Barracuda-Connect: mail-lb0-f175.google.com[209.85.217.175] X-Barracuda-Start-Time: 1367842053 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130174 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c2a884a4858704dc0b8bf2 Content-Type: text/plain; charset=ISO-8859-1 Hello, I've had an issue on a raid5 volume (2 disks failing at same time, and buggy NAS firmware trying hard to sync then stop for I/O error then retryes to sync leading (!?) to lost raid and an xfs data corruption. I've recreated raid, mounted the xfs filesystem, copied about 6TB of data out of 8TB, the rest of data being unreachable with "structrure needs cleaning" error. Thus I tried to unmount/mount and still got same error, then dumped metadata and tried various xfs_repair with different options but it always reaches a same point where it always segfaults. If someone is interested of investigating what's going on here and helping me recover more data I would be happy to send in in more details.... Cheers -- F --001a11c2a884a4858704dc0b8bf2 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,
I've had an issue on a raid5 volume (2 disks failing at same= time, and buggy NAS firmware trying hard to sync then stop for I/O error t= hen retryes to sync leading (!?) to lost raid and an xfs data corruption.
I've recreated raid, mounted the xfs filesystem, copied about 6TB o= f data out of 8TB, the rest of data being unreachable with "structrure= needs cleaning" error.
Thus I tried to unmount/mount and still got= same error, then dumped metadata and tried various xfs_repair with differe= nt options but it always reaches a same point where it always segfaults.
If someone is interested of investigating what's going on here and = helping me recover more data I would be happy to send in in more details...= .

Cheers

--
F --001a11c2a884a4858704dc0b8bf2-- From david@fromorbit.com Mon May 6 07:28:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6264429DF8 for ; Mon, 6 May 2013 07:28:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E4B9FAC004 for ; Mon, 6 May 2013 05:28:49 -0700 (PDT) X-ASG-Debug-ID: 1367843327-04cbb07ab79e6a0001-w1Z2WR Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id IUbs7Zp1lCxl4BKU for ; Mon, 06 May 2013 05:28:47 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AukSAIqhh1F5LGwY/2dsb2JhbAA2BBaDBzeCU7cOhRwEAYEDF3SCHwEBBTocIxAIAxgJChsPBSUDIROICw0zvnkWjVEtgR0HZIJvA5ctkTWDAB8q Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail06.adl6.internode.on.net with ESMTP; 06 May 2013 21:58:46 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZKX6-0003pi-Oc; Mon, 06 May 2013 22:28:44 +1000 Date: Mon, 6 May 2013 22:28:44 +1000 From: Dave Chinner To: Bernd Schubert Cc: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault Message-ID: <20130506122844.GL19978@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1367843327 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130174 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: > And anpther protection fault, this time with 3.9.0. Always happens > on one of the servers. Its ECC memory, so I don't suspect a faulty > memory bank. Going to fsck now- http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > > >[303340.514052] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC > >[303340.517913] Modules linked in: fhgfs(O) fhgfs_client_opentk(O) Kernel tainted with out of tree modules. Can you reproduce the problem with them? Cheers, Dave. -- Dave Chinner david@fromorbit.com From bernd.schubert@itwm.fraunhofer.de Mon May 6 07:47:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 33E0B29DF8 for ; Mon, 6 May 2013 07:47:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 223948F8033 for ; Mon, 6 May 2013 05:47:52 -0700 (PDT) X-ASG-Debug-ID: 1367844453-04cb6c756aa0b50001-w1Z2WR Received: from mailgw1.uni-kl.de (mailgw1.uni-kl.de [131.246.120.220]) by cuda.sgi.com with ESMTP id j6vzHhObFzGeD9JE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 05:47:33 -0700 (PDT) X-Barracuda-Envelope-From: bernd.schubert@itwm.fraunhofer.de X-Barracuda-Apparent-Source-IP: 131.246.120.220 Received: from itwm2.itwm.fhg.de (itwm2.itwm.fhg.de [131.246.191.3]) by mailgw1.uni-kl.de (8.14.3/8.14.3/Debian-9.4) with ESMTP id r46ClVlp026414 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NOT) for ; Mon, 6 May 2013 14:47:31 +0200 Received: from mail2.itwm.fhg.de ([131.246.191.79]:43859) by itwm2.itwm.fhg.de with esmtps (TLSv1:DES-CBC3-SHA:168) (/C=DE/ST=Rheinland-Pfalz/L=Kaiserslautern/O=Fraunhofer ITWM/OU=SLG/CN=mail2.itwm.fhg.de)(verified=1) (Exim 4.74 #1) id 1UZKpH-0003I7-F3; Mon, 06 May 2013 14:47:31 +0200 Message-ID: <5187A663.707@itwm.fraunhofer.de> Date: Mon, 06 May 2013 14:47:31 +0200 From: Bernd Schubert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: <20130506122844.GL19978@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-ITWM-CharSet: ISO-8859-1 X-ITWM-Scanned-By: mail2.itwm.fhg.de X-Barracuda-Connect: mailgw1.uni-kl.de[131.246.120.220] X-Barracuda-Start-Time: 1367844453 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130176 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On 05/06/2013 02:28 PM, Dave Chinner wrote: > On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: >> And anpther protection fault, this time with 3.9.0. Always happens >> on one of the servers. Its ECC memory, so I don't suspect a faulty >> memory bank. Going to fsck now- > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F Isn't that a bit overhead? And I can't provide /proc/meminfo and others, as this issue causes a kernel panic a few traces later. > >> >>> [303340.514052] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC >>> [303340.517913] Modules linked in: fhgfs(O) fhgfs_client_opentk(O) > > Kernel tainted with out of tree modules. Can you reproduce the > problem with them? The modules are unused, as this is the server side. I disabled client packages now and will re-run. But I really think that we should look for memory/list corruption outside of fhgfs. Also very unlikely that always only xfs would suffer, as there is also running ext4 for fhgfs meta data. Also, it took from Friday evening till this morning to run into the crash, so the next occurance might take some time. And I think tracing xfs is out of question, as I need the disk space to store data (the client side is running our stress test suite). Cheers, Bernd From sandeen@sandeen.net Mon May 6 09:31:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7988F29DF8 for ; Mon, 6 May 2013 09:31:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 595E6304039 for ; Mon, 6 May 2013 07:31:04 -0700 (PDT) X-ASG-Debug-ID: 1367850662-04cbb07ab8a5150001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id JoOUF1GwMm3SHNqE for ; Mon, 06 May 2013 07:31:03 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 5F02F63BEEBD; Mon, 6 May 2013 09:31:02 -0500 (CDT) Message-ID: <5187BEA5.4040107@sandeen.net> Date: Mon, 06 May 2013 09:31:01 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: CAI Qian CC: xfs@oss.sgi.com Subject: Re: 3.9.0: XFS rootfs corruption References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption In-Reply-To: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367850663 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130176 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 2:50 AM, CAI Qian wrote: > Saw this on several different Power7 systems after kdump reboot. It has xfsprogs-3.1.10 > and rootfs in on LVM. Never saw one of those in any of the RC releases. > > ] Reached target Basic System. > [ 4.919316] bio: create slab at 1 > [ 5.078616] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled > [ 5.081925] XFS (dm-1): Mounting Filesystem > [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) > [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 of file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc here: /* * Need to have seen all the entries and all the bestfree slots. */ XFS_WANT_CORRUPTED_RETURN(freeseen == 7); I hope Dave knows offhand what this might mean. :) Could you get a metadump of the filesystem in question? > [ 5.333575] > [ 5.333600] CPU: 2 PID: 372 Comm: mount Tainted: G W 3.9.0+ #1 > [ 5.333609] Call Trace: > [ 5.333619] [c0000003e7e02b40] [c000000000014e48] .show_stack+0x78/0x1e0 (unreliable) > [ 5.333635] [c0000003e7e02c10] [c00000000074be70] .dump_stack+0x28/0x3c > [ 5.333690] [c0000003e7e02c80] [d00000000234ff14] .xfs_error_report+0x54/0x70 [xfs] > [ 5.333747] [c0000003e7e02cf0] [d000000002396e84] .__xfs_dir3_data_check+0x784/0x820 [xfs] > [ 5.333805] [c0000003e7e02df0] [d000000002396fdc] .xfs_dir3_data_verify+0xbc/0xe0 [xfs] > [ 5.333871] [c0000003e7e02e70] [d00000000239703c] .xfs_dir3_data_write_verify+0x3c/0x1c0 [xfs] > [ 5.333936] [c0000003e7e02f20] [d00000000234db94] ._xfs_buf_ioapply+0xd4/0x400 [xfs] > [ 5.334003] [c0000003e7e03060] [d00000000234dfcc] .xfs_buf_iorequest+0x4c/0xe0 [xfs] > [ 5.334055] [c0000003e7e030f0] [d00000000234e0c4] .xfs_bdstrat_cb+0x64/0x120 [xfs] > [ 5.334117] [c0000003e7e03180] [d00000000234e284] .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] > [ 5.334180] [c0000003e7e03270] [d00000000234f318] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] > [ 5.334237] [c0000003e7e03310] [d0000000023b1904] .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] > [ 5.334305] [c0000003e7e033d0] [d0000000023b1c4c] .xlog_recover_process_data+0x26c/0x340 [xfs] > [ 5.334372] [c0000003e7e034a0] [d0000000023b2108] .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] > [ 5.334438] [c0000003e7e03610] [d0000000023b2360] .xlog_do_log_recovery+0xa0/0x120 [xfs] > [ 5.334503] [c0000003e7e036b0] [d0000000023b2400] .xlog_do_recover+0x20/0x150 [xfs] > [ 5.334570] [c0000003e7e03740] [d0000000023b25c4] .xlog_recover+0x94/0x100 [xfs] > [ 5.334647] [c0000003e7e037d0] [d0000000023bcf84] .xfs_log_mount+0x144/0x1e0 [xfs] > [ 5.334705] [c0000003e7e03870] [d0000000023b6098] .xfs_mountfs+0x3c8/0x780 [xfs] > [ 5.334768] [c0000003e7e03930] [d00000000236435c] .xfs_fs_fill_super+0x31c/0x3b0 [xfs] > [ 5.334801] [c0000003e7e039d0] [c000000000217028] .mount_bdev+0x258/0x2b0 > [ 5.334855] [c0000003e7e03aa0] [d000000002361c78] .xfs_fs_mount+0x18/0x30 [xfs] > [ 5.334878] [c0000003e7e03b10] [c000000000218040] .mount_fs+0x70/0x230 > [ 5.334890] [c0000003e7e03bd0] [c00000000023a9f8] .vfs_kern_mount+0x58/0x140 > [ 5.334901] [c0000003e7e03c80] [c00000000023d5f0] .do_mount+0x280/0xb10 > [ 5.334912] [c0000003e7e03d70] [c00000000023df30] .SyS_mount+0xb0/0x110 > [ 5.334924] [c0000003e7e03e30] [c000000000009e54] syscall_exit+0x0/0x98 > [ 5.334945] c00000001bee2000: 58 44 32 44 09 50 00 40 0a 50 00 40 0b 50 00 40 XD2D.P.@.P.@.P.@ > [ 5.334957] c00000001bee2010: 00 00 00 00 00 11 a3 8e 32 62 65 61 68 5f 74 61 ........2beah_ta > [ 5.334968] c00000001bee2020: 73 6b 5f 65 64 33 33 63 61 62 36 2d 32 65 30 31 sk_ed33cab6-2e01 > [ 5.334979] c00000001bee2030: 2d 34 63 34 34 2d 38 63 31 65 2d 66 65 37 36 35 -4c44-8c1e-fe765 > [ 5.334992] XFS (dm-1): Internal error xfs_dir3_data_write_verify at line 271 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000234db94 > [ 5.334992] > [ 5.335017] CPU: 2 PID: 372 Comm: mount Tainted: G W 3.9.0+ #1 > [ 5.335025] Call Trace: > [ 5.335032] [c0000003e7e02c10] [c000000000014e48] .show_stack+0x78/0x1e0 (unreliable) > [ 5.335046] [c0000003e7e02ce0] [c00000000074be70] .dump_stack+0x28/0x3c > [ 5.335099] [c0000003e7e02d50] [d00000000234ff14] .xfs_error_report+0x54/0x70 [xfs] > [ 5.335153] [c0000003e7e02dc0] [d00000000234ffac] .xfs_corruption_error+0x7c/0xb0 [xfs] > [ 5.335220] [c0000003e7e02e70] [d000000002397148] .xfs_dir3_data_write_verify+0x148/0x1c0 [xfs] > [ 5.335284] [c0000003e7e02f20] [d00000000234db94] ._xfs_buf_ioapply+0xd4/0x400 [xfs] > [ 5.335337] [c0000003e7e03060] [d00000000234dfcc] .xfs_buf_iorequest+0x4c/0xe0 [xfs] > [ 5.335403] [c0000003e7e030f0] [d00000000234e0c4] .xfs_bdstrat_cb+0x64/0x120 [xfs] > [ 5.335464] [c0000003e7e03180] [d00000000234e284] .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] > [ 5.335527] [c0000003e7e03270] [d00000000234f318] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] > [ 5.335584] [c0000003e7e03310] [d0000000023b1904] .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] > [ 5.335650] [c0000003e7e033d0] [d0000000023b1c4c] .xlog_recover_process_data+0x26c/0x340 [xfs] > [ 5.335718] [c0000003e7e034a0] [d0000000023b2108] .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] > [ 5.335785] [c0000003e7e03610] [d0000000023b2360] .xlog_do_log_recovery+0xa0/0x120 [xfs] > [ 5.335842] [c0000003e7e036b0] [d0000000023b2400] .xlog_do_recover+0x20/0x150 [xfs] > [ 5.335909] [c0000003e7e03740] [d0000000023b25c4] .xlog_recover+0x94/0x100 [xfs] > [ 5.335976] [c0000003e7e037d0] [d0000000023bcf84] .xfs_log_mount+0x144/0x1e0 [xfs] > [ 5.336033] [c0000003e7e03870] [d0000000023b6098] .xfs_mountfs+0x3c8/0x780 [xfs] > [ 5.336097] [c0000003e7e03930] [d00000000236435c] .xfs_fs_fill_super+0x31c/0x3b0 [xfs] > [ 5.336121] [c0000003e7e039d0] [c000000000217028] .mount_bdev+0x258/0x2b0 > [ 5.336174] [c0000003e7e03aa0] [d000000002361c78] .xfs_fs_mount+0x18/0x30 [xfs] > [ 5.336206] [c0000003e7e03b10] [c000000000218040] .mount_fs+0x70/0x230 > [ 5.336218] [c0000003e7e03bd0] [c00000000023a9f8] .vfs_kern_mount+0x58/0x140 > [ 5.336229] [c0000003e7e03c80] [c00000000023d5f0] .do_mount+0x280/0xb10 > [ 5.336240] [c0000003e7e03d70] [c00000000023df30] .SyS_mount+0xb0/0x110 > [ 5.336251] [c0000003e7e03e30] [c000000000009e54] syscall_exit+0x0/0x98 > [ 5.348410] XFS (dm-1): log mount/recovery failed: error 117 > [ 5.348491] XFS (dm-1): log mount failed > dracut-initqueue[275]: mount: mount /dev/mapper/rhel_ibm--p730--06--lp1-root on /sysroot failed: Structure needs cleaning > dracut-initqueue[275]: Warning: Failed to mount -t xfs -o ro,ro /dev/mapper/rhel_ibm--p730--06--lp1-root /sysroot > dracut-initqueue[275]: Warning: *** An error occurred during the file system check. > dracut-initqueue[275]: Warning: *** Dropping you to a shell; the system will try > > Also, never saw any of those in other architectures like x64, but started get those there in 3.9.0. > Unsure if those are related. > > [ 3224.369782] ============================================================================= > [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison overwritten > [ 3224.370017] ----------------------------------------------------------------------------- 2: 'F' if any module was force loaded by "insmod -f", ' ' if all modules were loaded normally. Force loaded modules, what's that from? From sandeen@sandeen.net Mon May 6 09:34:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AB0D929DF8 for ; Mon, 6 May 2013 09:34:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 37022AC002 for ; Mon, 6 May 2013 07:34:52 -0700 (PDT) X-ASG-Debug-ID: 1367850891-04cbb07abaa56f0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id LgM52QJCr9xoV4xf for ; Mon, 06 May 2013 07:34:51 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id E719563BEEBD; Mon, 6 May 2013 09:34:50 -0500 (CDT) Message-ID: <5187BF8A.2040303@sandeen.net> Date: Mon, 06 May 2013 09:34:50 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Filippo Stenico CC: xfs@oss.sgi.com Subject: Re: Xfs_repair segfaults. References: X-ASG-Orig-Subj: Re: Xfs_repair segfaults. In-Reply-To: X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367850891 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130176 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 7:06 AM, Filippo Stenico wrote: > Hello, I've had an issue on a raid5 volume (2 disks failing at same > time, and buggy NAS firmware trying hard to sync then stop for I/O > error then retryes to sync leading (!?) to lost raid and an xfs data > corruption. Sooo bad storage hardware, first off \o/ :( > I've recreated raid, mounted the xfs filesystem, copied about 6TB of > data out of 8TB, the rest of data being unreachable with "structrure > needs cleaning" error. Thus I tried to unmount/mount and still got > same error, then dumped metadata and tried various xfs_repair with > different options but it always reaches a same point where it always > segfaults. OK, what version of xfsprogs? If not latest usptream, please try that next. If upstream still segfaults, you could provide a core and associated binary debug info, or (maybe) an xfs_metadump for analysis. It sounds like this fs is in pretty bad shape though, so even the xfs_metadump might fail and/or not gather enough information. -Eric > If someone is interested of investigating what's going on here and > helping me recover more data I would be happy to send in in more > details.... > > Cheers > > -- F > > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > From filippo.stenico@gmail.com Mon May 6 10:01:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8947F29DF8 for ; Mon, 6 May 2013 10:01:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 25A7CAC002 for ; Mon, 6 May 2013 08:01:14 -0700 (PDT) X-ASG-Debug-ID: 1367852471-04bdf07530a8390001-NocioJ Received: from mail-lb0-f175.google.com (mail-lb0-f175.google.com [209.85.217.175]) by cuda.sgi.com with ESMTP id Ucdfl72VG1b0UXZK (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 May 2013 08:01:12 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.217.175 X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.175] Received: by mail-lb0-f175.google.com with SMTP id w20so3459772lbh.20 for ; Mon, 06 May 2013 08:01:11 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.175] X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.175] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=rGkMhzHpiF+vD4tt1++0dO13/hj+JZu+J4RwthOqlTU=; b=x15mHy8m89yX3sVgyE3uB9b7LWXXQxfzgvu9/eB90bIecU1WFTF33wNM3bMj/ZLgtF mI7WTMY4t4KlV6SXEhfTEL0C81/+7HSysPMW7OpDascgyNiJP2gESDNIpHg75rfMOURX FkQXvHmYyC5S55g5Vmun9E+7ewtIOLfHOPyiPICgFPtvcrh+RnfKnm5Y2157zVU0cqua 1exNFMMcbcF+mueyBDdrugRPw8Y5ZWzN+ZMMYxlUHJFYDrVkxCGP5NlX5Xx63FlypVaF VRaiW79rUF9fiYyUgJCKFr7vbuBeehM8hi6Elg1xoWrtNYU1biBe5JhRRGwBiaW3VJP2 yRpg== X-Received: by 10.112.161.97 with SMTP id xr1mr8398557lbb.15.1367852470890; Mon, 06 May 2013 08:01:10 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Mon, 6 May 2013 08:00:30 -0700 (PDT) In-Reply-To: <5187BF8A.2040303@sandeen.net> References: <5187BF8A.2040303@sandeen.net> From: Filippo Stenico Date: Mon, 6 May 2013 17:00:30 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Eric Sandeen X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c33af0a1faec04dc0df824 X-Barracuda-Connect: mail-lb0-f175.google.com[209.85.217.175] X-Barracuda-Start-Time: 1367852472 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130176 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c33af0a1faec04dc0df824 Content-Type: text/plain; charset=ISO-8859-1 On Mon, May 6, 2013 at 4:34 PM, Eric Sandeen wrote: > On 5/6/13 7:06 AM, Filippo Stenico wrote: > > Hello, I've had an issue on a raid5 volume (2 disks failing at same > > time, and buggy NAS firmware trying hard to sync then stop for I/O > > error then retryes to sync leading (!?) to lost raid and an xfs data > > corruption. > > Sooo bad storage hardware, first off \o/ :( > > > > I've recreated raid, mounted the xfs filesystem, copied about 6TB of > > data out of 8TB, the rest of data being unreachable with "structrure > > needs cleaning" error. Thus I tried to unmount/mount and still got > > same error, then dumped metadata and tried various xfs_repair with > > different options but it always reaches a same point where it always > > segfaults. > > OK, what version of xfsprogs? > If not latest usptream, please try that next. > > It was the one included in debian squeeze, I believe v.3.1.4 I figured segfault could be fixed in newer releases, so I added testing and unstable sources, and tryied with those (3.1.7 and 3.1.9) but same segfault. > If upstream still segfaults, you could provide a core and associated > binary debug info, or (maybe) an xfs_metadump for analysis. It sounds > like this fs is in pretty bad shape though, so even the xfs_metadump > might fail and/or not gather enough information. > > As suggested on IRC chat, I built from xfsprogs-3.1.9 source, I will restore "original" metadata and make same steps I took first time, so that you can get a detailed report. Of course I will include as much as info I can (metadump - gdb backtrace on eventual segfault). Thanx for now, -Eric > > > If someone is interested of investigating what's going on here and > > helping me recover more data I would be happy to send in in more > > details.... > > > > Cheers > > > > -- F > > > > > > _______________________________________________ xfs mailing list > > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > > > > -- F --001a11c33af0a1faec04dc0df824 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

On Mon, May 6, 2013 at 4:34 PM, Eric San= deen <sandeen@sandeen.net> wrote:
On 5/6/13 7:06 AM, Filippo Stenico wrote:
> Hello, I've had an issue on a raid5 volume (2 disks failing at sam= e
> time, and buggy NAS firmware trying hard to sync then stop for I/O
> error then retryes to sync leading (!?) to lost raid and an xfs data > corruption.

Sooo bad storage hardware, first off \o/ =A0:(

=A0
> I've recreated raid, mounted the xfs filesystem, copied about 6TB = of
> data out of 8TB, the rest of data being unreachable with "structr= ure
> needs cleaning" error. Thus I tried to unmount/mount and still go= t
> same error, then dumped metadata and tried various xfs_repair with
> different options but it always reaches a same point where it always > segfaults.

OK, what version of xfsprogs?
If not latest usptream, please try that next.

It was the one included in debian squeeze, I believe = v.3.1.4
I figured segfault could be fixed in newer releases, so I added= testing and unstable sources, and tryied with those (3.1.7 and 3.1.9) but = same segfault.
=A0
If upstream still segfaults, you could provide a core and associated
binary debug info, or (maybe) an xfs_metadump for analysis. =A0It sounds like this fs is in pretty bad shape though, so even the xfs_metadump
might fail and/or not gather enough information.

As suggested on IRC chat, I built from xfsprogs-3.1.9= source, I will restore "original" metadata and make same steps I= took first time, so that you can get a detailed report.
Of course I wil= l include as much as info I can (metadump - gdb backtrace on eventual segfa= ult).

Thanx for now,

-Eric

> If someone is interested of investigating what's going on here and=
> helping me recover more data I would be happy to send in in more
> details....
>
> Cheers
>
> -- F
>
>
> _______________________________________________ xfs mailing list=
> xfs@oss.sgi.com http://oss.sgi.com/m= ailman/listinfo/xfs
>



--
F --001a11c33af0a1faec04dc0df824-- From sandeen@sandeen.net Mon May 6 12:04:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 227D829DF8 for ; Mon, 6 May 2013 12:04:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A37FCAC008 for ; Mon, 6 May 2013 10:04:18 -0700 (PDT) X-ASG-Debug-ID: 1367859857-04cbb07abaad130001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id xPNIRSBNFSHMAeom for ; Mon, 06 May 2013 10:04:17 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id F1E8F63BEEBD; Mon, 6 May 2013 12:04:16 -0500 (CDT) Message-ID: <5187E290.8090109@sandeen.net> Date: Mon, 06 May 2013 12:04:16 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Markus Trippelsdorf CC: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <20130506112717.GA502@x4> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367859857 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130184 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: > Today I accidentally tried to mount my backup disk at /dev/sdc instead > of /dev/sdc1 and this is what happened: > > ... > EXT4-fs (sdc): VFS: Can't find ext4 filesystem > FAT-fs (sdc): bogus number of reserved sectors > FAT-fs (sdc): Can't find a valid FAT filesystem > FAT-fs (sdc): bogus number of reserved sectors > FAT-fs (sdc): Can't find a valid FAT filesystem > ISOFS: Unable to identify CD-ROM format. > XFS (sdc): bad magic number > ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd This seems to be a recent regression. Comments above xfs_sb_quiet_read_verify() indicate that this behavior is to be avoided: * We may be probed for a filesystem match, so we may not want to emit * messages when the superblock buffer is not actually an XFS superblock. and it checks for proper magic prior to all the chattiness above int that function. The superblock read is suposed to choose whether to be noisy or not, in xfs_readsb(): reread: bp = xfs_buf_read_uncached(mp->m_ddev_targp, XFS_SB_DADDR, BTOBB(sector_size), 0, loud ? &xfs_sb_buf_ops : &xfs_sb_quiet_buf_ops); so it looks like this *should* be working properly. I'll look into it and send a patch in a a bit. (FWIW though, I don't get this probing from the kernel; I only see it if I specify a -t xfs type on the mount command) Thanks, -Eric From markus@trippelsdorf.de Mon May 6 13:30:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1912329DF8 for ; Mon, 6 May 2013 13:30:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D1F628F8037 for ; Mon, 6 May 2013 11:30:26 -0700 (PDT) X-ASG-Debug-ID: 1367865023-04bdf0752eb21a0001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id 1fSK7YQFs3g3B6X0 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 11:30:24 -0700 (PDT) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=beta; bh=5ewoS0zuPj/KyHQOpMXzkXL1NY VR8AKQ3+BxF9fVd1Y=; b=sK4kG1VZW8VBvTmqiliRDbnuPSHO70tYL7eF97NFIr V52QiZPtrZhSuymqX5Xe/41LlvmWS0RWtWKeJSLPEviprHi7DzGlWm52FEAXSkWf +jpdNhqQU/NLmhv6xbC03OcmtcSsl/FQFQv/LuH9pqBWIEycPOfGX3iOBYYzlVZ2 U= Received: (qmail 10680 invoked from network); 6 May 2013 20:30:22 +0200 Received: from unknown (HELO x4) (ud10?360p3@91.64.96.185) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 6 May 2013 20:30:22 +0200 Date: Mon, 6 May 2013 20:30:20 +0200 From: Markus Trippelsdorf To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130506183020.GA513@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5187E290.8090109@sandeen.net> X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1367865024 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 2013.05.06 at 12:04 -0500, Eric Sandeen wrote: > On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: > > Today I accidentally tried to mount my backup disk at /dev/sdc instead > > of /dev/sdc1 and this is what happened: > > > > ... > > EXT4-fs (sdc): VFS: Can't find ext4 filesystem > > FAT-fs (sdc): bogus number of reserved sectors > > FAT-fs (sdc): Can't find a valid FAT filesystem > > FAT-fs (sdc): bogus number of reserved sectors > > FAT-fs (sdc): Can't find a valid FAT filesystem > > ISOFS: Unable to identify CD-ROM format. > > XFS (sdc): bad magic number > > ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd > > This seems to be a recent regression. > > Comments above xfs_sb_quiet_read_verify() indicate that this behavior is > to be avoided: > > * We may be probed for a filesystem match, so we may not want to emit > * messages when the superblock buffer is not actually an XFS superblock. > > and it checks for proper magic prior to all the chattiness above int > that function. > > The superblock read is suposed to choose whether to be noisy or not, > in xfs_readsb(): > The following patch fixes the issue for me: diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd7..db8f27f 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -721,6 +721,11 @@ xfs_sb_read_verify( } error = xfs_sb_verify(bp); + if (error == XFS_ERROR(EWRONGFS)) { + xfs_buf_ioerror(bp, EWRONGFS); + return; + } + out_error: if (error) { XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); -- Markus From sandeen@sandeen.net Mon May 6 14:14:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 93A9F29DF8 for ; Mon, 6 May 2013 14:14:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 22DD6AC003 for ; Mon, 6 May 2013 12:14:42 -0700 (PDT) X-ASG-Debug-ID: 1367867681-04cbb07abab1b20001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 8H4pXxFXHiVCDsAu for ; Mon, 06 May 2013 12:14:41 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 7E809651D7C0; Mon, 6 May 2013 14:14:41 -0500 (CDT) Message-ID: <51880121.8000001@sandeen.net> Date: Mon, 06 May 2013 14:14:41 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Markus Trippelsdorf CC: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <20130506183020.GA513@x4> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367867681 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130192 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 1:30 PM, Markus Trippelsdorf wrote: > On 2013.05.06 at 12:04 -0500, Eric Sandeen wrote: >> On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: >>> Today I accidentally tried to mount my backup disk at /dev/sdc instead >>> of /dev/sdc1 and this is what happened: >>> >>> ... >>> EXT4-fs (sdc): VFS: Can't find ext4 filesystem >>> FAT-fs (sdc): bogus number of reserved sectors >>> FAT-fs (sdc): Can't find a valid FAT filesystem >>> FAT-fs (sdc): bogus number of reserved sectors >>> FAT-fs (sdc): Can't find a valid FAT filesystem >>> ISOFS: Unable to identify CD-ROM format. >>> XFS (sdc): bad magic number >>> ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>> ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>> ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>> ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>> XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd >> >> This seems to be a recent regression. >> >> Comments above xfs_sb_quiet_read_verify() indicate that this behavior is >> to be avoided: >> >> * We may be probed for a filesystem match, so we may not want to emit >> * messages when the superblock buffer is not actually an XFS superblock. >> >> and it checks for proper magic prior to all the chattiness above int >> that function. >> >> The superblock read is suposed to choose whether to be noisy or not, >> in xfs_readsb(): >> > > The following patch fixes the issue for me: > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index f6bfbd7..db8f27f 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -721,6 +721,11 @@ xfs_sb_read_verify( > } > error = xfs_sb_verify(bp); > > + if (error == XFS_ERROR(EWRONGFS)) { > + xfs_buf_ioerror(bp, EWRONGFS); > + return; > + } > + > out_error: > if (error) { > XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); That might make sense, I don't think we need the loudness for EWRONGFS no matter how we got there. But: Out of curiosity, what was the actual mount command you used? It seems like the auto-probing should have set the MS_SILENT flag to avoid this in the first place, i.e. we should have gone down the quiet path (xfs_sb_quiet_read_verify) and avoided this altogether. How do you reproduce this? If I were to patch xfs_read_sb_verify, I'd probably do it like this: diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd7..7488335 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -723,7 +723,9 @@ xfs_sb_read_verify( out_error: if (error) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + if (error != EWRONGFS) + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + mp, bp->b_addr); xfs_buf_ioerror(bp, error); } } Because it keeps a single return point in the function, and . . . XFS_ERROR() is never used on the right side of a test; it's only to turn an error return into a BUG_ON for certain error numbers when they're set; i.e. it'd fire in xfs_mount_validate_sb before we ever got to the caller: xfs_warn(mp, "bad magic number"); return XFS_ERROR(EWRONGFS); /* would BUG if configured to do so */ Thanks, -Eric From markus@trippelsdorf.de Mon May 6 14:26:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5196429DF8 for ; Mon, 6 May 2013 14:26:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id DF23CAC002 for ; Mon, 6 May 2013 12:26:33 -0700 (PDT) X-ASG-Debug-ID: 1367868390-04bdf07530b4730001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id tEmX9xPVFrrITkb4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 12:26:32 -0700 (PDT) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=beta; bh=SSFHvZaFs1tXRiClB35srO3GBk Ldxq8zRMCnbTrM2q8=; b=rxVpUYr4A46E5BGueZc1VXlXdIDaOPVWfRdrTWbRK4 3/PLdnj+twp9JolZNN9iG/7FqoMsJejnOxgXmwToaO6NSED8qZ+6TiXoxDrJmgdL 9ug4pm0995Nxug6VpZgAxylwqBe+54zwsPwRrvy7JY0KiF+paXiYzFzmJH/TbDDt U= Received: (qmail 20992 invoked from network); 6 May 2013 21:26:29 +0200 Received: from unknown (HELO x4) (ud10?360p3@91.64.96.185) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 6 May 2013 21:26:29 +0200 Date: Mon, 6 May 2013 21:26:29 +0200 From: Markus Trippelsdorf To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130506192629.GA503@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51880121.8000001@sandeen.net> X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1367868391 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130194 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 2013.05.06 at 14:14 -0500, Eric Sandeen wrote: > On 5/6/13 1:30 PM, Markus Trippelsdorf wrote: > > On 2013.05.06 at 12:04 -0500, Eric Sandeen wrote: > >> On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: > >>> Today I accidentally tried to mount my backup disk at /dev/sdc instead > >>> of /dev/sdc1 and this is what happened: > >>> > >>> ... > >>> EXT4-fs (sdc): VFS: Can't find ext4 filesystem > >>> FAT-fs (sdc): bogus number of reserved sectors > >>> FAT-fs (sdc): Can't find a valid FAT filesystem > >>> FAT-fs (sdc): bogus number of reserved sectors > >>> FAT-fs (sdc): Can't find a valid FAT filesystem > >>> ISOFS: Unable to identify CD-ROM format. > >>> XFS (sdc): bad magic number > >>> ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>> ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>> ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>> ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>> XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd > >> > >> This seems to be a recent regression. > >> > >> Comments above xfs_sb_quiet_read_verify() indicate that this behavior is > >> to be avoided: > >> > >> * We may be probed for a filesystem match, so we may not want to emit > >> * messages when the superblock buffer is not actually an XFS superblock. > >> > >> and it checks for proper magic prior to all the chattiness above int > >> that function. > >> > >> The superblock read is suposed to choose whether to be noisy or not, > >> in xfs_readsb(): > >> > > > > The following patch fixes the issue for me: > > > > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > index f6bfbd7..db8f27f 100644 > > --- a/fs/xfs/xfs_mount.c > > +++ b/fs/xfs/xfs_mount.c > > @@ -721,6 +721,11 @@ xfs_sb_read_verify( > > } > > error = xfs_sb_verify(bp); > > > > + if (error == XFS_ERROR(EWRONGFS)) { > > + xfs_buf_ioerror(bp, EWRONGFS); > > + return; > > + } > > + > > out_error: > > if (error) { > > XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); > > That might make sense, I don't think we need the loudness for EWRONGFS > no matter how we got there. > > But: > > Out of curiosity, what was the actual mount command you used? It seems like > the auto-probing should have set the MS_SILENT flag to avoid this in > the first place, i.e. we should have gone down the quiet path > (xfs_sb_quiet_read_verify) and avoided this altogether. > > How do you reproduce this? I power on the drive and simply run: # mount /dev/sdc /mnt > If I were to patch xfs_read_sb_verify, I'd probably do it like this: > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index f6bfbd7..7488335 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -723,7 +723,9 @@ xfs_sb_read_verify( > > out_error: > if (error) { > - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); > + if (error != EWRONGFS) > + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, > + mp, bp->b_addr); > xfs_buf_ioerror(bp, error); > } > } > > Because it keeps a single return point in the function, and . . . > > XFS_ERROR() is never used on the right side of a test; it's only to turn an error > return into a BUG_ON for certain error numbers when they're set; OK, makes sense. Thanks. I like your patch better, so lets use it. -- Markus From sandeen@sandeen.net Mon May 6 14:41:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 554A629DF8 for ; Mon, 6 May 2013 14:41:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 37990304062 for ; Mon, 6 May 2013 12:41:05 -0700 (PDT) X-ASG-Debug-ID: 1367869264-04cbb07ab8b29c0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 51bIjXHRSvZZEvkK for ; Mon, 06 May 2013 12:41:04 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id D94CD63BEEBD; Mon, 6 May 2013 14:41:03 -0500 (CDT) Message-ID: <5188074F.2090500@sandeen.net> Date: Mon, 06 May 2013 14:41:03 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Markus Trippelsdorf CC: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <20130506192629.GA503@x4> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367869264 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130194 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 2:26 PM, Markus Trippelsdorf wrote: > On 2013.05.06 at 14:14 -0500, Eric Sandeen wrote: >> On 5/6/13 1:30 PM, Markus Trippelsdorf wrote: >>> On 2013.05.06 at 12:04 -0500, Eric Sandeen wrote: >>>> On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: >>>>> Today I accidentally tried to mount my backup disk at /dev/sdc instead >>>>> of /dev/sdc1 and this is what happened: >>>>> >>>>> ... >>>>> EXT4-fs (sdc): VFS: Can't find ext4 filesystem >>>>> FAT-fs (sdc): bogus number of reserved sectors >>>>> FAT-fs (sdc): Can't find a valid FAT filesystem >>>>> FAT-fs (sdc): bogus number of reserved sectors >>>>> FAT-fs (sdc): Can't find a valid FAT filesystem >>>>> ISOFS: Unable to identify CD-ROM format. >>>>> XFS (sdc): bad magic number >>>>> ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>> ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>> ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>> ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>> XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd >>>> >>>> This seems to be a recent regression. >>>> >>>> Comments above xfs_sb_quiet_read_verify() indicate that this behavior is >>>> to be avoided: >>>> >>>> * We may be probed for a filesystem match, so we may not want to emit >>>> * messages when the superblock buffer is not actually an XFS superblock. >>>> >>>> and it checks for proper magic prior to all the chattiness above int >>>> that function. >>>> >>>> The superblock read is suposed to choose whether to be noisy or not, >>>> in xfs_readsb(): >>>> >>> >>> The following patch fixes the issue for me: >>> >>> >>> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c >>> index f6bfbd7..db8f27f 100644 >>> --- a/fs/xfs/xfs_mount.c >>> +++ b/fs/xfs/xfs_mount.c >>> @@ -721,6 +721,11 @@ xfs_sb_read_verify( >>> } >>> error = xfs_sb_verify(bp); >>> >>> + if (error == XFS_ERROR(EWRONGFS)) { >>> + xfs_buf_ioerror(bp, EWRONGFS); >>> + return; >>> + } >>> + >>> out_error: >>> if (error) { >>> XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); >> >> That might make sense, I don't think we need the loudness for EWRONGFS >> no matter how we got there. >> >> But: >> >> Out of curiosity, what was the actual mount command you used? It seems like >> the auto-probing should have set the MS_SILENT flag to avoid this in >> the first place, i.e. we should have gone down the quiet path >> (xfs_sb_quiet_read_verify) and avoided this altogether. >> >> How do you reproduce this? > > I power on the drive and simply run: > > # mount /dev/sdc /mnt Interesting. On my test box, that never even issues the mount syscall, because it uses blkid (I guess) to probe, and finds nothing. Which util-linux do you have? An strace -v of the mount command might be useful. -Eric From markus@trippelsdorf.de Mon May 6 14:55:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3E3E629DF8 for ; Mon, 6 May 2013 14:55:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CEEDDAC003 for ; Mon, 6 May 2013 12:55:28 -0700 (PDT) X-ASG-Debug-ID: 1367870123-04bdf0752fb5b00001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id pRU6TUQs5ZVqhJcm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 12:55:25 -0700 (PDT) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=beta; bh=3va2E+UTBrWy/LRybbEHFZVEY2 Z1NQWfDHixVS6WZok=; b=gPY1f+mAQXkn8fnQscY0aThJMHxlhhL0aXSqG45zAJ pQhVdshO9axRkAaOC8ZaACMwg9dRV8XC/q6t7MbL1l88rFmtGngT+s4zWKYeadGz o+cdh4EzTOhpQmU4jHxNnChQRbAout2Kc9S9LngHlh+lGnj2W+vMw+RFic0nK+03 Q= Received: (qmail 28321 invoked from network); 6 May 2013 21:55:21 +0200 Received: from unknown (HELO x4) (ud10?360p3@91.64.96.185) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 6 May 2013 21:55:21 +0200 Date: Mon, 6 May 2013 21:55:21 +0200 From: Markus Trippelsdorf To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130506195521.GB503@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5188074F.2090500@sandeen.net> X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1367870125 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130196 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 2013.05.06 at 14:41 -0500, Eric Sandeen wrote: > On 5/6/13 2:26 PM, Markus Trippelsdorf wrote: > > On 2013.05.06 at 14:14 -0500, Eric Sandeen wrote: > >> On 5/6/13 1:30 PM, Markus Trippelsdorf wrote: > >>> On 2013.05.06 at 12:04 -0500, Eric Sandeen wrote: > >>>> On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: > >>>>> Today I accidentally tried to mount my backup disk at /dev/sdc instead > >>>>> of /dev/sdc1 and this is what happened: > >>>>> > >>>>> ... > >>>>> EXT4-fs (sdc): VFS: Can't find ext4 filesystem > >>>>> FAT-fs (sdc): bogus number of reserved sectors > >>>>> FAT-fs (sdc): Can't find a valid FAT filesystem > >>>>> FAT-fs (sdc): bogus number of reserved sectors > >>>>> FAT-fs (sdc): Can't find a valid FAT filesystem > >>>>> ISOFS: Unable to identify CD-ROM format. > >>>>> XFS (sdc): bad magic number > >>>>> ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>>>> ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>>>> ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>>>> ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>>>> XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd > >>>> > >>>> This seems to be a recent regression. > >>>> > >>>> Comments above xfs_sb_quiet_read_verify() indicate that this behavior is > >>>> to be avoided: > >>>> > >>>> * We may be probed for a filesystem match, so we may not want to emit > >>>> * messages when the superblock buffer is not actually an XFS superblock. > >>>> > >>>> and it checks for proper magic prior to all the chattiness above int > >>>> that function. > >>>> > >>>> The superblock read is suposed to choose whether to be noisy or not, > >>>> in xfs_readsb(): > >>>> > >>> > >>> The following patch fixes the issue for me: > >>> > >>> > >>> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > >>> index f6bfbd7..db8f27f 100644 > >>> --- a/fs/xfs/xfs_mount.c > >>> +++ b/fs/xfs/xfs_mount.c > >>> @@ -721,6 +721,11 @@ xfs_sb_read_verify( > >>> } > >>> error = xfs_sb_verify(bp); > >>> > >>> + if (error == XFS_ERROR(EWRONGFS)) { > >>> + xfs_buf_ioerror(bp, EWRONGFS); > >>> + return; > >>> + } > >>> + > >>> out_error: > >>> if (error) { > >>> XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); > >> > >> That might make sense, I don't think we need the loudness for EWRONGFS > >> no matter how we got there. > >> > >> But: > >> > >> Out of curiosity, what was the actual mount command you used? It seems like > >> the auto-probing should have set the MS_SILENT flag to avoid this in > >> the first place, i.e. we should have gone down the quiet path > >> (xfs_sb_quiet_read_verify) and avoided this altogether. > >> > >> How do you reproduce this? > > > > I power on the drive and simply run: > > > > # mount /dev/sdc /mnt > > Interesting. On my test box, that never even issues the mount syscall, > because it uses blkid (I guess) to probe, and finds nothing. > > Which util-linux do you have? v2.21.2 > An strace -v of the mount command might be useful. execve("/bin/mount", ["mount", "/dev/sdc", "/mnt"], [/* 44 vars */]) = 0 brk(0) = 0x1ddc000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3f5a3a5000 access("/etc/ld.so.preload", R_OK) = 0 open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=23, ...}) = 0 mmap(NULL, 23, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x7f3f5a3a4000 close(3) = 0 open("/usr/lib/libamdlibm.so", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\245\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0644, st_size=699125, ...}) = 0 mmap(NULL, 2741432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3f59ee9000 mprotect(0x7f3f59f40000, 2097152, PROT_NONE) = 0 mmap(0x7f3f5a140000, 286720, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x57000) = 0x7f3f5a140000 mmap(0x7f3f5a186000, 1208, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3f5a186000 close(3) = 0 munmap(0x7f3f5a3a4000, 23) = 0 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=139673, ...}) = 0 mmap(NULL, 139673, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f3f5a382000 close(3) = 0 open("/lib/libblkid.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=155512, ...}) = 0 mmap(NULL, 157484, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3f5a35b000 mmap(0x7f3f5a37e000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f3f5a37e000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\33\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=9693409, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3f5a35a000 mmap(NULL, 3594688, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3f59b7b000 mprotect(0x7f3f59ce0000, 2093056, PROT_NONE) = 0 mmap(0x7f3f59edf000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x164000) = 0x7f3f59edf000 mmap(0x7f3f59ee5000, 14784, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3f59ee5000 close(3) = 0 open("/lib/libuuid.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=16272, ...}) = 0 mmap(NULL, 18236, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3f5a355000 mmap(0x7f3f5a359000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f3f5a359000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3f5a354000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3f5a352000 arch_prctl(ARCH_SET_FS, 0x7f3f5a352780) = 0 mprotect(0x7f3f59edf000, 16384, PROT_READ) = 0 mprotect(0x7f3f5a3a6000, 4096, PROT_READ) = 0 munmap(0x7f3f5a382000, 139673) = 0 brk(0) = 0x1ddc000 brk(0x1dfd000) = 0x1dfd000 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=1534640, ...}) = 0 mmap(NULL, 1534640, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f3f5a1db000 close(3) = 0 umask(022) = 022 open("/dev/null", O_RDWR) = 3 close(3) = 0 getuid() = 0 geteuid() = 0 stat("/dev/sdc", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 32), ...}) = 0 readlink("/dev", 0x7fff283f5920, 4096) = -1 EINVAL (Invalid argument) readlink("/dev/sdc", 0x7fff283f5920, 4096) = -1 EINVAL (Invalid argument) stat("/dev/sdc", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 32), ...}) = 0 rt_sigprocmask(SIG_BLOCK, ~[TRAP SEGV RTMIN RT_1], NULL, 8) = 0 open("/dev/sdc", O_RDONLY) = 3 fadvise64(3, 0, 0, POSIX_FADV_RANDOM) = 0 fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 32), ...}) = 0 uname({sys="Linux", node="x4", ...}) = 0 ioctl(3, BLKGETSIZE64, 1000204886016) = 0 open("/sys/dev/block/8:32", O_RDONLY) = 4 newfstatat(4, "partition", 0x7fff283f6490, 0) = -1 ENOENT (No such file or directory) openat(4, "dm/uuid", O_RDONLY) = -1 ENOENT (No such file or directory) close(4) = 0 ioctl(3, CDROM_GET_CAPABILITY or SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT, 0) = -1 ENOTTY (Inappropriate ioctl for device) lseek(3, 1000204795904, SEEK_SET) = 1000204795904 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64 lseek(3, 1000204877824, SEEK_SET) = 1000204877824 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 256) = 256 lseek(3, 0, SEEK_SET) = 0 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 256) = 256 lseek(3, 4096, SEEK_SET) = 4096 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 256) = 256 lseek(3, 1000204885504, SEEK_SET) = 1000204885504 read(3, "EFI PART\0\0\1\0\\\0\0\0\253 \1;\0\0\0\0\257mpt\0\0\0\0"..., 512) = 512 lseek(3, 1000204754432, SEEK_SET) = 1000204754432 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512 lseek(3, 1000204884992, SEEK_SET) = 1000204884992 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 48) = 48 lseek(3, 1000204853760, SEEK_SET) = 1000204853760 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 24) = 24 lseek(3, 1000204755456, SEEK_SET) = 1000204755456 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 24) = 24 lseek(3, 1000204754944, SEEK_SET) = 1000204754944 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 24) = 24 lseek(3, 1000204681728, SEEK_SET) = 1000204681728 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 24) = 24 lseek(3, 1000204880384, SEEK_SET) = 1000204880384 read(3, "\0\0\0\0", 4) = 4 lseek(3, 4096, SEEK_SET) = 4096 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 1000204881920, SEEK_SET) = 1000204881920 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096 lseek(3, 0, SEEK_SET) = 0 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 1024, SEEK_SET) = 1024 read(3, "\257=\306\17\203\204rG\216y=i\330G}\344\341Fx\2110\211\5E\211s\250\262\335\221A\370"..., 1024) = 1024 lseek(3, 1048576, SEEK_SET) = 1048576 read(3, "XFSB\0\0\20\0\0\0\0\0\16\216\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 3072, SEEK_SET) = 3072 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 7168, SEEK_SET) = 7168 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 15360, SEEK_SET) = 15360 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 31744, SEEK_SET) = 31744 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 64512, SEEK_SET) = 64512 read(3, "\0\0\0\0\30\1\r\25\3dir\30\0\16\0\0\0\0\0\30\1\r\26\7dirname"..., 1024) = 1024 lseek(3, 8192, SEEK_SET) = 8192 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 65536, SEEK_SET) = 65536 read(3, "IN\200\0\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024 lseek(3, 32768, SEEK_SET) = 32768 read(3, "XAGF\0\0\0\1\0\0\0\0\0c\320\231\0\0\22\321\0\0 \353\0\0\0\0\0\0\0\2"..., 1024) = 1024 lseek(3, 131072, SEEK_SET) = 131072 read(3, "\0\0\0\0\0\v\311'\25%gconf-tree-zh_CN.xml\2\0"..., 41) = 41 lseek(3, 135168, SEEK_SET) = 135168 read(3, ".schema\31H\213\205(\377\377\1\360\377\377\0(\0\0\1\331\27.dyngro"..., 41) = 41 lseek(3, 139264, SEEK_SET) = 139264 read(3, "INA\300\2\1\0\0\0\0\3\350\0\0\3\350\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0M"..., 41) = 41 lseek(3, 143360, SEEK_SET) = 143360 read(3, "IN\241\377\2\1\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\0\0\0\0\0\0\0\0\0006"..., 41) = 41 lseek(3, 147456, SEEK_SET) = 147456 read(3, "IN\201\244\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\0\0\0\0\0\0\0\0\0@"..., 41) = 41 lseek(3, 151552, SEEK_SET) = 151552 read(3, "INA\355\2\1\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0i"..., 41) = 41 lseek(3, 155648, SEEK_SET) = 155648 read(3, "INA\355\2\1\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0P"..., 41) = 41 lseek(3, 159744, SEEK_SET) = 159744 read(3, "INA\355\2\1\0\0\0\0\3\350\0\0\3\350\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0U"..., 41) = 41 lseek(3, 163840, SEEK_SET) = 163840 read(3, "INA\355\2\2\0\0\0\0\3\350\0\0\0d\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\36"..., 41) = 41 lseek(3, 167936, SEEK_SET) = 167936 read(3, "INA\355\2\1\0\0\0\0\3\350\0\0\3\350\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\32"..., 41) = 41 lseek(3, 172032, SEEK_SET) = 172032 read(3, "INA\355\2\1\0\0\0\0\3\350\0\0\3\350\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\31"..., 41) = 41 lseek(3, 176128, SEEK_SET) = 176128 read(3, "INA\355\2\1\0\0\0\0\3\350\0\0\0d\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\31"..., 41) = 41 lseek(3, 180224, SEEK_SET) = 180224 read(3, "IN\201\244\2\2\0\0\0\0\3\350\0\0\3\350\0\0\0\16\0\0\0\0\0\0\0\0\0\0\0\34"..., 41) = 41 lseek(3, 184320, SEEK_SET) = 184320 read(3, "INA\350\2\1\0\0\0\0\0\0\0\0\0#\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0M"..., 41) = 41 lseek(3, 188416, SEEK_SET) = 188416 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 192512, SEEK_SET) = 192512 read(3, "CI\201\244\2\2\1\330\377\377\rX\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\2"..., 41) = 41 lseek(3, 196608, SEEK_SET) = 196608 read(3, "\0\0\0\0\10\265\355\233\10patterns\0\0\0\0\0\2\0\0\0\0\0\20\245u\243"..., 41) = 41 lseek(3, 200704, SEEK_SET) = 200704 read(3, "IN\201\244\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0008"..., 41) = 41 lseek(3, 204800, SEEK_SET) = 204800 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 208896, SEEK_SET) = 208896 read(3, "radient-select-next\")\n (m"..., 41) = 41 lseek(3, 212992, SEEK_SET) = 212992 read(3, " KDE4WorkspaceConfigVersion.cmak"..., 41) = 41 lseek(3, 217088, SEEK_SET) = 217088 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 221184, SEEK_SET) = 221184 read(3, "\0\0\0\0\1%\24\245\23libvex_trc_values.h\0\0\2\0"..., 41) = 41 lseek(3, 225280, SEEK_SET) = 225280 read(3, ";\n template <\n typenam"..., 41) = 41 lseek(3, 229376, SEEK_SET) = 229376 read(3, "\0\0\0\0\30S\17\201\5omp.h\2\0\0\0\0\0\30S\17\202\vpmmintr"..., 41) = 41 lseek(3, 233472, SEEK_SET) = 233472 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 237568, SEEK_SET) = 237568 read(3, "`Q\371\364\315\242\307T\254W\234*\342\225\3745s\224\330N\256\227\361\335\314ow\352;\33w\346"..., 41) = 41 lseek(3, 241664, SEEK_SET) = 241664 read(3, "\246\250\355\371\203Z\357\240\thgz\24bbS3A(=@\251\221S\6\\\316\346P\246\312\375"..., 41) = 41 lseek(3, 245760, SEEK_SET) = 245760 read(3, "\265P\212\3574F\4\31\1\202!\4\7\222\205\204\345\r\237\211\t\37\365\360)\0<\274\362\273z\320"..., 41) = 41 lseek(3, 249856, SEEK_SET) = 249856 read(3, "sPPC.def\300\270\252\333\0\210\1\360\377\377\0(\0\1\30\202\27.Builti"..., 41) = 41 lseek(3, 253952, SEEK_SET) = 253952 read(3, "bleCode.h.O9fYB4\0\0\0\0\0\0\1\360\0\0\0\0\0\1\27\257"..., 41) = 41 lseek(3, 258048, SEEK_SET) = 258048 read(3, "ON_GENTOO \"/usr/bin/kconfig_comp"..., 41) = 41 lseek(3, 393216, SEEK_SET) = 393216 read(3, "\0\0\0\0\3\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\2\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 397312, SEEK_SET) = 397312 read(3, "\0\0\0\201\376\0\0\200\177w3\213T$\20\211\327\201\347\377\377\377\177\201\377\0\0\200\177w\0371"..., 41) = 41 lseek(3, 401408, SEEK_SET) = 401408 read(3, "\n\n- Complex representations of i"..., 41) = 41 lseek(3, 405504, SEEK_SET) = 405504 read(3, "taglib\n\n*acoustid-fingerprinter-"..., 41) = 41 lseek(3, 409600, SEEK_SET) = 409600 read(3, " content=\"cluster software, Inte"..., 41) = 41 lseek(3, 413696, SEEK_SET) = 413696 read(3, "sqlite\1\360\0\0\0\0\20[J\345\tsecmod.db\0\0\0\0\2\10"..., 41) = 41 lseek(3, 417792, SEEK_SET) = 417792 read(3, "\0\35\324E\0\0\0\5\0\35\324d\0\0\0\5\0\35\341o\0\0\0\5\0\35\341\204\0\0\0\5"..., 41) = 41 lseek(3, 421888, SEEK_SET) = 421888 read(3, "\10tgmath.h\0\0\0\0\0\0000\0\0\0\0\30 \r\223\vtmmintr"..., 41) = 41 lseek(3, 425984, SEEK_SET) = 425984 read(3, " coder module is defined in this"..., 41) = 41 lseek(3, 430080, SEEK_SET) = 430080 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 434176, SEEK_SET) = 434176 read(3, "ollowing disclaimer in the\n * "..., 41) = 41 lseek(3, 438272, SEEK_SET) = 438272 read(3, "he implied warranty of\n MERCHA"..., 41) = 41 lseek(3, 442368, SEEK_SET) = 442368 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 446464, SEEK_SET) = 446464 read(3, "r and have the text on the same "..., 41) = 41 lseek(3, 450560, SEEK_SET) = 450560 read(3, "rs are strongly encouraged to\nco"..., 41) = 41 lseek(3, 454656, SEEK_SET) = 454656 read(3, "he @code{gfc_error_flag_test} fu"..., 41) = 41 lseek(3, 458752, SEEK_SET) = 458752 read(3, "amp{==|} and\n@samp{--|} mean @co"..., 41) = 41 lseek(3, 462848, SEEK_SET) = 462848 read(3, "sed to variables), at the very b"..., 41) = 41 lseek(3, 466944, SEEK_SET) = 466944 read(3, "structor} member.\n\n\n@subsection "..., 41) = 41 lseek(3, 471040, SEEK_SET) = 471040 read(3, "-------\n\nFor specific bindings ("..., 41) = 41 lseek(3, 475136, SEEK_SET) = 475136 read(3, "de{tb_uop_root}\nsymtree exactly "..., 41) = 41 lseek(3, 479232, SEEK_SET) = 479232 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 483328, SEEK_SET) = 483328 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 41) = 41 lseek(3, 487424, SEEK_SET) = 487424 read(3, "ta:\t0\nUndoDepth:\t12\nUpdateFlex:\t"..., 41) = 41 lseek(3, 491520, SEEK_SET) = 491520 read(3, "mma_q\n#include X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1CD2729DF8 for ; Mon, 6 May 2013 15:49:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 01E66304053 for ; Mon, 6 May 2013 13:49:25 -0700 (PDT) X-ASG-Debug-ID: 1367873361-04cb6c53a401080001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id nMt14XWF4wXRon5w for ; Mon, 06 May 2013 13:49:21 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 45D2663BEEBD; Mon, 6 May 2013 15:49:21 -0500 (CDT) Message-ID: <51881750.3090309@sandeen.net> Date: Mon, 06 May 2013 15:49:20 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Markus Trippelsdorf CC: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <20130506195521.GB503@x4> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367873361 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 2:55 PM, Markus Trippelsdorf wrote: > On 2013.05.06 at 14:41 -0500, Eric Sandeen wrote: >> On 5/6/13 2:26 PM, Markus Trippelsdorf wrote: >>> On 2013.05.06 at 14:14 -0500, Eric Sandeen wrote: >>>> On 5/6/13 1:30 PM, Markus Trippelsdorf wrote: >>>>> On 2013.05.06 at 12:04 -0500, Eric Sandeen wrote: >>>>>> On 5/6/13 6:27 AM, Markus Trippelsdorf wrote: >>>>>>> Today I accidentally tried to mount my backup disk at /dev/sdc instead >>>>>>> of /dev/sdc1 and this is what happened: >>>>>>> >>>>>>> ... >>>>>>> EXT4-fs (sdc): VFS: Can't find ext4 filesystem >>>>>>> FAT-fs (sdc): bogus number of reserved sectors >>>>>>> FAT-fs (sdc): Can't find a valid FAT filesystem >>>>>>> FAT-fs (sdc): bogus number of reserved sectors >>>>>>> FAT-fs (sdc): Can't find a valid FAT filesystem >>>>>>> ISOFS: Unable to identify CD-ROM format. >>>>>>> XFS (sdc): bad magic number >>>>>>> ffff8800db620000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>>>> ffff8800db620010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>>>> ffff8800db620020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>>>> ffff8800db620030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >>>>>>> XFS (sdc): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff8119e5cd >>>>>> >>>>>> This seems to be a recent regression. >>>>>> >>>>>> Comments above xfs_sb_quiet_read_verify() indicate that this behavior is >>>>>> to be avoided: >>>>>> >>>>>> * We may be probed for a filesystem match, so we may not want to emit >>>>>> * messages when the superblock buffer is not actually an XFS superblock. >>>>>> >>>>>> and it checks for proper magic prior to all the chattiness above int >>>>>> that function. >>>>>> >>>>>> The superblock read is suposed to choose whether to be noisy or not, >>>>>> in xfs_readsb(): >>>>>> >>>>> >>>>> The following patch fixes the issue for me: >>>>> >>>>> >>>>> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c >>>>> index f6bfbd7..db8f27f 100644 >>>>> --- a/fs/xfs/xfs_mount.c >>>>> +++ b/fs/xfs/xfs_mount.c >>>>> @@ -721,6 +721,11 @@ xfs_sb_read_verify( >>>>> } >>>>> error = xfs_sb_verify(bp); >>>>> >>>>> + if (error == XFS_ERROR(EWRONGFS)) { >>>>> + xfs_buf_ioerror(bp, EWRONGFS); >>>>> + return; >>>>> + } >>>>> + >>>>> out_error: >>>>> if (error) { >>>>> XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); >>>> >>>> That might make sense, I don't think we need the loudness for EWRONGFS >>>> no matter how we got there. >>>> >>>> But: >>>> >>>> Out of curiosity, what was the actual mount command you used? It seems like >>>> the auto-probing should have set the MS_SILENT flag to avoid this in >>>> the first place, i.e. we should have gone down the quiet path >>>> (xfs_sb_quiet_read_verify) and avoided this altogether. >>>> >>>> How do you reproduce this? >>> >>> I power on the drive and simply run: >>> >>> # mount /dev/sdc /mnt >> >> Interesting. On my test box, that never even issues the mount syscall, >> because it uses blkid (I guess) to probe, and finds nothing. >> >> Which util-linux do you have? > > v2.21.2 > >> An strace -v of the mount command might be useful. > > execve("/bin/mount", ["mount", "/dev/sdc", "/mnt"], [/* 44 vars */]) = 0 ... > stat("/sbin/mount.ext4", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs.d/mount.ext4", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs/mount.ext4", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/usr/sbin/mount.ext4", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > mount("/dev/sdc", "/mnt", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > stat("/sbin/mount.vfat", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs.d/mount.vfat", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs/mount.vfat", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/usr/sbin/mount.vfat", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > mount("/dev/sdc", "/mnt", "vfat", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > stat("/sbin/mount.msdos", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs.d/mount.msdos", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs/mount.msdos", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/usr/sbin/mount.msdos", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > mount("/dev/sdc", "/mnt", "msdos", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > stat("/sbin/mount.iso9660", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs.d/mount.iso9660", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs/mount.iso9660", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/usr/sbin/mount.iso9660", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > mount("/dev/sdc", "/mnt", "iso9660", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > stat("/sbin/mount.xfs", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs.d/mount.xfs", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/sbin/fs/mount.xfs", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > stat("/usr/sbin/mount.xfs", 0x7fff283f7550) = -1 ENOENT (No such file or directory) > mount("/dev/sdc", "/mnt", "xfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) Interesting, so it really does try to mount by successive fs types. I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) I'll take a look. -Eric From sandeen@sandeen.net Mon May 6 16:48:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 54CD229DF8 for ; Mon, 6 May 2013 16:48:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E5CC7AC002 for ; Mon, 6 May 2013 14:48:44 -0700 (PDT) X-ASG-Debug-ID: 1367876920-04bdf0422401650001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id jTHFDGAE2LzHNiit for ; Mon, 06 May 2013 14:48:40 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 1AA8463B97E2; Mon, 6 May 2013 16:48:40 -0500 (CDT) Message-ID: <51882537.6070904@sandeen.net> Date: Mon, 06 May 2013 16:48:39 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Markus Trippelsdorf CC: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <51881750.3090309@sandeen.net> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367876920 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130202 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 3:49 PM, Eric Sandeen wrote: ... > Interesting, so [mount] really does try to mount by successive fs types. > > I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) > > I'll take a look. Just to satisfy my curiosity: commit c6c98f93f5e4b3fb9a8b51ed2ef9967793df7b1c Author: Karel Zak Date: Mon Mar 15 13:46:43 2010 +0100 mount: report ambivalent FS detection, improve brute force detection The ambivalent probing result should be properly reported and user should be informed that the problem is possible to bypass by "-t " or resolved by wipefs(8). The mount(8) command uses a brute force stage (calls mount(2) for all /{proc,etc}/fylesystems) if there is not any other way how to detect the filesystem type. The brute force stage should not be restricted by libblkid. It's possible that libblkid is not able to detect slightly corrupted filesystem, but kernel is able to mount such filesystem. Note that the brute force stage should not be used if libblkid returns ambivalent probing result. In this case user's intervention is required (e.g. mount -t ). Reported-by: Mike Frysinger Signed-off-by: Karel Zak So we're getting into xfs mount with an actual "-t xfs" equivalent, and not going down the "silent" paths. I'll send the patch. Thanks, -Eric From sandeen@sandeen.net Mon May 6 16:53:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ED17629DF8 for ; Mon, 6 May 2013 16:53:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D37E9304064 for ; Mon, 6 May 2013 14:53:51 -0700 (PDT) X-ASG-Debug-ID: 1367877230-04bdf0422501910001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id sOjgph45J6vQOAtQ for ; Mon, 06 May 2013 14:53:50 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 56A7063B97E2; Mon, 6 May 2013 16:53:50 -0500 (CDT) Message-ID: <5188266E.9020705@sandeen.net> Date: Mon, 06 May 2013 16:53:50 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Markus Trippelsdorf CC: xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <20130506192629.GA503@x4> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367877230 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130204 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 2:26 PM, Markus Trippelsdorf wrote: ... > OK, makes sense. Thanks. > I like your patch better, so lets use it. > Actually - why don't you go ahead & formally submit your patch with my suggested changes; it was your good idea to use EWRONGFS. :) -Eric From david@fromorbit.com Mon May 6 19:27:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CA23829DF8 for ; Mon, 6 May 2013 19:27:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C4D748F8050 for ; Mon, 6 May 2013 17:27:02 -0700 (PDT) X-ASG-Debug-ID: 1367886419-04cbb05fe308870001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 3jFxL8fWCGGj1VpC for ; Mon, 06 May 2013 17:26:59 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmERAFlJiFF5LGwY/2dsb2JhbABGCoMHgwq3G4UWBAGBCBd0gh8BAQQBHhwcHgUFCwgDFAQJJQ8FJQMhE4gGBbJGjjMWjV8fgR0Hg1MDly2KEocjgx8qgS8k Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 09:53:16 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZVgY-0005aT-JV; Tue, 07 May 2013 10:23:14 +1000 Date: Tue, 7 May 2013 10:23:14 +1000 From: Dave Chinner To: Eric Sandeen Cc: Markus Trippelsdorf , xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130507002314.GM19978@dastard> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51882537.6070904@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367886419 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130214 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 06, 2013 at 04:48:39PM -0500, Eric Sandeen wrote: > On 5/6/13 3:49 PM, Eric Sandeen wrote: > ... > > > Interesting, so [mount] really does try to mount by successive fs types. > > > > I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) > > > > I'll take a look. > > Just to satisfy my curiosity: > > commit c6c98f93f5e4b3fb9a8b51ed2ef9967793df7b1c > Author: Karel Zak > Date: Mon Mar 15 13:46:43 2010 +0100 > > mount: report ambivalent FS detection, improve brute force detection > > The ambivalent probing result should be properly reported and user > should be informed that the problem is possible to bypass by "-t > " or resolved by wipefs(8). > > The mount(8) command uses a brute force stage (calls mount(2) for all > /{proc,etc}/fylesystems) if there is not any other way how to detect > the filesystem type. The brute force stage should not be restricted by > libblkid. It's possible that libblkid is not able to detect slightly > corrupted filesystem, but kernel is able to mount such filesystem. > > Note that the brute force stage should not be used if libblkid returns > ambivalent probing result. In this case user's intervention is required > (e.g. mount -t ). > > Reported-by: Mike Frysinger > Signed-off-by: Karel Zak > > So we're getting into xfs mount with an actual "-t xfs" equivalent, > and not going down the "silent" paths. That's just completely broken mount behaviour. Probing is supposed to be *silent*, and this is just downright obnxious. Here's what I get in my log after doing this: # dd if=/dev/zero of=/dev/vdb bs=512 count=1 # blkid -g # mount /dev/vdb /mnt/scratch/ mount: you must specify the filesystem type $ dmesg ...... [83182.775467] REISERFS warning (device vdb): sh-2021 reiserfs_fill_super: can not find reiserfs on vdb [83182.778473] EXT3-fs (vdb): error: can't find ext3 filesystem on dev vdb. [83182.781135] EXT2-fs (vdb): error: can't find an ext2 filesystem on dev vdb. [83182.783524] EXT4-fs (vdb): VFS: Can't find ext4 filesystem [83182.787392] cramfs: wrong magic [83182.788926] SQUASHFS error: Can't find a SQUASHFS superblock on vdb [83182.791150] VFS: Can't find a Minix filesystem V1 | V2 | V3 on device vdb. [83182.793737] FAT-fs (vdb): bogus number of reserved sectors [83182.795202] FAT-fs (vdb): Can't find a valid FAT filesystem [83182.797268] FAT-fs (vdb): bogus number of reserved sectors [83182.798984] FAT-fs (vdb): Can't find a valid FAT filesystem [83182.801236] BFS-fs: bfs_fill_super(): No BFS filesystem on vdb (magic=00000000) [83182.846555] ISOFS: Unable to identify CD-ROM format. [83182.849136] hfs: unable to find HFS+ superblock [83182.851164] hfs: can't find a HFS filesystem on dev vdb. [83182.853204] vxfs: WRONG superblock magic [83182.856855] VFS: unable to find oldfs superblock on device vdb [83182.858930] VFS: could not find a valid V7 on vdb. [83182.860938] NTFS-fs error (device vdb): read_ntfs_boot_sector(): Primary boot sector is invalid. [83182.863247] NTFS-fs error (device vdb): read_ntfs_boot_sector(): Mount option errors=recover not used. Aborting without trying to recover. [83182.866563] NTFS-fs error (device vdb): ntfs_fill_super(): Not an NTFS volume. [83182.873922] AFFS: No valid root block on device vdb [83182.875697] VFS: Can't find a romfs filesystem on dev vdb. [83182.877823] qnx4: wrong fsid in superblock. [83182.884286] UDF-fs: warning (device vdb): udf_load_vrs: No VRS found [83182.886217] UDF-fs: Rescanning with blocksize 2048 [83182.891965] UDF-fs: warning (device vdb): udf_load_vrs: No VRS found [83182.893730] UDF-fs: warning (device vdb): udf_fill_super: No partition found (1) [83182.896216] omfs: Invalid superblock (0) [83182.898937] XFS (vdb): bad magic number [83182.900150] ffff88007bbce000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ [83182.902676] ffff88007bbce010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ [83182.905281] ffff88007bbce020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ [83182.907845] ffff88007bbce030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ [83182.910559] XFS (vdb): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff814645e5 [83182.910559] [83182.914377] Pid: 1064, comm: kworker/0:1H Not tainted 3.9.0-rc8-dgc+ #575 [83182.916499] Call Trace: [83182.917245] [] xfs_error_report+0x3f/0x50 [83182.918762] [] ? xfs_buf_iodone_work+0xc5/0xf0 [83182.920113] [] xfs_corruption_error+0x5e/0x90 [83182.921351] [] xfs_sb_read_verify+0x11a/0x130 [83182.922692] [] ? xfs_buf_iodone_work+0xc5/0xf0 [83182.923972] [] ? finish_task_switch+0x65/0x100 [83182.925343] [] xfs_buf_iodone_work+0xc5/0xf0 [83182.926634] [] process_one_work+0x170/0x400 [83182.927832] [] worker_thread+0x116/0x390 [83182.929116] [] ? busy_worker_rebind_fn+0xb0/0xb0 [83182.930460] [] kthread+0xd8/0xe0 [83182.931469] [] ? kthread_create_on_node+0x140/0x140 [83182.932921] [] ret_from_fork+0x7c/0xb0 [83182.934047] [] ? kthread_create_on_node+0x140/0x140 [83182.935489] XFS (vdb): Corruption detected. Unmount and run xfs_repair [83182.937045] XFS (vdb): SB validate failed with error 22. [83182.940181] NILFS: Can't find nilfs on dev vdb. [83182.941321] BeFS(vdb): No write support. Marking filesystem read-only [83182.943036] BeFS(vdb): invalid magic header [83182.946526] (mount,23815,1):ocfs2_fill_super:1039 ERROR: superblock probe failed! [83182.948515] (mount,23815,1):ocfs2_fill_super:1230 ERROR: status = -22 [83182.951606] GFS2: not a GFS2 filesystem [83182.952898] GFS2: gfs2 mount does not exist [83182.954425] F2FS-fs (vdb): Magic Mismatch, valid(0xf2f52010) - read(0x49474158) [83182.956540] F2FS-fs (vdb): Can't find a valid F2FS filesystem in first superblock [83182.959044] F2FS-fs (vdb): Magic Mismatch, valid(0xf2f52010) - read(0x0) [83182.960894] F2FS-fs (vdb): Can't find a valid F2FS filesystem in second superblock I've removed logfs from my kernels because this probing causes logfs to oops the kernel... > I'll send the patch. I think that mount needs fixing, not XFS. mount needs to be doing silent mounts when doing this brute forcing, not noisy, explicit mounts that we expect to throw errors if there is a problem. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 6 19:35:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BF74729DF8 for ; Mon, 6 May 2013 19:35:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B35EE8F8035 for ; Mon, 6 May 2013 17:35:05 -0700 (PDT) X-ASG-Debug-ID: 1367886903-04cbb05fe308fa0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id zJSyVwXOp6FAfyGL for ; Mon, 06 May 2013 17:35:03 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Al8RALpLiFF5LGwY/2dsb2JhbABQgweDCrcchRYEAYEIF3SCHwEBBTocHgUQCAMUBAklDwUlAyETiAuyRo41Fo1+gR0Hg1MDly2KEocjgx8q Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 10:04:37 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZVrY-0005bb-IC; Tue, 07 May 2013 10:34:36 +1000 Date: Tue, 7 May 2013 10:34:36 +1000 From: Dave Chinner To: Eric Sandeen Cc: Markus Trippelsdorf , xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130507003436.GN19978@dastard> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> <20130507002314.GM19978@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130507002314.GM19978@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367886903 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130214 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 07, 2013 at 10:23:14AM +1000, Dave Chinner wrote: > On Mon, May 06, 2013 at 04:48:39PM -0500, Eric Sandeen wrote: > > On 5/6/13 3:49 PM, Eric Sandeen wrote: > > ... > > > > > Interesting, so [mount] really does try to mount by successive fs types. > > > > > > I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) > > > > > > I'll take a look. > > > > Just to satisfy my curiosity: > > > > commit c6c98f93f5e4b3fb9a8b51ed2ef9967793df7b1c > > Author: Karel Zak > > Date: Mon Mar 15 13:46:43 2010 +0100 > > > > mount: report ambivalent FS detection, improve brute force detection > > > > The ambivalent probing result should be properly reported and user > > should be informed that the problem is possible to bypass by "-t > > " or resolved by wipefs(8). > > > > The mount(8) command uses a brute force stage (calls mount(2) for all > > /{proc,etc}/fylesystems) if there is not any other way how to detect > > the filesystem type. The brute force stage should not be restricted by > > libblkid. It's possible that libblkid is not able to detect slightly > > corrupted filesystem, but kernel is able to mount such filesystem. > > > > Note that the brute force stage should not be used if libblkid returns > > ambivalent probing result. In this case user's intervention is required > > (e.g. mount -t ). > > > > Reported-by: Mike Frysinger > > Signed-off-by: Karel Zak > > > > So we're getting into xfs mount with an actual "-t xfs" equivalent, > > and not going down the "silent" paths. > > That's just completely broken mount behaviour. Probing is supposed > to be *silent*, and this is just downright obnxious. Here's what I > get in my log after doing this: > > # dd if=/dev/zero of=/dev/vdb bs=512 count=1 > # blkid -g > # mount /dev/vdb /mnt/scratch/ > mount: you must specify the filesystem type > $ dmesg > ...... > [83182.775467] REISERFS warning (device vdb): sh-2021 reiserfs_fill_super: can not find reiserfs on vdb > [83182.778473] EXT3-fs (vdb): error: can't find ext3 filesystem on dev vdb. > [83182.781135] EXT2-fs (vdb): error: can't find an ext2 filesystem on dev vdb. > [83182.783524] EXT4-fs (vdb): VFS: Can't find ext4 filesystem .... BTW, strace indicates that MS_SILENT is not being used during brute force mounts: # strace -vx mount /dev/vdb /mnt/scratch/ 2>&1 |grep ^mount mount("/dev/vdb", "/mnt/scratch/", "reiserfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) mount("/dev/vdb", "/mnt/scratch/", "ext3", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) mount("/dev/vdb", "/mnt/scratch/", "ext2", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) mount("/dev/vdb", "/mnt/scratch/", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) .... So this really looks like a bug in mount, not the filesystem handling of slient mounts... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Mon May 6 19:38:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 63EB929DF8 for ; Mon, 6 May 2013 19:38:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3F60130406A for ; Mon, 6 May 2013 17:38:25 -0700 (PDT) X-ASG-Debug-ID: 1367887104-04bdf0422507910001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id gL9wJGCbvM5F3euC for ; Mon, 06 May 2013 17:38:24 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 26D5563BEEBD; Mon, 6 May 2013 19:38:24 -0500 (CDT) Message-ID: <51884CFF.1010208@sandeen.net> Date: Mon, 06 May 2013 19:38:23 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Markus Trippelsdorf , xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> <20130507002314.GM19978@dastard> <20130507003436.GN19978@dastard> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 In-Reply-To: <20130507003436.GN19978@dastard> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367887104 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130214 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/6/13 7:34 PM, Dave Chinner wrote: > On Tue, May 07, 2013 at 10:23:14AM +1000, Dave Chinner wrote: >> On Mon, May 06, 2013 at 04:48:39PM -0500, Eric Sandeen wrote: >>> On 5/6/13 3:49 PM, Eric Sandeen wrote: >>> ... >>> >>>> Interesting, so [mount] really does try to mount by successive fs types. >>>> >>>> I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) >>>> >>>> I'll take a look. >>> >>> Just to satisfy my curiosity: >>> >>> commit c6c98f93f5e4b3fb9a8b51ed2ef9967793df7b1c >>> Author: Karel Zak >>> Date: Mon Mar 15 13:46:43 2010 +0100 >>> >>> mount: report ambivalent FS detection, improve brute force detection >>> >>> The ambivalent probing result should be properly reported and user >>> should be informed that the problem is possible to bypass by "-t >>> " or resolved by wipefs(8). >>> >>> The mount(8) command uses a brute force stage (calls mount(2) for all >>> /{proc,etc}/fylesystems) if there is not any other way how to detect >>> the filesystem type. The brute force stage should not be restricted by >>> libblkid. It's possible that libblkid is not able to detect slightly >>> corrupted filesystem, but kernel is able to mount such filesystem. >>> >>> Note that the brute force stage should not be used if libblkid returns >>> ambivalent probing result. In this case user's intervention is required >>> (e.g. mount -t ). >>> >>> Reported-by: Mike Frysinger >>> Signed-off-by: Karel Zak >>> >>> So we're getting into xfs mount with an actual "-t xfs" equivalent, >>> and not going down the "silent" paths. >> >> That's just completely broken mount behaviour. Probing is supposed >> to be *silent*, and this is just downright obnxious. Here's what I >> get in my log after doing this: >> >> # dd if=/dev/zero of=/dev/vdb bs=512 count=1 >> # blkid -g >> # mount /dev/vdb /mnt/scratch/ >> mount: you must specify the filesystem type >> $ dmesg >> ...... >> [83182.775467] REISERFS warning (device vdb): sh-2021 reiserfs_fill_super: can not find reiserfs on vdb >> [83182.778473] EXT3-fs (vdb): error: can't find ext3 filesystem on dev vdb. >> [83182.781135] EXT2-fs (vdb): error: can't find an ext2 filesystem on dev vdb. >> [83182.783524] EXT4-fs (vdb): VFS: Can't find ext4 filesystem > .... > > BTW, strace indicates that MS_SILENT is not being used during brute > force mounts: > > # strace -vx mount /dev/vdb /mnt/scratch/ 2>&1 |grep ^mount > mount("/dev/vdb", "/mnt/scratch/", "reiserfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > mount("/dev/vdb", "/mnt/scratch/", "ext3", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > mount("/dev/vdb", "/mnt/scratch/", "ext2", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > mount("/dev/vdb", "/mnt/scratch/", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > .... > > So this really looks like a bug in mount, not the filesystem handling > of slient mounts... Hm, good point, I forgot that mount could set MS_SILENT. . . But still: Do we really *ever* need this level of info when xfs discovers EWRONGFS? -Eric > Cheers, > > Dave. > From david@fromorbit.com Mon May 6 19:57:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0F9D729DF8 for ; Mon, 6 May 2013 19:57:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id CF714304071 for ; Mon, 6 May 2013 17:57:11 -0700 (PDT) X-ASG-Debug-ID: 1367888229-04bdf0422608270001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id bGLRoEJO7srhpNiN for ; Mon, 06 May 2013 17:57:09 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Al8RAGlQiFF5LGwY/2dsb2JhbABQgweDCrcahRYEAYEJF3SCHwEBBTocHgUQCAMUBAklDwUlAyETiAuyT447Fo1+gR0Hg1MDly2KEocjgx8q Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 10:24:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZWAq-0005dY-78; Tue, 07 May 2013 10:54:32 +1000 Date: Tue, 7 May 2013 10:54:32 +1000 From: Dave Chinner To: Eric Sandeen Cc: Markus Trippelsdorf , xfs@oss.sgi.com Subject: Re: Internal error xfs_sb_read_verify at line 726 Message-ID: <20130507005432.GO19978@dastard> X-ASG-Orig-Subj: Re: Internal error xfs_sb_read_verify at line 726 References: <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> <20130507002314.GM19978@dastard> <20130507003436.GN19978@dastard> <51884CFF.1010208@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51884CFF.1010208@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367888229 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 06, 2013 at 07:38:23PM -0500, Eric Sandeen wrote: > On 5/6/13 7:34 PM, Dave Chinner wrote: > > On Tue, May 07, 2013 at 10:23:14AM +1000, Dave Chinner wrote: > >> On Mon, May 06, 2013 at 04:48:39PM -0500, Eric Sandeen wrote: > >>> On 5/6/13 3:49 PM, Eric Sandeen wrote: > >>> ... > >>> > >>>> Interesting, so [mount] really does try to mount by successive fs types. > >>>> > >>>> I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) > >>>> > >>>> I'll take a look. > >>> > >>> Just to satisfy my curiosity: > >>> > >>> commit c6c98f93f5e4b3fb9a8b51ed2ef9967793df7b1c > >>> Author: Karel Zak > >>> Date: Mon Mar 15 13:46:43 2010 +0100 > >>> > >>> mount: report ambivalent FS detection, improve brute force detection > >>> > >>> The ambivalent probing result should be properly reported and user > >>> should be informed that the problem is possible to bypass by "-t > >>> " or resolved by wipefs(8). > >>> > >>> The mount(8) command uses a brute force stage (calls mount(2) for all > >>> /{proc,etc}/fylesystems) if there is not any other way how to detect > >>> the filesystem type. The brute force stage should not be restricted by > >>> libblkid. It's possible that libblkid is not able to detect slightly > >>> corrupted filesystem, but kernel is able to mount such filesystem. > >>> > >>> Note that the brute force stage should not be used if libblkid returns > >>> ambivalent probing result. In this case user's intervention is required > >>> (e.g. mount -t ). > >>> > >>> Reported-by: Mike Frysinger > >>> Signed-off-by: Karel Zak > >>> > >>> So we're getting into xfs mount with an actual "-t xfs" equivalent, > >>> and not going down the "silent" paths. > >> > >> That's just completely broken mount behaviour. Probing is supposed > >> to be *silent*, and this is just downright obnxious. Here's what I > >> get in my log after doing this: > >> > >> # dd if=/dev/zero of=/dev/vdb bs=512 count=1 > >> # blkid -g > >> # mount /dev/vdb /mnt/scratch/ > >> mount: you must specify the filesystem type > >> $ dmesg > >> ...... > >> [83182.775467] REISERFS warning (device vdb): sh-2021 reiserfs_fill_super: can not find reiserfs on vdb > >> [83182.778473] EXT3-fs (vdb): error: can't find ext3 filesystem on dev vdb. > >> [83182.781135] EXT2-fs (vdb): error: can't find an ext2 filesystem on dev vdb. > >> [83182.783524] EXT4-fs (vdb): VFS: Can't find ext4 filesystem > > .... > > > > BTW, strace indicates that MS_SILENT is not being used during brute > > force mounts: > > > > # strace -vx mount /dev/vdb /mnt/scratch/ 2>&1 |grep ^mount > > mount("/dev/vdb", "/mnt/scratch/", "reiserfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext3", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext2", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > .... > > > > So this really looks like a bug in mount, not the filesystem handling > > of slient mounts... > > Hm, good point, I forgot that mount could set MS_SILENT. . . > > But still: > > Do we really *ever* need this level of info when xfs discovers EWRONGFS? Say, like when the autoprobe mount fails, and so you do a mount -t xfs to find out why it failed? Perhaps the magic number is just fine (so blkid OKs it) and so the silent mount turns into a proper "noisy" mount and then we find a version number in the superblock that is not supported. That'll also throw a EWRONGFS error, and in that case the extra output will tell use exactly what went wrong. Besides, the quiet verify path does not do an initial CRC check, and so if we do get a superblock CRC failure, it will dump something like this anyway.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 6 20:13:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C993529DF8 for ; Mon, 6 May 2013 20:13:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C4A7B8F8037 for ; Mon, 6 May 2013 18:13:00 -0700 (PDT) X-ASG-Debug-ID: 1367889175-04cb6c53a409d50001-w1Z2WR Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Pg4MYqcWwikPhtNr for ; Mon, 06 May 2013 18:12:56 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmYRAABUiFF5LGwY/2dsb2JhbAA2BBaDBzeCU7cbhRYEAYEJF3SCHwEBBTocIxAIAxgJChsPBSUDIROICw0zshaOOxaNUR4PgR0Hg1MDly2RNYMfKoEu Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 10:42:55 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZWSc-0005fy-II; Tue, 07 May 2013 11:12:54 +1000 Date: Tue, 7 May 2013 11:12:54 +1000 From: Dave Chinner To: Bernd Schubert Cc: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault Message-ID: <20130507011254.GP19978@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5187A663.707@itwm.fraunhofer.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367889175 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: > On 05/06/2013 02:28 PM, Dave Chinner wrote: > >On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: > >>And anpther protection fault, this time with 3.9.0. Always happens > >>on one of the servers. Its ECC memory, so I don't suspect a faulty > >>memory bank. Going to fsck now- > > > >http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > > Isn't that a bit overhead? And I can't provide /proc/meminfo and > others, as this issue causes a kernel panic a few traces later. Provide what information you can. Without knowing a single thing about your hardware, storage config and workload, I can't help you at all. You're asking me to find a needle in a haystack blindfolded and with both hands tied behind my back.... Stuff like /proc/meminfo doesn't have to be provided from exactly the time of the crash - it's just the simplest way to find out how much RAM you have in the machine, so a dump from whenever the machine is up and running the workload is fine. Other information we ask for (e.g. capturing the output of `vmstat 5` as suggested in the FAQ) gives us the runtime variation of memory usage and easy to capture right up to the failure point.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From bounce@loveourshirts.com Mon May 6 20:15:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=HTML_MESSAGE,LOW_PRICE, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0CF3729DF8 for ; Mon, 6 May 2013 20:15:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id ED4B68F8037 for ; Mon, 6 May 2013 18:15:51 -0700 (PDT) X-ASG-Debug-ID: 1367889349-04cb6c53a309f80001-NocioJ Received: from server1.loveourshirts.com (ip-129-121-177-98.local [129.121.177.98]) by cuda.sgi.com with ESMTP id S7tVLI4rCzjnLpEB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 18:15:50 -0700 (PDT) X-Barracuda-Envelope-From: bounce@loveourshirts.com X-Barracuda-Apparent-Source-IP: 129.121.177.98 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=loveourshirts.com; s=default; h=Content-Type:MIME-Version:Message-ID:Reply-To:From:Date:Subject:To; bh=8CDgs4jFfUtaCnz3uJVr5hDmChWoARRVYaVeCmGr5UA=; b=TObJUQgOyCg2uHGzT9yUOp7N54KuJWUNNukF2IfS77TiIopOa9mJyVstl7sQnCD/+y3Xfo1DsOOlohCYfTMZp/VvZnV2ciRurolyWm7m4nqUHM6KCvGEoj8feyKhgllS1vOH5AHQOcAjpfXRY143iyVTfXhbWL9Gfm/+7jU2cgQ=; Received: from customsh by server1.loveourshirts.com with local (Exim 4.80) (envelope-from ) id 1UZWVQ-0004QN-Vz for xfs@oss.sgi.com; Mon, 06 May 2013 21:15:49 -0400 To: Xfs Subject: Custom Shirt Deals! Date: Mon, 6 May 2013 21:15:48 -0400 X-ASG-Orig-Subj: Custom Shirt Deals! From: Alicia Reply-To: Alicia Message-ID: X-Priority: 3 X-Mailer: PHPMailer (phpmailer.sourceforge.net) [version 2.0.4] MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_47b20da01d8772e3b236486d6bc900a8" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server1.loveourshirts.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [504 500] / [47 12] X-AntiAbuse: Sender Address Domain - loveourshirts.com X-Get-Message-Sender-Via: server1.loveourshirts.com: authenticated_id: customsh/from_h X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/customsh/public_html/joomla16/administrator/index.php X-Source-Dir: customshirtdeals.com:/public_html/joomla16/administrator X-Barracuda-Connect: ip-129-121-177-98.local[129.121.177.98] X-Barracuda-Start-Time: 1367889350 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.16 X-Barracuda-Spam-Status: No, SCORE=1.16 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_SA210e, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, LOW_PRICE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.16 LOW_PRICE BODY: Lowest Price -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BSF_SC5_SA210e Custom Rule SA210e --b1_47b20da01d8772e3b236486d6bc900a8 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Hey there! My name is Alicia and I’m just emailing to offer help with your event shirts. After nearly two decades of business, Custom Shirt Deals has screen printing reduced to a science. And we have the formula for success! Our unbelievably LOW PRICES+ FREE ARTWORK + FAST TURNAROUND TIME + FREE SHIPPING = happy customers. Our customers come back time and time again because they know that shirts are our specialty. The BONUS for you is that I'd work to ensure a smooth order from start to finish. Considering we only use name brand apparel, only create and/or suggest designs by highly skilled artists and only run top of the line equipment, you can bet on getting a product that surpasses your expectations when you order with us! To see what you should be paying for your shirts, feel free to call me or send me an email. Thanks, Alicia www.customshirtdeals.com ( http://www.customshirtdeals.com ) 1-563-387-8171 Unsubscribe ( http://customshirtdeals.com/joomla16/index.php?subid=51526&option=com_acymailing&ctrl=user&task=out&mailid=9&key=9d50b29d7a0015bc29c38e823d62b733 ) 1624 13th Ave S Clinton, IA 52732 --b1_47b20da01d8772e3b236486d6bc900a8 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit

Hey there!

My name is Alicia and I’m just emailing to offer help with your event shirts. After nearly two decades of business, Custom Shirt Deals has screen printing reduced to a science. And we have the formula for success! Our unbelievably LOW PRICES+ FREE ARTWORK + FAST TURNAROUND TIME + FREE SHIPPING = happy customers. Our customers come back time and time again because they know that shirts are our specialty.

The BONUS for you is that I'd work to ensure a smooth order from start to finish. Considering we only use name brand apparel, only create and/or suggest designs by highly skilled artists  and only run top of the line equipment, you can bet on getting a product that surpasses your expectations when you order with us!

To see what you should be paying for your shirts, feel free to call me or send me an email.

Thanks,

Alicia

www.customshirtdeals.com

1-563-387-8171


Unsubscribe 1624 13th Ave S Clinton, IA 52732

--b1_47b20da01d8772e3b236486d6bc900a8-- From linda7xdw@gmail.com Mon May 6 20:56:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3439629DF8 for ; Mon, 6 May 2013 20:56:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AF2F1AC009 for ; Mon, 6 May 2013 18:56:08 -0700 (PDT) X-ASG-Debug-ID: 1367891767-04cb6c53a10b820001-w1Z2WR Received: from mail-ob0-f179.google.com (mail-ob0-f179.google.com [209.85.214.179]) by cuda.sgi.com with ESMTP id izeKSXkcnTDOZ2vG (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 May 2013 18:56:07 -0700 (PDT) X-Barracuda-Envelope-From: linda7xdw@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.214.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.179] Received: by mail-ob0-f179.google.com with SMTP id xn12so42527obc.10 for ; Mon, 06 May 2013 18:56:07 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=PlMprhyr1mtX+OGM4sJEoxaXRoTv9UGuTbdQ/tBG8RE=; b=MOyesgP9XRyi8p0AJQV+/1ANnhswFxcCXNS5c5+LOBOYRBaPN2nhwIX5MEDcaT99Za +6RVAK5jvitezyD4uzVf6vvDSc64TWoUQjzL9lR3kW0mIaMaNBLI7s9vOIITuipHnted Sbt0xtyQ0u/Knl4+Ua27EYKt6S67v/uc8cp6Z+Z5ZXyYhMZAoN8CE+WAyR6z6IkB/zD4 YVBbjD7GwWOx5dmuR7sro4dHYUn1T5e1GgWiZI88AhFU1FYeZRhdLH4REjZ7zaX96Fdt yvB3KWCPcHLkUy+npxeISDSG0wSwv80Gpec2iSbUaxWSOy1QSE7ZBfDWGDtAK7XJ0mFH WrWw== MIME-Version: 1.0 X-Received: by 10.60.134.147 with SMTP id pk19mr10735oeb.4.1367891766634; Mon, 06 May 2013 18:56:06 -0700 (PDT) Received: by 10.182.105.201 with HTTP; Mon, 6 May 2013 18:56:06 -0700 (PDT) Date: Tue, 7 May 2013 09:56:06 +0800 Message-ID: Subject: dog supply From: 3U Pet Supply X-ASG-Orig-Subj: dog supply To: undisclosed-recipients:; Content-Type: multipart/alternative; boundary=047d7b41cc18d77c6704dc171e00 X-Barracuda-Connect: mail-ob0-f179.google.com[209.85.214.179] X-Barracuda-Start-Time: 1367891767 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130220 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b41cc18d77c6704dc171e00 Content-Type: text/plain; charset=ISO-8859-1 Hi, this is Jeff Wu from China. We are a factory which produces pet clothes, pet harness, pet leash and pet toys. Please let me know if you are interested to buy from us, thanks! Best regards, Jeff Wu --047d7b41cc18d77c6704dc171e00 Content-Type: text/html; charset=ISO-8859-1

Hi, this is Jeff Wu from China.
We are a factory which produces pet clothes, pet harness, pet leash and pet toys.
Please let me know if you are interested to buy from us, thanks!

Best regards,
Jeff Wu
--047d7b41cc18d77c6704dc171e00-- From markus@trippelsdorf.de Tue May 7 00:24:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id ED2A029DF8 for ; Tue, 7 May 2013 00:24:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E5FEE8F8070 for ; Mon, 6 May 2013 22:24:37 -0700 (PDT) X-ASG-Debug-ID: 1367904271-04cbb05fe515070001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id HnVoSffQQwlQzpZ9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 May 2013 22:24:32 -0700 (PDT) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=beta; bh=IhDOsM0UpbF/SlCnaGngoI1Wxr dBrZa7Sc6w+7tSWlk=; b=KxO6AwmZVdzNDqzBaInrRjXQh43DLfVqxfJUBlq8J3 yWK36HYYiCVeeh54l3a0ctXI4eJn9DJg/wBVcf8qbuwUvC6lwyGz4KI1R9N4KRyD IXIbbepIvTTNiseSH+EPz+3vArQlMCuZPNFhGUOQjuzu99xNAIgzIv+ipYFcXdUW M= Received: (qmail 23483 invoked from network); 7 May 2013 07:24:30 +0200 Received: from unknown (HELO x4) (ud10?360p3@91.64.96.185) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 7 May 2013 07:24:30 +0200 Date: Tue, 7 May 2013 07:24:30 +0200 From: Markus Trippelsdorf To: Dave Chinner Cc: Eric Sandeen , xfs@oss.sgi.com, util-linux@vger.kernel.org, Karel Zak Subject: Re: Mount probing not silent. Internal error xfs_sb_read_verify at line 726 Message-ID: <20130507052430.GA508@x4> X-ASG-Orig-Subj: Re: Mount probing not silent. Internal error xfs_sb_read_verify at line 726 References: <20130506112717.GA502@x4> <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> <20130507002314.GM19978@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130507002314.GM19978@dastard> X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1367904272 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130234 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 2013.05.07 at 10:23 +1000, Dave Chinner wrote: > On Mon, May 06, 2013 at 04:48:39PM -0500, Eric Sandeen wrote: > > On 5/6/13 3:49 PM, Eric Sandeen wrote: > > ... > > > > > Interesting, so [mount] really does try to mount by successive fs types. > > > > > > I wonder when that behavior changed (my util-linux-ng 2.17 on RHEL6 doesn't do this) > > > > > > I'll take a look. > > > > Just to satisfy my curiosity: > > > > commit c6c98f93f5e4b3fb9a8b51ed2ef9967793df7b1c > > Author: Karel Zak > > Date: Mon Mar 15 13:46:43 2010 +0100 > > > > mount: report ambivalent FS detection, improve brute force detection > > > > So we're getting into xfs mount with an actual "-t xfs" equivalent, > > and not going down the "silent" paths. > > That's just completely broken mount behaviour. Probing is supposed > to be *silent*, and this is just downright obnxious. Here's what I > get in my log after doing this: > > # dd if=/dev/zero of=/dev/vdb bs=512 count=1 > # blkid -g > # mount /dev/vdb /mnt/scratch/ > mount: you must specify the filesystem type > $ dmesg > ...... > [83182.775467] REISERFS warning (device vdb): sh-2021 reiserfs_fill_super: can not find reiserfs on vdb > [83182.778473] EXT3-fs (vdb): error: can't find ext3 filesystem on dev vdb. > [83182.781135] EXT2-fs (vdb): error: can't find an ext2 filesystem on dev vdb. > [83182.783524] EXT4-fs (vdb): VFS: Can't find ext4 filesystem > [83182.787392] cramfs: wrong magic > [83182.788926] SQUASHFS error: Can't find a SQUASHFS superblock on vdb > [83182.791150] VFS: Can't find a Minix filesystem V1 | V2 | V3 on device vdb. > [83182.793737] FAT-fs (vdb): bogus number of reserved sectors > [83182.795202] FAT-fs (vdb): Can't find a valid FAT filesystem > [83182.797268] FAT-fs (vdb): bogus number of reserved sectors > [83182.798984] FAT-fs (vdb): Can't find a valid FAT filesystem > [83182.801236] BFS-fs: bfs_fill_super(): No BFS filesystem on vdb (magic=00000000) > [83182.846555] ISOFS: Unable to identify CD-ROM format. > [83182.849136] hfs: unable to find HFS+ superblock > [83182.851164] hfs: can't find a HFS filesystem on dev vdb. > [83182.853204] vxfs: WRONG superblock magic > [83182.856855] VFS: unable to find oldfs superblock on device vdb > [83182.858930] VFS: could not find a valid V7 on vdb. > [83182.860938] NTFS-fs error (device vdb): read_ntfs_boot_sector(): Primary boot sector is invalid. > [83182.863247] NTFS-fs error (device vdb): read_ntfs_boot_sector(): Mount option errors=recover not used. Aborting without trying to recover. > [83182.866563] NTFS-fs error (device vdb): ntfs_fill_super(): Not an NTFS volume. > [83182.873922] AFFS: No valid root block on device vdb > [83182.875697] VFS: Can't find a romfs filesystem on dev vdb. > [83182.877823] qnx4: wrong fsid in superblock. > [83182.884286] UDF-fs: warning (device vdb): udf_load_vrs: No VRS found > [83182.886217] UDF-fs: Rescanning with blocksize 2048 > [83182.891965] UDF-fs: warning (device vdb): udf_load_vrs: No VRS found > [83182.893730] UDF-fs: warning (device vdb): udf_fill_super: No partition found (1) > [83182.896216] omfs: Invalid superblock (0) > [83182.898937] XFS (vdb): bad magic number > [83182.900150] ffff88007bbce000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > [83182.902676] ffff88007bbce010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > [83182.905281] ffff88007bbce020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > [83182.907845] ffff88007bbce030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > [83182.910559] XFS (vdb): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff814645e5 > [83182.910559] > [83182.914377] Pid: 1064, comm: kworker/0:1H Not tainted 3.9.0-rc8-dgc+ #575 > [83182.916499] Call Trace: > [83182.917245] [] xfs_error_report+0x3f/0x50 > [83182.918762] [] ? xfs_buf_iodone_work+0xc5/0xf0 > [83182.920113] [] xfs_corruption_error+0x5e/0x90 > [83182.921351] [] xfs_sb_read_verify+0x11a/0x130 > [83182.922692] [] ? xfs_buf_iodone_work+0xc5/0xf0 > [83182.923972] [] ? finish_task_switch+0x65/0x100 > [83182.925343] [] xfs_buf_iodone_work+0xc5/0xf0 > [83182.926634] [] process_one_work+0x170/0x400 > [83182.927832] [] worker_thread+0x116/0x390 > [83182.929116] [] ? busy_worker_rebind_fn+0xb0/0xb0 > [83182.930460] [] kthread+0xd8/0xe0 > [83182.931469] [] ? kthread_create_on_node+0x140/0x140 > [83182.932921] [] ret_from_fork+0x7c/0xb0 > [83182.934047] [] ? kthread_create_on_node+0x140/0x140 > [83182.935489] XFS (vdb): Corruption detected. Unmount and run xfs_repair > [83182.937045] XFS (vdb): SB validate failed with error 22. > [83182.940181] NILFS: Can't find nilfs on dev vdb. > [83182.941321] BeFS(vdb): No write support. Marking filesystem read-only > [83182.943036] BeFS(vdb): invalid magic header > [83182.946526] (mount,23815,1):ocfs2_fill_super:1039 ERROR: superblock probe failed! > [83182.948515] (mount,23815,1):ocfs2_fill_super:1230 ERROR: status = -22 > [83182.951606] GFS2: not a GFS2 filesystem > [83182.952898] GFS2: gfs2 mount does not exist > [83182.954425] F2FS-fs (vdb): Magic Mismatch, valid(0xf2f52010) - read(0x49474158) > [83182.956540] F2FS-fs (vdb): Can't find a valid F2FS filesystem in first superblock > [83182.959044] F2FS-fs (vdb): Magic Mismatch, valid(0xf2f52010) - read(0x0) > [83182.960894] F2FS-fs (vdb): Can't find a valid F2FS filesystem in second superblock > > I've removed logfs from my kernels because this probing causes > logfs to oops the kernel... > > I think that mount needs fixing, not XFS. mount needs to be doing > silent mounts when doing this brute forcing, not noisy, explicit > mounts that we expect to throw errors if there is a problem. > BTW, strace indicates that MS_SILENT is not being used during brute > force mounts: > > # strace -vx mount /dev/vdb /mnt/scratch/ 2>&1 |grep ^mount > mount("/dev/vdb", "/mnt/scratch/", "reiserfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > mount("/dev/vdb", "/mnt/scratch/", "ext3", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > mount("/dev/vdb", "/mnt/scratch/", "ext2", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > mount("/dev/vdb", "/mnt/scratch/", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > .... > > So this really looks like a bug in mount, not the filesystem handling > of slient mounts... So, lets CC util-linux... -- Markus From david@fromorbit.com Tue May 7 02:11:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 18AF729DF8 for ; Tue, 7 May 2013 02:11:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 01284304077 for ; Tue, 7 May 2013 00:11:38 -0700 (PDT) X-ASG-Debug-ID: 1367910696-04cbb05fe218e50001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 2ZgKsVTzRMVwTgq2 for ; Tue, 07 May 2013 00:11:37 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmoQAK6oiFF5LGwY/2dsb2JhbABQgweDCrcbhRYEgQ4XdIJgHDskNAUlAzSIC6EJkSWOQhaNfoE6glxhA5ctkTWDHyo Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 16:41:04 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZc3C-0006Sw-Ex for xfs@oss.sgi.com; Tue, 07 May 2013 17:11:02 +1000 Date: Tue, 7 May 2013 17:11:02 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [problem] xfstests generic/311 unreliable... Message-ID: <20130507071102.GA24635@dastard> X-ASG-Orig-Subj: [problem] xfstests generic/311 unreliable... MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367910696 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words Hi Josef, I was just looking at a generic/311, and I think there's something fundamentally wrong with the way it is checking the scratch device. You reported it was failing for internal test 19 on XFS, but I'm seeing is fail after the first test or 2, randomly. It has never made it past test 3. So I had a little bit of a closer look at it's structure. Essentially it is doing this (and the contents seen by each step: scratch dev + mkfs +-------------------------------+ overlay dm-flakey D-------------------------------D mount/write/kill/unmount dm-flakey Dx-x-x-x-x-x-x------------------D All good up to here. Now, you can _check_scratch_fs which sees: scratch dev + check +-------------------------------+ i.e. it's not seeing all the changes written to dm-flakey and so xfs-check it seeing corruption. After I realised this was stacking block devices and checking the underlying block device, the cause was pretty obvious: scratch-dev and dm-flakey have different address spaces, so changes written throughone address space will not be seen through the other address space if there is stale cached data in the original address space. And that's exactly what is happening. This patch: --- a/tests/generic/311 +++ b/tests/generic/311 @@ -79,6 +79,7 @@ _mount_flakey() _unmount_flakey() { $UMOUNT_PROG $SCRATCH_MNT + echo 3 > /proc/sys/vm/drop_caches } _load_flakey_table() Makes the problem go away for xfs_check. But really, I don't like the assumption that the test is built on - that writes through one block device are visible through another. It's just asking for weird problems. Is there some way that you can restructure this test so it doesn't have this problem (e.g. do everything on dm-flakey)? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 7 02:37:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3FCBA29DF8 for ; Tue, 7 May 2013 02:37:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 31A9430407F for ; Tue, 7 May 2013 00:37:22 -0700 (PDT) X-ASG-Debug-ID: 1367912238-04cbb05fe51a110001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Owo8ZGI9OCZDFcsZ for ; Tue, 07 May 2013 00:37:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnQQAIesiFF5LGwY/2dsb2JhbABQgwc3glO3G4UWBAGBCRd0gh8BAQEEAQEBNxwYCxAIAxgJJQ8FExIDNIgLDbIbjkQWjX6BHQcWglxhA5ctkTWDHyo Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:07:18 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZcSb-0006VW-ME; Tue, 07 May 2013 17:37:17 +1000 Date: Tue, 7 May 2013 17:37:17 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: jbacik@fusionio.com Subject: Re: [problem] xfstests generic/311 unreliable... Message-ID: <20130507073717.GB24635@dastard> X-ASG-Orig-Subj: Re: [problem] xfstests generic/311 unreliable... References: <20130507071102.GA24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130507071102.GA24635@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367912238 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130242 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words Argh, add the cc to Josef... On Tue, May 07, 2013 at 05:11:02PM +1000, Dave Chinner wrote: > Hi Josef, > > I was just looking at a generic/311, and I think there's something > fundamentally wrong with the way it is checking the scratch device. > > You reported it was failing for internal test 19 on XFS, but I'm > seeing is fail after the first test or 2, randomly. It has never > made it past test 3. So I had a little bit of a closer look at it's > structure. Essentially it is doing this (and the contents seen by > each step: > > scratch dev + mkfs > +-------------------------------+ > overlay dm-flakey > D-------------------------------D > mount/write/kill/unmount dm-flakey > Dx-x-x-x-x-x-x------------------D > > All good up to here. Now, you can _check_scratch_fs which sees: > > scratch dev + check > +-------------------------------+ > > i.e. it's not seeing all the changes written to dm-flakey and so > xfs-check it seeing corruption. > > After I realised this was stacking block devices and checking the > underlying block device, the cause was pretty obvious: scratch-dev > and dm-flakey have different address spaces, so changes written > throughone address space will not be seen through the other address > space if there is stale cached data in the original address space. > > And that's exactly what is happening. This patch: > > --- a/tests/generic/311 > +++ b/tests/generic/311 > @@ -79,6 +79,7 @@ _mount_flakey() > _unmount_flakey() > { > $UMOUNT_PROG $SCRATCH_MNT > + echo 3 > /proc/sys/vm/drop_caches > } > > _load_flakey_table() > > Makes the problem go away for xfs_check. But really, I don't like > the assumption that the test is built on - that writes through one > block device are visible through another. It's just asking for weird > problems. > > Is there some way that you can restructure this test so it doesn't > have this problem (e.g. do everything on dm-flakey)? > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > -- Dave Chinner david@fromorbit.com From qcai@redhat.com Tue May 7 02:53:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DD6DC29DF8 for ; Tue, 7 May 2013 02:53:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D1681304075 for ; Tue, 7 May 2013 00:53:53 -0700 (PDT) X-ASG-Debug-ID: 1367913232-04cb6c53a119c60001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id oXo6Ng4Q16He6TNS for ; Tue, 07 May 2013 00:53:52 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r477rpwc020869; Tue, 7 May 2013 03:53:51 -0400 Date: Tue, 7 May 2013 03:53:51 -0400 (EDT) From: CAI Qian To: Eric Sandeen Cc: xfs@oss.sgi.com Message-ID: <647316680.8155487.1367913231441.JavaMail.root@redhat.com> In-Reply-To: <5187BEA5.4040107@sandeen.net> References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> Subject: Re: 3.9.0: XFS rootfs corruption MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.0: XFS rootfs corruption Thread-Index: 4zTZUnBY7f1KZtXIXcZztMyPrxQ4lw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1367913232 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Eric Sandeen" > To: "CAI Qian" > Cc: xfs@oss.sgi.com > Sent: Monday, May 6, 2013 10:31:01 PM > Subject: Re: 3.9.0: XFS rootfs corruption > > On 5/6/13 2:50 AM, CAI Qian wrote: > > Saw this on several different Power7 systems after kdump reboot. It has > > xfsprogs-3.1.10 > > and rootfs in on LVM. Never saw one of those in any of the RC releases. > > > > ] Reached target Basic System. > > [ 4.919316] bio: create slab at 1 > > [ 5.078616] SGI XFS with ACLs, security attributes, large block/inode > > numbers, no debug enabled > > [ 5.081925] XFS (dm-1): Mounting Filesystem > > [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) > > [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 of > > file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc > > here: > > /* > * Need to have seen all the entries and all the bestfree slots. > */ > XFS_WANT_CORRUPTED_RETURN(freeseen == 7); > > I hope Dave knows offhand what this might mean. :) > > Could you get a metadump of the filesystem in question? Err, less familiar here. May I ask how can I do that? > > > [ 5.333575] > > [ 5.333600] CPU: 2 PID: 372 Comm: mount Tainted: G W 3.9.0+ #1 > > [ 5.333609] Call Trace: > > [ 5.333619] [c0000003e7e02b40] [c000000000014e48] .show_stack+0x78/0x1e0 > > (unreliable) > > [ 5.333635] [c0000003e7e02c10] [c00000000074be70] .dump_stack+0x28/0x3c > > [ 5.333690] [c0000003e7e02c80] [d00000000234ff14] > > .xfs_error_report+0x54/0x70 [xfs] > > [ 5.333747] [c0000003e7e02cf0] [d000000002396e84] > > .__xfs_dir3_data_check+0x784/0x820 [xfs] > > [ 5.333805] [c0000003e7e02df0] [d000000002396fdc] > > .xfs_dir3_data_verify+0xbc/0xe0 [xfs] > > [ 5.333871] [c0000003e7e02e70] [d00000000239703c] > > .xfs_dir3_data_write_verify+0x3c/0x1c0 [xfs] > > [ 5.333936] [c0000003e7e02f20] [d00000000234db94] > > ._xfs_buf_ioapply+0xd4/0x400 [xfs] > > [ 5.334003] [c0000003e7e03060] [d00000000234dfcc] > > .xfs_buf_iorequest+0x4c/0xe0 [xfs] > > [ 5.334055] [c0000003e7e030f0] [d00000000234e0c4] > > .xfs_bdstrat_cb+0x64/0x120 [xfs] > > [ 5.334117] [c0000003e7e03180] [d00000000234e284] > > .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] > > [ 5.334180] [c0000003e7e03270] [d00000000234f318] > > .xfs_buf_delwri_submit+0x38/0xd0 [xfs] > > [ 5.334237] [c0000003e7e03310] [d0000000023b1904] > > .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] > > [ 5.334305] [c0000003e7e033d0] [d0000000023b1c4c] > > .xlog_recover_process_data+0x26c/0x340 [xfs] > > [ 5.334372] [c0000003e7e034a0] [d0000000023b2108] > > .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] > > [ 5.334438] [c0000003e7e03610] [d0000000023b2360] > > .xlog_do_log_recovery+0xa0/0x120 [xfs] > > [ 5.334503] [c0000003e7e036b0] [d0000000023b2400] > > .xlog_do_recover+0x20/0x150 [xfs] > > [ 5.334570] [c0000003e7e03740] [d0000000023b25c4] > > .xlog_recover+0x94/0x100 [xfs] > > [ 5.334647] [c0000003e7e037d0] [d0000000023bcf84] > > .xfs_log_mount+0x144/0x1e0 [xfs] > > [ 5.334705] [c0000003e7e03870] [d0000000023b6098] > > .xfs_mountfs+0x3c8/0x780 [xfs] > > [ 5.334768] [c0000003e7e03930] [d00000000236435c] > > .xfs_fs_fill_super+0x31c/0x3b0 [xfs] > > [ 5.334801] [c0000003e7e039d0] [c000000000217028] > > .mount_bdev+0x258/0x2b0 > > [ 5.334855] [c0000003e7e03aa0] [d000000002361c78] > > .xfs_fs_mount+0x18/0x30 [xfs] > > [ 5.334878] [c0000003e7e03b10] [c000000000218040] .mount_fs+0x70/0x230 > > [ 5.334890] [c0000003e7e03bd0] [c00000000023a9f8] > > .vfs_kern_mount+0x58/0x140 > > [ 5.334901] [c0000003e7e03c80] [c00000000023d5f0] .do_mount+0x280/0xb10 > > [ 5.334912] [c0000003e7e03d70] [c00000000023df30] .SyS_mount+0xb0/0x110 > > [ 5.334924] [c0000003e7e03e30] [c000000000009e54] syscall_exit+0x0/0x98 > > [ 5.334945] c00000001bee2000: 58 44 32 44 09 50 00 40 0a 50 00 40 0b 50 > > 00 40 XD2D.P.@.P.@.P.@ > > [ 5.334957] c00000001bee2010: 00 00 00 00 00 11 a3 8e 32 62 65 61 68 5f > > 74 61 ........2beah_ta > > [ 5.334968] c00000001bee2020: 73 6b 5f 65 64 33 33 63 61 62 36 2d 32 65 > > 30 31 sk_ed33cab6-2e01 > > [ 5.334979] c00000001bee2030: 2d 34 63 34 34 2d 38 63 31 65 2d 66 65 37 > > 36 35 -4c44-8c1e-fe765 > > [ 5.334992] XFS (dm-1): Internal error xfs_dir3_data_write_verify at > > line 271 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000234db94 > > [ 5.334992] > > [ 5.335017] CPU: 2 PID: 372 Comm: mount Tainted: G W 3.9.0+ #1 > > [ 5.335025] Call Trace: > > [ 5.335032] [c0000003e7e02c10] [c000000000014e48] .show_stack+0x78/0x1e0 > > (unreliable) > > [ 5.335046] [c0000003e7e02ce0] [c00000000074be70] .dump_stack+0x28/0x3c > > [ 5.335099] [c0000003e7e02d50] [d00000000234ff14] > > .xfs_error_report+0x54/0x70 [xfs] > > [ 5.335153] [c0000003e7e02dc0] [d00000000234ffac] > > .xfs_corruption_error+0x7c/0xb0 [xfs] > > [ 5.335220] [c0000003e7e02e70] [d000000002397148] > > .xfs_dir3_data_write_verify+0x148/0x1c0 [xfs] > > [ 5.335284] [c0000003e7e02f20] [d00000000234db94] > > ._xfs_buf_ioapply+0xd4/0x400 [xfs] > > [ 5.335337] [c0000003e7e03060] [d00000000234dfcc] > > .xfs_buf_iorequest+0x4c/0xe0 [xfs] > > [ 5.335403] [c0000003e7e030f0] [d00000000234e0c4] > > .xfs_bdstrat_cb+0x64/0x120 [xfs] > > [ 5.335464] [c0000003e7e03180] [d00000000234e284] > > .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] > > [ 5.335527] [c0000003e7e03270] [d00000000234f318] > > .xfs_buf_delwri_submit+0x38/0xd0 [xfs] > > [ 5.335584] [c0000003e7e03310] [d0000000023b1904] > > .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] > > [ 5.335650] [c0000003e7e033d0] [d0000000023b1c4c] > > .xlog_recover_process_data+0x26c/0x340 [xfs] > > [ 5.335718] [c0000003e7e034a0] [d0000000023b2108] > > .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] > > [ 5.335785] [c0000003e7e03610] [d0000000023b2360] > > .xlog_do_log_recovery+0xa0/0x120 [xfs] > > [ 5.335842] [c0000003e7e036b0] [d0000000023b2400] > > .xlog_do_recover+0x20/0x150 [xfs] > > [ 5.335909] [c0000003e7e03740] [d0000000023b25c4] > > .xlog_recover+0x94/0x100 [xfs] > > [ 5.335976] [c0000003e7e037d0] [d0000000023bcf84] > > .xfs_log_mount+0x144/0x1e0 [xfs] > > [ 5.336033] [c0000003e7e03870] [d0000000023b6098] > > .xfs_mountfs+0x3c8/0x780 [xfs] > > [ 5.336097] [c0000003e7e03930] [d00000000236435c] > > .xfs_fs_fill_super+0x31c/0x3b0 [xfs] > > [ 5.336121] [c0000003e7e039d0] [c000000000217028] > > .mount_bdev+0x258/0x2b0 > > [ 5.336174] [c0000003e7e03aa0] [d000000002361c78] > > .xfs_fs_mount+0x18/0x30 [xfs] > > [ 5.336206] [c0000003e7e03b10] [c000000000218040] .mount_fs+0x70/0x230 > > [ 5.336218] [c0000003e7e03bd0] [c00000000023a9f8] > > .vfs_kern_mount+0x58/0x140 > > [ 5.336229] [c0000003e7e03c80] [c00000000023d5f0] .do_mount+0x280/0xb10 > > [ 5.336240] [c0000003e7e03d70] [c00000000023df30] .SyS_mount+0xb0/0x110 > > [ 5.336251] [c0000003e7e03e30] [c000000000009e54] syscall_exit+0x0/0x98 > > > > [ 5.348410] XFS (dm-1): log mount/recovery failed: error 117 > > [ 5.348491] XFS (dm-1): log mount failed > > dracut-initqueue[275]: mount: mount > > /dev/mapper/rhel_ibm--p730--06--lp1-root on /sysroot failed: Structure > > needs cleaning > > dracut-initqueue[275]: Warning: Failed to mount -t xfs -o ro,ro > > /dev/mapper/rhel_ibm--p730--06--lp1-root /sysroot > > dracut-initqueue[275]: Warning: *** An error occurred during the file > > system check. > > dracut-initqueue[275]: Warning: *** Dropping you to a shell; the system > > will try > > > > Also, never saw any of those in other architectures like x64, but started > > get those there in 3.9.0. > > Unsure if those are related. > > > > [ 3224.369782] > > ============================================================================= > > [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison > > overwritten > > [ 3224.370017] > > ----------------------------------------------------------------------------- > > 2: 'F' if any module was force loaded by "insmod -f", ' ' if all > modules were loaded normally. > > Force loaded modules, what's that from? This could be just happened after the booting done or we were running a stress test later that does load (modprobe *) and unload (modprobe -r *) every module. Again, those warnings could be totally unrelated to the above rootfs corruption. CAI Qian > > > From dave@fromorbit.com Tue May 7 03:04:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0488629DF8 for ; Tue, 7 May 2013 03:04:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E721930406A for ; Tue, 7 May 2013 01:04:55 -0700 (PDT) X-ASG-Debug-ID: 1367913892-04cb6c53a31a410002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id fieAGAzT82UT3jNV for ; Tue, 07 May 2013 01:04:54 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0gh8BAQUnLzMIGDE5AxsZiAuyLo5FjhSBOoM9A6E/hyODHyqBLSQ Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:34:52 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctH-0006Z9-GA for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rI-7B for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/7] xfs: xfs_ifree doesn't need to modify the inode buffer Date: Tue, 7 May 2013 18:04:31 +1000 X-ASG-Orig-Subj: [PATCH 2/7] xfs: xfs_ifree doesn't need to modify the inode buffer Message-Id: <1367913876-30086-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913894 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Long ago, bulkstat used to read inodes directly fromteh backing buffer for speed. This had the unfortunate problem of being cache incoherent with unlinks, and so xfs_ifree() had to mark the inode as free directly in the backing buffer. bulkstat was changed some time ago to use inode cache coherent lookups, and so will never see unlinked inodes in it's lookups. Hence xfs_ifree() does not need to touch the inode backing buffer anymore. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 9a475d1..22e635d 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -2032,8 +2032,6 @@ xfs_ifree( int error; int delete; xfs_ino_t first_ino; - xfs_dinode_t *dip; - xfs_buf_t *ibp; ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(ip->i_d.di_nlink == 0); @@ -2046,14 +2044,13 @@ xfs_ifree( * Pull the on-disk inode from the AGI unlinked list. */ error = xfs_iunlink_remove(tp, ip); - if (error != 0) { + if (error) return error; - } error = xfs_difree(tp, ip->i_ino, flist, &delete, &first_ino); - if (error != 0) { + if (error) return error; - } + ip->i_d.di_mode = 0; /* mark incore inode as free */ ip->i_d.di_flags = 0; ip->i_d.di_dmevmask = 0; @@ -2065,31 +2062,10 @@ xfs_ifree( * by reincarnations of this inode. */ ip->i_d.di_gen++; - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - error = xfs_imap_to_bp(ip->i_mount, tp, &ip->i_imap, &dip, &ibp, - 0, 0); - if (error) - return error; - - /* - * Clear the on-disk di_mode. This is to prevent xfs_bulkstat - * from picking up this inode when it is reclaimed (its incore state - * initialzed but not flushed to disk yet). The in-core di_mode is - * already cleared and a corresponding transaction logged. - * The hack here just synchronizes the in-core to on-disk - * di_mode value in advance before the actual inode sync to disk. - * This is OK because the inode is already unlinked and would never - * change its di_mode again for this inode generation. - * This is a temporary hack that would require a proper fix - * in the future. - */ - dip->di_mode = 0; - - if (delete) { + if (delete) error = xfs_ifree_cluster(ip, tp, first_ino); - } return error; } -- 1.7.10.4 From dave@fromorbit.com Tue May 7 03:04:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C714329E06 for ; Tue, 7 May 2013 03:04:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id B639530406A for ; Tue, 7 May 2013 01:04:54 -0700 (PDT) X-ASG-Debug-ID: 1367913892-04cb6c53a31a410001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id HPNBAkMGE0LXHw8A for ; Tue, 07 May 2013 01:04:53 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0gh8BAQUnLzMIGDE5AxsZiAuyLo5FjhSEdwOoYoMfKg Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:34:52 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctH-0006Z8-GE for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rE-5M for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/7] xfs: don't do IO when creating an new inode Date: Tue, 7 May 2013 18:04:30 +1000 X-ASG-Orig-Subj: [PATCH 1/7] xfs: don't do IO when creating an new inode Message-Id: <1367913876-30086-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913892 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When we are allocating a new inode, we read the inode cluster off disk to increment the generation number. We are already using a random generation number for newly allocated inodes, so if we are not using the ikeep mode, we can just generate a new generation number when we initialise the newly allocated inode. This avoids the need for reading the inode buffer during inode creation. This will speed up allocation of inodes in cold, partially allocated clusters as they will no longer need to be read from disk during allocation. It will also reduce the CPU overhead of inode allocation by not having the process the buffer read, even on cache hits. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index efbe1ac..9a475d1 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1028,6 +1028,11 @@ xfs_dinode_calc_crc( /* * Read the disk inode attributes into the in-core inode structure. + * + * If we are initialising a new inode and we are not utilising the + * XFS_MOUNT_IKEEP inode cluster mode, we can simple build the new inode core + * with a random generation number. If we are keeping inodes around, we need to + * read the inode cluster to get the existing generation number off disk. */ int xfs_iread( @@ -1047,6 +1052,22 @@ xfs_iread( if (error) return error; + /* shortcut IO on inode allocation if possible */ + if ((iget_flags & XFS_IGET_CREATE) && + !(mp->m_flags & XFS_MOUNT_IKEEP)) { + /* initialise the on-disk inode core */ + memset(&ip->i_d, 0, sizeof(ip->i_d)); + ip->i_d.di_magic = XFS_DINODE_MAGIC; + ip->i_d.di_gen = prandom_u32(); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + ip->i_d.di_version = 3; + ip->i_d.di_ino = ip->i_ino; + uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + } else + ip->i_d.di_version = 2; + return 0; + } + /* * Get pointers to the on-disk inode and the buffer containing it. */ @@ -1133,17 +1154,16 @@ xfs_iread( xfs_buf_set_ref(bp, XFS_INO_REF); /* - * Use xfs_trans_brelse() to release the buffer containing the - * on-disk inode, because it was acquired with xfs_trans_read_buf() - * in xfs_imap_to_bp() above. If tp is NULL, this is just a normal + * Use xfs_trans_brelse() to release the buffer containing the on-disk + * inode, because it was acquired with xfs_trans_read_buf() in + * xfs_imap_to_bp() above. If tp is NULL, this is just a normal * brelse(). If we're within a transaction, then xfs_trans_brelse() * will only release the buffer if it is not dirty within the * transaction. It will be OK to release the buffer in this case, - * because inodes on disk are never destroyed and we will be - * locking the new in-core inode before putting it in the hash - * table where other processes can find it. Thus we don't have - * to worry about the inode being changed just because we released - * the buffer. + * because inodes on disk are never destroyed and we will be locking the + * new in-core inode before putting it in the cache where other + * processes can find it. Thus we don't have to worry about the inode + * being changed just because we released the buffer. */ out_brelse: xfs_trans_brelse(tp, bp); -- 1.7.10.4 From dave@fromorbit.com Tue May 7 03:04:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2A52629E07 for ; Tue, 7 May 2013 03:04:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 23D708F8033 for ; Tue, 7 May 2013 01:04:58 -0700 (PDT) X-ASG-Debug-ID: 1367913892-04cb6c53a31a410003-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id fBmy69O866Kj0G95 for ; Tue, 07 May 2013 01:04:55 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0giABBScvMwhJOQMbGYgLsi6ORY4UhHcDqGKDHyqBLQQ Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:34:52 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctH-0006ZD-GM for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rg-C4 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 7/7] xfs: Inode create item recovery Date: Tue, 7 May 2013 18:04:36 +1000 X-ASG-Orig-Subj: [PATCH 7/7] xfs: Inode create item recovery Message-Id: <1367913876-30086-8-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913895 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- When we find a icreate transaction, we need to get and initialise the buffers in the range that has been passed. Extract and verify the information in the item record, then loop over the range initialising and issuing the buffer writes delayed. Support an arbitrary size range to initialise so that in future when we allocate inodes in much larger chunks all kernels that understand this transaction can still recover them. Signed-off-by: Dave Chinner --- fs/xfs/xfs_ialloc.c | 24 ++++++++---- fs/xfs/xfs_ialloc.h | 5 ++- fs/xfs/xfs_log_recover.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 10 deletions(-) diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index 9126b59..51473ee 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c @@ -151,12 +151,16 @@ xfs_check_agi_freecount( #endif /* - * Initialise a new set of inodes. + * Initialise a new set of inodes. When called without a transaction context + * (e.g. from recovery) we initiate a delayed write of the inode buffers rather + * than logging them (which in a transaction context puts them into the AIL + * for writeback rather than the xfsbufd queue). */ int xfs_ialloc_inode_init( struct xfs_mount *mp, struct xfs_trans *tp, + struct list_head *buffer_list, xfs_agnumber_t agno, xfs_agblock_t agbno, xfs_agblock_t length, @@ -218,8 +222,9 @@ xfs_ialloc_inode_init( * Hence we only need to log the buffers as "ordered" buffers so * they track in the AIL as if they were physically logged. */ - xfs_icreate_log(tp, agno, agbno, XFS_IALLOC_INODES(mp), - mp->m_sb.sb_inodesize, length, gen); + if (tp) + xfs_icreate_log(tp, agno, agbno, XFS_IALLOC_INODES(mp), + mp->m_sb.sb_inodesize, length, gen); } else if (xfs_sb_version_hasnlink(&mp->m_sb)) version = 2; else @@ -254,14 +259,14 @@ xfs_ialloc_inode_init( ino++; uuid_copy(&free->di_uuid, &mp->m_sb.sb_uuid); xfs_dinode_calc_crc(mp, free); - } else { + } else if (tp) { /* just log the inode core */ xfs_trans_log_buf(tp, fbuf, ioffset, ioffset + isize - 1); } } - if (version == 3) { + if (version == 3 && tp) { /* * Mark the buffer as ordered so that it is not logged * in the transaction but still tracked in the AIL as @@ -279,7 +284,10 @@ xfs_ialloc_inode_init( * past this transaction (i.e. by preventing relogging from * moving it forward in the log). */ - xfs_trans_inode_alloc_buf(tp, fbuf); + if (tp) + xfs_trans_inode_alloc_buf(tp, fbuf); + else + xfs_buf_delwri_queue(fbuf, buffer_list); } return 0; } @@ -324,7 +332,7 @@ xfs_ialloc_ag_alloc( * First try to allocate inodes contiguous with the last-allocated * chunk of inodes. If the filesystem is striped, this will fill * an entire stripe unit with inodes. - */ + */ agi = XFS_BUF_TO_AGI(agbp); newino = be32_to_cpu(agi->agi_newino); agno = be32_to_cpu(agi->agi_seqno); @@ -423,7 +431,7 @@ xfs_ialloc_ag_alloc( * rather than a linear progression to prevent the next generation * number from being easily guessable. */ - error = xfs_ialloc_inode_init(args.mp, tp, agno, args.agbno, + error = xfs_ialloc_inode_init(args.mp, tp, NULL, agno, args.agbno, args.len, prandom_u32()); if (error) diff --git a/fs/xfs/xfs_ialloc.h b/fs/xfs/xfs_ialloc.h index ec1cc48..ce6980b 100644 --- a/fs/xfs/xfs_ialloc.h +++ b/fs/xfs/xfs_ialloc.h @@ -156,7 +156,8 @@ extern const struct xfs_buf_ops xfs_agi_buf_ops; * Inode buffer initialisation routine */ int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp, - xfs_agnumber_t agno, xfs_agblock_t agbno, - xfs_agblock_t length, unsigned int gen); + struct list_head *buffer_list, + xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_agblock_t length, unsigned int gen); #endif /* __XFS_IALLOC_H__ */ diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 93f03ec..6d608ce 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -45,6 +45,7 @@ #include "xfs_cksum.h" #include "xfs_trace.h" #include "xfs_icache.h" +#include "xfs_icreate_item.h" /* Need all the magic numbers and buffer ops structures from these headers */ #include "xfs_symlink.h" @@ -1618,6 +1619,9 @@ xlog_recover_reorder_trans( xfs_buf_log_format_t *buf_f = item->ri_buf[0].i_addr; switch (ITEM_TYPE(item)) { + case XFS_LI_ICREATE: + list_move(&item->ri_list, &trans->r_itemq); + break; case XFS_LI_BUF: if (!(buf_f->blf_flags & XFS_BLF_CANCEL)) { trace_xfs_log_recover_item_reorder_head(log, @@ -2886,6 +2890,93 @@ xlog_recover_efd_pass2( } /* + * This routine is called when an inode create format structure is found in a + * committed transaction in the log. It's purpose is to initialise the inodes + * being allocated on disk. This requires us to get inode cluster buffers that + * match the range to be intialised, stamped with inode templates and written + * by delayed write so that subsequent modifications will hit the cached buffer + * and only need writing out at the end of recovery. + */ +STATIC int +xlog_recover_do_icreate_pass2( + struct xlog *log, + struct list_head *buffer_list, + xlog_recover_item_t *item) +{ + struct xfs_mount *mp = log->l_mp; + struct xfs_icreate_log *icl; + xfs_agnumber_t agno; + xfs_agblock_t agbno; + unsigned int count; + unsigned int isize; + xfs_agblock_t length; + + icl = (struct xfs_icreate_log *)item->ri_buf[0].i_addr; + if (icl->icl_type != XFS_LI_ICREATE) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad type"); + return EINVAL; + } + + if (icl->icl_size != 1) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad icl size"); + return EINVAL; + } + + agno = be32_to_cpu(icl->icl_ag); + if (agno >= mp->m_sb.sb_agcount) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad agno"); + return EINVAL; + } + agbno = be32_to_cpu(icl->icl_agbno); + if (!agbno || agbno == NULLAGBLOCK || agbno >= mp->m_sb.sb_agblocks) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad agbno"); + return EINVAL; + } + isize = be32_to_cpu(icl->icl_isize); + if (isize != mp->m_sb.sb_inodesize) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad isize"); + return EINVAL; + } + count = be32_to_cpu(icl->icl_count); + if (!count) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad count"); + return EINVAL; + } + length = be32_to_cpu(icl->icl_length); + if (!length || length >= mp->m_sb.sb_agblocks) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad length"); + return EINVAL; + } + + /* existing allocation is fixed value */ + ASSERT(count == XFS_IALLOC_INODES(mp)); + ASSERT(length == XFS_IALLOC_BLOCKS(mp)); + if (count != XFS_IALLOC_INODES(mp) || + length != XFS_IALLOC_BLOCKS(mp)) { + xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad count 2"); + return EINVAL; + } + + /* + * Inode buffers can be freed. Do not replay the inode initialisation as + * we could be overwriting something written after this inode buffer was + * cancelled. + * + * XXX: we need to iterate all buffers and only init those that are not + * cancelled. I think that a more fine grained factoring of + * xfs_ialloc_inode_init may be appropriate here to enable this to be + * done easily. + */ + if (xlog_check_buffer_cancelled(log, + XFS_AGB_TO_DADDR(mp, agno, agbno), length, 0)) + return 0; + + xfs_ialloc_inode_init(mp, NULL, buffer_list, agno, agbno, length, + be32_to_cpu(icl->icl_gen)); + return 0; +} + +/* * Free up any resources allocated by the transaction * * Remember that EFIs, EFDs, and IUNLINKs are handled later. @@ -2927,6 +3018,7 @@ xlog_recover_commit_pass1( case XFS_LI_EFI: case XFS_LI_EFD: case XFS_LI_DQUOT: + case XFS_LI_ICREATE: /* nothing to do in pass 1 */ return 0; default: @@ -2957,6 +3049,8 @@ xlog_recover_commit_pass2( return xlog_recover_efd_pass2(log, item); case XFS_LI_DQUOT: return xlog_recover_dquot_pass2(log, buffer_list, item); + case XFS_LI_ICREATE: + return xlog_recover_do_icreate_pass2(log, buffer_list, item); case XFS_LI_QUOTAOFF: /* nothing to do in pass2 */ return 0; -- 1.7.10.4 From dave@fromorbit.com Tue May 7 03:05:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A9BC829E0C for ; Tue, 7 May 2013 03:05:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A2B868F8033 for ; Tue, 7 May 2013 01:04:57 -0700 (PDT) X-ASG-Debug-ID: 1367913894-04cb6c53a21a410001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Cx1ZcCHt4goQT3jX for ; Tue, 07 May 2013 01:04:55 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAGe0iFF5LGwY/2dsb2JhbABGCoMHvzsEgQoXdIIgAQUnLzMISTkDGxkZh3KyLo5FjXUfhHcDk1+VA4MfKoEtBA Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:34:52 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctH-0006ZA-G7 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rN-85 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/7] xfs: Introduce an ordered buffer item Date: Tue, 7 May 2013 18:04:32 +1000 X-ASG-Orig-Subj: [PATCH 3/7] xfs: Introduce an ordered buffer item Message-Id: <1367913876-30086-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913894 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- If we have a buffer that we have modified but we do not wish to physically log in a transaction (e.g. we've logged a logical change), we still need to ensure that transactional integrity is maintained. Hence we must not move the tail of the log past the transaction that the buffer is associated with before the buffer is written to disk. This means these special buffers still need to be included in the transaction and added to the AIL just like a normal buffer, but we do not want the modifications to the buffer written into the transaction. IOWs, what we want is an "ordered buffer" that maintains the same transactional life cycle as a physically logged buffer, just without the transcribing of the modifications to the log. Hence we need to flag the buffer as an "ordered buffer" to avoid including it in vector size calculations or formatting during the transaction. Once the transaction is committed, the buffer appears for all intents to be the same as a physically logged buffer as it transitions through the log and AIL. Relogging will also work just fine for such an ordered buffer - the logical transaction will be replayed before the subsequent modifications that relog the buffer, so everything will be reconstructed correctly by recovery. Signed-off-by: Dave Chinner --- fs/xfs/xfs_buf_item.c | 75 +++++++++++++++++++++++++++++++----------------- fs/xfs/xfs_buf_item.h | 4 ++- fs/xfs/xfs_trace.h | 2 ++ fs/xfs/xfs_trans.h | 1 + fs/xfs/xfs_trans_buf.c | 33 +++++++++++++++++++-- 5 files changed, 84 insertions(+), 31 deletions(-) diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index cf26347..e547915 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c @@ -140,6 +140,16 @@ xfs_buf_item_size( ASSERT(bip->bli_flags & XFS_BLI_LOGGED); + if (bip->bli_flags & XFS_BLI_ORDERED) { + /* + * The buffer has been logged just to order it. + * It is not being included in the transaction + * commit, so no vectors are used at all. + */ + trace_xfs_buf_item_size_ordered(bip); + return 0; + } + /* * the vector count is based on the number of buffer vectors we have * dirty bits in. This will only be greater than one when we have a @@ -212,6 +222,7 @@ xfs_buf_item_format_segment( goto out; } + /* * Fill in an iovec for each set of contiguous chunks. */ @@ -316,6 +327,16 @@ xfs_buf_item_format( bip->bli_flags &= ~XFS_BLI_INODE_BUF; } + if ((bip->bli_flags & (XFS_BLI_ORDERED|XFS_BLI_STALE)) == + XFS_BLI_ORDERED) { + /* + * The buffer has been logged just to order it. It is not being + * included in the transaction commit, so don't format it. + */ + trace_xfs_buf_item_format_ordered(bip); + return; + } + for (i = 0; i < bip->bli_format_count; i++) { vecp = xfs_buf_item_format_segment(bip, vecp, offset, &bip->bli_formats[i]); @@ -345,6 +366,7 @@ xfs_buf_item_pin( ASSERT(atomic_read(&bip->bli_refcount) > 0); ASSERT((bip->bli_flags & XFS_BLI_LOGGED) || + (bip->bli_flags & XFS_BLI_ORDERED) || (bip->bli_flags & XFS_BLI_STALE)); trace_xfs_buf_item_pin(bip); @@ -517,8 +539,9 @@ xfs_buf_item_unlock( { struct xfs_buf_log_item *bip = BUF_ITEM(lip); struct xfs_buf *bp = bip->bli_buf; - int aborted, clean, i; - uint hold; + bool clean; + bool aborted; + int flags; /* Clear the buffer's association with this transaction. */ bp->b_transp = NULL; @@ -529,23 +552,21 @@ xfs_buf_item_unlock( * (cancelled) buffers at unpin time, but we'll never go through the * pin/unpin cycle if we abort inside commit. */ - aborted = (lip->li_flags & XFS_LI_ABORTED) != 0; - + aborted = (lip->li_flags & XFS_LI_ABORTED) ? true : false; /* - * Before possibly freeing the buf item, determine if we should - * release the buffer at the end of this routine. + * Before possibly freeing the buf item, copy the per-transaction state + * so we can reference it safely later after clearing it from the + * buffer log item. */ - hold = bip->bli_flags & XFS_BLI_HOLD; - - /* Clear the per transaction state. */ - bip->bli_flags &= ~(XFS_BLI_LOGGED | XFS_BLI_HOLD); + flags = bip->bli_flags; + bip->bli_flags &= ~(XFS_BLI_LOGGED | XFS_BLI_HOLD | XFS_BLI_ORDERED); /* * If the buf item is marked stale, then don't do anything. We'll * unlock the buffer and free the buf item when the buffer is unpinned * for the last time. */ - if (bip->bli_flags & XFS_BLI_STALE) { + if (flags & XFS_BLI_STALE) { trace_xfs_buf_item_unlock_stale(bip); ASSERT(bip->__bli_format.blf_flags & XFS_BLF_CANCEL); if (!aborted) { @@ -562,13 +583,19 @@ xfs_buf_item_unlock( * be the only reference to the buf item, so we free it anyway * regardless of whether it is dirty or not. A dirty abort implies a * shutdown, anyway. + * + * Ordered buffers are dirty but may have no recorded changes, so ensure + * we only release clean items here. */ - clean = 1; - for (i = 0; i < bip->bli_format_count; i++) { - if (!xfs_bitmap_empty(bip->bli_formats[i].blf_data_map, - bip->bli_formats[i].blf_map_size)) { - clean = 0; - break; + clean = (flags & XFS_BLI_DIRTY) ? false : true; + if (clean) { + int i; + for (i = 0; i < bip->bli_format_count; i++) { + if (!xfs_bitmap_empty(bip->bli_formats[i].blf_data_map, + bip->bli_formats[i].blf_map_size)) { + clean = false; + break; + } } } if (clean) @@ -581,7 +608,7 @@ xfs_buf_item_unlock( } else atomic_dec(&bip->bli_refcount); - if (!hold) + if (!(flags & XFS_BLI_HOLD)) xfs_buf_relse(bp); } @@ -847,12 +874,6 @@ xfs_buf_item_log( struct xfs_buf *bp = bip->bli_buf; /* - * Mark the item as having some dirty data for - * quick reference in xfs_buf_item_dirty. - */ - bip->bli_flags |= XFS_BLI_DIRTY; - - /* * walk each buffer segment and mark them dirty appropriately. */ start = 0; @@ -878,7 +899,7 @@ xfs_buf_item_log( /* - * Return 1 if the buffer has some data that has been logged (at any + * Return 1 if the buffer has been logged or ordered in a transaction (at any * point, not just the current transaction) and 0 if not. */ uint @@ -912,11 +933,11 @@ void xfs_buf_item_relse( xfs_buf_t *bp) { - xfs_buf_log_item_t *bip; + xfs_buf_log_item_t *bip = bp->b_fspriv; trace_xfs_buf_item_relse(bp, _RET_IP_); + ASSERT(!(bip->bli_item.li_flags & XFS_LI_IN_AIL)); - bip = bp->b_fspriv; bp->b_fspriv = bip->bli_item.li_bio_list; if (bp->b_fspriv == NULL) bp->b_iodone = NULL; diff --git a/fs/xfs/xfs_buf_item.h b/fs/xfs/xfs_buf_item.h index 2573d2a..0f1c247 100644 --- a/fs/xfs/xfs_buf_item.h +++ b/fs/xfs/xfs_buf_item.h @@ -120,6 +120,7 @@ xfs_blft_from_flags(struct xfs_buf_log_format *blf) #define XFS_BLI_INODE_ALLOC_BUF 0x10 #define XFS_BLI_STALE_INODE 0x20 #define XFS_BLI_INODE_BUF 0x40 +#define XFS_BLI_ORDERED 0x80 #define XFS_BLI_FLAGS \ { XFS_BLI_HOLD, "HOLD" }, \ @@ -128,7 +129,8 @@ xfs_blft_from_flags(struct xfs_buf_log_format *blf) { XFS_BLI_LOGGED, "LOGGED" }, \ { XFS_BLI_INODE_ALLOC_BUF, "INODE_ALLOC" }, \ { XFS_BLI_STALE_INODE, "STALE_INODE" }, \ - { XFS_BLI_INODE_BUF, "INODE_BUF" } + { XFS_BLI_INODE_BUF, "INODE_BUF" }, \ + { XFS_BLI_ORDERED, "ORDERED" } #ifdef __KERNEL__ diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index aa4db33..8dfc562 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -486,8 +486,10 @@ DEFINE_EVENT(xfs_buf_item_class, name, \ TP_PROTO(struct xfs_buf_log_item *bip), \ TP_ARGS(bip)) DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size); +DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered); DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale); DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format); +DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_ordered); DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale); DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin); DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin); diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index a44dba5..850fe78 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -503,6 +503,7 @@ void xfs_trans_bhold_release(xfs_trans_t *, struct xfs_buf *); void xfs_trans_binval(xfs_trans_t *, struct xfs_buf *); void xfs_trans_inode_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_stale_inode_buf(xfs_trans_t *, struct xfs_buf *); +void xfs_trans_ordered_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint); void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int); diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c index 73a5fa4..57160d2 100644 --- a/fs/xfs/xfs_trans_buf.c +++ b/fs/xfs/xfs_trans_buf.c @@ -397,7 +397,6 @@ shutdown_abort: return XFS_ERROR(EIO); } - /* * Release the buffer bp which was previously acquired with one of the * xfs_trans_... buffer allocation routines if the buffer has not @@ -603,8 +602,14 @@ xfs_trans_log_buf(xfs_trans_t *tp, tp->t_flags |= XFS_TRANS_DIRTY; bip->bli_item.li_desc->lid_flags |= XFS_LID_DIRTY; - bip->bli_flags |= XFS_BLI_LOGGED; - xfs_buf_item_log(bip, first, last); + + /* + * If we have an ordered buffer we are not logging any dirty range but + * it still needs to be marked dirty and that it has been logged. + */ + bip->bli_flags |= XFS_BLI_DIRTY | XFS_BLI_LOGGED; + if (!(bip->bli_flags & XFS_BLI_ORDERED)) + xfs_buf_item_log(bip, first, last); } @@ -757,6 +762,28 @@ xfs_trans_inode_alloc_buf( } /* + * Mark the buffer as ordered for this transaction. This means + * that the contents of the buffer are not recorded in the transaction + * but it is tracked in the AIL as though it was. This allows us + * to record logical changes in transactions rather than the physical + * changes we make to the buffer without changing writeback ordering + * constraints of metadata buffers. + */ +void +xfs_trans_ordered_buf( + struct xfs_trans *tp, + struct xfs_buf *bp) +{ + struct xfs_buf_log_item *bip = bp->b_fspriv; + + ASSERT(bp->b_transp == tp); + ASSERT(bip != NULL); + ASSERT(atomic_read(&bip->bli_refcount) > 0); + + bip->bli_flags |= XFS_BLI_ORDERED; +} + +/* * Set the type of the buffer for log recovery so that it can correctly identify * and hence attach the correct buffer ops to the buffer after replay. */ -- 1.7.10.4 From dave@fromorbit.com Tue May 7 03:05:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AE9F429E16 for ; Tue, 7 May 2013 03:05:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A86448F8033 for ; Tue, 7 May 2013 01:05:04 -0700 (PDT) X-ASG-Debug-ID: 1367913902-04cb6c53a21a430001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id FFCgYLwnAPFmx0th for ; Tue, 07 May 2013 01:05:02 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0giABBScvMwhJOQMbGYgLsi6ORY4UhHcDjCmRHHKKK4MfKg Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:35:01 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctR-0006ZC-D7 for xfs@oss.sgi.com; Tue, 07 May 2013 18:05:01 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rc-B2 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 6/7] xfs: Use inode create transaction Date: Tue, 7 May 2013 18:04:35 +1000 X-ASG-Orig-Subj: [PATCH 6/7] xfs: Use inode create transaction Message-Id: <1367913876-30086-7-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913902 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Replace the use of buffer based logging of inode initialisation, uses the new logical form to describe the range to be initialised in recovery. We continue to "log" the inode buffers to push them into the AIL and ensure that the inode create transaction is not removed from the log before the inode buffers are written to disk. Update the transaction identifier and reservations to match the changed implementation. Signed-off-by: Dave Chinner --- fs/xfs/xfs_ialloc.c | 39 ++++++++++++++++++++++++++++++--------- fs/xfs/xfs_ialloc.h | 7 +++++++ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index c8f5ae1..9126b59 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c @@ -38,6 +38,7 @@ #include "xfs_bmap.h" #include "xfs_cksum.h" #include "xfs_buf_item.h" +#include "xfs_icreate_item.h" /* @@ -152,7 +153,7 @@ xfs_check_agi_freecount( /* * Initialise a new set of inodes. */ -STATIC int +int xfs_ialloc_inode_init( struct xfs_mount *mp, struct xfs_trans *tp, @@ -208,6 +209,17 @@ xfs_ialloc_inode_init( version = 3; ino = XFS_AGINO_TO_INO(mp, agno, XFS_OFFBNO_TO_AGINO(mp, agbno, 0)); + + /* + * log the initialisation that is about to take place as an + * logical operation. This means the transaction does not + * need to log the physical changes to the inode buffers as log + * recovery will know what initialisation is actually needed. + * Hence we only need to log the buffers as "ordered" buffers so + * they track in the AIL as if they were physically logged. + */ + xfs_icreate_log(tp, agno, agbno, XFS_IALLOC_INODES(mp), + mp->m_sb.sb_inodesize, length, gen); } else if (xfs_sb_version_hasnlink(&mp->m_sb)) version = 2; else @@ -223,13 +235,8 @@ xfs_ialloc_inode_init( XBF_UNMAPPED); if (!fbuf) return ENOMEM; - /* - * Initialize all inodes in this buffer and then log them. - * - * XXX: It would be much better if we had just one transaction - * to log a whole cluster of inodes instead of all the - * individual transactions causing a lot of log traffic. - */ + + /* Initialize the inode buffers and log them appropriately. */ fbuf->b_ops = &xfs_inode_buf_ops; xfs_buf_zero(fbuf, 0, BBTOB(fbuf->b_length)); for (i = 0; i < ninodes; i++) { @@ -253,11 +260,25 @@ xfs_ialloc_inode_init( ioffset + isize - 1); } } + if (version == 3) { - /* need to log the entire buffer */ + /* + * Mark the buffer as ordered so that it is not logged + * in the transaction but still tracked in the AIL as + * part of the transaction. + */ + xfs_trans_ordered_buf(tp, fbuf); xfs_trans_log_buf(tp, fbuf, 0, BBTOB(fbuf->b_length) - 1); } + + /* + * Mark the buffer as an inode allocation buffer so it sticks in + * AIL at the point of this allocation transaction. This ensures + * the they are on disk before the tail of the log can be moved + * past this transaction (i.e. by preventing relogging from + * moving it forward in the log). + */ xfs_trans_inode_alloc_buf(tp, fbuf); } return 0; diff --git a/fs/xfs/xfs_ialloc.h b/fs/xfs/xfs_ialloc.h index c8da3df..ec1cc48 100644 --- a/fs/xfs/xfs_ialloc.h +++ b/fs/xfs/xfs_ialloc.h @@ -152,4 +152,11 @@ int xfs_inobt_get_rec(struct xfs_btree_cur *cur, extern const struct xfs_buf_ops xfs_agi_buf_ops; +/* + * Inode buffer initialisation routine + */ +int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp, + xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_agblock_t length, unsigned int gen); + #endif /* __XFS_IALLOC_H__ */ -- 1.7.10.4 From dave@fromorbit.com Tue May 7 03:05:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 35E9D29E16 for ; Tue, 7 May 2013 03:05:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2E3D18F8033 for ; Tue, 7 May 2013 01:05:06 -0700 (PDT) X-ASG-Debug-ID: 1367913902-04cb6c53a21a430002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 3B2gu53rETNZ4212 for ; Tue, 07 May 2013 01:05:04 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0giABBScvMwhJOQMbGYgLsi6ORY4UhHcDqGKDHyo Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:35:01 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctR-0006ZU-E8 for xfs@oss.sgi.com; Tue, 07 May 2013 18:05:01 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rX-A4 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 5/7] xfs: Inode create transaction reservations Date: Tue, 7 May 2013 18:04:34 +1000 X-ASG-Orig-Subj: [PATCH 5/7] xfs: Inode create transaction reservations Message-Id: <1367913876-30086-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913903 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Define the log and space transaction sizes. Factor the current create log reservation macro into the two logical halves and reuse one half for the new icreate transactions. The icreate transaction is transparent to all the high level create code - the pre-calculated reservations will correctly set the reservations dependent on whether the filesystem supports the icreate transaction. Signed-off-by: Dave Chinner --- fs/xfs/xfs_trans.c | 118 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 77 insertions(+), 41 deletions(-) diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 2fd7c1f..35a2299 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -234,71 +234,93 @@ xfs_calc_remove_reservation( } /* - * For symlink we can modify: + * For create, break it in to the two cases that the transaction + * covers. We start with the modify case - allocation done by modification + * of the state of existing inodes - and the allocation case. + */ + +/* + * For create we can modify: * the parent directory inode: inode size * the new inode: inode size - * the inode btree entry: 1 block + * the inode btree entry: block size + * the superblock for the nlink flag: sector size * the directory btree: (max depth + v2) * dir block size * the directory inode's bmap btree: (max depth + v2) * block size - * the blocks for the symlink: 1 kB - * Or in the first xact we allocate some inodes giving: + */ +STATIC uint +xfs_calc_create_resv_modify( + struct xfs_mount *mp) +{ + return xfs_calc_buf_res(2, mp->m_sb.sb_inodesize) + + xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) + + (uint)XFS_FSB_TO_B(mp, 1) + + xfs_calc_buf_res(XFS_DIROP_LOG_COUNT(mp), XFS_FSB_TO_B(mp, 1)); +} + +/* + * For create we can allocate some inodes giving: * the agi and agf of the ag getting the new inodes: 2 * sectorsize + * the superblock for the nlink flag: sector size * the inode blocks allocated: XFS_IALLOC_BLOCKS * blocksize * the inode btree: max depth * blocksize - * the allocation btrees: 2 trees * (2 * max depth - 1) * block size + * the allocation btrees: 2 trees * (max depth - 1) * block size */ STATIC uint -xfs_calc_symlink_reservation( +xfs_calc_create_resv_alloc( + struct xfs_mount *mp) +{ + return xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + + mp->m_sb.sb_sectsize + + xfs_calc_buf_res(XFS_IALLOC_BLOCKS(mp), XFS_FSB_TO_B(mp, 1)) + + xfs_calc_buf_res(mp->m_in_maxlevels, XFS_FSB_TO_B(mp, 1)) + + xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), + XFS_FSB_TO_B(mp, 1)); +} + +STATIC uint +__xfs_calc_create_reservation( struct xfs_mount *mp) { return XFS_DQUOT_LOGRES(mp) + - MAX((xfs_calc_buf_res(2, mp->m_sb.sb_inodesize) + - xfs_calc_buf_res(1, XFS_FSB_TO_B(mp, 1)) + - xfs_calc_buf_res(XFS_DIROP_LOG_COUNT(mp), - XFS_FSB_TO_B(mp, 1)) + - xfs_calc_buf_res(1, 1024)), - (xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + - xfs_calc_buf_res(XFS_IALLOC_BLOCKS(mp), - XFS_FSB_TO_B(mp, 1)) + - xfs_calc_buf_res(mp->m_in_maxlevels, - XFS_FSB_TO_B(mp, 1)) + - xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), - XFS_FSB_TO_B(mp, 1)))); + MAX(xfs_calc_create_resv_alloc(mp), + xfs_calc_create_resv_modify(mp)); } /* - * For create we can modify: - * the parent directory inode: inode size - * the new inode: inode size - * the inode btree entry: block size - * the superblock for the nlink flag: sector size - * the directory btree: (max depth + v2) * dir block size - * the directory inode's bmap btree: (max depth + v2) * block size - * Or in the first xact we allocate some inodes giving: + * For icreate we can allocate some inodes giving: * the agi and agf of the ag getting the new inodes: 2 * sectorsize * the superblock for the nlink flag: sector size - * the inode blocks allocated: XFS_IALLOC_BLOCKS * blocksize * the inode btree: max depth * blocksize * the allocation btrees: 2 trees * (max depth - 1) * block size */ STATIC uint -xfs_calc_create_reservation( +xfs_calc_icreate_resv_alloc( struct xfs_mount *mp) { + return xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + + mp->m_sb.sb_sectsize + + xfs_calc_buf_res(mp->m_in_maxlevels, XFS_FSB_TO_B(mp, 1)) + + xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), + XFS_FSB_TO_B(mp, 1)); +} + +STATIC uint +xfs_calc_icreate_reservation(xfs_mount_t *mp) +{ return XFS_DQUOT_LOGRES(mp) + - MAX((xfs_calc_buf_res(2, mp->m_sb.sb_inodesize) + - xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) + - (uint)XFS_FSB_TO_B(mp, 1) + - xfs_calc_buf_res(XFS_DIROP_LOG_COUNT(mp), - XFS_FSB_TO_B(mp, 1))), - (xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + - mp->m_sb.sb_sectsize + - xfs_calc_buf_res(XFS_IALLOC_BLOCKS(mp), - XFS_FSB_TO_B(mp, 1)) + - xfs_calc_buf_res(mp->m_in_maxlevels, - XFS_FSB_TO_B(mp, 1)) + - xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), - XFS_FSB_TO_B(mp, 1)))); + MAX(xfs_calc_icreate_resv_alloc(mp), + xfs_calc_create_resv_modify(mp)); +} + +STATIC uint +xfs_calc_create_reservation( + struct xfs_mount *mp) +{ + if (xfs_sb_version_hascrc(&mp->m_sb)) + return xfs_calc_icreate_reservation(mp); + return __xfs_calc_create_reservation(mp); + } /* @@ -311,6 +333,20 @@ xfs_calc_mkdir_reservation( return xfs_calc_create_reservation(mp); } + +/* + * Making a new symplink is the same as creating a new file, but + * with the added blocks for remote symlink data which can be up to 1kB in + * length (MAXPATHLEN). + */ +STATIC uint +xfs_calc_symlink_reservation( + struct xfs_mount *mp) +{ + return xfs_calc_create_reservation(mp) + + xfs_calc_buf_res(1, MAXPATHLEN); +} + /* * In freeing an inode we can modify: * the inode being freed: inode size -- 1.7.10.4 From dave@fromorbit.com Tue May 7 03:05:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8018B29E19 for ; Tue, 7 May 2013 03:05:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 76948304071 for ; Tue, 7 May 2013 01:05:06 -0700 (PDT) X-ASG-Debug-ID: 1367913904-04cb6c53a21a440001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id yBcx7HmfAoZepjbk for ; Tue, 07 May 2013 01:05:04 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0gnw7gQIDNIgLoQmRJY5FjhSEdwOoYoMfKg Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:35:02 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctH-0006Z7-G6 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rB-49 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [RFC, PATCH 0/7] xfs: new icreate transaction Date: Tue, 7 May 2013 18:04:29 +1000 X-ASG-Orig-Subj: [RFC, PATCH 0/7] xfs: new icreate transaction Message-Id: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913904 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi folks, As ben and I discussed during the review of the initial CRC series, inode allocation needs to log the entire inode to ensure the replayed create transaction results in an inode with the correct CRC. This means that the logging overhead of inode create doubled for 256 byte inodes, and is close to 5x higher for 512 byte inodes. Ben suggested that having a transaction to initialise buffers to zero without needing to log them physically might be a way to solve the problem. It would solve the problem, but I already have a patchset from a few years back that introduces a new inode create transaction that doesn't require any physical logging on inodes at all. This patch series is a forward port of my original work from 2009 (hence the SOBs being from david@fromorbit.com) with a couple of more recent patches that will also help reduce inode buffer lookups and hence improve performance. The first two patches are for reducing he number of inode buffer lookups. When we are allocating a new inode, the only reason we look up the inode buffer is to read the generation number so we can increment it. This patch replaces the inode buffer read with radomly calculating a new generation number, resulting in an inode allocation being a purely in-memory operation requiring no IO. There is a caveat to that - for people using noikeep, we still need to ensure the generation number increments monotonically so we only take the new path if that mount option is not set. This reduces buffer lookups under create heavy workloads by roughly 10%. The second patch removes a buffer lookup and modification on unlink that was added for coherency with bulkstat back when bulkstat did non-cohernet inode lookups. bulkstat is using coherent lookups again, so the code in unlink is not necessary any more. The remaining 5 patches are the new icreate transaction series. The first patch introduced ordered buffers. These are buffers that are modified in transactions but are not logged by the transaction. They have an identical lifecycle to a normal buffer, and so pin the tail ofthe log until they are written back. This enables us to do log a logical change and have all the physical changes behave as though physical logging had been performed. This is used for the inode buffers by the new icreate transaction. The rest of the patches are simply mechanical - introducing the inode create log item, the changes to transaction reservations (uses less space in the log), converting the code to selectively use the new logging method and adding recovery support to it. Right now the code will use this transaction if the filesystem is CRC enabled. Given that CRC enabled filesystems are experimental at this point, adding a new log item type should not be a major problem for anyone using them - just make sure the log is clean before downgrading to an older kernel... The patchset passes xfstests on non-CRC filesystems without new regressions and the initial two patches are resulting in a ~10% improvement in 8-way create speed and a ~15% improvement in 8-way unlink speed. I don't have any numbers on CRC enabled filesystems as I've been working on the userspace CRC patchset and getting that into shape rather than tesing and benchmarking kernel CRC code... Comments, thoughts, flames? -Dave. PS. I'm working on an equivalent patchset for unlink that logs the the unlinked list as part of the inode core for CRC enabled filesystems. That's a little bit away from working yet, though... From dave@fromorbit.com Tue May 7 03:05:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7407529E16 for ; Tue, 7 May 2013 03:05:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6BDEF304071 for ; Tue, 7 May 2013 01:05:08 -0700 (PDT) X-ASG-Debug-ID: 1367913902-04cb6c53a21a430003-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Vws9MExMC8z5Q6rI for ; Tue, 07 May 2013 01:05:05 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkLAGe0iFF5LGwY/2dsb2JhbABQgwe/OwSBChd0giABBScvMwhJOQMbGRmHcrIujkWOFIR3A5NflQODHyo Received: from ppp121-44-108-24.lns20.syd6.internode.on.net (HELO dastard) ([121.44.108.24]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2013 17:35:02 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZctH-0006ZB-G8 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZctH-0007rS-92 for xfs@oss.sgi.com; Tue, 07 May 2013 18:04:51 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 4/7] xfs: Inode create log items Date: Tue, 7 May 2013 18:04:33 +1000 X-ASG-Orig-Subj: [PATCH 4/7] xfs: Inode create log items Message-Id: <1367913876-30086-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367913876-30086-1-git-send-email-david@fromorbit.com> References: <1367913876-30086-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1367913905 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Introduce the inode create log item type for logical inode create logging. Instead of logging the changes in buffers, pass the range to be initialised through the log by a new transaction type. This reduces the amount of log space required to record initialisation during allocation from about 128 bytes per inode to a small fixed amount per inode extent to be initialised. This requires a new log item type to track it through the log and the AIL. This is a relatively simple item - most callbacks are noops as this item has the same life cycle as the transaction. Signed-off-by: Dave Chinner --- fs/xfs/Makefile | 1 + fs/xfs/xfs_icreate_item.c | 195 +++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_icreate_item.h | 51 ++++++++++++ fs/xfs/xfs_log.h | 3 +- fs/xfs/xfs_super.c | 8 ++ fs/xfs/xfs_trans.h | 4 +- 6 files changed, 260 insertions(+), 2 deletions(-) create mode 100644 fs/xfs/xfs_icreate_item.c create mode 100644 fs/xfs/xfs_icreate_item.h diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile index 6313b69..4a45080 100644 --- a/fs/xfs/Makefile +++ b/fs/xfs/Makefile @@ -71,6 +71,7 @@ xfs-y += xfs_alloc.o \ xfs_dir2_sf.o \ xfs_ialloc.o \ xfs_ialloc_btree.o \ + xfs_icreate_item.o \ xfs_inode.o \ xfs_log_recover.o \ xfs_mount.o \ diff --git a/fs/xfs/xfs_icreate_item.c b/fs/xfs/xfs_icreate_item.c new file mode 100644 index 0000000..0e4d03c --- /dev/null +++ b/fs/xfs/xfs_icreate_item.c @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2008-2010, Dave Chinner + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_types.h" +#include "xfs_bit.h" +#include "xfs_log.h" +#include "xfs_inum.h" +#include "xfs_trans.h" +#include "xfs_buf_item.h" +#include "xfs_sb.h" +#include "xfs_ag.h" +#include "xfs_dir2.h" +#include "xfs_mount.h" +#include "xfs_trans_priv.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_attr_sf.h" +#include "xfs_dinode.h" +#include "xfs_inode.h" +#include "xfs_inode_item.h" +#include "xfs_btree.h" +#include "xfs_ialloc.h" +#include "xfs_error.h" +#include "xfs_icreate_item.h" + +kmem_zone_t *xfs_icreate_zone; /* inode create item zone */ + +static inline struct xfs_icreate_item *ICR_ITEM(struct xfs_log_item *lip) +{ + return container_of(lip, struct xfs_icreate_item, ic_item); +} + +/* + * This returns the number of iovecs needed to log the given inode item. + * + * We only need one iovec for the icreate log structure. + */ +STATIC uint +xfs_icreate_item_size( + struct xfs_log_item *lip) +{ + return 1; +} + +/* + * This is called to fill in the vector of log iovecs for the + * given inode create log item. + */ +STATIC void +xfs_icreate_item_format( + struct xfs_log_item *lip, + struct xfs_log_iovec *log_vector) +{ + struct xfs_icreate_item *icp = ICR_ITEM(lip); + + log_vector->i_addr = (xfs_caddr_t)&icp->ic_format; + log_vector->i_len = sizeof(struct xfs_icreate_log); + log_vector->i_type = XLOG_REG_TYPE_ICREATE; +} + + +/* Pinning has no meaning for the create item, so just return. */ +STATIC void +xfs_icreate_item_pin( + struct xfs_log_item *lip) +{ +} + + +/* pinning has no meaning for the create item, so just return. */ +STATIC void +xfs_icreate_item_unpin( + struct xfs_log_item *lip, + int remove) +{ +} + +STATIC void +xfs_icreate_item_unlock( + struct xfs_log_item *lip) +{ + struct xfs_icreate_item *icp = ICR_ITEM(lip); + + if (icp->ic_item.li_flags & XFS_LI_ABORTED) + kmem_zone_free(xfs_icreate_zone, icp); + return; +} + +/* + * Because we have ordered buffers being tracked in the AIL for the inode + * creation, we don't need the create item after this. Hence we can free + * the log item and return -1 to tell the caller we're done with the item. + * be relogged, so just return the current lsn here. + */ +STATIC xfs_lsn_t +xfs_icreate_item_committed( + struct xfs_log_item *lip, + xfs_lsn_t lsn) +{ + struct xfs_icreate_item *icp = ICR_ITEM(lip); + + kmem_zone_free(xfs_icreate_zone, icp); + return (xfs_lsn_t)-1; +} + +/* item can never get into the AIL */ +STATIC uint +xfs_icreate_item_push( + struct xfs_log_item *lip, + struct list_head *buffer_list) +{ + ASSERT(0); + return XFS_ITEM_SUCCESS; +} + +/* Ordered buffers do the dependency tracking here, so this does nothing. */ +STATIC void +xfs_icreate_item_committing( + struct xfs_log_item *lip, + xfs_lsn_t lsn) +{ +} + +/* + * This is the ops vector shared by all buf log items. + */ +static struct xfs_item_ops xfs_icreate_item_ops = { + .iop_size = xfs_icreate_item_size, + .iop_format = xfs_icreate_item_format, + .iop_pin = xfs_icreate_item_pin, + .iop_unpin = xfs_icreate_item_unpin, + .iop_push = xfs_icreate_item_push, + .iop_unlock = xfs_icreate_item_unlock, + .iop_committed = xfs_icreate_item_committed, + .iop_committing = xfs_icreate_item_committing, +}; + + +/* + * Initialize the inode log item for a newly allocated (in-core) inode. + * + * Inode extents can only reside within an AG. Hence specify the starting + * block for the inode chunk by offset within an AG as well as the + * length of the allocated extent. + * + * This joins the item to the transaction and marks it dirty so + * that we don't need a separate call to do this, nor does the + * caller need to know anything about the icreate item. + */ +void +xfs_icreate_log( + struct xfs_trans *tp, + xfs_agnumber_t agno, + xfs_agblock_t agbno, + unsigned int count, + unsigned int inode_size, + xfs_agblock_t length, + unsigned int generation) +{ + struct xfs_icreate_item *icp; + + icp = kmem_zone_zalloc(xfs_icreate_zone, KM_SLEEP); + + icp->ic_item.li_type = XFS_LI_ICREATE; + icp->ic_item.li_ops = &xfs_icreate_item_ops; + icp->ic_item.li_mountp = tp->t_mountp; + + icp->ic_format.icl_type = XFS_LI_ICREATE; + icp->ic_format.icl_size = 1; /* single vector */ + icp->ic_format.icl_ag = cpu_to_be32(agno); + icp->ic_format.icl_agbno = cpu_to_be32(agbno); + icp->ic_format.icl_count = cpu_to_be32(count); + icp->ic_format.icl_isize = cpu_to_be32(inode_size); + icp->ic_format.icl_length = cpu_to_be32(length); + icp->ic_format.icl_gen = cpu_to_be32(generation); + + xfs_trans_add_item(tp, &icp->ic_item); +} diff --git a/fs/xfs/xfs_icreate_item.h b/fs/xfs/xfs_icreate_item.h new file mode 100644 index 0000000..cf5344b --- /dev/null +++ b/fs/xfs/xfs_icreate_item.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2008-2010, Dave Chinner + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef XFS_ICREATE_ITEM_H +#define XFS_ICREATE_ITEM_H 1 + +/* + * on disk log item structure + * + * Log recovery assumes the first two entries are the type and + * size and they fit in 32 bits. Also in host order (ugh) + */ +struct xfs_icreate_log { + __uint16_t icl_type; /* type of log format structure */ + __uint16_t icl_size; /* size of log format structure */ + __be32 icl_ag; /* ag being allocated in */ + __be32 icl_agbno; /* start block of inode range */ + __be32 icl_count; /* number of inodes to initialise */ + __be32 icl_isize; /* size of inodes */ + __be32 icl_length; /* length of extent to initialise */ + __be32 icl_gen; /* inode generation number to use */ +}; + +/* in memory log item structure */ +struct xfs_icreate_item { + struct xfs_log_item ic_item; + struct xfs_icreate_log ic_format; +}; + +extern kmem_zone_t *xfs_icreate_zone; /* inode create item zone */ + +void xfs_icreate_log(struct xfs_trans *tp, xfs_agnumber_t agno, + xfs_agblock_t agbno, unsigned int count, + unsigned int inode_size, xfs_agblock_t length, + unsigned int generation); + +#endif /* XFS_ICREATE_ITEM_H */ diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h index 5caee96..70cc014 100644 --- a/fs/xfs/xfs_log.h +++ b/fs/xfs/xfs_log.h @@ -88,7 +88,8 @@ static inline xfs_lsn_t _lsn_cmp(xfs_lsn_t lsn1, xfs_lsn_t lsn2) #define XLOG_REG_TYPE_UNMOUNT 17 #define XLOG_REG_TYPE_COMMIT 18 #define XLOG_REG_TYPE_TRANSHDR 19 -#define XLOG_REG_TYPE_MAX 19 +#define XLOG_REG_TYPE_ICREATE 20 +#define XLOG_REG_TYPE_MAX 20 typedef struct xfs_log_iovec { void *i_addr; /* beginning address of region */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index ea341ce..a9d5df7 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -51,6 +51,7 @@ #include "xfs_inode_item.h" #include "xfs_icache.h" #include "xfs_trace.h" +#include "xfs_icreate_item.h" #include #include @@ -1644,9 +1645,15 @@ xfs_init_zones(void) KM_ZONE_SPREAD, NULL); if (!xfs_ili_zone) goto out_destroy_inode_zone; + xfs_icreate_zone = kmem_zone_init(sizeof(struct xfs_icreate_item), + "xfs_icr"); + if (!xfs_icreate_zone) + goto out_destroy_ili_zone; return 0; + out_destroy_ili_zone: + kmem_zone_destroy(xfs_ili_zone); out_destroy_inode_zone: kmem_zone_destroy(xfs_inode_zone); out_destroy_efi_zone: @@ -1685,6 +1692,7 @@ xfs_destroy_zones(void) * destroy caches. */ rcu_barrier(); + kmem_zone_destroy(xfs_icreate_zone); kmem_zone_destroy(xfs_ili_zone); kmem_zone_destroy(xfs_inode_zone); kmem_zone_destroy(xfs_efi_zone); diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 850fe78..079d5a0 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -48,6 +48,7 @@ typedef struct xfs_trans_header { #define XFS_LI_BUF 0x123c /* v2 bufs, variable sized inode bufs */ #define XFS_LI_DQUOT 0x123d #define XFS_LI_QUOTAOFF 0x123e +#define XFS_LI_ICREATE 0x123f #define XFS_LI_TYPE_DESC \ { XFS_LI_EFI, "XFS_LI_EFI" }, \ @@ -107,7 +108,8 @@ typedef struct xfs_trans_header { #define XFS_TRANS_SWAPEXT 40 #define XFS_TRANS_SB_COUNT 41 #define XFS_TRANS_CHECKPOINT 42 -#define XFS_TRANS_TYPE_MAX 42 +#define XFS_TRANS_ICREATE 43 +#define XFS_TRANS_TYPE_MAX 43 /* new transaction types need to be reflected in xfs_logprint(8) */ #define XFS_TRANS_TYPES \ -- 1.7.10.4 From bernd.schubert@itwm.fraunhofer.de Tue May 7 06:18:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1F5E929DF8 for ; Tue, 7 May 2013 06:18:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 014EF304067 for ; Tue, 7 May 2013 04:18:19 -0700 (PDT) X-ASG-Debug-ID: 1367925496-04cbb05fe57ee40001-w1Z2WR Received: from mailgw1.uni-kl.de (mailgw1.uni-kl.de [131.246.120.220]) by cuda.sgi.com with ESMTP id a6FL5FlRafgyIFAD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 May 2013 04:18:17 -0700 (PDT) X-Barracuda-Envelope-From: bernd.schubert@itwm.fraunhofer.de X-Barracuda-Apparent-Source-IP: 131.246.120.220 Received: from itwm2.itwm.fhg.de (itwm2.itwm.fhg.de [131.246.191.3]) by mailgw1.uni-kl.de (8.14.3/8.14.3/Debian-9.4) with ESMTP id r47BIF5Y003020 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NOT) for ; Tue, 7 May 2013 13:18:15 +0200 Received: from mail2.itwm.fhg.de ([131.246.191.79]:51301) by itwm2.itwm.fhg.de with esmtps (TLSv1:DES-CBC3-SHA:168) (/C=DE/ST=Rheinland-Pfalz/L=Kaiserslautern/O=Fraunhofer ITWM/OU=SLG/CN=mail2.itwm.fhg.de)(verified=1) (Exim 4.74 #1) id 1UZfuQ-0000af-7b; Tue, 07 May 2013 13:18:14 +0200 Message-ID: <5188E2F5.1090304@itwm.fraunhofer.de> Date: Tue, 07 May 2013 13:18:13 +0200 From: Bernd Schubert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: <20130507011254.GP19978@dastard> Content-Type: multipart/mixed; boundary="------------060509090104050902070601" X-ITWM-CharSet: X-ITWM-CharSet: ISO-8859-1 X-ITWM-CharSet: UTF-8 X-ITWM-Scanned-By: mail2.itwm.fhg.de X-Barracuda-Connect: mailgw1.uni-kl.de[131.246.120.220] X-Barracuda-Start-Time: 1367925497 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130256 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 This is a multi-part message in MIME format. --------------060509090104050902070601 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/2013 03:12 AM, Dave Chinner wrote: > On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: >> On 05/06/2013 02:28 PM, Dave Chinner wrote: >>> On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: >>>> And anpther protection fault, this time with 3.9.0. Always happens >>>> on one of the servers. Its ECC memory, so I don't suspect a faulty >>>> memory bank. Going to fsck now- >>> >>> http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F >> >> Isn't that a bit overhead? And I can't provide /proc/meminfo and >> others, as this issue causes a kernel panic a few traces later. > > Provide what information you can. Without knowing a single thing > about your hardware, storage config and workload, I can't help you > at all. You're asking me to find a needle in a haystack blindfolded > and with both hands tied behind my back.... I see that xfs_info, meminfo, etc are useful, but /proc/mounts? Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the output of /proc/mounts, please let me know if you were really interested in all of that non-xfs output? And I just wonder what you are going to do with the information about the hardware. So it is an Areca hw-raid5 device with 9 disks. But does this help? It doesn't tell if one of the disks reads/writes with hickups or provides any performance characteristics at all. > > Stuff like /proc/meminfo doesn't have to be provided from exactly > the time of the crash - it's just the simplest way to find out how > much RAM you have in the machine, so a dump from whenever the > machine is up and running the workload is fine. Other information we > ask for (e.g. capturing the output of `vmstat 5` as suggested in the > FAQ) gives us the runtime variation of memory usage and easy to > capture right up to the failure point... I have started collectl now, it logs meminfo and other useful information. But still with all of that, are you sure xfs debugging information wouldn't be more useful? For example setting a "#define debug" in xfs_trans_ail.c? Cheers, Bernd --------------060509090104050902070601 Content-Type: text/plain; charset=UTF-8; name="mounts.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mounts.txt" rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 udev /dev devtmpfs rw,relatime,size=3482172k,nr_inodes=870543,mode=755 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,nosuid,relatime,size=1406060k,mode=755 0 0 192.168.40.150:/chroots/squeeze64 / nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=7,retrans=10,sec=sys,local_lock=all,addr=192.168.40.150 0 0 tmpfs /tmp tmpfs rw,relatime 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,relatime,mode=755 0 0 172.18.25.3://scratch/unionfs/groups/squeeze /unionfs/group nfs rw,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=600,retrans=2,sec=sys,mountaddr=172.18.25.3,mountvers=3,mountport=52204,mountproto=tcp,local_lock=all,addr=172.18.25.3 0 0 172.18.25.3://scratch/unionfs/hosts/192.168.40.112 /unionfs/host nfs rw,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=600,retrans=2,sec=sys,mountaddr=172.18.25.3,mountvers=3,mountport=52204,mountproto=tcp,local_lock=all,addr=172.18.25.3 0 0 192.168.40.150:/chroots/squeeze64/root /unionfs/common/root nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=7,retrans=10,sec=sys,local_lock=all,addr=192.168.40.150 0 0 unionfs-fuse /unionfs/union/root fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 unionfs-fuse /root fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 192.168.40.150:/chroots/squeeze64/etc /unionfs/common/etc nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=7,retrans=10,sec=sys,local_lock=all,addr=192.168.40.150 0 0 unionfs-fuse /unionfs/union/etc fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 unionfs-fuse /etc fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 192.168.40.150:/chroots/squeeze64/var /unionfs/common/var nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=7,retrans=10,sec=sys,local_lock=all,addr=192.168.40.150 0 0 unionfs-fuse /unionfs/union/var fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 unionfs-fuse /var fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 192.168.40.150:/chroots/squeeze64/opt /unionfs/common/opt nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,port=2049,timeo=7,retrans=10,sec=sys,local_lock=all,addr=192.168.40.150 0 0 unionfs-fuse /unionfs/union/opt fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 unionfs-fuse /opt fuse.unionfs-fuse rw,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0 /dev/sdc /data/fhgfs/meta ext4 rw,relatime,journal_checksum,journal_async_commit,nobarrier,data=writeback 0 0 /dev/sdb /data/fhgfs/storage1 xfs rw,relatime,attr2,inode64,logbsize=128k,sunit=256,swidth=2048,noquota 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0 nfsd /proc/fs/nfsd nfsd rw,relatime 0 0 fsdevel3:/home/schubert/src /home/schubert/src fuse.sshfs rw,nosuid,nodev,relatime,user_id=5741,group_id=2130,allow_other,max_read=65536 0 0 --------------060509090104050902070601-- From sandeen@sandeen.net Tue May 7 08:20:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2A1FB29DF8 for ; Tue, 7 May 2013 08:20:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1A7FA304071 for ; Tue, 7 May 2013 06:20:09 -0700 (PDT) X-ASG-Debug-ID: 1367932808-04cbb05fe4b1e20001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 6q2OOooK4W2ppdOI for ; Tue, 07 May 2013 06:20:09 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id AD8A963C5FF1; Tue, 7 May 2013 08:20:08 -0500 (CDT) Message-ID: <5188FF88.6000508@sandeen.net> Date: Tue, 07 May 2013 08:20:08 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Filippo Stenico CC: xfs@oss.sgi.com Subject: Re: Xfs_repair segfaults. References: <5187BF8A.2040303@sandeen.net> X-ASG-Orig-Subj: Re: Xfs_repair segfaults. In-Reply-To: X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367932808 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/7/13 4:27 AM, Filippo Stenico wrote: > Hello, > this is a start-over to try hard to recover some more data out of my raid5 - lvm - xfs toasted volume. > My goal is either to try the best to get some more data out of the volume, and see if I can reproduce the segfault. > I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to put original metadata on the cloned raid volume i had zeroed the log on before via xfs_repair -L (i figured none of the actual data was modified before as I am just working on metadata.. right?). > Then I ran a mount, checked a dir that I knew it was corrupted, unmount and try an xfs_repair (commands.txt attached for details) > I went home to sleep, but at morning I found out that kernel paniced due "out of memory and no killable process". > I ran repair without -P... Should I try now disabling inode prefetch? > Attached are also output of "free" and "top" at time of panic, as well as the output of xfs_repair and strace attached to it. Dont think gdb symbols would help here.... > > Ho hum, well, no segfault this time, just an out of memory error? No real way to know where it went from the available data I think. A few things: > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ > mount: Structure needs cleaning mount failed? Now's the time to look at dmesg to see why. >From attached logs it seems to be: > XFS internal error xlog_valid_rec_header(1) at line 3466 of file [...2.6.32...]/fs/xfs/xfs_log_recover.c > XFS: log mount/recovery failed: error 117 > root@ws1000:~# mount > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ > root@ws1000:~# mount | grep raid0 > /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota) Uh, now it worked, with no other steps in between? That's a little odd. It found a clean log this time: > XFS mounting filesystem dm-1 > Ending clean XFS mount for filesystem: dm-1 which is unexpected. So the memory consumption might be a bug but there's not enough info to go on here. > PS. Let me know if you wish reports like this one on list. worth reporting, but I'm not sure what we can do with it. Your storage is in pretty bad shape, and xfs_repair can't make something out of nothing. -Eric From JBacik@fusionio.com Tue May 7 08:28:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1EED629DFA for ; Tue, 7 May 2013 08:28:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id EBAFB304071 for ; Tue, 7 May 2013 06:28:11 -0700 (PDT) X-ASG-Debug-ID: 1367933290-04cbb05fe4b2f60001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id wPQaRz6uKrEJCHiJ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 May 2013 06:28:10 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id 110159A0645 for ; Tue, 7 May 2013 07:28:10 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1367933290; bh=ymNOcVPXuH+xdwCQW+ru8tgd/GIX3pZA+orzm3d2rOM=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=myKT+XbLy5/5Ib13eMa6ESWRqjQxEjbIhhWaA34zFb0vb4wxf/RjOQHcxQ59BnESo h5gXE2IjTZ2GZ7/9J3hqcZ8ZTYuIcX1R1pJ4V1sucKoKQXOkMK6LHGtab62i6DFK/8 CcWiv5ZIgMtj21YU+IglRghULJFn0wxaXm2ap/+g= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id plGAy0EGpxHZJCcn (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Tue, 07 May 2013 07:28:09 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Tue, 7 May 2013 07:28:08 -0600 Date: Tue, 7 May 2013 09:28:07 -0400 From: Josef Bacik To: Dave Chinner CC: "xfs@oss.sgi.com" , Josef Bacik Subject: Re: [BULK] Re: [problem] xfstests generic/311 unreliable... Message-ID: <20130507132807.GM12414@localhost.localdomain> X-ASG-Orig-Subj: Re: [BULK] Re: [problem] xfstests generic/311 unreliable... References: <20130507071102.GA24635@dastard> <20130507073717.GB24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20130507073717.GB24635@dastard> User-Agent: Mutt/1.5.21 (2011-07-01) X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1367933290 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, May 07, 2013 at 01:37:17AM -0600, Dave Chinner wrote: > Argh, add the cc to Josef... > > On Tue, May 07, 2013 at 05:11:02PM +1000, Dave Chinner wrote: > > Hi Josef, > > > > I was just looking at a generic/311, and I think there's something > > fundamentally wrong with the way it is checking the scratch device. > > > > You reported it was failing for internal test 19 on XFS, but I'm > > seeing is fail after the first test or 2, randomly. It has never > > made it past test 3. So I had a little bit of a closer look at it's > > structure. Essentially it is doing this (and the contents seen by > > each step: > > > > scratch dev + mkfs > > +-------------------------------+ > > overlay dm-flakey > > D-------------------------------D > > mount/write/kill/unmount dm-flakey > > Dx-x-x-x-x-x-x------------------D > > > > All good up to here. Now, you can _check_scratch_fs which sees: > > > > scratch dev + check > > +-------------------------------+ > > > > i.e. it's not seeing all the changes written to dm-flakey and so > > xfs-check it seeing corruption. > > > > After I realised this was stacking block devices and checking the > > underlying block device, the cause was pretty obvious: scratch-dev > > and dm-flakey have different address spaces, so changes written > > throughone address space will not be seen through the other address > > space if there is stale cached data in the original address space. > > > > And that's exactly what is happening. This patch: > > > > --- a/tests/generic/311 > > +++ b/tests/generic/311 > > @@ -79,6 +79,7 @@ _mount_flakey() > > _unmount_flakey() > > { > > $UMOUNT_PROG $SCRATCH_MNT > > + echo 3 > /proc/sys/vm/drop_caches > > } > > > > _load_flakey_table() > > > > Makes the problem go away for xfs_check. But really, I don't like > > the assumption that the test is built on - that writes through one > > block device are visible through another. It's just asking for weird > > problems. > > > > Is there some way that you can restructure this test so it doesn't > > have this problem (e.g. do everything on dm-flakey)? Yup I can do that, honestly the only reason I was doing it this way was because my original script which this test is based on did this all to a raw disk with a real reboot in there. I'll fix it up and send a patch. Thanks, Josef From filippo.stenico@gmail.com Tue May 7 08:37:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 05B1B29DF8 for ; Tue, 7 May 2013 08:37:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DD1BC30406B for ; Tue, 7 May 2013 06:37:25 -0700 (PDT) X-ASG-Debug-ID: 1367933843-04cb6c53a2b1d90001-NocioJ Received: from mail-lb0-f182.google.com (mail-lb0-f182.google.com [209.85.217.182]) by cuda.sgi.com with ESMTP id 6vfbeUoRhDzjwnQP (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 07 May 2013 06:37:24 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.217.182 X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.182] Received: by mail-lb0-f182.google.com with SMTP id r11so731524lbv.13 for ; Tue, 07 May 2013 06:37:22 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.182] X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.182] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=oBeXsloi9UveHeXdQVjqZo62i3eqz6ty5Q6yiODqvy8=; b=SW/fWMi2WnnCyq/Wi22zygIdIQjEDrdBKFUBtGNrsXH8oM7G3REyEr/haj6/357jzq 3DjWWwFzqUm/GLD8FkdCtg1+ERwcM15SFA70agAfb7yO1b7RkSqQu2WnXb2KM5mQLXWQ Iw54VrCBJwOASKDaeJ09clCb9tc5dOv+b99iI2UMe5zAOmWjFvSYMauPEoLWmUlgJb8v QfjK84pQACzvhcF+NjVu/7TWDrDSfxrvKgMMz8NJB+d1KnvSLv2C+Mvie5ibyM8rqyqh HAkEFVXIs6ZWHiChBE4oXm/C9dv9joO8jiHhrOVK5PknrKj658S8Cq9ykB/VZvZD6rY7 f3Ig== X-Received: by 10.112.167.168 with SMTP id zp8mr1094859lbb.58.1367933842815; Tue, 07 May 2013 06:37:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Tue, 7 May 2013 06:36:42 -0700 (PDT) In-Reply-To: <5188FF88.6000508@sandeen.net> References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> From: Filippo Stenico Date: Tue, 7 May 2013 15:36:42 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Eric Sandeen X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c2a884c6fe1904dc20ea6b X-Barracuda-Connect: mail-lb0-f182.google.com[209.85.217.182] X-Barracuda-Start-Time: 1367933844 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c2a884c6fe1904dc20ea6b Content-Type: text/plain; charset=ISO-8859-1 On Tue, May 7, 2013 at 3:20 PM, Eric Sandeen wrote: > On 5/7/13 4:27 AM, Filippo Stenico wrote: > > Hello, > > this is a start-over to try hard to recover some more data out of my > raid5 - lvm - xfs toasted volume. > > My goal is either to try the best to get some more data out of the > volume, and see if I can reproduce the segfault. > > I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to > put original metadata on the cloned raid volume i had zeroed the log on > before via xfs_repair -L (i figured none of the actual data was modified > before as I am just working on metadata.. right?). > > Then I ran a mount, checked a dir that I knew it was corrupted, unmount > and try an xfs_repair (commands.txt attached for details) > > I went home to sleep, but at morning I found out that kernel paniced due > "out of memory and no killable process". > > I ran repair without -P... Should I try now disabling inode prefetch? > > Attached are also output of "free" and "top" at time of panic, as well > as the output of xfs_repair and strace attached to it. Dont think gdb > symbols would help here.... > > > > > > > Ho hum, well, no segfault this time, just an out of memory error? > That's right.... > No real way to know where it went from the available data I think. > > A few things: > > > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ > > mount: Structure needs cleaning > > mount failed? Now's the time to look at dmesg to see why. > >From attached logs it seems to be: > > > XFS internal error xlog_valid_rec_header(1) at line 3466 of file > [...2.6.32...]/fs/xfs/xfs_log_recover.c > > XFS: log mount/recovery failed: error 117 > > > root@ws1000:~# mount > > > > > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ > > root@ws1000:~# mount | grep raid0 > > /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota) > > Uh, now it worked, with no other steps in between? That's a little odd. > Looks odd to me too. But i just copied the commands issued as they where on my console... so yes, nothing in between. > It found a clean log this time: > > > XFS mounting filesystem dm-1 > > Ending clean XFS mount for filesystem: dm-1 > > which is unexpected. > > So the memory consumption might be a bug but there's not enough info to go > on here. > > > PS. Let me know if you wish reports like this one on list. > > worth reporting, but I'm not sure what we can do with it. > Your storage is in pretty bad shape, and xfs_repair can't make something > out > of nothing. > > -Eric > I still got back around 6TB out of 7.2 TB of total data stored, so this tells xfs is reliable even when major faults occur... Thanks anyways, I am trying with a "-L" repair, at this step I expect another fail (due out of memory or something, as it happened last time) then I will try with "xfs_repair -L -vv -P" and I expect to see that segfault again. Will report next steps, maybe something interesting for you will pop up... for me is not a waste of time, since this last try is worth being made. -- F --001a11c2a884c6fe1904dc20ea6b Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

On Tue, May 7, 2013 at 3:20 PM, Eric San= deen <sandeen@sandeen.net> wrote:
On 5/7/13 4:27 AM, Filippo Stenico wrote:
> Hello,
> this is a start-over to try hard to recover so= me more data out of my raid5 - lvm - xfs toasted volume.
> My goal is either to try the best to get some more data out of the vol= ume, and see if I can reproduce the segfault.
> I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to = put original metadata on the cloned raid volume i had zeroed the log on bef= ore via xfs_repair -L (i figured none of the actual data was modified befor= e as I am just working on metadata.. right?).
> Then I ran a mount, checked a dir that I knew it was corrupted, unmoun= t and try an xfs_repair (commands.txt attached for details)
> I went home to sleep, but at morning I found out that kernel paniced d= ue "out of memory and no killable process".
> I ran repair without -P... Should I try now disabling inode prefetch?<= br> > Attached are also output of "free" and "top" at ti= me of panic, as well as the output of xfs_repair and strace attached to it.= Dont think gdb symbols would help here....
>

>

Ho hum, well, no segfault this time, just an out of memory error?
=
That's right....
No real way to know where it went from the available data I think.

A few things:

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> mount: Structure needs cleaning

mount failed? =A0Now's the time to look at dmesg to see why.
=A0
>From attached logs it seems to be:

> XFS internal error xlog_valid_rec_header(1) at line 3466 of file [...2= .6.32...]/fs/xfs/xfs_log_recover.c
> XFS: log mount/recovery failed: error 117

> root@ws1000:~# mount

<no raid0 mounted>

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> root@ws1000:~# mount | grep raid0
> /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota= )

Uh, now it worked, with no other steps in between? =A0That's a little o= dd.
Looks odd to me too. But i just copied the commands issue= d as they where on my console... so yes, nothing in between.=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px= #ccc solid;padding-left:1ex"> It found a clean log this time:

> XFS mounting filesystem dm-1
> Ending clean XFS mount for filesystem: dm-1

which is unexpected.

So the memory consumption might be a bug but there's not enough info to= go on here.

> PS. Let me know if you wish reports like this one on list.

worth reporting, but I'm not sure what we can do with it.
Your storage is in pretty bad shape, and xfs_repair can't make somethin= g out
of nothing.

-Eric
=A0
I still got back ar= ound 6TB out of 7.2 TB of total data stored, so this tells xfs is reliable = even when major faults occur...

Thanks anyways, I am trying with a &= quot;-L" repair, at this step I expect another fail (due out of memory= or something, as it happened last time) then I will try with "xfs_rep= air -L -vv -P" and I expect to see that segfault again.

Will report next steps, maybe something interesting for you will pop up= ... for me is not a waste of time, since this last try is worth being made.=

--
F --001a11c2a884c6fe1904dc20ea6b-- From markus@trippelsdorf.de Tue May 7 08:43:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9205629DF8 for ; Tue, 7 May 2013 08:43:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7FD6E3040A4 for ; Tue, 7 May 2013 06:43:14 -0700 (PDT) X-ASG-Debug-ID: 1367934191-04cbb05fe2b3f40001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id DxhRkV3ju3ajJtvp (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 May 2013 06:43:12 -0700 (PDT) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=beta; bh=y8bYX6wrV+YMABkkzdG3HEZa03 Ypz8dh/zkuhFG2O6g=; b=u5tvZvOyMlnt0TDA3ZnZsWzyH+idPjYJHWu5MckRs9 OdcKZodVrj4OdXRciu0Led3elWR9Y2VTDhF7EeRcofB0xwMwMH91r67DhnuQKFLC GRv3mhoP/JDIPa7/NCnsZOqcqE06ykn+ii4BFQAlXitEkHnNmxvE1LAnTxBFojsY 0= Received: (qmail 25669 invoked from network); 7 May 2013 15:43:10 +0200 Received: from unknown (HELO x4) (ud10?360p3@91.64.96.185) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 7 May 2013 15:43:10 +0200 Date: Tue, 7 May 2013 15:43:10 +0200 From: Markus Trippelsdorf To: Dave Chinner Cc: Eric Sandeen , xfs@oss.sgi.com, util-linux@vger.kernel.org, Karel Zak Subject: Re: Mount probing not silent. Internal error xfs_sb_read_verify at line 726 Message-ID: <20130507134310.GA519@x4> X-ASG-Orig-Subj: Re: Mount probing not silent. Internal error xfs_sb_read_verify at line 726 References: <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> <20130507002314.GM19978@dastard> <20130507052430.GA508@x4> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130507052430.GA508@x4> X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1367934192 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 2013.05.07 at 07:24 +0200, Markus Trippelsdorf wrote: > On 2013.05.07 at 10:23 +1000, Dave Chinner wrote: > > That's just completely broken mount behaviour. Probing is supposed > > to be *silent*, and this is just downright obnxious. Here's what I > > get in my log after doing this: > > > > # dd if=/dev/zero of=/dev/vdb bs=512 count=1 > > # blkid -g > > # mount /dev/vdb /mnt/scratch/ > > mount: you must specify the filesystem type > > $ dmesg > > ...... > > [83182.775467] REISERFS warning (device vdb): sh-2021 reiserfs_fill_super: can not find reiserfs on vdb > > [83182.778473] EXT3-fs (vdb): error: can't find ext3 filesystem on dev vdb. > > [83182.781135] EXT2-fs (vdb): error: can't find an ext2 filesystem on dev vdb. > > [83182.783524] EXT4-fs (vdb): VFS: Can't find ext4 filesystem > > [83182.787392] cramfs: wrong magic > > [83182.788926] SQUASHFS error: Can't find a SQUASHFS superblock on vdb > > [83182.791150] VFS: Can't find a Minix filesystem V1 | V2 | V3 on device vdb. > > [83182.793737] FAT-fs (vdb): bogus number of reserved sectors > > [83182.795202] FAT-fs (vdb): Can't find a valid FAT filesystem > > [83182.797268] FAT-fs (vdb): bogus number of reserved sectors > > [83182.798984] FAT-fs (vdb): Can't find a valid FAT filesystem > > [83182.801236] BFS-fs: bfs_fill_super(): No BFS filesystem on vdb (magic=00000000) > > [83182.846555] ISOFS: Unable to identify CD-ROM format. > > [83182.849136] hfs: unable to find HFS+ superblock > > [83182.851164] hfs: can't find a HFS filesystem on dev vdb. > > [83182.853204] vxfs: WRONG superblock magic > > [83182.856855] VFS: unable to find oldfs superblock on device vdb > > [83182.858930] VFS: could not find a valid V7 on vdb. > > [83182.860938] NTFS-fs error (device vdb): read_ntfs_boot_sector(): Primary boot sector is invalid. > > [83182.863247] NTFS-fs error (device vdb): read_ntfs_boot_sector(): Mount option errors=recover not used. Aborting without trying to recover. > > [83182.866563] NTFS-fs error (device vdb): ntfs_fill_super(): Not an NTFS volume. > > [83182.873922] AFFS: No valid root block on device vdb > > [83182.875697] VFS: Can't find a romfs filesystem on dev vdb. > > [83182.877823] qnx4: wrong fsid in superblock. > > [83182.884286] UDF-fs: warning (device vdb): udf_load_vrs: No VRS found > > [83182.886217] UDF-fs: Rescanning with blocksize 2048 > > [83182.891965] UDF-fs: warning (device vdb): udf_load_vrs: No VRS found > > [83182.893730] UDF-fs: warning (device vdb): udf_fill_super: No partition found (1) > > [83182.896216] omfs: Invalid superblock (0) > > [83182.898937] XFS (vdb): bad magic number > > [83182.900150] ffff88007bbce000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > [83182.902676] ffff88007bbce010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > [83182.905281] ffff88007bbce020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > [83182.907845] ffff88007bbce030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > [83182.910559] XFS (vdb): Internal error xfs_sb_read_verify at line 726 of file fs/xfs/xfs_mount.c. Caller 0xffffffff814645e5 > > [83182.910559] > > [83182.914377] Pid: 1064, comm: kworker/0:1H Not tainted 3.9.0-rc8-dgc+ #575 > > [83182.916499] Call Trace: > > [83182.917245] [] xfs_error_report+0x3f/0x50 > > [83182.918762] [] ? xfs_buf_iodone_work+0xc5/0xf0 > > [83182.920113] [] xfs_corruption_error+0x5e/0x90 > > [83182.921351] [] xfs_sb_read_verify+0x11a/0x130 > > [83182.922692] [] ? xfs_buf_iodone_work+0xc5/0xf0 > > [83182.923972] [] ? finish_task_switch+0x65/0x100 > > [83182.925343] [] xfs_buf_iodone_work+0xc5/0xf0 > > [83182.926634] [] process_one_work+0x170/0x400 > > [83182.927832] [] worker_thread+0x116/0x390 > > [83182.929116] [] ? busy_worker_rebind_fn+0xb0/0xb0 > > [83182.930460] [] kthread+0xd8/0xe0 > > [83182.931469] [] ? kthread_create_on_node+0x140/0x140 > > [83182.932921] [] ret_from_fork+0x7c/0xb0 > > [83182.934047] [] ? kthread_create_on_node+0x140/0x140 > > [83182.935489] XFS (vdb): Corruption detected. Unmount and run xfs_repair > > [83182.937045] XFS (vdb): SB validate failed with error 22. > > [83182.940181] NILFS: Can't find nilfs on dev vdb. > > [83182.941321] BeFS(vdb): No write support. Marking filesystem read-only > > [83182.943036] BeFS(vdb): invalid magic header > > [83182.946526] (mount,23815,1):ocfs2_fill_super:1039 ERROR: superblock probe failed! > > [83182.948515] (mount,23815,1):ocfs2_fill_super:1230 ERROR: status = -22 > > [83182.951606] GFS2: not a GFS2 filesystem > > [83182.952898] GFS2: gfs2 mount does not exist > > [83182.954425] F2FS-fs (vdb): Magic Mismatch, valid(0xf2f52010) - read(0x49474158) > > [83182.956540] F2FS-fs (vdb): Can't find a valid F2FS filesystem in first superblock > > [83182.959044] F2FS-fs (vdb): Magic Mismatch, valid(0xf2f52010) - read(0x0) > > [83182.960894] F2FS-fs (vdb): Can't find a valid F2FS filesystem in second superblock > > > > I've removed logfs from my kernels because this probing causes > > logfs to oops the kernel... > > > > I think that mount needs fixing, not XFS. mount needs to be doing > > silent mounts when doing this brute forcing, not noisy, explicit > > mounts that we expect to throw errors if there is a problem. > > > BTW, strace indicates that MS_SILENT is not being used during brute > > force mounts: > > > > # strace -vx mount /dev/vdb /mnt/scratch/ 2>&1 |grep ^mount > > mount("/dev/vdb", "/mnt/scratch/", "reiserfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext3", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext2", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > .... > > > > So this really looks like a bug in mount, not the filesystem handling > > of slient mounts... What about the following patch? diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index d287361..31053b9 100644 --- a/libmount/src/context_mount.c +++ b/libmount/src/context_mount.c @@ -658,7 +658,7 @@ static int do_mount(struct libmnt_context *cxt, const char *try_type) type = try_type ? : mnt_fs_get_fstype(cxt->fs); if (!(flags & MS_MGC_MSK)) - flags |= MS_MGC_VAL; + flags |= (MS_MGC_VAL|MS_SILENT); DBG(CXT, mnt_debug_h(cxt, "%smount(2) " "[source=%s, target=%s, type=%s, " -- Markus From Monica.Johnson@bcm.edu Tue May 7 08:53:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 50C8F29DF8 for ; Tue, 7 May 2013 08:53:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 33FB18F80B5 for ; Tue, 7 May 2013 06:53:34 -0700 (PDT) X-ASG-Debug-ID: 1367934811-04cbb05fe4b4530001-NocioJ Received: from iron2.corp.bcm.tmc.edu (iron2.corp.bcm.tmc.edu [128.249.224.14]) by cuda.sgi.com with ESMTP id Z69Fbpi4mBdfCo7y for ; Tue, 07 May 2013 06:53:31 -0700 (PDT) X-Barracuda-Envelope-From: Monica.Johnson@bcm.edu X-Barracuda-Apparent-Source-IP: 128.249.224.14 X-IronPort-AV: E=Sophos;i="4.87,628,1363150800"; d="scan'208";a="165299523" Received: from unknown (HELO EPW-EXHUB2-P021.ad.bcm.edu) ([10.22.132.48]) by iron2-out.bcm.edu with ESMTP; 07 May 2013 08:52:41 -0500 Received: from EXCMSMBX04.ad.bcm.edu ([fe80::c465:f44:8c54:8d18]) by EPW-EXHUB2-P021.ad.bcm.edu ([::1]) with mapi; Tue, 7 May 2013 08:52:40 -0500 From: "Johnson, Monica Rochelle" Date: Tue, 7 May 2013 08:52:40 -0500 Subject: ACCOUNT VERIFICATION Thread-Topic: ACCOUNT VERIFICATION X-ASG-Orig-Subj: ACCOUNT VERIFICATION Thread-Index: AQHOSyohR7SkQNWrs0+Rh99PSREuKA== Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: iron2.corp.bcm.tmc.edu[128.249.224.14] X-Barracuda-Start-Time: 1367934811 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.93 X-Barracuda-Spam-Status: No, SCORE=1.93 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA074, BSF_SC0_SA074b, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130268 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.50 BSF_SC0_SA074 URI: Custom Rule SA074 0.00 TO_CC_NONE No To: or Cc: header 0.20 BSF_SC0_SA074b Custom Rule SA074b To: undisclosed-recipients:; Dear Webmail User, There are security check on our webmail database system and have your onlin= e access disabled, pending the confirmation of your sign on details. Click the link below to confirm and type in the confirmation number: 1265-6= 778-8250-8393-5727 along with various information in the activation portal.= =20 To verify your account Click http://webmailaccountsystemverification.webs.c= om/=20 =20 Please ensure your enter your username and password details correctly, to a= void losing your email account access permanently. However, your access would be restored after this confirmation; =A9 Webmasters.com Web Hosting. All rights reserved. Webmail- Support= From JBacik@fusionio.com Tue May 7 09:11:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 666FD29DFA for ; Tue, 7 May 2013 09:11:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 587698F8037 for ; Tue, 7 May 2013 07:11:00 -0700 (PDT) X-ASG-Debug-ID: 1367935858-04cb6c53a2b34d0001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id 8SwSFDnKm4ptl6vB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 May 2013 07:10:59 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id A89289A0697 for ; Tue, 7 May 2013 08:10:58 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1367935858; bh=Nv8z/rtvuhlXI/VArLjhqeBkpDbB83fCM/aUvu1Ugs4=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=F/ozuyg1xD2+6Rs4GX0xeiQvwNr6l++P9QCYJ0YIHHM6VKQ/mIf2HsyJIxHXn8l5o MHqq/b9+RmqK4C35e1BpS5g6j13qlvZN99vQ3Jw+tOJjl6xvDPq+ef3gA5rqCA6b8c L3qZT2kR/4EvB0Vtfp5UVe6qLVpicfcgwIK87B/4= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id ivQ5XBB671D5H7a2 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Tue, 07 May 2013 08:10:58 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Tue, 7 May 2013 08:10:57 -0600 Date: Tue, 7 May 2013 10:10:56 -0400 From: Josef Bacik To: Dave Chinner CC: "xfs@oss.sgi.com" , Josef Bacik Subject: Re: [BULK] Re: [problem] xfstests generic/311 unreliable... Message-ID: <20130507141056.GO12414@localhost.localdomain> X-ASG-Orig-Subj: Re: [BULK] Re: [problem] xfstests generic/311 unreliable... References: <20130507071102.GA24635@dastard> <20130507073717.GB24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20130507073717.GB24635@dastard> User-Agent: Mutt/1.5.21 (2011-07-01) X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1367935859 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130268 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, May 07, 2013 at 01:37:17AM -0600, Dave Chinner wrote: > Argh, add the cc to Josef... > > On Tue, May 07, 2013 at 05:11:02PM +1000, Dave Chinner wrote: > > Hi Josef, > > > > I was just looking at a generic/311, and I think there's something > > fundamentally wrong with the way it is checking the scratch device. > > > > You reported it was failing for internal test 19 on XFS, but I'm > > seeing is fail after the first test or 2, randomly. It has never > > made it past test 3. So I had a little bit of a closer look at it's > > structure. Essentially it is doing this (and the contents seen by > > each step: > > > > scratch dev + mkfs > > +-------------------------------+ > > overlay dm-flakey > > D-------------------------------D > > mount/write/kill/unmount dm-flakey > > Dx-x-x-x-x-x-x------------------D > > > > All good up to here. Now, you can _check_scratch_fs which sees: > > > > scratch dev + check > > +-------------------------------+ > > > > i.e. it's not seeing all the changes written to dm-flakey and so > > xfs-check it seeing corruption. > > > > After I realised this was stacking block devices and checking the > > underlying block device, the cause was pretty obvious: scratch-dev > > and dm-flakey have different address spaces, so changes written > > throughone address space will not be seen through the other address > > space if there is stale cached data in the original address space. > > > > And that's exactly what is happening. This patch: > > > > --- a/tests/generic/311 > > +++ b/tests/generic/311 > > @@ -79,6 +79,7 @@ _mount_flakey() > > _unmount_flakey() > > { > > $UMOUNT_PROG $SCRATCH_MNT > > + echo 3 > /proc/sys/vm/drop_caches > > } > > > > _load_flakey_table() > > > > Makes the problem go away for xfs_check. But really, I don't like > > the assumption that the test is built on - that writes through one > > block device are visible through another. It's just asking for weird > > problems. > > > > Is there some way that you can restructure this test so it doesn't > > have this problem (e.g. do everything on dm-flakey)? > > So I've made the following patch which I think will do what you want, it's kind of ugly but we have such specific things for fsck that I don't want to have to re-implement it all just for this test. The thing is, I'm still seeing the failure with test 19 for xfs. xfs_check always passes fine for me, it's the part where we re-mount the flakey device and then md5sum the file, it is the md5sum of an empty file and doesn't match the md5sum we take before we unmount. All of that is done on the flakey device so theres no stale caching going on there. Let me know what you think about this patch, I'm open to other less horrible options. Thanks, Josef index 2b3b569..f11119b --- a/tests/generic/311 +++ b/tests/generic/311 @@ -125,7 +125,10 @@ _run_test() #Unmount and fsck to make sure we got a valid fs after replay _unmount_flakey + tmp=$SCRATCH_DEV + SCRATCH_DEV=$FLAKEY_DEV _check_scratch_fs + SCRATCH_DEV=$tmp [ $? -ne 0 ] && _fatal "fsck failed" _mount_flakey From davej@redhat.com Tue May 7 09:23:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9202B29E03 for ; Tue, 7 May 2013 09:23:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 54A4230407F for ; Tue, 7 May 2013 07:23:17 -0700 (PDT) X-ASG-Debug-ID: 1367936596-04bdf04226b6770001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id pjIhWdSodP6szXEe for ; Tue, 07 May 2013 07:23:16 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r47ENGNR027901 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 May 2013 10:23:16 -0400 Received: from gelk.kernelslacker.org ([10.3.113.12]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r47ENEOt017014 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 May 2013 10:23:15 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.6/8.14.5) with ESMTP id r47DbInc018529; Tue, 7 May 2013 09:37:28 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.6/8.14.6/Submit) id r47Db8vT018519; Tue, 7 May 2013 09:37:08 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 7 May 2013 09:37:07 -0400 From: Dave Jones To: Linux Kernel Cc: xfs@oss.sgi.com Subject: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507133707.GA18301@redhat.com> X-ASG-Orig-Subj: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Mail-Followup-To: Dave Jones , Linux Kernel , xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367936596 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com started compiling a kernel, and then... [ 172.233200] ============================================================================= [ 172.233205] BUG xfs_efi_item (Not tainted): Poison overwritten [ 172.233207] ----------------------------------------------------------------------------- [ 172.233210] Disabling lock debugging due to kernel taint [ 172.233213] INFO: 0xffff8800aaac4ea8-0xffff8800aaac4ea8. First byte 0x6a instead of 0x6b [ 172.233235] INFO: Allocated in kmem_zone_alloc+0x67/0xf0 [xfs] age=29290 cpu=1 pid=1357 [ 172.233239] __slab_alloc+0x468/0x52c [ 172.233243] kmem_cache_alloc+0x2b4/0x320 [ 172.233256] kmem_zone_alloc+0x67/0xf0 [xfs] [ 172.233269] kmem_zone_zalloc+0x14/0x40 [xfs] [ 172.233287] xfs_efi_init+0x41/0xa0 [xfs] [ 172.233305] xfs_trans_get_efi+0x58/0x90 [xfs] [ 172.233320] xfs_bmap_finish+0x76/0x1b0 [xfs] [ 172.233338] xfs_itruncate_extents+0x2cd/0x610 [xfs] [ 172.233353] xfs_inactive+0x401/0x530 [xfs] [ 172.233367] xfs_fs_evict_inode+0x8c/0x1b0 [xfs] [ 172.233370] evict+0xa3/0x1a0 [ 172.233372] iput+0xf5/0x180 [ 172.233374] dput+0x208/0x2f0 [ 172.233378] SYSC_renameat+0x3be/0x430 [ 172.233380] SyS_renameat+0xe/0x10 [ 172.233383] SyS_rename+0x1b/0x20 [ 172.233399] INFO: Freed in xfs_efi_item_free+0x21/0x40 [xfs] age=27303 cpu=1 pid=177 [ 172.233402] __slab_free+0x41/0x39f [ 172.233405] kmem_cache_free+0x326/0x370 [ 172.233420] xfs_efi_item_free+0x21/0x40 [xfs] [ 172.233435] __xfs_efi_release+0x4e/0x60 [xfs] [ 172.233449] xfs_efi_release+0x50/0x70 [xfs] [ 172.233463] xfs_efd_item_committed+0x22/0x40 [xfs] [ 172.233479] xfs_trans_committed_bulk+0xcf/0x290 [xfs] [ 172.233494] xlog_cil_committed+0x37/0x110 [xfs] [ 172.233510] xlog_state_do_callback+0x1b8/0x3f0 [xfs] [ 172.233525] xlog_state_done_syncing+0xf2/0x110 [xfs] [ 172.233539] xlog_iodone+0x87/0x110 [xfs] [ 172.233550] xfs_buf_iodone_work+0x5e/0xd0 [xfs] [ 172.233554] process_one_work+0x211/0x700 [ 172.233556] worker_thread+0x11d/0x3a0 [ 172.233559] kthread+0xed/0x100 [ 172.233562] ret_from_fork+0x7c/0xb0 [ 172.233565] INFO: Slab 0xffffea0002aab100 objects=22 used=22 fp=0x (null) flags=0x20000000004080 [ 172.233567] INFO: Object 0xffff8800aaac4e38 @offset=3640 fp=0xffff8800aaac7058 [ 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk [ 172.233590] Object ffff8800aaac4eb8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233592] Object ffff8800aaac4ec8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233594] Object ffff8800aaac4ed8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233597] Object ffff8800aaac4ee8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233599] Object ffff8800aaac4ef8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233601] Object ffff8800aaac4f08: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233603] Object ffff8800aaac4f18: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233605] Object ffff8800aaac4f28: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233608] Object ffff8800aaac4f38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233610] Object ffff8800aaac4f48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233612] Object ffff8800aaac4f58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233614] Object ffff8800aaac4f68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233616] Object ffff8800aaac4f78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233618] Object ffff8800aaac4f88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233620] Object ffff8800aaac4f98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233622] Object ffff8800aaac4fa8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk [ 172.233625] Object ffff8800aaac4fb8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkkkkkkkkkkkkk. [ 172.233627] Redzone ffff8800aaac4fc8: bb bb bb bb bb bb bb bb ........ [ 172.233629] Padding ffff8800aaac5108: 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ [ 172.233632] CPU: 1 PID: 1658 Comm: gcc Tainted: G B 3.9.0+ #1 [loadavg: 0.68 0.43 0.17 4/333 1660] [ 172.233636] Hardware name: LENOVO 2356JK8/2356JK8, BIOS G7ET92WW (2.52 ) 02/18/2013 [ 172.233638] ffffea0002aab100 ffff8800a4b03918 ffffffff815f5588 ffff8800a4b03968 [ 172.233644] ffffffff81185944 0000000000000008 ffff880000000001 ffffffff81078016 [ 172.233648] ffff8800aaac4ea8 ffff8800aaac4ea9 ffff880115937cc0 000000000000006b [ 172.233653] Call Trace: [ 172.233658] [] dump_stack+0x19/0x1b [ 172.233662] [] print_trailer+0x154/0x210 [ 172.233666] [] ? perf_trace_sched_process_template+0xe6/0x100 [ 172.233669] [] check_bytes_and_report+0xcf/0x110 [ 172.233673] [] check_object+0x1e7/0x260 [ 172.233676] [] ? check_slab+0x87/0x130 [ 172.233691] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 172.233694] [] alloc_debug_processing+0x76/0x118 [ 172.233697] [] __slab_alloc+0x468/0x52c [ 172.233716] [] ? xfs_iext_bno_to_ext+0x97/0x180 [xfs] [ 172.233731] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 172.233735] [] kmem_cache_alloc+0x2b4/0x320 [ 172.233748] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] [ 172.233762] [] kmem_zone_alloc+0x67/0xf0 [xfs] [ 172.233776] [] kmem_zone_zalloc+0x14/0x40 [xfs] [ 172.233792] [] xfs_efi_init+0x41/0xa0 [xfs] [ 172.233809] [] xfs_trans_get_efi+0x58/0x90 [xfs] [ 172.233825] [] xfs_bmap_finish+0x76/0x1b0 [xfs] [ 172.233844] [] xfs_itruncate_extents+0x2cd/0x610 [xfs] [ 172.233859] [] xfs_inactive+0x401/0x530 [xfs] [ 172.233874] [] xfs_fs_evict_inode+0x8c/0x1b0 [xfs] [ 172.233877] [] evict+0xa3/0x1a0 [ 172.233880] [] iput+0xf5/0x180 [ 172.233883] [] dput+0x208/0x2f0 [ 172.233887] [] SYSC_renameat+0x3be/0x430 [ 172.233892] [] ? lock_release_holdtime.part.30+0xee/0x170 [ 172.233895] [] ? get_parent_ip+0xd/0x50 [ 172.233899] [] ? trace_hardirqs_on+0xd/0x10 [ 172.233904] [] ? syscall_trace_enter+0x18/0x230 [ 172.233907] [] SyS_renameat+0xe/0x10 [ 172.233911] [] SyS_rename+0x1b/0x20 [ 172.233914] [] tracesys+0xdd/0xe2 [ 172.233917] FIX xfs_efi_item: Restoring 0xffff8800aaac4ea8-0xffff8800aaac4ea8=0x6b [ 172.233919] FIX xfs_efi_item: Marking all objects used From filippo.stenico@gmail.com Tue May 7 13:21:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1C30829DFA for ; Tue, 7 May 2013 13:21:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8BF3DAC002 for ; Tue, 7 May 2013 11:21:36 -0700 (PDT) X-ASG-Debug-ID: 1367950890-04cbb05fe2c6a40001-NocioJ Received: from mail-la0-f50.google.com (mail-la0-f50.google.com [209.85.215.50]) by cuda.sgi.com with ESMTP id 4bJM9knaQ4wyMw4J (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 07 May 2013 11:21:31 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.50 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.50] Received: by mail-la0-f50.google.com with SMTP id fl20so895065lab.37 for ; Tue, 07 May 2013 11:21:30 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.50] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.50] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=IDZlXE2mFlnRSvWbbAwAXG7LMzxczr/IbgDDD6jVHow=; b=LyBX2sRbFlJT49pnPu7jNPNjy7Yjlkxtl9QC4cCaKE7Rb+v3jFKE9i3emujkqAJRIq 0CJWkO2WjcQ5NG4cbyZG3aNf+RLSUI3U6jAoCIU6lma8tE5WTTFoztqGwm8zbv2SCeBl pdPyat0F/nA1i45vNhE9Av7my4JrWf3WDZBifx05Z7qpqzDSKC5O7oqLo07cZnaSHl4J 2et8c13RVVbAnXnnEm9effOHTgIx+WBd8y775bpvg0pTFFMYO4Ww0dLu6BBxp8+acrDr TY4iMqizpl50CPtTXs8ayBPtSR8N2TbhRBMP1jWXg9v42FDxEeOWRTqZ754XUh4/ZC1A p0YQ== X-Received: by 10.152.21.106 with SMTP id u10mr1458656lae.11.1367950890168; Tue, 07 May 2013 11:21:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Tue, 7 May 2013 11:20:49 -0700 (PDT) In-Reply-To: References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> From: Filippo Stenico Date: Tue, 7 May 2013 20:20:49 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Eric Sandeen X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=089e013d1700e0f56f04dc24e261 X-Barracuda-Connect: mail-la0-f50.google.com[209.85.215.50] X-Barracuda-Start-Time: 1367950891 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --089e013d1700e0f56f04dc24e261 Content-Type: text/plain; charset=ISO-8859-1 xfs_repair -L -vv -P /dev/mapper/vg0-lv0 does the same kernel panic as my first report. No use to double info on this. I'll try xfs_repair -L -vv -P -m 2000 to keep memory consuption at a limit. On Tue, May 7, 2013 at 3:36 PM, Filippo Stenico wrote: > > > On Tue, May 7, 2013 at 3:20 PM, Eric Sandeen wrote: > >> On 5/7/13 4:27 AM, Filippo Stenico wrote: >> > Hello, >> > this is a start-over to try hard to recover some more data out of my >> raid5 - lvm - xfs toasted volume. >> > My goal is either to try the best to get some more data out of the >> volume, and see if I can reproduce the segfault. >> > I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to >> put original metadata on the cloned raid volume i had zeroed the log on >> before via xfs_repair -L (i figured none of the actual data was modified >> before as I am just working on metadata.. right?). >> > Then I ran a mount, checked a dir that I knew it was corrupted, unmount >> and try an xfs_repair (commands.txt attached for details) >> > I went home to sleep, but at morning I found out that kernel paniced >> due "out of memory and no killable process". >> > I ran repair without -P... Should I try now disabling inode prefetch? >> > Attached are also output of "free" and "top" at time of panic, as well >> as the output of xfs_repair and strace attached to it. Dont think gdb >> symbols would help here.... >> > >> >> > >> >> Ho hum, well, no segfault this time, just an out of memory error? >> > That's right.... > >> No real way to know where it went from the available data I think. >> >> A few things: >> >> > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ >> > mount: Structure needs cleaning >> >> mount failed? Now's the time to look at dmesg to see why. >> > > From attached logs it seems to be: >> >> > XFS internal error xlog_valid_rec_header(1) at line 3466 of file >> [...2.6.32...]/fs/xfs/xfs_log_recover.c >> > XFS: log mount/recovery failed: error 117 >> >> > root@ws1000:~# mount >> >> >> >> > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ >> > root@ws1000:~# mount | grep raid0 >> > /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota) >> >> Uh, now it worked, with no other steps in between? That's a little odd. >> > Looks odd to me too. But i just copied the commands issued as they where > on my console... so yes, nothing in between. > >> It found a clean log this time: >> >> > XFS mounting filesystem dm-1 >> > Ending clean XFS mount for filesystem: dm-1 >> >> which is unexpected. >> >> So the memory consumption might be a bug but there's not enough info to >> go on here. >> >> > PS. Let me know if you wish reports like this one on list. >> >> worth reporting, but I'm not sure what we can do with it. >> Your storage is in pretty bad shape, and xfs_repair can't make something >> out >> of nothing. >> >> -Eric >> > > I still got back around 6TB out of 7.2 TB of total data stored, so this > tells xfs is reliable even when major faults occur... > > Thanks anyways, I am trying with a "-L" repair, at this step I expect > another fail (due out of memory or something, as it happened last time) > then I will try with "xfs_repair -L -vv -P" and I expect to see that > segfault again. > > Will report next steps, maybe something interesting for you will pop up... > for me is not a waste of time, since this last try is worth being made. > > -- > F -- F --089e013d1700e0f56f04dc24e261 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable xfs_repair -L -vv -P /dev/mapper/vg0-lv0 does the same kernel panic as my f= irst report. No use to double info on this.
I'll try xfs_repair -L -= vv -P -m 2000 to keep memory consuption at a limit.


On Tue, May 7, 2013 at 3:36 PM, Filippo Stenico <filippo.stenico@g= mail.com> wrote:


On Tue, May 7, 2013 at= 3:20 PM, Eric Sandeen <sandeen@sandeen.net> wrote:
On 5/7/13 4:27 AM, Filippo Stenico wrote:
> Hello,
> this is a start-over to try hard to recover some more data = out of my raid5 - lvm - xfs toasted volume.
> My goal is either to try the best to get some more data out of the vol= ume, and see if I can reproduce the segfault.
> I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to = put original metadata on the cloned raid volume i had zeroed the log on bef= ore via xfs_repair -L (i figured none of the actual data was modified befor= e as I am just working on metadata.. right?).
> Then I ran a mount, checked a dir that I knew it was corrupted, unmoun= t and try an xfs_repair (commands.txt attached for details)
> I went home to sleep, but at morning I found out that kernel paniced d= ue "out of memory and no killable process".
> I ran repair without -P... Should I try now disabling inode prefetch?<= br> > Attached are also output of "free" and "top" at ti= me of panic, as well as the output of xfs_repair and strace attached to it.= Dont think gdb symbols would help here....
>

>

Ho hum, well, no segfault this time, just an out of memory error?
=
That's right....
No real way to know where it went from the available data I think.

A few things:

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> mount: Structure needs cleaning

mount failed? =A0Now's the time to look at dmesg to see why.
=A0
>From attached logs it seems to be:

> XFS internal error xlog_valid_rec_header(1) at line 3466 of file [...2= .6.32...]/fs/xfs/xfs_log_recover.c
> XFS: log mount/recovery failed: error 117

> root@ws1000:~# mount

<no raid0 mounted>

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> root@ws1000:~# mount | grep raid0
> /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota= )

Uh, now it worked, with no other steps in between? =A0That's a little o= dd.
Looks odd to me too. But i just copied the commands= issued as they where on my console... so yes, nothing in between.=A0
<= /div>
It found a clean log this time:

> XFS mounting filesystem dm-1
> Ending clean XFS mount for filesystem: dm-1

which is unexpected.

So the memory consumption might be a bug but there's not enough info to= go on here.

> PS. Let me know if you wish reports like this one on list.

worth reporting, but I'm not sure what we can do with it.
Your storage is in pretty bad shape, and xfs_repair can't make somethin= g out
of nothing.

-Eric
=A0
I still got b= ack around 6TB out of 7.2 TB of total data stored, so this tells xfs is rel= iable even when major faults occur...

Thanks anyways, I am trying wi= th a "-L" repair, at this step I expect another fail (due out of = memory or something, as it happened last time) then I will try with "x= fs_repair -L -vv -P" and I expect to see that segfault again.

Will report next steps, maybe something interesting for you will pop up= ... for me is not a waste of time, since this last try is worth being made.=

--
F



--
F --089e013d1700e0f56f04dc24e261-- From tinguely@sgi.com Tue May 7 14:04:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C99BA29DFA for ; Tue, 7 May 2013 14:04:03 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9479E304071; Tue, 7 May 2013 12:04:00 -0700 (PDT) Message-ID: <51895025.2010709@sgi.com> Date: Tue, 07 May 2013 14:04:05 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Jones , xfs@oss.sgi.com, CAI Qian Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> In-Reply-To: <20130507133707.GA18301@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 08:37, Dave Jones wrote: > 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ > [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk ^^ xfs_efi_log_item.efi_refcount being decremented on the xfs_efi_release() CAI Qian had the same thing in his May 6 "3.9.0: XFS rootfs corruption" email. I have not reproduced it yet. --Mark. From davej@redhat.com Tue May 7 14:07:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 212D329DFA for ; Tue, 7 May 2013 14:07:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 11ADC304071 for ; Tue, 7 May 2013 12:07:37 -0700 (PDT) X-ASG-Debug-ID: 1367953656-04cbb05fe4cbb70001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id edPE4aCEBBPvOjgH; Tue, 07 May 2013 12:07:36 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r47J7Zmx032758 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 May 2013 15:07:35 -0400 Received: from gelk.kernelslacker.org ([10.3.113.12]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r47J7Yh7010078 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 May 2013 15:07:35 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.6/8.14.5) with ESMTP id r47J7XUd025282; Tue, 7 May 2013 15:07:33 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.6/8.14.6/Submit) id r47J7Vq1025267; Tue, 7 May 2013 15:07:31 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 7 May 2013 15:07:31 -0400 From: Dave Jones To: Mark Tinguely Cc: xfs@oss.sgi.com, CAI Qian Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507190731.GA15528@redhat.com> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51895025.2010709@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367953656 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, May 07, 2013 at 02:04:05PM -0500, Mark Tinguely wrote: > On 05/07/13 08:37, Dave Jones wrote: > > 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ > > [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk > ^^ > > xfs_efi_log_item.efi_refcount being decremented on the xfs_efi_release() > CAI Qian had the same thing in his May 6 "3.9.0: XFS rootfs corruption" > email. > > I have not reproduced it yet. I've hit it on two different machines today. The good news is that the corruption never makes it onto disk. xfs_repair doesn't pick up anything. Dave From sandeen@sandeen.net Tue May 7 14:08:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E624829E15 for ; Tue, 7 May 2013 14:08:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D6B03304053 for ; Tue, 7 May 2013 12:08:07 -0700 (PDT) X-ASG-Debug-ID: 1367953686-04cb6c53a4ca800001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id KCsAHd3Lbumg4tFp for ; Tue, 07 May 2013 12:08:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2250463C5FF1; Tue, 7 May 2013 14:08:06 -0500 (CDT) Message-ID: <51895115.90108@sandeen.net> Date: Tue, 07 May 2013 14:08:05 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: CAI Qian CC: xfs@oss.sgi.com Subject: Re: 3.9.0: XFS rootfs corruption References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> <647316680.8155487.1367913231441.JavaMail.root@redhat.com> X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption In-Reply-To: <647316680.8155487.1367913231441.JavaMail.root@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367953686 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130288 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/7/13 2:53 AM, CAI Qian wrote: > > > ----- Original Message ----- >> From: "Eric Sandeen" >> To: "CAI Qian" >> Cc: xfs@oss.sgi.com >> Sent: Monday, May 6, 2013 10:31:01 PM >> Subject: Re: 3.9.0: XFS rootfs corruption >> >> On 5/6/13 2:50 AM, CAI Qian wrote: >>> Saw this on several different Power7 systems after kdump reboot. It has >>> xfsprogs-3.1.10 >>> and rootfs in on LVM. Never saw one of those in any of the RC releases. >>> >>> ] Reached target Basic System. >>> [ 4.919316] bio: create slab at 1 >>> [ 5.078616] SGI XFS with ACLs, security attributes, large block/inode >>> numbers, no debug enabled >>> [ 5.081925] XFS (dm-1): Mounting Filesystem >>> [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) >>> [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 of >>> file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc >> >> here: >> >> /* >> * Need to have seen all the entries and all the bestfree slots. >> */ >> XFS_WANT_CORRUPTED_RETURN(freeseen == 7); >> >> I hope Dave knows offhand what this might mean. :) >> >> Could you get a metadump of the filesystem in question? > Err, less familiar here. May I ask how can I do that? since it's the root fs, you might need to do it from some sort of rescue shell, then just do xfs_metadump /dev/ the resulting file should compress further with something like bzip2. ... >>> Also, never saw any of those in other architectures like x64, but started >>> get those there in 3.9.0. >>> Unsure if those are related. >>> >>> [ 3224.369782] >>> ============================================================================= >>> [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison >>> overwritten >>> [ 3224.370017] >>> ----------------------------------------------------------------------------- >> >> 2: 'F' if any module was force loaded by "insmod -f", ' ' if all >> modules were loaded normally. >> >> Force loaded modules, what's that from? > This could be just happened after the booting done or we were running a stress test later > that does load (modprobe *) and unload (modprobe -r *) every module. Again, those warnings > could be totally unrelated to the above rootfs corruption. > CAI Qian hmmm :) So any one of those modules could have caused memory corruption I guess. If you can hit it reliably you might try to narrow it down to whether it is a particular module causing it. -Eric From tinguely@sgi.com Tue May 7 14:24:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 076A929E03 for ; Tue, 7 May 2013 14:24:11 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5487830406A; Tue, 7 May 2013 12:24:09 -0700 (PDT) Message-ID: <518954DE.4070803@sgi.com> Date: Tue, 07 May 2013 14:24:14 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Jones CC: xfs@oss.sgi.com, CAI Qian Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> In-Reply-To: <20130507190731.GA15528@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 14:07, Dave Jones wrote: > On Tue, May 07, 2013 at 02:04:05PM -0500, Mark Tinguely wrote: > > On 05/07/13 08:37, Dave Jones wrote: > > > 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ > > > [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk > > ^^ > > > > xfs_efi_log_item.efi_refcount being decremented on the xfs_efi_release() > > CAI Qian had the same thing in his May 6 "3.9.0: XFS rootfs corruption" > > email. > > > > I have not reproduced it yet. > > I've hit it on two different machines today. The good news is that the > corruption never makes it onto disk. xfs_repair doesn't pick up anything. > > Dave > There was a new patch in the efi/efd code that must be misbehaving. You are correct, this is not an on-disk value. I now have poisoning on and I can see this doing a compile like you suggested. I will ASSERT to see who is doing the decrement after free. --Mark. From davej@redhat.com Tue May 7 14:31:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3909429E03 for ; Tue, 7 May 2013 14:31:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B8837AC009 for ; Tue, 7 May 2013 12:31:51 -0700 (PDT) X-ASG-Debug-ID: 1367955110-04cbb05fe3d1970001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jSFXtEixasZFo58l; Tue, 07 May 2013 12:31:50 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r47JVo29021634 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 May 2013 15:31:50 -0400 Received: from gelk.kernelslacker.org ([10.3.113.12]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r47JVn43001380 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 May 2013 15:31:49 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.6/8.14.5) with ESMTP id r47JVlk6007600; Tue, 7 May 2013 15:31:47 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.6/8.14.6/Submit) id r47JVkQM007599; Tue, 7 May 2013 15:31:46 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 7 May 2013 15:31:46 -0400 From: Dave Jones To: Mark Tinguely Cc: xfs@oss.sgi.com, CAI Qian Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507193146.GA7539@redhat.com> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518954DE.4070803@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367955110 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, May 07, 2013 at 02:24:14PM -0500, Mark Tinguely wrote: > On 05/07/13 14:07, Dave Jones wrote: > > On Tue, May 07, 2013 at 02:04:05PM -0500, Mark Tinguely wrote: > > > On 05/07/13 08:37, Dave Jones wrote: > > > > 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ > > > > [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk > > > ^^ > > > > > > xfs_efi_log_item.efi_refcount being decremented on the xfs_efi_release() > > > CAI Qian had the same thing in his May 6 "3.9.0: XFS rootfs corruption" > > > email. > > > > > > I have not reproduced it yet. > > > > I've hit it on two different machines today. The good news is that the > > corruption never makes it onto disk. xfs_repair doesn't pick up anything. > > > > Dave > > > There was a new patch in the efi/efd code that must be misbehaving. > You are correct, this is not an on-disk value. > > I now have poisoning on and I can see this doing a compile like you > suggested. I will ASSERT to see who is doing the decrement after free. I can hit this almost instantly with fsx. I'll do a bisect, though it sounds like you already have a suspect. Dave From tinguely@sgi.com Tue May 7 14:58:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B8B0E29E03 for ; Tue, 7 May 2013 14:58:10 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 66D8E304064; Tue, 7 May 2013 12:58:09 -0700 (PDT) Message-ID: <51895CD7.7040806@sgi.com> Date: Tue, 07 May 2013 14:58:15 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Jones CC: CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> In-Reply-To: <20130507193146.GA7539@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 14:31, Dave Jones wrote: > On Tue, May 07, 2013 at 02:24:14PM -0500, Mark Tinguely wrote: > > On 05/07/13 14:07, Dave Jones wrote: > > > On Tue, May 07, 2013 at 02:04:05PM -0500, Mark Tinguely wrote: > > > > On 05/07/13 08:37, Dave Jones wrote: > > > > > 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ > > > > > [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > > > > > [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk > > > > ^^ > > > > > > > > xfs_efi_log_item.efi_refcount being decremented on the xfs_efi_release() > > > > CAI Qian had the same thing in his May 6 "3.9.0: XFS rootfs corruption" > > > > email. > > > > > > > > I have not reproduced it yet. > > > > > > I've hit it on two different machines today. The good news is that the > > > corruption never makes it onto disk. xfs_repair doesn't pick up anything. > > > > > > Dave > > > > > There was a new patch in the efi/efd code that must be misbehaving. > > You are correct, this is not an on-disk value. > > > > I now have poisoning on and I can see this doing a compile like you > > suggested. I will ASSERT to see who is doing the decrement after free. > > I can hit this almost instantly with fsx. I'll do a bisect, though > it sounds like you already have a suspect. > > Dave > If you want to try kmem debug of Linux 3.8 that would help. --Mark. From davej@redhat.com Tue May 7 14:59:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 12EC229E03 for ; Tue, 7 May 2013 14:59:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0459E304064 for ; Tue, 7 May 2013 12:59:58 -0700 (PDT) X-ASG-Debug-ID: 1367956797-04cb6c53a3d0bf0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id UkXb8f8ZeHFAwlay; Tue, 07 May 2013 12:59:58 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r47Jxv5u030284 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 May 2013 15:59:57 -0400 Received: from gelk.kernelslacker.org ([10.3.113.12]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r47JxuCH014505 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 May 2013 15:59:57 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.6/8.14.5) with ESMTP id r47JxtZh008914; Tue, 7 May 2013 15:59:55 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.6/8.14.6/Submit) id r47Jxsu2008913; Tue, 7 May 2013 15:59:54 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 7 May 2013 15:59:54 -0400 From: Dave Jones To: Mark Tinguely Cc: CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507195954.GA8384@redhat.com> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51895CD7.7040806@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367956798 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: > > I can hit this almost instantly with fsx. I'll do a bisect, though > > it sounds like you already have a suspect. > > > > If you want to try kmem debug of Linux 3.8 that would help. I'm not sure what that is. Dave From tinguely@sgi.com Tue May 7 15:04:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BD21C29E03 for ; Tue, 7 May 2013 15:04:31 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8B4E030406B; Tue, 7 May 2013 13:04:28 -0700 (PDT) Message-ID: <51895E51.2050508@sgi.com> Date: Tue, 07 May 2013 15:04:33 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Jones CC: CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> In-Reply-To: <20130507195954.GA8384@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 14:59, Dave Jones wrote: > On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: > > > > I can hit this almost instantly with fsx. I'll do a bisect, though > > > it sounds like you already have a suspect. > > > > > > > If you want to try kmem debug of Linux 3.8 that would help. > > I'm not sure what that is. > > Dave > Sorry, if you would test Linux 3.8 with "CONFIG_DEBUG_SLAB=y". --Mark. From davej@redhat.com Tue May 7 15:22:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 47A7229E1B for ; Tue, 7 May 2013 15:22:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BE741AC003 for ; Tue, 7 May 2013 13:22:22 -0700 (PDT) X-ASG-Debug-ID: 1367958141-04cb6c53a1d1b80001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jxYwiqKLYjkFnP7O; Tue, 07 May 2013 13:22:21 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r47KMLex006319 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 May 2013 16:22:21 -0400 Received: from gelk.kernelslacker.org ([10.3.113.12]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r47KMKxv004510 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 May 2013 16:22:20 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.6/8.14.5) with ESMTP id r47KMHQN010189; Tue, 7 May 2013 16:22:18 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.6/8.14.6/Submit) id r47KMHRU010188; Tue, 7 May 2013 16:22:17 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 7 May 2013 16:22:17 -0400 From: Dave Jones To: Mark Tinguely Cc: CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507202217.GA9883@redhat.com> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51895E51.2050508@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367958141 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, May 07, 2013 at 03:04:33PM -0500, Mark Tinguely wrote: > On 05/07/13 14:59, Dave Jones wrote: > > On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: > > > > > > I can hit this almost instantly with fsx. I'll do a bisect, though > > > > it sounds like you already have a suspect. > > > > > > > > > > If you want to try kmem debug of Linux 3.8 that would help. > > > > I'm not sure what that is. > > Sorry, if you would test Linux 3.8 with "CONFIG_DEBUG_SLAB=y". Ah, done that. (I pretty much always run with it). This is something new. Even 3.9 was fine. It's only since the recent xfs merge. Dave From tinguely@sgi.com Tue May 7 15:24:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4133729E1A for ; Tue, 7 May 2013 15:24:23 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id EEC56304051; Tue, 7 May 2013 13:24:22 -0700 (PDT) Message-ID: <518962FC.2060509@sgi.com> Date: Tue, 07 May 2013 15:24:28 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Jones CC: CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> In-Reply-To: <20130507202217.GA9883@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 15:22, Dave Jones wrote: > On Tue, May 07, 2013 at 03:04:33PM -0500, Mark Tinguely wrote: > > On 05/07/13 14:59, Dave Jones wrote: > > > On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: > > > > > > > > I can hit this almost instantly with fsx. I'll do a bisect, though > > > > > it sounds like you already have a suspect. > > > > > > > > > > > > > If you want to try kmem debug of Linux 3.8 that would help. > > > > > > I'm not sure what that is. > > > > Sorry, if you would test Linux 3.8 with "CONFIG_DEBUG_SLAB=y". > > Ah, done that. (I pretty much always run with it). > > This is something new. Even 3.9 was fine. It's only since > the recent xfs merge. > > Dave > git revert 666d644cd72a9ec58b353209ff191d7430f3b357 until it gets fixed. --Mark. From david@fromorbit.com Tue May 7 17:07:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6C91E29E03 for ; Tue, 7 May 2013 17:07:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 504BE304067 for ; Tue, 7 May 2013 15:07:51 -0700 (PDT) X-ASG-Debug-ID: 1367964465-04cbb05fe4d7cf0001-w1Z2WR Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id n595WAGpAZa1avpW for ; Tue, 07 May 2013 15:07:46 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApcQABV6iVF5LNxE/2dsb2JhbAA2BBaDBzeCU7cchRYEAYEJF3SCHwEBBAE6HCMFCwgDGAkKGw8FJQMhE4gGBQ0zwTUWjVMeD4EYBQeCdGEDly6ROIMgKoEu Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 07:37:44 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZq2w-0008OS-EY; Wed, 08 May 2013 08:07:42 +1000 Date: Wed, 8 May 2013 08:07:42 +1000 From: Dave Chinner To: Bernd Schubert Cc: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault Message-ID: <20130507220742.GC24635@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5188E2F5.1090304@itwm.fraunhofer.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367964465 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Tue, May 07, 2013 at 01:18:13PM +0200, Bernd Schubert wrote: > On 05/07/2013 03:12 AM, Dave Chinner wrote: > >On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: > >>On 05/06/2013 02:28 PM, Dave Chinner wrote: > >>>On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: > >>>>And anpther protection fault, this time with 3.9.0. Always happens > >>>>on one of the servers. Its ECC memory, so I don't suspect a faulty > >>>>memory bank. Going to fsck now- > >>> > >>>http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > >> > >>Isn't that a bit overhead? And I can't provide /proc/meminfo and > >>others, as this issue causes a kernel panic a few traces later. > > > >Provide what information you can. Without knowing a single thing > >about your hardware, storage config and workload, I can't help you > >at all. You're asking me to find a needle in a haystack blindfolded > >and with both hands tied behind my back.... > > I see that xfs_info, meminfo, etc are useful, but /proc/mounts? > Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the > output of /proc/mounts, please let me know if you were really > interested in all of that non-xfs output? Yes. You never know what is relevant to a problem that is reported, especially if there are multiple filesystems sharing the same device... > And I just wonder what you are going to do with the information > about the hardware. So it is an Areca hw-raid5 device with 9 disks. > But does this help? It doesn't tell if one of the disks reads/writes > with hickups or provides any performance characteristics at all. Yes, it does, because Areca cards are by far the most unreliable HW RAID you can buy, which is not surprising because they are also the cheapest. This is through experience - we see reports of filesystems being badly corrupted ever few months because of problems with Areca controllers. Cheers, Dave. -- Dave Chinner david@fromorbit.com From jack@suse.cz Tue May 7 17:09:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 637A729E03 for ; Tue, 7 May 2013 17:09:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 554A3304067 for ; Tue, 7 May 2013 15:09:40 -0700 (PDT) X-ASG-Debug-ID: 1367964579-04cb6c53a2d59e0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id OW208j9RXJFie3iH for ; Tue, 07 May 2013 15:09:39 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 4ABBBA5077 for ; Wed, 8 May 2013 00:09:39 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id C9CD580E94; Wed, 8 May 2013 00:09:37 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: Jan Kara Subject: [PATCH 2/2] Make test 306 use null and zero device nodes on SCRATCH_MNT Date: Wed, 8 May 2013 00:09:33 +0200 X-ASG-Orig-Subj: [PATCH 2/2] Make test 306 use null and zero device nodes on SCRATCH_MNT Message-Id: <1367964573-29620-2-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1367964573-29620-1-git-send-email-jack@suse.cz> References: <1367964573-29620-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1367964579 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In one place of test 306, we mistakenly used /dev/null and /dev/zero instead of equivalent devices created on tested filesystem. So we were not really testing the functionality we intended. Signed-off-by: Jan Kara --- tests/generic/306 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/generic/306 b/tests/generic/306 index e8e0fc0..f45d142 100644 --- a/tests/generic/306 +++ b/tests/generic/306 @@ -73,9 +73,9 @@ _scratch_mount -o ro || _fail "Could not mount scratch readonly" echo "== try to create new file" touch $SCRATCH_MNT/this_should_fail 2>&1 | _filter_scratch echo "== pwrite to null device" -$XFS_IO_PROG -F -c "pwrite 0 512" /dev/null | _filter_xfs_io +$XFS_IO_PROG -F -c "pwrite 0 512" $DEVNULL | _filter_xfs_io echo "== pread from zero device" -$XFS_IO_PROG -F -c "pread 0 512" /dev/zero | _filter_xfs_io +$XFS_IO_PROG -F -c "pread 0 512" $DEVZERO | _filter_xfs_io echo "== truncating write to null device" echo foo > $DEVNULL 2>&1 | _filter_scratch -- 1.8.1.4 From jack@suse.cz Tue May 7 17:09:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DCD0629E03 for ; Tue, 7 May 2013 17:09:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 69AC6AC002 for ; Tue, 7 May 2013 15:09:41 -0700 (PDT) X-ASG-Debug-ID: 1367964579-04cb6c53a3d59e0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id aUF7mYSiluN9LFTQ for ; Tue, 07 May 2013 15:09:39 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3B9FAA41E0 for ; Wed, 8 May 2013 00:09:39 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id C5FF780E97; Wed, 8 May 2013 00:09:37 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: Jan Kara Subject: [PATCH 1/2] Fix test 298 to work for non-XFS filesystems Date: Wed, 8 May 2013 00:09:32 +0200 X-ASG-Orig-Subj: [PATCH 1/2] Fix test 298 to work for non-XFS filesystems Message-Id: <1367964573-29620-1-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1367964579 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Call to xfs_io in test 298 forgot to specify -F flag so it failed for non-XFS filesystems. Signed-off-by: Jan Kara --- tests/shared/298 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/shared/298 b/tests/shared/298 index f1a3432..d5bed1c 100644 --- a/tests/shared/298 +++ b/tests/shared/298 @@ -49,7 +49,7 @@ _cleanup() get_holes() { - $XFS_IO_PROG -c fiemap $1 | grep hole | $SED_PROG 's/.*\[\(.*\)\.\.\(.*\)\].*/\1 \2/' + $XFS_IO_PROG -F -c fiemap $1 | grep hole | $SED_PROG 's/.*\[\(.*\)\.\.\(.*\)\].*/\1 \2/' } get_free_sectors() -- 1.8.1.4 From david@fromorbit.com Tue May 7 17:23:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9071C29E07 for ; Tue, 7 May 2013 17:23:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 74BFB8F8059 for ; Tue, 7 May 2013 15:22:59 -0700 (PDT) X-ASG-Debug-ID: 1367965377-04cbb05fe3d86c0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id AbXRdyQLrVXPuZy5 for ; Tue, 07 May 2013 15:22:57 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao8QAC99iVF5LNxE/2dsb2JhbABQgweDCrcchRYEAYEJF3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLwWcWjgCBHQeCdGEDly6KE4clgyAq Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 07:52:57 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZqHg-0008Qw-B2; Wed, 08 May 2013 08:22:56 +1000 Date: Wed, 8 May 2013 08:22:56 +1000 From: Dave Chinner To: Mark Tinguely Cc: Dave Jones , CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507222256.GD24635@dastard> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> <518962FC.2060509@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518962FC.2060509@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367965377 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 07, 2013 at 03:24:28PM -0500, Mark Tinguely wrote: > On 05/07/13 15:22, Dave Jones wrote: > >On Tue, May 07, 2013 at 03:04:33PM -0500, Mark Tinguely wrote: > > > On 05/07/13 14:59, Dave Jones wrote: > > > > On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: > > > > > > > > > > I can hit this almost instantly with fsx. I'll do a bisect, though > > > > > > it sounds like you already have a suspect. > > > > > > > > > > > > > > > > If you want to try kmem debug of Linux 3.8 that would help. > > > > > > > > I'm not sure what that is. > > > > > > Sorry, if you would test Linux 3.8 with "CONFIG_DEBUG_SLAB=y". > > > >Ah, done that. (I pretty much always run with it). > > > >This is something new. Even 3.9 was fine. It's only since > >the recent xfs merge. > > > > Dave > > > > git revert 666d644cd72a9ec58b353209ff191d7430f3b357 That won't prevent the use after free. That commit fixed a problem that could lead to a use after free, but what we are seeing here is that it has ultimately exposed a previously unknown issue that causes the use after free. Basically what is happening is that there are two commits for the EFD being processed, when there should only be one. I'm not sure how this is happening yet, but these three traces came out from my debug sequentially when running generic/006: __xfs_efi_release 0xffff88006c4d7058 2 Pid: 4756, comm: kworker/1:1H Tainted: G B 3.9.0-rc8-dgc+ #592 Call Trace: [] __xfs_efi_release+0x35/0x80 [] xfs_efi_item_unpin+0x5d/0x70 [] xfs_trans_committed_bulk+0x248/0x2e0 [] xlog_cil_committed+0x3b/0x140 [] xlog_state_do_callback+0x19e/0x3a0 ..... That's the EFI being unpinned and it's reference going away during transaction commit completion procesing. __xfs_efi_release 0xffff88006c4d7058 1 Pid: 4756, comm: kworker/1:1H Tainted: G B 3.9.0-rc8-dgc+ #592 Call Trace: [] __xfs_efi_release+0x35/0x80 [] xfs_efi_release+0x60/0x80 [] xfs_efd_item_committed+0x26/0x40 [] xfs_trans_committed_bulk+0xe1/0x2e0 [] xlog_cil_committed+0x3b/0x140 [] xlog_state_do_callback+0x19e/0x3a0 ..... That's the EFD releasing the EFI, which drops it's reference count and frees the both the EFI and the EFD. __xfs_efi_release 0xffff88006c4d7058 1802201963 Pid: 4756, comm: kworker/1:1H Tainted: G B 3.9.0-rc8-dgc+ #592 Call Trace: [] __xfs_efi_release+0x35/0x80 [] xfs_efi_release+0x70/0x80 [] xfs_efd_item_committed+0x26/0x40 [] xfs_trans_committed_bulk+0xe1/0x2e0 [] xlog_cil_committed+0x3b/0x140 ..... And there's the EFI being released by an EFD after it has been freed. It's definitely been freed because 1802201963 = 0x6b6b6b6b.... Like I said, I don't understand how this is happening yet, but just seeing this behaviour explains an awful lot about why we've had long term issues with this code.... FWIW, I used to run with slab debugging turned on for all my debug builds. I switched my .config from SLAB to SLUB a few months ago, and didn't realise this silently turned of memory poisoning. That's how it slipped through my testing.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 7 17:24:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 67C1029E07 for ; Tue, 7 May 2013 17:24:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 53B5D30406A for ; Tue, 7 May 2013 15:24:59 -0700 (PDT) X-ASG-Debug-ID: 1367965496-04cbb05fe2d87d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id nuinyP6SHZKy9nXs for ; Tue, 07 May 2013 15:24:56 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgYZAC99iVF5LNxE/2dsb2JhbABQgwc3glOJSq1ShRYEAYEJF3SCHwEBBTocIxAIAw4KCSUPBSUDIROICw3BWhaOAIEdB4J0YQOXLpE4gyAq Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 07:54:55 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZqJb-0008R5-2q; Wed, 08 May 2013 08:24:55 +1000 Date: Wed, 8 May 2013 08:24:55 +1000 From: Dave Chinner To: Jan Kara Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/2] Fix test 298 to work for non-XFS filesystems Message-ID: <20130507222455.GE24635@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/2] Fix test 298 to work for non-XFS filesystems References: <1367964573-29620-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1367964573-29620-1-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367965496 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA717 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_SA717 Custom Rule BSF_SC0_SA717 On Wed, May 08, 2013 at 12:09:32AM +0200, Jan Kara wrote: > Call to xfs_io in test 298 forgot to specify -F flag so it failed for > non-XFS filesystems. > > Signed-off-by: Jan Kara See Eric's recent patch series to fix this. http://oss.sgi.com/pipermail/xfs/2013-May/026057.html Cheers, Dave. -- Dave Chinner david@fromorbit.com From tinguely@sgi.com Tue May 7 17:45:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 822C129E15 for ; Tue, 7 May 2013 17:45:15 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 327D7304070; Tue, 7 May 2013 15:45:15 -0700 (PDT) Message-ID: <51898400.8000900@sgi.com> Date: Tue, 07 May 2013 17:45:20 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: Dave Jones , CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <51895025.2010709@sgi.com> <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> <518962FC.2060509@sgi.com> <20130507222256.GD24635@dastard> In-Reply-To: <20130507222256.GD24635@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 17:22, Dave Chinner wrote: > On Tue, May 07, 2013 at 03:24:28PM -0500, Mark Tinguely wrote: >> On 05/07/13 15:22, Dave Jones wrote: >>> On Tue, May 07, 2013 at 03:04:33PM -0500, Mark Tinguely wrote: >>> > On 05/07/13 14:59, Dave Jones wrote: >>> > > On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: >>> > > >>> > > > > I can hit this almost instantly with fsx. I'll do a bisect, though >>> > > > > it sounds like you already have a suspect. >>> > > > > >>> > > > >>> > > > If you want to try kmem debug of Linux 3.8 that would help. >>> > > >>> > > I'm not sure what that is. >>> > >>> > Sorry, if you would test Linux 3.8 with "CONFIG_DEBUG_SLAB=y". >>> >>> Ah, done that. (I pretty much always run with it). >>> >>> This is something new. Even 3.9 was fine. It's only since >>> the recent xfs merge. >>> >>> Dave >>> >> >> git revert 666d644cd72a9ec58b353209ff191d7430f3b357 > > That won't prevent the use after free. That commit fixed a problem > that could lead to a use after free, but what we are seeing here is > that it has ultimately exposed a previously unknown issue that > causes the use after free. > > Basically what is happening is that there are two commits for the > EFD being processed, when there should only be one. I'm not sure how > this is happening yet, but these three traces came out from my debug > sequentially when running generic/006: > Sorry for the misleading statement. Yes, I agree that patch is a good thing. I meant that Dave and only Dave revert it and only to test if that patch was the change that caused the new symptom - which we know now that it is. I added some asserts and did not learn anything new except where the efi item was already freed. --Mark. From david@fromorbit.com Tue May 7 18:55:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7E90729E12 for ; Tue, 7 May 2013 18:55:03 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4B2DF8F8059 for ; Tue, 7 May 2013 16:55:03 -0700 (PDT) X-ASG-Debug-ID: 1367970901-04bdf04226dde10001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id dY52eboOghG0QMEf for ; Tue, 07 May 2013 16:55:01 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApAQAHeRiVF5LNxE/2dsb2JhbABQgweDCrcchRYEAYEIF3SCHwEBBScTHCMQCAMVAwklDwUlAyETiAvBThaNWSeBHQeDVQOXLooThyWDICqBLQ Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 09:25:00 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZrik-00009u-Cc; Wed, 08 May 2013 09:54:58 +1000 Date: Wed, 8 May 2013 09:54:58 +1000 From: Dave Chinner To: Mark Tinguely Cc: Dave Jones , CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130507235458.GG24635@dastard> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> <518962FC.2060509@sgi.com> <20130507222256.GD24635@dastard> <51898400.8000900@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51898400.8000900@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367970901 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130308 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 07, 2013 at 05:45:20PM -0500, Mark Tinguely wrote: > On 05/07/13 17:22, Dave Chinner wrote: > >On Tue, May 07, 2013 at 03:24:28PM -0500, Mark Tinguely wrote: > >>On 05/07/13 15:22, Dave Jones wrote: > >>>On Tue, May 07, 2013 at 03:04:33PM -0500, Mark Tinguely wrote: > >>> > On 05/07/13 14:59, Dave Jones wrote: > >>> > > On Tue, May 07, 2013 at 02:58:15PM -0500, Mark Tinguely wrote: > >>> > > > >>> > > > > I can hit this almost instantly with fsx. I'll do a bisect, though > >>> > > > > it sounds like you already have a suspect. > >>> > > > > > >>> > > > > >>> > > > If you want to try kmem debug of Linux 3.8 that would help. > >>> > > > >>> > > I'm not sure what that is. > >>> > > >>> > Sorry, if you would test Linux 3.8 with "CONFIG_DEBUG_SLAB=y". > >>> > >>>Ah, done that. (I pretty much always run with it). > >>> > >>>This is something new. Even 3.9 was fine. It's only since > >>>the recent xfs merge. > >>> > >>> Dave > >>> > >> > >>git revert 666d644cd72a9ec58b353209ff191d7430f3b357 > > > >That won't prevent the use after free. That commit fixed a problem > >that could lead to a use after free, but what we are seeing here is > >that it has ultimately exposed a previously unknown issue that > >causes the use after free. > > > >Basically what is happening is that there are two commits for the > >EFD being processed, when there should only be one. I'm not sure how > >this is happening yet, but these three traces came out from my debug > >sequentially when running generic/006: > > Sorry for the misleading statement. Yes, I agree that patch is a > good thing. I meant that Dave and only Dave revert it and only to > test if that patch was the change that caused the new symptom - > which we know now that it is. Sure, I realise that, and it turns out I'm wrong - it is a bug in commit 666d644cd. Poisoning turns a "will probably never occur" problem into an instant reproducer, because it sets a bit in the efi structure that is normally zero when the EFI is freed and hence triggers a second free of the EFI when reading it after the first free.... Dave, the patch below should fix the problem. Cheers, Dave. -- Dave Chinner david@fromorbit.com xfs: Don't reference the EFI after it is freed From: Dave Chinner Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner --- fs/xfs/xfs_extfree_item.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index c0f3750..98c437d 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -305,10 +305,22 @@ xfs_efi_release(xfs_efi_log_item_t *efip, { ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { + int recovered; + + /* + * __xfs_efi_release() can release the last reference to the EFI + * and free it, so it is unsafe to reference it after we've + * released the reference. The only case this is safe to do is + * if we are in recovery and the XFS_EFI_RECOVERED bit is set, + * meaning that we have two references to release. Check the + * recovered bit before the initial release, as we cannot + * reliably check it afterwards. + */ + recovered = test_bit(XFS_EFI_RECOVERED, &efip->efi_flags); __xfs_efi_release(efip); /* recovery needs us to drop the EFI reference, too */ - if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) + if (recovered) __xfs_efi_release(efip); } } From bpm@oss.sgi.com Tue May 7 19:01:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id C658B29E12; Tue, 7 May 2013 19:01:06 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. for-linus-v3.10-rc1-3-g7dfbcbe X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: cab09a81fbefcb21db5213a84461d421946f6eb8 X-Git-Newrev: 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 Message-Id: <20130508000106.C658B29E12@oss.sgi.com> Date: Tue, 7 May 2013 19:01:06 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 7dfbcbe xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle dd700d9 xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle 742ae1e xfs: introduce CONFIG_XFS_WARN from cab09a81fbefcb21db5213a84461d421946f6eb8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 Author: Eric Sandeen Date: Thu Apr 25 11:13:06 2013 -0500 xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle Shamelessly copied from dchinner's: ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get xfsdump uses a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Add a fallback to vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. This was done for xfs_attrlist_by_handle but xfs_compat_attrlist_by_handle (the 32-bit version) needs the same attention. Signed-off-by: Eric Sandeen Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit dd700d9452023a5b6820815a88f93c8f7010c270 Author: Eric Sandeen Date: Thu Apr 4 00:05:13 2013 -0500 xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle Shamelessly copied from dchinner's: ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get xfsdump uses for a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Add a fallback to vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. Signed-off-by: Eric Sandeen Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 742ae1e35b038ed65ddd86182723441ea74db765 Author: Dave Chinner Date: Tue Apr 30 21:39:34 2013 +1000 xfs: introduce CONFIG_XFS_WARN Running a CONFIG_XFS_DEBUG kernel in production environments is not the best idea as it introduces significant overhead, can change the behaviour of algorithms (such as allocation) to improve test coverage, and (most importantly) panic the machine on non-fatal errors. There are many cases where all we want to do is run a kernel with more bounds checking enabled, such as is provided by the ASSERT() statements throughout the code, but without all the potential overhead and drawbacks. This patch converts all the ASSERT statements to evaluate as WARN_ON(1) statements and hence if they fail dump a warning and a stack trace to the log. This has minimal overhead and does not change any algorithms, and will allow us to find strange "out of bounds" problems more easily on production machines. There are a few places where assert statements contain debug only code. These are converted to be debug-or-warn only code so that we still get all the assert checks in the code. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/Kconfig | 13 +++++++++++++ fs/xfs/mrlock.h | 12 ++++++------ fs/xfs/xfs.h | 5 +++++ fs/xfs/xfs_alloc_btree.c | 4 ++-- fs/xfs/xfs_bmap_btree.c | 4 ++-- fs/xfs/xfs_btree.h | 2 +- fs/xfs/xfs_dir2_node.c | 4 ++-- fs/xfs/xfs_ialloc_btree.c | 4 ++-- fs/xfs/xfs_inode.c | 2 +- fs/xfs/xfs_ioctl.c | 14 ++++++++++---- fs/xfs/xfs_ioctl32.c | 14 ++++++++++---- fs/xfs/xfs_linux.h | 24 ++++++++++++++++++------ fs/xfs/xfs_message.c | 8 ++++++++ fs/xfs/xfs_message.h | 1 + fs/xfs/xfs_trans.h | 4 ++-- 15 files changed, 83 insertions(+), 32 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Tue May 7 19:01:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 2D86429E25; Tue, 7 May 2013 19:01:13 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. for-linus-v3.10-rc1-3-g7dfbcbe X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: cab09a81fbefcb21db5213a84461d421946f6eb8 X-Git-Newrev: 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 Message-Id: <20130508000113.2D86429E25@oss.sgi.com> Date: Tue, 7 May 2013 19:01:12 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 7dfbcbe xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle dd700d9 xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle 742ae1e xfs: introduce CONFIG_XFS_WARN from cab09a81fbefcb21db5213a84461d421946f6eb8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 Author: Eric Sandeen Date: Thu Apr 25 11:13:06 2013 -0500 xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle Shamelessly copied from dchinner's: ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get xfsdump uses a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Add a fallback to vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. This was done for xfs_attrlist_by_handle but xfs_compat_attrlist_by_handle (the 32-bit version) needs the same attention. Signed-off-by: Eric Sandeen Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit dd700d9452023a5b6820815a88f93c8f7010c270 Author: Eric Sandeen Date: Thu Apr 4 00:05:13 2013 -0500 xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle Shamelessly copied from dchinner's: ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get xfsdump uses for a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Add a fallback to vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. Signed-off-by: Eric Sandeen Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 742ae1e35b038ed65ddd86182723441ea74db765 Author: Dave Chinner Date: Tue Apr 30 21:39:34 2013 +1000 xfs: introduce CONFIG_XFS_WARN Running a CONFIG_XFS_DEBUG kernel in production environments is not the best idea as it introduces significant overhead, can change the behaviour of algorithms (such as allocation) to improve test coverage, and (most importantly) panic the machine on non-fatal errors. There are many cases where all we want to do is run a kernel with more bounds checking enabled, such as is provided by the ASSERT() statements throughout the code, but without all the potential overhead and drawbacks. This patch converts all the ASSERT statements to evaluate as WARN_ON(1) statements and hence if they fail dump a warning and a stack trace to the log. This has minimal overhead and does not change any algorithms, and will allow us to find strange "out of bounds" problems more easily on production machines. There are a few places where assert statements contain debug only code. These are converted to be debug-or-warn only code so that we still get all the assert checks in the code. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/Kconfig | 13 +++++++++++++ fs/xfs/mrlock.h | 12 ++++++------ fs/xfs/xfs.h | 5 +++++ fs/xfs/xfs_alloc_btree.c | 4 ++-- fs/xfs/xfs_bmap_btree.c | 4 ++-- fs/xfs/xfs_btree.h | 2 +- fs/xfs/xfs_dir2_node.c | 4 ++-- fs/xfs/xfs_ialloc_btree.c | 4 ++-- fs/xfs/xfs_inode.c | 2 +- fs/xfs/xfs_ioctl.c | 14 ++++++++++---- fs/xfs/xfs_ioctl32.c | 14 ++++++++++---- fs/xfs/xfs_linux.h | 24 ++++++++++++++++++------ fs/xfs/xfs_message.c | 8 ++++++++ fs/xfs/xfs_message.h | 1 + fs/xfs/xfs_trans.h | 4 ++-- 15 files changed, 83 insertions(+), 32 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Tue May 7 19:01:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F11CE29E12 for ; Tue, 7 May 2013 19:01:44 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id BAAC48F8037; Tue, 7 May 2013 17:01:41 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 95E6E500B5F; Tue, 7 May 2013 19:01:41 -0500 (CDT) Date: Tue, 7 May 2013 19:01:41 -0500 From: Ben Myers To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] xfs: xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle Message-ID: <20130508000141.GQ29359@sgi.com> References: <515CB2C1.1050109@tlinx.org> <20130404035237.GA12011@dastard> <515D0A09.5030808@sandeen.net> <51795612.3080806@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51795612.3080806@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, Apr 25, 2013 at 11:13:06AM -0500, Eric Sandeen wrote: > Shamelessly copied from dchinner's: > ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get > > xfsdump uses a large buffer for extended attributes, which has a > kmalloc'd shadow buffer in the kernel. This can fail after the > system has been running for some time as it is a high order > allocation. Add a fallback to vmalloc so that it doesn't require > contiguous memory and so won't randomly fail while xfsdump is > running. > > This was done for xfs_attrlist_by_handle but > xfs_compat_attrlist_by_handle (the 32-bit version) needs the same > attention. > > Signed-off-by: Eric Sandeen Applied. From bpm@sgi.com Tue May 7 19:01:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AFD3329E2C for ; Tue, 7 May 2013 19:01:55 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6BDE4304064; Tue, 7 May 2013 17:01:52 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 46260500B5F; Tue, 7 May 2013 19:01:52 -0500 (CDT) Date: Tue, 7 May 2013 19:01:52 -0500 From: Ben Myers To: Eric Sandeen Cc: Dave Chinner , xfs-oss Subject: Re: [PATCH] xfs: xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle Message-ID: <20130508000152.GR29359@sgi.com> References: <515CB2C1.1050109@tlinx.org> <20130404035237.GA12011@dastard> <515D0A09.5030808@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <515D0A09.5030808@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, Apr 04, 2013 at 12:05:13AM -0500, Eric Sandeen wrote: > On 4/3/13 10:52 PM, Dave Chinner wrote: > > On Wed, Apr 03, 2013 at 03:52:49PM -0700, Linda Walsh wrote: > >> > >> Note -- I might have more attributes than some as the disks are shared via samba > >> w/windows > >> and samba stores ACL and xattr info from windows in xfs's attrs... > >> > >> > >> xfsdump: WARNING: could not get list of root attributes for nondir ino > >> 3412893285: Cannot allocate memory (12) > > > > .... > >> [1007383.689492] xfsdump: page allocation failure: order:4, mode:0x10c0d0 > > .... > >> [1007383.689531] [] kmalloc_order_trace+0x34/0xe0 > >> [1007383.689534] [] __kmalloc+0x186/0x190 > >> [1007383.689541] [] xfs_attrlist_by_handle+0x8c/0x110 > >> [1007383.689544] [] xfs_file_ioctl+0x437/0xb60 > > > > So it's the attribute handle interfaces that need the vmalloc > > treatment here, just like has been done for all the other attribute > > interfaces.... > > Like this? > > From: Eric Sandeen > > xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle > > Shamelessly copied from dchinner's: > ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get > > xfsdump uses for a large buffer for extended attributes, which has a > kmalloc'd shadow buffer in the kernel. This can fail after the > system has been running for some time as it is a high order > allocation. Add a fallback to vmalloc so that it doesn't require > contiguous memory and so won't randomly fail while xfsdump is > running. > > Signed-off-by: Eric Sandeen Applied. From bpm@sgi.com Tue May 7 19:02:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E513729E12 for ; Tue, 7 May 2013 19:02:22 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id C39A9304064; Tue, 7 May 2013 17:02:22 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 7E5F2500B5F; Tue, 7 May 2013 19:02:22 -0500 (CDT) Date: Tue, 7 May 2013 19:02:22 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 2/4] xfs: introduce CONFIG_XFS_WARN Message-ID: <20130508000222.GS29359@sgi.com> References: <1367321976-18268-1-git-send-email-david@fromorbit.com> <1367321976-18268-3-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1367321976-18268-3-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, Apr 30, 2013 at 09:39:34PM +1000, Dave Chinner wrote: > From: Dave Chinner > > Running a CONFIG_XFS_DEBUG kernel in production environments is not > the best idea as it introduces significant overhead, can change > the behaviour of algorithms (such as allocation) to improve test > coverage, and (most importantly) panic the machine on non-fatal > errors. > > There are many cases where all we want to do is run a > kernel with more bounds checking enabled, such as is provided by the > ASSERT() statements throughout the code, but without all the > potential overhead and drawbacks. > > This patch converts all the ASSERT statements to evaluate as > WARN_ON(1) statements and hence if they fail dump a warning and a > stack trace to the log. This has minimal overhead and does not > change any algorithms, and will allow us to find strange "out of > bounds" problems more easily on production machines. > > There are a few places where assert statements contain debug only > code. These are converted to be debug-or-warn only code so that we > still get all the assert checks in the code. > > Signed-off-by: Dave Chinner Applied. From sandeen@sandeen.net Tue May 7 19:25:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5139429E12 for ; Tue, 7 May 2013 19:25:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D06DEAC008 for ; Tue, 7 May 2013 17:25:05 -0700 (PDT) X-ASG-Debug-ID: 1367972704-04cb6c53a1d9210001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id sUdmyGPSF3LJnbuA for ; Tue, 07 May 2013 17:25:04 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2C907651AC62; Tue, 7 May 2013 19:25:04 -0500 (CDT) Message-ID: <51899B5F.2000107@sandeen.net> Date: Tue, 07 May 2013 19:25:03 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com Subject: Re: [PATCH 2/2] Make test 306 use null and zero device nodes on SCRATCH_MNT References: <1367964573-29620-1-git-send-email-jack@suse.cz> <1367964573-29620-2-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/2] Make test 306 use null and zero device nodes on SCRATCH_MNT In-Reply-To: <1367964573-29620-2-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367972704 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130310 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/7/13 5:09 PM, Jan Kara wrote: > In one place of test 306, we mistakenly used /dev/null and /dev/zero > instead of equivalent devices created on tested filesystem. So we were > not really testing the functionality we intended. > > Signed-off-by: Jan Kara Ugh. A fine mistake on my part. Thanks for catching that, cripes! Reviewed-by: Eric Sandeen > --- > tests/generic/306 | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tests/generic/306 b/tests/generic/306 > index e8e0fc0..f45d142 100644 > --- a/tests/generic/306 > +++ b/tests/generic/306 > @@ -73,9 +73,9 @@ _scratch_mount -o ro || _fail "Could not mount scratch readonly" > echo "== try to create new file" > touch $SCRATCH_MNT/this_should_fail 2>&1 | _filter_scratch > echo "== pwrite to null device" > -$XFS_IO_PROG -F -c "pwrite 0 512" /dev/null | _filter_xfs_io > +$XFS_IO_PROG -F -c "pwrite 0 512" $DEVNULL | _filter_xfs_io > echo "== pread from zero device" > -$XFS_IO_PROG -F -c "pread 0 512" /dev/zero | _filter_xfs_io > +$XFS_IO_PROG -F -c "pread 0 512" $DEVZERO | _filter_xfs_io > > echo "== truncating write to null device" > echo foo > $DEVNULL 2>&1 | _filter_scratch > From davej@redhat.com Tue May 7 19:44:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3276429E12 for ; Tue, 7 May 2013 19:44:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 237C230406A for ; Tue, 7 May 2013 17:43:57 -0700 (PDT) X-ASG-Debug-ID: 1367973836-04cb6c53a2d9f10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id UudHKzFLjyPe8Grf; Tue, 07 May 2013 17:43:56 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r480hrhw018188 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 May 2013 20:43:53 -0400 Received: from gelk.kernelslacker.org ([10.3.113.12]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r480hqtn003276 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 7 May 2013 20:43:53 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.6/8.14.5) with ESMTP id r480hpjW022901; Tue, 7 May 2013 20:43:51 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.6/8.14.6/Submit) id r480hoXJ022900; Tue, 7 May 2013 20:43:50 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 7 May 2013 20:43:50 -0400 From: Dave Jones To: Dave Chinner Cc: Mark Tinguely , CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130508004350.GA19136@redhat.com> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> <518962FC.2060509@sgi.com> <20130507222256.GD24635@dastard> <51898400.8000900@sgi.com> <20130507235458.GG24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130507235458.GG24635@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1367973836 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 08, 2013 at 09:54:58AM +1000, Dave Chinner wrote: > Dave, the patch below should fix the problem. > > xfs: Don't reference the EFI after it is freed > > From: Dave Chinner > > Checking the EFI for whether it is being released from recovery > after we've already released the known active reference is a mistake > worthy of a brown paper bag. Fix the (now) obvious use after free > that it can cause. Yup, that works for me. thanks, Dave From sandeen@sandeen.net Tue May 7 21:35:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5E7B929E0E for ; Tue, 7 May 2013 21:35:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 00D9D8F8065 for ; Tue, 7 May 2013 19:35:13 -0700 (PDT) X-ASG-Debug-ID: 1367980507-04bdf04224e34e0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 8m5yN47tE79XOwF0 for ; Tue, 07 May 2013 19:35:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id D6A19651AC62; Tue, 7 May 2013 21:35:06 -0500 (CDT) Message-ID: <5189B9DA.7010807@sandeen.net> Date: Tue, 07 May 2013 21:35:06 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , Jan Kara Subject: [PATCH V2] xfstests: automatically add -F to xfs_io on non-xfs References: <51850BED.6050109@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: automatically add -F to xfs_io on non-xfs In-Reply-To: <51850BED.6050109@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1367980507 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130318 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The -F flag to xfs_io originally enabled it to operate on non-xfs filesystems. This restriction was removed upstream in favor of gracefully failing on the handful of operations that actually required xfs, and the option was deprecated. However, xfstests is still used on distros with older xfsprogs, and so "xfs_io -F" was necessary throughout xfstests. Simplify this by appending -F to XFS_IO_PROG when it's needed - i.e. if we're using old xfsprogs on a non-xfs filesystem. This will eliminate errors when new tests leave out the -F, and if and when -F is finally removed, there will be one central location in xfstests to update. Signed-off-by: Eric Sandeen --- V2: test for necessity of -F in all cases, and convert a bunch more direct callers of xfs_io to $XFS_IO_PROG diff --git a/common/punch b/common/punch index b9f9acd..d8f73d0 100644 --- a/common/punch +++ b/common/punch @@ -311,13 +311,12 @@ _test_generic_punch() map_cmd=$4 filter_cmd=$5 testfile=$6 - xfs_io_opt=$7 #needs to be -F if not testing xfs echo " 1. into a hole" if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd [ $? -ne 0 ] && die_now @@ -327,7 +326,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 0 20k" $sync_cmd \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -338,7 +337,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 0 20k" \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -349,7 +348,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 8k 8k" $sync_cmd \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -360,7 +359,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 8k 8k" \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -371,7 +370,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 0 8k" $sync_cmd \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -382,7 +381,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 0 8k" $sync_cmd \ -c "$alloc_cmd 8k 8k" \ -c "$zero_cmd 4k 8k" \ @@ -394,7 +393,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 0 8k" \ -c "$zero_cmd 4k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -405,7 +404,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 0 8k" \ -c "pwrite 8k 8k" $sync_cmd \ -c "$zero_cmd 4k 8k" \ @@ -417,7 +416,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 8k 4k" $sync_cmd \ -c "$zero_cmd 4k 12k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -428,7 +427,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 0 20k" \ -c "pwrite 0 8k" \ -c "pwrite 12k 8k" $sync_cmd \ @@ -442,7 +441,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 0 20k" \ -c "pwrite 8k 4k" $sync_cmd \ -c "$zero_cmd 4k 12k" \ @@ -454,7 +453,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "$alloc_cmd 0 20k" \ -c "pwrite 0k 8k" $sync_cmd \ -c "pwrite 12k 8k" -c "fsync" \ @@ -465,7 +464,7 @@ _test_generic_punch() echo " 14. data -> hole @ EOF" rm -f $testfile - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 0 20k" $sync_cmd \ -c "$zero_cmd 12k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -476,7 +475,7 @@ _test_generic_punch() if [ "$remove_testfile" ]; then rm -f $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 0 20k" $sync_cmd \ -c "$zero_cmd 0k 8k" \ -c "$map_cmd -v" $testfile | $filter_cmd @@ -490,10 +489,10 @@ _test_generic_punch() else cp $testfile $testfile.2 fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 8k 12k" -c "fsync" $testfile.2 \ > /dev/null - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + $XFS_IO_PROG -f -c "truncate 20k" \ -c "pwrite 0 20k" $sync_cmd \ -c "$zero_cmd 0k 8k" \ -c "fadvise -d" \ @@ -508,7 +507,7 @@ _test_generic_punch() rm -f $testfile fi block_size=`stat -f $TEST_DEV | grep "Block size" | cut -d " " -f3` - $XFS_IO_PROG $xfs_io_opt -f -c "truncate $block_size" \ + $XFS_IO_PROG -f -c "truncate $block_size" \ -c "pwrite 0 $block_size" $sync_cmd \ -c "$zero_cmd 128 128" \ -c "$map_cmd -v" $testfile | $filter_cmd diff --git a/common/rc b/common/rc index f97924a..3f38a69 100644 --- a/common/rc +++ b/common/rc @@ -2150,6 +2150,11 @@ then $DF_PROG $TEST_DEV exit 1 fi + + # Figure out if we need to add -F ("foreign", deprecated) option to xfs_io + xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \ + export XFS_IO_PROG="$XFS_IO_PROG -F" + fi # make sure this script returns success diff --git a/tests/ext4/271 b/tests/ext4/271 index dfb1ec9..274e904 100755 --- a/tests/ext4/271 +++ b/tests/ext4/271 @@ -54,7 +54,7 @@ do dd if=/dev/zero of=$SCRATCH_MNT/file bs=4k count=1 seek=$((i*10)) done # truncate last extent -$XFS_IO_PROG -F -f -c "truncate $((4096*200))" $SCRATCH_MNT/file +$XFS_IO_PROG -f -c "truncate $((4096*200))" $SCRATCH_MNT/file if ! _scratch_unmount; then echo "failed to umount" diff --git a/tests/generic/130 b/tests/generic/130 index 6870606..cfc2c32 100755 --- a/tests/generic/130 +++ b/tests/generic/130 @@ -63,7 +63,7 @@ _scratch_mkfs >/dev/null 2>&1 _scratch_mount echo "End-of-file zeroing with direct I/O" -xfs_io -F -f -d -t -c "pwrite -S 0x63 0 65536" \ +$XFS_IO_PROG -f -d -t -c "pwrite -S 0x63 0 65536" \ -c "truncate 1" \ -c "pwrite -S 0x41 65536 65536" \ -c "pread -v 0 131072" \ @@ -71,46 +71,46 @@ xfs_io -F -f -d -t -c "pwrite -S 0x63 0 65536" \ echo echo "Basic Block Hole test" -xfs_io -F -f -t -c "truncate 8192" \ +$XFS_IO_PROG -f -t -c "truncate 8192" \ -c "pread -v 5000 3000" \ $SCRATCH_MNT/blackhole | _filter_xfs_io_unique echo echo "Test buffered and direct IO coherency" -xfs_io -F -f -t -c "pwrite -S 0x41 8000 1000" \ +$XFS_IO_PROG -f -t -c "pwrite -S 0x41 8000 1000" \ -c "pwrite -S 0x57 4000 1000" \ $SCRATCH_MNT/buff_direct_coherency | _filter_xfs_io_unique -xfs_io -F -d -c "pwrite -S 0x78 20480 4096"\ +$XFS_IO_PROG -d -c "pwrite -S 0x78 20480 4096"\ -c "pwrite -S 0x79 4096 4096"\ $SCRATCH_MNT/buff_direct_coherency | _filter_xfs_io_unique -xfs_io -F -c "pread -v 0 9000"\ +$XFS_IO_PROG -c "pread -v 0 9000"\ $SCRATCH_MNT/buff_direct_coherency | _filter_xfs_io_unique echo echo "Test direct read and write" -xfs_io -F -f -d -t -c "pwrite -S 0x78 0 65536"\ +$XFS_IO_PROG -f -d -t -c "pwrite -S 0x78 0 65536"\ -c "pread -v 0 65536"\ -c "pwrite -S 0x46 65536 6553600"\ -c "pread -v 0 6619136"\ $SCRATCH_MNT/direct_io | _filter_xfs_io_unique -xfs_io -F -d -c "pread -v 0 6619136"\ +$XFS_IO_PROG -d -c "pread -v 0 6619136"\ $SCRATCH_MNT/direct_io | _filter_xfs_io_unique -xfs_io -F -f -d -t -c "pwrite -S 0x61 0 65536"\ +$XFS_IO_PROG -f -d -t -c "pwrite -S 0x61 0 65536"\ -c "pread -v 0 65536"\ -c "pwrite -S 0x62 65536 131072"\ -c "pread -v 0 131072"\ $SCRATCH_MNT/async_direct_io | _filter_xfs_io_unique -xfs_io -F -d -c "pread -v 0 131072"\ +$XFS_IO_PROG -d -c "pread -v 0 131072"\ $SCRATCH_MNT/async_direct_io | _filter_xfs_io_unique echo echo "FSB Edge test" -xfs_io -F -f -t -c "truncate 131072"\ +$XFS_IO_PROG -f -t -c "truncate 131072"\ -c "pwrite -S 0x5F 0 131072"\ -c "truncate 0"\ -c "truncate 131072"\ @@ -122,10 +122,10 @@ echo echo "Open Trunk test (O_TRUNC)" for n in 0 1 2 3 4 do - xfs_io -F -f -t -c "pread -v 0 100" $SCRATCH_MNT/$n | _filter_xfs_io_unique + $XFS_IO_PROG -f -t -c "pread -v 0 100" $SCRATCH_MNT/$n | _filter_xfs_io_unique echo "Test" > $SCRATCH_MNT/$n - xfs_io -F -f -t -c "pread -v 0 100" $SCRATCH_MNT/$n | _filter_xfs_io_unique + $XFS_IO_PROG -f -t -c "pread -v 0 100" $SCRATCH_MNT/$n | _filter_xfs_io_unique cat $SCRATCH_MNT/$n done echo "DONE" @@ -133,14 +133,14 @@ echo "DONE" echo echo "Append test" echo "append to me" > $SCRATCH_MNT/append -xfs_io -F -a -c "pwrite -S 0x61 0 10" \ +$XFS_IO_PROG -a -c "pwrite -S 0x61 0 10" \ -c "pread -v 0 24"\ $SCRATCH_MNT/append | _filter_xfs_io_unique echo echo "Small Vector Async" echo "abcdefghijklmnopqrstuvwxyz" > $SCRATCH_MNT/small_vector_async -xfs_io -F -f -c "pread -v 0 1"\ +$XFS_IO_PROG -f -c "pread -v 0 1"\ -c "pread -v 1 1"\ -c "pread -v 2 1"\ -c "pread -v 3 1"\ @@ -199,7 +199,7 @@ xfs_io -F -f -c "pread -v 0 1"\ echo echo "Small Vector Sync" echo "abcdefghijklmnopqrstuvwxyz" > $SCRATCH_MNT/small_vector_async -xfs_io -F -f -s -c "pread -v 0 1"\ +$XFS_IO_PROG -f -s -c "pread -v 0 1"\ -c "pread -v 1 1"\ -c "pread -v 2 1"\ -c "pread -v 3 1"\ diff --git a/tests/generic/132 b/tests/generic/132 index 28c8b9a..42ab909 100755 --- a/tests/generic/132 +++ b/tests/generic/132 @@ -52,7 +52,7 @@ _require_scratch _scratch_mkfs >/dev/null 2>&1 _scratch_mount -xfs_io -F -f -t -c "pwrite -S 0x63 0 512" \ +$XFS_IO_PROG -f -t -c "pwrite -S 0x63 0 512" \ -c "pwrite -S 0x64 512 512" \ -c "pwrite -S 0x65 1024 512" \ -c "pwrite -S 0x66 1536 512" \ @@ -70,7 +70,7 @@ xfs_io -F -f -t -c "pwrite -S 0x63 0 512" \ -c "pread -v 3584 512" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x63 4096 1024" \ +$XFS_IO_PROG -f -c "pwrite -S 0x63 4096 1024" \ -c "pwrite -S 0x6B 5120 1024" \ -c "pwrite -S 0x6C 6144 1024" \ -c "pwrite -S 0x6D 7168 1024" \ @@ -84,7 +84,7 @@ xfs_io -F -f -c "pwrite -S 0x63 4096 1024" \ -c "pread -v 7168 1024" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x6E 8192 2048" \ +$XFS_IO_PROG -f -c "pwrite -S 0x6E 8192 2048" \ -c "pwrite -S 0x6F 10240 2048" \ -c "pread -v 0 2048" \ -c "pread -v 2048 2048" \ @@ -94,14 +94,14 @@ xfs_io -F -f -c "pwrite -S 0x6E 8192 2048" \ -c "pread -v 10240 2048" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x70 12288 4096" \ +$XFS_IO_PROG -f -c "pwrite -S 0x70 12288 4096" \ -c "pread -v 0 4096" \ -c "pread -v 4096 4096" \ -c "pread -v 8192 4096" \ -c "pread -v 12288 4096" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x71 16384 8192" \ +$XFS_IO_PROG -f -c "pwrite -S 0x71 16384 8192" \ -c "pwrite -S 0x72 24576 8192" \ -c "pread -v 0 8192" \ -c "pread -v 8192 8192" \ @@ -109,7 +109,7 @@ xfs_io -F -f -c "pwrite -S 0x71 16384 8192" \ -c "pread -v 16384 8192" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x73 32768 16384" \ +$XFS_IO_PROG -f -c "pwrite -S 0x73 32768 16384" \ -c "pwrite -S 0x74 49152 16384" \ -c "pread -v 0 16384" \ -c "pread -v 16384 16384" \ @@ -117,7 +117,7 @@ xfs_io -F -f -c "pwrite -S 0x73 32768 16384" \ -c "pread -v 49152 16384" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x75 65536 32768" \ +$XFS_IO_PROG -f -c "pwrite -S 0x75 65536 32768" \ -c "pwrite -S 0x76 98304 32768" \ -c "pread -v 0 32768" \ -c "pread -v 32768 32768" \ @@ -125,7 +125,7 @@ xfs_io -F -f -c "pwrite -S 0x75 65536 32768" \ -c "pread -v 98304 32768" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x76 131072 65536" \ +$XFS_IO_PROG -f -c "pwrite -S 0x76 131072 65536" \ -c "pwrite -S 0x77 196608 65536" \ -c "pread -v 0 65536" \ -c "pread -v 65536 65536" \ @@ -133,7 +133,7 @@ xfs_io -F -f -c "pwrite -S 0x76 131072 65536" \ -c "pread -v 196608 65536" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x76 262144 131072" \ +$XFS_IO_PROG -f -c "pwrite -S 0x76 262144 131072" \ -c "pwrite -S 0x77 393216 131072" \ -c "pread -v 0 131072" \ -c "pread -v 131072 131072" \ @@ -141,14 +141,14 @@ xfs_io -F -f -c "pwrite -S 0x76 262144 131072" \ -c "pread -v 393216 131072" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x76 524288 524288" \ +$XFS_IO_PROG -f -c "pwrite -S 0x76 524288 524288" \ -c "pwrite -S 0x77 1048576 524288" \ -c "pread -v 0 524288" \ -c "pread -v 524288 524288" \ -c "pread -v 1048576 524288" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x32 1048576 1048576" \ +$XFS_IO_PROG -f -c "pwrite -S 0x32 1048576 1048576" \ -c "pwrite -S 0x33 2097152 1048576" \ -c "pwrite -S 0x34 3145728 1048576" \ -c "pwrite -S 0x35 4194304 1048576" \ @@ -167,7 +167,7 @@ xfs_io -F -f -c "pwrite -S 0x32 1048576 1048576" \ -c "pread -v 8388608 1048576" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x32 1048576 1048576" \ +$XFS_IO_PROG -f -c "pwrite -S 0x32 1048576 1048576" \ -c "pwrite -S 0x33 2097152 1048576" \ -c "pwrite -S 0x34 3145728 1048576" \ -c "pwrite -S 0x35 4194304 1048576" \ @@ -188,7 +188,7 @@ xfs_io -F -f -c "pwrite -S 0x32 1048576 1048576" \ -c "pread -v 9437184 1048576" \ $SCRATCH_MNT/aligned_vector_rw | _filter_xfs_io_unique -xfs_io -F -f -c "pwrite -S 0x92 10485760 10485760" \ +$XFS_IO_PROG -f -c "pwrite -S 0x92 10485760 10485760" \ -c "pwrite -S 0x93 20971520 10485760" \ -c "pwrite -S 0x94 31457280 10485760" \ -c "pwrite -S 0x95 41943040 10485760" \ diff --git a/tests/generic/133 b/tests/generic/133 index ba386dc..65ab822 100755 --- a/tests/generic/133 +++ b/tests/generic/133 @@ -47,30 +47,30 @@ _supported_os Linux IRIX _setup_testdir echo "Buffered writer, buffered reader" -xfs_io -F -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null -xfs_io -F -f -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & -xfs_io -F -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & +$XFS_IO_PROG -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null wait rm $testdir/io_test echo "Direct writer, buffered reader" -xfs_io -F -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null -xfs_io -F -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & -xfs_io -F -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & +$XFS_IO_PROG -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null wait rm $testdir/io_test echo "Buffered writer, direct reader" -xfs_io -F -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null -xfs_io -F -f -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & -xfs_io -F -d -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & +$XFS_IO_PROG -d -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null wait rm $testdir/io_test echo "Direct writer, direct reader" -xfs_io -F -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null -xfs_io -F -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & -xfs_io -F -d -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $testdir/io_test >/dev/null & +$XFS_IO_PROG -d -c 'pread -b 64k 0 512m' $testdir/io_test > /dev/null wait rm $testdir/io_test diff --git a/tests/generic/135 b/tests/generic/135 index fed0cd9..783a106 100755 --- a/tests/generic/135 +++ b/tests/generic/135 @@ -64,18 +64,18 @@ _umount_mount cd $SCRATCH_MNT # create file with async I/O -xfs_io -F -f -c 'pwrite -b 4k -S 0x12 0 4k' async_file > /dev/null +$XFS_IO_PROG -f -c 'pwrite -b 4k -S 0x12 0 4k' async_file > /dev/null # create file with sync I/O -xfs_io -F -f -s -c 'pwrite -b 4k -S 0x34 0 4k' sync_file > /dev/null +$XFS_IO_PROG -f -s -c 'pwrite -b 4k -S 0x34 0 4k' sync_file > /dev/null # create file with sync I/O -xfs_io -F -f -d -c 'pwrite -b 4k -S 0x56 0 4k' direct_file > /dev/null +$XFS_IO_PROG -f -d -c 'pwrite -b 4k -S 0x56 0 4k' direct_file > /dev/null # create file, truncate and then dirty again -xfs_io -F -f -c 'pwrite -b 4k -S 0x78 0 4k' trunc_file > /dev/null -xfs_io -F -f -c 'truncate 2k' trunc_file > /dev/null -xfs_io -F -c 'pwrite 1k 0 1k' trunc_file > /dev/null +$XFS_IO_PROG -f -c 'pwrite -b 4k -S 0x78 0 4k' trunc_file > /dev/null +$XFS_IO_PROG -f -c 'truncate 2k' trunc_file > /dev/null +$XFS_IO_PROG -c 'pwrite 1k 0 1k' trunc_file > /dev/null _umount_mount diff --git a/tests/generic/141 b/tests/generic/141 index 39400de..83b5486 100755 --- a/tests/generic/141 +++ b/tests/generic/141 @@ -52,7 +52,7 @@ _scratch_mount # create file, mmap a region and mmap read it file=$SCRATCH_MNT/mmap -xfs_io -F -f -c "pwrite 0 1024k" -c "mmap 64k 64k" -c "mread -r" $file > /dev/null +$XFS_IO_PROG -f -c "pwrite 0 1024k" -c "mmap 64k 64k" -c "mread -r" $file > /dev/null rm -f $file diff --git a/tests/generic/169 b/tests/generic/169 index 0a07053..ebeffa7 100755 --- a/tests/generic/169 +++ b/tests/generic/169 @@ -67,7 +67,7 @@ echo "# creating new file for io" touch $SCRATCH_MNT/testfile echo "# appending 15k to new file, sync every 5k" -xfs_io -F -a -c "pwrite 0 5k" -c "fsync" \ +$XFS_IO_PROG -a -c "pwrite 0 5k" -c "fsync" \ -c "pwrite 5k 5k" -c "fsync" \ -c "pwrite 10k 5k" -c "fsync" -c "stat" \ $SCRATCH_MNT/testfile \ @@ -82,11 +82,11 @@ _scratch_mount >>$seqres.full 2>&1 \ || _fail "mount failed: $MOUNT_OPTIONS" echo "# stating file to confirm correct size" -xfs_io -F -r -c "stat" $SCRATCH_MNT/testfile \ +$XFS_IO_PROG -r -c "stat" $SCRATCH_MNT/testfile \ | _show_wrote_and_stat_only echo "# appending 10 bytes to new file, sync at 5 bytes" -xfs_io -F -f -c "pwrite 0 5" -c s -c "pwrite 5 5" \ +$XFS_IO_PROG -f -c "pwrite 0 5" -c s -c "pwrite 5 5" \ -c "stat" $SCRATCH_MNT/nextfile \ | _show_wrote_and_stat_only @@ -99,7 +99,7 @@ _scratch_mount >>$seqres.full 2>&1 \ || _fail "mount failed: $MOUNT_OPTIONS" echo "# stating file to confirm correct size" -xfs_io -F -r -c "stat" $SCRATCH_MNT/nextfile \ +$XFS_IO_PROG -r -c "stat" $SCRATCH_MNT/nextfile \ | _show_wrote_and_stat_only # success, all done diff --git a/tests/generic/213 b/tests/generic/213 index a0bfd16..3c8a304 100755 --- a/tests/generic/213 +++ b/tests/generic/213 @@ -61,19 +61,19 @@ avail=`df -P $TEST_DIR | awk 'END {print $4}'` [ "$avail" -ge 1049600 ] || _notrun "Test device is too small ($avail KiB)" # reserve 1GiB, truncate at 100bytes -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'truncate 100' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'truncate 100' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # reserve 1GiB, truncate at 1GiB -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'truncate 1g' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'truncate 1g' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # reserve 1GiB, truncate at 2GiB -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'truncate 2g' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'truncate 2g' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # reserve 1GiB, 1GiB hole, reserve 1MiB, truncate at 3GiB -$XFS_IO_PROG -F -f -c 'falloc 0 1g' -c 'falloc 2g 1m' -c 'truncate 3g' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 1g' -c 'falloc 2g 1m' -c 'truncate 3g' $TEST_DIR/ouch rm -f $TEST_DIR/ouch # Try to reserve more space than we have @@ -81,7 +81,7 @@ echo "We should get: fallocate: No space left on device" echo "Strangely, xfs_io sometimes says \"Success\" when something went wrong, FYI" let toobig=$avail*2 -$XFS_IO_PROG -F -f -c "falloc 0 ${toobig}k" $TEST_DIR/ouch +$XFS_IO_PROG -f -c "falloc 0 ${toobig}k" $TEST_DIR/ouch rm -f $TEST_DIR/ouch # success, all done diff --git a/tests/generic/214 b/tests/generic/214 index f1257ee..1885534 100755 --- a/tests/generic/214 +++ b/tests/generic/214 @@ -63,7 +63,7 @@ rm -f $TEST_DIR/test214-* # Super-trivial; preallocate a region and read it; get 0s. echo "=== falloc & read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 4096' \ -c 'pread -v 0 4096' \ $TEST_DIR/test214-1 | _filter_xfs_io_unique @@ -72,7 +72,7 @@ $XFS_IO_PROG -F -f \ # Should get no stale data. Early ext4 bug. echo "=== falloc, write beginning, read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 512' \ -c 'pwrite 0 1' \ -c 'pread -v 0 512' \ @@ -80,7 +80,7 @@ $XFS_IO_PROG -F -f \ # Same but write in the middle of the region echo "=== falloc, write middle, read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 512' \ -c 'pwrite 256 1' \ -c 'pread -v 0 512' \ @@ -88,7 +88,7 @@ $XFS_IO_PROG -F -f \ # Same but write the end of the region echo "=== falloc, write end, read ===" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0 512' \ -c 'pwrite 511 1' \ -c 'pread -v 0 512' \ @@ -106,7 +106,7 @@ $XFS_IO_PROG -F -f \ echo "=== falloc, write, sync, truncate, read ===" # Allocate, write, sync, truncate (buffered) -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'falloc 0x0 0x65C00' \ -c 'pwrite -S 0xAA 0x12000 0x10000' \ -c 'fsync' \ @@ -114,7 +114,7 @@ $XFS_IO_PROG -F -f \ $TEST_DIR/test214-5 | _filter_xfs_io_unique # now do a direct read and see what's on-disk -$XFS_IO_PROG -F -f -d \ +$XFS_IO_PROG -f -d \ -c 'pread -v 0 0x16000' \ $TEST_DIR/test214-5 | _filter_xfs_io_unique @@ -126,7 +126,7 @@ echo "=== delalloc write 16k; fallocate same range ===" # delalloc write 16k, fallocate same range. # Should get caught on fsck when we're done. -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c "pwrite 0 16k" \ -c "falloc 0 16k" \ -c "fsync" \ @@ -136,8 +136,8 @@ $XFS_IO_PROG -F -f \ echo "=== ext4 testcase 2 ===" -$XFS_IO_PROG -F -f \ - -c "fsync" \ +$XFS_IO_PROG -f \ + -c "fsync" \ -c "pwrite 551917 41182" \ -c "falloc 917633 392230" \ -c "pwrite 285771 77718" \ diff --git a/tests/generic/215 b/tests/generic/215 index 6e75645..eaae8d8 100755 --- a/tests/generic/215 +++ b/tests/generic/215 @@ -59,7 +59,7 @@ sleep 2 echo echo "writing via mmap" -$XFS_IO_PROG -F -f \ +$XFS_IO_PROG -f \ -c 'mmap 0 4096' \ -c 'mwrite 0 4096' \ $testfile | _filter_xfs_io_unique diff --git a/tests/generic/219 b/tests/generic/219 index 071d798..2b75b89 100755 --- a/tests/generic/219 +++ b/tests/generic/219 @@ -82,11 +82,11 @@ test_accounting() echo "--- initiating parallel IO..." >>$seqres.full # Small ios here because ext3 will account for indirect blocks too ... # 48k will fit w/o indirect for 4k blocks (default blocksize) - $XFS_IO_PROG -F -c 'pwrite 0 48k' -c 'fsync' \ + $XFS_IO_PROG -c 'pwrite 0 48k' -c 'fsync' \ $SCRATCH_MNT/buffer >>$seqres.full 2>&1 & - $XFS_IO_PROG -F -c 'pwrite 0 48k' -d \ + $XFS_IO_PROG -c 'pwrite 0 48k' -d \ $SCRATCH_MNT/direct >>$seqres.full 2>&1 & - $XFS_IO_PROG -F -c 't 48k' -c 'mm -rw 0 48k' -c 'mw 0 48k' -c 'ms -s' \ + $XFS_IO_PROG -c 't 48k' -c 'mm -rw 0 48k' -c 'mw 0 48k' -c 'ms -s' \ $SCRATCH_MNT/mmap >>$seqres.full 2>&1 & wait echo "--- completed parallel IO ($type)" >>$seqres.full diff --git a/tests/generic/223 b/tests/generic/223 index 416a14a..7b0e584 100755 --- a/tests/generic/223 +++ b/tests/generic/223 @@ -66,10 +66,10 @@ for SUNIT_K in 8 16 32 64 128; do echo "=== Testing size ${SIZE_MULT}*${SUNIT_K}k on ${SUNIT_K}k stripe ===" for FILE in 1 2 3 4; do - xfs_io -F -f -c "falloc 0 $SIZE" \ + $XFS_IO_PROG -f -c "falloc 0 $SIZE" \ $SCRATCH_MNT/file-$FILE-$SIZE-falloc \ >> $seqres.full 2>&1 - xfs_io -F -f -c "pwrite 0 $SIZE" \ + $XFS_IO_PROG -f -c "pwrite 0 $SIZE" \ $SCRATCH_MNT/file-$FILE-$SIZE-write \ >> $seqres.full 2>&1 src/t_stripealign $SCRATCH_MNT/file-$FILE-$SIZE-falloc \ @@ -80,7 +80,7 @@ for SUNIT_K in 8 16 32 64 128; do done echo "=== Testing size 1g falloc on ${SUNIT_K}k stripe ===" - xfs_io -F -f -c "falloc 0 1g" \ + $XFS_IO_PROG -f -c "falloc 0 1g" \ $SCRATCH_MNT/file-1g-falloc >> $seqres.full 2>&1 src/t_stripealign $SCRATCH_MNT/file-1g-falloc $SUNIT_BLOCKS \ | _filter_scratch @@ -88,7 +88,7 @@ for SUNIT_K in 8 16 32 64 128; do rm -f $SCRATCH_MNT/file-1g-falloc | _filter_scratch echo "=== Testing size 1073745920 falloc on ${SUNIT_K}k stripe ===" - xfs_io -F -f -c "falloc 0 1073745920" \ + $XFS_IO_PROG -f -c "falloc 0 1073745920" \ $SCRATCH_MNT/file-1073745920-falloc >> $seqres.full 2>&1 src/t_stripealign $SCRATCH_MNT/file-1073745920-falloc \ $SUNIT_BLOCKS | _filter_scratch diff --git a/tests/generic/226 b/tests/generic/226 index 8b8f101..b98e889 100755 --- a/tests/generic/226 +++ b/tests/generic/226 @@ -54,7 +54,7 @@ buffer="-b $(expr 512 \* 1024)" echo "--> $loops buffered 64m writes in a loop" for I in `seq 1 $loops`; do echo -n "$I " - xfs_io -F -f \ + $XFS_IO_PROG -f \ -c "pwrite ${buffer} 0 64m" $SCRATCH_MNT/test >> $seqres.full rm -f $SCRATCH_MNT/test done @@ -66,7 +66,7 @@ _scratch_mount echo "--> $loops direct 64m writes in a loop" for I in `seq 1 $loops`; do echo -n "$I " - xfs_io -F -f -d \ + $XFS_IO_PROG -f -d \ -c "pwrite ${buffer} 0 64m" $SCRATCH_MNT/test >> $seqres.full rm -f $SCRATCH_MNT/test done diff --git a/tests/generic/228 b/tests/generic/228 index ca375f4..03d4491 100755 --- a/tests/generic/228 +++ b/tests/generic/228 @@ -73,11 +73,11 @@ flim=`ulimit -f` echo "File size limit is now set to 100 MB." echo "Let us try to preallocate 101 MB. This should fail." -$XFS_IO_PROG -F -f -c 'falloc 0 101m' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 101m' $TEST_DIR/ouch rm -f $TEST_DIR/ouch echo "Let us now try to preallocate 50 MB. This should succeed." -$XFS_IO_PROG -F -f -c 'falloc 0 50m' $TEST_DIR/ouch +$XFS_IO_PROG -f -c 'falloc 0 50m' $TEST_DIR/ouch rm -f $TEST_DIR/ouch echo "Test over." diff --git a/tests/generic/230 b/tests/generic/230 index 797755b..b77210f 100755 --- a/tests/generic/230 +++ b/tests/generic/230 @@ -62,23 +62,23 @@ test_enforcement() echo "--- initiating IO..." >>$seqres.full # Firstly fit below block soft limit echo "Write 900k..." - su $qa_user -c "$XFS_IO_PROG -F -c 'pwrite 0 900k' -c fsync \ + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 900k' -c fsync \ $SCRATCH_MNT/file1" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Secondly overcome block soft limit echo "Rewrite 1001k..." - su $qa_user -c "$XFS_IO_PROG -F -c 'pwrite 0 1001k' -c fsync \ + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 1001k' -c fsync \ $SCRATCH_MNT/file1" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Now try to overcome block hardlimit echo "Write 1000k..." - su $qa_user -c "$XFS_IO_PROG -F -c 'pwrite 0 1000k' -c fsync \ + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 1000k' -c fsync \ $SCRATCH_MNT/file2" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Now sleep for grace time and check that softlimit got enforced sleep $((grace+1)) echo "Write 4096..." - su $qa_user -c "$XFS_IO_PROG -F -c 'truncate 0' -c 'pwrite 0 4096' \ + su $qa_user -c "$XFS_IO_PROG -c 'truncate 0' -c 'pwrite 0 4096' \ $SCRATCH_MNT/file2" 2>&1 >>$seqres.full | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # And now the softlimit test for inodes diff --git a/tests/generic/231 b/tests/generic/231 index b50412c..a7cff35 100755 --- a/tests/generic/231 +++ b/tests/generic/231 @@ -57,7 +57,7 @@ _fsx() wait return 1 fi - $XFS_IO_PROG -F -c 'fsync' $SCRATCH_MNT/fsx_file$i + $XFS_IO_PROG -c 'fsync' $SCRATCH_MNT/fsx_file$i cat $tmp.output$i | tee -a $seqres.full done return 0 diff --git a/tests/generic/235 b/tests/generic/235 index f430ba2..237da5e 100755 --- a/tests/generic/235 +++ b/tests/generic/235 @@ -69,7 +69,7 @@ mount -o remount,ro $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch mount -o remount,rw $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch -$XFS_IO_PROG -F -c 'pwrite 0 8k' -c 'fsync' \ +$XFS_IO_PROG -c 'pwrite 0 8k' -c 'fsync' \ $SCRATCH_MNT/testfile >>$seqres.full 2>&1 repquota -u -g $SCRATCH_MNT | grep -v "^root" | _filter_scratch diff --git a/tests/generic/247 b/tests/generic/247 index 295259f..5f16281 100755 --- a/tests/generic/247 +++ b/tests/generic/247 @@ -66,7 +66,7 @@ start=`expr $loops - 1` for i in `seq $start -1 0` do offset=`expr $i \* $iosize` - $XFS_IO_PROG -F -f -c "mmap -w $offset $iosize" -c "mwrite $offset $iosize" $testfile + $XFS_IO_PROG -f -c "mmap -w $offset $iosize" -c "mwrite $offset $iosize" $testfile [ $? -ne 0 ] && exit done diff --git a/tests/generic/249 b/tests/generic/249 index 6ba7ddb..1f25edb 100755 --- a/tests/generic/249 +++ b/tests/generic/249 @@ -53,9 +53,9 @@ SRC=$TEST_DIR/$seq.src DST=$TEST_DIR/$seq.dst rm -f $seqres.full -$XFS_IO_PROG -F -f -c "pwrite -S 0xa5a55a5a 0 32768k" -c fsync $SRC >> $seqres.full 2>&1 +$XFS_IO_PROG -f -c "pwrite -S 0xa5a55a5a 0 32768k" -c fsync $SRC >> $seqres.full 2>&1 [ $? -ne 0 ] && _fail "xfs_io pwrite failed" -$XFS_IO_PROG -F -f -c "sendfile -i $SRC 0 32768k" -c fsync $DST >> $seqres.full 2>&1 +$XFS_IO_PROG -f -c "sendfile -i $SRC 0 32768k" -c fsync $DST >> $seqres.full 2>&1 [ $? -ne 0 ] && _fail "xfs_io sendfile failed" diff -q $SRC $DST diff --git a/tests/generic/255 b/tests/generic/255 index 2e8ddef..dd329b4 100755 --- a/tests/generic/255 +++ b/tests/generic/255 @@ -53,15 +53,15 @@ _require_xfs_io_fiemap testfile=$TEST_DIR/255.$$ # Standard punch hole tests -_test_generic_punch falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F +_test_generic_punch falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile # Delayed allocation punch hole tests -_test_generic_punch -d falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F +_test_generic_punch -d falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile # Multi hole punch tests -_test_generic_punch -k falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F +_test_generic_punch -k falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile # Delayed allocation multi punch hole tests -_test_generic_punch -d -k falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F +_test_generic_punch -d -k falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile status=0 ; exit diff --git a/tests/generic/256 b/tests/generic/256 index 18ab819..4a53da8 100755 --- a/tests/generic/256 +++ b/tests/generic/256 @@ -92,11 +92,11 @@ _fill_fs() { while [ $file_size -ge $block_size ] do bytes_written=0 - _user_do "$XFS_IO_PROG -F -f -c \"pwrite 0 $file_size\" $dir/$file_count.bin &> /dev/null" + _user_do "$XFS_IO_PROG -f -c \"pwrite 0 $file_size\" $dir/$file_count.bin &> /dev/null" if [ -f $dir/$file_count.bin ] then - bytes_written=`$XFS_IO_PROG -F -c "stat" $dir/$file_count.bin | grep stat.size | cut -d ' ' -f3` + bytes_written=`$XFS_IO_PROG -c "stat" $dir/$file_count.bin | grep stat.size | cut -d ' ' -f3` fi # If there was no room to make the file, @@ -139,7 +139,7 @@ _test_full_fs_punch() rm -f $file_name &> /dev/null - $XFS_IO_PROG -F -f -c "pwrite 0 $file_len" \ + $XFS_IO_PROG -f -c "pwrite 0 $file_len" \ -c "fsync" $file_name &> /dev/null chmod 666 $file_name @@ -149,7 +149,7 @@ _test_full_fs_punch() do # This part must not be done as root in order to # test that reserved blocks are used when needed - _user_do "$XFS_IO_PROG -F -f -c \"fpunch $hole_offset $hole_len\" $file_name" + _user_do "$XFS_IO_PROG -f -c \"fpunch $hole_offset $hole_len\" $file_name" rc=$? if [ $? -ne 0 ] ; then echo Punch hole failed diff --git a/tests/generic/274 b/tests/generic/274 index 5f3a51c..da45fab 100755 --- a/tests/generic/274 +++ b/tests/generic/274 @@ -61,7 +61,7 @@ _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seqres.full 2>&1 _scratch_mount # Create a 4k file and Allocate 4M past EOF on that file -xfs_io -F -f -c "pwrite 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test \ +$XFS_IO_PROG -f -c "pwrite 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test \ >>$seqres.full 2>&1 || _fail "failed to create test file" # Fill the rest of the fs completely diff --git a/tests/generic/286 b/tests/generic/286 old mode 100644 new mode 100755 index a0d4df9..0652fd4 --- a/tests/generic/286 +++ b/tests/generic/286 @@ -63,7 +63,7 @@ test01() done echo "*** test01() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test01() create sparse file done ***" >>$seqres.full echo >>$seqres.full @@ -91,7 +91,7 @@ test02() done echo "*** test02() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test02() create sparse file done ***" >>$seqres.full echo >>$seqres.full @@ -134,7 +134,7 @@ test03() done echo "*** test03() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test03() create sparse file done ***" >>$seqres.full echo >>$seqres.full @@ -176,7 +176,7 @@ test04() done echo "*** test04() create sparse file ***" >>$seqres.full - eval ${XFS_IO_PROG} -F -f "${write_cmd}" $src >>$seqres.full 2>&1 || + eval ${XFS_IO_PROG} -f "${write_cmd}" $src >>$seqres.full 2>&1 || _fail "create sparse file failed!" echo "*** test04() create sparse file done ***" >>$seqres.full echo >>$seqres.full diff --git a/tests/generic/306 b/tests/generic/306 old mode 100644 new mode 100755 index e8e0fc0..d225af5 --- a/tests/generic/306 +++ b/tests/generic/306 @@ -73,9 +73,9 @@ _scratch_mount -o ro || _fail "Could not mount scratch readonly" echo "== try to create new file" touch $SCRATCH_MNT/this_should_fail 2>&1 | _filter_scratch echo "== pwrite to null device" -$XFS_IO_PROG -F -c "pwrite 0 512" /dev/null | _filter_xfs_io +$XFS_IO_PROG -c "pwrite 0 512" /dev/null | _filter_xfs_io echo "== pread from zero device" -$XFS_IO_PROG -F -c "pread 0 512" /dev/zero | _filter_xfs_io +$XFS_IO_PROG -c "pread 0 512" /dev/zero | _filter_xfs_io echo "== truncating write to null device" echo foo > $DEVNULL 2>&1 | _filter_scratch @@ -84,16 +84,16 @@ echo foo >> $DEVNULL 2>&1 | _filter_scratch echo "== writing to symlink from ro fs to rw fs" # Various combinations of O_CREAT & O_TRUNC -$XFS_IO_PROG -F -c "pwrite 0 512" $SYMLINK | _filter_xfs_io -$XFS_IO_PROG -F -f -c "pwrite 0 512" $SYMLINK | _filter_xfs_io -$XFS_IO_PROG -F -t -c "pwrite 0 512" $SYMLINK | _filter_xfs_io +$XFS_IO_PROG -c "pwrite 0 512" $SYMLINK | _filter_xfs_io +$XFS_IO_PROG -f -c "pwrite 0 512" $SYMLINK | _filter_xfs_io +$XFS_IO_PROG -t -c "pwrite 0 512" $SYMLINK | _filter_xfs_io echo "== write to bind-mounted rw file on ro fs" mount --bind $TARGET $BINDFILE # with and without -f (adds O_CREAT) -$XFS_IO_PROG -F -c "pwrite 0 512" $BINDFILE | _filter_xfs_io -$XFS_IO_PROG -F -f -c "pwrite 0 512" $BINDFILE | _filter_xfs_io -$XFS_IO_PROG -F -t -c "pwrite 0 512" $BINDFILE | _filter_xfs_io +$XFS_IO_PROG -c "pwrite 0 512" $BINDFILE | _filter_xfs_io +$XFS_IO_PROG -f -c "pwrite 0 512" $BINDFILE | _filter_xfs_io +$XFS_IO_PROG -t -c "pwrite 0 512" $BINDFILE | _filter_xfs_io # success, all done status=0 diff --git a/tests/shared/218 b/tests/shared/218 index c8b3f7d..f21b8b2 100755 --- a/tests/shared/218 +++ b/tests/shared/218 @@ -65,7 +65,7 @@ touch $fragfile _defrag $fragfile echo "Sparse file (no blocks):" | tee -a $seqres.full -xfs_io -F -f -c "truncate 1m" $fragfile +$XFS_IO_PROG -f -c "truncate 1m" $fragfile _defrag $fragfile echo "Contiguous file:" | tee -a $seqres.full diff --git a/tests/shared/243 b/tests/shared/243 index 05edc1e..e0f2db2 100755 --- a/tests/shared/243 +++ b/tests/shared/243 @@ -130,7 +130,7 @@ rm -f ${TEST_DIR}/test_? # Begin test cases. echo "Test 1: Fallocate 40960 bytes and write 4096 bytes (buffered io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f \ +${XFS_IO_PROG} -f \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 4096' \ ${TEST_DIR}/test_1 | _filter_xfs_io_unique @@ -138,7 +138,7 @@ _check_ext4_eof_flag test_1 ${BIT_SET} echo "Test 2: Fallocate 40960 bytes and write 4096 bytes (direct io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f -d \ +${XFS_IO_PROG} -f -d \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 4096' \ ${TEST_DIR}/test_2 | _filter_xfs_io_unique @@ -146,7 +146,7 @@ _check_ext4_eof_flag test_2 ${BIT_SET} echo "Test 3: Fallocate 40960 bytes and write 40960 bytes (buffered io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f \ +${XFS_IO_PROG} -f \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 40960' \ ${TEST_DIR}/test_3 | _filter_xfs_io_unique @@ -154,7 +154,7 @@ _check_ext4_eof_flag test_3 ${BIT_NOT_SET} echo "Test 4: Fallocate 40960 bytes and write 40960 bytes (direct io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f -d \ +${XFS_IO_PROG} -f -d \ -c 'falloc -k 0 40960' \ -c 'pwrite 0 40960' \ ${TEST_DIR}/test_4 | _filter_xfs_io_unique @@ -162,7 +162,7 @@ _check_ext4_eof_flag test_4 ${BIT_NOT_SET} echo "Test 5: Fallocate 128k, seek 256k and write 4k block (buffered io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f \ +${XFS_IO_PROG} -f \ -c 'falloc -k 0 128k' \ -c 'pwrite 256k 4k' \ ${TEST_DIR}/test_5 | _filter_xfs_io_unique @@ -170,7 +170,7 @@ _check_ext4_eof_flag test_5 ${BIT_NOT_SET} echo "Test 6: Fallocate 128k, seek to 256k and write a 4k block (direct io)." \ >> $seqres.full -${XFS_IO_PROG} -F -f -d \ +${XFS_IO_PROG} -f -d \ -c 'falloc -k 0 128k' \ -c 'pwrite 256k 4k' \ ${TEST_DIR}/test_6 | _filter_xfs_io_unique diff --git a/tests/shared/298 b/tests/shared/298 old mode 100644 new mode 100755 diff --git a/tests/xfs/252 b/tests/xfs/252 index 7015f87..00be41a 100755 --- a/tests/xfs/252 +++ b/tests/xfs/252 @@ -52,15 +52,15 @@ _require_xfs_io_fiemap testfile=$TEST_DIR/252.$$ # Standard punch hole tests -_test_generic_punch falloc fpunch fpunch fiemap _filter_fiemap $testfile -F +_test_generic_punch falloc fpunch fpunch fiemap _filter_fiemap $testfile # Delayed allocation punch hole tests -_test_generic_punch -d falloc fpunch fpunch fiemap _filter_fiemap $testfile -F +_test_generic_punch -d falloc fpunch fpunch fiemap _filter_fiemap $testfile # Multi hole punch tests -_test_generic_punch -k falloc fpunch fpunch fiemap _filter_fiemap $testfile -F +_test_generic_punch -k falloc fpunch fpunch fiemap _filter_fiemap $testfile # Delayed allocation multi punch hole tests -_test_generic_punch -d -k falloc fpunch fpunch fiemap _filter_fiemap $testfile -F +_test_generic_punch -d -k falloc fpunch fpunch fiemap _filter_fiemap $testfile status=0 ; exit From david@fromorbit.com Tue May 7 21:41:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 236C529E0E for ; Tue, 7 May 2013 21:41:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0844A304051 for ; Tue, 7 May 2013 19:41:30 -0700 (PDT) X-ASG-Debug-ID: 1367980889-04cbb05fe5e07c0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id sgSOtqkKBKvpWuXf for ; Tue, 07 May 2013 19:41:29 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AigQAAm5iVF5LNxE/2dsb2JhbABQgwe6LIUWBAGBBhd0gh8BAQU6HCMQCAMYCSUPBSUDIROIC8FCFo11gR0Hg1UDlymKEockgyAq Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 12:11:27 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZuJp-0000S3-21; Wed, 08 May 2013 12:41:25 +1000 Date: Wed, 8 May 2013 12:41:25 +1000 From: Dave Chinner To: Eric Sandeen Cc: Eric Sandeen , Jan Kara , xfs-oss Subject: Re: [PATCH V2] xfstests: automatically add -F to xfs_io on non-xfs Message-ID: <20130508024124.GI24635@dastard> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: automatically add -F to xfs_io on non-xfs References: <51850BED.6050109@redhat.com> <5189B9DA.7010807@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5189B9DA.7010807@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367980889 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130318 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 07, 2013 at 09:35:06PM -0500, Eric Sandeen wrote: > The -F flag to xfs_io originally enabled it to operate on non-xfs > filesystems. This restriction was removed upstream in favor of > gracefully failing on the handful of operations that actually > required xfs, and the option was deprecated. > > However, xfstests is still used on distros with older xfsprogs, and > so "xfs_io -F" was necessary throughout xfstests. > > Simplify this by appending -F to XFS_IO_PROG when it's needed - > i.e. if we're using old xfsprogs on a non-xfs filesystem. > > This will eliminate errors when new tests leave out the -F, and > if and when -F is finally removed, there will be one central > location in xfstests to update. > > Signed-off-by: Eric Sandeen > --- > > V2: test for necessity of -F in all cases, and convert > a bunch more direct callers of xfs_io to $XFS_IO_PROG Yup, that fixes the one concern I had with the first patch. Loks good. Acked-by: Dave Chinner Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 7 22:10:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8A19E29E0E for ; Tue, 7 May 2013 22:10:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB3E4AC008 for ; Tue, 7 May 2013 20:10:32 -0700 (PDT) X-ASG-Debug-ID: 1367982618-04cb6c53a4def50001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id IMbFfa4AOnvB9NIP for ; Tue, 07 May 2013 20:10:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApsEAM2/iVF5LNxE/2dsb2JhbADEOg Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 12:40:11 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UZulf-0000X4-7f for xfs@oss.sgi.com; Wed, 08 May 2013 13:10:11 +1000 Date: Wed, 8 May 2013 13:10:11 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [TARBALL] xfsprogs: add CRC infrastructure Message-ID: <20130508031011.GJ24635@dastard> X-ASG-Orig-Subj: [TARBALL] xfsprogs: add CRC infrastructure MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="NzB8fVQJ5HfG6fxh" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367982618 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130320 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi folks, Attached is a tarball that adds the CRC infrastructure to xfsprogs. It is basically a port of the kernel changes, and sits on top of the V2 tarball for the kernel code sync posted here: http://oss.sgi.com/pipermail/xfs/2013-May/025941.html This tarball contains the following commits: libxfs: add crc format changes to generic btrees xfsprogs: add crc format chagnes to ag headers libxfs: change quota buffer formats libxfs: add version 3 inode support libxfs: add support for crc headers on remote symlinks xfs: add CRC checks to block format directory blocks xfs: add CRC checking to dir2 free blocks xfs: add CRC checking to dir2 data blocks xfs: add CRC checking to dir2 leaf blocks xfs: shortform directory offsets change for dir3 format xfs: add CRCs to dir2/da node blocks xfs: add CRCs to attr leaf blocks xfs: split remote attribute code out xfs: add CRC protection to remote attributes xfs: add buffer types to directory and attribute buffers xfs: buffer type overruns blf_flags field xfs: add CRC checks to the superblock xfs: implement extended feature masks xfsprogs: Add verifiers to libxfs buffer interfaces. xfsprogs: Support new AGFL format mkfs: fix realtime device initialisation [ I just noticed I need to update all the commit prefixes on the patch titles (from "xfs:" to "libxfs:"), but that's a minor issue right now. ] This series builds a fully working xfsprogs package, but does not support CRC enabled filesystems at all. It runs through xfstests without any new regressions for standard configurations (i.e. no rt device, internal log), but unlike previous patch sets will not immediately SEGV if you use external log devices or rt devices. I don't think there are any new regressions even with external devices, but I have not run enough iterations to say for sure. Most of these patches are simply ports from the kernel patches to match the libxfs structure, so there aren't any real surprises there. There are some small changes in various parts outside libxfs to ensure everything compiles as each patch is applied, but no attempt has been made to ensure that each patch results in a fully working xfsprogs package. Instead, the last 3 patches in the series hook up all the new bits and fix issues that make stuff break. The verifier hookup can't easily be done in any of the other patches simply because it requires lots of libxfs specific infrastructure changes. I may not have found all the places where verifiers can be added, but that's not a major concern until CRCs are enabled (i.e. the next patchset). The "xfsprogs: Support new AGFL format" patch can probably be folded into the "xfsprogs: add crc format chagnes to ag headers" patch which introduces the bugs being fixed, but I left it separate for testing. Similarly, the rt dev fixes probably belong in the kernel sync patchset, but I only came across that when testing rt devices a couple of days ago and just dumping it here means I don't need to post a new kernel sync tarball right now. ;) If people want me to, I can post an aggregate tarball of both sets of patches. This patches up to the point seem pretty well stabilised, so I don't see there being many changes up to them after this point. That, of course, will change when I start finding CRC format related bugs, but I'd prefer to keep those fixes separate so the userspace code has the same series of changes committed for the shared kernel/libxfs code. Hence I expect there will be quite a few patches in the next series (the "add CRC functionality" series) that fix bugs in the code introduced in this patch series.... Comments, thoughts, flames, bug reports and pictures of puppies all welcome. Cheers, Dave. -- Dave Chinner david@fromorbit.com --NzB8fVQJ5HfG6fxh Content-Type: application/octet-stream Content-Disposition: attachment; filename="xfsprogs-crc-sync-patchset.tar.gz" Content-Transfer-Encoding: base64 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 --NzB8fVQJ5HfG6fxh-- From ru@hksosphone.com Tue May 7 23:40:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_IMAGE_RATIO_02,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C87A129E0E for ; Tue, 7 May 2013 23:40:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A3DC88F8037 for ; Tue, 7 May 2013 21:40:47 -0700 (PDT) X-ASG-Debug-ID: 1367988037-04cbb05fe2e8400001-NocioJ Received: from mail.mail183.cn4e.com (mail.mail183.cn4e.com [218.85.138.183]) by cuda.sgi.com with ESMTP id vOY2Q3BxB7JeG9uk for ; Tue, 07 May 2013 21:40:40 -0700 (PDT) X-Barracuda-Envelope-From: ru@hksosphone.com X-Barracuda-Apparent-Source-IP: 218.85.138.183 Received: from rupc (unknown [119.137.60.213]) by mail.mail183.cn4e.com (Postfix) with ESMTPA id A443F1220090 for ; Wed, 8 May 2013 12:40:36 +0800 (CST) From: "Ivy" To: xfs@oss.sgi.com Subject: [*] R: New Business Offer Date: Wed, 8 May 2013 12:37:23 +0800 X-ASG-Orig-Subj: [*] R: New Business Offer Message-Id: MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_13050716580950014458331_001" X-Priority: 3 X-Mailer: DreamMail 4.6.9.2 Disposition-Notification-To: ru@hksosphone.com X-Barracuda-Connect: mail.mail183.cn4e.com[218.85.138.183] X-Barracuda-Start-Time: 1367988039 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.16 X-Barracuda-Spam-Status: No, SCORE=1.16 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_FONT_FACE_BAD, HTML_IMAGE_RATIO_02, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130326 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.55 HTML_IMAGE_RATIO_02 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word ------=_NextPart_13050716580950014458331_001 Content-Type: multipart/alternative; boundary="----=_NextPart_13050716580950014458331_002" ------=_NextPart_13050716580950014458331_002 Content-Type: text/plain; charset="GB2312" Content-Transfer-Encoding: base64 RGVhciBNYW5hZ2VyLA0KIA0KIA0KSG9wZSBldmVyeXRoaW5nIHdlbGwhIFRoaXMgaXMgSXZ5IGZy b20gSG9uZ0tvbmcgS29vbiBUZWNobm9sb2d5IEx0ZC4hIA0KIA0KIA0KIA0KV2UgaGF2ZSBzb21l IG5ldyBtb2RlbHMgZm9yIHNhbGUuIFBsZWFzZSBzZWUgdGhlIGF0dGFjaGVkIHBob3Rvcy4NCiAN CiANCk1vcmUgaW5mb3JtYXRpb25zLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUhDQog DQoNCg0KICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgUkYtMTMgKEFjb3VzdGljIEhvb2QpICAg CSAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAg ICAgIA0KDQogICAgICAgIFJGLTE0IChBY291c3RpYyBIb29kKSAgCQ0KICAgICAgICAgICAgDQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgDQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgS05a RC0wMyBMQ0QgICAgICAgIAkgICAgICAgICAgDQoNCiAgICAgIA0KDQogICAgICAgDQoNCiAgICAg ICANCg0KICAgIEtOWkQtMTQgKFBvaW50IFRvIFBvaW50IEludGVyY29tKSAgCQ0KICAgICAgICAg ICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICANCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0K DQogICAgICAgICAgICAgICBQTDMwMCAoVk9JUCBBQyBQaG9uZSkgICAgICAgICAgIAkgICAgICAg ICAgDQoNCiAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgDQoNCiAgICAgICAg ICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgIEtOWkQtMDdD ICAgICAgICgyNCBrZXlzKSAgCQ0KDQogDQogDQoNCiANCiANCkJlc3QgUmVnYXJkcywNCg0KDQoN Cg0KIA0KDQoNCiAgICAgICAgICAgICAJICAgICAgCSAgICAgICAgICANCkl2eSBMaXUgICAgICAg ICAgICAgICAgICAgICAgICAgCQ0KICAgICAgICAgICAgDQoNClNhbGVzIERlcGFydG1lbnQgICAg ICAgDQpIb25nIEtvbmcgS29vbiBUZWNobm9sb2d5IEx0ZC4JDQogICAgICAgICAgICANClRlbDog ICAwMDg2IDc1NSAgICAgICAyNzQ0ODc1MyBleHQgODAwNSAgICAgIA0KRmF4OiAgMDA4NiA3NTUg ICAgICAgMjk3OTAyNzggICAgICAgIA0KR1NNOiAwMDg2MTU4MTQ0Mjk2NDIgICAgICAgICAgIFNr eXBlOiBpdnkubHl5OSAgICAgIA0KRTogIGNoQGhrc29zcGhvbmUuY29tICAgICBtcmt0MjZAa29v bnRlY2guY29tICAgICAgDQogICAgICANClc6IHd3dy5rb29udGVjaC5jb20gICAgICANCiAgICAg ICAgICAgd3d3Lmhrc29zcGhvbmUuY29tICAgICAgDQogICAgICAgICAgIHd3dy5rb29udGVjaC5l bi5hbGliYWJhLmNvbSAgICAgIA0KICAgICAgICAgICB3d3cuZGlyZWN0aW5kdXN0cnkuY29tL3Rh Yi9rb29uLmh0bS8JDQoNCiAgDQogICAgS29vbiBrZWVwcyBwcm92aWRpbmcgZ29vZCBxdWFsaXR5 IGFuZCBzZXJ2aWNlIHRvIHlvdSAhICAgOiApDQo= ------=_NextPart_13050716580950014458331_002 Content-Type: text/html; charset="GB2312" Content-Transfer-Encoding: base64 PEhUTUwgeG1sbnM6byA9IA0KInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmlj ZSI+PEhFQUQ+PFRJVExFPk1haWw8L1RJVExFPg0KPE1FVEEgbmFtZT1HRU5FUkFUT1IgDQpjb250 ZW50PSJLc0RIVE1MRURMaWIub2N4LCBGcmVlV2FyZSBIVE1MIEVkaXRvciAxLjE2NC4yLCA/S3Vy dCBTZW5mZXIiPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUdCMjMxMiIgaHR0 cC1lcXVpdj1Db250ZW50LVR5cGU+PC9IRUFEPg0KPEJPRFkgc3R5bGU9IkZPTlQtRkFNSUxZOiDQ wsvOzOU7IEZPTlQtU0laRTogOXB0IiBsZWZ0TWFyZ2luPTUgdG9wTWFyZ2luPTUgI2ZmZmZmZj4N CjxESVY+DQo8RElWPg0KPERJVj48Rk9OVCBzdHlsZT0iRk9OVC1GQU1JTFk6IMvOzOU7IEZPTlQt U0laRTogMTFwdCIgc2l6ZT0xIGZhY2U9IiI+RGVhciANCk1hbmFnZXIsPC9GT05UPjwvRElWPg0K PERJVj48Rk9OVCBzdHlsZT0iRk9OVC1GQU1JTFk6IMvOzOU7IEZPTlQtU0laRTogMTFwdCIgc2l6 ZT0xIA0KZmFjZT0iIj48L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIGZhY2U9y87M5T48 L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIHN0eWxlPSJGT05ULUZBTUlMWTogy87M5Tsg Rk9OVC1TSVpFOiAxMXB0IiBzaXplPTEgZmFjZT0iIj5Ib3BlIA0KZXZlcnl0aGluZyB3ZWxsISA8 L0ZPTlQ+PEZPTlQgc3R5bGU9IkZPTlQtRkFNSUxZOiDLzszlOyBGT05ULVNJWkU6IDExcHQiIHNp emU9MSANCmZhY2U9IiI+VGhpcyBpcyBJdnkgZnJvbSBIb25nS29uZyBLb29uIFRlY2hub2xvZ3kg THRkLiEgPC9GT05UPjwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+ DQo8RElWPjxGT05UIHN0eWxlPSJGT05ULUZBTUlMWTogy87M5TsgRk9OVC1TSVpFOiAxMXB0IiBz aXplPTEgDQpmYWNlPSIiPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgc3R5bGU9IkZP TlQtRkFNSUxZOiDLzszlOyBGT05ULVNJWkU6IDExcHQiIHNpemU9MSBmYWNlPSIiPldlIGhhdmUg c29tZSANCm5ldyBtb2RlbHMgZm9yIHNhbGUuIFBsZWFzZSBzZWUgdGhlIGF0dGFjaGVkIHBob3Rv cy48L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIHN0eWxlPSJGT05ULUZBTUlMWTogy87M5TsgRk9O VC1TSVpFOiAxMXB0IiBzaXplPTEgDQpmYWNlPSIiPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+ PEZPTlQgZmFjZT3LzszlPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgc3R5bGU9IkZP TlQtRkFNSUxZOiDLzszlOyBGT05ULVNJWkU6IDExcHQiIHNpemU9MSBmYWNlPSIiPk1vcmUgDQpp bmZvcm1hdGlvbnMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCBtZSE8L0ZPTlQ+PC9ESVY+ DQo8RElWPjxGT05UIHNpemU9MyBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPjwvRk9OVD4mbmJzcDs8 L0RJVj48U1BBTiANCmlkPV9Gb3hGUk9NTkFNRT48L0RJVj4NCjxESVY+PFNQQU4gc3R5bGU9IkZP TlQtRkFNSUxZOiDLzszlOyBDT0xPUjogIzAwMDAwMDsgRk9OVC1TSVpFOiAxMC41cHQiPg0KPERJ Vj4NCjxUQUJMRSANCnN0eWxlPSJCT1JERVItQk9UVE9NOiBtZWRpdW0gbm9uZTsgQk9SREVSLUxF RlQ6IG1lZGl1bSBub25lOyBXSURUSDogNDU5cHQ7IEJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2U7 IEJPUkRFUi1UT1A6IG1lZGl1bSBub25lOyBCT1JERVItUklHSFQ6IG1lZGl1bSBub25lOyBtc28t Ym9yZGVyLWFsdDogc29saWQgYmxhY2sgLjVwdDsgbXNvLWJvcmRlci10aGVtZWNvbG9yOiB0ZXh0 MTsgbXNvLXlmdGktdGJsbG9vazogMTE4NDsgbXNvLXBhZGRpbmctYWx0OiAwY20gNS40cHQgMGNt IDUuNHB0IiANCmNsYXNzPU1zb1RhYmxlR3JpZCBib3JkZXI9MSBjZWxsU3BhY2luZz0wIGNlbGxQ YWRkaW5nPTAgd2lkdGg9NjEyPg0KICA8VEJPRFk+DQogIDxUUiBzdHlsZT0iSEVJR0hUOiAyMTcu N3B0OyBtc28teWZ0aS1pcm93OiAwOyBtc28teWZ0aS1maXJzdHJvdzogeWVzIj4NCiAgICA8VEQg DQogICAgc3R5bGU9IkJPUkRFUi1CT1RUT006IGJsYWNrIDFwdCBzb2xpZDsgQk9SREVSLUxFRlQ6 IGJsYWNrIDFwdCBzb2xpZDsgUEFERElORy1CT1RUT006IDBjbTsgQkFDS0dST1VORC1DT0xPUjog dHJhbnNwYXJlbnQ7IFBBRERJTkctTEVGVDogNS40cHQ7IFdJRFRIOiAyMzIuMnB0OyBQQURESU5H LVJJR0hUOiA1LjRwdDsgSEVJR0hUOiAyMTcuN3B0OyBCT1JERVItVE9QOiBibGFjayAxcHQgc29s aWQ7IEJPUkRFUi1SSUdIVDogYmxhY2sgMXB0IHNvbGlkOyBQQURESU5HLVRPUDogMGNtOyBtc28t Ym9yZGVyLWFsdDogc29saWQgYmxhY2sgLjVwdDsgbXNvLWJvcmRlci10aGVtZWNvbG9yOiB0ZXh0 MSIgDQogICAgdkFsaWduPXRvcCB3aWR0aD0zMTA+DQogICAgICA8UCBzdHlsZT0iTElORS1IRUlH SFQ6IDExcHQ7IE1BUkdJTjogMGNtIDBjbSAwcHQiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCiAg ICAgIGxhbmc9RU4tVVM+PEZPTlQgZmFjZT1UYWhvbWE+PFNQQU4gDQogICAgICBzdHlsZT0ibXNv LXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCiAgICAgIDwvU1BBTj48bzpwPjwvbzpwPjwvRk9OVD48 L1NQQU4+PC9QPg0KICAgICAgPFAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBNQVJHSU46IDBj bSAwY20gMHB0IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQogICAgICBsYW5nPUVOLVVTPjxGT05U IGZhY2U9VGFob21hPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1NQQU4+PC9GT05UPjwvU1BB Tj48U1BBTiANCiAgICAgIGxhbmc9RU4tVVM+PEEgDQogICAgICBocmVmPSJodHRwOi8vd3d3Lmtv b250ZWNoLmNvbS9lbi9TaG93UHJvZHVjdC5hc3A/SUQ9MTU5JmFtcDtDbGFzc0lEPTg1Ij48U1BB TiANCiAgICAgIHN0eWxlPSJDT0xPUjogd2luZG93dGV4dDsgVEVYVC1ERUNPUkFUSU9OOiBub25l OyBtc28tbm8tcHJvb2Y6IHllczsgdGV4dC11bmRlcmxpbmU6IG5vbmUiPjxTUEFOIA0KICAgICAg c3R5bGU9Im1zby1pZ25vcmU6IHZnbGF5b3V0Ij48Rk9OVCBmYWNlPVRhaG9tYT4mbmJzcDs8SU1H IGJvcmRlcj0wIA0KICAgICAgc3JjPSJjaWQ6QXR0cl81ODA5NDg0NDAxMiIgd2lkdGg9Mjg0IGhl aWdodD0xOTMgDQogICAgICB2OnNoYXBlcz0izbzGrF94MDAyMF8xIj48L0ZPTlQ+PC9TUEFOPjwv U1BBTj48L0E+PC9TUEFOPjwvUD4NCiAgICAgIDxQIHN0eWxlPSJMSU5FLUhFSUdIVDogMTFwdDsg TUFSR0lOOiAwY20gMGNtIDBwdCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0KICAgICAgbGFuZz1F Ti1VUz48Rk9OVCBmYWNlPVRhaG9tYT48U1BBTiANCiAgICAgIHN0eWxlPSJtc28tc3BhY2VydW46 IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KICAg ICAgPC9TUEFOPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDs8 L1NQQU4+PG86cD48L286cD48L0ZPTlQ+PC9TUEFOPjwvUD4NCiAgICAgIDxQIHN0eWxlPSJMSU5F LUhFSUdIVDogMTFwdDsgTUFSR0lOOiAwY20gMGNtIDBwdCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFO IA0KICAgICAgbGFuZz1FTi1VUz48Rk9OVCBmYWNlPVRhaG9tYT48U1BBTiANCiAgICAgIHN0eWxl PSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9TUEFOPjxTUEFOIA0K ICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDs8L1NQQU4+PC9GT05UPjwvU1BB Tj48U1BBTiANCiAgICAgIHN0eWxlPSJGT05ULUZBTUlMWTogJ0FyaWFsJywnc2Fucy1zZXJpZici IGxhbmc9RU4tVVM+UkYtMTMgKDxTUEFOIA0KICAgICAgc3R5bGU9IkNPTE9SOiByZWQiPkFjb3Vz dGljIEhvb2Q8L1NQQU4+KTxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4m bmJzcDsmbmJzcDsmbmJzcDs8L1NQQU4+PC9TUEFOPjwvUD48L1REPg0KICAgIDxURCANCiAgICBz dHlsZT0iQk9SREVSLUJPVFRPTTogYmxhY2sgMXB0IHNvbGlkOyBCT1JERVItTEVGVDogI2VjZTlk ODsgUEFERElORy1CT1RUT006IDBjbTsgQkFDS0dST1VORC1DT0xPUjogdHJhbnNwYXJlbnQ7IFBB RERJTkctTEVGVDogNS40cHQ7IFdJRFRIOiA4Y207IFBBRERJTkctUklHSFQ6IDUuNHB0OyBIRUlH SFQ6IDIxNy43cHQ7IEJPUkRFUi1UT1A6IGJsYWNrIDFwdCBzb2xpZDsgQk9SREVSLVJJR0hUOiBi bGFjayAxcHQgc29saWQ7IFBBRERJTkctVE9QOiAwY207IG1zby1ib3JkZXItYWx0OiBzb2xpZCBi bGFjayAuNXB0OyBtc28tYm9yZGVyLXRoZW1lY29sb3I6IHRleHQxOyBtc28tYm9yZGVyLWxlZnQt YWx0OiBzb2xpZCBibGFjayAuNXB0OyBtc28tYm9yZGVyLWxlZnQtdGhlbWVjb2xvcjogdGV4dDEi IA0KICAgIHZBbGlnbj10b3Agd2lkdGg9MzAyPg0KICAgICAgPFAgc3R5bGU9IkxJTkUtSEVJR0hU OiAxMXB0OyBNQVJHSU46IDBjbSAwY20gMHB0IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQogICAg ICBsYW5nPUVOLVVTPjxGT05UIGZhY2U9VGFob21hPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1z cGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQogICAg ICA8L1NQQU4+PFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvU1BB Tj48bzpwPjwvbzpwPjwvRk9OVD48L1NQQU4+PC9QPg0KICAgICAgPFAgDQogICAgICBzdHlsZT0i TElORS1IRUlHSFQ6IDExcHQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IG1zby1jaGFyLWluZGVudC1j b3VudDogMi4wIiANCiAgICAgIGNsYXNzPU1zb05vcm1hbD48Rk9OVCBmYWNlPVRhaG9tYT48U1BB TiBzdHlsZT0ibXNvLW5vLXByb29mOiB5ZXMiIA0KICAgICAgbGFuZz1FTi1VUz4mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDs8SU1HIGJvcmRlcj0wIA0KICAgICAgc3JjPSJjaWQ6QXR0cl81 ODA5NDg0Njg3NiIgd2lkdGg9MjMyIGhlaWdodD0yMjQgDQogICAgICB2OnNoYXBlcz0izbzGrF94 MDAyMF83Ij4mbmJzcDs8L1NQQU4+PFNQQU4gbGFuZz1FTi1VUz48U1BBTiANCiAgICAgIHN0eWxl PSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7PC9TUEFOPjwvU1BBTj48L0ZPTlQ+PC9QPg0KICAg ICAgPFAgDQogICAgICBzdHlsZT0iTElORS1IRUlHSFQ6IDExcHQ7IFRFWFQtSU5ERU5UOiAyMXB0 OyBNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQtY291bnQ6IDIuMCIgDQogICAg ICBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gbGFuZz1FTi1VUz48U1BBTiBzdHlsZT0ibXNvLXNwYWNl cnVuOiB5ZXMiPjxGT05UIA0KICAgICAgZmFjZT1UYWhvbWE+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwv Rk9OVD48L1NQQU4+PC9TUEFOPjxTUEFOIA0KICAgICAgc3R5bGU9IkZPTlQtRkFNSUxZOiAnQXJp YWwnLCdzYW5zLXNlcmlmJzsgRk9OVC1TSVpFOiAxMnB0IiANCiAgICAgIGxhbmc9RU4tVVM+PFNQ QU4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDs8L1NQQU4+PFNQQU4gDQog ICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOzwvU1BBTj5SRi0xNCAo PFNQQU4gDQogICAgICBzdHlsZT0iQ09MT1I6IHJlZCI+QWNvdXN0aWMgSG9vZDwvU1BBTj48U1BB TiANCiAgICAgIHN0eWxlPSJDT0xPUjogYmxhY2s7IG1zby10aGVtZWNvbG9yOiB0ZXh0MSI+KTxT UEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDs8L1NQQU4+ PC9TUEFOPjwvU1BBTj48L1A+PC9URD48L1RSPg0KICA8VFIgc3R5bGU9IkhFSUdIVDogMjEzLjhw dDsgbXNvLXlmdGktaXJvdzogMSI+DQogICAgPFREIA0KICAgIHN0eWxlPSJCT1JERVItQk9UVE9N OiBibGFjayAxcHQgc29saWQ7IEJPUkRFUi1MRUZUOiBibGFjayAxcHQgc29saWQ7IFBBRERJTkct Qk9UVE9NOiAwY207IEJBQ0tHUk9VTkQtQ09MT1I6IHRyYW5zcGFyZW50OyBQQURESU5HLUxFRlQ6 IDUuNHB0OyBXSURUSDogMjMyLjJwdDsgUEFERElORy1SSUdIVDogNS40cHQ7IEhFSUdIVDogMjEz LjhwdDsgQk9SREVSLVRPUDogI2VjZTlkODsgQk9SREVSLVJJR0hUOiBibGFjayAxcHQgc29saWQ7 IFBBRERJTkctVE9QOiAwY207IG1zby1ib3JkZXItYWx0OiBzb2xpZCBibGFjayAuNXB0OyBtc28t Ym9yZGVyLXRoZW1lY29sb3I6IHRleHQxOyBtc28tYm9yZGVyLXRvcC1hbHQ6IHNvbGlkIGJsYWNr IC41cHQ7IG1zby1ib3JkZXItdG9wLXRoZW1lY29sb3I6IHRleHQxIiANCiAgICB2QWxpZ249dG9w IHdpZHRoPTMxMD4NCiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBU RVhULUlOREVOVDogNS4yNXB0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQt Y291bnQ6IC41IiANCiAgICAgIGNsYXNzPU1zb05vcm1hbD48U1BBTiBsYW5nPUVOLVVTPjxGT05U IGZhY2U9VGFob21hPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJz cDs8L1NQQU4+PFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyANCiAgICAgIDwvU1BBTj48L0ZPTlQ+PC9TUEFOPjwvUD4NCiAgICAgIDxQIA0K ICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBURVhULUlOREVOVDogNS4yNXB0OyBNQVJH SU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQtY291bnQ6IC41IiANCiAgICAgIGNsYXNz PU1zb05vcm1hbD48U1BBTiBsYW5nPUVOLVVTPjxGT05UIGZhY2U9VGFob21hPjxTUEFOIA0KICAg ICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsmbmJzcDs8SU1HIA0KICAg ICAgc3JjPSJjaWQ6QXR0cl81ODA5NDg0NTUzMiIgd2lkdGg9MjQxIA0KICAgICAgaGVpZ2h0PTIx Mz48L1NQQU4+PC9GT05UPjwvU1BBTj48Rk9OVCBmYWNlPVRhaG9tYT48U1BBTiBsYW5nPUVOLVVT PjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDs8L1NQQU4+PG86 cD48L286cD48L1NQQU4+PC9GT05UPjwvUD4NCiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUt SEVJR0hUOiAxMXB0OyBURVhULUlOREVOVDogNS4yNXB0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBt c28tY2hhci1pbmRlbnQtY291bnQ6IC41IiANCiAgICAgIGNsYXNzPU1zb05vcm1hbD48U1BBTiBs YW5nPUVOLVVTPjxGT05UIGZhY2U9VGFob21hPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFj ZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgDQogICAgICA8L1NQQU4+PFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMi PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvU1BBTj48bzpwPjwvbzpw PjwvRk9OVD48L1NQQU4+PC9QPg0KICAgICAgPFAgDQogICAgICBzdHlsZT0iTElORS1IRUlHSFQ6 IDExcHQ7IFRFWFQtSU5ERU5UOiA1LjI1cHQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IG1zby1jaGFy LWluZGVudC1jb3VudDogLjUiIA0KICAgICAgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIGxhbmc9RU4t VVM+PEZPTlQgZmFjZT1UYWhvbWE+PFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5 ZXMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvU1BBTj48L0ZPTlQ+PC9TUEFO PjxTUEFOIA0KICAgICAgc3R5bGU9IkZPTlQtRkFNSUxZOiAnQXJpYWwnLCdzYW5zLXNlcmlmJyIg bGFuZz1FTi1VUz5LTlpELTAzIDxTUEFOIA0KICAgICAgc3R5bGU9IkNPTE9SOiByZWQiPkxDRDxT UEFOIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7IDwvU1BBTj48U1BBTiANCiAgICAg IHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7PC9TUEFOPjwvU1BBTj48bzpwPjwvbzpwPjwvU1BBTj48L1A+PC9URD4NCiAgICA8VEQg DQogICAgc3R5bGU9IkJPUkRFUi1CT1RUT006IGJsYWNrIDFwdCBzb2xpZDsgQk9SREVSLUxFRlQ6 ICNlY2U5ZDg7IFBBRERJTkctQk9UVE9NOiAwY207IEJBQ0tHUk9VTkQtQ09MT1I6IHRyYW5zcGFy ZW50OyBQQURESU5HLUxFRlQ6IDUuNHB0OyBXSURUSDogOGNtOyBQQURESU5HLVJJR0hUOiA1LjRw dDsgSEVJR0hUOiAyMTMuOHB0OyBCT1JERVItVE9QOiAjZWNlOWQ4OyBCT1JERVItUklHSFQ6IGJs YWNrIDFwdCBzb2xpZDsgUEFERElORy1UT1A6IDBjbTsgbXNvLWJvcmRlci1hbHQ6IHNvbGlkIGJs YWNrIC41cHQ7IG1zby1ib3JkZXItdGhlbWVjb2xvcjogdGV4dDE7IG1zby1ib3JkZXItbGVmdC1h bHQ6IHNvbGlkIGJsYWNrIC41cHQ7IG1zby1ib3JkZXItbGVmdC10aGVtZWNvbG9yOiB0ZXh0MTsg bXNvLWJvcmRlci10b3AtYWx0OiBzb2xpZCBibGFjayAuNXB0OyBtc28tYm9yZGVyLXRvcC10aGVt ZWNvbG9yOiB0ZXh0MTsgbXNvLWJvcmRlci1ib3R0b20tdGhlbWVjb2xvcjogdGV4dDE7IG1zby1i b3JkZXItcmlnaHQtdGhlbWVjb2xvcjogdGV4dDEiIA0KICAgIHZBbGlnbj10b3Agd2lkdGg9MzAy Pg0KICAgICAgPFAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBNQVJHSU46IDBjbSAwY20gMHB0 IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQogICAgICBsYW5nPUVOLVVTPjxGT05UIGZhY2U9VGFo b21hPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj48L1NQQU4+PC9GT05U PjwvU1BBTj48L1A+DQogICAgICA8UCANCiAgICAgIHN0eWxlPSJMSU5FLUhFSUdIVDogMTFwdDsg VEVYVC1JTkRFTlQ6IDUuMjVwdDsgTUFSR0lOOiAwY20gMGNtIDBwdDsgbXNvLWNoYXItaW5kZW50 LWNvdW50OiAuNSIgDQogICAgICBjbGFzcz1Nc29Ob3JtYWw+PEZPTlQgZmFjZT1UYWhvbWE+PFNQ QU4gDQogICAgICBzdHlsZT0iQ09MT1I6IGJsYWNrOyBtc28tbm8tcHJvb2Y6IHllczsgbXNvLWJp ZGktZm9udC1zaXplOiAxMC41cHQiIA0KICAgICAgbGFuZz1FTi1VUz48L1NQQU4+PC9GT05UPiZu YnNwOzwvUD4NCiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBURVhU LUlOREVOVDogNS4yNXB0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQtY291 bnQ6IC41IiANCiAgICAgIGNsYXNzPU1zb05vcm1hbD48Rk9OVCBmYWNlPVRhaG9tYT48U1BBTiAN CiAgICAgIHN0eWxlPSJDT0xPUjogYmxhY2s7IG1zby1uby1wcm9vZjogeWVzOyBtc28tYmlkaS1m b250LXNpemU6IDEwLjVwdCIgDQogICAgICBsYW5nPUVOLVVTPjxJTUcgYm9yZGVyPTAgc3JjPSJj aWQ6QXR0cl81ODA5NTAwMjIxNiIgd2lkdGg9MjY5IA0KICAgICAgaGVpZ2h0PTIyMyB2OnNoYXBl cz0izbzGrF94MDAyMF8xMyI+PC9TUEFOPjxTUEFOIGxhbmc9RU4tVVM+PFNQQU4gDQogICAgICBz dHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOzwvU1BBTj48L1NQQU4+PC9GT05UPjwvUD4N CiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBURVhULUlOREVOVDog NS4yNXB0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQtY291bnQ6IC41IiAN CiAgICAgIGNsYXNzPU1zb05vcm1hbD48U1BBTiBsYW5nPUVOLVVTPjxGT05UIGZhY2U9VGFob21h PjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDs8L1NQQU4+PC9GT05UPjwvU1BBTj48U1BBTiANCiAgICAgIHN0eWxlPSJGT05ULUZB TUlMWTogJ0FyaWFsJywnc2Fucy1zZXJpZiciIGxhbmc9RU4tVVM+S05aRC0xNCAoPFNQQU4gDQog ICAgICBzdHlsZT0iQ09MT1I6IHJlZCI+UG9pbnQgVG8gUG9pbnQgSW50ZXJjb208L1NQQU4+KTxT UEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsgPC9TUEFOPjwvU1BB Tj48L1A+PC9URD48L1RSPg0KICA8VFIgc3R5bGU9IkhFSUdIVDogMjI2LjA1cHQ7IG1zby15ZnRp LWlyb3c6IDI7IG1zby15ZnRpLWxhc3Ryb3c6IHllcyI+DQogICAgPFREIA0KICAgIHN0eWxlPSJC T1JERVItQk9UVE9NOiBibGFjayAxcHQgc29saWQ7IEJPUkRFUi1MRUZUOiBibGFjayAxcHQgc29s aWQ7IFBBRERJTkctQk9UVE9NOiAwY207IEJBQ0tHUk9VTkQtQ09MT1I6IHRyYW5zcGFyZW50OyBQ QURESU5HLUxFRlQ6IDUuNHB0OyBXSURUSDogMjMyLjJwdDsgUEFERElORy1SSUdIVDogNS40cHQ7 IEhFSUdIVDogMjI2LjA1cHQ7IEJPUkRFUi1UT1A6ICNlY2U5ZDg7IEJPUkRFUi1SSUdIVDogYmxh Y2sgMXB0IHNvbGlkOyBQQURESU5HLVRPUDogMGNtOyBtc28tYm9yZGVyLWFsdDogc29saWQgYmxh Y2sgLjVwdDsgbXNvLWJvcmRlci10aGVtZWNvbG9yOiB0ZXh0MTsgbXNvLWJvcmRlci10b3AtYWx0 OiBzb2xpZCBibGFjayAuNXB0OyBtc28tYm9yZGVyLXRvcC10aGVtZWNvbG9yOiB0ZXh0MSIgDQog ICAgdkFsaWduPXRvcCB3aWR0aD0zMTA+DQogICAgICA8UCBzdHlsZT0iTElORS1IRUlHSFQ6IDEx cHQ7IE1BUkdJTjogMGNtIDBjbSAwcHQiIGNsYXNzPU1zb05vcm1hbD48U1BBTiANCiAgICAgIGxh bmc9RU4tVVM+PEZPTlQgZmFjZT1UYWhvbWE+PFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNl cnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyANCiAgICAgIDwvU1BBTj48U1BBTiANCiAgICAgIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+ Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7PC9TUEFOPjxvOnA+PC9vOnA+PC9GT05UPjwvU1BBTj48L1A+DQogICAgICA8UCBzdHls ZT0iTElORS1IRUlHSFQ6IDExcHQ7IE1BUkdJTjogMGNtIDBjbSAwcHQiIGNsYXNzPU1zb05vcm1h bD48U1BBTiANCiAgICAgIGxhbmc9RU4tVVM+PEZPTlQgZmFjZT1UYWhvbWE+PFNQQU4gDQogICAg ICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyANCiAgICAgIDwvU1BBTj48U1BBTiANCiAgICAgIHN0eWxlPSJtc28tc3Bh Y2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9TUEFOPjxTUEFOIA0KICAgICAgc3R5bGU9Im1z by1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1NQQU4+PG86cD48L286cD48L0ZPTlQ+ PC9TUEFOPjwvUD4NCiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBU RVhULUlOREVOVDogMTAuNXB0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQt Y291bnQ6IDEuMCIgDQogICAgICBjbGFzcz1Nc29Ob3JtYWw+PEZPTlQgZmFjZT1UYWhvbWE+PFNQ QU4gDQogICAgICBzdHlsZT0iQ09MT1I6IGJsYWNrOyBtc28tbm8tcHJvb2Y6IHllczsgbXNvLWJp ZGktZm9udC1zaXplOiAxMC41cHQiIA0KICAgICAgbGFuZz1FTi1VUz4mbmJzcDs8SU1HIGJvcmRl cj0wIHNyYz0iY2lkOkF0dHJfNTgwOTUwMDAxMTAiIA0KICAgICAgd2lkdGg9MjU3IGhlaWdodD0y MTMgdjpzaGFwZXM9Is28xqxfeDAwMjBfMTYiPjwvU1BBTj48U1BBTiBsYW5nPUVOLVVTPjxTUEFO IA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsgDQo8L1NQQU4+ PG86cD48L286cD48L1NQQU4+PC9GT05UPjwvUD4NCiAgICAgIDxQIHN0eWxlPSJMSU5FLUhFSUdI VDogMTFwdDsgTUFSR0lOOiAwY20gMGNtIDBwdCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIA0KICAg ICAgbGFuZz1FTi1VUz48Rk9OVCBmYWNlPVRhaG9tYT48U1BBTiANCiAgICAgIHN0eWxlPSJtc28t c3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KICAgICAgPC9TUEFOPjxTUEFOIHN0eWxlPSJtc28tc3BhY2Vy dW46IHllcyI+Jm5ic3A7PC9TUEFOPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjog eWVzIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDs8L1NQQU4+PG86cD48L286cD48L0ZPTlQ+PC9TUEFOPjwvUD4N CiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBURVhULUlOREVOVDog MTAuNXB0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tY2hhci1pbmRlbnQtY291bnQ6IDEuMCIg DQogICAgICBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gbGFuZz1FTi1VUz48U1BBTiBzdHlsZT0ibXNv LXNwYWNlcnVuOiB5ZXMiPjxGT05UIA0KICAgICAgZmFjZT1UYWhvbWE+Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KICAgICAgPC9GT05UPjwvU1BBTj48 L1NQQU4+PFNQQU4gc3R5bGU9IkZPTlQtRkFNSUxZOiAnQXJpYWwnLCdzYW5zLXNlcmlmJyIgDQog ICAgICBsYW5nPUVOLVVTPlBMMzAwICg8U1BBTiBzdHlsZT0iQ09MT1I6IHJlZCI+Vk9JUCBBQyBQ aG9uZTwvU1BBTj4pPFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNw OyZuYnNwOyA8L1NQQU4+PFNQQU4gDQogICAgICBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvU1BBTj48bzpw PjwvbzpwPjwvU1BBTj48L1A+PC9URD4NCiAgICA8VEQgDQogICAgc3R5bGU9IkJPUkRFUi1CT1RU T006IGJsYWNrIDFwdCBzb2xpZDsgQk9SREVSLUxFRlQ6ICNlY2U5ZDg7IFBBRERJTkctQk9UVE9N OiAwY207IEJBQ0tHUk9VTkQtQ09MT1I6IHRyYW5zcGFyZW50OyBQQURESU5HLUxFRlQ6IDUuNHB0 OyBXSURUSDogOGNtOyBQQURESU5HLVJJR0hUOiA1LjRwdDsgSEVJR0hUOiAyMjYuMDVwdDsgQk9S REVSLVRPUDogI2VjZTlkODsgQk9SREVSLVJJR0hUOiBibGFjayAxcHQgc29saWQ7IFBBRERJTkct VE9QOiAwY207IG1zby1ib3JkZXItYWx0OiBzb2xpZCBibGFjayAuNXB0OyBtc28tYm9yZGVyLXRo ZW1lY29sb3I6IHRleHQxOyBtc28tYm9yZGVyLWxlZnQtYWx0OiBzb2xpZCBibGFjayAuNXB0OyBt c28tYm9yZGVyLWxlZnQtdGhlbWVjb2xvcjogdGV4dDE7IG1zby1ib3JkZXItdG9wLWFsdDogc29s aWQgYmxhY2sgLjVwdDsgbXNvLWJvcmRlci10b3AtdGhlbWVjb2xvcjogdGV4dDE7IG1zby1ib3Jk ZXItYm90dG9tLXRoZW1lY29sb3I6IHRleHQxOyBtc28tYm9yZGVyLXJpZ2h0LXRoZW1lY29sb3I6 IHRleHQxIiANCiAgICB2QWxpZ249dG9wIHdpZHRoPTMwMj4NCiAgICAgIDxQIHN0eWxlPSJMSU5F LUhFSUdIVDogMTFwdDsgTUFSR0lOOiAwY20gMGNtIDBwdCIgY2xhc3M9TXNvTm9ybWFsPjxTUEFO IA0KICAgICAgbGFuZz1FTi1VUz48Rk9OVCBmYWNlPVRhaG9tYT48U1BBTiANCiAgICAgIHN0eWxl PSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9TUEFOPjwvRk9OVD48 L1NQQU4+PC9QPg0KICAgICAgPFAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBNQVJHSU46IDBj bSAwY20gMHB0IiBjbGFzcz1Nc29Ob3JtYWw+PFNQQU4gDQogICAgICBsYW5nPUVOLVVTPjxGT05U IGZhY2U9VGFob21hPjxTUEFOIA0KICAgICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1NQQU4+PFNQQU4gDQogICAgICBzdHlsZT0ibXNv LXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvU1BBTj48L0ZPTlQ+PC9T UEFOPjwvUD4NCiAgICAgIDxQIA0KICAgICAgc3R5bGU9IkxJTkUtSEVJR0hUOiAxMXB0OyBURVhU LUlOREVOVDogMzYuNzVwdDsgTUFSR0lOOiAwY20gMGNtIDBwdDsgbXNvLWNoYXItaW5kZW50LWNv dW50OiAzLjUiIA0KICAgICAgY2xhc3M9TXNvTm9ybWFsPjxGT05UIGZhY2U9VGFob21hPjxTUEFO IA0KICAgICAgc3R5bGU9IkNPTE9SOiBibGFjazsgbXNvLW5vLXByb29mOiB5ZXM7IG1zby1iaWRp LWZvbnQtc2l6ZTogMTAuNXB0IiANCiAgICAgIGxhbmc9RU4tVVM+PElNRyBib3JkZXI9MCBzcmM9 ImNpZDpBdHRyXzU4MDk1MDA3NjM2IiB3aWR0aD0xNzkgDQogICAgICBoZWlnaHQ9MjA0IHY6c2hh cGVzPSLNvMasX3gwMDIwXzE5Ij48L1NQQU4+PFNQQU4gbGFuZz1FTi1VUz48U1BBTiANCiAgICAg IHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7PC9TUEFOPjxvOnA+PC9vOnA+PC9TUEFOPjwvRk9OVD48L1A+DQogICAgICA8UCANCiAg ICAgIHN0eWxlPSJMSU5FLUhFSUdIVDogMTFwdDsgVEVYVC1JTkRFTlQ6IDM2Ljc1cHQ7IE1BUkdJ TjogMGNtIDBjbSAwcHQ7IG1zby1jaGFyLWluZGVudC1jb3VudDogMy41IiANCiAgICAgIGNsYXNz PU1zb05vcm1hbD48U1BBTiBsYW5nPUVOLVVTPjxGT05UIGZhY2U9VGFob21hPjxTUEFOIA0KICAg ICAgc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDs8L1NQQU4+PC9GT05UPjwvU1BBTj48L1A+DQogICAgICA8UCANCiAgICAgIHN0 eWxlPSJMSU5FLUhFSUdIVDogMTFwdDsgTUFSR0lOOiAwY20gMGNtIDBwdDsgbXNvLWNoYXItaW5k ZW50LWNvdW50OiA0LjUiIA0KICAgICAgY2xhc3M9TXNvTm9ybWFsPjxTUEFOIHN0eWxlPSJGT05U LUZBTUlMWTogJ0FyaWFsJywnc2Fucy1zZXJpZiciIA0KICAgICAgbGFuZz1FTi1VUz4mbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtLTlpELTA3QyANCiAgICAgICg8U1BBTiBzdHlsZT0i Q09MT1I6IHJlZCI+MjQga2V5czwvU1BBTj4pJm5ic3A7PFNQQU4gDQogICAgICBzdHlsZT0ibXNv LXNwYWNlcnVuOiB5ZXMiPiZuYnNwOzwvU1BBTj48L1NQQU4+PC9QPjwvVEQ+PC9UUj48L1RCT0RZ PjwvVEFCTEU+PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxE SVY+PElNRyBib3JkZXI9MCBoc3BhY2U9MCBhbHQ9IiIgYWxpZ249YmFzZWxpbmUgDQpzcmM9ImNp ZDpBdHRyXzU4MDk1MDAxMTQ3IiB3aWR0aD05OTggDQpoZWlnaHQ9NjY3PjwvRElWPjwhLS1FbmRG cmFnbWVudC0tPjwvU1BBTj4NCjxESVY+PFNQQU4gDQpzdHlsZT0iRk9OVC1GQU1JTFk6IMvOzOU7 IENPTE9SOiAjMDAwMDAwOyBGT05ULVNJWkU6IDEwLjVwdCI+PC9TUEFOPiZuYnNwOzwvRElWPg0K PERJVj48U1BBTiANCnN0eWxlPSJGT05ULUZBTUlMWTogy87M5TsgQ09MT1I6ICMwMDAwMDA7IEZP TlQtU0laRTogMTAuNXB0Ij48L1NQQU4+Jm5ic3A7PC9ESVY+DQo8RElWPjxTUEFOIHN0eWxlPSJG T05ULUZBTUlMWTogy87M5TsgQ09MT1I6ICMwMDAwMDA7IEZPTlQtU0laRTogMTAuNXB0Ij48U1BB TiANCnN0eWxlPSJGT05ULVNJWkU6IDE0cHQ7IEZPTlQtV0VJR0hUOiBib2xkIj5CZXN0IA0KUmVn YXJkcyw8L1NQQU4+PC9TUEFOPjwvU1BBTj48L0RJVj48L0RJVj48L0RJVj4NCjxESVY+PEJSPjwv RElWPg0KPERJVj4NCjxESVYgYWxpZ249bGVmdD48Rk9OVCBzaXplPTIgZmFjZT1UaW1lcyBOZXcg Um9tYW4+PEZPTlQgY29sb3I9I2MwYzBjMCBzaXplPTIgDQpmYWNlPSJUaW1lcyBOZXcgUm9tYW4i PjxGT05UIHNpemU9MiBmYWNlPVZlcmRhbmE+PEZPTlQgc2l6ZT0yIGZhY2U9VmVyZGFuYT48Rk9O VCANCmNvbG9yPSNjMGMwYzA+PFNQQU4+PFNUUk9ORz4NCjxESVY+PFNQQU4gDQpzdHlsZT0iRk9O VC1GQU1JTFk6IMvOzOU7IENPTE9SOiAjMDAwMDAwOyBGT05ULVNJWkU6IDEwLjVwdCI+Jm5ic3A7 PC9ESVY+DQo8RElWPg0KPERJViANCnN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IENPTE9SOiAj MzMzMzk5OyBGT05ULVNJWkU6IDhwdDsgRk9OVC1XRUlHSFQ6IGJvbGQiPg0KPFRBQkxFIA0Kc3R5 bGU9IkZPTlQtRkFNSUxZOiBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWY7IEZPTlQtU0laRTog MTFweDsgVEVYVC1ERUNPUkFUSU9OOiBub25lICFpbXBvcnRhbnQiIA0KY2VsbFNwYWNpbmc9MCBj ZWxsUGFkZGluZz0zIHdpZHRoPWF1dG8gDQpfbWNlX3N0eWxlPSJmb250LWZhbWlseTogVmVyZGFu YSwgR2VuZXZhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDExcHg7IHRleHQtZGVjb3JhdGlvbjog bm9uZSFpbXBvcnRhbnQ7Ij4NCiAgPFRCT0RZPg0KICA8VFIgaGVpZ2h0PTMyPg0KICAgIDxURCBz dHlsZT0iQk9SREVSLVJJR0hUOiAjY2NjIDJweCBzb2xpZCIgdkFsaWduPXRvcCByb3dTcGFuPTYg d2lkdGg9NDkgDQogICAgX21jZV9zdHlsZT0iYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI2NjYzsi PjxJTUcgDQogICAgICBzdHlsZT0iV0lEVEg6IDcycHg7IEhFSUdIVDogMzdweCIgYm9yZGVyPTAg aHNwYWNlPTYgYWx0PUxvZ28gDQogICAgICBzcmM9Imh0dHA6Ly9pMDAuaS5hbGlpbWcuY29tL2lt Zy9jb21wYW55L3YyLzIxLzQxLzAyLzk3LzIxNDEwMjk3OF9sb2dvLmpwZyIgDQogICAgICB3aWR0 aD02OSBoZWlnaHQ9MzcgDQogICAgICBfbWNlX3NyYz0iaHR0cDovL2kwMC5pLmFsaWltZy5jb20v aW1nL2NvbXBhbnkvdjIvMjEvNDEvMDIvOTcvMjE0MTAyOTc4X2xvZ28uanBnIj4gDQogICAgPC9U RD4NCiAgICA8VEQgcm93U3Bhbj02IHdpZHRoPTEyPiZuYnNwOyA8L1REPg0KICAgIDxURCBzdHls ZT0iQk9SREVSLUJPVFRPTTogI2NjYyAxcHggZG90dGVkIiB3aWR0aD0zNDkgDQogICAgX21jZV9z dHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjQ0NDOyI+PFNQQU4gc3R5bGU9IkZPTlQt U0laRTogMThweCIgDQogICAgICBfbWNlX3N0eWxlPSJmb250LXNpemU6IDE4cHg7Ij4NCiAgICAg IDxESVY+PFNQQU4+PEZPTlQgY29sb3I9IzI4MzYzNCBzaXplPTEgZmFjZT0iTWljcm9zb2Z0IFNh bnMgU2VyaWYiPjxGT05UIA0KICAgICAgY29sb3I9IzAwMDA4MCBzaXplPTI+PFNQQU4+PEZPTlQg Y29sb3I9IzI4MzYzNCBmYWNlPUBCYXRhbmc+PEZPTlQgDQogICAgICBzaXplPTU+PEZPTlQgZmFj ZT1DaGlsbGVyPjxTVFJPTkc+PFNQQU4gDQogICAgICBzdHlsZT0iRk9OVC1GQU1JTFk6IFRpbWVz IE5ldyBSb21hbjsgRk9OVC1TSVpFOiAxOHB0Ij5JdnkmbmJzcDtMaXUmbmJzcDsmbmJzcDsmbmJz cDs8L1NQQU4+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9TVFJPTkc+PC9GT05UPjwvRk9OVD48L0ZPTlQ+ PC9ESVY+PC9TUEFOPjwvRk9OVD48L0ZPTlQ+PC9TUEFOPjwvU1BBTj48L1REPjwvVFI+DQogIDxU UiBoZWlnaHQ9MjE+DQogICAgPFREIHdpZHRoPTM0OT4NCiAgICAgIDxQPjxTVFJPTkc+PEZPTlQg c3R5bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiA5cHQiIHNpemU9MSANCiAgICAg IGZhY2U9IiI+U2FsZXMmbmJzcDtEZXBhcnRtZW50IA0KICAgICAgPEJSPkhvbmcmbmJzcDtLb25n Jm5ic3A7S29vbiZuYnNwO1RlY2hub2xvZ3kmbmJzcDtMdGQuPC9GT05UPjwvU1RST05HPjwvUD48 L1REPjwvVFI+DQogIDxUUj4NCiAgICA8VEQgd2lkdGg9MzQ5Pg0KICAgICAgPERJViBzdHlsZT0i Rk9OVC1GQU1JTFk6IEFyaWFsOyBGT05ULVNJWkU6IDhwdCI+VGVsOiZuYnNwOyZuYnNwOyAwMDg2 IDc1NSANCiAgICAgIDI3NDQ4NzUzJm5ic3A7ZXh0IDgwMDU8L0RJVj4NCiAgICAgIDxESVYgc3R5 bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgRk9OVC1TSVpFOiA4cHQiPkZheDombmJzcDsmbmJzcDsw MDg2IDc1NSANCiAgICAgIDI5NzkwMjc4Jm5ic3A7IDwvRElWPg0KICAgICAgPERJViANCiAgICAg IHN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0laRTogOHB0Ij5HU006Jm5ic3A7MDA4 NjE1ODE0NDI5NjQyJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KICAgICAgU2t5cGU6IGl2eS5s eXk5PC9ESVY+DQogICAgICA8RElWIHN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IEZPTlQtU0la RTogOHB0Ij48U1BBTiANCiAgICAgIHN0eWxlPSJDT0xPUjogIzAwMDAwMDsgRk9OVC1TSVpFOiA4 cHQiPkU6IDwvU1BBTj4mbmJzcDs8QSANCiAgICAgIHN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7 IENPTE9SOiAjMDAwMGZmOyBGT05ULVNJWkU6IDhwdCIgDQogICAgICBocmVmPSJtYWlsdG86Y2hA aGtzb3NwaG9uZS5jb20iPmNoQGhrc29zcGhvbmUuY29tPC9BPjxTUEFOIA0KICAgICAgc3R5bGU9 IkNPTE9SOiAjMDAwMGZmIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPC9TUEFOPjxBIA0KICAg ICAgc3R5bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6ICMwMDAwZmY7IEZPTlQtU0laRTog OHB0IiANCiAgICAgIGhyZWY9Im1haWx0bzptcmt0MjZAa29vbnRlY2guY29tIj5tcmt0MjZAa29v bnRlY2guY29tPC9BPjwvRElWPg0KICAgICAgPERJViBzdHlsZT0iRk9OVC1GQU1JTFk6IEFyaWFs OyBGT05ULVNJWkU6IDhwdCI+DQogICAgICA8RElWIHN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7 IEZPTlQtU0laRTogOHB0Ij5XOjxTUEFOIA0KICAgICAgc3R5bGU9IkNPTE9SOiAjMDAwMGZmIj4g PC9TUEFOPjxBIA0KICAgICAgc3R5bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6ICMwMDAw ZmY7IEZPTlQtU0laRTogOHB0IiANCiAgICAgIGhyZWY9Imh0dHA6Ly93d3cua29vbnRlY2guY29t LyI+d3d3Lmtvb250ZWNoLmNvbTwvQT48L0RJVj4NCiAgICAgIDxESVYgDQogICAgICBzdHlsZT0i Rk9OVC1GQU1JTFk6IEFyaWFsOyBDT0xPUjogIzAwMDBmZjsgRk9OVC1TSVpFOiA4cHQiPiZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyANCiAgICAgIDxBIHN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7 IENPTE9SOiAjMDAwMGZmOyBGT05ULVNJWkU6IDhwdCIgDQogICAgICBocmVmPSJodHRwOi8vd3d3 Lmhrc29zcGhvbmUuY29tLyI+d3d3Lmhrc29zcGhvbmUuY29tPC9BPjwvRElWPg0KICAgICAgPERJ ViANCiAgICAgIHN0eWxlPSJGT05ULUZBTUlMWTogQXJpYWw7IENPTE9SOiAjMDAwMGZmOyBGT05U LVNJWkU6IDhwdCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KICAgICAgPEEgc3R5bGU9IkZP TlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6ICMwMDAwZmY7IEZPTlQtU0laRTogOHB0IiANCiAgICAg IGhyZWY9Imh0dHA6Ly93d3cua29vbnRlY2guZW4uYWxpYmFiYS5jb20vIj53d3cua29vbnRlY2gu ZW4uYWxpYmFiYS5jb208L0E+PC9ESVY+DQogICAgICA8RElWIA0KICAgICAgc3R5bGU9IkZPTlQt RkFNSUxZOiBBcmlhbDsgQ09MT1I6ICMwMDAwZmY7IEZPTlQtU0laRTogOHB0Ij4mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgDQogICAgICA8QSBzdHlsZT0iRk9OVC1GQU1JTFk6IEFyaWFsOyBDT0xP UjogIzAwMDBmZjsgRk9OVC1TSVpFOiA4cHQiIA0KICAgICAgaHJlZj0iaHR0cDovL3d3dy5kaXJl Y3RpbmR1c3RyeS5jb20vdGFiL2tvb24uaHRtLyI+d3d3LmRpcmVjdGluZHVzdHJ5LmNvbS90YWIv a29vbi5odG0vPC9BPjwvRElWPjwvRElWPjwvVEQ+PC9UUj48L1RCT0RZPjwvVEFCTEU+DQo8RElW IA0Kc3R5bGU9IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6ICMzMzMzOTk7IEZPTlQtU0laRTog OHB0OyBGT05ULVdFSUdIVDogYm9sZCI+Jm5ic3A7Jm5ic3A7PC9ESVY+DQo8RElWIA0Kc3R5bGU9 IkZPTlQtRkFNSUxZOiBBcmlhbDsgQ09MT1I6ICMzMzMzOTk7IEZPTlQtU0laRTogOHB0OyBGT05U LVdFSUdIVDogYm9sZCI+Jm5ic3A7Jm5ic3A7IA0KJm5ic3A7PFNQQU4gc3R5bGU9IkZPTlQtU0la RTogOXB0Ij5Lb29uIGtlZXBzIHByb3ZpZGluZyBnb29kIHF1YWxpdHkgYW5kIA0Kc2VydmljZSZu YnNwO3RvJm5ic3A7eW91Jm5ic3A7ISAmbmJzcDsgOiANCik8L1NQQU4+PC9ESVY+PC9ESVY+PC9E SVY+PC9TUEFOPjwvU1RST05HPjwvRElWPjwvU1BBTj48L0ZPTlQ+PC9GT05UPjwvRk9OVD48L0ZP TlQ+PC9GT05UPjwvRElWPjwvQk9EWT48L0hUTUw+DQo= ------=_NextPart_13050716580950014458331_002-- ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="clip_image002(05-03-11-47-18).jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCADBARwDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDnxH7V IsftU4ip6xe1fRnmakAjpRH7VZEJp6w+1NAVli9qkEVWhD7VIIadxFRYqeIqtiH2p4hJPSi4FQQ+ 1OENWtgUkEZIGcViWGralPDYyXFjEqXbgCVX+8DnovXtWc6sYNJ9TWFKU03HoaYipwh9qsxhG46N xwanW346VpcyKIh9qd5XtV77PntThb4HSgCgIaXyfUGtAW59KXyPai4FIeKpfDUMtutsjLMhkjll UlPMHAQ46ZFbF/4I0HXrZb3TmSwmkQMWgAMTcd16fliuL8XG6tLiJopjHHJHscZznJPb+tL4Z1aC yfybWeS3DrhrNnyrH+8h/P8AOvCxSUqskzsh8CKGr6Fe6LdmO6a2lUn5ZLc5D8enUdOmKzzhifKk 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 ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="clip_image004(05-03-11-47-18).jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCADgAOgDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii gAooooAKKSigAooooAKKKWgBKKKWgAoopCQOpoAWkpN6/wB4fnRuoAWim7hS5FAC0UUUAGaKKKAF opKWgAooooAKKKKACiiigAooooAKKKKAEooooAKKQmoJJ1U7R8zegoAn3CmPPHGPmYZ9ByarFXl+ 8cD0FOWFV6Cq5SXIVrxyf3cX4saYXun6yBP90VLjFJinZE3ZAYWb78rt+NN+yx98n61YxSGmFyub aP8Au0024H3WZfoaskU0igVyD/SE+5OT7NzTvtk6ffjB9xTyKaRSsO5JDqEUhC5wfQ1bEgNY08Kl sjiolurmAYVtwHZqmxSZ0AOaWsa11qJpPLuP3LHoT90/j2rYXkZpFC0tFFABRRRQAUUUUAFFFFAB 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 Syf89JD95v8APatwDAoxS0AFIaWigBKKKKAP/9k= ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="Catch(05-03-11-47-18).jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCADVAPkDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iii igAoopCcAnrjt3obSV3okAtFfhZ+2n/wcMf8E/v2H/jdrf7Pvju7+KfxJ+IvhFEj8c2/wf8ACGl+ JtG8E6vLHHNH4Z13WdW8SeH7Y+JI7aSO5vtN0/7adNWaKG+kgumaBPkkf8Haf/BNs/8ANOf2r8ep +Gfg/wD+ePX1uD4D40x+GoYzB8L51iMLiacatCvTwVT2dWnOzhUg3a8Jppxla0otSV07mEsTh4tq VanFp2ackrPz18z+omiv5qPhz/wdNf8ABPT4ofELwF8NfDvw+/aig8QfEXxr4X8CaFNqfw58J22m w6x4t1uy0DTZdRuI/iDcSwWMV5fwvdzR280kUAkdIZWUIf6VgTz04x09e9eVnPD+ecPVaFHPMqxu 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 gAooooAKKKKACiiigAooooAKKKKACiiigD//2Q== ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="clip_image008(05-03-11-47-18).jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCADfAQ0DASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii gAoqC8uksrOa6kzshQu2OuAK5ZPiboLD5vPX6x0XA7CmSSxwoXkdUVRksxwBXML8RvDrf8vEoPoY jXlXxF8Y3Ou3stnbTOllGcMoON59/aldAeqX3xM8KWMrRtqazMvXyFLj8xVJfi94SY4Nxcr7mA4r wFW2IFHAApu40XA+l9N8e+GNVkEdrq8HmHokh2H9a6AEMAQQQehHevkjOeor0H4UeNbrTdUGj31w 8llP/qg7Z8pvb2PpRcD3eis3/hIdHDsjajbqynBVpACDUi63pTfd1K1P/bVf8adwL1FRQXMFypaC ZJVHdGyKloAKKKKACiiigAooooAKKKRmVRlmAHuaAFopnmxno6/nTZZ44YmkZ1CqMnmgCWq8t9aQ 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 AvHoOgqamkIKKKKYBRRRQAUUUUAf/9k= ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="clip_image010(05-03-11-47-18).jpg" Content-Transfer-Encoding: base64 Content-ID: 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 ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="clip_image012(05-03-11-47-18).jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCADMALMDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1K+8R 6NpN3DZX+owW9xMAY43bBbJwMfjTdU8U6Fos62+p6rbWsrLuCSPg49cV5b8X2mXxnpTW4JnW2QxA DJ3eYcfriovh4fD934knk8UPK+utMfLF7/qy34/x+x/CutUF7NTZNzrPHPiXVGu9A0zw7fLa/wBs SHF1szxkAcEdOc1z95deIrC6ltbr4nafFPCSrxsmCp9Pu12PjfRdZvrrTdS0Oy0+6u7JyR9ryGTO CGU5A6joa8pGieIvEHivVomtrZ9Sjk33S+aqIpPHBPWnTt7O6S09O/maU4xlNKcrLvud78O/HtvN pEieJNei+2tdFYxcMFOzAx2AxnNdxfa/pOm3NvbX1/Bby3X+oWRseZ24/MV49d+FR4V8B3N/q+lW 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 zGo8xqLAS0VF5jUeY1FgJaKi8xqKVgP/2Q== ------=_NextPart_13050716580950014458331_001 Content-Type: image/jpeg; name="Weatherproof Telephone.jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAgEAYABgAAD/4RQbRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAADqYAAAAnEAAOpgAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dz ADIwMTI6MTE6MDkgMTQ6MTU6MjgAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAAEgKADAAQAAAAB AAACzQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABLlAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAZACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A9VSSSSUpJV6G5weftD6nVxoK2Oad39qyz2qwkpSjYHurcK3B jyCGOI3AGPa4tlu5VyzqW9xFtPp67B6TpGvt3O9b81v8lWklPI43WP8AGDW0PzOi03byIbTa1pYP Tsv92+1+9zbHVYv+D/SUv/7kV7EOt/X5tduQ7odVnsGzFFoY9rnN9Td65ssZkNr+hbW2ql+/0/S/ wi65AyG5rnD7NZUxv5wsY55meWlttX5qSnn2db+uL8z7P+xawBte9xuIZW1z7AK3X7NmRc6mn/tN 6no/aafWTY3Vvrpl5GNU/pLMKl1lRyb3vDyKZJt2Vb27bbv5v0/0n2T+cs9X16/S6FrczcwusrLZ PqAMIJH5uz9I5HSU8o7qP15xiKG9NbnkGyw5O+ukOFd76asZtO93puycOuvJ9d1n6P7V/NfoPSTU 9e+u17wW9CYwUlovrfbt3E1se6qi2zZ7vVt/n9lmP+jsx/51dYqz2dR9Qll1Ir12tNbi7+TLvWH/ AFCSnn/259dhXW8fV9j95Y0t+0NY6NzA+5zHbvTY6t/tr99tPp+pb+jXUqLN4Y3eQXwNxaIBPfaC XKSSlJIV4yS0fZnsY+dTY0vER/IfV+co0tzQ79PZW9sD6DHNMwd30rbElJ0kkklKSSSSU//Q9VSS SSUpcpm2X39dzqn5eRVVT6QrrqtdW0bq22O/m9v0nOXSUYvov3C62wRtDLHbgP5Wo37v7S5Y1Y9X X+rBgZWz1a3FoIaNz6qrbH7f3rHv3vWd8XnKHLXGRj6hrE8J6tjlQDM2L9P7YtH6wZfUMPpmd9kt NlmI1t1Lsh7rS0vDfWd+lftftYz9DX/pbUT6k9Syc/ND8hrGOrbU0+mXavfjtycjf7i1zNz6/T/0 aD1+nJy8XqWPhta+3IpbXWXmGOdta62htv0G5HoH9F+5+jss9ij9RMbIwcqqnLaGXXPDgWkQ4MxK 8d4+k5+9tuPZ+b/5BUeXljkMJkQcxyYdSf1vCfY/e/R/nGaQlU/3OGf939N7vOudj4WReyN1VT3t nUS1pcucb1T6w1Yxu9am1wZviyqJ03f4J9a3OuN3dFzxJH6vaZBg6MceyyXsIwngjX0j/wBSrvxL PkxGHBIx0kdFnKxgYy4oiWo3Q3fWq79sDprN7S+v1QRWDtaWWXMDvc7d7aNjrP8AT2V1rosCy2zF a+14e8l3uA2yA4hvtkrgLxkH61VWmtxw7OlPrN7T7QRZv+jH0vUdVVs/4f1F3nSjODX/AGv+qcn8 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 ////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP// //////////////////////////8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0E HgAAAAAABAAAAAA4QklNBBoAAAAAA2EAAAAGAAAAAAAAAAAAAALNAAAEgAAAABYAVwBlAGEAdABo AGUAcgBwAHIAbwBvAGYAIABUAGUAbABlAHAAaABvAG4AZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA AQAAAAAAAAAAAAAEgAAAAs0AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA AQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxv bmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAs0AAAAAUmdodGxvbmcAAASAAAAA BnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAA AAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRv R2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpj AAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRv bWxvbmcAAALNAAAAAFJnaHRsb25nAAAEgAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAA AQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hU TUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VI b3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAA AAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25l 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 a+529z/ei9EBPW7HMj1BjQwn4vOv8jctjM+ruJlZlmYbrqrbg0WCtzdp2Da10WV2bfb+6nw/q/iY lxyKrLTkkBovcWFwYJ/RN/Rhnpuc7e/2f9QoByeYc4c/p4LJ39bZlzOI8sMWvEIgbelIGW1244e1 jG+sdorECTXdv3f2lH6xZbsTpF9ldvo2uiup4MHc8hvs/lq39ll7HPtss9Nxc0O2gSQ5uuxjP31W 69iX5vSrsbHbuseayGkgSG2V2P1d/IYrsxIY8nCDxGMuH97i4WpGuKFnQEX/AIzhCirDBzcZzm5B fWXvcSd53hv6aNvq/wA7Yi2Y9TLGWGTlCrd6xLvV427vWnd9FGu6d1HIq+ztx3Vbi39I91Za0NIf 7hXY+z839xWr6s51HsxP04aGgn0zppuaD6zPzf8AwRUPhkMvBP7xGZPH6feBn6eGPy8bLmIscBA/ u+l08Yk49RJJJY0knUnTuioWMx7MapjxD2saHCZ1A11RVpx+UeQYDuVJJJIof//V9VSXyqkkp+qk l8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSX yqkkp//ZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8A cAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMANAAAAAEAOEJJTQQGAAAA AAAHAAUBAQABAQD/4RBDaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVn aW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5z Ong9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA0LjIuMi1jMDYzIDUz LjM1MjYyNCwgMjAwOC8wNy8zMC0xODoxMjoxOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRm PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNj cmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x LjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBo b3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09 Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMu YWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnRpZmY9Imh0dHA6 Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29t L2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3Mi IHhtcDpDcmVhdGVEYXRlPSIyMDEyLTA5LTA3VDA5OjM0OjQxKzA4OjAwIiB4bXA6TW9kaWZ5RGF0 ZT0iMjAxMi0xMS0wOVQxNDoxNToyOCswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxMi0xMS0w OVQxNDoxNToyOCswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JN b2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFDMzkxM0ExMzQyQUUyMTE5QUFDOTZC OTkwRThEQTkyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFDMzkxM0ExMzQyQUUyMTE5QUFD OTZCOTkwRThEQTkyIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MUMzOTEzQTEz NDJBRTIxMTlBQUM5NkI5OTBFOERBOTIiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29s dXRpb249Ijk2MDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iOTYwMDAwLzEwMDAwIiB0aWZm OlJlc29sdXRpb25Vbml0PSIyIiB0aWZmOk5hdGl2ZURpZ2VzdD0iMjU2LDI1NywyNTgsMjU5LDI2 MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2 LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7NTBFOEI0QzQwQTM4M0IzRTNEMkUzNDlEMkFGQkEy Q0IiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTUyIiBleGlmOlBpeGVsWURpbWVuc2lvbj0iNzE3 IiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOk5hdGl2ZURpZ2VzdD0iMzY4NjQsNDA5NjAs NDA5NjEsMzcxMjEsMzcxMjIsNDA5NjIsNDA5NjMsMzc1MTAsNDA5NjQsMzY4NjcsMzY4NjgsMzM0 MzQsMzM0MzcsMzQ4NTAsMzQ4NTIsMzQ4NTUsMzQ4NTYsMzczNzcsMzczNzgsMzczNzksMzczODAs MzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczOTYsNDE0ODMsNDE0ODQsNDE0 ODYsNDE0ODcsNDE0ODgsNDE0OTIsNDE0OTMsNDE0OTUsNDE3MjgsNDE3MjksNDE3MzAsNDE5ODUs NDE5ODYsNDE5ODcsNDE5ODgsNDE5ODksNDE5OTAsNDE5OTEsNDE5OTIsNDE5OTMsNDE5OTQsNDE5 OTUsNDE5OTYsNDIwMTYsMCwyLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4 LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwO0VBRUVBMkFGN0YzODQ2MEFCQzMxQjY4RjI4REEy NjgzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3Jl YXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxQzM5MTNBMTM0MkFFMjExOUFBQzk2Qjk5 MEU4REE5MiIgc3RFdnQ6d2hlbj0iMjAxMi0xMS0wOVQxNDoxNToyOCswODowMCIgc3RFdnQ6c29m dHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIi8+IDwvcmRmOlNlcT4gPC94 bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hw YWNrZXQgZW5kPSJ3Ij8+/+4AIUFkb2JlAGRAAAAAAQMAEAMCAwYAAAAAAAAAAAAAAAD/2wCEAAQD AwMDAwQDAwQGBAMEBgcFBAQFBwgGBgcGBggKCAkJCQkICgoMDAwMDAoMDAwMDAwMDAwMDAwMDAwM DAwMDAwBBAUFCAcIDwoKDxQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDP/CABEIAs0EgAMBEQACEQEDEQH/xAElAAEAAAcBAQAAAAAAAAAAAAAAAQIE BQYHCAMJAQEAAQUBAQAAAAAAAAAAAAAAAQIDBAUGBwgQAAECBQICBwcEAQMEAwEBAAECAwARBAUG EgchExAgMDEiFAhAUEEyIzMVYCQ0FhdwNQlCJSY2kCcYNxkRAAIBAgQDAwQKCgkQBgkBCQECAxEE ACESBTETBkFRImFxMhQQgZGhsUJSIxUHIDBAUPDB0WJyM4KSstKT0yQ1FmDh8aLCQ1Njc4OzNHSE lDajw1RktCVw4uNEpMSFlSbydpDUpbXVRmYXEgABAwADCwcJCQABAwQDAQABABECITESECBBUWFx gZHRMgMw8KGxwSLSQFDhQlKCkrITYPFicqLC4jMEcIDyI5BTYxRDc4OT/9oADAMBAQIRAxEAAADv 4AAAAAAAAAAAAAAAAAAAAEIRkIQEZgkAQERGZAAAAAABCJCQAEIJiKQAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLSShAiMoxMagAlFITSSAAAAAEIQCAmZiWlGpCKUVTVAB AlUxpqmkkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLtXNB5OLSY2XszJw9 I2sjtibcyuNMKklFWhq4xazc3vlY2WWLs1cIkQmAgEopQEEIYnZu8E5dr6I2I+ddyuWaeh67fUFq 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 s3hrtvS3Uh2Ta7DpvaLrbNs3LbZ7q7kvrqW2W0hlmtpba3FvDoUvLAk9zrLBObpTU+8bt1Db7NtG 4y22yptljtW7blSWbZb+a9YTbhDaWVxCkvNCxtCjvbt46S+i18l7Babfu9/v2xboYn3zeuo3Flsl 5a3DLLuG7VleRhFLy0SCGJdSIxbxS47PtU/SrJbSwXd5tst1DeF+RLaWe4W91PG2lXJ1xRMgFKM2 nUQuL7aejG2606E3W+2reZdomaWD1Dcdt3O0urg2aRROnKuoYWLxfNql0vMGr1iXRd9UdHb9Ds20 Xm07wkUDxesSWHUO7NaVvYIpFaJ45PVlkmhfSvPDSDW1xIV2nrXdululekNw2+O7O87l0tczzXW+ S3kPLMdyr7fZBYNZFx43uJebFEFamstsjXXTOyp11Y2KW171FYWsa3ZuTEY5ZYrrlRzBmDN854Hz xdbRt17uN6ty7y8/etyvd3nV3QJpWa9lmkVAFHgVtNdR4scdFX/TMe17pvXT2xN07uu3bheT2FnM HW1YTxXEVndSVjktiFQwrrSUsWRkXG17DcTR3F7aQgXlzErRxyXMjGSZ0VixVWkZiq1yH3F2YvOp OmV22w+tBOoN13+z3Yc1Ib223G8kk9Rv5Fj5hiktikb+CXkyoksSsYlr1dcXF3DYbtum6We+9L7l bF5Zduv7HbLS0jkbUsZYcyB1kjB0zWztG9BI6Y6X6W3XY+kvrA2Tbtlsdv3DYeoGaC1td3slZXvL OdtsvGlSZX0MksUbJykaNl1yLjoTaet7LaeoNk6XsN4gudsu42u7aGbcri2ltYbRLiNqw2scb28b yFZOUseXiemzJskVz09t2xSc2x2jp+9utm2xmMgmbn2djJDBOGfNhMj6qtqrqbG+dRSPEbHc7Dbb O3RSxmWSxkvHcuCunTS4XTQmvi1BfjdT3t08Txb1ug3C1WIuWWIWNpbUk1AANrgY+Gq6dPlH3H0l Ff21ne7Pse9Ju+42V+peOWOKzuoowqaGDsJpYno9FopOfoncujNqurNui4922jd+l47iSYXNjBa7 nBfXdgQInBgjETGzIeq8z1dlSKJHxd9U9Hb9Dsuz3u07wkVu0XrElh1DuxtK3sEMitE8UnqyyTQv pXnhpAHa4kK7T1tu/S3SvSO4WEd39Nbl0tcTT3W+S3kPLMdyr7fZBYNdLjxvcS82KLS1NZbarTce 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 nzeZwtSNTtmRUk04VLN8b/8Ad2//2Q== ------=_NextPart_13050716580950014458331_001-- From dave@fromorbit.com Wed May 8 01:04:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AB1BB29E0E for ; Wed, 8 May 2013 01:04:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9B44F8F8037 for ; Tue, 7 May 2013 23:04:34 -0700 (PDT) X-ASG-Debug-ID: 1367993072-04cb6c53a4eb7a0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id f8AbN4UAwpFvqwBV for ; Tue, 07 May 2013 23:04:32 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AioMAADqiVF5LNxE/2dsb2JhbABRgweMTLJ5BIECF3SCfDuBAgOIP6EKoBmNeBOBOoM/A6hfgyAqgS4 Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 15:34:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZxUL-0000pI-Hc for xfs@oss.sgi.com; Wed, 08 May 2013 16:04:29 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZxUL-0002R4-DK for xfs@oss.sgi.com; Wed, 08 May 2013 16:04:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/2] xfstests: more simple fixes... Date: Wed, 8 May 2013 16:04:24 +1000 X-ASG-Orig-Subj: [PATCH 0/2] xfstests: more simple fixes... Message-Id: <1367993066-9313-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367993072 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130332 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- A couple of simple fixes - another redirection issue that I missed on the last sweep (thanks Michael!), and a patch that disables quota tests on relatime filesystems as realtime filesystems don't support quotas. Cheers, Dave. From dave@fromorbit.com Wed May 8 01:04:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1A62629E2E for ; Wed, 8 May 2013 01:04:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9C1B0AC002 for ; Tue, 7 May 2013 23:04:42 -0700 (PDT) X-ASG-Debug-ID: 1367993080-04cbb05fe2ee530001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id IVQQL1tjwNFYSfjh for ; Tue, 07 May 2013 23:04:41 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhkMAADqiVF5LNxE/2dsb2JhbABRgwe/RQSBAhd0gh8BAQVWMwgYMSEYAxsZh3oDDrhmDYgwjFKBEieBOoM/A5VGjXeFIoMgKoEt Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 15:34:40 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZxUV-0000pJ-JB for xfs@oss.sgi.com; Wed, 08 May 2013 16:04:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZxUL-0002R7-Ed for xfs@oss.sgi.com; Wed, 08 May 2013 16:04:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/2] xfstests: fix incorrect redirect in generic/233 Date: Wed, 8 May 2013 16:04:25 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfstests: fix incorrect redirect in generic/233 Message-Id: <1367993066-9313-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367993066-9313-1-git-send-email-david@fromorbit.com> References: <1367993066-9313-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367993080 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620b, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130332 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.50 BSF_SC0_SA620b Custom Rule SA620b From: Dave Chinner generic/233 attempts to direct output to tee, but instead of using a pipe it uses an append operator. Hence it leaves a file named "tee" in the root directory of the xfstests execution path. Just direct the output to the $seqres.full file rather than trying to tee it into the test output as well. Reported-by: "Michael L. Semon" Signed-off-by: Dave Chinner --- tests/generic/233 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generic/233 b/tests/generic/233 index 2b6cd2f..58b3672 100755 --- a/tests/generic/233 +++ b/tests/generic/233 @@ -62,7 +62,7 @@ _fsstress() -f rename=10 -f fsync=2 -f write=15 -f dwrite=15 \ -n $count -d $out -p 7` - echo "fsstress $args" >> tee -a $seqres.full + echo "fsstress $args" >> $seqres.full if ! su $qa_user -c "$FSSTRESS_PROG $args" | tee -a $seqres.full | _filter_num then echo " fsstress $args returned $?" -- 1.7.10.4 From dave@fromorbit.com Wed May 8 01:04:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A004529E34 for ; Wed, 8 May 2013 01:04:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8FF4D8F8052 for ; Tue, 7 May 2013 23:04:52 -0700 (PDT) X-ASG-Debug-ID: 1367993090-04cbb05fe4ee570001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id a6INjmXsC1r1ltwd for ; Tue, 07 May 2013 23:04:51 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhkMAADqiVF5LNxE/2dsb2JhbABRgwe/RQSBAhd0gh8BAQVWMwgYMTkDGxmIC8EjjXgTgTqDPwOoX4MgKoEu Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 08 May 2013 15:34:50 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UZxUL-0000pK-Jh for xfs@oss.sgi.com; Wed, 08 May 2013 16:04:29 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UZxUL-0002RC-Gk for xfs@oss.sgi.com; Wed, 08 May 2013 16:04:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/2] xfstests: quota not supported on realtime filesystems Date: Wed, 8 May 2013 16:04:26 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfstests: quota not supported on realtime filesystems Message-Id: <1367993066-9313-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1367993066-9313-1-git-send-email-david@fromorbit.com> References: <1367993066-9313-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1367993090 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130332 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Realtime XFS filesystems do not support quotas, so quota tests always fail on such filesystems. Add a check to _require_quota to detect this situation and notrun the quota tests... Signed-off-by: Dave Chinner --- common/quota | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/common/quota b/common/quota index fd5374f..3550cd4 100644 --- a/common/quota +++ b/common/quota @@ -40,6 +40,12 @@ _require_quota() if [ ! -f /proc/fs/xfs/xqmstat ]; then _notrun "Installed kernel does not support XFS quotas" fi + if [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ]; then + _notrun "Quotas not supported on realtime test device" + fi + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then + _notrun "Quotas not supported on realtime scratch device" + fi ;; *) _notrun "disk quotas not supported by this filesystem type: $FSTYP" -- 1.7.10.4 From samplete@prominereweb.prominereweb.com Wed May 8 02:13:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_IMAGE_RATIO_06, HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id F1CFE29E0E for ; Wed, 8 May 2013 02:13:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7D95BAC002 for ; Wed, 8 May 2013 00:13:54 -0700 (PDT) X-ASG-Debug-ID: 1367997225-04cbb05fe3f1780001-w1Z2WR Received: from prominereweb.prominereweb.com (prominereweb.prominereweb.com [198.1.90.230]) by cuda.sgi.com with ESMTP id 1gevSrETRchjxLzO (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 May 2013 00:13:46 -0700 (PDT) X-Barracuda-Envelope-From: samplete@prominereweb.prominereweb.com X-Barracuda-Apparent-Source-IP: 198.1.90.230 Received: from samplete by prominereweb.prominereweb.com with local (Exim 4.80) (envelope-from ) id 1UZyZM-0000vI-SM for linux-xfs@oss.sgi.com; Wed, 08 May 2013 12:43:44 +0530 To: linux-xfs@oss.sgi.com Subject: Mira este mensaje X-PHP-Script: www.telanganapellivedika.co.in/jquery/bol.php for 89.145.108.206 X-ASG-Orig-Subj: Mira este mensaje From: Saludos MIME-Version: 2.5 Content-Type: text/html; charset="iso-8859-1" Message-Id: Date: Wed, 08 May 2013 12:43:44 +0530 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - prominereweb.prominereweb.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [504 32008] / [47 12] X-AntiAbuse: Sender Address Domain - prominereweb.prominereweb.com X-Get-Message-Sender-Via: prominereweb.prominereweb.com: authenticated_id: samplete/only user confirmed/virtual account not confirmed X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/samplete/public_html/pellivedhika/jquery/bol.php X-Source-Dir: sampletemplates.net:/public_html/pellivedhika/jquery X-Barracuda-Connect: prominereweb.prominereweb.com[198.1.90.230] X-Barracuda-Start-Time: 1367997226 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.55 X-Barracuda-Spam-Status: No, SCORE=0.55 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_FONT_LOW_CONTRAST, HTML_IMAGE_RATIO_06, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130336 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_IMAGE_RATIO_06 BODY: HTML has a low ratio of text to image area 0.54 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar to background 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message Mensaje Facebok
facebook  
 
 
Tienes un Mensaje Privado.

Hola amor, te encontré gracias a facebook quizá te hayas olvidado de mí. Quiero que sepas que todo este tiempo he pensado mucho en tí, desde el fondo de mi ser extraño cada parte de tí, nose por que terminamos, te agregue como amigo espero que me aceptes te deje un mensaje en tu facebook por favor leelo, quizá explique nuestra separacion te amo.

PD. en el mensaje te dejo un Mensaje de Voz y Unas fotos. Te quiero

Facebook, Inc. P.O. Box 10005, Palo Alto, CA 94303. Este mensaje fue enviado desde facebook, 2012
From gliceaga@mendoza-conicet.gob.ar Wed May 8 03:43:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=FREEMAIL_FORGED_REPLYTO autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E2F9929E12 for ; Wed, 8 May 2013 03:43:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B4B99304062 for ; Wed, 8 May 2013 01:43:54 -0700 (PDT) X-ASG-Debug-ID: 1368002631-04bdf04223f7e00001-NocioJ Received: from mx2.mendoza-conicet.gob.ar (mx2.mendoza-conicet.gob.ar [200.69.149.90]) by cuda.sgi.com with ESMTP id 95qG6LHyJeu2oiVP; Wed, 08 May 2013 01:43:51 -0700 (PDT) X-Barracuda-Envelope-From: gliceaga@mendoza-conicet.gob.ar X-Barracuda-Apparent-Source-IP: 200.69.149.90 Received: from localhost (localhost.localdomain [127.0.0.1]) by mx2.mendoza-conicet.gob.ar (Postfix) with ESMTP id A501711502DB; Wed, 8 May 2013 04:44:33 -0300 (ART) X-Virus-Scanned: amavisd-new at mx2.mendoza-conicet.gob.ar Received: from mx2.mendoza-conicet.gob.ar ([127.0.0.1]) by localhost (mx2.mendoza-conicet.gob.ar [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7I3BIactzlcG; Wed, 8 May 2013 04:44:32 -0300 (ART) Received: from correo.mendoza-conicet.gob.ar (correo.mendoza-conicet.gob.ar [172.16.15.91]) by mx2.mendoza-conicet.gob.ar (Postfix) with ESMTP id 7629C11502D5; Wed, 8 May 2013 04:44:32 -0300 (ART) Received: from localhost (localhost [127.0.0.1]) by correo.mendoza-conicet.gob.ar (Postfix) with ESMTP id 05E6CACF401E; Wed, 8 May 2013 05:34:37 -0300 (ART) X-Virus-Scanned: amavisd-new at mendoza-conicet.gob.ar Received: from correo.mendoza-conicet.gob.ar ([127.0.0.1]) by localhost (correo.mendoza-conicet.gob.ar [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id g+riQADIlGa9; Wed, 8 May 2013 05:34:31 -0300 (ART) Received: from correo.mendoza-conicet.gob.ar (localhost [127.0.0.1]) by correo.mendoza-conicet.gob.ar (Postfix) with ESMTP id 405F4D546E7; Wed, 8 May 2013 05:34:31 -0300 (ART) Date: Wed, 8 May 2013 05:34:30 -0300 (ART) From: "John P. Goldman" Reply-To: "John P. Goldman" Message-ID: <1397435517.69310.1368002070824.JavaMail.root@correo.mendoza-conicet.gob.ar> Subject: dringender Vorschlag MIME-Version: 1.0 X-ASG-Orig-Subj: dringender Vorschlag Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [79.141.164.13] X-Mailer: Zimbra 6.0.10_GA_2692 (zclient/6.0.10_GA_2692) To: undisclosed-recipients:; X-Barracuda-Connect: mx2.mendoza-conicet.gob.ar[200.69.149.90] X-Barracuda-Start-Time: 1368002631 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620a X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130342 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA620a Custom Rule SA620a Entschuldigungen f=C3=BCr kommen in Ihre Privatsph=C3=A4re! Ich bin Rechtsa= nwalt Werner Erich Zeller; Ich habe einen meiner einflussreichen und wohlhabenden Kunden zum Tode; und er hatte eine sehr geheime und private Investitionen von =E2=82=AC15,000,000.00 bei einer privaten Bank in Gro=C3= =9Fbritannien hier zu Lebzeiten. Diese Investition wurde ohne einen deklarierten n=C3=A4chsten Angeh=C3=B6rigen und beg=C3=BCnstigte. Jetzt brauche ich Sie = arbeiten mit mir als mein Partner zu erholen und zu je 50 % Aktienfonds. Alle Dokumente werden rechtlich beantragt und beschafft, und in 5 Werktage, wird diese Transaktion auftreten. Aber ich brauche einen ernsten, treuen und glaubw=C3=BCrdigen Partner. Bitte senden Sie mir eine vertrauliche Antwort, wenn Sie denken, Sie vertraut werden k=C3=B6nnen und sind von den Qualit=C3=A4ten! Ich warte auf= Ihre schnelle Antwort. Werner Erich Zeller (Rechtsanwalt) Rufen Sie + 44-702-409-0820 (Office) From bernd.schubert@itwm.fraunhofer.de Wed May 8 04:04:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B64D829E0E for ; Wed, 8 May 2013 04:04:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 894418F8059 for ; Wed, 8 May 2013 02:04:26 -0700 (PDT) X-ASG-Debug-ID: 1368003863-04bdf04225f8a20001-NocioJ Received: from mailgw1.uni-kl.de (mailgw1.uni-kl.de [131.246.120.220]) by cuda.sgi.com with ESMTP id tkvTxCbuKotHVwq2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 May 2013 02:04:24 -0700 (PDT) X-Barracuda-Envelope-From: bernd.schubert@itwm.fraunhofer.de X-Barracuda-Apparent-Source-IP: 131.246.120.220 Received: from itwm2.itwm.fhg.de (itwm2.itwm.fhg.de [131.246.191.3]) by mailgw1.uni-kl.de (8.14.3/8.14.3/Debian-9.4) with ESMTP id r4894MMi020950 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NOT) for ; Wed, 8 May 2013 11:04:22 +0200 Received: from mail2.itwm.fhg.de ([131.246.191.79]:59903) by itwm2.itwm.fhg.de with esmtps (TLSv1:DES-CBC3-SHA:168) (/C=DE/ST=Rheinland-Pfalz/L=Kaiserslautern/O=Fraunhofer ITWM/OU=SLG/CN=mail2.itwm.fhg.de)(verified=1) (Exim 4.74 #1) id 1Ua0IP-0006DB-UE for xfs@oss.sgi.com; Wed, 08 May 2013 11:04:21 +0200 Message-ID: <518A1515.20805@itwm.fraunhofer.de> Date: Wed, 08 May 2013 11:04:21 +0200 From: Bernd Schubert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: 3.9.0: INFO: inconsistent lock state (xfs_ilock) Content-Type: text/plain; charset=UTF-8; format=flowed X-ASG-Orig-Subj: 3.9.0: INFO: inconsistent lock state (xfs_ilock) Content-Transfer-Encoding: 7bit X-ITWM-CharSet: UTF-8 X-ITWM-Scanned-By: mail2.itwm.fhg.de X-Barracuda-Connect: mailgw1.uni-kl.de[131.246.120.220] X-Barracuda-Start-Time: 1368003864 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130344 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- While waiting for the xfs_log_item list corruption, I got a lockdep warning. > [101949.322212] > [101949.323834] ================================= > [101949.327242] [ INFO: inconsistent lock state ] > [101949.327242] 3.9.0-debug+ #10 Not tainted > [101949.327242] --------------------------------- > [101949.327242] inconsistent {IN-RECLAIM_FS-W} -> {RECLAIM_FS-ON-W} usage. > [101949.327242] fhgfs-storage/W/1710 [HC0[0]:SC0[0]:HE1:SE1] takes: > [101949.327242] (&(&ip->i_lock)->mr_lock){++++?-}, at: [] xfs_ilock+0x109/0x138 [xfs] > [101949.327242] {IN-RECLAIM_FS-W} state was registered at: > [101949.327242] [] __lock_acquire+0x57a/0x1903 > [101949.327242] [] lock_acquire+0x145/0x179 > [101949.327242] [] down_write_nested+0x67/0xc2 > [101949.327242] [] xfs_ilock+0x109/0x138 [xfs] > [101949.327242] [] xfs_reclaim_inode+0x52/0x334 [xfs] > [101949.327242] [] xfs_reclaim_inodes_ag+0x386/0x4a7 [xfs] > [101949.327242] [] xfs_reclaim_inodes_nr+0x33/0x3a [xfs] > [101949.327242] [] xfs_fs_free_cached_objects+0x15/0x17 [xfs] > [101949.327242] [] prune_super+0x104/0x179 > [101949.327242] [] shrink_slab+0x2db/0x4b2 > [101949.327242] [] kswapd+0x891/0xb91 > [101949.327242] [] kthread+0xe1/0xe9 > [101949.327242] [] ret_from_fork+0x7c/0xb0 > [101949.327242] irq event stamp: 928730947 > [101949.327242] hardirqs last enabled at (928730947): [] __mutex_unlock_slowpath+0x128/0x13d > [101949.327242] hardirqs last disabled at (928730946): [] __mutex_unlock_slowpath+0x6e/0x13d > [101949.327242] softirqs last enabled at (928730604): [] __do_softirq+0x34e/0x3bc > [101949.327242] softirqs last disabled at (928730569): [] irq_exit+0x60/0xb6 > [101949.327242] > [101949.327242] other info that might help us debug this: > [101949.327242] Possible unsafe locking scenario: > [101949.327242] > [101949.327242] CPU0 > [101949.327242] ---- > [101949.327242] lock(&(&ip->i_lock)->mr_lock); > [101949.327242] > [101949.327242] lock(&(&ip->i_lock)->mr_lock); > [101949.327242] > [101949.327242] *** DEADLOCK *** > [101949.327242] > [101949.327242] 4 locks held by fhgfs-storage/W/1710: > [101949.327242] #0: (sb_writers#11){.+.+.+}, at: [] xfs_file_aio_write+0xb1/0x172 [xfs] > [101949.327242] #1: (&sb->s_type->i_mutex_key#16){+.+.+.}, at: [] xfs_file_buffered_aio_write+0x5d/0x25b [xfs] > [101949.327242] #2: (&(&ip->i_iolock)->mr_lock#2){++++++}, at: [] xfs_ilock+0xd1/0x138 [xfs] > [101949.327242] #3: (&(&ip->i_lock)->mr_lock){++++?-}, at: [] xfs_ilock+0x109/0x138 [xfs] > [101949.327242] > [101949.327242] stack backtrace: > [101949.327242] Pid: 1710, comm: fhgfs-storage/W Not tainted 3.9.0-debug+ #10 > [101949.327242] Call Trace: > [101949.327242] [] print_usage_bug+0x29d/0x2b8 > [101949.327242] [] ? save_stack_trace+0x38/0x59 > [101949.327242] [] mark_lock+0x1c9/0x3cb > [101949.327242] [] ? check_usage_forwards+0xe3/0xe3 > [101949.327242] [] mark_held_locks+0x125/0x14f > [101949.327242] [] ? kmem_zone_alloc+0x6c/0xcf [xfs] > [101949.327242] [] lockdep_trace_alloc+0xa5/0xc9 > [101949.327242] [] kmem_cache_alloc+0x3d/0x2cf > [101949.327242] [] ? __xfs_bmbt_get_all+0x9/0x41 [xfs] > [101949.327242] [] kmem_zone_alloc+0x6c/0xcf [xfs] > [101949.327242] [] kmem_zone_zalloc+0x1e/0x46 [xfs] > [101949.327242] [] xfs_bmbt_init_cursor+0x4a/0x12c [xfs] > [101949.327242] [] xfs_bunmapi+0x2af/0xc11 [xfs] > [101949.327242] [] xfs_bmap_punch_delalloc_range+0x107/0x13b [xfs] > [101949.327242] [] xfs_vm_kill_delalloc_range+0x61/0xa1 [xfs] > [101949.327242] [] xfs_vm_write_end+0x6e/0x86 [xfs] > [101949.327242] [] generic_file_buffered_write+0x192/0x27c > [101949.327242] [] ? file_remove_suid+0x19/0xa9 > [101949.327242] [] xfs_file_buffered_aio_write+0x1d3/0x25b [xfs] > [101949.327242] [] xfs_file_aio_write+0x106/0x172 [xfs] > [101949.327242] [] do_sync_write+0xa0/0xe0 > [101949.327242] [] vfs_write+0xc0/0x125 > [101949.327242] [] sys_write+0x60/0x94 > [101949.327242] [] system_call_fastpath+0x16/0x1b From Katherine_Gilda@urmc.rochester.edu Wed May 8 07:18:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=EMAIL_URI_PHISH,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DF34F29E0E for ; Wed, 8 May 2013 07:18:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5E08BAC001 for ; Wed, 8 May 2013 05:18:55 -0700 (PDT) X-ASG-Debug-ID: 1368015530-04cbb05fe311b660001-w1Z2WR Received: from voltage2.urmc.rochester.edu (voltage2.urmc.rochester.edu [128.151.10.20]) by cuda.sgi.com with ESMTP id J17vXIHvxgOyAjXL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 May 2013 05:18:50 -0700 (PDT) X-Barracuda-Envelope-From: Katherine_Gilda@URMC.Rochester.edu X-Barracuda-Apparent-Source-IP: 128.151.10.20 Received: from urmcht1.urmc.rochester.edu (urmcht1.urmc.rochester.edu [128.151.10.24]) by voltage2.urmc.rochester.edu (8.13.8/8.13.8) with ESMTP id r48BhmPT019790 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=FAIL); Wed, 8 May 2013 07:43:48 -0400 Received: from urmcms1.urmc-sh.rochester.edu ([0000:0000:0000:0000:0000:0000:0.0.0.1]) by urmcht1.urmc-sh.rochester.edu ([128.151.10.24]) with mapi; Wed, 8 May 2013 07:43:48 -0400 From: "Gilda, Katherine" Date: Wed, 8 May 2013 07:43:46 -0400 Subject: Security Update Thread-Topic: Security Update X-ASG-Orig-Subj: Security Update Thread-Index: AQHOS+FMP5yQkREHE0e0CQLNcU8Ing== Message-ID: <2C22E149B6CF544EB18B4AC7DDE600590DD71C37D9@URMCMS1.urmc-sh.rochester.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/alternative; boundary="_000_2C22E149B6CF544EB18B4AC7DDE600590DD71C37D9URMCMS1urmcsh_" MIME-Version: 1.0 X-Barracuda-Connect: voltage2.urmc.rochester.edu[128.151.10.20] X-Barracuda-Start-Time: 1368015530 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.97 X-Barracuda-Spam-Status: No, SCORE=1.97 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA578_CH, HTML_MESSAGE, MISSING_HEADERS, RCVD_ILLEGAL_IP, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130358 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.23 RCVD_ILLEGAL_IP Received: contains illegal IP address 1.21 MISSING_HEADERS Missing To: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header 0.50 BSF_SC7_SA578_CH Custom Rule SA578_CH To: undisclosed-recipients:; --_000_2C22E149B6CF544EB18B4AC7DDE600590DD71C37D9URMCMS1urmcsh_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable There has been an automatic security update on your email address. To compl= ete update, you are to click here. Please note that you have within 24 hours to complete this update because y= ou might lose access to your Email Box --_000_2C22E149B6CF544EB18B4AC7DDE600590DD71C37D9URMCMS1urmcsh_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
There has been an automatic security update on yo= ur email address. To complete update, you are to cl= ick here.
Please note that you have within 24 hours to comp= lete this update because you might lose access to y= our Email Box
--_000_2C22E149B6CF544EB18B4AC7DDE600590DD71C37D9URMCMS1urmcsh_-- From rjohnston@sgi.com Wed May 8 08:01:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BD57A29E0E for ; Wed, 8 May 2013 08:01:52 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.102.116]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4A51CAC002 for ; Wed, 8 May 2013 06:01:49 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 8 May 2013 08:01:48 -0500 Message-ID: <518A4CD0.4030205@sgi.com> Date: Wed, 8 May 2013 08:02:08 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Rich Johnston CC: Subject: Re: xfsdump: Release 3.1.3 References: <20130501195229.468657797@sgi.com> In-Reply-To: <20130501195229.468657797@sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Hi Folks, I would like to commit this patch today. Will someone please review this! I will update the dates for debian/changelog and doc/CHANGES. Thanks --Rich From rjohnston@sgi.com Wed May 8 08:02:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A559729E34 for ; Wed, 8 May 2013 08:02:09 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9174630407F for ; Wed, 8 May 2013 06:02:06 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 8 May 2013 08:02:06 -0500 Message-ID: <518A4CE1.5050108@sgi.com> Date: Wed, 8 May 2013 08:02:25 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Subject: Re: [PATCH] xfsprogs: 3.1.11 release References: <20130430193734.216401872@sgi.com> In-Reply-To: <20130430193734.216401872@sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Hi Folks, I would like to commit this patch today. Will someone please review this! I will update the dates for debian/changelog and doc/CHANGES and following will also be added to doc/CHANGES. + - Validate the extent count is at least within the positive + range of a signed 32 bit integer before using it. Thanks --Rich From tinguely@sgi.com Wed May 8 08:24:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E328429E0E for ; Wed, 8 May 2013 08:24:33 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8EEF58F8074; Wed, 8 May 2013 06:24:30 -0700 (PDT) Message-ID: <518A5213.60307@sgi.com> Date: Wed, 08 May 2013 08:24:35 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: Dave Jones , CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507190731.GA15528@redhat.com> <518954DE.4070803@sgi.com> <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> <518962FC.2060509@sgi.com> <20130507222256.GD24635@dastard> <51898400.8000900@sgi.com> <20130507235458.GG24635@dastard> In-Reply-To: <20130507235458.GG24635@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/07/13 18:54, Dave Chinner wrote: Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner --- fs/xfs/xfs_extfree_item.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) Looks good. Reviewed-by: Mark Tinguely From srtwetrsergfs124@hotmail.com Wed May 8 09:30:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,HTML_MESSAGE,T_FREEMAIL_DOC_PDF autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E92FE29E12 for ; Wed, 8 May 2013 09:30:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8237BAC005 for ; Wed, 8 May 2013 07:30:02 -0700 (PDT) X-ASG-Debug-ID: 1368023397-04bdf04224128b90001-w1Z2WR Received: from blu0-omc1-s27.blu0.hotmail.com (blu0-omc1-s27.blu0.hotmail.com [65.55.116.38]) by cuda.sgi.com with ESMTP id wEDFfRKLq3dYKe5F for ; Wed, 08 May 2013 07:29:57 -0700 (PDT) X-Barracuda-Envelope-From: srtwetrsergfs124@hotmail.com X-Barracuda-Apparent-Source-IP: 65.55.116.38 Received: from BLU174-W13 ([65.55.116.9]) by blu0-omc1-s27.blu0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 8 May 2013 07:29:58 -0700 X-EIP: [eIgJfae1EaXaFkLoSQmDjmb+UV449u/0] X-Originating-Email: [srtwetrsergfs124@hotmail.com] Message-ID: Content-Type: multipart/mixed; boundary="_ee2f35ed-a386-459e-b7a7-067418ecea72_" From: vszdsz mhjghgf Subject: View the attached file Date: Wed, 8 May 2013 14:29:57 +0000 X-ASG-Orig-Subj: View the attached file Importance: Normal In-Reply-To: References: MIME-Version: 1.0 X-OriginalArrivalTime: 08 May 2013 14:29:58.0074 (UTC) FILETIME=[841C41A0:01CE4BF8] X-Barracuda-Connect: blu0-omc1-s27.blu0.hotmail.com[65.55.116.38] X-Barracuda-Start-Time: 1368023397 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; --_ee2f35ed-a386-459e-b7a7-067418ecea72_ Content-Type: multipart/alternative; boundary="_1127af6b-021d-40ae-b71f-367555000fc0_" --_1127af6b-021d-40ae-b71f-367555000fc0_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable =0A= =0A= =0A= View the attached file = --_1127af6b-021d-40ae-b71f-367555000fc0_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

=0A= =0A= =0A=
View the attached file
=
= --_1127af6b-021d-40ae-b71f-367555000fc0_-- --_ee2f35ed-a386-459e-b7a7-067418ecea72_ Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="AUDITOR GENERAL DEPARTMENT.docx" UEsDBBQABgAIAAAAIQDd/JU3ZgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0 VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g7A1Y9Uv28vr7bgJEVQtBKuUSKVnvzOzsxIPR2pps CTFp70rWL3osAye90m5Wso/JS37PsoTCKWG8g5JtILHR8PpqMNkESBl1u1SyOWJ44DzJOViRCh/A UaXy0Qqk1zjjQchPMQN+2+vdcekdgsMcaww2HDxBJRYGs+c1fd4qiWASyx63B2uukokQjJYCSSlf OvWDJd8xFNTZnElzHdINyWD8IENdOU6w63sja6JWkI1FxFdhSQZf+ai48nJhaYaiG+aATl9VWkLb X6OF6CWkRJ5bU7QVK7Tb6z+qI+HGQPp/FVvcLnrSOY4+JE57OZsf6s0rUDlZESCihnZ1x0cHRLLs EsPvkLvGb1KAlHfgzbN/tgcNzEnKin6JiZgaOJvvV/Ja6JMiVjB9v5j738C7hLT5kz7+wYz9dVF3 H0gdb+634RcAAAD//wMAUEsDBBQABgAIAAAAIQAekRq38wAAAE4CAAALAAgCX3JlbHMvLnJlbHMg ogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAjJLbSgNBDIbvBd9hyH032woi0tneSKF3IusDhJnsAXcOzKTavr2jILpQ217m9OfLT9ab g5vUO6c8Bq9hWdWg2JtgR99reG23iwdQWchbmoJnDUfOsGlub9YvPJGUoTyMMaui4rOGQSQ+ImYz sKNchci+VLqQHEkJU4+RzBv1jKu6vsf0VwOamabaWQ1pZ+9AtcdYNl/WDl03Gn4KZu/Yy4kVyAdh b9kuYipsScZyjWop9SwabDDPJZ2RYqwKNuBpotX1RP9fi46FLAmhCYnP83x1nANaXg902aJ5x687 HyFZLBZ9e/tDg7MvaD4BAAD//wMAUEsDBBQABgAIAAAAIQDWZLNR+gAAADEDAAAcAAgBd29yZC9f cmVscy9kb2N1bWVudC54bWwucmVscyCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AKySzWrDMBCE74W+g9h7LTv9oYTIuZRArq37AIq9/qGyJLSbtn77CkNShwb34otgRmjmk7Sb7Xdv xCcG6pxVkCUpCLSlqzrbKHgvdnfPIIi1rbRxFhUMSLDNb282r2g0x0PUdp5ETLGkoGX2aympbLHX lDiPNu7ULvSaowyN9Lr80A3KVZo+yTDNgPwiU+wrBWFf3YMoBh+b/892dd2V+OLKY4+Wr1TILzy8 IXO8HMVYHRpkBRMzibQgr4OslgShPxQnZw4hWxSBBxM/8/wMNOq5+scl6zmOCP62j1KOazbH8LAk Q+0sF/pgJhxn6wQhLwY9/wEAAP//AwBQSwMEFAAGAAgAAAAhAP2pN6EaDwAA0UcAABEAAAB3b3Jk L2RvY3VtZW50LnhtbOxa/04byxX+v1LfYWS1EqhgGxAhl15IDbbBN2Ai26jNn7O7s/aE3Z3tzK6N I1XKa1RqJZ6FR8mT9Duzu45tjGNyb4Dcwj/G3p1fZ873ne+cmZ/fXIcBGwptpIoOSlvlaomJyFWe jPoHpctec/N1iZmERx4PVCQOSmNhSm8O//iHn0f7nnLTUEQJQxeR2R/i6SBJ4v1KxbgDEXJTVrGI 8NBXOuQJvup+JeT6Ko03XRXGPJGODGQyrmxXq69KeTfqoJTqaD/vYjOUrlZG+Qk12Ve+L12RfxQt 9CrjZi3r+ZTtiBUtAsxBRWYgY1P0Fn5rb1jioOhkuGwRwzAo3hvFq4zmaT7CfoRBNu2R0l6slSuM wa/17OGkx63qsrFzA1IXkxarTGF2zGImIZfRpBvyjrn9n2xeGZtXycauUFdfFgJbHMKXHOWN6TNm o334otc5KFWru3s7tQYcI/+pLnyeBsndJ++mfrKdvNP0ofOPbjIOBDoZ8uCg1E20ivqlin2hqaLE 4Ak3rpQHpR4fqJDTeINaZGZ+cM3ksW1qPhYdbm9nnZmPx9SVHWS7Sr9V8ingM86n8pymNdq3yN03 MXexdbEWRuihKB3WLuut3kWHnTTajU7tjNUb72qd3nmj3WO0piRbmV3K9Hq+3ZiONalzbB5sWjiO zi19Zz5Pve332net2T5iR7X22/XyvEEBa+U3tIYjJeMYu9LXPOwmXCeZkz0rv753gTuVXdZp1Rsd dlo7Oal16vPLnFnGi9/M0gUh7PjsotvYYL9cbLCji84J615c9k5ZrdlpHdfKcyBc6DONyPuRPObF QR4QT8hBeiLYZ3/Z3tuccwZiDhs/30EVTSLoNE0/A1o83NvZ297d+ml7a372z2yiJEnvxkeW/81M noI8zf57CJinYMjnK1oOm/z6B/b9169ebb3eqlb3ZtwHqJ32/afY8WeupQ4bm0g3gv15s91LePeo 2zuh5t4Ovmf+4KpAEVfbdKHZrOIvi9cPSSwoEHzgJhYaKhGpzAe+Xd3a+Vuf7EQZ14ypHpGgalpy pLiTNGrynbKo7Eum+O/R/VsTWzwwpZqDzWTcPJ2bfF9xHl9P7WgHbm9+VDtnunO0/+DU9be281f3 m+xcF1yzrtQb7Jx7PNwowvBqn93GcafRqxxftJvITNq9Vu1sZtuWE/DEc77Vk1ZYoc1kFzjU85nZ Yjk0ksmAealgAxWB01AqZCglxMJNNliLyQgFFy91BQvHRgQ+SxQbq5ShJsg4c0SSCI33vxTiymjE Q1bHPs9v0CxT7xztHu9ulabCpjPDJzIvDGSll3uiwS+WPudHupNSYTlBMJ2H/6qpHHZyup5b4OJh F6dyTwDB36DUsiqOpqLgCshBvnzaajRZUbhSPmu2Ot0ea9d6rYs2SlhUbWEXzZk8mq01y+3y0fp8 Pr1MiK06/1lPfOBqFsOMvVepZi7CPHcTJg3+TXUizJhhuUcpSsGoBzMVBfiHRSJBmfWKDSVnrQgQ ww+MG0DLE670hEcwLPoq4JgM0KsjIoEaOwI4SzSPDAZDhZwlA24HhXD9M9PSXDFfCzFruu+hMD64 hUhyFMrrFuCFLnt0CNyTEz36PBYEiRfb2wr+E+KznmqcxjCeejLBPxt0qCaBpOyEqSKjoTCJ7Gdf ERYZwdnh0RUDspKBwLGbR1AOuEmYL40LBK75MuIRgXGdjSF/KKB6eKTQN2EYrUwaUqu5SDLDYStX fFa13gP57HDtsvunner5v1jvtNXpvWfnrbMz8DK7bLd6jTrr9mq9RpfVL87Oap3uspU8BdLuYWNs IGceHWziAJS7IGN8OgKHpH1yA9DrsoU8+Zacd1ijXn/Pzi7bJ8sm+nwsvgF7d2MeSTPIQ5qFElDi 5MEPW8FGAwWEABt0XN1nVptSWPN5KIMxwY5A0waAQgfCczcZbDCcPv/E4oAjbrqao3u8VXOk94H6 A2hZzdfAcZldALFzONZiKHiA8SIFKOqhRELPIG2X2fTJN7/d+EeP1NDbVrvSaZxZkfSj4I7yBjfg MjSkZ0bIOvhQMLvZjhARE9eUeRAEjQoFriwQFNFoxDWcIo6DgpFtBvKlJwkU01NhqEHBzdSPFv00 T0+Qm0TZZQbSRJVZiociUiGlMpI7OG826ANH9KSyfKlDS9dgenJGk8axMvjl86f/TO1F9/On/2bO m7ttWPirdcsyO8XNDKzH+jPMAN2mGYo/qeGB+f5S7EV2PU6xJ57hhyNcjOiJ6yS/ZbBED9+bc9im EIh2Axdr2Om2xZukMk/VCARndceViEmnwH3lFAbWsrrKeubmHm4DUeZA/gsSDcfsA1SR8WSeRCiI HAuOlEDghABdgUCIH5tv+GDlzMNT+mmgVdof4FFqKKNJBmPyeAP0gelDwr8Z8CBgMd1eQASewi7x A5H9ETJAqvnMoY3AhrfpDeREggOPVHpAvYKEGJ64kFiY4JfJ4JFCecMmXBZ7kQqhzxIAec0TRvbt /+uQY74ZKC1ydZdrAyKuLHjQnSlTZueCR6OBDAQiG1bgga4gEF3GUc2N+sK+NU1Slugsx8UpcrGI QhbogI+4FZwZHUCJYJ+gGS3vxbg4gFwON60ErW0kMU5fgi8p5fOkJqaELLU1G5pDJARyw9ub25uZ TYYhjYLJbQKJRiLvAuyjDAZHh1TxwUWqR8gIX2joKWloh1LwOQ5JDt/KyIO6AmKBTbosCNQg1rWo RhGQNgLO4dZADjzXAgreBHZQI+tUDoEPpQsLRiPDGOHTR+GB8EvdfP707xDqj7lyKANGt5QgujOv NcINUqpn2OCL+4YaqhBBG2gTAOREmds5KbXBgGgLA82lQc41Fo5WI6qb2JiPm2eCoIWKCQQG8qoJ JznCaoqE+779HbRByRtgjJEoH9vIFuYTbWV5gFUSvJgKeI0m4eFiZOQBUDwEdg0gd51Qh1c0KkiH pA0mWQR7yzNFoQaLur0xKSBujJ9CZ2bLVRGB29IDYKiCIcyBrkBDGJOQvo2aDa0Fc05UAn6mpBFj 44golLhEqKK/EpNau2QUxfZ2bRNSGCBYcBmml88FiQ52ErXKoS0kwaCICfjq4z+lJciNmDRr/2VI axc7ggPOttUosjXmqcUm9ip0Uo0NIRYiCQcqsebDyzJyU03pLlkIS6C6F95U/u2NTqOItsW61HS5 CkYaWP4XgYhRl0bHsD0qSLAIOBtUXAxCpkO5mRuod3R1e0MGg7E4M6FCA9twyubTo0xsQG2Ql4OQ xwzXQNFTMs5GdOydupnoiGcvYu1XnhB+/eTqkWpki8XaTJ1yWlvRWVtR0Jy99TXHqXmUW60t1rq4 SlGD0xeER8IG9JBYRgDsriI1AnDy4lMnu/zJjqggtVaLxfV6xgdIioB0yoytGrI0Qvk00ZwVRJYV igKIJRXwA5WoYz62t8MxFncQFTIGyYiaYP7PFAUyoBz5FXKzDMZF2sTWwCQopHC6Hk6KKoO4HZWQ bIkkh59d0Nqkbq3xvs2fiDVpIikIb83jCV8H+WIagSUWV0Aa+eOM1GwZjsi1T0we2WnLjDBJEi3L 5qd3aFo5c+heYZaUAaYb3u8W5MZl1gNvCQppGwgtFCoswSNWoMI4tqToqyBQdEncKkaEVqyeghmF QxXNXpogV3ukq0qrVhSXG+NHOaF+hJsAi/lmsSrbKrNjlLBmAYpsJAwV4FAUEjIgZ28FiqrOFg0E IVJr04ggBhkivlPxAyHUy05yrfDAOAUHoJWVUXZcWxeFXBiRB1ukhoiRhXNCBfmQeuhrkmW9mYHM 79JVf5eLevpbCsnhdpn9PT+nTPi1Zb47ujWQV1Z300moQQYMoQfirNBpJkMj9hFi8f/AB5/Ddj0C XT5NseB/AAAA///sV11v0zAU/StWnqdtrCtDFS3a2g3xJaoVCfHoODeJWWJbttMPfg2/hV/GsZNu bTcQCGnrAy9JbMdf955z7r129PJoMTBTvBeD9tF9X2nlHVsMuBNSDpNzK3mVoF2eK7fZFm49eBTW SNvn2MW3+4YZc14Nk5PjpOsZh1U3+rC/bff0o94h+1xyz7gl5ktiUnmy5Dyz3JNjWrFKq+LIldp6 hqGa5XJJGcvIaCc9/mcr3Vj8JXjFUq5u3KtwQR+v2V02HNPgDNbJ7HqYHB/3z3rnl8/D5WLXhHLe VP7+yHSjKy7SmeqpLLZPnvvx/b+dH4Mhpx1DNOgBnDcCzJDzwJQ5eFJTJK1uqiwQgbmmKAJ9uGNv IplUFlkhVXHALIEjGAW1GMdAqT1Vjsk8UG8VOVhojQmNk4qcY3Os3oCZa5aNdaO8Xf1n2KNo4yMw zMz8qqK1PF/obPWJlr4XlHtHa/yof8jGPMotS4GfFPO8ZjW/IQALygqsgA8s06JpURkgZhorSu7w P9DW4J1ry+oWfvWK5byW1SqsYylIeAdMR95j+TXsRAs7xnNEgBgmvOXKceGlVo8Gxt8HunVQ2zFb F+jsEwTX1Mb460fvpMpgZDxltHAMmMbKeTA3FIBMqVXrkpwvmWrqFGaOjtIgP+W5FBLeZULXdaPC IrD7AfsSAu95QQfsoxCNib1RVxCKq+DkXFpIUUpYilp1IkCCq+D3JQMQqOayOtyKI0+flES7BXfG iG+1zi+tBUX8ytAwKSyvZ55b32Y3T59Bvdf6Buoe/LXgNgtcig7moKOQ8AqypcYWwX+gqdHK0a7F zUOXvFTZflzxFsc7ergnSAm55kXMWKmA/d3BPsI5HPKvzPeJl7rmG+n/XUfI/7tWFJjf6+Ji4L79 ugDY4toWl7YC08xbVAEdHHek9O5gXaFy17F70r8sTtiyrgbOcAHaG3CH7JyS0eSa7Xp4XUdMbagX ehf9cf9ZEtSjU/9tC8k2uK5LoId3ecudgQjv7HSPqPipqjbl6J+OMrrmNYrAr/yPtn1YIPbAb6Nt fQsR+V4FeNU7mbyY3FaAred+XRZu/75ZFkYKOBJ+GmLEbYW5PeH6ofVnmBTwcjY5nVydRbyYYhbq 58UweXZycnoc6Yfv/gt8x41M8YGHfbw2w6Tf/mFlUWKhrpVq73V926wox9gZinHMKolnBIx2zVwj /79rFo2PzW4roVEagL0t/sOUeAKkd6+tzDBSoUaYSi/KYdJ7Hkdh6dYSMXtMkU3Gj3VGOPoJAAD/ /wMAUEsDBBQABgAIAAAAIQAw3UMpqAYAAKQbAAAVAAAAd29yZC90aGVtZS90aGVtZTEueG1s7FlP b9s2FL8P2HcgdG9jJ3YaB3WK2LGbLU0bxG6HHmmJlthQokDSSX0b2uOAAcO6YYcV2G2HYVuBFtil +zTZOmwd0K+wR1KSxVhekjbYiq0+JBL54/v/Hh+pq9fuxwwdEiEpT9pe/XLNQyTxeUCTsO3dHvYv rXlIKpwEmPGEtL0pkd61jfffu4rXVURigmB9Itdx24uUSteXlqQPw1he5ilJYG7MRYwVvIpwKRD4 COjGbGm5VltdijFNPJTgGMjeGo+pT9BQk/Q2cuI9Bq+JknrAZ2KgSRNnhcEGB3WNkFPZZQIdYtb2 gE/Aj4bkvvIQw1LBRNurmZ+3tHF1Ca9ni5hasLa0rm9+2bpsQXCwbHiKcFQwrfcbrStbBX0DYGoe 1+v1ur16Qc8AsO+DplaWMs1Gf63eyWmWQPZxnna31qw1XHyJ/sqczK1Op9NsZbJYogZkHxtz+LXa amNz2cEbkMU35/CNzma3u+rgDcjiV+fw/Sut1YaLN6CI0eRgDq0d2u9n1AvImLPtSvgawNdqGXyG gmgookuzGPNELYq1GN/jog8ADWRY0QSpaUrG2Ico7uJ4JCjWDPA6waUZO+TLuSHNC0lf0FS1vQ9T DBkxo/fq+fevnj9Fxw+eHT/46fjhw+MHP1pCzqptnITlVS+//ezPxx+jP55+8/LRF9V4Wcb/+sMn v/z8eTUQ0mcmzosvn/z27MmLrz79/btHFfBNgUdl+JDGRKKb5Ajt8xgUM1ZxJScjcb4VwwjT8orN JJQ4wZpLBf2eihz0zSlmmXccOTrEteAdAeWjCnh9cs8ReBCJiaIVnHei2AHucs46XFRaYUfzKpl5 OEnCauZiUsbtY3xYxbuLE8e/vUkKdTMPS0fxbkQcMfcYThQOSUIU0nP8gJAK7e5S6th1l/qCSz5W 6C5FHUwrTTKkIyeaZou2aQx+mVbpDP52bLN7B3U4q9J6ixy6SMgKzCqEHxLmmPE6nigcV5Ec4piV DX4Dq6hKyMFU+GVcTyrwdEgYR72ASFm15pYAfUtO38FQsSrdvsumsYsUih5U0byBOS8jt/hBN8Jx WoUd0CQqYz+QBxCiGO1xVQXf5W6G6HfwA04WuvsOJY67T68Gt2noiDQLED0zERW+vE64E7+DKRtj YkoNFHWnVsc0+bvCzShUbsvh4go3lMoXXz+ukPttLdmbsHtV5cz2iUK9CHeyPHe5COjbX5238CTZ I5AQ81vUu+L8rjh7//nivCifL74kz6owFGjdi9hG27Td8cKue0wZG6gpIzekabwl7D1BHwb1OnPi JMUpLI3gUWcyMHBwocBmDRJcfURVNIhwCk173dNEQpmRDiVKuYTDohmupK3x0Pgre9Rs6kOIrRwS q10e2OEVPZyfNQoyRqrQHGhzRiuawFmZrVzJiIJur8OsroU6M7e6Ec0URYdbobI2sTmUg8kL1WCw sCY0NQhaIbDyKpz5NWs47GBGAm1366PcLcYLF+kiGeGAZD7Ses/7qG6clMfKnCJaDxsM+uB4itVK 3Fqa7BtwO4uTyuwaC9jl3nsTL+URPPMSUDuZjiwpJydL0FHbazWXmx7ycdr2xnBOhsc4Ba9L3Udi FsJlk6+EDftTk9lk+cybrVwxNwnqcPVh7T6nsFMHUiHVFpaRDQ0zlYUASzQnK/9yE8x6UQpUVKOz SbGyBsHwr0kBdnRdS8Zj4quys0sj2nb2NSulfKKIGETBERqxidjH4H4dqqBPQCVcd5iKoF/gbk5b 20y5xTlLuvKNmMHZcczSCGflVqdonskWbgpSIYN5K4kHulXKbpQ7vyom5S9IlXIY/89U0fsJ3D6s BNoDPlwNC4x0prQ9LlTEoQqlEfX7AhoHUzsgWuB+F6YhqOCC2vwX5FD/tzlnaZi0hkOk2qchEhT2 IxUJQvagLJnoO4VYPdu7LEmWETIRVRJXplbsETkkbKhr4Kre2z0UQaibapKVAYM7GX/ue5ZBo1A3 OeV8cypZsffaHPinOx+bzKCUW4dNQ5PbvxCxaA9mu6pdb5bne29ZET0xa7MaeVYAs9JW0MrS/jVF OOdWayvWnMbLzVw48OK8xjBYNEQp3CEh/Qf2Pyp8Zr926A11yPehtiL4eKGJQdhAVF+yjQfSBdIO jqBxsoM2mDQpa9qsddJWyzfrC+50C74njK0lO4u/z2nsojlz2Tm5eJHGzizs2NqOLTQ1ePZkisLQ OD/IGMeYz2TlL1l8dA8cvQXfDCZMSRNM8J1KYOihByYPIPktR7N04y8AAAD//wMAUEsDBBQABgAI AAAAIQBwL9lh0AIAAD4GAAARAAAAd29yZC9zZXR0aW5ncy54bWycVNtunDAQfa/Uf0A8dxf2mhSF ROluthclbVXSl74NYFgrvsk2S7Zf3zHgkrRpFPWJ8Zkzx+O5cHZxz1lwINpQKdJwNo3DgIhCllTU afj9djc5DQNjQZTApCBpeCQmvDh//eqsTQyxFmkmQAlhEpmGjRaJKfaEg5lwWmhpZGUnheSJrCpa kOETDhE6DffWqiSKhqCpVESgWiU1B2umUtdRH7mVRcOJsNE8jteRJgwsJmz2VBmvxv9XDa/ae5HD c484cOZ57Sx+jjk8t5W6/B3xkvRcgNKyIMZgZTnrn8uBCi9j2Et0+npe01yDPj4QOce2/ZSSB22i iC6woNjzOA4j58CLZZVZsATdRhHGuiEoGAG8vk1qDZwDNq1HupiSVNAwewt5ZqVC0gEwwZP5IFns QUNhic4UFKi2kcJqyTyvlJ+l3UiuND64TwKHRYHttHEmS+MSc8Y3Ka0Pi+PVyeLyat1HOO/oia9O Npdvn/L8O2a3mG9Pty4m6i/DW3nixuKr9tYOMw94/7wN8FxTCG7c4GAUT3J9944K788JDjB56Mma 3Dsnk95hODC2w+p0AiU1akuqzmY3oOtRrSslT/STKNb/U+GlXT+Jfq9lo/o7Wg3qoygR9pTZcjno UWGvKfe4afLMRwmcmQeuRpRfDtoJRmNR2sTimhNXlWsQta8/EZMfl47aJgXTmfsVkBtQCluPlLye pSGj9d7O3DxZPJWg77pDXs8H37zz4cn5ugMU7mXIHgxH6E1kDcaILTy2GLGlx5YjtvLYasTWHls7 bH/EJcEluMOV86bDK8mYbEn5wYNp+BfUF8HsQRHsq9sRHCqZdMCwNCY4JOQeN5CU1OJfVtGSw30a zuNV16OBzeAoG/uI65QcWT1CgxIs4D53rXoU3A32H7m0SUkKikOYHXk+ruS0T5xRYzOicHut1Pjk bq3fdMrjj//8FwAAAP//AwBQSwMEFAAGAAgAAAAhAFackrTGAQAAGAYAABIAAAB3b3JkL2ZvbnRU YWJsZS54bWy8lG9vmzAQxt9P2ndAfr9iCMnaqKRKs+blXlTpB7gQEyz5D/K5Yf32O2xKpUbpkk0d SEg8Zx7OP9/d7d0vrZKDcCitKVl2xVkiTGV30uxL9rRZf7tmCXowO1DWiJK9CGR3i69fbrt5bY3H hL43OHcla7xv52mKVSM04JVthaFYbZ0GT69un9q6lpX4YatnLYxPc85nqRMKPP0bG9kiG9y6c9w6 63ats5VApGS1in4apGGLIbukmxvQlPUKlNw6GQItGIsio9gBVMl4ztd8Ss/+Lvikf7K0d6gacCj8 uJBHuQYt1curip1EjIFW+qp51Q/gJGyViCGUewo845aX7CHjnOfrNYtKVrKChOVqVHJKKl43w5rJ qNDxUGLBJyzJboIPKeQzfBXyTOP5HJHYSC0w+Sm65NFqiKiOieR8RiSmxKMnM7mIiAu+geC5RCjx fDnun3ayIuX7dZEN+7+ISPQ5n8iSDkqdqIx74lCEyhjq43Mr4xSHyf/gsIGGTu5DELEkeiCf3yL5 w/uCmPHp/XsQ+Z9aJOPZpQWxAk2z4hSJviUih75FLiPxd61xPCx4MbJ5a40wGmjE/MuwGKYGLn4D AAD//wMAUEsDBBQABgAIAAAAIQBK2IqSuwAAAAQBAAAUAAAAd29yZC93ZWJTZXR0aW5ncy54bWyM zsFqwzAMxvF7Ye8QdF+d9TBKSFIooy/Q9QFcR2kMsWQkbd729DVsl916FJ/48e8PX2ltPlE0Mg3w sm2hQQo8RboNcHk/Pe+hUfM0+ZUJB/hGhcP4tOlLV/B6RrP6qU1VSDsZYDHLnXMaFkxet5yR6jaz JG/1lJvjeY4B3zh8JCRzu7Z9dYKrt1qgS8wKf1p5RCssUxYOqFpD0vrrJR8JxtrI2WKKP3hiOQoX RXFj7/61j3cAAAD//wMAUEsDBBQABgAIAAAAIQAf/wWK4wEAANsDAAAQAAgBZG9jUHJvcHMvYXBw LnhtbCCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxTy27bMBC8F+g/CLrH9Ktp YqwZFA6KHNrGgJXkzFIriShFEiQjxP36LqValtueqtPsQ7Oj2RXcvbU669AHZc02X8zmeYZG2lKZ eps/FZ+vbvIsRGFKoa3BbX7EkN/x9+9g761DHxWGjChM2OZNjG7DWJANtiLMqGyoUlnfikihr5mt KiXx3srXFk1ky/n8muFbRFNieeVGwnxg3HTxf0lLK5O+8FwcHQnmUGDrtIjIvyU5GtiYgMJGoQvV Il+sKD9GsBc1Br4ANgB4sb4M/MPtHNgAYdcIL2Qk9/hqdb0GNknAJ+e0kiKSsfyrkt4GW8Xssbcg SwTApi1AthxQvnoVj5xGTEP4ogxJWd4AGxBp86L2wjWBf0wCxwgOUmjc0cfzSuiAwM4JeECRFrsX ihRDFzcdymh9FtRPWu0yz76LgMmybd4Jr4SJZF1qG4Ieaxei54WKmripNsQ9nLZNsVonF6mXwGVj Sg4aqHCprp8QHiv6tvgPsYup2F7DIHUiZwLHGX+w7mzrhDnS8BGRwT/CkyvsfTqX3x5eJid7f1Gx OTghaTur2zWt4nwBkxIc6FCwpJWeCM8JeCC/vU5T6V1TY3nq+buQbup5+Ff5Yjmb09Mf0SlHlzD+ RPwXAAAA//8DAFBLAwQUAAYACAAAACEAGlcWnkkBAABzAgAAEQAIAWRvY1Byb3BzL2NvcmUueG1s IKIEASigAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjJJRS8MwEMffBb9DyXubZps6QtuB ykBwIDhRfAvJrQtr0pDEdfv2pu1WO/TBx7v73+/+d0m2OKgq2oN1stY5IkmKItC8FlKXOXpbL+M5 ipxnWrCq1pCjIzi0KK6vMm4ory282NqA9RJcFEjaUW5ytPXeUIwd34JiLgkKHYqb2irmQ2hLbBjf sRLwJE1vsQLPBPMMt8DYDER0Qgo+IM2XrTqA4BgqUKC9wyQh+EfrwSr3Z0NXGSmV9EcTdjrZHbMF 74uD+uDkIGyaJmmmnY3gn+CP1fNrt2osdXsrDqjIBKfcAvO1LZ52kOFR3N6uYs6vwpk3EsT9sZf8 TrdKC3vZvk5BMjwOw4RuoX4MiChYpP1C58r79OFxvUTFJCXTOJ3FZL4md3Q2oWn62Tq66G8t9wl1 8vVv4s38kngGFJ3jy29SfAMAAP//AwBQSwMEFAAGAAgAAAAhAD8HVu2YCAAAgkQAAA8AAAB3b3Jk L3N0eWxlcy54bWy8XN9zmzgQfr+Z+x8Y3ntJ7NS+Zup20rS9dqZN0ziZm7k3DHLMBYMP4SbpX3+r Fcj8sGDXkD45CLTfrvbTtzjR5vXbx3Xk/BCpDJN45p78cew6IvaTIIzvZu7tzccXf7qOzLw48KIk FjP3SUj37Zvff3v9cCazp0hIBwzE8iyduass25wdHUl/Jdae/CPZiBjuLZN07WVwmd4dJctl6Iv3 ib9dizg7Gh0fT45SEXkZgMtVuJFubu2BYu0hSYNNmvhCSvB2HWl7ay+M3TfgXpD478XS20aZVJfp VZpf5lf48TGJM+k8nHnSD8MbcBxCXIdxkn46j2Xowh3hyexcht7emyv11N47vsxK1t6FQegeKUT5 E2z+8KKZOxoVIxfKg8pY5MV3xZiIX/xzXvZk5sLQ7VwNLcDuzPXSF/NzZewIwyw+S+FuKsHDFbqy 8XxYODDjLTMBCYR8KKNRqBI9mk6Ki+ttBAPeNktyEDQAYGWzcFlbccgrZHmuWQJ3xfJL4t+LYJ7B jZmLWDB4+/kqDZM0zJ5m7qtXChMG52IdfgqDQChS5mO38SoMxN8rEd9KEezGv39EiuUW/WQbZ+D+ ZIosiGTw4dEXG0UxMB17KsOXakKkzMoSDjq0DXfe6IEaKg7+V0Ce6BzuRVkJT20jB/1vBcKot72B RiqicgBol+XruL+J0/4mXvY3geTttxbT/l6AePbNiOZGiZX0pGaJr8lXXofxqxbKqhkNFnXOaJCm c0aDI50zGpTonNFgQOeMRsI7ZzTy2zmjkc7WGb6HwlVn0RhXg7Sxb8IsEmp+qwCd9JS6vNQ4V17q 3aXeZuWowlp3u00s3yXBk3MjHhuTjlvoOt8uMlp8qMGHK6zxrrk72vzbTWtskbZp8yxN4rvOpPXM 2Yf1ZuXJUHbijHoC3XiLSDh/pWHQCfVSb49GJcRXp71F9iryfLFKokCkO/ow5l8mzly/B3U615ND X8K7VebMV/hS0Ak2sSy6fSW0/S+hxC3Uut0nllC6jJNyONEFhJGDryIIt+tiaQjvSxO9nQ6HQBfb l+hUpaipGPYlyqNQCaCEoAsaPwS0T/Bflz++fZVjiv+6WB5on+C/Lq0H2kd+tOeXrTTvvfTeIW2v KXvvXiRRki63UbEHOuVhyt7BBoIWAnsTG/skkZiyd3BFPp1z34fvlhSesnOx01EGCjsdGgU3Gz0W dlLqysqIiJ2gGtaIgdVPaxlAbNG9Fj9C9asxbjFAlTZvw53beWxZAShBpLf879sk637LH1k0j4ry OYZf6Ejh0NDGlp1HRSvXUw6Z+hU+Bpn6VUAGUL9SyACy8MP+zmNqIh2kf3FkYLFl2VQx3MBkZZ6y ldkA8UrAQHWT8P5l2b12LjTrJgGFnaBm3SSgsLNTq2UnBeUIWIPVTQKWpWrYc1TWVE5Q7LpZBjLi TYhoGPEmAA0j3gSgYcSbANRfvLtBhhNvAhZbG4ymlsWbAISPcL7qG6CyeBOA2Nqg1S7/nVEhQmil /cvtAOJNQGEnqCneBBR2dmziTcDCRzhMqGEZqSNgDSPeBKBhxJsANIx4E4CGEW8C0DDiTQDqL97d IMOJNwGLrQ1GU8viTQBiy4MBKos3AQgf4WjDXvHGXf/s4k1AYSeoKd4EFHZ2aoJqXlIJWOwE1bCM eBOw8BEOGXIsJDcnqGHEmxDRMOJNABpGvAlAw4g3Aai/eHeDDCfeBCy2NhhNLYs3AYgtDwaoLN4E ILY27BVv3IzPLt4EFHaCmuJNQGFnpyaoRucIWOwE1bCMeBOwkC+9xZsAhI8cCsSJaBjxJkQ0jHgT gIYRbwJQf/HuBhlOvAlYbG0wmloWbwIQWx4MUFm8CUBsbdgr3rhHnl28CSjsBDXFm4DCzk5NUI14 E7DYCaphGakjYA0j3gQgJGZv8SYA4SMHAOEu4qRpGPEmRDSMeBOA+ot3N8hw4k3AYmuD0dSyeBOA 2PJggMriTQBia4M61AvnRcnHU08sJKCeMyhONZABR5YkUQHzAK/FUqTQayW6T4f0BCwiZCBa6EEN 8V2S3Du0o+djC0HIUOEiChM8dP6Ep3RKrRLjacvh8ZtvF84n3aLTmIeUqp68gf6mckMTNlCp1ibw M3vaQFPRpjj7rqxBC5PqPMublLBT7jO0LOWNR2qy6kSCB7HtKx/Gv9vmqPgzdOUFxTPHxy+n4/MP Ex2RrYUL//CTN3Cdmov9DVx5sxh8VLrgZu5NuIa+vkvx4Fwnaw/PPhVdcHtvYhfc3ju+bA5jZKU2 uFMdkfxZaoPLx2ptcNDzBpNLTW64rs1M+CtIhQ8tbS2ZyDsWzBEt7Feo58XS1oAR7Hpqigzl7Q27 V0z9XOUIq/bf4nemDsq3+IwH6Vsp5OAjekGbDkJ3HbrU5aE5dIZPZ4tI9wvCD59jxUfozkRqad4H j542C/cvRBR99bC7MEs29kcjscz03ZNjfFmomVokWZas7fNTPEuPnuwzABQpO6MvVRDwk2Xt4+16 IVJo12tZ/8tEFVlsK6zuXn0sWKfbyA94j5ubuup23yp8NlqSd4nUOZsPozMLDxolv6m+R/RkL+fx QZroQAutQlto2xcSPsFpHLU7X5FF47zqjMFun7r7pmVGc6oWQVkoQeXui8gKcxew8/dy3K6keVB1 DTxPQ90hmoubuVaSpi9wGUpCtq+fF9t8uhepkmF/K4H8c1Vc6vWjEqd16ZzdMtTWz86Afas58EpS aoh9mUvVoeidqjZJU6tDOyFHje1tGAm9X5r51V3VxcnRLhs14f0VpMzXqlJdn4mUOlA7K0dD8bLY aKZ3G9Ny+Gr2I2ahQdAmlyvCL6LquIWq44OoOj6Aqvmb6L9+sQ5Qu1cKHVQvv9dTYhd612G9qfwD BeuCDy+4emXs3B4Pxe08cYMpRR9u8xdefUeq/OcKmygX7wvyzf8AAAD//wMAUEsBAi0AFAAGAAgA AAAhAN38lTdmAQAAIAUAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwEC LQAUAAYACAAAACEAHpEat/MAAABOAgAACwAAAAAAAAAAAAAAAACfAwAAX3JlbHMvLnJlbHNQSwEC LQAUAAYACAAAACEA1mSzUfoAAAAxAwAAHAAAAAAAAAAAAAAAAADDBgAAd29yZC9fcmVscy9kb2N1 bWVudC54bWwucmVsc1BLAQItABQABgAIAAAAIQD9qTehGg8AANFHAAARAAAAAAAAAAAAAAAAAP8I AAB3b3JkL2RvY3VtZW50LnhtbFBLAQItABQABgAIAAAAIQAw3UMpqAYAAKQbAAAVAAAAAAAAAAAA AAAAAEgYAAB3b3JkL3RoZW1lL3RoZW1lMS54bWxQSwECLQAUAAYACAAAACEAcC/ZYdACAAA+BgAA EQAAAAAAAAAAAAAAAAAjHwAAd29yZC9zZXR0aW5ncy54bWxQSwECLQAUAAYACAAAACEAVpyStMYB AAAYBgAAEgAAAAAAAAAAAAAAAAAiIgAAd29yZC9mb250VGFibGUueG1sUEsBAi0AFAAGAAgAAAAh AErYipK7AAAABAEAABQAAAAAAAAAAAAAAAAAGCQAAHdvcmQvd2ViU2V0dGluZ3MueG1sUEsBAi0A FAAGAAgAAAAhAB//BYrjAQAA2wMAABAAAAAAAAAAAAAAAAAABSUAAGRvY1Byb3BzL2FwcC54bWxQ SwECLQAUAAYACAAAACEAGlcWnkkBAABzAgAAEQAAAAAAAAAAAAAAAAAeKAAAZG9jUHJvcHMvY29y ZS54bWxQSwECLQAUAAYACAAAACEAPwdW7ZgIAACCRAAADwAAAAAAAAAAAAAAAACeKgAAd29yZC9z dHlsZXMueG1sUEsFBgAAAAALAAsAwQIAAGMzAAAAAA== --_ee2f35ed-a386-459e-b7a7-067418ecea72_-- From sandeen@sandeen.net Wed May 8 09:34:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9D57B29E12 for ; Wed, 8 May 2013 09:34:18 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7B36E304064 for ; Wed, 8 May 2013 07:34:15 -0700 (PDT) X-ASG-Debug-ID: 1368023654-04bdf042261290a0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 15deIZNqOeZW5tHS for ; Wed, 08 May 2013 07:34:14 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id C0E43651AC62; Wed, 8 May 2013 09:34:13 -0500 (CDT) Message-ID: <518A6265.5040404@sandeen.net> Date: Wed, 08 May 2013 09:34:13 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 1/2] xfstests: fix incorrect redirect in generic/233 References: <1367993066-9313-1-git-send-email-david@fromorbit.com> <1367993066-9313-2-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 1/2] xfstests: fix incorrect redirect in generic/233 In-Reply-To: <1367993066-9313-2-git-send-email-david@fromorbit.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368023654 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620b, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.50 BSF_SC0_SA620b Custom Rule SA620b On 5/8/13 1:04 AM, Dave Chinner wrote: > From: Dave Chinner > > generic/233 attempts to direct output to tee, but instead of using a > pipe it uses an append operator. Hence it leaves a file named "tee" > in the root directory of the xfstests execution path. Just direct > the output to the $seqres.full file rather than trying to tee it > into the test output as well. > > Reported-by: "Michael L. Semon" > Signed-off-by: Dave Chinner Reviewed-by: Eric Sandeen > --- > tests/generic/233 | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tests/generic/233 b/tests/generic/233 > index 2b6cd2f..58b3672 100755 > --- a/tests/generic/233 > +++ b/tests/generic/233 > @@ -62,7 +62,7 @@ _fsstress() > -f rename=10 -f fsync=2 -f write=15 -f dwrite=15 \ > -n $count -d $out -p 7` > > - echo "fsstress $args" >> tee -a $seqres.full > + echo "fsstress $args" >> $seqres.full > if ! su $qa_user -c "$FSSTRESS_PROG $args" | tee -a $seqres.full | _filter_num > then > echo " fsstress $args returned $?" > From sandeen@sandeen.net Wed May 8 09:37:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4C9B729E07 for ; Wed, 8 May 2013 09:37:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1C2628F8074 for ; Wed, 8 May 2013 07:37:27 -0700 (PDT) X-ASG-Debug-ID: 1368023846-04bdf04226129410001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id E5YCeP350nCyTP0I for ; Wed, 08 May 2013 07:37:26 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 5986F651AC62; Wed, 8 May 2013 09:37:26 -0500 (CDT) Message-ID: <518A6325.3030809@sandeen.net> Date: Wed, 08 May 2013 09:37:25 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 2/2] xfstests: quota not supported on realtime filesystems References: <1367993066-9313-1-git-send-email-david@fromorbit.com> <1367993066-9313-3-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfstests: quota not supported on realtime filesystems In-Reply-To: <1367993066-9313-3-git-send-email-david@fromorbit.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368023846 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/8/13 1:04 AM, Dave Chinner wrote: > From: Dave Chinner > > Realtime XFS filesystems do not support quotas, so quota tests > always fail on such filesystems. Add a check to _require_quota to > detect this situation and notrun the quota tests... > > Signed-off-by: Dave Chinner Reviewed-by: Eric Sandeen (PS why is USE_EXTERNAL a thing? if it's set, shouldn't it be used?) -Eric > --- > common/quota | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/common/quota b/common/quota > index fd5374f..3550cd4 100644 > --- a/common/quota > +++ b/common/quota > @@ -40,6 +40,12 @@ _require_quota() > if [ ! -f /proc/fs/xfs/xqmstat ]; then > _notrun "Installed kernel does not support XFS quotas" > fi > + if [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ]; then > + _notrun "Quotas not supported on realtime test device" > + fi > + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then > + _notrun "Quotas not supported on realtime scratch device" > + fi > ;; > *) > _notrun "disk quotas not supported by this filesystem type: $FSTYP" > From sandeen@sandeen.net Wed May 8 09:43:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9F30429E0E for ; Wed, 8 May 2013 09:43:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1DBD6AC009 for ; Wed, 8 May 2013 07:43:52 -0700 (PDT) X-ASG-Debug-ID: 1368024231-04cb6c53a4122850001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id o9nTjkQ26t2LIFbX for ; Wed, 08 May 2013 07:43:51 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id DD0C963C5FF1; Wed, 8 May 2013 09:43:50 -0500 (CDT) Message-ID: <518A64A6.1060505@sandeen.net> Date: Wed, 08 May 2013 09:43:50 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: rjohnston@sgi.com CC: xfs@oss.sgi.com Subject: Re: xfsdump: Release 3.1.3 References: <20130501195229.468657797@sgi.com> <20130501195229.468657797@sgi.com> X-ASG-Orig-Subj: Re: xfsdump: Release 3.1.3 In-Reply-To: <20130501195229.468657797@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368024231 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/1/13 2:52 PM, rjohnston@sgi.com wrote: > Update version numbers and changelog. > > Signed-off-by: Rich Johnston Fine by me. TBH internal sgi review would be fine too on release process stuff like this, the deadline for feedback has passed, so, with proper date/time updates, Reviewed-by: Eric Sandeen > --- > v3: Updated doc/CHANGES since v2 > v2: fix spelling errors reported by Nathan. my goodness! > > VERSION | 2 +- > configure.ac | 2 +- > debian/changelog | 6 ++++++ > doc/CHANGES | 11 +++++++++++ > 4 files changed, 19 insertions(+), 2 deletions(-) > > Index: b/VERSION > =================================================================== > --- a/VERSION > +++ b/VERSION > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=1 > -PKG_REVISION=2 > +PKG_REVISION=3 > PKG_BUILD=1 > Index: b/configure.ac > =================================================================== > --- a/configure.ac > +++ b/configure.ac > @@ -1,4 +1,4 @@ > -AC_INIT([xfsdump], [3.1.2]) > +AC_INIT([xfsdump], [3.1.3]) > AC_PREREQ(2.50) > AC_CONFIG_AUX_DIR([.]) > AC_CONFIG_MACRO_DIR([m4]) > Index: b/debian/changelog > =================================================================== > --- a/debian/changelog > +++ b/debian/changelog > @@ -1,3 +1,9 @@ > +xfsdump (3.1.3) unstable; urgency=low > + > + * New upstream release > + > + -- Nathan Scott Tue, 19 Mar 2013 14:20:01 +1100 > + > xfsdump (3.1.1) unstable; urgency=low > > * New upstream release > Index: b/doc/CHANGES > =================================================================== > --- a/doc/CHANGES > +++ b/doc/CHANGES > @@ -1,3 +1,14 @@ > +xfsdump-3.1.3 (1 May 2013) > + - Fix a segfault in xfsrestore when a path name is too long, > + thanks to Nigel Tamplin. > + - Fix a backward compatibility problem. Dumps created with > + version 3.1.2 where extended attributes are in use failed > + to restore with v3.1.0 due to file header checksum errors. > + Thanks to Fugazzi for reporting. > + - Refactored release scripts to conform to using git archive. > + - Changed the build process so that 'make deb' uses the same > + process of creating a source tree as the release script. > + > xfsdump-3.1.2 (13 December 2012) > - Update release script to create a source tarball. > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From filippo.stenico@gmail.com Wed May 8 12:30:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 46C6929E12 for ; Wed, 8 May 2013 12:30:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E2D0D30406B for ; Wed, 8 May 2013 10:30:49 -0700 (PDT) X-ASG-Debug-ID: 1368034246-04bdf04225131a70001-NocioJ Received: from mail-la0-f48.google.com (mail-la0-f48.google.com [209.85.215.48]) by cuda.sgi.com with ESMTP id QDh53RgTuiTpqBzj (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 08 May 2013 10:30:47 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.48 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.48] Received: by mail-la0-f48.google.com with SMTP id eg20so1969926lab.7 for ; Wed, 08 May 2013 10:30:46 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.48] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.48] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=3eEZNd6sxAm22ev4Q3gIuXU5MlStPQUiM+G1QcWMOnY=; b=mVm6V3TIhsD9XI/dxFdRPh36esJs3k2e3wnSROCxWl7ZsnhCwA7l1X9B56wi3/Qmxh M/OeW2CpNJ1bga2JCYCYYc0vJE1Hg34rIrnYIG44HW7PU/KR7yP0koC5YG85WCMgLZPQ j3d9X9Z0z7HtZff1HGX9T1BekuwuMFPDq9fpZ4rEa4KaUIGE9tcXMtFHZwu/Ybhp3cQI 1jGttnWvnIHoERNeLvvt116y3/6MFUrXpgkQEJdbpJKRD2TP7Ah4oyLdNTS0LBR6dGap VBEEmxN/RZeT8DyHJk7AyUXKUVnFSzkBjTru1cLkSbImaIkxrCBBo4OeKy2B5U7BkoJY z7XA== X-Received: by 10.152.3.201 with SMTP id e9mr3632472lae.12.1368034246028; Wed, 08 May 2013 10:30:46 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Wed, 8 May 2013 10:30:05 -0700 (PDT) In-Reply-To: References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> From: Filippo Stenico Date: Wed, 8 May 2013 19:30:05 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Eric Sandeen X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=089e013d14ca46746104dc384bf4 X-Barracuda-Connect: mail-la0-f48.google.com[209.85.215.48] X-Barracuda-Start-Time: 1368034247 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130378 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --089e013d14ca46746104dc384bf4 Content-Type: text/plain; charset=ISO-8859-1 Hello, -m option seems not to handle the excessive memory consumption I ran into. I actually ran xfs_repair -vv -m1750 and looking into kern.log it seems that xfs_repair invoked oom killer, but was killed itself ( !! ) This is last try to reproduce segfault: xfs_repair -vv -P -m1750 On Tue, May 7, 2013 at 8:20 PM, Filippo Stenico wrote: > xfs_repair -L -vv -P /dev/mapper/vg0-lv0 does the same kernel panic as my > first report. No use to double info on this. > I'll try xfs_repair -L -vv -P -m 2000 to keep memory consuption at a limit. > > > > On Tue, May 7, 2013 at 3:36 PM, Filippo Stenico > wrote: > >> >> >> On Tue, May 7, 2013 at 3:20 PM, Eric Sandeen wrote: >> >>> On 5/7/13 4:27 AM, Filippo Stenico wrote: >>> > Hello, >>> > this is a start-over to try hard to recover some more data out of my >>> raid5 - lvm - xfs toasted volume. >>> > My goal is either to try the best to get some more data out of the >>> volume, and see if I can reproduce the segfault. >>> > I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to >>> put original metadata on the cloned raid volume i had zeroed the log on >>> before via xfs_repair -L (i figured none of the actual data was modified >>> before as I am just working on metadata.. right?). >>> > Then I ran a mount, checked a dir that I knew it was corrupted, >>> unmount and try an xfs_repair (commands.txt attached for details) >>> > I went home to sleep, but at morning I found out that kernel paniced >>> due "out of memory and no killable process". >>> > I ran repair without -P... Should I try now disabling inode prefetch? >>> > Attached are also output of "free" and "top" at time of panic, as well >>> as the output of xfs_repair and strace attached to it. Dont think gdb >>> symbols would help here.... >>> > >>> >>> > >>> >>> Ho hum, well, no segfault this time, just an out of memory error? >>> >> That's right.... >> >>> No real way to know where it went from the available data I think. >>> >>> A few things: >>> >>> > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ >>> > mount: Structure needs cleaning >>> >>> mount failed? Now's the time to look at dmesg to see why. >>> >> >> From attached logs it seems to be: >>> >>> > XFS internal error xlog_valid_rec_header(1) at line 3466 of file >>> [...2.6.32...]/fs/xfs/xfs_log_recover.c >>> > XFS: log mount/recovery failed: error 117 >>> >>> > root@ws1000:~# mount >>> >>> >>> >>> > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ >>> > root@ws1000:~# mount | grep raid0 >>> > /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota) >>> >>> Uh, now it worked, with no other steps in between? That's a little odd. >>> >> Looks odd to me too. But i just copied the commands issued as they where >> on my console... so yes, nothing in between. >> >>> It found a clean log this time: >>> >>> > XFS mounting filesystem dm-1 >>> > Ending clean XFS mount for filesystem: dm-1 >>> >>> which is unexpected. >>> >>> So the memory consumption might be a bug but there's not enough info to >>> go on here. >>> >>> > PS. Let me know if you wish reports like this one on list. >>> >>> worth reporting, but I'm not sure what we can do with it. >>> Your storage is in pretty bad shape, and xfs_repair can't make something >>> out >>> of nothing. >>> >>> -Eric >>> >> >> I still got back around 6TB out of 7.2 TB of total data stored, so this >> tells xfs is reliable even when major faults occur... >> >> Thanks anyways, I am trying with a "-L" repair, at this step I expect >> another fail (due out of memory or something, as it happened last time) >> then I will try with "xfs_repair -L -vv -P" and I expect to see that >> segfault again. >> >> Will report next steps, maybe something interesting for you will pop >> up... for me is not a waste of time, since this last try is worth being >> made. >> >> -- >> F > > > > > -- > F -- F --089e013d14ca46746104dc384bf4 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,
-m option seems not to handle the excessive memory consumption I = ran into.
I actually ran xfs_repair -vv -m1750 and=A0 looking into kern.= log it=A0 seems that xfs_repair invoked oom killer, but was killed itself (= !! )

This is last try to reproduce segfault:
xfs_repair -vv -P -m1750
On Tue, May 7, 2013 at 8:20 PM, Filippo St= enico <filippo.stenico@gmail.com> wrote:
xfs_repair -L -vv -P /dev/mapper/vg0-lv0 doe= s the same kernel panic as my first report. No use to double info on this.<= br> I'll try xfs_repair -L -vv -P -m 2000 to keep memory consuption at a li= mit.



On Tue, May 7, 2013 at 3:36 PM, Filippo Stenico <filippo.stenico@g= mail.com> wrote:


On Tue, May 7, 2013 at 3:20 PM, Eri= c Sandeen <sandeen@sandeen.net> wrote:
On 5/7/13 4:27 AM, Filippo Stenico wrote:
> Hello,
> this is a start-over to try hard to recover some more data = out of my raid5 - lvm - xfs toasted volume.
> My goal is either to try the best to get some more data out of the vol= ume, and see if I can reproduce the segfault.
> I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to = put original metadata on the cloned raid volume i had zeroed the log on bef= ore via xfs_repair -L (i figured none of the actual data was modified befor= e as I am just working on metadata.. right?).
> Then I ran a mount, checked a dir that I knew it was corrupted, unmoun= t and try an xfs_repair (commands.txt attached for details)
> I went home to sleep, but at morning I found out that kernel paniced d= ue "out of memory and no killable process".
> I ran repair without -P... Should I try now disabling inode prefetch?<= br> > Attached are also output of "free" and "top" at ti= me of panic, as well as the output of xfs_repair and strace attached to it.= Dont think gdb symbols would help here....
>

>

Ho hum, well, no segfault this time, just an out of memory error?
=
That's right....
No real way to know where it went from the available data I think.

A few things:

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> mount: Structure needs cleaning

mount failed? =A0Now's the time to look at dmesg to see why.
=A0
>From attached logs it seems to be:

> XFS internal error xlog_valid_rec_header(1) at line 3466 of file [...2= .6.32...]/fs/xfs/xfs_log_recover.c
> XFS: log mount/recovery failed: error 117

> root@ws1000:~# mount

<no raid0 mounted>

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> root@ws1000:~# mount | grep raid0
> /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota= )

Uh, now it worked, with no other steps in between? =A0That's a little o= dd.
Looks odd to me too. But i just copied the commands= issued as they where on my console... so yes, nothing in between.=A0
<= /div>
It found a clean log this time:

> XFS mounting filesystem dm-1
> Ending clean XFS mount for filesystem: dm-1

which is unexpected.

So the memory consumption might be a bug but there's not enough info to= go on here.

> PS. Let me know if you wish reports like this one on list.

worth reporting, but I'm not sure what we can do with it.
Your storage is in pretty bad shape, and xfs_repair can't make somethin= g out
of nothing.

-Eric
=A0
I still got b= ack around 6TB out of 7.2 TB of total data stored, so this tells xfs is rel= iable even when major faults occur...

Thanks anyways, I am trying wi= th a "-L" repair, at this step I expect another fail (due out of = memory or something, as it happened last time) then I will try with "x= fs_repair -L -vv -P" and I expect to see that segfault again.

Will report next steps, maybe something interesting for you will pop up= ... for me is not a waste of time, since this last try is worth being made.=

--
F



--
F



--
F --089e013d14ca46746104dc384bf4-- From filippo.stenico@gmail.com Wed May 8 12:43:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D0A6429E12 for ; Wed, 8 May 2013 12:43:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7906F30406A for ; Wed, 8 May 2013 10:43:11 -0700 (PDT) X-ASG-Debug-ID: 1368034988-04bdf042261321b0001-NocioJ Received: from mail-la0-f47.google.com (mail-la0-f47.google.com [209.85.215.47]) by cuda.sgi.com with ESMTP id 21MlCw0gAGxMo7MN (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 08 May 2013 10:43:09 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.47 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.47] Received: by mail-la0-f47.google.com with SMTP id fh20so2022780lab.34 for ; Wed, 08 May 2013 10:43:07 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.47] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.47] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=dxDjSvpJON9an+3tUP8zzHNrnDF0lKqoCAdnbHB2DTo=; b=Un+QozZXYkID5xlM7Be4CfJ8jBRlRO6MtAbcZm60jfFMLtKSxdbJC8Firl9oNlpoi0 PUQslgXJJMbDgt/FGxGowfIlcAemn18RJhAXYmW1MGHTi730nkpNsHnr5wuXkPIdXPKx 5bkWKm95Ym9b9eoqHerRybsV3o+zxFNXkFQdR1GNs3bTbMdyl4tye5KtCeHmuZtMNCgY 3YCeDYvY9mU5OQYJSHQ6vmXyjfpRVnyJBHPuC4liGbVgHGPEboTu/j97ZDZ4NO39au5L uO4aGZ34f9rRf9AysZw6Y3XHTu+6Hx9Kz+D5H1Pz9gQjK9bk4WuVuQXhegw9lLRaW/Hh 7yuw== X-Received: by 10.112.146.133 with SMTP id tc5mr3693692lbb.88.1368034987300; Wed, 08 May 2013 10:43:07 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Wed, 8 May 2013 10:42:26 -0700 (PDT) In-Reply-To: References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> From: Filippo Stenico Date: Wed, 8 May 2013 19:42:26 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Eric Sandeen X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7b34335c755b5b04dc387720 X-Barracuda-Connect: mail-la0-f47.google.com[209.85.215.47] X-Barracuda-Start-Time: 1368034988 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130378 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b34335c755b5b04dc387720 Content-Type: text/plain; charset=ISO-8859-1 As I was writing it happened. I got segfault at same place as reported first time. So, uhm, what do you need to see? I was putting together: - machine info (cat /proc/meminfo, cat /proc/cpuinfo, uname -r) - kernel log - core.dump with debugging symbols - output of xfs_repair - output of strace $(xfs_repair) I will put all the logs in place and send tomorrow as ... i forgot to raise core size limit for my shell ... and today I am toasted and I am better to go home and sleep. Tell me if you need anything else. Regards. On Wed, May 8, 2013 at 7:30 PM, Filippo Stenico wrote: > Hello, > -m option seems not to handle the excessive memory consumption I ran into. > I actually ran xfs_repair -vv -m1750 and looking into kern.log it seems > that xfs_repair invoked oom killer, but was killed itself ( !! ) > > This is last try to reproduce segfault: > xfs_repair -vv -P -m1750 > > On Tue, May 7, 2013 at 8:20 PM, Filippo Stenico > wrote: > >> xfs_repair -L -vv -P /dev/mapper/vg0-lv0 does the same kernel panic as my >> first report. No use to double info on this. >> I'll try xfs_repair -L -vv -P -m 2000 to keep memory consuption at a >> limit. >> >> >> >> On Tue, May 7, 2013 at 3:36 PM, Filippo Stenico < >> filippo.stenico@gmail.com> wrote: >> >>> >>> >>> On Tue, May 7, 2013 at 3:20 PM, Eric Sandeen wrote: >>> >>>> On 5/7/13 4:27 AM, Filippo Stenico wrote: >>>> > Hello, >>>> > this is a start-over to try hard to recover some more data out of my >>>> raid5 - lvm - xfs toasted volume. >>>> > My goal is either to try the best to get some more data out of the >>>> volume, and see if I can reproduce the segfault. >>>> > I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to >>>> put original metadata on the cloned raid volume i had zeroed the log on >>>> before via xfs_repair -L (i figured none of the actual data was modified >>>> before as I am just working on metadata.. right?). >>>> > Then I ran a mount, checked a dir that I knew it was corrupted, >>>> unmount and try an xfs_repair (commands.txt attached for details) >>>> > I went home to sleep, but at morning I found out that kernel paniced >>>> due "out of memory and no killable process". >>>> > I ran repair without -P... Should I try now disabling inode prefetch? >>>> > Attached are also output of "free" and "top" at time of panic, as >>>> well as the output of xfs_repair and strace attached to it. Dont think gdb >>>> symbols would help here.... >>>> > >>>> >>>> > >>>> >>>> Ho hum, well, no segfault this time, just an out of memory error? >>>> >>> That's right.... >>> >>>> No real way to know where it went from the available data I think. >>>> >>>> A few things: >>>> >>>> > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ >>>> > mount: Structure needs cleaning >>>> >>>> mount failed? Now's the time to look at dmesg to see why. >>>> >>> >>> From attached logs it seems to be: >>>> >>>> > XFS internal error xlog_valid_rec_header(1) at line 3466 of file >>>> [...2.6.32...]/fs/xfs/xfs_log_recover.c >>>> > XFS: log mount/recovery failed: error 117 >>>> >>>> > root@ws1000:~# mount >>>> >>>> >>>> >>>> > root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/ >>>> > root@ws1000:~# mount | grep raid0 >>>> > /dev/mapper/vg0-lv0 on /raid0/data type xfs >>>> (rw,relatime,attr2,noquota) >>>> >>>> Uh, now it worked, with no other steps in between? That's a little odd. >>>> >>> Looks odd to me too. But i just copied the commands issued as they where >>> on my console... so yes, nothing in between. >>> >>>> It found a clean log this time: >>>> >>>> > XFS mounting filesystem dm-1 >>>> > Ending clean XFS mount for filesystem: dm-1 >>>> >>>> which is unexpected. >>>> >>>> So the memory consumption might be a bug but there's not enough info to >>>> go on here. >>>> >>>> > PS. Let me know if you wish reports like this one on list. >>>> >>>> worth reporting, but I'm not sure what we can do with it. >>>> Your storage is in pretty bad shape, and xfs_repair can't make >>>> something out >>>> of nothing. >>>> >>>> -Eric >>>> >>> >>> I still got back around 6TB out of 7.2 TB of total data stored, so this >>> tells xfs is reliable even when major faults occur... >>> >>> Thanks anyways, I am trying with a "-L" repair, at this step I expect >>> another fail (due out of memory or something, as it happened last time) >>> then I will try with "xfs_repair -L -vv -P" and I expect to see that >>> segfault again. >>> >>> Will report next steps, maybe something interesting for you will pop >>> up... for me is not a waste of time, since this last try is worth being >>> made. >>> >>> -- >>> F >> >> >> >> >> -- >> F > > > > > -- > F -- F --047d7b34335c755b5b04dc387720 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable As I was writing it happened.

I got segfault at same place as report= ed first time.

So, uhm, what do you need to see?

I was puttin= g together:
- machine info (cat /proc/meminfo, cat /proc/cpuinfo, uname = -r)
- kernel log
- core.dump with debugging symbols
- output of xfs_repai= r
- output of strace $(xfs_repair)

I will put all the logs in pla= ce and send tomorrow as ... i forgot to raise core size limit for my shell = ... and today I am toasted and I am better to go home and sleep.

Tell me if you need anything else.

Regards.

On Wed, May 8, 2013 at 7:30 PM, Filippo Stenico <fil= ippo.stenico@gmail.com> wrote:
Hello,
-m option seems not to handle the = excessive memory consumption I ran into.
I actually ran xfs_repair -vv -= m1750 and=A0 looking into kern.log it=A0 seems that xfs_repair invoked oom = killer, but was killed itself ( !! )

This is last try to reproduce segfault:
xfs_repair -vv -P -m1750

On= Tue, May 7, 2013 at 8:20 PM, Filippo Stenico <filippo.stenico@gma= il.com> wrote:
xfs_repair -L -vv -P /dev/mapper/vg0-lv0 doe= s the same kernel panic as my first report. No use to double info on this.<= br> I'll try xfs_repair -L -vv -P -m 2000 to keep memory consuption at a li= mit.



On Tue, May 7, 2013 at 3:36 PM, Filippo Stenico <filippo.stenico@g= mail.com> wrote:


On Tue, May 7, 2013 at 3:20 PM, Eri= c Sandeen <sandeen@sandeen.net> wrote:
On 5/7/13 4:27 AM, Filippo Stenico wrote:
> Hello,
> this is a start-over to try hard to recover some more data = out of my raid5 - lvm - xfs toasted volume.
> My goal is either to try the best to get some more data out of the vol= ume, and see if I can reproduce the segfault.
> I compiled xfsprogs 3.1.9 from deb-source. I ran a xfs_metarestore to = put original metadata on the cloned raid volume i had zeroed the log on bef= ore via xfs_repair -L (i figured none of the actual data was modified befor= e as I am just working on metadata.. right?).
> Then I ran a mount, checked a dir that I knew it was corrupted, unmoun= t and try an xfs_repair (commands.txt attached for details)
> I went home to sleep, but at morning I found out that kernel paniced d= ue "out of memory and no killable process".
> I ran repair without -P... Should I try now disabling inode prefetch?<= br> > Attached are also output of "free" and "top" at ti= me of panic, as well as the output of xfs_repair and strace attached to it.= Dont think gdb symbols would help here....
>

>

Ho hum, well, no segfault this time, just an out of memory error?
=
That's right....
No real way to know where it went from the available data I think.

A few things:

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> mount: Structure needs cleaning

mount failed? =A0Now's the time to look at dmesg to see why.
=A0
>From attached logs it seems to be:

> XFS internal error xlog_valid_rec_header(1) at line 3466 of file [...2= .6.32...]/fs/xfs/xfs_log_recover.c
> XFS: log mount/recovery failed: error 117

> root@ws1000:~# mount

<no raid0 mounted>

> root@ws1000:~# mount /dev/mapper/vg0-lv0 /raid0/data/
> root@ws1000:~# mount | grep raid0
> /dev/mapper/vg0-lv0 on /raid0/data type xfs (rw,relatime,attr2,noquota= )

Uh, now it worked, with no other steps in between? =A0That's a little o= dd.
Looks odd to me too. But i just copied the commands= issued as they where on my console... so yes, nothing in between.=A0
<= /div>
It found a clean log this time:

> XFS mounting filesystem dm-1
> Ending clean XFS mount for filesystem: dm-1

which is unexpected.

So the memory consumption might be a bug but there's not enough info to= go on here.

> PS. Let me know if you wish reports like this one on list.

worth reporting, but I'm not sure what we can do with it.
Your storage is in pretty bad shape, and xfs_repair can't make somethin= g out
of nothing.

-Eric
=A0
I still got b= ack around 6TB out of 7.2 TB of total data stored, so this tells xfs is rel= iable even when major faults occur...

Thanks anyways, I am trying wi= th a "-L" repair, at this step I expect another fail (due out of = memory or something, as it happened last time) then I will try with "x= fs_repair -L -vv -P" and I expect to see that segfault again.

Will report next steps, maybe something interesting for you will pop up= ... for me is not a waste of time, since this last try is worth being made.=

--
F



--
F



--
F



--
F --047d7b34335c755b5b04dc387720-- From bernd.schubert@itwm.fraunhofer.de Wed May 8 12:48:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8482529E12 for ; Wed, 8 May 2013 12:48:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3E96B30405F for ; Wed, 8 May 2013 10:48:17 -0700 (PDT) X-ASG-Debug-ID: 1368035293-04bdf042261324d0001-w1Z2WR Received: from mailgw1.uni-kl.de (mailgw1.uni-kl.de [131.246.120.220]) by cuda.sgi.com with ESMTP id Fp9B7OAk1eXxLxR7 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 May 2013 10:48:14 -0700 (PDT) X-Barracuda-Envelope-From: bernd.schubert@itwm.fraunhofer.de X-Barracuda-Apparent-Source-IP: 131.246.120.220 Received: from itwm2.itwm.fhg.de (itwm2.itwm.fhg.de [131.246.191.3]) by mailgw1.uni-kl.de (8.14.3/8.14.3/Debian-9.4) with ESMTP id r48Hm5KU010205 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NOT) for ; Wed, 8 May 2013 19:48:05 +0200 Received: from mail2.itwm.fhg.de ([131.246.191.79]:36315) by itwm2.itwm.fhg.de with esmtps (TLSv1:DES-CBC3-SHA:168) (/C=DE/ST=Rheinland-Pfalz/L=Kaiserslautern/O=Fraunhofer ITWM/OU=SLG/CN=mail2.itwm.fhg.de)(verified=1) (Exim 4.74 #1) id 1Ua8TE-00007J-OV; Wed, 08 May 2013 19:48:04 +0200 Message-ID: <518A8FD4.40700@itwm.fraunhofer.de> Date: Wed, 08 May 2013 19:48:04 +0200 From: Bernd Schubert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> <20130507220742.GC24635@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: <20130507220742.GC24635@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-ITWM-CharSet: ISO-8859-1 X-ITWM-Scanned-By: mail2.itwm.fhg.de X-Barracuda-Connect: mailgw1.uni-kl.de[131.246.120.220] X-Barracuda-Start-Time: 1368035294 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130378 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On 05/08/2013 12:07 AM, Dave Chinner wrote: > On Tue, May 07, 2013 at 01:18:13PM +0200, Bernd Schubert wrote: >> On 05/07/2013 03:12 AM, Dave Chinner wrote: >>> On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: >>>> On 05/06/2013 02:28 PM, Dave Chinner wrote: >>>>> On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: >>>>>> And anpther protection fault, this time with 3.9.0. Always happens >>>>>> on one of the servers. Its ECC memory, so I don't suspect a faulty >>>>>> memory bank. Going to fsck now- >>>>> >>>>> http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F >>>> >>>> Isn't that a bit overhead? And I can't provide /proc/meminfo and >>>> others, as this issue causes a kernel panic a few traces later. >>> >>> Provide what information you can. Without knowing a single thing >>> about your hardware, storage config and workload, I can't help you >>> at all. You're asking me to find a needle in a haystack blindfolded >>> and with both hands tied behind my back.... >> >> I see that xfs_info, meminfo, etc are useful, but /proc/mounts? >> Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the >> output of /proc/mounts, please let me know if you were really >> interested in all of that non-xfs output? > > Yes. You never know what is relevant to a problem that is reported, > especially if there are multiple filesystems sharing the same > device... Hmm, I see. But you need to extend your questions to multipathing and shared storage. Both time you can easily get double mounts... I probably should try to find some time to add ext4s MMP to XFS. > >> And I just wonder what you are going to do with the information >> about the hardware. So it is an Areca hw-raid5 device with 9 disks. >> But does this help? It doesn't tell if one of the disks reads/writes >> with hickups or provides any performance characteristics at all. > > Yes, it does, because Areca cards are by far the most unreliable HW > RAID you can buy, which is not surprising because they are also the Ahem. Compared to other hardware raids Areca is very stable. > cheapest. This is through experience - we see reports of filesystems > being badly corrupted ever few months because of problems with Areca > controllers. The problem is that telling the hardware controller does not tell anything about disks. And most raid solutions do not care at all about disk corruptions, thats getting better with T10DIF/DX, but unfortunately I still don't see that used most installations. As I'm aware of that problem for several years we started to write ql-fstest [1] several years ago, which checks for data corruption. That is also part of our stress test suite and so far it didn't report anything. So we can exclude disks/controller data corruption with a very high probability. You might want to add to your FAQ something like: Q: Are you sure there is not disk / controller / memory data corruption? If so please state why! Cheers, Bernd [1] https://bitbucket.org/aakef/ql-fstest From rjohnston@sgi.com Wed May 8 13:50:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E806829E15 for ; Wed, 8 May 2013 13:50:18 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id C5FCD8F8064 for ; Wed, 8 May 2013 11:50:18 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 8 May 2013 13:50:18 -0500 Message-ID: <518A9E7E.7070402@sgi.com> Date: Wed, 8 May 2013 13:50:38 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-external Subject: [ANNOUNCE] xfsprogs v3.1.11 PLEASE LOOK AT THIS Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] I was about to send out the following: Please note the deprecated statement, is it correct?????? Version 3.1.11 of xfsprogs has been released. The source code can be accessed via git using this URL: git://oss.sgi.com/xfs/cmds/xfsprogs.git A gzipped-tar archive of the source code is available here: ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-3.1.11.tar.gz The development tree previously hosted on kernel.org for this code has been deprecated: git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git Below is a summary (from the doc/CHANGES file) of changes since release 3.1.10: xfsprogs-3.1.11 (8 May 2013) - Support for relative paths in xfs_quota thanks to Satoru Takeuchi. - mkfs.xfs will always go into multidisk mode when filesystem geometry is specified on the command line. - Document all commands in xfs_io. - Remove setfl command from xfs_io. - xfs_metadump will obfuscate symlinks by path component. - mkfs.xfs no longer accepts geometry settings smaller than the physical sector size. - xfs_logprint now supports multiply-logged inode fields and handles continued inode transactions correctly. - kill XLOG_SET - Update release scripts to use git archive to address a missing source file reported by Arkadiusz Mi?kiewicz - Fix a build error with -Werror=format-security, reported by Arkadiusz Mi?kiewicz - mkfs.xfs no longer attempts to discard when -N option is used. - Update 'make deb' to use tarball - Sync up with log reservation changes in the kernel. - Fix possible unallocated memory access in fiemap. - Guard against string overflow in path_to_fspath. - Fix setup_cursor array allocation. - Fix free of unintialized pointer in xfs_acl_valid error path. - Guard against path string overflows. - Check strdup results properly in initallfs(). - Fix attribute no_change_count logic. - Remove extraneous close() in fsrallfs(). - xfs_repair now skips the freelist scan of a corrupt agf when in no-modify mode. - xfs_db now skips freelist scans of corrupt agfs. - Remove unconditional ASSERT(0) in xfs_repair. - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf space. - Add depraction message for xfs_check. - xfs_quota allow user or group names beginning with digits reported by James Carter. - Fix manpages and usage() spelling, errors and omissions. - Validate the extent count is at least within the positive range of a signed 32 bit integer before using it. From rjohnston@sgi.com Wed May 8 14:12:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D239B29E15 for ; Wed, 8 May 2013 14:12:29 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id C00408F8059 for ; Wed, 8 May 2013 12:12:26 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 8 May 2013 14:12:26 -0500 Message-ID: <518AA3AE.4090407@sgi.com> Date: Wed, 8 May 2013 14:12:46 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-external Subject: Re: [ANNOUNCE] xfsprogs v3.1.11 PLEASE LOOK AT THIS References: <518A9E7E.7070402@sgi.com> In-Reply-To: <518A9E7E.7070402@sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/08/2013 01:50 PM, Rich Johnston wrote: > I was about to send out the following: Please note the deprecated > statement, is it correct?????? > OOPS I meant to get internal verification about the deprecated message first. Please disregard the above lines. > > Version 3.1.11 of xfsprogs has been released. > > The source code can be accessed via git using this URL: > > git://oss.sgi.com/xfs/cmds/xfsprogs.git > > A gzipped-tar archive of the source code is available here: > > ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-3.1.11.tar.gz > > The development tree previously hosted on kernel.org for this code has > been deprecated: > > git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git > Yes it is deprecated. > Below is a summary (from the doc/CHANGES file) of changes > since release 3.1.10: > > xfsprogs-3.1.11 (8 May 2013) > - Support for relative paths in xfs_quota thanks to Satoru > Takeuchi. > - mkfs.xfs will always go into multidisk mode when filesystem > geometry is specified on the command line. > - Document all commands in xfs_io. > - Remove setfl command from xfs_io. > - xfs_metadump will obfuscate symlinks by path component. > - mkfs.xfs no longer accepts geometry settings smaller than the > physical sector size. > - xfs_logprint now supports multiply-logged inode fields and > handles continued inode transactions correctly. > - kill XLOG_SET > - Update release scripts to use git archive to address a > missing source file reported by Arkadiusz Mi?kiewicz > - Fix a build error with -Werror=format-security, reported > by Arkadiusz Mi?kiewicz > - mkfs.xfs no longer attempts to discard when -N option is used. > - Update 'make deb' to use tarball > - Sync up with log reservation changes in the kernel. > - Fix possible unallocated memory access in fiemap. > - Guard against string overflow in path_to_fspath. > - Fix setup_cursor array allocation. > - Fix free of unintialized pointer in xfs_acl_valid error path. > - Guard against path string overflows. > - Check strdup results properly in initallfs(). > - Fix attribute no_change_count logic. > - Remove extraneous close() in fsrallfs(). > - xfs_repair now skips the freelist scan of a corrupt agf > when in no-modify mode. > - xfs_db now skips freelist scans of corrupt agfs. > - Remove unconditional ASSERT(0) in xfs_repair. > - Reduce bb_numrecs in bno/cnt btrees when log consumes all agf > space. > - Add depraction message for xfs_check. > - xfs_quota allow user or group names beginning with digits > reported by > James Carter. > - Fix manpages and usage() spelling, errors and omissions. > - Validate the extent count is at least within the positive > range of a signed 32 bit integer before using it. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From rjohnston@sgi.com Wed May 8 14:12:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id ECC6C29E41 for ; Wed, 8 May 2013 14:12:58 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id CB55B8F8049 for ; Wed, 8 May 2013 12:12:58 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 8 May 2013 14:12:58 -0500 Message-ID: <518AA3CE.9000702@sgi.com> Date: Wed, 8 May 2013 14:13:18 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss Subject: [ANNOUNCE] xfsdump v3.1.3 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Version 3.1.3 of xfsdump has been released. The source code can be accessed via git using this URL: git://oss.sgi.com/xfs/cmds/xfsdump.git A gzipped-tar archive of the source code is available here: ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsdump-3.1.3.tar.gz The development tree previously hosted on kernel.org for this code has been deprecated: git://git.kernel.org/pub/scm/fs/xfs/xfsdump-dev.git Below is a summary (from the doc/CHANGES file) of changes since release 3.1.2: xfsdump-3.1.3 (08 May 2013) - Fix a segfault in xfsrestore when a path name is too long, thanks to Nigel Tamplin. - Fix a backward compatibility problem. Dumps created with version 3.1.2 where extended attributes are in use failed to restore with v3.1.0 due to file header checksum errors. Thanks to Fugazzi for reporting. - Refactored release scripts to conform to using git archive. - Changed the build process so that 'make deb' uses the same process of creating a source tree as the release script. From sandeen@sandeen.net Wed May 8 15:40:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DEE1829E15 for ; Wed, 8 May 2013 15:40:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7DD75AC002 for ; Wed, 8 May 2013 13:40:25 -0700 (PDT) X-ASG-Debug-ID: 1368045623-04cb6c53a2134310001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 0FhPZonJU0paeCL7 for ; Wed, 08 May 2013 13:40:23 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 84B5B60EB3F0; Wed, 8 May 2013 15:40:23 -0500 (CDT) Message-ID: <518AB837.7050603@sandeen.net> Date: Wed, 08 May 2013 15:40:23 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Rich Johnston CC: xfs-external Subject: Re: [ANNOUNCE] xfsprogs v3.1.11 PLEASE LOOK AT THIS References: <518A9E7E.7070402@sgi.com> <518AA3AE.4090407@sgi.com> X-ASG-Orig-Subj: Re: [ANNOUNCE] xfsprogs v3.1.11 PLEASE LOOK AT THIS In-Reply-To: <518AA3AE.4090407@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368045623 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130390 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/8/13 2:12 PM, Rich Johnston wrote: > OOPS I meant to get internal verification about the deprecated message first. Please disregard the above lines. It's correct anyway ;) From maximacrg@maximatransportes.com.br Wed May 8 17:58:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A9A6829E15 for ; Wed, 8 May 2013 17:58:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7A2098F8050 for ; Wed, 8 May 2013 15:58:35 -0700 (PDT) X-ASG-Debug-ID: 1368053910-04bdf04226142140001-NocioJ Received: from server.cidvale.com.br (cloud.cidvale.com.br [187.108.192.124]) by cuda.sgi.com with ESMTP id ZM42eDEa1Kgj1UCg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 May 2013 15:58:32 -0700 (PDT) X-Barracuda-Envelope-From: maximacrg@maximatransportes.com.br X-Barracuda-Apparent-Source-IP: 187.108.192.124 Received: from [219.138.237.237] (port=3237 helo=nruycg) by server.cidvale.com.br with esmtpa (Exim 4.80) (envelope-from ) id 1UaDJZ-0006Ll-9l; Wed, 08 May 2013 19:58:26 -0300 From: =?GB2312?B?t9HMw8fP?= To: "xfs" Subject: =?GB2312?B?v+eyv8PFxeS6z7K7tb3Ouw==?= Message-ID: <201305090658278592457@maximatransportes.com.br> X-ASG-Orig-Subj: =?GB2312?B?v+eyv8PFxeS6z7K7tb3Ouw==?= Date: Thu, 9 May 2013 06:58:27 +0800 X-Mailer: Foxmail 6, 10, 201, 20 [cn] MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=knrv106_1310_54238310.6862881" X-Priority: 3 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.cidvale.com.br X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - maximatransportes.com.br X-Get-Message-Sender-Via: server.cidvale.com.br: authenticated_id: maximacrg@maximatransportes.com.br X-Barracuda-Connect: cloud.cidvale.com.br[187.108.192.124] X-Barracuda-Start-Time: 1368053912 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0113c X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130400 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c This is a multi-part message in MIME format. ------=knrv106_1310_54238310.6862881 Content-Type: text/plain; charset="GB2312" Content-Transfer-Encoding: base64 bWF4aW1hY3JnQG1heGltYXRyYW5zcG9ydGVzLmNvbS5icg0KDQoxINHQILeiyMvBptfKINS0udwg wO3WrtHQILeiyMvUsbXEv7wgusvT67ykwPgNCg0KYSDR0CC3osjL1LG/vLrLzNjV9w0KDQpiINHQ ILeiyMvUsbyoINCnv7y6y7e9sLjJ6CC8xiA4NTlp ------=knrv106_1310_54238310.6862881 Content-Type: application/x-msexcel; name="Vzdim6262.xls" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Vzdim6262.xls" oaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqh qqGqoaqhqqGqoaqhqqGqoaqhqg0KDQoNCtHQt6LIy8Gm18rUtLncwO3WrtHQt6LIy9SxtcS/vLrL 0+u8pMD4DQoNCjIwMTPE6jXUwjIyLS0yM8jVICDJz7qjvfDLrs3lvsa16iAgo6gxMDAlyLe2qL+q sOCjqQ0KMjAxM8TqNdTCMjYtLTI3yNUgIMnu29rD+8C81Le+xrXqICCjqDEwMCXIt7aov6qw4KOp DQoyMDEzxOo11MIyOC0tMjnI1SAgsbG+qczszOy82cjVt7m16qOoMTAwJci3tqi/qrDgo6kNCg0K o6izwrrNwLzW972yo6kNCqmlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWp pamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppQ0KDQqhvtGn 1LG21M/zob/G89K1Q0VPIC/X3L6twO2hotHQt6LX3L6twO0vuLHX3KGiuavLvtfcuaQvvLzK9dfc vOChorL6xre+rcDtL9HQt6LP7sS/vq3A7aGi0dANCrei1rDE3LK/w8W+rcDtoaLR0Leiuce4yaGi suLK1L6twO2holFBvq3A7aGivLzK9bK/w8XW97ncoaLIy8Gm18rUtL6twO2hotb3udy1yKGjDQoN CqG+t9E9PT0908OhvzM4MDDUqi8yyMujrLWltsDSu8jLytW30TI4MDDUqqGjo6i6rMG9zOzW0LLN oaLWuLaovcyyxKGisui146OpDQqppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWp pamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaUNCqHx v84gs8wgsbMgvrCjug0KDQrDu9PQv7y6y6Osvs21yNPaw7vT0LncwO2joQ0KyOe6zrPJuaa12LbU 0dC3osjL1LG9+NDQvKjQp7+8usu6zbncwO2jrNLRs8nOqsbz0rXNxr340MKy+sa3v6q3orncwO21 xNbY0qqxo9ako6HE+rXExvPStdHQDQq3ormk1/fKx7fxw+bB2aO6DQoxoaK/57K/w8XF5LrPsru1 vc67o7sNCjKhotfK1LTQp8LKsru436O7DQozoaLP7sS/s8mxvtLiyrayu8e/o7sNCjShotPQ0dC3 oszlz7W55re2o6y1q8ixt6bH/bavus253MDt16XK1qO7DQo1oaLR0Leiz+7Ev76twO3IscnZudzA 7da4u9Ow9KO7DQqhraGtDQrS8s6qyLG3ptK7zNfQ0Nau09DQp7XE0dC3osjL1LG/vLrLzOXPtaOh DQqppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWp pamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaUNCqHxv84gs8wgytUg0uajug0KDQq/ zrPM0tSzwrrNwLzAz8qmyq7T4MTqs8m5ptTL1/fTxdDjxvPStdHQt6K8qNCnv7y6y9PrudzA7bXE yrXVvb6t0emjrM6nyMbG89K1udjXorXE0dC3osjL1LENCryo0Ke/vLrL1ti147rNw+bB2bXExNG1 487KzOKjrM2ouf2088G/tcSwuMD9vbK94rrNyrXA/bfWzvajrNTav6q3xaGiu6W2r7XEu7e+s9bQ o6y21NHQt6LIyw0K1LG8qNCnv7y6y9PrudzA7bXEu/mxvsDtxO66zdSt1PKhoryo0Ke53MDttcTV +7j2stnX97n9s8yjrNLUvLC/vLrLIEtQScno1sOjrL340NDH5c76oaLNuLO5DQoitcS9sr3i0+vM 1sLbLM2ouf3Rp8+w0+vR0MzWo6zKucT61+7W1dXm1f3Vxs7VvajBotPQ0Ke1xL/JstnX97XE0dC3 osjL1LG8qNCnv7y6y9PrudzA7czlz7WhoyINCqmlqaWppamlqaWppamlqaWppamlqaWppamlqaWp pamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppaml qaWppQ0KofG/ziCzzCC08yC42aO6DQoNCtK7oaLR0LeiyMvUsb+8usvM2NX3DQoxLiAgv7y6y7fW wOCjutfp1q+/vLrLoaK42s67v7y6y6Giu/nT2s/uxL+1xNHQt6LIy9Sxv7y6yw0KMi4gINHQt6LI y9SxuaTX98zY1soNCjMuICDR0LeivKjQp7ncwO21xMzYteMNCjQuICC/zrPMuKi1vM7KzOLK1byv o7rE+rmry7605tTatcTR0LeiyMvUsb+8usu1xNb30qrOysziDQoNCrb+oaLEs7mry77R0LeiyMvU sbXEv7y6y9PrvKTA+LC4wP231s72DQoxLrC4wP3G89K1venJ3A0KMi6wuMD90aHU8bGzvrANCjMu sLjA/cbz0rXR0LeizsrM4g0KNC6wuMD9xvPStdHQt6K8qNCnudzA7bXEz9bXtA0KNS6wuMD9xvPS tdHQt6K8qNCnudzA7bXEwrex6rnmu64NCjYusLjA/cbz0rXR0Leiv7y6y8zlz7W6zbe9t6i96cnc DQoxo6nR0Leiz+7Ev76twO2/vLrLo7sNCjKjqbfWz+7Ev76twO2/vLrLo7sNCjOjqc/uxL+zydSx v7y6y6O7DQo0o6m/xsrS1vfIzr+8usujuw0KNaOpz+7Ev9ans8XIy9Sxo7sNCjajqcrU1sbK1NHp vKjQp7+8usujuw0KN6OpvLzK9b+qt6LP7sS/v7y6y6O7DQo4o6kgwb+y+rf+zvG/vLrLoaMNCjcu ILC4wP3G89K10dC3osjL1LG8qNCnv7y6y73hufvTptPD0+u8pMD4u/rWxg0KOC4gsLjA/cbz0rXR 0LeiyMvUsbyo0Ke/vLrLyKG1w7XEs8nQpyANCjkuILC4wP3G89K10dC3osjL1LG8qNCnudzA7bXE y7zCt8b0tc8NCg0KyP2hotHQt6LIy9SxvKjQp7+8usu3vbC4yei8xg0KMS7I57rOyKG1w8Hstby2 1Lyo0Ke/vLrLtcTIz82s0+vWp7PWDQoyLtHQt6LIy9SxvKjQp7+8usu7+bShzPW8/g0KMy7R0Lei yMvUsbyo0Ke/vLrL1+nWr9Pr1rDU8A0KNC7R0LeiyMvUsbyo0Ke/vLrLxL+x6snotqgNCjUu0dC3 osjL1LG8qNCnv7y6y7bUz/PIt7aoDQo2LtHQt6LIy9SxvKjQp7+8ustLUEnJ6NbDDQogLS0tS1BJ yejWw9St1PINCiAtLS1LUEnJuNGhsr3W6A0KIC0tLUtQSda4serSqsvYse2x4NC0DQogLS0t0dC3 orK/w8W/vLrLS1BJDQogLS0t0dC3os/uxL+/vLrLS1BJDQogLS0t0dC3os/uxL/NxbbTv7y6y0tQ SQ0KIC0tLdHQt6K8vMr1yMvUsb+8ustLUEkNCjcu0dC3osjL1LG8qNCnv7y6y0tQScio1ti31sXk DQogLS0tS1BJyKjW2LfWxeTO88f4DQogLS0tuPe/vLrLttTP87+8ustLUEnIqNbYt9bF5Le9t6gN Cjgu0dC3osjL1LG8qNCnv7y6y7+8usu3vbeo0aHU8Q0KIC0tLbK7zay917bOv7y6y7e9t6jRodTx DQogLS0tsvrGt7+qt6LT67v5tKHR0LeitcS/vLrLsu7S7A0KIC0tLcr21rC3qA0KIC0tLdPQzt6/ vLrLt6gNCiAtLS3X27rPxsC827eoDQogLS0tvde2zr+8usu3qA0KIC0tLc2s0NDGwNLpt6gNCiAt LS249sjLvKjQp7PQxbW3qA0KIC0tLcTasr+94cvjt6gNCjkuINHQt6LIy9SxvKjQp7+8usvWuLHq wb+7r9Pru+7Bpsf4vOTJ6LzGDQogLS0twb+7r7e9t6i31sDgDQogLS0tzt63qLbIwb/I57rOv7y6 yw0KIC0tLdDQzqq+2daktqjQ1LbIwb8NCiAtLS2yu82sxvPStbnmxKO1xL+8usu77sGmx/i85Mno vMYNCjEwLtHQt6LIy9SxvKjQp8PmzLjT67mk1/e4qLW8DQoxMS7R0LeiyMvUsbyo0Ke/vLrLveG5 +9Om08MNCjEyLtHQt6LIy9SxvKjQp8nqyvbH/rXAyei8xg0KMTMu0dC3osjL1LG8qNCnv7y6y8H3 s8zJ6LzGDQoxNC7R0LeiyMvUsbyo0Ke/vLrLxKOw5bHttaXJ6LzGDQoxNS7R0LeiyMvUsbyo0Ke/ vLrL1sa2yNer0LShoszWwtvT67eisrwNCg0Ky8ShotHQt6LIy9SxvKjQp7+8usvEo8Ti0d3Btw0K IC0tLbC4wP3UxLbBDQogLS0tvcfJq7fWxeQNCiAtLS231tfpzNbC2w0KIC0tLcSjxOLR3cG3DQog LS0tvM6x9rXjxsANCiAtLS2wuMD919y94Q0KDQrO5aGi0dC3osjL1LG8pMD4t72wuNPrtOvKqQ0K IC0tLbv5sb68pMD4wO3C2w0KIC0tLdaqyrbQzdSxuaS8pMD4tOvKqQ0KIC0tLcjnus68pMD4ODC6 87rNOTC687XEvLzK9cjL1LENCiAtLS3R0LeiyMvUsbXEtuDUqrykwPi068qpDQogLS0tyf3HqKGi 0L2z6qGivbG98KGiuKPA+6O/DQogLS0t0rvSubi7ufO8pMD4t6gNCiAtLS2829a1tbzP8rykwPi3 qA0KIC0tLbv9t9bUy9OqvKTA+LeoDQoNCsH5oaLR0LeiyMvUsbyo0Ke/vLrLsaPVz7TryqkNCiAt LS3T68jLwabXytS0yOe6zsjaus8NCiAtLS3OxLuvvajJ6NPr0v21vA0KIC0tLdbGtsixo9XPDQog LS0t0MXPoruvvajJ6LXEucy7rw0KIC0tLcjLssXRodP9vMa7rg0KIC0tLc3GueOy38LUDQoNCr/O s8zX3L3hDQqppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWp pamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlDQqh8aG+ytpfv85f 16hfvNJfvelfydyhv7PCLbrNLcC8IC0tLbn6X8TaX9fKX8nuX9HQX7eiX7ncX8DtX7ywX8/uX8S/ X7ncX8DtX9eoX7zSICANCg0KMaGi16jStbGzvrANCkVNQkGjrFBNUKOsQ1RBo6i9o8fFufq8ysXg 0bXKpqOpo6y5+rzKz+7Ev7ncwO3GwLnAyqahow0KsbG+qdPKtee089GnvczK2qGjDQqhts/uxL+5 3MDtvLzK9aG31NPWvrHgzq+how0KxvPStc/uxL+7r7ncwO3XqNK1zq/Usbvh16i80qGjDQogufq8 0tbYtPPXqM/uobDW0Ln6z+7Ev7ncwO3TptPDyrW8+aGxv87M4tfp16i80rPJ1LGhow0Ku6qz27n6 vMrP7sS/udzA7dHQvr/UurOjzvG4sdS6s6Show0K1tC5+tLGtq+hotbQuqPTzaGiwaq7r7/GvLy1 yLWlzru1xM/uxL+53MDtucvOyqGjDQoNCjKhormk1/fUxMD6DQo5MsTqLTkzxOqjrMSzyqGyxsOz zbbXyrmry77X3L6twO0NCjkzxOotOTXE6qOsxLO5+rzKvK/NxbWjyM6zo87xuLHX3LLDt9a53Mzl 0/2y+sa3z98NCjk2xOotOTnE6qOsyfHW3bOks8fNqNDFt6LVub/GvLzT0M/euavLvrWjyM64sdfc vq3A7aGjDQoyMDAwxOotMDLE6qOs1NrEs7/GvLy5ybfduavLvrWjyM64sdfcssOjrLfWudzJ+rL6 1MvTqqGiz+7Ev7ncwO2hotbKwb+53MDtus2/zbunt/7O8aGjDQowMsTqONTC1sG98aOstNPKws/u xL+53MDtoaKy+sa3udzA7aGi0dC3orncwO21xL3M0/2hotHQvr+hosXg0bW6zdfJ0a+how0KIrbg xOq1o8jOwey1vNawzvGjrLv9wNvBy7fhuLvKtdW9vq3R6aGj1PjOqjYwtuC80rv6ubnX6davyrXK qcHLz+7Ev7ncwO3M5c+1vajJ6LXE18nRryy+rcbzIg0K0rXTptPDuvOjrL75yKG1w8G8usPQp7n7 us3Qp9LmoaMNCg0KM6Gi1ve9sr/Os8yjug0KobazybmmtcSy+sa3vq3A7S0tsvrGt76twO26y9DE udzA7cq11b3M2NG106qht6GiobbR0LeiyMvBptfK1LS53MDt1q7R0LeiyMvUsbXEv7y6y9PrvKTA +KG3DQqhoqG2tNO8vMr119/P8rncwO0tLS3R0LeivLC8vMr1vq3A7aGi1ve53LrL0MS53MDtvLzE 3Mzhyf3M2NG106qht6GiobZQTVC/vMewxeDRtaG3oaKhtrjfvKgNCtCnz+7Ev7ncwO3TptPDobeh oqG2z+7Ev7ncwO3B97PMyei8xtPr08W7r6G3oaKhtsbz0rXP7sS/u6+53MDt0+vM5c+1vajJ6KG3 oaKhttHQt6LP7sS/udzA7Q0KobehoqG2z+7Ev8y4xdCy38LU0+vTsM/swabM4cn9obehoqG2z+7E v7yo0Ke/vLrL0+u53MDtobehoqG2z+7Ev87KzOK31s720+u94r72st/C1KG3oaKhtr/nDQqyv8PF z+7Ev83FttO53MDt0+u5tc2ovLzHyaG3oaKhts/uxL/Iq8Pm1KTL49Prs8mxvr/Y1saht6GjDQoN CjShotT4zOG5qdfJ0a+3/s7xtcSyv7fWv827pw0K1tC5+tLGtq/R0L6/1LqhotbQuqPTzdfcuavL vqGiufq80rXnv8bUuqGiufq80r27v8bUuqGiuqPC7cb7s7WhorOks8e7qrnaxvuztdHQt6K5q8u+ oaLBqruvDQq/xry8ucm33bmry76horzOyNW5ybfdoaLQwrarzfi/xry8oaO1o8jOxvPStc/uxL+5 3MDtucvOyrWlzrujutbQuqPTzaGixe7As77ezM66o9HzuaSzzLmry74NCqGiwaq7r7/GvLy5ybfd 09DP3rmry761yLv6ubm1xM/uxL+53MDtucvOyqGjDQoNCjWhotb30qrF4NG1v827p6O6DQrW0Mqv u6+hotbQyq/TzaGi1tDUtrSszvGhosj90rvW2LmkoaLO5LSsoaLW0Ln6uqPR88qv083X3Lmry76h otbQuqPTzdPQz965q8u+oaLW0Ln6tefQxaOoyc8NCrqj0dC+v9S6oaKxsb6p0dC+v9S6o6mhorij vajTyrXnuea7rtS6oaK4o72o08q157/G0afUuqGiva3L1dPKv8bUuqGi1tC5+sGqzaihosDK0bah orCuwaLQxQ0KoaJORUOhok5PS0lBoaJIUKGiSUJNoaJBTENBVEVMoaJTT0hVoaJHb29nbGWhokxH oaKxprjWufq8yqGiu6rOqqGi1tDQy6GiuLvKv82ooaLQws34yPG93aGiDQrQwrarzfihos3yt73K /b7doaK5pMnM0vjQ0KGivajJ6NL40NChotDL0rXS+NDQoaK9u82o0vjQ0KGiw/HJ+tL40NChosa9 sLKxo8/VoaLIy8rZsaPP1aGiwaoNCrav08XKxqGizquy8bavwaahotbQur3QxaGiye7b2rq9v9Wh orrptry8r83FoaKxvLPbo6jW0Ln6o6mhorGxxvu4o8zvoaK2q7fnsb7M76GiwfjW3c7lweKhog0K tqvEz8b7s7Whorijvai158GmoaK6/sTPtefBpqGiyb22q8LB0rWhorqjtvtQU0mhorqj0MW/1bX3 oaK/tbzRtefX06Gi0MK3ybXnxvehosPAtcTR0L6/1LqhraGtDQqppamlqaWppamlqaWppamlqaWp pamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppamlqaWppaml qaWppamlqaWppamlqaUNCqG+u+HO8dDFz6Khvw0KDQogICDW97DstaXOu6O60MIqv8YqxeAq0bUq zfgNCg0KICAgye7b2srQs6Gyv6O6MDc1NS0tMjEzMjczNDggIKGiIDIxMzI3NzQ2DQoNCiAgIMnP uqPK0LOhsr+jujAyMS0tNTEwOTk3MjkgIKGiIDUxMDk5ODU2DQqh1KHUodSh1KHUodSh1KHUodSh 1KHUodSh1KHUodSh1KHUodSh1KHUodSh1KHUodSh1KHUodSh1KHUodSh1KHUodSh1KHUodSh1A0K ------=knrv106_1310_54238310.6862881-- From david@fromorbit.com Wed May 8 18:34:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1BB5F29E15 for ; Wed, 8 May 2013 18:34:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id ABEE4AC002 for ; Wed, 8 May 2013 16:34:32 -0700 (PDT) X-ASG-Debug-ID: 1368056070-04bdf04224143250001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id L7bxkNGCjixNnIdZ for ; Wed, 08 May 2013 16:34:31 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AigPAIvfilF5LNxE/2dsb2JhbABSgweDCrc2hRYEAXcXdIIfAQEFOhwjEAgDFQMJJQ8FJQMhE4gLwVQWjWITgR0Hg1UDlyuRNoMhKoEu Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 09:04:30 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaDsS-0002yI-2C; Thu, 09 May 2013 09:34:28 +1000 Date: Thu, 9 May 2013 09:34:28 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: [PATCH 2/2] xfstests: quota not supported on realtime filesystems Message-ID: <20130508233428.GK24635@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfstests: quota not supported on realtime filesystems References: <1367993066-9313-1-git-send-email-david@fromorbit.com> <1367993066-9313-3-git-send-email-david@fromorbit.com> <518A6325.3030809@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518A6325.3030809@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368056070 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130402 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 08, 2013 at 09:37:25AM -0500, Eric Sandeen wrote: > On 5/8/13 1:04 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > Realtime XFS filesystems do not support quotas, so quota tests > > always fail on such filesystems. Add a check to _require_quota to > > detect this situation and notrun the quota tests... > > > > Signed-off-by: Dave Chinner > > Reviewed-by: Eric Sandeen > > (PS why is USE_EXTERNAL a thing? if it's set, shouldn't it be used?) Because if you have rtdev/logdev defined in your config, you can choose whether to test them or not without having to modify the config file. Very handy, really. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 8 18:39:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7127F29E15 for ; Wed, 8 May 2013 18:39:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4EC058F8064 for ; Wed, 8 May 2013 16:39:26 -0700 (PDT) X-ASG-Debug-ID: 1368056361-04bdf04223143670001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 2h30DGz7Y35qMDNk for ; Wed, 08 May 2013 16:39:21 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AikPAIvfilF5LNxE/2dsb2JhbABMBoMHgwq3NoUWBAF3F3SCHwEBBAE6HCMFCwgDGAklDwUlAyETiAYFwVQWjWwJgR0Hg1UDlyuKEockgyEq Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 09:09:21 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaDx0-0002yw-KU; Thu, 09 May 2013 09:39:10 +1000 Date: Thu, 9 May 2013 09:39:10 +1000 From: Dave Chinner To: Filippo Stenico Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: Xfs_repair segfaults. Message-ID: <20130508233910.GL24635@dastard> X-ASG-Orig-Subj: Re: Xfs_repair segfaults. References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368056361 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130402 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 08, 2013 at 07:30:05PM +0200, Filippo Stenico wrote: > Hello, > -m option seems not to handle the excessive memory consumption I ran into. > I actually ran xfs_repair -vv -m1750 and looking into kern.log it seems > that xfs_repair invoked oom killer, but was killed itself ( !! ) That's exactly what the oom killer is supposed to do. > This is last try to reproduce segfault: > xfs_repair -vv -P -m1750 I know your filesystem is around 7TB in size, but how much RAM do you have? It's not unusual for xfs_repair to require many GB of memory to run succesfully on filesystems of this size... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 8 19:41:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 54BEE29E0A for ; Wed, 8 May 2013 19:41:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 408228F8049 for ; Wed, 8 May 2013 17:41:21 -0700 (PDT) X-ASG-Debug-ID: 1368060078-04cbb05fe5141620001-w1Z2WR Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id PpDE3n05iTjyuNLk for ; Wed, 08 May 2013 17:41:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ai8PAI/vilF5LNxE/2dsb2JhbAA4BBaDBzeCU7c6hRYEAXkXdIIfAQEEATocIwULCAMYCQobDwUlAyETiAYFDTPBAxaNSB4PgRgFB4NVA5crkTaDISqBLg Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 10:11:18 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaEv6-00035c-1I; Thu, 09 May 2013 10:41:16 +1000 Date: Thu, 9 May 2013 10:41:16 +1000 From: Dave Chinner To: Bernd Schubert Cc: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault Message-ID: <20130509004115.GM24635@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> <20130507220742.GC24635@dastard> <518A8FD4.40700@itwm.fraunhofer.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518A8FD4.40700@itwm.fraunhofer.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368060078 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130406 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Wed, May 08, 2013 at 07:48:04PM +0200, Bernd Schubert wrote: > On 05/08/2013 12:07 AM, Dave Chinner wrote: > >On Tue, May 07, 2013 at 01:18:13PM +0200, Bernd Schubert wrote: > >>On 05/07/2013 03:12 AM, Dave Chinner wrote: > >>>On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: > >>>>On 05/06/2013 02:28 PM, Dave Chinner wrote: > >>>>>On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: > >>>>>>And anpther protection fault, this time with 3.9.0. Always happens > >>>>>>on one of the servers. Its ECC memory, so I don't suspect a faulty > >>>>>>memory bank. Going to fsck now- > >>>>> > >>>>>http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > >>>> > >>>>Isn't that a bit overhead? And I can't provide /proc/meminfo and > >>>>others, as this issue causes a kernel panic a few traces later. > >>> > >>>Provide what information you can. Without knowing a single thing > >>>about your hardware, storage config and workload, I can't help you > >>>at all. You're asking me to find a needle in a haystack blindfolded > >>>and with both hands tied behind my back.... > >> > >>I see that xfs_info, meminfo, etc are useful, but /proc/mounts? > >>Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the > >>output of /proc/mounts, please let me know if you were really > >>interested in all of that non-xfs output? > > > >Yes. You never know what is relevant to a problem that is reported, > >especially if there are multiple filesystems sharing the same > >device... > > Hmm, I see. But you need to extend your questions to multipathing > and shared storage. why would we? Anyone using such a configuration reporting a bug usually is clueful enough to mention it in their bug report when describing their RAID/LVM setup. The FAQ entry covers the basic information needed to start meaingful triage, not *all* the infomration we might ask for. It's the baseline we start from. Indeed, the FAQ exists because I got sick of asking people for the same information several times a week, every week in response to poor bug reports like yours. it's far more efficient to paste a link several times a week. i.e. The FAQ entry is there for my benefit, not yours. I don't really care if you don't understand why we are asking for that information, I simply expect you to provide it as best you can if you want your problem solved. > Both time you can easily get double mounts... I > probably should try to find some time to add ext4s MMP to XFS. Doesn't solve the problem. It doesn't prevent multiple write access to the lun: Ah, a free lun. I'll just put LVM on it and mkfs it and.... Oh, sorry, were you using that lun? So, naive hacks like MMP don't belong in filesystems.... > >>And I just wonder what you are going to do with the information > >>about the hardware. So it is an Areca hw-raid5 device with 9 disks. > >>But does this help? It doesn't tell if one of the disks reads/writes > >>with hickups or provides any performance characteristics at all. > > > >Yes, it does, because Areca cards are by far the most unreliable HW > >RAID you can buy, which is not surprising because they are also the > > Ahem. Compared to other hardware raids Areca is very stable. Maybe in your experience. We get a report every 3-4 months about Areca hardware causing catastrophic data loss. It outnumbers every other type of hardware RAID by at least 10:1 when it comes to such problem reports. > You might want to add to your FAQ something like: > > Q: Are you sure there is not disk / controller / memory data > corruption? If so please state why! No, the FAQ entry is for gathering facts and data, not what the bug reporter *thinks* might be the problem. If there's corruption we'll see it in the information that is gathered, and then we can start to look for the source. Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Wed May 8 20:21:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7A39829E03 for ; Wed, 8 May 2013 20:21:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4F7F18F8049 for ; Wed, 8 May 2013 18:21:47 -0700 (PDT) X-ASG-Debug-ID: 1368062504-04bdf042251486b0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id Vzoz8oIY0ZUYDyTW for ; Wed, 08 May 2013 18:21:45 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvELAPP4ilF5LNxE/2dsb2JhbABSgwe/YAR7F3SCfDuBAgOIP6FEn3eNeBOBOoM/A6hhgyEqgS4 Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 10:51:44 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UaFYF-00039N-QV for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UaFYF-0003vQ-Mj for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/3, V2] xfstests: more fixes... Date: Thu, 9 May 2013 11:21:38 +1000 X-ASG-Orig-Subj: [PATCH 0/3, V2] xfstests: more fixes... Message-Id: <1368062501-15046-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368062504 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- A couple of simple fixes: - another redirection issue that I missed on the last sweep (thanks Michael!), - disables quota tests on relatime filesystems as realtime filesystems don't support quotas. V2 also disables the xfs specific quota tests. And a new patch to fix the random xfs/189 failures I've been seeing for the past few months. I'm questioning whether I'm still sane after dealing with this one. The commit message adequately explains the problem, I think... -Dave. From dave@fromorbit.com Wed May 8 20:21:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E6DDA29E0D for ; Wed, 8 May 2013 20:21:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5E5DBAC001 for ; Wed, 8 May 2013 18:21:48 -0700 (PDT) X-ASG-Debug-ID: 1368062504-04bdf042251486b0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 2FwfAVZOQjUaaIaG for ; Wed, 08 May 2013 18:21:46 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvMLAPP4ilF5LNxE/2dsb2JhbABSgwe/YAR7F3SCHwEBBVYzCBgxIRgDGxmHegMOuQkNiCWMUoESJ4E6gz8DlUiNd4UigyEqgS0 Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 10:51:44 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UaFYF-00039O-RB for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UaFYF-0003vT-Nt for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/3] xfstests: fix incorrect redirect in generic/233 Date: Thu, 9 May 2013 11:21:39 +1000 X-ASG-Orig-Subj: [PATCH 1/3] xfstests: fix incorrect redirect in generic/233 Message-Id: <1368062501-15046-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368062501-15046-1-git-send-email-david@fromorbit.com> References: <1368062501-15046-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368062506 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620b, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.50 BSF_SC0_SA620b Custom Rule SA620b From: Dave Chinner generic/233 attempts to direct output to tee, but instead of using a pipe it uses an append operator. Hence it leaves a file named "tee" in the root directory of the xfstests execution path. Just direct the output to the $seqres.full file rather than trying to tee it into the test output as well. Reported-by: "Michael L. Semon" Signed-off-by: Dave Chinner Reviewed-by: Eric Sandeen --- tests/generic/233 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generic/233 b/tests/generic/233 index 2b6cd2f..58b3672 100755 --- a/tests/generic/233 +++ b/tests/generic/233 @@ -62,7 +62,7 @@ _fsstress() -f rename=10 -f fsync=2 -f write=15 -f dwrite=15 \ -n $count -d $out -p 7` - echo "fsstress $args" >> tee -a $seqres.full + echo "fsstress $args" >> $seqres.full if ! su $qa_user -c "$FSSTRESS_PROG $args" | tee -a $seqres.full | _filter_num then echo " fsstress $args returned $?" -- 1.7.10.4 From dave@fromorbit.com Wed May 8 20:21:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C547C29E13 for ; Wed, 8 May 2013 20:21:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5BEA7AC002 for ; Wed, 8 May 2013 18:21:56 -0700 (PDT) X-ASG-Debug-ID: 1368062514-04bdf042231486d0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id h5HcrAC0nl7VH7Os for ; Wed, 08 May 2013 18:21:55 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvMLAPP4ilF5LNxE/2dsb2JhbABSgwe/YAR7F3SCHwEBBVYzCBgxOQMbGYgLwTuNeBOBOoM/A51Cix+DISqBLg Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 10:51:54 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UaFYP-00039P-R7 for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:53 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UaFYF-0003vX-PW for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/3] xfstests: quota not supported on realtime filesystems Date: Thu, 9 May 2013 11:21:40 +1000 X-ASG-Orig-Subj: [PATCH 2/3] xfstests: quota not supported on realtime filesystems Message-Id: <1368062501-15046-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368062501-15046-1-git-send-email-david@fromorbit.com> References: <1368062501-15046-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368062514 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Realtime XFS filesystems do not support quotas, so quota tests always fail on such filesystems. Add a check to _require_quota to detect this situation and notrun the quota tests... Also, fix _require_xfs_quota and _require_prjquota to have the same checks. Signed-off-by: Dave Chinner --- common/quota | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/common/quota b/common/quota index fd5374f..b320cf2 100644 --- a/common/quota +++ b/common/quota @@ -40,6 +40,12 @@ _require_quota() if [ ! -f /proc/fs/xfs/xqmstat ]; then _notrun "Installed kernel does not support XFS quotas" fi + if [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ]; then + _notrun "Quotas not supported on realtime test device" + fi + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then + _notrun "Quotas not supported on realtime scratch device" + fi ;; *) _notrun "disk quotas not supported by this filesystem type: $FSTYP" @@ -62,6 +68,12 @@ _require_xfs_quota() { src/feature -q $TEST_DEV [ $? -ne 0 ] && _notrun "Installed kernel does not support XFS quota" + if [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ]; then + _notrun "Quotas not supported on realtime test device" + fi + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then + _notrun "Quotas not supported on realtime scratch device" + fi [ -n $XFS_QUOTA_PROG ] || _notrun "XFS quota user tools not installed" } @@ -73,6 +85,9 @@ _require_prjquota() [ -n "$1" ] && _dev="$1" || _dev="$TEST_DEV" src/feature -p $_dev [ $? -ne 0 ] && _notrun "Installed kernel does not support project quotas" + if [ "$USE_EXTERNAL" = yes -a ! -z "$_dev" ]; then + _notrun "Project quotas not supported on realtime filesystem" + fi } # -- 1.7.10.4 From dave@fromorbit.com Wed May 8 20:21:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7318129E13 for ; Wed, 8 May 2013 20:21:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2AFE78F8049 for ; Wed, 8 May 2013 18:21:58 -0700 (PDT) X-ASG-Debug-ID: 1368062514-04bdf042231486d0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id REllThEyI6Byz9XV for ; Wed, 08 May 2013 18:21:56 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvYLAPP4ilF5LNxE/2dsb2JhbABSgwc3vykEexd0gh8BAQUnLzMIGDE5AxsZiAsNwSoEjguEeQOoYYMhKg Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 10:51:54 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UaFYF-00039Q-Sz for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UaFYF-0003vc-QP for xfs@oss.sgi.com; Thu, 09 May 2013 11:21:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 Date: Thu, 9 May 2013 11:21:41 +1000 X-ASG-Orig-Subj: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 Message-Id: <1368062501-15046-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368062501-15046-1-git-send-email-david@fromorbit.com> References: <1368062501-15046-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368062515 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner Serenity lost. Insanity looms darkly. /etc/mtab Random behaviour. xfs/189 fails After a week passing. -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) +SCRATCH_DEV on SCRATCH_MNT type xfs (ro,relatime,attr2,filestreams,inode64,noquota) Confusion prevails. /proc/mounts can never give success. Anything but golden. ls -l /etc/mtab shows: lrwxrwxrwx 1 root root 12 May 8 16:05 /etc/mtab -> /proc/mounts symlink modified. Stealth. Deception. WTF? Ninjas go unseen. "git grep mtab". Yay! generic/235: sad SElinux hack. Remount context grot. Mount uses all options from /etc/mtab Kernel rejects mount. sed hacks /etc/mtab Symlink becomes file. Test frobulation. xfs/189 passes Randomness tamed. Double face-palm. Tears. Crack-inspired insanity. mount(8) needs fixing. Schizophrenia. /etc/mtab. Same thing. Test psychiatry. Hack, slash, glue, polish. xfs/189 fixed. Made shiny again. Signed-off-by: Dave Chinner --- tests/generic/235 | 8 ++--- tests/xfs/189 | 86 +++++++++++++++++++++++++++++++++++++---------------- tests/xfs/189.out | 32 ++++++++++---------- 3 files changed, 81 insertions(+), 45 deletions(-) diff --git a/tests/generic/235 b/tests/generic/235 index f430ba2..0fabc24 100755 --- a/tests/generic/235 +++ b/tests/generic/235 @@ -60,11 +60,11 @@ chown $qa_user:$qa_user $SCRATCH_MNT/testfile repquota -u -g $SCRATCH_MNT | grep -v "^root" | _filter_scratch -# XXX This is a nasty hack. remount doesn't work on a fileystem -# with a context; see https://bugzilla.redhat.com/show_bug.cgi?id=563267 +# If remount fails with this problem: # -# We work around it by editing the context out of mtab. Sigh. -sed -i "s#^$SCRATCH_DEV\(.*\),context=\"system_u:object_r:nfs_t:s0\"#$SCRATCH_DEV\1#" /etc/mtab +# https://bugzilla.redhat.com/show_bug.cgi?id=563267 +# +# then you need a more recent mount binary. mount -o remount,ro $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch mount -o remount,rw $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch diff --git a/tests/xfs/189 b/tests/xfs/189 index d79b7fa..27bfb63 100755 --- a/tests/xfs/189 +++ b/tests/xfs/189 @@ -4,6 +4,32 @@ # Test remount behaviour # Initial motivation was for pv#985710 and pv#983964 # +# mount(8) adds all options from mtab and fstab to the mount command line. So +# the filesystem either must not reject any option at all if it can't change it, +# or compare the value on the command line to the existing state and only reject +# it if it would change something that can't be changed. +# +# Test this behaviour by mounting a filesystem read-only with a non- default +# option and then try to remount it rw. +# +# note that mount(8) doesn't add the options when specifying both the device +# node and mount point, so test out the various mounting alternatives +# +# <---- Bbbzzzzzzztttt ----> +# +# Right, but the kernel /proc/mounts output in no way reflects what mount passes +# into the kernel, so the entire assumption of this test that what mount outputs +# is the same as what it inputs is completely wrong. +# +# Hence the test now checks to see if the expected options are in the mount +# options in /etc/mtab rather than looking for an exact match. Hence the tests +# check what we know should change, not what mount thinks has changed. As a +# result, the test now passes regardless of whether mount or the kernel controls +# the contents of /etc/mtab.... +# +# <---- Normal programming is resumed ----> +# +# #----------------------------------------------------------------------- # Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. # @@ -33,6 +59,8 @@ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 tag="added by qa $seq" +rm -f $seqres.full + _cleanup() { cd / @@ -48,26 +76,32 @@ _scratch_filter() -e "s#,context.*s0\"##" } +# +# the output from /proc/mounts in no way matches what mount puts into the kernel +# as options. Work around it as best possible by matching the strings passed in +# rather than assuming they are the only options that will be set. If they match +# output them to the output file so that the golden image and the filtering +# doesn't need to care about what options may or may not be present in /etc/mtab +# _check_mount() { - # assumes that we don't have extra ops in fstab - _mount | grep $SCRATCH_MNT | _scratch_filter + rw_or_ro=$1 + expected_val=$2 + + [ -z "$expected_val" ] && expected_val=$1 + + _mount | grep $SCRATCH_MNT | _scratch_filter | \ + tee -a $seqres.full | + grep $rw_or_ro | grep $expected_val > /dev/null + if [ $? -eq 0 ]; then + echo -n "SCRATCH_DEV on SCRATCH_MNT type xfs ($rw_or_ro" + if [ ! -z "$2" ]; then + echo -n ",$2" + fi + echo ")" + fi } -# -# mount(8) adds all options from mtab and fstab to the mount command -# line. So the filesystem either must not reject any option at all -# if it can't change it, or compare the value on the command line -# to the existing state and only reject it if it would change -# something that can't be changed. -# -# Test this behaviour by mounting a filesystem read-only with a non- -# default option and then try to remount it rw. -# -# note that mount(8) doesn't add the options when specifying both the -# device node and mount point, so test out the various mounting -# alternatives -# _test_remount_rw() { # use filestreams as a hopefully never default option @@ -76,29 +110,32 @@ _test_remount_rw() echo _scratch_mount -o ro,filestreams [ $? -eq 0 ] || echo "ro,filestreams mount failed unexpectedly" - _check_mount + _check_mount ro filestreams for dev_mnt in $SCRATCH_DEV $SCRATCH_MNT "$SCRATCH_DEV $SCRATCH_MNT"; do echo "mounting given: $dev_mnt" | _scratch_filter - _mount -o remount,rw $dev_mnt + _mount -o remount,rw,filestreams $dev_mnt [ $? -eq 0 ] || echo "remount rw failed" - _check_mount + _check_mount rw filestreams done umount $SCRATCH_MNT + # remount ignores attr2, and noattr2 mount option does does not result + # in any "attr2" specific option in /proc/mounts, so we can only check + # for ro/rw here. echo echo "try remount ro,noattr2 -> rw,attr2" echo _scratch_mount -o ro,noattr2 [ $? -eq 0 ] || echo "ro,noattr2 mount failed unexpectedly" - _check_mount + _check_mount ro for dev_mnt in $SCRATCH_DEV $SCRATCH_MNT "$SCRATCH_DEV $SCRATCH_MNT"; do echo "mounting given: $dev_mnt" | _scratch_filter _mount -o remount,rw,attr2 $dev_mnt [ $? -eq 0 ] || echo "remount rw,attr2 failed" - _check_mount + _check_mount rw done umount $SCRATCH_MNT @@ -146,15 +183,15 @@ _test_remount_barrier() # mention barrier explicitly even if it's currently the default just to be sure _scratch_mount -o barrier [ $? -eq 0 ] || echo "mount failed unexpectedly!" - _check_mount + _check_mount rw _scratch_mount -o remount,nobarrier [ $? -eq 0 ] || _fail "remount nobarrier failed" - _check_mount + _check_mount rw nobarrier _scratch_mount -o remount,barrier [ $? -eq 0 ] || _fail "remount barrier failed" - _check_mount + _check_mount rw umount $SCRATCH_MNT } @@ -220,5 +257,4 @@ _test_remount_barrier # success, all done echo "*** done" -rm -f $seqres.full status=0 diff --git a/tests/xfs/189.out b/tests/xfs/189.out index 5e236ef..7e5c34a 100644 --- a/tests/xfs/189.out +++ b/tests/xfs/189.out @@ -10,21 +10,21 @@ try remount ro,filestreams -> rw,filestreams SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) mounting given: SCRATCH_DEV -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) mounting given: SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) mounting given: SCRATCH_DEV SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) try remount ro,noattr2 -> rw,attr2 -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,noattr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (ro) mounting given: SCRATCH_DEV -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) mounting given: SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) mounting given: SCRATCH_DEV SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) try touching file after remount ro -> rw with options @@ -35,25 +35,25 @@ try remount ro,filestreams -> rw,filestreams SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) mounting given: SCRATCH_DEV -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) mounting given: SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) mounting given: SCRATCH_DEV SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) try remount ro,noattr2 -> rw,attr2 -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,noattr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (ro) mounting given: SCRATCH_DEV -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep,attr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) mounting given: SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep,attr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) mounting given: SCRATCH_DEV SCRATCH_MNT -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) Do remount barrier tests -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,barrier) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) SCRATCH_DEV on SCRATCH_MNT type xfs (rw,nobarrier) -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,barrier) +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) *** done -- 1.7.10.4 From mlsemon35@gmail.com Wed May 8 21:24:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1B03B29DF8 for ; Wed, 8 May 2013 21:24:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8E90DAC004 for ; Wed, 8 May 2013 19:24:33 -0700 (PDT) X-ASG-Debug-ID: 1368066271-04cb6c53a2143c00001-NocioJ Received: from mail-yh0-f44.google.com (mail-yh0-f44.google.com [209.85.213.44]) by cuda.sgi.com with ESMTP id Eim7XPUpSgQELC34 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 08 May 2013 19:24:32 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.44] Received: by mail-yh0-f44.google.com with SMTP id 29so640195yhl.31 for ; Wed, 08 May 2013 19:24:31 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=Tn6qmF5J/4QS9QApNKUz+1VkrBgtv6XXTb/Ts+TG/Rw=; b=X7Txn2QVAozbQClT7hvARl3FlTlh0UM0Zb+BAg5VZBr4WY52en3qJazQDmuV6Hum3H 54mm7XErUm8TJVZIoMWlQdPWZXGCAhYkA4cQD029VpS4haIBX6/2tNCFu+Ls5Cp0laTn 9frQ7rWTaQduTkkoi/wEMiByEb2nO0u4hf1hpH4aan4RjCSjdoGfterHd9FTjT7IYqd0 SDzDpPjII3pyhCfv5tT2MHJLTOCxLOU2lWU5XE/KWl0H123oX13NSJ3tCvoWTzhJTLk2 1ghdw0o02DLfTUMBpf83gkFw/hwyiT50oiRfhxnkKRLSmlLxwwHETQ/+Nsms2L5sl2K5 Xvew== X-Received: by 10.236.152.74 with SMTP id c50mr2575500yhk.133.1368066271680; Wed, 08 May 2013 19:24:31 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id j47sm1818075yhm.21.2013.05.08.19.24.30 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 08 May 2013 19:24:30 -0700 (PDT) Message-ID: <518B08D9.1060906@gmail.com> Date: Wed, 08 May 2013 22:24:25 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: Rambling noise #1: generic/230 can trigger kernel debug lock detector Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: Rambling noise #1: generic/230 can trigger kernel debug lock detector Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-yh0-f44.google.com[209.85.213.44] X-Barracuda-Start-Time: 1368066272 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130414 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi! I'm trying to come up with a series of ramblings that may or may not be useful in a mailing-list context, with the idea that one bug report might be good, the next might be me thinking aloud with data in hand because I know something's wrong but can't put my finger on it. An ex-girlfriend saw the movie "Rain Man" years ago pointed to the screen and said, "Do you see that guy? That's you!" If only I could be so smart...or act as well as Dustin Hoffman. The noisy thinking is there, just not the brilliant insights... This report is to pass on a kernel lock detector message that might be reproducible under a certain family of tests. generic/230 may not be at fault, it's just where the detector went off. It seems like in the few times the detector has gone off lately, it does so at the same instant as I'm doing some very boring operation on a different partition at the same time, such as reloading a file in vi, or piping something to less to read it. Some folks have been working on tty stuff lately for the 3.8 kernels at least--making great improvements overall--but there seems to be no tty hints in this message. The kernel, AFAIK, to be a git Linux with v3.9.0 + this weekend's xfs-oss checked out, with the following patches applied: [PATCH v2] xfs: fix assertion failure in xfs_vm_write_failed() [PATCH] xfs: fix s_max_bytes to MAX_LFS_FILESIZE if needed [PATCH] xfs: don't return 0 if generic_segment_checks() find nothing [PATCH 1/2] xfs: fix sub-page blocksize data integrity writes [PATCH 2/2] xfs: fix rounding in xfs_free_file_space [PATCH v3 1/2] xfs: Remove XFS_MOUNT_RETERR [PATCH v3 2/2] xfs: Don't keep silent if sunit/swidth can not be changed via mount There shouldn't be a need to apply these patches right away. I'm just providing context. Computer is a Pentium 733 with memory lowered to 160 MB for low-memory testing. It uses the standard VGA console, which can contribute to such issues but not as much as using a DRM framebuffer console. Thanks! Michael [Earlier tests are shown only to provide sequence.] FSTYP -- xfs (debug) PLATFORM -- Linux/i686 oldsvrhw 3.9.0+ MKFS_OPTIONS -- -f -llogdev=/dev/sda7 -bsize=4096 /dev/sdb6 MOUNT_OPTIONS -- -ologdev=/dev/sda7 /dev/sdb6 /mnt/xfstests-scratch xfs/168 [not run] Assuming DMAPI modules are not loaded generic/053 10s xfs/043 [not run] No dump tape specified generic/099 [not run] not suitable for this OS: Linux xfs/170 47s xfs/116 3s generic/020 29s xfs/175 [not run] Assuming DMAPI modules are not loaded xfs/066 8s xfs/037 [not run] No dump tape specified xfs/292 - output mismatch (see /var/lib/xfstests/results/xfs/292.out.bad) --- tests/xfs/292.out 2013-05-08 12:40:14.635752692 -0400 +++ /var/lib/xfstests/results/xfs/292.out.bad 2013-05-08 16:35:33.894218930 -0400 @@ -1,5 +1,5 @@ QA output created by 292 mkfs.xfs without geometry -meta-data=FILENAME isize=256 agcount=4, agsize=16777216 blks +meta-data=FILENAME isize=256 agcount=4, agsize=16777216 blks mkfs.xfs with cmdline geometry -meta-data=FILENAME isize=256 agcount=16, agsize=4194304 blks +meta-data=FILENAME isize=256 agcount=16, agsize=4194304 blks ... (Run 'diff -u tests/xfs/292.out /var/lib/xfstests/results/xfs/292.out.bad' to see the entire diff) xfs/086 195s xfs/293 16s generic/308 2s xfs/095 [not run] not suitable for this OS: Linux xfs/096 28s xfs/022 [not run] No dump tape specified generic/260 [not run] FITRIM not supported on /dev/sdb6 generic/247 101s generic/235 - output mismatch (see /var/lib/xfstests/results/generic/235.out.bad) --- tests/generic/235.out 2013-05-08 12:39:55.017626952 -0400 +++ /var/lib/xfstests/results/generic/235.out.bad 2013-05-08 16:42:10.527639188 -0400 @@ -15,7 +15,7 @@ fsgqa -- 0 0 0 1 0 0 -touch: cannot touch `SCRATCH_MNT/failed': Read-only file system +touch: cannot touch 'SCRATCH_MNT/failed': Read-only file system *** Report for user quotas on device SCRATCH_DEV Block grace time: 7days; Inode grace time: 7days ... (Run 'diff -u tests/generic/235.out /var/lib/xfstests/results/generic/235.out.bad' to see the entire diff) xfs/072 7s xfs/180 441s xfs/283 25s xfs/048 1s generic/076 8s generic/236 3s generic/230 ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(sb_internal); lock(sb_internal); *** DEADLOCK *** May be due to missing lock nesting notation 3 locks held by setquota/28368: #0: (&type->s_umount_key#20){++++.+}, at: [] get_super+0x7a/0xc0 #1: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 #2: (&qinf->qi_quotaofflock){+.+...}, at: [] xfs_qm_scall_setqlim+0x9a/0x690 stack backtrace: CPU: 0 PID: 28368 Comm: setquota Not tainted 3.9.0+ #3 Hardware name: Dell Computer Corporation L733r /CA810E , BIOS A14 09/05/2001 c6456ca0 c6456ca0 c8f83cc8 c13fe5bd c8f83d40 c1060ee0 c14d241d c6456ad4 00006ed0 000003eb c196a618 c6456cf0 00000004 00000000 0001f60c c177c801 c19b033d 00000000 f089e33c 00000000 c6456930 4596f1d4 000003eb 00000000 Call Trace: [] dump_stack+0x16/0x18 [] __lock_acquire+0x17b0/0x17f0 [] ? trace_hardirqs_off_caller+0x1e/0xc0 [] ? sched_clock_cpu+0xa5/0x100 [] lock_acquire+0x80/0x100 [] ? xfs_trans_alloc+0x26/0x50 [] __sb_start_write+0xad/0x1b0 [] ? xfs_trans_alloc+0x26/0x50 [] ? xfs_trans_alloc+0x26/0x50 [] ? trace_hardirqs_on+0xb/0x10 [] xfs_trans_alloc+0x26/0x50 [] xfs_qm_dqread+0xcd/0x360 [] xfs_qm_dqget+0x342/0x520 [] xfs_qm_scall_setqlim+0xb9/0x690 [] ? might_fault+0x4a/0xa0 [] ? might_fault+0x94/0xa0 [] xfs_fs_set_dqblk+0x54/0xa0 [] quota_setxquota+0x76/0xc0 [] SyS_quotactl+0x513/0x5a0 [] ? SyS_stat64+0x34/0x40 [] ? sysenter_exit+0xf/0x1d [] ? trace_hardirqs_on_caller+0xf4/0x1c0 [] sysenter_do_call+0x12/0x36 XFS (sdb6): Mounting Filesystem XFS (sdb6): Ending clean mount XFS (sdb6): Mounting Filesystem XFS (sdb6): Ending clean mount XFS (sdb6): Quotacheck needed: Please wait. XFS (sdb6): Quotacheck: Done. - output mismatch (see /var/lib/xfstests/results/generic/230.out.bad) --- tests/generic/230.out 2013-05-08 12:39:54.827612822 -0400 +++ /var/lib/xfstests/results/generic/230.out.bad 2013-05-08 16:51:08.063301955 -0400 @@ -12,9 +12,9 @@ pwrite64: Disk quota exceeded Touch 3+4 Touch 5+6 -touch: cannot touch `SCRATCH_MNT/file6': Disk quota exceeded +touch: cannot touch 'SCRATCH_MNT/file6': Disk quota exceeded Touch 5 -touch: cannot touch `SCRATCH_MNT/file5': Disk quota exceeded ... (Run 'diff -u tests/generic/230.out /var/lib/xfstests/results/generic/230.out.bad' to see the entire diff) XFS (sdb5): Mounting Filesystem XFS (sdb5): Ending clean mount xfs/155 From mlsemon35@gmail.com Wed May 8 21:46:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A414329DF8 for ; Wed, 8 May 2013 21:46:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 31376AC005 for ; Wed, 8 May 2013 19:46:23 -0700 (PDT) X-ASG-Debug-ID: 1368067578-04cb6c53a1144bf0001-NocioJ Received: from mail-ye0-f175.google.com (mail-ye0-f175.google.com [209.85.213.175]) by cuda.sgi.com with ESMTP id pd4z2fM6vLTtzuDB (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 08 May 2013 19:46:18 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.175 X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.175] Received: by mail-ye0-f175.google.com with SMTP id q4so573391yen.34 for ; Wed, 08 May 2013 19:46:17 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.175] X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.175] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=DBO1dKFYNxihk5jxBDbZeY8QKsjVW+r5+ika2R1Ya74=; b=BVwifIy+R57ByixrbPm4jNEQ0l0xpmrrE01/MlIRp1IR8/k9Q8m7c3x/uQPJ3+bglx VsB0T6BSapdzP1fVOUM3CJEmsWFM609HLxVUNqj/54sNfyJMwXo8tfSdvY85mBk5S+d3 xONR+/8XBw8HrtmslYY9aztao+T15ZiS9kNnvFaPjoKufaxM6df89seefrdJJSNyLVAa dSnqyEA107vEbfV6T+MiJrCU1aOIJkpx4mEizsPZvlE66tsFMG+CdUdkLALmI1ppoOe/ dhQ9EJdS+zsVxQ5cQe0KHMbgohLCLNZczynlke1YFfPhcxMY0HTyLxD+vlfUUOPgyHo4 bdDA== X-Received: by 10.236.53.68 with SMTP id f44mr8633314yhc.169.1368067577793; Wed, 08 May 2013 19:46:17 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id a24sm1880133yho.24.2013.05.08.19.46.16 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 08 May 2013 19:46:17 -0700 (PDT) Message-ID: <518B0DF7.4050500@gmail.com> Date: Wed, 08 May 2013 22:46:15 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-4-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 In-Reply-To: <1368062501-15046-4-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ye0-f175.google.com[209.85.213.175] X-Barracuda-Start-Time: 1368067578 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130414 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature /etc/mtab is not a symlink, on this PC here. It is set that way, for N-I-L-F-S-2 to track its GC. Do I need to set mtab as link to /proc/mounts to use your new patch? Michael On 05/08/2013 09:21 PM, Dave Chinner wrote: > From: Dave Chinner > > Serenity lost. > Insanity looms darkly. > /etc/mtab > > Random behaviour. > xfs/189 fails > After a week passing. > > -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) > +SCRATCH_DEV on SCRATCH_MNT type xfs (ro,relatime,attr2,filestreams,inode64,noquota) > > Confusion prevails. > /proc/mounts can never give success. > Anything but golden. > > ls -l > /etc/mtab shows: > lrwxrwxrwx 1 root root 12 May 8 16:05 /etc/mtab -> /proc/mounts > > symlink modified. > Stealth. Deception. WTF? > Ninjas go unseen. > > "git grep mtab". Yay! > generic/235: sad > SElinux hack. > > Remount context grot. > Mount uses all options from > /etc/mtab > > Kernel rejects mount. > sed hacks /etc/mtab > Symlink becomes file. > > Test frobulation. > xfs/189 passes > Randomness tamed. > > Double face-palm. Tears. > Crack-inspired insanity. > mount(8) needs fixing. > > Schizophrenia. > /etc/mtab. Same thing. > Test psychiatry. > > Hack, slash, glue, polish. > xfs/189 fixed. > Made shiny again. > > Signed-off-by: Dave Chinner > --- > tests/generic/235 | 8 ++--- > tests/xfs/189 | 86 +++++++++++++++++++++++++++++++++++++---------------- > tests/xfs/189.out | 32 ++++++++++---------- > 3 files changed, 81 insertions(+), 45 deletions(-) > > diff --git a/tests/generic/235 b/tests/generic/235 > index f430ba2..0fabc24 100755 > --- a/tests/generic/235 > +++ b/tests/generic/235 > @@ -60,11 +60,11 @@ chown $qa_user:$qa_user $SCRATCH_MNT/testfile > > repquota -u -g $SCRATCH_MNT | grep -v "^root" | _filter_scratch > > -# XXX This is a nasty hack. remount doesn't work on a fileystem > -# with a context; see https://bugzilla.redhat.com/show_bug.cgi?id=563267 > +# If remount fails with this problem: > # > -# We work around it by editing the context out of mtab. Sigh. > -sed -i "s#^$SCRATCH_DEV\(.*\),context=\"system_u:object_r:nfs_t:s0\"#$SCRATCH_DEV\1#" /etc/mtab > +# https://bugzilla.redhat.com/show_bug.cgi?id=563267 > +# > +# then you need a more recent mount binary. > mount -o remount,ro $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch > touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch > mount -o remount,rw $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch > diff --git a/tests/xfs/189 b/tests/xfs/189 > index d79b7fa..27bfb63 100755 > --- a/tests/xfs/189 > +++ b/tests/xfs/189 > @@ -4,6 +4,32 @@ > # Test remount behaviour > # Initial motivation was for pv#985710 and pv#983964 > # > +# mount(8) adds all options from mtab and fstab to the mount command line. So > +# the filesystem either must not reject any option at all if it can't change it, > +# or compare the value on the command line to the existing state and only reject > +# it if it would change something that can't be changed. > +# > +# Test this behaviour by mounting a filesystem read-only with a non- default > +# option and then try to remount it rw. > +# > +# note that mount(8) doesn't add the options when specifying both the device > +# node and mount point, so test out the various mounting alternatives > +# > +# <---- Bbbzzzzzzztttt ----> > +# > +# Right, but the kernel /proc/mounts output in no way reflects what mount passes > +# into the kernel, so the entire assumption of this test that what mount outputs > +# is the same as what it inputs is completely wrong. > +# > +# Hence the test now checks to see if the expected options are in the mount > +# options in /etc/mtab rather than looking for an exact match. Hence the tests > +# check what we know should change, not what mount thinks has changed. As a > +# result, the test now passes regardless of whether mount or the kernel controls > +# the contents of /etc/mtab.... > +# > +# <---- Normal programming is resumed ----> > +# > +# > #----------------------------------------------------------------------- > # Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. > # > @@ -33,6 +59,8 @@ status=1 # failure is the default! > trap "_cleanup; exit \$status" 0 1 2 3 15 > tag="added by qa $seq" > > +rm -f $seqres.full > + > _cleanup() > { > cd / > @@ -48,26 +76,32 @@ _scratch_filter() > -e "s#,context.*s0\"##" > } > > +# > +# the output from /proc/mounts in no way matches what mount puts into the kernel > +# as options. Work around it as best possible by matching the strings passed in > +# rather than assuming they are the only options that will be set. If they match > +# output them to the output file so that the golden image and the filtering > +# doesn't need to care about what options may or may not be present in /etc/mtab > +# > _check_mount() > { > - # assumes that we don't have extra ops in fstab > - _mount | grep $SCRATCH_MNT | _scratch_filter > + rw_or_ro=$1 > + expected_val=$2 > + > + [ -z "$expected_val" ] && expected_val=$1 > + > + _mount | grep $SCRATCH_MNT | _scratch_filter | \ > + tee -a $seqres.full | > + grep $rw_or_ro | grep $expected_val > /dev/null > + if [ $? -eq 0 ]; then > + echo -n "SCRATCH_DEV on SCRATCH_MNT type xfs ($rw_or_ro" > + if [ ! -z "$2" ]; then > + echo -n ",$2" > + fi > + echo ")" > + fi > } > > -# > -# mount(8) adds all options from mtab and fstab to the mount command > -# line. So the filesystem either must not reject any option at all > -# if it can't change it, or compare the value on the command line > -# to the existing state and only reject it if it would change > -# something that can't be changed. > -# > -# Test this behaviour by mounting a filesystem read-only with a non- > -# default option and then try to remount it rw. > -# > -# note that mount(8) doesn't add the options when specifying both the > -# device node and mount point, so test out the various mounting > -# alternatives > -# > _test_remount_rw() > { > # use filestreams as a hopefully never default option > @@ -76,29 +110,32 @@ _test_remount_rw() > echo > _scratch_mount -o ro,filestreams > [ $? -eq 0 ] || echo "ro,filestreams mount failed unexpectedly" > - _check_mount > + _check_mount ro filestreams > > for dev_mnt in $SCRATCH_DEV $SCRATCH_MNT "$SCRATCH_DEV $SCRATCH_MNT"; do > echo "mounting given: $dev_mnt" | _scratch_filter > - _mount -o remount,rw $dev_mnt > + _mount -o remount,rw,filestreams $dev_mnt > [ $? -eq 0 ] || echo "remount rw failed" > - _check_mount > + _check_mount rw filestreams > done > > umount $SCRATCH_MNT > > + # remount ignores attr2, and noattr2 mount option does does not result > + # in any "attr2" specific option in /proc/mounts, so we can only check > + # for ro/rw here. > echo > echo "try remount ro,noattr2 -> rw,attr2" > echo > _scratch_mount -o ro,noattr2 > [ $? -eq 0 ] || echo "ro,noattr2 mount failed unexpectedly" > - _check_mount > + _check_mount ro > > for dev_mnt in $SCRATCH_DEV $SCRATCH_MNT "$SCRATCH_DEV $SCRATCH_MNT"; do > echo "mounting given: $dev_mnt" | _scratch_filter > _mount -o remount,rw,attr2 $dev_mnt > [ $? -eq 0 ] || echo "remount rw,attr2 failed" > - _check_mount > + _check_mount rw > done > > umount $SCRATCH_MNT > @@ -146,15 +183,15 @@ _test_remount_barrier() > # mention barrier explicitly even if it's currently the default just to be sure > _scratch_mount -o barrier > [ $? -eq 0 ] || echo "mount failed unexpectedly!" > - _check_mount > + _check_mount rw > > _scratch_mount -o remount,nobarrier > [ $? -eq 0 ] || _fail "remount nobarrier failed" > - _check_mount > + _check_mount rw nobarrier > > _scratch_mount -o remount,barrier > [ $? -eq 0 ] || _fail "remount barrier failed" > - _check_mount > + _check_mount rw > > umount $SCRATCH_MNT > } > @@ -220,5 +257,4 @@ _test_remount_barrier > > # success, all done > echo "*** done" > -rm -f $seqres.full > status=0 > diff --git a/tests/xfs/189.out b/tests/xfs/189.out > index 5e236ef..7e5c34a 100644 > --- a/tests/xfs/189.out > +++ b/tests/xfs/189.out > @@ -10,21 +10,21 @@ try remount ro,filestreams -> rw,filestreams > > SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) > mounting given: SCRATCH_DEV > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) > mounting given: SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) > mounting given: SCRATCH_DEV SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) > > try remount ro,noattr2 -> rw,attr2 > > -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,noattr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (ro) > mounting given: SCRATCH_DEV > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > mounting given: SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > mounting given: SCRATCH_DEV SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > > try touching file after remount ro -> rw with options > > @@ -35,25 +35,25 @@ try remount ro,filestreams -> rw,filestreams > > SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) > mounting given: SCRATCH_DEV > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) > mounting given: SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) > mounting given: SCRATCH_DEV SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw,filestreams) > > try remount ro,noattr2 -> rw,attr2 > > -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,noattr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (ro) > mounting given: SCRATCH_DEV > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep,attr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > mounting given: SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,noikeep,attr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > mounting given: SCRATCH_DEV SCRATCH_MNT > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,attr2) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > > Do remount barrier tests > > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,barrier) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > SCRATCH_DEV on SCRATCH_MNT type xfs (rw,nobarrier) > -SCRATCH_DEV on SCRATCH_MNT type xfs (rw,barrier) > +SCRATCH_DEV on SCRATCH_MNT type xfs (rw) > *** done > From david@fromorbit.com Wed May 8 22:15:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C1AAE29DF8 for ; Wed, 8 May 2013 22:15:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4D2CFAC001 for ; Wed, 8 May 2013 20:15:47 -0700 (PDT) X-ASG-Debug-ID: 1368069344-04cbb05fe2147fb0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id AZKirUPjy5zp2Lkp for ; Wed, 08 May 2013 20:15:45 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjQPAAsUi1F5LNxE/2dsb2JhbABSgwe6T4UZBAF7F3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLwTUWjXWBHQeDVQOXK5E2gyEq Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 12:45:22 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaHKC-0003Kh-1y; Thu, 09 May 2013 13:15:20 +1000 Date: Thu, 9 May 2013 13:15:20 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 Message-ID: <20130509031519.GM23072@dastard> X-ASG-Orig-Subj: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-4-git-send-email-david@fromorbit.com> <518B0DF7.4050500@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518B0DF7.4050500@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368069344 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130416 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, May 08, 2013 at 10:46:15PM -0400, Michael L. Semon wrote: > /etc/mtab > is not a symlink, > on this PC here. > > It is set that way, > for N-I-L-F-S-2 > to track its GC. > > Do I need to set > mtab as link to /proc/mounts > to use your new patch? Symlink? File? Choice is difficult. New test cares not. Ignorance is bliss. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 8 22:16:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4B3AC29DF8 for ; Wed, 8 May 2013 22:16:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 374098F8049 for ; Wed, 8 May 2013 20:16:50 -0700 (PDT) X-ASG-Debug-ID: 1368069408-04cb6c53a21462b0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id A8NifDuUGoLxaQcg for ; Wed, 08 May 2013 20:16:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AoUPAAsUi1F5LNxE/2dsb2JhbABKCIMHgg64QYUZBAF7F3SCHwEBBScTHBgLEAgDFQMJJQ8FDRgDIROHegMOuQMNiCUWjDyBIBmBHQeDVQOVSIFjjBSFIoMhKg Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail07.adl2.internode.on.net with ESMTP; 09 May 2013 12:46:47 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaHLa-0003Kp-V3; Thu, 09 May 2013 13:16:47 +1000 Date: Thu, 9 May 2013 13:16:46 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector Message-ID: <20130509031646.GN24635@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518B08D9.1060906@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368069408 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130416 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On Wed, May 08, 2013 at 10:24:25PM -0400, Michael L. Semon wrote: > Hi! I'm trying to come up with a series of ramblings that may or > may not be useful in a mailing-list context, with the idea that one > bug report might be good, the next might be me thinking aloud with > data in hand because I know something's wrong but can't put my > finger on it. An ex-girlfriend saw the movie "Rain Man" years ago > pointed to the screen and said, "Do you see that guy? That's you!" > If only I could be so smart...or act as well as Dustin Hoffman. The > noisy thinking is there, just not the brilliant insights... > > This report is to pass on a kernel lock detector message that might > be reproducible under a certain family of tests. generic/230 may > not be at fault, it's just where the detector went off. No, there's definitely a bug there. Thanks for the report, Michael. Try the patch below. Cheers, Dave. -- Dave Chinner david@fromorbit.com xfs: avoid nesting transactions in xfs_qm_scall_setqlim() From: Dave Chinner Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner --- fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..7e67a3a 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) return 0; - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); - if (error) { - xfs_trans_cancel(tp, 0); - return (error); - } - /* * We don't want to race with a quotaoff so take the quotaoff lock. - * (We don't hold an inode lock, so there's nothing else to stop - * a quotaoff from happening). (XXXThis doesn't currently happen - * because we take the vfslock before calling xfs_qm_sysent). + * We don't hold an inode lock, so there's nothing else to stop + * a quotaoff from happening. */ mutex_lock(&q->qi_quotaofflock); /* - * Get the dquot (locked), and join it to the transaction. - * Allocate the dquot if this doesn't exist. + * Get the dquot (locked) before we start, as we need to do a + * transaction to allocate it if it doesn't exist. Once we have the + * dquot, unlock it so we can start the next transaction safely. We hold + * a reference to the dquot, so it's safe to do this unlock/lock without + * it being reclaimed in the mean time. */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { - xfs_trans_cancel(tp, XFS_TRANS_ABORT); + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); + if (error) { ASSERT(error != ENOENT); goto out_unlock; } + xfs_dqunlock(dqp); + + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), + 0, 0, XFS_DEFAULT_LOG_COUNT); + if (error) { + xfs_trans_cancel(tp, 0); + return (error); + } + + xfs_dqlock(dqp); xfs_trans_dqjoin(tp, dqp); ddq = &dqp->q_core; From stan@hardwarefreak.com Thu May 9 02:16:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 16CB829DF8 for ; Thu, 9 May 2013 02:16:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B0AB4AC001 for ; Thu, 9 May 2013 00:16:35 -0700 (PDT) X-ASG-Debug-ID: 1368083791-04bdf04224158de0001-w1Z2WR Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id 6Aj5k8QEaOoVwhnl for ; Thu, 09 May 2013 00:16:31 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: linux-xfs@oss.sgi.com Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 088996C17B; Thu, 9 May 2013 02:16:31 -0500 (CDT) Message-ID: <518B4D52.2090807@hardwarefreak.com> Date: Thu, 09 May 2013 02:16:34 -0500 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Bernd Schubert , linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> <20130507220742.GC24635@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: <20130507220742.GC24635@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1368083791 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/7/2013 5:07 PM, Dave Chinner wrote: >> And I just wonder what you are going to do with the information >> about the hardware. So it is an Areca hw-raid5 device with 9 disks. >> But does this help? It doesn't tell if one of the disks reads/writes >> with hickups or provides any performance characteristics at all. > > Yes, it does, because Areca cards are by far the most unreliable HW > RAID you can buy, which is not surprising because they are also the > cheapest. This is through experience - we see reports of filesystems > being badly corrupted ever few months because of problems with Areca > controllers. And the sad part is that they're not that much lower priced than a comparable LSI card, at least in N. America. Newegg sells a 28 port LSI for $1500 and a 28 port Areca for $1300--a paltry 13% difference. Areca packs 8x more DRAM onto this board--4GB vs 512MB--via a standard DIMM socket, and touts the larger RAM capacity and expandability as a big performance booster. AIUI this is only partially true. The larger capacity for the most part simply helps their weak firmware keep pace with some workloads, mainly large streaming, but the random IO performance of the Areca's isn't all that great, and regardless of the size DIMM once inserts random performance doesn't change much. Regarding reliability, it's interesting to note that the RAID card industry as a whole began moving away from standard socketed DRAM quite some time ago. When a manufacturer solders DRAM chips to the board they have direct control over memory quality and the testing/verification process of the finished product. So when the customer installs and uses the board there are no surprises here. With standard DIMM socketed boards the customer can insert any DIMM s/he wishes, and there's no guarantee of the quality/reliability of the DIMM, nor the complete unit. AFAIK Areca has the only line of RAID cards on the market with a socket for standard DRAM. HP uses a socket design but the daughterboard holds more than just DRAM, and you must use HP's daughterboard, thus they control quality. I wonder how many of the people who have problems with their Areca board had inserted aftermarket DIMMs, vs those using factory memory who simply ran into firmware or board QC problems. -- Stan From david@fromorbit.com Thu May 9 02:20:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 04A4729DF8 for ; Thu, 9 May 2013 02:20:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C4B8E304053 for ; Thu, 9 May 2013 00:20:51 -0700 (PDT) X-ASG-Debug-ID: 1368084049-04bdf042261591b0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id uZD9huu1rDeIY0df for ; Thu, 09 May 2013 00:20:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AoUPAH9Ni1F5LNxE/2dsb2JhbABKCIMHgg64SoUZBAF8F3SCHwEBBScTHBgLEAgDFQMJJQ8FDRgDIROHegMOuGINiCcWjDyBIBmBHQeDVQOVSIFjjBSFIoMhKg Received: from ppp121-44-220-68.lns20.syd7.internode.on.net (HELO dastard) ([121.44.220.68]) by ipmail06.adl2.internode.on.net with ESMTP; 09 May 2013 16:50:48 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaL9i-0003nT-32; Thu, 09 May 2013 17:20:46 +1000 Date: Thu, 9 May 2013 17:20:46 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector Message-ID: <20130509072045.GO24635@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130509031646.GN24635@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368084049 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130434 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On Thu, May 09, 2013 at 01:16:46PM +1000, Dave Chinner wrote: > On Wed, May 08, 2013 at 10:24:25PM -0400, Michael L. Semon wrote: > > Hi! I'm trying to come up with a series of ramblings that may or > > may not be useful in a mailing-list context, with the idea that one > > bug report might be good, the next might be me thinking aloud with > > data in hand because I know something's wrong but can't put my > > finger on it. An ex-girlfriend saw the movie "Rain Man" years ago > > pointed to the screen and said, "Do you see that guy? That's you!" > > If only I could be so smart...or act as well as Dustin Hoffman. The > > noisy thinking is there, just not the brilliant insights... > > > > This report is to pass on a kernel lock detector message that might > > be reproducible under a certain family of tests. generic/230 may > > not be at fault, it's just where the detector went off. > > No, there's definitely a bug there. Thanks for the report, Michael. > Try the patch below. Actaully, there's a bug in the error handling in that version - it fails to unlock the quotaoff lock properly on failure. The version below fixes that problem. Cheers, Dave. -- Dave Chinner david@fromorbit.com xfs: avoid nesting transactions in xfs_qm_scall_setqlim() From: Dave Chinner Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner --- fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..dfa5c05 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) return 0; - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); - if (error) { - xfs_trans_cancel(tp, 0); - return (error); - } - /* * We don't want to race with a quotaoff so take the quotaoff lock. - * (We don't hold an inode lock, so there's nothing else to stop - * a quotaoff from happening). (XXXThis doesn't currently happen - * because we take the vfslock before calling xfs_qm_sysent). + * We don't hold an inode lock, so there's nothing else to stop + * a quotaoff from happening. */ mutex_lock(&q->qi_quotaofflock); /* - * Get the dquot (locked), and join it to the transaction. - * Allocate the dquot if this doesn't exist. + * Get the dquot (locked) before we start, as we need to do a + * transaction to allocate it if it doesn't exist. Once we have the + * dquot, unlock it so we can start the next transaction safely. We hold + * a reference to the dquot, so it's safe to do this unlock/lock without + * it being reclaimed in the mean time. */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { - xfs_trans_cancel(tp, XFS_TRANS_ABORT); + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); + if (error) { ASSERT(error != ENOENT); goto out_unlock; } + xfs_dqunlock(dqp); + + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), + 0, 0, XFS_DEFAULT_LOG_COUNT); + if (error) { + xfs_trans_cancel(tp, 0); + goto out_unlock; + } + + xfs_dqlock(dqp); xfs_trans_dqjoin(tp, dqp); ddq = &dqp->q_core; From kzak@redhat.com Thu May 9 02:30:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B417429DF8 for ; Thu, 9 May 2013 02:30:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9A8F730404E for ; Thu, 9 May 2013 00:30:01 -0700 (PDT) X-ASG-Debug-ID: 1368084600-04cb6c53a2152110001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KirNd7aCkSQNN1Dn for ; Thu, 09 May 2013 00:30:01 -0700 (PDT) X-Barracuda-Envelope-From: kzak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r497Twoo014452 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 May 2013 03:29:58 -0400 Received: from x2.net.home (ovpn-113-20.phx2.redhat.com [10.3.113.20]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r497TucJ031941; Thu, 9 May 2013 03:29:57 -0400 Date: Thu, 9 May 2013 09:29:55 +0200 From: Karel Zak To: Markus Trippelsdorf Cc: Dave Chinner , Eric Sandeen , xfs@oss.sgi.com, util-linux@vger.kernel.org Subject: Re: Mount probing not silent. Internal error xfs_sb_read_verify at line 726 Message-ID: <20130509072955.GA17527@x2.net.home> X-ASG-Orig-Subj: Re: Mount probing not silent. Internal error xfs_sb_read_verify at line 726 References: <5187E290.8090109@sandeen.net> <20130506183020.GA513@x4> <51880121.8000001@sandeen.net> <20130506192629.GA503@x4> <5188074F.2090500@sandeen.net> <20130506195521.GB503@x4> <51881750.3090309@sandeen.net> <51882537.6070904@sandeen.net> <20130507002314.GM19978@dastard> <20130507052430.GA508@x4> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130507052430.GA508@x4> User-Agent: Mutt/1.5.21 (2012-12-30) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368084600 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, May 07, 2013 at 07:24:30AM +0200, Markus Trippelsdorf wrote: > On 2013.05.07 at 10:23 +1000, Dave Chinner wrote: > > On Mon, May 06, 2013 at 04:48:39PM -0500, Eric Sandeen wrote: > > I think that mount needs fixing, not XFS. mount needs to be doing > > silent mounts when doing this brute forcing, not noisy, explicit > > mounts that we expect to throw errors if there is a problem. Good idea. Fixed. > > BTW, strace indicates that MS_SILENT is not being used during brute > > force mounts: > > > > # strace -vx mount /dev/vdb /mnt/scratch/ 2>&1 |grep ^mount > > mount("/dev/vdb", "/mnt/scratch/", "reiserfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext3", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext2", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > mount("/dev/vdb", "/mnt/scratch/", "ext4", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument) > > .... > > > > So this really looks like a bug in mount, not the filesystem handling > > of slient mounts... > > So, lets CC util-linux... Thanks. Karel -- Karel Zak http://karelzak.blogspot.com From rjohnston@sgi.com Thu May 9 07:41:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DC7E529DF8 for ; Thu, 9 May 2013 07:41:46 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.102.116]) by relay3.corp.sgi.com (Postfix) with ESMTP id 33B08AC001; Thu, 9 May 2013 05:41:43 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 07:41:42 -0500 Message-ID: <518B999B.1000403@sgi.com> Date: Thu, 9 May 2013 07:42:03 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> In-Reply-To: <20130412145555.GF30622@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] Dave, The following have been committed: logprint-agi-dump xfs-fsr-odirect-read xfsprogs-remove-dirv1-support xfsprogs-kernel-3.8-update xfsprogs-kernel-3.9-rc1-dev-update Thanks --Rich commit 49f693fa26783bb95136cdb3479902324be3f587 Author: Dave Chinner Date: Thu May 9 07:24:15 2013 -0500 xfsprogs: update libxfs to 3.9-rc1 + xfsdev commit a2ceac1f6dd8771fc1cd993a6cffc30589af1ddc Author: Dave Chinner Date: Thu May 9 07:23:15 2013 -0500 xfsprogs: sync code to current kernel code commit 9a048535fceee3d199978f31524bfd649edaff08 Author: Dave Chinner Date: Thu May 9 07:22:15 2013 -0500 xfsprogs: Die dir1 Die! commit 108e985bc596a1f1a33d31a348fdb430213fb8c0 Author: Dave Chinner Date: Thu May 9 07:16:09 2013 -0500 xfs_fsr: file reads should be O_DIRECT commit a59111c1fc89a8bb5bd1030efce8b75f583e9b1e Author: Dave Chinner Date: Thu May 9 07:11:50 2013 -0500 xfs_logprint: print all AGI unlinked buckets From david@fromorbit.com Thu May 9 08:22:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5161429DF8 for ; Thu, 9 May 2013 08:22:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3C522304039 for ; Thu, 9 May 2013 06:22:27 -0700 (PDT) X-ASG-Debug-ID: 1368105745-04cb6c53a315f580001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id DDRwdoPR6tFNdmAM for ; Thu, 09 May 2013 06:22:26 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjQPAO6hi1F5LFR6/2dsb2JhbABSgwe7IIUZBAF6F3SCHwEBBTocIxAIAw4KCSUPBSUDIROIC701Fo11gR0Hg1UDlyuRNoMhKg Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail05.adl6.internode.on.net with ESMTP; 09 May 2013 22:52:25 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaQng-0004Rw-EU; Thu, 09 May 2013 23:22:24 +1000 Date: Thu, 9 May 2013 23:22:24 +1000 From: Dave Chinner To: Rich Johnston Cc: xfs@oss.sgi.com Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 Message-ID: <20130509132224.GQ24635@dastard> X-ASG-Orig-Subj: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> <518B999B.1000403@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518B999B.1000403@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368105746 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130458 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' On Thu, May 09, 2013 at 07:42:03AM -0500, Rich Johnston wrote: > Dave, > > The following have been committed: > > logprint-agi-dump > xfs-fsr-odirect-read > xfsprogs-remove-dirv1-support > xfsprogs-kernel-3.8-update > xfsprogs-kernel-3.9-rc1-dev-update Which version did you commit? This ones posted in this thread were superceded by the tarball I posted on May 1 (i.e [TARBALL V2] xfsprogs: fixes and updates to current kernel code)... Cheers, Dave. -- Dave Chinner david@fromorbit.com From rjohnston@sgi.com Thu May 9 08:37:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2F94929DF8 for ; Thu, 9 May 2013 08:37:10 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0E99D304039; Thu, 9 May 2013 06:37:10 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 08:37:09 -0500 Message-ID: <518BA69A.5040708@sgi.com> Date: Thu, 9 May 2013 08:37:30 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> <518B999B.1000403@sgi.com> <20130509132224.GQ24635@dastard> In-Reply-To: <20130509132224.GQ24635@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/09/2013 08:22 AM, Dave Chinner wrote: > On Thu, May 09, 2013 at 07:42:03AM -0500, Rich Johnston wrote: >> Dave, >> >> The following have been committed: >> >> logprint-agi-dump >> xfs-fsr-odirect-read >> xfsprogs-remove-dirv1-support >> xfsprogs-kernel-3.8-update >> xfsprogs-kernel-3.9-rc1-dev-update > > Which version did you commit? This ones posted in this thread were > superceded by the tarball I posted on May 1 (i.e [TARBALL V2] > xfsprogs: fixes and updates to current kernel code)... > > Cheers, > > Dave. > From this tar xfsprogs-kern-sync-patchset-v2.tar.gz From rjohnston@sgi.com Thu May 9 08:41:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id ACAD029DF8 for ; Thu, 9 May 2013 08:41:39 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id 893F58F8049; Thu, 9 May 2013 06:41:36 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 08:41:36 -0500 Message-ID: <518BA7A5.7000802@sgi.com> Date: Thu, 9 May 2013 08:41:57 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> <518B999B.1000403@sgi.com> <20130509132224.GQ24635@dastard> <518BA69A.5040708@sgi.com> In-Reply-To: <518BA69A.5040708@sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/09/2013 08:37 AM, Rich Johnston wrote: > On 05/09/2013 08:22 AM, Dave Chinner wrote: >> On Thu, May 09, 2013 at 07:42:03AM -0500, Rich Johnston wrote: >>> Dave, >>> >>> The following have been committed: >>> >>> logprint-agi-dump >>> xfs-fsr-odirect-read >>> xfsprogs-remove-dirv1-support >>> xfsprogs-kernel-3.8-update >>> xfsprogs-kernel-3.9-rc1-dev-update >> >> Which version did you commit? This ones posted in this thread were >> superceded by the tarball I posted on May 1 (i.e [TARBALL V2] >> xfsprogs: fixes and updates to current kernel code)... >> >> Cheers, >> >> Dave. >> > From this tar > xfsprogs-kern-sync-patchset-v2.tar.gz > Sorry for any confusion, the last 2 have also been commited. commit 999f0b9c38baf5ef72535c6bb4df7ca0db677192 Author: Dave Chinner Date: Thu May 9 08:19:06 2013 -0500 xfsprogs: updata libxlog to current kernel code commit 7e280e68cab97e321e306c6d1b2e684095f47296 Author: Dave Chinner Date: Thu May 9 08:18:51 2013 -0500 xfsprogs: add CRC32c infrastructure From tinguely@sgi.com Thu May 9 09:59:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D9A0D29DF8 for ; Thu, 9 May 2013 09:59:48 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id A48638F8039; Thu, 9 May 2013 07:59:45 -0700 (PDT) Message-ID: <518BB9E7.5090005@sgi.com> Date: Thu, 09 May 2013 09:59:51 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 11/8] xfs_logprint: fix continuation transactions References: <20130430121300.GB10481@dastard> <20130501063136.GL10481@dastard> In-Reply-To: <20130501063136.GL10481@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/01/13 01:31, Dave Chinner wrote: > From: Dave Chinner > > As demonstrated by xfs/295, continuation transactions cause of > problems for xfs_logprint. The failure demonstrated by the test is > that the buffer log format structures are variable sized on disk - > the dirty bitmap is sized according to the buffer length, not fixed > to the length of the maximum supported buffer size. > > xfs_logprint assumes that the buf log format reocrds are of fixed > size, and so when a short buffer is found it fails to handle it > properly and treats it like a continuation record. This causses the > opheader pointer to be incremented incorrectly and then logprint > wanders off into a dark corner and gets eaten by a grue. > > While fixing this, make the xlog_print_record code that does the > transaction opheader walking a little easier to read and stop it > from outputting binary data direct to the console by converting the > no-data-print case to use a hex dumping loop. > > Signed-off-by: Dave Chinner > --- > logprint/log_misc.c | 22 +++++++++++++++++----- > 1 file changed, 17 insertions(+), 5 deletions(-) Looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Thu May 9 10:07:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3273C29DF8 for ; Thu, 9 May 2013 10:07:12 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 09AD2304032; Thu, 9 May 2013 08:07:11 -0700 (PDT) Message-ID: <518BBBA5.3060502@sgi.com> Date: Thu, 09 May 2013 10:07:17 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 9/8] libxlog: fix log buffer alignment References: <20130430121300.GB10481@dastard> <20130501001714.GH10481@dastard> In-Reply-To: <20130501001714.GH10481@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 04/30/13 19:17, Dave Chinner wrote: > From: Dave Chinner > > The libxlog sync changed the way log buffers used in recovery are > aligned to sector sizes. The old code used to check for a zero log > sector size and not do any alignment - this check was removed from > the kernel code because there is always log sector size configured. > It turns out that userspace *never* sets the log sector size, so > userspace has always simply ignored the alignment in log replay > (oops!). > > This problem manifested itself as detecting a freshly mkfs'd > filesystem as having a totally zeroed log and hence xfs_check was > emitting output and hence xfstests was refusing to run. > > This patch correctly configures the callers that use the log > recovery code so that the log sector size is set appropriately and > ensures that log recovery operates as expected. > > Signed-off-by: Dave Chinner > --- Looks good. Reviewed-by: Mark Tinguely From filippo.stenico@gmail.com Thu May 9 10:12:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6398929DF8 for ; Thu, 9 May 2013 10:12:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id F32A3AC001 for ; Thu, 9 May 2013 08:11:56 -0700 (PDT) X-ASG-Debug-ID: 1368112314-04bdf0422516c860001-NocioJ Received: from mail-lb0-f169.google.com (mail-lb0-f169.google.com [209.85.217.169]) by cuda.sgi.com with ESMTP id VK9A2Xb0WURPyHa1 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 May 2013 08:11:55 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.217.169 X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.169] Received: by mail-lb0-f169.google.com with SMTP id z5so3176590lbh.0 for ; Thu, 09 May 2013 08:11:53 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.169] X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.169] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=CG/y1Robj5EVLRNHcidDPWiRhd2ucV0VR8FI5DOupMU=; b=HPSffOFrvsyKVAqkr+fpHIN49vg/YP7Xzrm497gYQofjXAvvE6g0OSrNDSOHIROkeX IkeDHIQOqUk0RAoIhKlKxRcjxFmQ1sZvSdKAccwY2ujsuhK9mJr010rcB/UD1ZPtki3b Z32Rfp79FsxXeAXPHmb5/XSf5WGnB2Lap/fZzL0G6IqgKX0IizrfbltgJs/lvvwlrzuV hQfHCkM6D6JYKpS8+Utt610YnxeJfhHRTIeEVxhPqUo6OD439XgOM2q/F6vw7GNvzoKJ RyCSDK/a7GTcnIPSJPXtGkJG7WVF3zVCap4OC3O26vlOrZoP+a4+l787vQwK+Qe8Wa8a yfhA== X-Received: by 10.112.142.67 with SMTP id ru3mr2137142lbb.53.1368112313709; Thu, 09 May 2013 08:11:53 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Thu, 9 May 2013 08:11:13 -0700 (PDT) In-Reply-To: <20130508233910.GL24635@dastard> References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> <20130508233910.GL24635@dastard> From: Filippo Stenico Date: Thu, 9 May 2013 17:11:13 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Dave Chinner X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: Eric Sandeen , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c36d9e78bc9304dc4a78cb X-Barracuda-Connect: mail-lb0-f169.google.com[209.85.217.169] X-Barracuda-Start-Time: 1368112314 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130464 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c36d9e78bc9304dc4a78cb Content-Type: text/plain; charset=ISO-8859-1 On Thu, May 9, 2013 at 1:39 AM, Dave Chinner wrote: > On Wed, May 08, 2013 at 07:30:05PM +0200, Filippo Stenico wrote: > > Hello, > > -m option seems not to handle the excessive memory consumption I ran > into. > > I actually ran xfs_repair -vv -m1750 and looking into kern.log it seems > > that xfs_repair invoked oom killer, but was killed itself ( !! ) > > That's exactly what the oom killer is supposed to do. > > Yeah, some sacrifice needed. > > This is last try to reproduce segfault: > > xfs_repair -vv -P -m1750 > > I know your filesystem is around 7TB in size, but how much RAM do > you have? It's not unusual for xfs_repair to require many GB of > memory to run succesfully on filesystems of this size... > > it is around 11 TB, 7.2 used. I have 4 G ram, but xfs_repair -vv -m1 says I need 1558 root@ws1000:~# xfs_repair -vv -P -m 1 /dev/mapper/vg0-lv0 Phase 1 - find and verify superblock... - max_mem = 1024, icount = 29711040, imem = 116058, dblock = 2927886336, dmem = 1429632 Required memory for repair is greater that the maximum specified with the -m option. Please increase it to at least 1558. so I figured 1750 megs would be enough Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > -- F --001a11c36d9e78bc9304dc4a78cb Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

On Thu, May 9, 2013 at 1:39 AM, Dave Chi= nner <david@fromorbit.com> wrote:
On Wed, May 08, 2013 at 07:30:05PM +0200, Filippo Stenico wrote:
> Hello,
> -m option seems not to handle the excessive memory consumption I ran i= nto.
> I actually ran xfs_repair -vv -m1750 and =A0looking into kern.log it = =A0seems
> that xfs_repair invoked oom killer, but was killed itself ( !! )

That's exactly what the oom killer is supposed to do.

Yeah, some sacrifice needed.
=A0
> This is last try to reproduce segfault:
> xfs_repair -vv -P -m1750

I know your filesystem is around 7TB in size, but how much RAM do
you have? It's not unusual for xfs_repair to require many GB of
memory to run succesfully on filesystems of this size...

it is around 11 TB, 7.2 used.
I have 4 G ram, but = xfs_repair -vv -m1 says I need 1558
root@ws1000:~# xfs_repair -vv -P -m = 1 /dev/mapper/vg0-lv0
Phase 1 - find and verify superblock...
=A0=A0= =A0=A0=A0=A0=A0 - max_mem =3D 1024, icount =3D 29711040, imem =3D 116058, d= block =3D 2927886336, dmem =3D 1429632
Required memory for repair is greater that the maximum specified
with th= e -m option. Please increase it to at least 1558.

so I figured 1750 = megs would be enough

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.co= m

_______________________________________________
xfs mailing list
xfs@oss.sgi.com http:= //oss.sgi.com/mailman/listinfo/xfs



--
F --001a11c36d9e78bc9304dc4a78cb-- From tinguely@sgi.com Thu May 9 10:23:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D8B3529DF8 for ; Thu, 9 May 2013 10:23:21 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id B593B8F8039; Thu, 9 May 2013 08:23:18 -0700 (PDT) Message-ID: <518BBF6C.2000101@sgi.com> Date: Thu, 09 May 2013 10:23:24 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 10/8] xfsdb: re-instate DA btree node headers References: <20130430121300.GB10481@dastard> <20130501063006.GK10481@dastard> In-Reply-To: <20130501063006.GK10481@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/01/13 01:30, Dave Chinner wrote: > From: Dave Chinner > > When removing the dirv1 code, it wasn't immediately obvious that the > dir v2 code used a small chunk of the dirv1 field definitions. i.e. > those for the DA btree node headers. Hence bits of xfs_db didn't > work as expected, and some tests failed in non-obvious ways. e.g > test 073 failed with this additional line of output: > > Use of uninitialized value $logstart in numeric gt (>) at /home/dave/src/xfstests-dev/src/fill2fs line 84 > > which was the result of the command: > > xfs_db -r -c sb -c $TEST_DEV > > giving an unexpectedly incorrect output. > > Re-instate the needed field definitions and rename them from "DIR" > to "DA" so it is obvious they are for decoding DA Btree format > blocks. > > Signed-off-by: Dave Chinner > --- This no longer cleanly applies. --Mark. From tinguely@sgi.com Thu May 9 10:57:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1FA6B29DF8 for ; Thu, 9 May 2013 10:57:16 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id E78BC304053; Thu, 9 May 2013 08:57:15 -0700 (PDT) Message-ID: <518BC761.6050208@sgi.com> Date: Thu, 09 May 2013 10:57:21 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: "Michael L. Semon" , "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> In-Reply-To: <20130509031646.GN24635@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/08/13 22:16, Dave Chinner wrote: > xfs: avoid nesting transactions in xfs_qm_scall_setqlim() > > From: Dave Chinner > > Lockdep reports: > > ============================================= > [ INFO: possible recursive locking detected ] > 3.9.0+ #3 Not tainted > --------------------------------------------- > setquota/28368 is trying to acquire lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > but task is already holding lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be > allocated. > > xfs_qm_scall_setqlim() is starting a transaction and then not > passing it into xfs_qm_dqet() and so it starts it's own transaction > when allocating the dquot. Splat! > > Fix this by not allocating the dquot in xfs_qm_scall_setqlim() > inside the setqlim transaction. This requires getting the dquot > first (and allocating it if necessary) then dropping and relocking > the dquot before joining it to the setqlim transaction. > > Reported-by: Michael L. Semon > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- > 1 file changed, 20 insertions(+), 15 deletions(-) Looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Thu May 9 11:21:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0AD3029DF8 for ; Thu, 9 May 2013 11:21:33 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id CCE5D8F8064; Thu, 9 May 2013 09:21:29 -0700 (PDT) Message-ID: <518BCD0F.6000501@sgi.com> Date: Thu, 09 May 2013 11:21:35 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 10/8] xfsdb: re-instate DA btree node headers References: <20130430121300.GB10481@dastard> <20130501063006.GK10481@dastard> <518BBF6C.2000101@sgi.com> In-Reply-To: <518BBF6C.2000101@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/09/13 10:23, Mark Tinguely wrote: > On 05/01/13 01:30, Dave Chinner wrote: >> From: Dave Chinner >> >> When removing the dirv1 code, it wasn't immediately obvious that the >> dir v2 code used a small chunk of the dirv1 field definitions. i.e. >> those for the DA btree node headers. Hence bits of xfs_db didn't >> work as expected, and some tests failed in non-obvious ways. e.g >> test 073 failed with this additional line of output: >> >> Use of uninitialized value $logstart in numeric gt (>) at >> /home/dave/src/xfstests-dev/src/fill2fs line 84 >> >> which was the result of the command: >> >> xfs_db -r -c sb -c $TEST_DEV >> >> giving an unexpectedly incorrect output. >> >> Re-instate the needed field definitions and rename them from "DIR" >> to "DA" so it is obvious they are for decoding DA Btree format >> blocks. >> >> Signed-off-by: Dave Chinner >> --- > > This no longer cleanly applies. > > --Mark. Oops, I forgot that patch 9/8 and 10/8 was folded back into the version 2 of the tarball. 11/8 (xfs_logprint: fix continuation transactions) is not in the tarball. Sorry for the noise. --Mark. From samplete@prominereweb.prominereweb.com Thu May 9 11:27:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=HTML_IMAGE_RATIO_04, HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8AA0729DF8 for ; Thu, 9 May 2013 11:27:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 62F728F8065 for ; Thu, 9 May 2013 09:27:54 -0700 (PDT) X-ASG-Debug-ID: 1368116871-04cb6c53a2168490001-w1Z2WR Received: from prominereweb.prominereweb.com (prominereweb.prominereweb.com [198.1.90.230]) by cuda.sgi.com with ESMTP id cdla4H4Tmz3uCu4Q (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 May 2013 09:27:52 -0700 (PDT) X-Barracuda-Envelope-From: samplete@prominereweb.prominereweb.com X-Barracuda-Apparent-Source-IP: 198.1.90.230 Received: from samplete by prominereweb.prominereweb.com with local (Exim 4.80) (envelope-from ) id 1UaTh8-0006vP-V4 for linux-xfs@oss.sgi.com; Thu, 09 May 2013 21:57:50 +0530 To: linux-xfs@oss.sgi.com Subject: Video intimo X-PHP-Script: www.telanganapellivedika.co.in/i/bol.php for 200.87.215.194 X-ASG-Orig-Subj: Video intimo From: mi bebe miralo MIME-Version: 2.5 Content-Type: text/html; charset="iso-8859-1" Message-Id: Date: Thu, 09 May 2013 21:57:50 +0530 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - prominereweb.prominereweb.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [504 32008] / [47 12] X-AntiAbuse: Sender Address Domain - prominereweb.prominereweb.com X-Get-Message-Sender-Via: prominereweb.prominereweb.com: authenticated_id: samplete/only user confirmed/virtual account not confirmed X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/samplete/public_html/pellivedhika/i/bol.php X-Source-Dir: sampletemplates.net:/public_html/pellivedhika/i X-Barracuda-Connect: prominereweb.prominereweb.com[198.1.90.230] X-Barracuda-Start-Time: 1368116871 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.27 X-Barracuda-Spam-Status: No, SCORE=0.27 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA148a, HTML_IMAGE_RATIO_04, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130470 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA148a URI: Custom Rule SA148a 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.17 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message Invitacion Facebook
Facebook  
Si no quieres seguir recibiendo estos mensajes de Facebook, por favor haz clic en cancelar la suscripcion Facebook, Inc. Attention: Department 415 P.O Box 10005 Palo Alto CA 94303
From filippo.stenico@gmail.com Thu May 9 12:23:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 78AE529DF8 for ; Thu, 9 May 2013 12:23:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 092D7AC00A for ; Thu, 9 May 2013 10:23:19 -0700 (PDT) X-ASG-Debug-ID: 1368120192-04bdf04226172ef0001-NocioJ Received: from mail-lb0-f180.google.com (mail-lb0-f180.google.com [209.85.217.180]) by cuda.sgi.com with ESMTP id 9a4ea7rf2CicWRuS (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 May 2013 10:23:13 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.217.180 X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.180] Received: by mail-lb0-f180.google.com with SMTP id v1so3325119lbd.11 for ; Thu, 09 May 2013 10:23:12 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.180] X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.180] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=VHtZfWKyjAbAm8Q+FrSdIlH13V/R/zyHLaNfS18Cn5o=; b=qVH95Xibu+mUZMpkqXFKPECwCJmcgtq8Fi6iMcxncz+1BXyQr2S1YrfEXkRut8AEUn 2iIlSWSbb4D1wutgG6UY2uCKxAHhQsy1SfsQmbxKwVruW6exhCd10MQvcL2Rh80x/hcd W2mpM9g8d3aaNqeDhOPm+NzHgCqc1HAljUl+xg3pViYG5uD0+/7t4Vl3MyG0pktAzrhr +ZVZU/SF/4/FOp+etMHgZxALbBhCB0eASEc2+LVBHoFB4X8xCkqHC+F89XZc1rUGztBb rr2lcybTnLRCPNo/ZIBXHssyk7UUenyR/DR8kZU1m2MrkBL3aMQlhs2SerCb+v0PE3Hd mdXg== X-Received: by 10.152.6.39 with SMTP id x7mr5904782lax.21.1368120192213; Thu, 09 May 2013 10:23:12 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Thu, 9 May 2013 10:22:32 -0700 (PDT) In-Reply-To: References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> <20130508233910.GL24635@dastard> From: Filippo Stenico Date: Thu, 9 May 2013 19:22:32 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Dave Chinner X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: Eric Sandeen , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=089e013d19221127c604dc4c4e96 X-Barracuda-Connect: mail-lb0-f180.google.com[209.85.217.180] X-Barracuda-Start-Time: 1368120193 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130474 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --089e013d19221127c604dc4c4e96 Content-Type: text/plain; charset=ISO-8859-1 Hello, ran xfs_repair -vv -L -P -m1750 and segfault at expected point. I got the core-dump with dbg symbols, along with repair output and strace output. What should I do with it? Provide as it is? Archive is about 70M: for now I can make a public share: https://apps.memopal.com/e/S656XDVV Hope this can help. On Thu, May 9, 2013 at 5:11 PM, Filippo Stenico wrote: > > > On Thu, May 9, 2013 at 1:39 AM, Dave Chinner wrote: > >> On Wed, May 08, 2013 at 07:30:05PM +0200, Filippo Stenico wrote: >> > Hello, >> > -m option seems not to handle the excessive memory consumption I ran >> into. >> > I actually ran xfs_repair -vv -m1750 and looking into kern.log it >> seems >> > that xfs_repair invoked oom killer, but was killed itself ( !! ) >> >> That's exactly what the oom killer is supposed to do. >> >> Yeah, some sacrifice needed. > > >> > This is last try to reproduce segfault: >> > xfs_repair -vv -P -m1750 >> >> I know your filesystem is around 7TB in size, but how much RAM do >> you have? It's not unusual for xfs_repair to require many GB of >> memory to run succesfully on filesystems of this size... >> >> it is around 11 TB, 7.2 used. > I have 4 G ram, but xfs_repair -vv -m1 says I need 1558 > root@ws1000:~# xfs_repair -vv -P -m 1 /dev/mapper/vg0-lv0 > Phase 1 - find and verify superblock... > - max_mem = 1024, icount = 29711040, imem = 116058, dblock = > 2927886336, dmem = 1429632 > Required memory for repair is greater that the maximum specified > with the -m option. Please increase it to at least 1558. > > so I figured 1750 megs would be enough > > Cheers, >> >> Dave. >> -- >> Dave Chinner >> david@fromorbit.com >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >> > > > > -- > F -- F --089e013d19221127c604dc4c4e96 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,
ran xfs_repair -vv -L -P -m1750 and segfault at expected point.
I got the core-dump with dbg symbols, along with repair output and st= race output.

What should I do with it? Provide as it is?
Archive = is about 70M: for now I can make a public share:
https://apps.memopal.com/e/= S656XDVV

Hope this can help.


On Thu, May 9, 2013 at 5:11 PM, Filippo Stenico <filippo.stenic= o@gmail.com> wrote:


On Thu, May 9, 2013 at 1:39 AM, Dave Chinner <= ;david@fromorbit.c= om> wrote:
On Wed, May 08, 2013 at 07:30:05PM +0200, Filippo Stenico wrote:
> Hello,
> -m option seems not to handle the excessive memory consumption I ran i= nto.
> I actually ran xfs_repair -vv -m1750 and =A0looking into kern.log it = =A0seems
> that xfs_repair invoked oom killer, but was killed itself ( !! )

That's exactly what the oom killer is supposed to do.

Yeah, some sacrifice needed.
=A0<= br>
> This is last try to reproduce segfault:
> xfs_repair -vv -P -m1750

I know your filesystem is around 7TB in size, but how much RAM do
you have? It's not unusual for xfs_repair to require many GB of
memory to run succesfully on filesystems of this size...

it is around 11 TB, 7.2 used.
I have 4 G ram= , but xfs_repair -vv -m1 says I need 1558
root@ws1000:~# xfs_repair -vv = -P -m 1 /dev/mapper/vg0-lv0
Phase 1 - find and verify superblock...
=A0=A0=A0=A0=A0=A0=A0 - max_mem =3D 1024, icount =3D 29711040, imem =3D 116= 058, dblock =3D 2927886336, dmem =3D 1429632
Required memory for repair is greater that the maximum specified
with th= e -m option. Please increase it to at least 1558.

so I figured 1750 = megs would be enough

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.co= m

_______________________________________________
xfs mailing list
xfs@oss.sgi.com http:= //oss.sgi.com/mailman/listinfo/xfs



--
F



--
F --089e013d19221127c604dc4c4e96-- From bpm@oss.sgi.com Thu May 9 14:02:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 1C93129DF8; Thu, 9 May 2013 14:02:34 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. for-linus-v3.10-rc1-3-g7dfbcbe X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: cab09a81fbefcb21db5213a84461d421946f6eb8 X-Git-Newrev: 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 Message-Id: <20130509190234.1C93129DF8@oss.sgi.com> Date: Thu, 9 May 2013 14:02:33 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated 7dfbcbe xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle dd700d9 xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle 742ae1e xfs: introduce CONFIG_XFS_WARN from cab09a81fbefcb21db5213a84461d421946f6eb8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 Author: Eric Sandeen Date: Thu Apr 25 11:13:06 2013 -0500 xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle Shamelessly copied from dchinner's: ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get xfsdump uses a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Add a fallback to vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. This was done for xfs_attrlist_by_handle but xfs_compat_attrlist_by_handle (the 32-bit version) needs the same attention. Signed-off-by: Eric Sandeen Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit dd700d9452023a5b6820815a88f93c8f7010c270 Author: Eric Sandeen Date: Thu Apr 4 00:05:13 2013 -0500 xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle Shamelessly copied from dchinner's: ad650f5b xfs: fallback to vmalloc for large buffers in xfs_attrmulti_attr_get xfsdump uses for a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Add a fallback to vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. Signed-off-by: Eric Sandeen Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 742ae1e35b038ed65ddd86182723441ea74db765 Author: Dave Chinner Date: Tue Apr 30 21:39:34 2013 +1000 xfs: introduce CONFIG_XFS_WARN Running a CONFIG_XFS_DEBUG kernel in production environments is not the best idea as it introduces significant overhead, can change the behaviour of algorithms (such as allocation) to improve test coverage, and (most importantly) panic the machine on non-fatal errors. There are many cases where all we want to do is run a kernel with more bounds checking enabled, such as is provided by the ASSERT() statements throughout the code, but without all the potential overhead and drawbacks. This patch converts all the ASSERT statements to evaluate as WARN_ON(1) statements and hence if they fail dump a warning and a stack trace to the log. This has minimal overhead and does not change any algorithms, and will allow us to find strange "out of bounds" problems more easily on production machines. There are a few places where assert statements contain debug only code. These are converted to be debug-or-warn only code so that we still get all the assert checks in the code. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/Kconfig | 13 +++++++++++++ fs/xfs/mrlock.h | 12 ++++++------ fs/xfs/xfs.h | 5 +++++ fs/xfs/xfs_alloc_btree.c | 4 ++-- fs/xfs/xfs_bmap_btree.c | 4 ++-- fs/xfs/xfs_btree.h | 2 +- fs/xfs/xfs_dir2_node.c | 4 ++-- fs/xfs/xfs_ialloc_btree.c | 4 ++-- fs/xfs/xfs_inode.c | 2 +- fs/xfs/xfs_ioctl.c | 14 ++++++++++---- fs/xfs/xfs_ioctl32.c | 14 ++++++++++---- fs/xfs/xfs_linux.h | 24 ++++++++++++++++++------ fs/xfs/xfs_message.c | 8 ++++++++ fs/xfs/xfs_message.h | 1 + fs/xfs/xfs_trans.h | 4 ++-- 15 files changed, 83 insertions(+), 32 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Thu May 9 14:23:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 96A0729DF8 for ; Thu, 9 May 2013 14:23:40 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3C167304081; Thu, 9 May 2013 12:23:37 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id EB1A7500B4B; Thu, 9 May 2013 14:23:36 -0500 (CDT) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS updates (#2) for 3.10-rc1 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20130509192336.EB1A7500B4B@whiskey.americas.sgi.com> Date: Thu, 9 May 2013 14:23:36 -0500 (CDT) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull these three stragglers for 3.10-rc1. CONFIG_XFS_WARN will be helpful in environments which are having trouble, and where full CONFIG_XFS_DEBUG isn't appropriate. There are two fixes for issues with extended attribtues seen with xfsdump. Thanks, Ben The following changes since commit cab09a81fbefcb21db5213a84461d421946f6eb8: xfs: fix da node magic number mismatches (2013-05-01 14:48:30 -0500) are available in the git repository at: git://oss.sgi.com/xfs/xfs tags/for-linus-v3.10-rc1-2 for you to fetch changes up to 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076: xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle (2013-05-07 19:00:10 -0500) ---------------------------------------------------------------- xfs: update (#2) for v3.10-rc1 * add CONFIG_XFS_WARN, a step between zero debugging and CONFIG_XFS_DEBUG. * fix attrmulti and attrlist to fall back to vmalloc when kmalloc fails. ---------------------------------------------------------------- Dave Chinner (1): xfs: introduce CONFIG_XFS_WARN Eric Sandeen (2): xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle fs/xfs/Kconfig | 13 +++++++++++++ fs/xfs/mrlock.h | 12 ++++++------ fs/xfs/xfs.h | 5 +++++ fs/xfs/xfs_alloc_btree.c | 4 ++-- fs/xfs/xfs_bmap_btree.c | 4 ++-- fs/xfs/xfs_btree.h | 2 +- fs/xfs/xfs_dir2_node.c | 4 ++-- fs/xfs/xfs_ialloc_btree.c | 4 ++-- fs/xfs/xfs_inode.c | 2 +- fs/xfs/xfs_ioctl.c | 14 ++++++++++---- fs/xfs/xfs_ioctl32.c | 14 ++++++++++---- fs/xfs/xfs_linux.h | 24 ++++++++++++++++++------ fs/xfs/xfs_message.c | 8 ++++++++ fs/xfs/xfs_message.h | 1 + fs/xfs/xfs_trans.h | 4 ++-- 15 files changed, 83 insertions(+), 32 deletions(-) From rjohnston@sgi.com Thu May 9 14:47:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8FE9129DF8 for ; Thu, 9 May 2013 14:47:53 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21-nlb.corp.sgi.com [137.38.102.207]) by relay2.corp.sgi.com (Postfix) with ESMTP id 57F1D304064; Thu, 9 May 2013 12:47:53 -0700 (PDT) Received: from [134.15.0.144] (134.15.0.144) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 14:47:52 -0500 Message-ID: <518BFD56.9080605@sgi.com> Date: Thu, 9 May 2013 14:47:34 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Jan Schmidt CC: Subject: Re: [PATCH] xfstests: add execution of a custom command to fsstress (-x and -X options) References: <1363863585-25598-1-git-send-email-list.xfs@jan-o-sch.net> <20130321195054.GO17758@dastard> <514B72B9.1010005@jan-o-sch.net> <20130321211218.GP17758@dastard> <514C0309.1000104@jan-o-sch.net> <20130324235135.GH6369@dastard> <515EBE9E.3000905@jan-o-sch.net> <5183CCFB.8060505@jan-o-sch.net> In-Reply-To: <5183CCFB.8060505@jan-o-sch.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.144] On 05/03/2013 09:43 AM, Jan Schmidt wrote: > > Looks like there are no suggestions how to make -x useful for multiple workers. > Can we then have the single worker solution (original patch) merged for now? > > -Jan I don't see why not. Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Thu May 9 14:50:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id F35C229DF8 for ; Thu, 9 May 2013 14:50:54 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21.corp.sgi.com [137.38.102.206]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5B8D7AC010; Thu, 9 May 2013 12:50:51 -0700 (PDT) Received: from [134.15.0.144] (134.15.0.144) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 14:50:50 -0500 Message-ID: <518BFE1A.3040505@sgi.com> Date: Thu, 9 May 2013 14:50:50 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Jan Schmidt CC: Subject: Re: [PATCH] xfstests: add execution of a custom command to fsstress (-x and -X options) References: <1363863585-25598-1-git-send-email-list.xfs@jan-o-sch.net> In-Reply-To: <1363863585-25598-1-git-send-email-list.xfs@jan-o-sch.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.144] Jan, Thanks for the patch it has been committed. --Rich commit e47ebda011f69fab2c9f3090f50f1cfb9353f7e7 Author: Jan Schmidt Date: Thu May 9 14:40:00 2013 -0500 xfstests: add execution of a custom command to fsstress (-x and -X options) From rjohnston@sgi.com Thu May 9 15:24:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0910B29DF8 for ; Thu, 9 May 2013 15:24:06 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21-nlb.corp.sgi.com [137.38.102.207]) by relay2.corp.sgi.com (Postfix) with ESMTP id DE0C530405F; Thu, 9 May 2013 13:24:02 -0700 (PDT) Received: from [134.15.0.144] (134.15.0.144) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 15:24:02 -0500 Message-ID: <518C05E1.2010000@sgi.com> Date: Thu, 9 May 2013 15:24:01 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> <518B999B.1000403@sgi.com> <20130509132224.GQ24635@dastard> <518BA69A.5040708@sgi.com> <518BA7A5.7000802@sgi.com> In-Reply-To: <518BA7A5.7000802@sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.144] On 05/09/2013 08:41 AM, Rich Johnston wrote: > On 05/09/2013 08:37 AM, Rich Johnston wrote: >> On 05/09/2013 08:22 AM, Dave Chinner wrote: >>> On Thu, May 09, 2013 at 07:42:03AM -0500, Rich Johnston wrote: >>>> Dave, >>>> >>>> The following have been committed: >>>> >>>> logprint-agi-dump >>>> xfs-fsr-odirect-read >>>> xfsprogs-remove-dirv1-support >>>> xfsprogs-kernel-3.8-update >>>> xfsprogs-kernel-3.9-rc1-dev-update >>> >>> Which version did you commit? This ones posted in this thread were >>> superceded by the tarball I posted on May 1 (i.e [TARBALL V2] >>> xfsprogs: fixes and updates to current kernel code)... >>> >>> Cheers, >>> >>> Dave. >>> >> From this tar >> xfsprogs-kern-sync-patchset-v2.tar.gz >> > Sorry for any confusion, the last 2 have also been committed. > > commit 999f0b9c38baf5ef72535c6bb4df7ca0db677192 > Author: Dave Chinner > Date: Thu May 9 08:19:06 2013 -0500 > > xfsprogs: updata libxlog to current kernel code > > > commit 7e280e68cab97e321e306c6d1b2e684095f47296 > Author: Dave Chinner > Date: Thu May 9 08:18:51 2013 -0500 > > xfsprogs: add CRC32c infrastructure > They are all committed now, thanks for the patchset Dave. --Rich commit 8e78288a3a994534a320f9699c91572f7c859b8c Author: Dave Chinner Date: Thu May 9 11:20:13 2013 -0500 xfs_logprint: fix continuation transactions From sandeen@redhat.com Thu May 9 17:02:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 05A3829DF8 for ; Thu, 9 May 2013 17:02:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B7D9530407F for ; Thu, 9 May 2013 15:02:55 -0700 (PDT) X-ASG-Debug-ID: 1368136971-04bdf0422617f3e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qOQAO4lR9OwPumzR for ; Thu, 09 May 2013 15:02:51 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r49M2plr019516 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 May 2013 18:02:51 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r49M2m6S006557 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 9 May 2013 18:02:50 -0400 Message-ID: <518C1D08.4080309@redhat.com> Date: Thu, 09 May 2013 17:02:48 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss CC: ext4 development Subject: [PATCH] xfstests: regression test for ext4 resize with non-extent files X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: regression test for ext4 resize with non-extent files Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368136971 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com Regression test for: c5c72d8 ext4: fix online resizing for ext3-compat file systems Signed-off-by: Eric Sandeen --- diff --git a/tests/ext4/306 b/tests/ext4/306 new file mode 100755 index 0000000..6a961ee --- /dev/null +++ b/tests/ext4/306 @@ -0,0 +1,83 @@ +#! /bin/bash +# FS QA Test No. ext4/306 +# +# Test that blocks are available to non-extent files after a resize2fs +# Regression test for commit: +# c5c72d8 ext4: fix online resizing for ext3-compat file systems +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +PIDS="" +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + _scratch_unmount +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs ext4 +_supported_os Linux + +_require_scratch + +# This needs to mount ext3; might require ext3 driver, or ext4 +# might handle it itself. Find out if we have it one way or another. +modprobe ext3 > /dev/null 2>&1 +grep -q ext3 /proc/filesystems || _notrun "This test requires ext3 support" + +rm -f $seqres.full +echo "Silence is golden" + +# Make a small ext3 fs, (extents disabled) & mount it +yes | mkfs.ext3 $SCRATCH_DEV 512m >> $seqres.full 2>&1 +_scratch_mount -t ext3 || _fail "couldn't mount fs as ext3" +# Create a small non-extent-based file +echo "Create 1m testfile1" +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 0 1m" | _filter_xfs_io +echo "Create testfile2 to fill the fs" +# A large non-extent-based file filling the fs; this will run out & fail +$XFS_IO_PROG -f $SCRATCH_MNT/testfile2 -c "pwrite 0 512m" | _filter_xfs_io + +# Remount as ext4 +_scratch_unmount +_scratch_mount -t ext4 || _fail "couldn't remount fs as ext4" +df -h $SCRATCH_MNT >> $seqres.full + +# Grow it by 512m +echo "Resize to 1g" +resize2fs $SCRATCH_DEV 1g >> $seqres.full 2>&1 || _fail "Could not resize to 1g" +df -h $SCRATCH_MNT >> $seqres.full + +# See if we can add more blocks to the files +echo "append 2m to testfile1" +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 1m 2m" | _filter_xfs_io +echo "append 2m to testfile2" +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 512m 2m" | _filter_xfs_io + +status=0 +exit diff --git a/tests/ext4/306.out b/tests/ext4/306.out new file mode 100644 index 0000000..654637d --- /dev/null +++ b/tests/ext4/306.out @@ -0,0 +1,14 @@ +QA output created by 306 +Silence is golden +Create 1m testfile1 +wrote 1048576/1048576 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Create testfile2 to fill the fs +pwrite64: No space left on device +Resize to 1g +append 2m to testfile1 +wrote 2097152/2097152 bytes at offset 1048576 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +append 2m to testfile2 +wrote 2097152/2097152 bytes at offset 536870912 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) diff --git a/tests/ext4/group b/tests/ext4/group index 53af708..4c3e2f4 100644 --- a/tests/ext4/group +++ b/tests/ext4/group @@ -9,3 +9,4 @@ 303 aio dangerous ioctl rw stress 304 aio dangerous ioctl rw stress 305 auto +306 dangerous rw resize quick From david@fromorbit.com Thu May 9 17:35:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4705A29DF8 for ; Thu, 9 May 2013 17:35:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D0240AC00F for ; Thu, 9 May 2013 15:35:37 -0700 (PDT) X-ASG-Debug-ID: 1368138935-04cb6c53a1177ac0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id HDp2CleEA5umsEy5 for ; Thu, 09 May 2013 15:35:35 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao4RABYkjFF5LFR6/2dsb2JhbABSgweDCrgbhRkEAXkXdIIfAQEFOhwjEAgDDgoJJQ8FJQMhE4gLvikWjXWBHQeDVQOXK5E2gyEq Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 10 May 2013 08:05:34 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaZQy-0005cX-4I; Fri, 10 May 2013 08:35:32 +1000 Date: Fri, 10 May 2013 08:35:32 +1000 From: Dave Chinner To: Rich Johnston Cc: xfs@oss.sgi.com Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 Message-ID: <20130509223532.GR24635@dastard> X-ASG-Orig-Subj: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> <518B999B.1000403@sgi.com> <20130509132224.GQ24635@dastard> <518BA69A.5040708@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518BA69A.5040708@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368138935 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130494 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' On Thu, May 09, 2013 at 08:37:30AM -0500, Rich Johnston wrote: > On 05/09/2013 08:22 AM, Dave Chinner wrote: > >On Thu, May 09, 2013 at 07:42:03AM -0500, Rich Johnston wrote: > >>Dave, > >> > >>The following have been committed: > >> > >>logprint-agi-dump > >>xfs-fsr-odirect-read > >>xfsprogs-remove-dirv1-support > >>xfsprogs-kernel-3.8-update > >>xfsprogs-kernel-3.9-rc1-dev-update > > > >Which version did you commit? This ones posted in this thread were > >superceded by the tarball I posted on May 1 (i.e [TARBALL V2] > >xfsprogs: fixes and updates to current kernel code)... > > > >Cheers, > > > >Dave. > > > From this tar > xfsprogs-kern-sync-patchset-v2.tar.gz Ok. In future, can you make sure you respond to the thread that patchset was posted in so there isn't any confusion about what you committed? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 9 17:37:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E893B29DF8 for ; Thu, 9 May 2013 17:37:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 63C91AC00C for ; Thu, 9 May 2013 15:37:27 -0700 (PDT) X-ASG-Debug-ID: 1368139045-04cbb05fe517fa90001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 2G1RFxC6VbwYJinz for ; Thu, 09 May 2013 15:37:25 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao4RABYkjFF5LFR6/2dsb2JhbABMBoMHgwq4G4UZBAF5F3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLvikWjWwJgR0Hg1UDlyuKEockgyEq Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 10 May 2013 08:07:24 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaZSm-0005cf-5g; Fri, 10 May 2013 08:37:24 +1000 Date: Fri, 10 May 2013 08:37:24 +1000 From: Dave Chinner To: Filippo Stenico Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: Xfs_repair segfaults. Message-ID: <20130509223724.GS24635@dastard> X-ASG-Orig-Subj: Re: Xfs_repair segfaults. References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> <20130508233910.GL24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368139045 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130494 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 09, 2013 at 05:11:13PM +0200, Filippo Stenico wrote: > On Thu, May 9, 2013 at 1:39 AM, Dave Chinner wrote: > > > On Wed, May 08, 2013 at 07:30:05PM +0200, Filippo Stenico wrote: > > > Hello, > > > -m option seems not to handle the excessive memory consumption I ran > > into. > > > I actually ran xfs_repair -vv -m1750 and looking into kern.log it seems > > > that xfs_repair invoked oom killer, but was killed itself ( !! ) > > > > That's exactly what the oom killer is supposed to do. > > > > Yeah, some sacrifice needed. > > > > > This is last try to reproduce segfault: > > > xfs_repair -vv -P -m1750 > > > > I know your filesystem is around 7TB in size, but how much RAM do > > you have? It's not unusual for xfs_repair to require many GB of > > memory to run succesfully on filesystems of this size... > > > > it is around 11 TB, 7.2 used. > I have 4 G ram, but xfs_repair -vv -m1 says I need 1558 > root@ws1000:~# xfs_repair -vv -P -m 1 /dev/mapper/vg0-lv0 > Phase 1 - find and verify superblock... > - max_mem = 1024, icount = 29711040, imem = 116058, dblock = > 2927886336, dmem = 1429632 > Required memory for repair is greater that the maximum specified > with the -m option. Please increase it to at least 1558. That's the minimum it requires to run in prefetch mode, not the maximum it will use. 4GB RAM on a badly corrupted 7TB filesystem is almost certainly not enough memory to track all the broken bits that need tracking. Add 20-30GB of swap space and see how it goes... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 9 17:39:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7F77229DF8 for ; Thu, 9 May 2013 17:39:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 09EA9AC00A for ; Thu, 9 May 2013 15:39:54 -0700 (PDT) X-ASG-Debug-ID: 1368139192-04cb6c53a3177d10001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id AnXH8AQJ8ieTCVqF for ; Thu, 09 May 2013 15:39:53 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao0RAFUljFF5LFR6/2dsb2JhbABSgweDCrgbhRkEAXkXdIIfAQEFOhwjEAgDGAklDwUlAyETiAu+KhaNdYEdB4NVA5crihKHJIMhKg Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 10 May 2013 08:09:29 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaZUm-0005dl-Bl; Fri, 10 May 2013 08:39:28 +1000 Date: Fri, 10 May 2013 08:39:28 +1000 From: Dave Chinner To: Filippo Stenico Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: Xfs_repair segfaults. Message-ID: <20130509223928.GT24635@dastard> X-ASG-Orig-Subj: Re: Xfs_repair segfaults. References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> <20130508233910.GL24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368139192 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130494 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 09, 2013 at 07:22:32PM +0200, Filippo Stenico wrote: > Hello, > ran xfs_repair -vv -L -P -m1750 and segfault at expected point. > > I got the core-dump with dbg symbols, along with repair output and strace > output. > > What should I do with it? Provide as it is? Run it in gdb to get a stack trace of where it died. $ gdb xfs_repair corefile ... > bt and post the output, along with the repair output from the run that crashed... Cheers, Dave. -- Dave Chinner david@fromorbit.com From rjohnston@sgi.com Thu May 9 18:00:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DF40329DF8 for ; Thu, 9 May 2013 18:00:33 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21-nlb.corp.sgi.com [137.38.102.207]) by relay2.corp.sgi.com (Postfix) with ESMTP id BA231304090; Thu, 9 May 2013 16:00:33 -0700 (PDT) Received: from [134.15.0.144] (134.15.0.144) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 9 May 2013 18:00:33 -0500 Message-ID: <518C2A90.703@sgi.com> Date: Thu, 9 May 2013 18:00:32 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 References: <20130412145555.GF30622@dastard> <518B999B.1000403@sgi.com> <20130509132224.GQ24635@dastard> <518BA69A.5040708@sgi.com> <20130509223532.GR24635@dastard> In-Reply-To: <20130509223532.GR24635@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.144] On 05/09/2013 05:35 PM, Dave Chinner wrote: > On Thu, May 09, 2013 at 08:37:30AM -0500, Rich Johnston wrote: >> On 05/09/2013 08:22 AM, Dave Chinner wrote: >>> On Thu, May 09, 2013 at 07:42:03AM -0500, Rich Johnston wrote: >>>> Dave, >>>> >>>> The following have been committed: >>>> >>>> logprint-agi-dump >>>> xfs-fsr-odirect-read >>>> xfsprogs-remove-dirv1-support >>>> xfsprogs-kernel-3.8-update >>>> xfsprogs-kernel-3.9-rc1-dev-update >>> >>> Which version did you commit? This ones posted in this thread were >>> superceded by the tarball I posted on May 1 (i.e [TARBALL V2] >>> xfsprogs: fixes and updates to current kernel code)... >>> >>> Cheers, >>> >>> Dave. >>> >> From this tar >> xfsprogs-kern-sync-patchset-v2.tar.gz > > Ok. In future, can you make sure you respond to the thread that > patchset was posted in so there isn't any confusion about what you > committed? > > Cheers, > > Dave. > I did It shows up threaded in thunderbird. Here is your post Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UQfON-0000vN-KC for xfs@oss.sgi.com; Sat, 13 Apr 2013 00:55:55 +1000 Date: Sat, 13 Apr 2013 00:55:55 +1000 From: Dave Chinner To: Subject: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 Message-ID: <20130412145555.GF30622@dastard> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Message-ID: <518B999B.1000403@sgi.com> > Date: Thu, 9 May 2013 07:42:03 -0500 > From: Rich Johnston > User-Agent: Mozilla/5.0 (X11; Linux i686; > rv:17.0) Gecko/20130329 Thunderbird/17.0.5 > To: Dave Chinner > Subject: Re: [PATCH TARBALL, DEV ONLY] xfsprogs: metadata CRC support V2 > References: <20130412145555.GF30622@dastard> > In-Reply-To: <20130412145555.GF30622@dastard> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ And my reply: Regards --Rich From david@fromorbit.com Thu May 9 20:38:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2186929DF8 for ; Thu, 9 May 2013 20:38:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id ACBF8AC001 for ; Thu, 9 May 2013 18:38:33 -0700 (PDT) X-ASG-Debug-ID: 1368149911-04bdf042231870c0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id AtiAWjuxIiY6mnsH for ; Thu, 09 May 2013 18:38:32 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ao0RAGBOjFF5LFR6/2dsb2JhbABSgweDCrgfhRkEAXsXdIIfAQEFOhwjEAgDGAklDwUlAyETiAu+GRaNTieBHQeDVQOXK4oShySDISqBLQ Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 10 May 2013 11:08:31 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UacI2-000659-NJ; Fri, 10 May 2013 11:38:30 +1000 Date: Fri, 10 May 2013 11:38:30 +1000 From: Dave Chinner To: Mark Tinguely Cc: Dave Jones , CAI Qian , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130510013830.GO23072@dastard> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507193146.GA7539@redhat.com> <51895CD7.7040806@sgi.com> <20130507195954.GA8384@redhat.com> <51895E51.2050508@sgi.com> <20130507202217.GA9883@redhat.com> <518962FC.2060509@sgi.com> <20130507222256.GD24635@dastard> <51898400.8000900@sgi.com> <20130507235458.GG24635@dastard> <518A5213.60307@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518A5213.60307@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368149911 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130506 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 08, 2013 at 08:24:35AM -0500, Mark Tinguely wrote: > On 05/07/13 18:54, Dave Chinner wrote: > > > Checking the EFI for whether it is being released from recovery > after we've already released the known active reference is a mistake > worthy of a brown paper bag. Fix the (now) obvious use after free > that it can cause. > > Reported-by: Dave Jones > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_extfree_item.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > Looks good. > > Reviewed-by: Mark Tinguely Zach pointed out that the fix is much more complex than it needs to be. I'll respin the patch and resend it later today. Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlsemon35@gmail.com Thu May 9 21:00:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 835C529DF8 for ; Thu, 9 May 2013 21:00:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 19C7CAC013 for ; Thu, 9 May 2013 19:00:26 -0700 (PDT) X-ASG-Debug-ID: 1368151224-04bdf04226187ec0001-NocioJ Received: from mail-gh0-f177.google.com (mail-gh0-f177.google.com [209.85.160.177]) by cuda.sgi.com with ESMTP id DSVUVVLIi44SO2Ey (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 May 2013 19:00:24 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.177 X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.177] Received: by mail-gh0-f177.google.com with SMTP id f20so799095ghb.8 for ; Thu, 09 May 2013 19:00:24 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.177] X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.177] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=RI6d5Db0P7WKJmEmHXtY+b46sU4xCsC/is/X7cRhwvM=; b=eoHCjqNK+s6YY0eIT7ZM1F71tvO6XP9S4NVgrwXissb9Qmd7cKp/EkPait/AG08fFD A8U8+7kaHXLBdranQlh4gjJXDrDFuOtV90q9RngDN6Tg1aIYSFjLt5QYQfK9/C3zrI6v aWvLlQavilby8rck7/hCYdDd1ZSEBUZW3D6/I7aWTIv7fOHjP54jCJHWBFEtGvaSFfgL AmY5L72CJrWgUPR/+9+hgUtG88koyTOoZWE5q4ujFgVWVoNW0Ik3j3MN22Sc+119DEAT e144mjxzVH/NZsBSHNHYP7NYE2wCmvh3gY4U82IFLowgPln3nxnny8bKf1hVOQUNV0VA sLrA== X-Received: by 10.236.125.230 with SMTP id z66mr10175820yhh.174.1368151223912; Thu, 09 May 2013 19:00:23 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id y24sm943411yhn.20.2013.05.09.19.00.22 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 09 May 2013 19:00:23 -0700 (PDT) Message-ID: <518C54AA.7070908@gmail.com> Date: Thu, 09 May 2013 22:00:10 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> <20130509072045.GO24635@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector In-Reply-To: <20130509072045.GO24635@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-gh0-f177.google.com[209.85.160.177] X-Barracuda-Start-Time: 1368151224 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130508 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/09/2013 03:20 AM, Dave Chinner wrote: > On Thu, May 09, 2013 at 01:16:46PM +1000, Dave Chinner wrote: >> On Wed, May 08, 2013 at 10:24:25PM -0400, Michael L. Semon wrote: >>> Hi! I'm trying to come up with a series of ramblings that may or >>> may not be useful in a mailing-list context, with the idea that one >>> bug report might be good, the next might be me thinking aloud with >>> data in hand because I know something's wrong but can't put my >>> finger on it. An ex-girlfriend saw the movie "Rain Man" years ago >>> pointed to the screen and said, "Do you see that guy? That's you!" >>> If only I could be so smart...or act as well as Dustin Hoffman. The >>> noisy thinking is there, just not the brilliant insights... >>> >>> This report is to pass on a kernel lock detector message that might >>> be reproducible under a certain family of tests. generic/230 may >>> not be at fault, it's just where the detector went off. >> >> No, there's definitely a bug there. Thanks for the report, Michael. >> Try the patch below. > > Actaully, there's a bug in the error handling in that version - it > fails to unlock the quotaoff lock properly on failure. The version > below fixes that problem. > > Cheers, > > Dave. OK, I'll try this version as well. The first version seemed to work just fine. The rest of the letter has been shortened from a more detailed review to a casual one with a scripted run of xfstests at the end. If nothing else, it shows a) a dir3 function in a stack trace on a non-CRC filesystem, b) loggen might need to be installed in the `make install` version of xfstests, c) your previous-run-times feature has been restored, and d) a pwrite64 "file too large" may or may not be there because J. Liu's bitness patches are doing their jobs. Good luck! Michael Original review (reduced): As far as logical testing goes, your fix works well. Without your patch, I got the original lockdep message, and the situation was replicated by issuing a `du -sx /` while xfstests xfs/054 was running. With your patch, all seems well for things that mention quotas. The lock detector went off once more, but that was after attempting to merge a 2013-05-08 kernel git with xfs-oss/master of the same vintage, then apply my normal patches and your original quota lockdep fix. Hardware change: Because `git commit` caused XFS to emit the message "XFS: possible memory allocation deadlock in xfs_buf_allocate_memory (mode:0x250)" a few times, RAM was increased to 256 MB. The merge was reworked by restoring the git from a backup tarball and doing the merge-and-patch session again. Script started on Thu May 9 16:00:28 2013 cu -t -l /dev/ttyu0 -s 115200 Connected # Note: lm256 is a local group root@oldsvrhw:/var/lib/xfstests# ./check -xfs -g lm256 FSTYP -- xfs (debug) PLATFORM -- Linux/i686 oldsvrhw 3.9.0+ MKFS_OPTIONS -- -f -llogdev=/dev/sda7 -bsize=4096 /dev/sdb6 MOUNT_OPTIONS -- -ologdev=/dev/sda7 /dev/sdb6 /mnt/xfstests-scratch xfs/003 1s ... 2s xfs/004 8s ... 8s xfs/008 5s ... 5s xfs/009 8s ... 7s xfs/012 16s ... 13s xfs/016 76s ... 62s xfs/017 [failed, exit status 1] - output mismatch (see /var/lib/xfstests/results/xfs/017.out.bad) --- tests/xfs/017.out 2013-05-09 05:24:30.996641679 -0400 +++ /var/lib/xfstests/results/xfs/017.out.bad 2013-05-09 16:03:25.185045262 -0400 @@ -3,8 +3,6 @@ *** test *** test 0 *** test 1 - *** test 2 - *** test 3 - *** test 4 -*** done ... (Run 'diff -u tests/xfs/017.out /var/lib/xfstests/results/xfs/017.out.bad' to see the entire diff) xfs/019 8s xfs/021 8s ... 7s xfs/022 [not run] No dump tape specified xfs/023 [not run] No dump tape specified xfs/024 [not run] No dump tape specified xfs/025 [not run] No dump tape specified xfs/026 22s xfs/027 22s ... 22s xfs/028 31s xfs/029 11s xfs/030 65s xfs/031 102s ... 99s xfs/033 49s xfs/034 9s ... 9s xfs/035 [not run] No dump tape specified xfs/036 [not run] No dump tape specified xfs/037 [not run] No dump tape specified xfs/038 [not run] No dump tape specified xfs/039 [not run] No dump tape specified xfs/040 [not run] Can't run srcdiff without KWORKAREA set xfs/041 121s xfs/042 163s xfs/043 [not run] No dump tape specified xfs/044 [failed, exit status 1] - output mismatch (see /var/lib/xfstests/results/xfs/044.out.bad) --- tests/xfs/044.out 2013-05-09 05:24:32.493415709 -0400 +++ /var/lib/xfstests/results/xfs/044.out.bad 2013-05-09 16:16:33.963173264 -0400 @@ -16,51 +16,18 @@ *** mount (expect success) *** umount *** zero log -*** loggen - *** zero block (1BB) x 100 +./tests/xfs/044: line 138: /var/lib/xfstests/src/loggen: No such file or directory *** mount (expect success) ... (Run 'diff -u tests/xfs/044.out /var/lib/xfstests/results/xfs/044.out.bad' to see the entire diff) xfs/045 11s xfs/046 20s ... 19s xfs/047 31s xfs/048 2s ... 1s xfs/049 [not run] External device testing in progress, skipped this test xfs/050 49s xfs/052 7s ... 8s xfs/054 31s ... 28s xfs/055 [not run] No dump tape specified xfs/056 19s xfs/057 [not run] Place holder for IRIX test 057 xfs/058 [not run] Place holder for IRIX test 058 xfs/059 32s ... 31s xfs/060 31s ... 30s xfs/061 20s xfs/063 21s ... 21s xfs/064 77s ... 75s xfs/065 53s ... 51s xfs/066 8s xfs/067 12s xfs/071 - output mismatch (see /var/lib/xfstests/results/xfs/071.out.bad) --- tests/xfs/071.out 2013-05-09 05:24:33.373478835 -0400 +++ /var/lib/xfstests/results/xfs/071.out.bad 2013-05-09 16:25:07.474096862 -0400 @@ -40,14 +40,14 @@ Writing 512 bytes, offset is +0 (direct=false) -wrote 512/512 bytes at offset +pwrite64: File too large Reading 512 bytes (direct=false) -read 512/512 bytes at offset ... (Run 'diff -u tests/xfs/071.out /var/lib/xfstests/results/xfs/071.out.bad' to see the entire diff) xfs/072 8s ... 7s xfs/073 [not run] Cannot xfs_copy with external devices xfs/078 ^CRan: xfs/003 xfs/004 xfs/008 xfs/009 xfs/012 xfs/016 xfs/017 xfs/019 xfs/021 xfs/026 xfs/027 xfs/028 xfs/029 xfs/030 xfs/031 xfs/033 xfs/034 xfs/041 xfs/042 xfs/044 xfs/045 xfs/046 xfs/047 xfs/048 xfs/050 xfs/052 xfs/054 xfs/056 xfs/059 xfs/060 xfs/061 xfs/063 xfs/064 xfs/065 xfs/066 xfs/067 xfs/071 xfs/072 Not run: xfs/022 xfs/023 xfs/024 xfs/025 xfs/035 xfs/036 xfs/037 xfs/038 xfs/039 xfs/040 xfs/043 xfs/049 xfs/055 xfs/057 xfs/058 xfs/073 Failures: xfs/017 xfs/044 xfs/071 Failed 3 of 38 tests root@oldsvrhw:/var/lib/xfstests# ./check -xfs -g lm256 FSTYP -- xfs (debug) PLATFORM -- Linux/i686 oldsvrhw 3.9.0+ MKFS_OPTIONS -- -f -llogdev=/dev/sda7 -bsize=4096 /dev/sdb6 MOUNT_OPTIONS -- -ologdev=/dev/sda7 /dev/sdb6 /mnt/xfstests-scratch xfs/003 2s ... 1s xfs/004 8s ... 8s xfs/008 5s ... 5s xfs/009 7s ... 8s xfs/012 13s ...[ 1851.323902] [ 1851.325479] ================================= [ 1851.326551] [ INFO: inconsistent lock state ] [ 1851.326551] 3.9.0+ #1 Not tainted [ 1851.326551] --------------------------------- [ 1851.326551] inconsistent {RECLAIM_FS-ON-R} -> {IN-RECLAIM_FS-W} usage. [ 1851.326551] kswapd0/18 [HC0[0]:SC0[0]:HE1:SE1] takes: [ 1851.326551] (&(&ip->i_lock)->mr_lock){++++-+}, at: [] xfs_ilock+0x10f/0x190 [ 1851.326551] {RECLAIM_FS-ON-R} state was registered at: [ 1851.326551] [] mark_held_locks+0x8a/0xf0 [ 1851.326551] [] lockdep_trace_alloc+0x5c/0xa0 [ 1851.326551] [] __alloc_pages_nodemask+0x7c/0x670 [ 1851.326551] [] new_slab+0x6e/0x2a0 [ 1851.326551] [] __slab_alloc.isra.59.constprop.67+0x1d3/0x40a [ 1851.326551] [] __kmalloc+0x10d/0x180 [ 1851.326551] [] kmem_alloc+0x56/0xd0 [ 1851.326551] [] kmem_zalloc+0x11/0xd0 [ 1851.326551] [] xfs_dabuf_map.isra.2.constprop.5+0x22e/0x520 [ 1851.326551] [] xfs_da_read_buf+0x54/0x280 [ 1851.326551] [] xfs_dir3_leaf_read.constprop.6+0x43/0x90 [ 1851.326551] [] xfs_dir2_leaf_lookup_int+0x45/0x350 [ 1851.326551] [] xfs_dir2_leaf_lookup+0x30/0x150 [ 1851.326551] [] xfs_dir_lookup+0x13f/0x160 [ 1851.326551] [] xfs_lookup+0x50/0x120 [ 1851.326551] [] xfs_vn_lookup+0x48/0x80 [ 1851.326551] [] lookup_real+0x1e/0x50 [ 1851.326551] [] do_last.isra.46+0x74a/0xb90 [ 1851.326551] [] path_openat.isra.47+0x9b/0x3e0 [ 1851.326551] [] do_filp_open+0x31/0x80 [ 1851.326551] [] open_exec+0x45/0x110 [ 1851.326551] [] do_execve_common+0x1da/0x550 [ 1851.326551] [] sys_execve+0x2f/0x50 [ 1851.326551] [] sysenter_do_call+0x12/0x36 [ 1851.326551] irq event stamp: 789831 [ 1851.326551] hardirqs last enabled at (789831): [] clear_page_dirty_for_io+0xaa/0xe0 [ 1851.326551] hardirqs last disabled at (789830): [] clear_page_dirty_for_io+0x84/0xe0 [ 1851.326551] softirqs last enabled at (789776): [] __do_softirq+0x12e/0x1f0 [ 1851.326551] softirqs last disabled at (789769): [] irq_exit+0x6d/0x80 [ 1851.326551] [ 1851.326551] other info that might help us debug this: [ 1851.326551] Possible unsafe locking scenario: [ 1851.326551] [ 1851.326551] CPU0 [ 1851.326551] ---- [ 1851.326551] lock(&(&ip->i_lock)->mr_lock); [ 1851.326551] [ 1851.326551] lock(&(&ip->i_lock)->mr_lock); [ 1851.326551] [ 1851.326551] *** DEADLOCK *** [ 1851.326551] [ 1851.326551] 1 lock held by kswapd0/18: [ 1851.326551] #0: (sb_internal){.+.+.?}, at: [] xfs_trans_alloc+0x26/0x50 [ 1851.326551] [ 1851.326551] stack backtrace: [ 1851.326551] Pid: 18, comm: kswapd0 Not tainted 3.9.0+ #1 [ 1851.326551] Call Trace: [ 1851.326551] [] print_usage_bug+0x1dc/0x1e6 [ 1851.326551] [] ? print_shortest_lock_dependencies+0x1b0/0x1b0 [ 1851.326551] [] mark_lock+0x26b/0x290 [ 1851.326551] [] __lock_acquire+0x64f/0x1690 [ 1851.326551] [] ? kmem_zone_alloc+0x56/0xd0 [ 1851.326551] [] ? xfs_vn_mknod+0x151/0x170 [ 1851.326551] [] ? xlog_space_left+0x2d/0xf0 [ 1851.326551] [] ? xlog_space_left+0x2d/0xf0 [ 1851.326551] [] lock_acquire+0x80/0x100 [ 1851.326551] [] ? xfs_ilock+0x10f/0x190 [ 1851.326551] [] down_write_nested+0x54/0xa0 [ 1851.326551] [] ? xfs_ilock+0x10f/0x190 [ 1851.326551] [] xfs_ilock+0x10f/0x190 [ 1851.326551] [] xfs_iomap_write_allocate+0x232/0x400 [ 1851.326551] [] ? lock_release_holdtime.part.27+0x88/0xe0 [ 1851.326551] [] ? xfs_ilock_nowait+0xbb/0x1e0 [ 1851.326551] [] ? up_read+0x1b/0x30 [ 1851.326551] [] ? xfs_iunlock+0xab/0x170 [ 1851.326551] [] xfs_map_blocks+0x388/0x420 [ 1851.326551] [] xfs_vm_writepage+0x355/0x6e0 [ 1851.326551] [] ? sched_clock_cpu+0xa5/0x100 [ 1851.326551] [] ? trace_hardirqs_off_caller+0x1e/0xa0 [ 1851.326551] [] shrink_page_list+0x4c7/0x680 [ 1851.326551] [] shrink_inactive_list+0x181/0x2d0 [ 1851.326551] [] shrink_lruvec+0x17a/0x3b0 [ 1851.326551] [] ? up_read+0x1b/0x30 [ 1851.326551] [] ? shrink_slab+0x1e1/0x2f0 [ 1851.326551] [] kswapd+0x30e/0x680 [ 1851.326551] [] ? try_to_free_pages+0x680/0x680 [ 1851.326551] [] kthread+0xa5/0xb0 [ 1851.326551] [] ? lock_release_holdtime.part.27+0xbc/0xe0 [ 1851.326551] [] ret_from_kernel_thread+0x1b/0x28 [ 1851.326551] [] ? __kthread_parkme+0x70/0x70 14s [ 1859.123845] XFS (sdb5): Mounting Filesystem [ 1859.439419] XFS (sdb5): Ending clean mount xfs/016 62s ...[ 1862.733835] XFS (sdb6): Mounting Filesystem [ 1863.049345] XFS (sdb6): Ending clean mount [ 1866.823293] XFS (sdb6): Mounting Filesystem From david@fromorbit.com Thu May 9 21:19:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DC51E29DF8 for ; Thu, 9 May 2013 21:19:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C8E78304067 for ; Thu, 9 May 2013 19:19:45 -0700 (PDT) X-ASG-Debug-ID: 1368152383-04cbb05fe2188ae0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id D8P9OBC2pENvD5TZ for ; Thu, 09 May 2013 19:19:44 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjURAPJXjFF5LFR6/2dsb2JhbABSgweCDny4FoUZBAF8F3SCHwEBBAEnExwYCwULCAMYCSUPBSUDIROIBgW+FRaNdYEdB4NVA5crkTaDISo Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 10 May 2013 11:49:43 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uacvu-00069x-30; Fri, 10 May 2013 12:19:42 +1000 Date: Fri, 10 May 2013 12:19:42 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector Message-ID: <20130510021942.GP23072@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> <20130509072045.GO24635@dastard> <518C54AA.7070908@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518C54AA.7070908@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368152383 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130510 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Thu, May 09, 2013 at 10:00:10PM -0400, Michael L. Semon wrote: > On 05/09/2013 03:20 AM, Dave Chinner wrote: > >On Thu, May 09, 2013 at 01:16:46PM +1000, Dave Chinner wrote: > >>On Wed, May 08, 2013 at 10:24:25PM -0400, Michael L. Semon wrote: > >>>Hi! I'm trying to come up with a series of ramblings that may or > >>>may not be useful in a mailing-list context, with the idea that one > >>>bug report might be good, the next might be me thinking aloud with > >>>data in hand because I know something's wrong but can't put my > >>>finger on it. An ex-girlfriend saw the movie "Rain Man" years ago > >>>pointed to the screen and said, "Do you see that guy? That's you!" > >>>If only I could be so smart...or act as well as Dustin Hoffman. The > >>>noisy thinking is there, just not the brilliant insights... > >>> > >>>This report is to pass on a kernel lock detector message that might > >>>be reproducible under a certain family of tests. generic/230 may > >>>not be at fault, it's just where the detector went off. > >> > >>No, there's definitely a bug there. Thanks for the report, Michael. > >>Try the patch below. > > > >Actaully, there's a bug in the error handling in that version - it > >fails to unlock the quotaoff lock properly on failure. The version > >below fixes that problem. > > > >Cheers, > > > >Dave. > > OK, I'll try this version as well. The first version seemed to work > just fine. It should, the bug was in an error handling path you are unlikely to hit. > xfs/012 13s ...[ 1851.323902] > [ 1851.325479] ================================= > [ 1851.326551] [ INFO: inconsistent lock state ] > [ 1851.326551] 3.9.0+ #1 Not tainted > [ 1851.326551] --------------------------------- > [ 1851.326551] inconsistent {RECLAIM_FS-ON-R} -> {IN-RECLAIM_FS-W} usage. > [ 1851.326551] kswapd0/18 [HC0[0]:SC0[0]:HE1:SE1] takes: > [ 1851.326551] (&(&ip->i_lock)->mr_lock){++++-+}, at: [] > xfs_ilock+0x10f/0x190 > [ 1851.326551] {RECLAIM_FS-ON-R} state was registered at: > [ 1851.326551] [] mark_held_locks+0x8a/0xf0 > [ 1851.326551] [] lockdep_trace_alloc+0x5c/0xa0 > [ 1851.326551] [] __alloc_pages_nodemask+0x7c/0x670 > [ 1851.326551] [] new_slab+0x6e/0x2a0 > [ 1851.326551] [] __slab_alloc.isra.59.constprop.67+0x1d3/0x40a > [ 1851.326551] [] __kmalloc+0x10d/0x180 > [ 1851.326551] [] kmem_alloc+0x56/0xd0 > [ 1851.326551] [] kmem_zalloc+0x11/0xd0 > [ 1851.326551] [] xfs_dabuf_map.isra.2.constprop.5+0x22e/0x520 Yup, needs a KM_NOFS allocation there because we come through here outside a transaction and so it doesn't get KM_NOFS implicitly in this case. There's been a couple of these reported in the past week or two - I need to do an audit and sweep them all up.... Technically, though, this can't cause a deadlock on the inode we hold a lock on here because it's a directory inode, not a regular file and so it will never be seen in the reclaim data writeback path nor on the inode LRU when the shrinker runs. So most likely it is a false positive... Cheers, Dave. -- Dave Chinner david@fromorbit.com From guaneryu@gmail.com Thu May 9 22:03:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6B2EF29DF8 for ; Thu, 9 May 2013 22:03:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 57C668F8037 for ; Thu, 9 May 2013 20:03:39 -0700 (PDT) X-ASG-Debug-ID: 1368155017-04cb6c53a21813e0001-NocioJ Received: from mail-vc0-f175.google.com (mail-vc0-f175.google.com [209.85.220.175]) by cuda.sgi.com with ESMTP id kqBxkAb56agyzrMR (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 May 2013 20:03:37 -0700 (PDT) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.175 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.175] Received: by mail-vc0-f175.google.com with SMTP id lf10so3329536vcb.34 for ; Thu, 09 May 2013 20:03:37 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.175] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.175] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:reply-to:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=vL0QZUTx88C8c7u/VSZWVD4s9x7Rz3djNlAi/ERzHpI=; b=PaNUmQ9x3Zy5HKLCSsv6aHhOcs66tWEnEQXGLiNz0SdeHkZSZzQAmc42cdpOR+QnIU ZYaf/PbbBS/++qhvPCQvqODVtz8vx1fMeDxFRUOYyDV2DhBOklvyihyJxVuiGNlK+Q3E OHOau+PsXYffcoU8uHlxm1TIrgWXs1nfycAy5kHTdR+iK2LJaTr1PqoszvXwoR3jTRJ+ hdQMfL6JcobpeQ6Y/76jtIkQ3puX7WA1LEAMcUdq+mQZFUrpsCH4NWWJMZc/3hjKsJvN DfIfN8bvTQEfMQ0Q02cyjd2ym/WGpyIQ6/FRrCa83AUx1YzoSyZKbHB1tcHVG9yxnLQv woKg== X-Received: by 10.52.186.233 with SMTP id fn9mr3332573vdc.44.1368155017293; Thu, 09 May 2013 20:03:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.60.13 with HTTP; Thu, 9 May 2013 20:03:17 -0700 (PDT) Reply-To: guaneryu@gmail.com In-Reply-To: <518C1D08.4080309@redhat.com> References: <518C1D08.4080309@redhat.com> From: Eryu Guan Date: Fri, 10 May 2013 11:03:17 +0800 Message-ID: Subject: Re: [PATCH] xfstests: regression test for ext4 resize with non-extent files To: Eric Sandeen X-ASG-Orig-Subj: Re: [PATCH] xfstests: regression test for ext4 resize with non-extent files Cc: xfs-oss , ext4 development Content-Type: multipart/alternative; boundary=bcaec547c9efcdbb5204dc546979 X-Barracuda-Connect: mail-vc0-f175.google.com[209.85.220.175] X-Barracuda-Start-Time: 1368155017 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130512 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --bcaec547c9efcdbb5204dc546979 Content-Type: text/plain; charset=ISO-8859-1 On Fri, May 10, 2013 at 6:02 AM, Eric Sandeen wrote: > Regression test for: > > c5c72d8 ext4: fix online resizing for ext3-compat file systems > > Signed-off-by: Eric Sandeen > --- > > diff --git a/tests/ext4/306 b/tests/ext4/306 > new file mode 100755 > index 0000000..6a961ee > --- /dev/null > +++ b/tests/ext4/306 > @@ -0,0 +1,83 @@ > +#! /bin/bash > +# FS QA Test No. ext4/306 > +# > +# Test that blocks are available to non-extent files after a resize2fs > +# Regression test for commit: > +# c5c72d8 ext4: fix online resizing for ext3-compat file systems > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > + > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +PIDS="" > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + _scratch_unmount > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# real QA test starts here > +_supported_fs ext4 > +_supported_os Linux > + > +_require_scratch > + > +# This needs to mount ext3; might require ext3 driver, or ext4 > +# might handle it itself. Find out if we have it one way or another. > +modprobe ext3 > /dev/null 2>&1 > +grep -q ext3 /proc/filesystems || _notrun "This test requires ext3 > support" > + > +rm -f $seqres.full > +echo "Silence is golden" > The test has verbose output log, so "Silence is golden" is not true here, remove this line or redirect other echo to $seqres.full ? > + > +# Make a small ext3 fs, (extents disabled) & mount it > +yes | mkfs.ext3 $SCRATCH_DEV 512m >> $seqres.full 2>&1 > +_scratch_mount -t ext3 || _fail "couldn't mount fs as ext3" > +# Create a small non-extent-based file > +echo "Create 1m testfile1" > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 0 1m" | _filter_xfs_io > +echo "Create testfile2 to fill the fs" > +# A large non-extent-based file filling the fs; this will run out & fail > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile2 -c "pwrite 0 512m" | _filter_xfs_io > + > +# Remount as ext4 > +_scratch_unmount > +_scratch_mount -t ext4 || _fail "couldn't remount fs as ext4" > +df -h $SCRATCH_MNT >> $seqres.full > + > +# Grow it by 512m > +echo "Resize to 1g" > +resize2fs $SCRATCH_DEV 1g >> $seqres.full 2>&1 || _fail "Could not resize > to 1g" > +df -h $SCRATCH_MNT >> $seqres.full > + > +# See if we can add more blocks to the files > +echo "append 2m to testfile1" > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 1m 2m" | _filter_xfs_io > +echo "append 2m to testfile2" > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 512m 2m" | > _filter_xfs_io > + > +status=0 > +exit > diff --git a/tests/ext4/306.out b/tests/ext4/306.out > new file mode 100644 > index 0000000..654637d > --- /dev/null > +++ b/tests/ext4/306.out > @@ -0,0 +1,14 @@ > +QA output created by 306 > +Silence is golden > +Create 1m testfile1 > +wrote 1048576/1048576 bytes at offset 0 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +Create testfile2 to fill the fs > +pwrite64: No space left on device > +Resize to 1g > +append 2m to testfile1 > +wrote 2097152/2097152 bytes at offset 1048576 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +append 2m to testfile2 > +wrote 2097152/2097152 bytes at offset 536870912 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > diff --git a/tests/ext4/group b/tests/ext4/group > index 53af708..4c3e2f4 100644 > --- a/tests/ext4/group > +++ b/tests/ext4/group > @@ -9,3 +9,4 @@ > 303 aio dangerous ioctl rw stress > 304 aio dangerous ioctl rw stress > 305 auto > +306 dangerous rw resize quick > I'm wondering why it's not in auto group :) Otherwise patch looks good to me. Eryu Guan > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > --bcaec547c9efcdbb5204dc546979 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
On Fri, May 10, 2013 at 6:02 AM= , Eric Sandeen <sandeen@redhat.com> wrote:
Regression test for:

c5c72d8 ext4: fix online resizing for ext3-compat file systems

Signed-off-by: Eric Sandeen <sande= en@redhat.com>
---

diff --git a/tests/ext4/306 b/tests/ext4/306
new file mode 100755
index 0000000..6a961ee
--- /dev/null
+++ b/tests/ext4/306
@@ -0,0 +1,83 @@
+#! /bin/bash
+# FS QA Test No. ext4/306
+#
+# Test that blocks are available to non-extent files after a resize2fs
+# Regression test for commit:
+# c5c72d8 ext4: fix online resizing for ext3-compat file systems
+#
+#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. =A0All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. =A0See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., =A051 Franklin St, Fifth Floor, Boston, MA =A002110-1301 =A0USA +#----------------------------------------------------------------------- +
+seq=3D`basename $0`
+seqres=3D$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+PIDS=3D""
+status=3D1 =A0 =A0 =A0 # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+ =A0 =A0_scratch_unmount
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs ext4
+_supported_os Linux
+
+_require_scratch
+
+# This needs to mount ext3; might require ext3 driver, or ext4
+# might handle it itself. =A0Find out if we have it one way or another. +modprobe ext3 > /dev/null 2>&1
+grep -q ext3 /proc/filesystems || _notrun "This test requires ext3 su= pport"
+
+rm -f $seqres.full
+echo "Silence is golden"

The test has v= erbose output log, so "Silence is golden" is not true here, remov= e this line or redirect other echo to $seqres.full ?
+
+# Make a small ext3 fs, (extents disabled) & mount it
+yes | mkfs.ext3 $SCRATCH_DEV 512m >> $seqres.full 2>&1
+_scratch_mount -t ext3 || _fail "couldn't mount fs as ext3"<= br> +# Create a small non-extent-based file
+echo "Create 1m testfile1"
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 0 1m" | _filte= r_xfs_io
+echo "Create testfile2 to fill the fs"
+# A large non-extent-based file filling the fs; this will run out & fa= il
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile2 -c "pwrite 0 512m" | _fil= ter_xfs_io
+
+# Remount as ext4
+_scratch_unmount
+_scratch_mount -t ext4 || _fail "couldn't remount fs as ext4"= ;
+df -h $SCRATCH_MNT >> $seqres.full
+
+# Grow it by 512m
+echo "Resize to 1g"
+resize2fs $SCRATCH_DEV 1g >> $seqres.full 2>&1 || _fail "= ;Could not resize to 1g"
+df -h $SCRATCH_MNT >> $seqres.full
+
+# See if we can add more blocks to the files
+echo "append 2m to testfile1"
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 1m 2m" | _filt= er_xfs_io
+echo "append 2m to testfile2"
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 512m 2m" | _fi= lter_xfs_io
+
+status=3D0
+exit
diff --git a/tests/ext4/306.out b/tests/ext4/306.out
new file mode 100644
index 0000000..654637d
--- /dev/null
+++ b/tests/ext4/306.out
@@ -0,0 +1,14 @@
+QA output created by 306
+Silence is golden
+Create 1m testfile1
+wrote 1048576/1048576 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+Create testfile2 to fill the fs
+pwrite64: No space left on device
+Resize to 1g
+append 2m to testfile1
+wrote 2097152/2097152 bytes at offset 1048576
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+append 2m to testfile2
+wrote 2097152/2097152 bytes at offset 536870912
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
diff --git a/tests/ext4/group b/tests/ext4/group
index 53af708..4c3e2f4 100644
--- a/tests/ext4/group
+++ b/tests/ext4/group
@@ -9,3 +9,4 @@
=A0303 aio dangerous ioctl rw stress
=A0304 aio dangerous ioctl rw stress
=A0305 auto
+306 dangerous rw resize quick

I'm wondering w= hy it's not in auto group :)

Otherwise patch looks go= od to me.

Eryu Guan

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4&q= uot; in
the body of a message to major= domo@vger.kernel.org
More majordomo info at =A0http://vger.kernel.org/majordomo-info.html

--bcaec547c9efcdbb5204dc546979-- From sandeen@redhat.com Thu May 9 22:06:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C575B29DF8 for ; Thu, 9 May 2013 22:06:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A4298304051 for ; Thu, 9 May 2013 20:06:00 -0700 (PDT) X-ASG-Debug-ID: 1368155159-04cb6c53a3181540001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 22O2BviZvFTUGDHm for ; Thu, 09 May 2013 20:06:00 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4A35wEB012678 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 May 2013 23:05:58 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4A35uKb002789 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 9 May 2013 23:05:57 -0400 Message-ID: <518C6414.20800@redhat.com> Date: Thu, 09 May 2013 22:05:56 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: guaneryu@gmail.com CC: xfs-oss , ext4 development Subject: Re: [PATCH] xfstests: regression test for ext4 resize with non-extent files References: <518C1D08.4080309@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: regression test for ext4 resize with non-extent files In-Reply-To: X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368155159 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/9/13 10:03 PM, Eryu Guan wrote: > On Fri, May 10, 2013 at 6:02 AM, Eric Sandeen > wrote: > ... > index 53af708..4c3e2f4 100644 > --- a/tests/ext4/group > +++ b/tests/ext4/group > @@ -9,3 +9,4 @@ > 303 aio dangerous ioctl rw stress > 304 aio dangerous ioctl rw stress > 305 auto > +306 dangerous rw resize quick > > > I'm wondering why it's not in auto group :) because I forgot about auto! :) But it's also somewhat dangerous; it could oops or hang, so perhaps auto is not a good idea. -Eric > Otherwise patch looks good to me. > > Eryu Guan From olgun@olgunotodizayn.com Thu May 9 22:22:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C6AB729DF8 for ; Thu, 9 May 2013 22:22:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6256FAC001 for ; Thu, 9 May 2013 20:22:19 -0700 (PDT) X-ASG-Debug-ID: 1368156135-04bdf0422618ad60001-NocioJ Received: from linux.yaztekbilisim.com (77-223-154-15.sistem724.com.tr [77.223.154.15]) by cuda.sgi.com with ESMTP id WsSEuHB9x7nnxUhV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 May 2013 20:22:17 -0700 (PDT) X-Barracuda-Envelope-From: olgun@olgunotodizayn.com X-Barracuda-Apparent-Source-IP: 77.223.154.15 Received: from [219.138.239.245] (port=4563 helo=joecq) by linux.yaztekbilisim.com with esmtpa (Exim 4.80) (envelope-from ) id 1UadvL-0008U0-DR; Fri, 10 May 2013 06:23:12 +0300 From: =?GB2312?B?hcermMjn?= Subject: dfht1r To: xfs@oss.sgi.com X-ASG-Orig-Subj: dfht1r Content-Type: multipart/mixed; charset="GB2312"; boundary="cthXgighH9=_3yIWTSdA2FwUc9plMZesmO" MIME-Version: 1.0 Date: Fri, 10 May 2013 11:22:15 +0800 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - linux.yaztekbilisim.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - olgunotodizayn.com X-Get-Message-Sender-Via: linux.yaztekbilisim.com: authenticated_id: olgun@olgunotodizayn.com X-Barracuda-Connect: 77-223-154-15.sistem724.com.tr[77.223.154.15] X-Barracuda-Start-Time: 1368156136 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.94 X-Barracuda-Spam-Status: No, SCORE=0.94 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, MISSING_MID, PR0N_SUBJECT, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130514 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20130510032218.F1651A42174@cuda.sgi.com> This is a multi-part message in MIME format --cthXgighH9=_3yIWTSdA2FwUc9plMZesmO Content-Type: text/plain Content-Transfer-Encoding: 8bit L163592521976421975 aÒµ½çµÄ²úÆ·¿ª·¢Á÷³Ì¼Ü¹¹Ê¾Àý bÕÆÎÕ¿ÆÑ§µÄвúÆ·¿ª·¢Á÷³ÌºÍÑз¢ÏîÄ¿¹ÜÀí²Ù×÷·½·¨ cÒµ½çµÄ²úÆ·¿ª·¢ÏêϸÁ÷³ÌʾÀý dÕÆÎÕÒµ½ç×î¼ÑµÄÑз¢¹ÜÀíģʽÓëʵ¼ù£¬ eÒµ½çµÄ²úÆ·¿ª·¢²Ù×÷Ö¸µ¼Ê顢ģ°å¡¢¼ì²é±íʾÀý fÒµ½çµÄ²úÆ·¿ª·¢×ÓÁ÷³ÌʾÀý ghk15 --cthXgighH9=_3yIWTSdA2FwUc9plMZesmO Content-Type: application/octet-stream; name="Cdbtvj_4883.rar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Cdbtvj_4883.rar" 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 --cthXgighH9=_3yIWTSdA2FwUc9plMZesmO-- From david@fromorbit.com Thu May 9 23:56:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2577E29DF8 for ; Thu, 9 May 2013 23:56:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 044268F8033 for ; Thu, 9 May 2013 21:56:39 -0700 (PDT) X-ASG-Debug-ID: 1368161798-04cbb05fe418e1d0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id CSfmvaT4dI1L6Dix for ; Thu, 09 May 2013 21:56:38 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhkQAJt9jFF5LFR6/2dsb2JhbABSgweDCrgXhRkEAX0XdIIfAQEFOhwjEAgDGAkeBw8FJQMKFxOIC74FFo11gR0Hg1UDlyuRNoMhKg Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 10 May 2013 14:26:05 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UafMu-0006OE-C1; Fri, 10 May 2013 14:55:44 +1000 Date: Fri, 10 May 2013 14:55:44 +1000 From: Dave Chinner To: Eric Sandeen Cc: guaneryu@gmail.com, ext4 development , xfs-oss Subject: Re: [PATCH] xfstests: regression test for ext4 resize with non-extent files Message-ID: <20130510045544.GQ23072@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: regression test for ext4 resize with non-extent files References: <518C1D08.4080309@redhat.com> <518C6414.20800@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518C6414.20800@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368161798 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130520 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 09, 2013 at 10:05:56PM -0500, Eric Sandeen wrote: > On 5/9/13 10:03 PM, Eryu Guan wrote: > > On Fri, May 10, 2013 at 6:02 AM, Eric Sandeen > wrote: > > > > ... > > > index 53af708..4c3e2f4 100644 > > --- a/tests/ext4/group > > +++ b/tests/ext4/group > > @@ -9,3 +9,4 @@ > > 303 aio dangerous ioctl rw stress > > 304 aio dangerous ioctl rw stress > > 305 auto > > +306 dangerous rw resize quick > > > > > > I'm wondering why it's not in auto group :) > > > because I forgot about auto! :) > > But it's also somewhat dangerous; it could oops or hang, so perhaps > auto is not a good idea. If the bug has already been fixed, then auto rather than dangerous should be used. If the hang/panic cannot be fixed, or is going to take some time to be fixed, that's when dangerous should be used. Cheers, Dave. -- Dave Chinner david@fromorbit.com From eguan@redhat.com Fri May 10 02:07:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 52A8E29DF8 for ; Fri, 10 May 2013 02:07:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 322A9304051 for ; Fri, 10 May 2013 00:07:55 -0700 (PDT) X-ASG-Debug-ID: 1368169674-04cbb05fe5192fa0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id LFrabjeHBt7eMt5C for ; Fri, 10 May 2013 00:07:54 -0700 (PDT) X-Barracuda-Envelope-From: eguan@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4A77rmn029770 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 10 May 2013 03:07:54 -0400 Received: from localhost (dhcp12-135.nay.redhat.com [10.66.12.135] (may be forged)) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4A77oIp016107 for ; Fri, 10 May 2013 03:07:52 -0400 Date: Fri, 10 May 2013 15:07:49 +0800 From: Eryu Guan To: xfs@oss.sgi.com Subject: Re: [PATCH v3] xfstests generic 312: test fallocate(2) ENOSPC when file size is greater than 4G Message-ID: <20130510070749.GC2460@eguan-t400.nay.redhat.com> X-ASG-Orig-Subj: Re: [PATCH v3] xfstests generic 312: test fallocate(2) ENOSPC when file size is greater than 4G References: <1367833355-14473-1-git-send-email-eguan@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1367833355-14473-1-git-send-email-eguan@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368169674 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, May 06, 2013 at 05:42:35PM +0800, Eryu Guan wrote: > ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G > > Regression test for commit > 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() > > Signed-off-by: Eryu Guan > --- > v3: rebase on top of master > v2: Check for $SCRATCH_DEV size, _notrun if it's smaller than 5G Any comments on this test case? Thanks! Eryu Guan > > tests/generic/312 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/generic/312.out | 2 ++ > tests/generic/group | 1 + > 3 files changed, 75 insertions(+) > create mode 100644 tests/generic/312 > create mode 100644 tests/generic/312.out > > diff --git a/tests/generic/312 b/tests/generic/312 > new file mode 100644 > index 0000000..eaec43c > --- /dev/null > +++ b/tests/generic/312 > @@ -0,0 +1,72 @@ > +#! /bin/bash > +# FS QA Test No. 312 > +# > +# ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G > +# > +# Regression test for commit > +# 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > + > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# real QA test starts here > +_supported_fs generic > +_supported_os Linux > +_require_xfs_io_falloc > +_require_scratch > + > +# 5G in byte > +fssize=$((2**30 * 5)) > +required_blocks=$(($fssize / 1024)) > +dev_blocks=$(grep $(basename $(readlink -f $SCRATCH_DEV)) /proc/partitions | $AWK_PROG '{print $3}') > +if [ $required_blocks -gt $dev_blocks ];then > + _notrun "this test requires \$SCRATCH_DEV has ${fssize}B space" > +fi > + > +rm -f $seqres.full > +_scratch_mkfs_sized $fssize >>$seqres.full 2>&1 > +_scratch_mount >>$seqres.full 2>&1 > + > +echo "Silence is golden" > + > +# fallocate(2) a 6G(> 4G) file on a 5G fs > +$XFS_IO_PROG -f -c "falloc 0 6g" $SCRATCH_MNT/testfile.$seq >>$seqres.full 2>&1 > + > +_scratch_unmount > +_check_scratch_fs > +status=0 > +exit > diff --git a/tests/generic/312.out b/tests/generic/312.out > new file mode 100644 > index 0000000..6e72aa9 > --- /dev/null > +++ b/tests/generic/312.out > @@ -0,0 +1,2 @@ > +QA output created by 312 > +Silence is golden > diff --git a/tests/generic/group b/tests/generic/group > index eb52833..cb15afe 100644 > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -114,3 +114,4 @@ > 309 auto quick > 310 auto > 311 auto metadata log > +312 auto quick prealloc enospc > -- > 1.8.2.1 > From dortiz@wnyschools.net Fri May 10 04:47:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id ECC1929DF8 for ; Fri, 10 May 2013 04:47:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 78F73AC004 for ; Fri, 10 May 2013 02:47:11 -0700 (PDT) X-ASG-Debug-ID: 1368179227-04cbb05fe31998a0001-NocioJ Received: from mail.wnyschools.net (mail.wnyschools.net [65.51.98.134]) by cuda.sgi.com with ESMTP id 8YYevlhe40eDtSaa (version=TLSv1 cipher=RC4-MD5 bits=128 verify=NO) for ; Fri, 10 May 2013 02:47:08 -0700 (PDT) X-Barracuda-Envelope-From: dortiz@wnyschools.net X-Barracuda-Apparent-Source-IP: 65.51.98.134 Received: from EXVS-01.wnyschools.net ([172.16.99.203]) by exc-04.wnyschools.net ([172.16.97.4]) with mapi; Fri, 10 May 2013 05:36:38 -0400 From: Doris Ortiz Date: Fri, 10 May 2013 05:36:37 -0400 Subject: =?iso-8859-1?Q?mettre_=E0_niveau_votre_compte_de_messagerie?= Thread-Topic: =?iso-8859-1?Q?mettre_=E0_niveau_votre_compte_de_messagerie?= X-ASG-Orig-Subj: =?iso-8859-1?Q?mettre_=E0_niveau_votre_compte_de_messagerie?= Thread-Index: AQHOTWHeVpUYp0i7lECE7mxQK3syRQ== Message-ID: <13A20A4678102E48BEEF0D4C9C96BDCD0BFD8B1BE97F@EXVS-01.wnyschools.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ninja-pim: Scanned by Ninja x-ninja-attachmentfiltering: (no action) acceptlanguage: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: mail.wnyschools.net[65.51.98.134] X-Barracuda-Start-Time: 1368179228 X-Barracuda-Encrypted: RC4-MD5 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.23 X-Barracuda-Spam-Status: No, SCORE=1.23 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA717, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130538 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header 0.00 BSF_SC0_SA717 Custom Rule BSF_SC0_SA717 To: undisclosed-recipients:; Vous avez d=E9pass=E9 votre quota email limite de 450MB. Vous devez mettre = =E0 jour votre email quota limite =E0 2 Go dans les prochaines 48 heures. Utiliser l= e Web ci-dessous un lien pour mettre =E0 niveau votre compte de messagerie: http://websdaz.webs.com Merci d'utiliser notre email. From bernd.schubert@itwm.fraunhofer.de Fri May 10 05:19:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 00B3F29DF8 for ; Fri, 10 May 2013 05:19:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id E096A304077 for ; Fri, 10 May 2013 03:19:27 -0700 (PDT) X-ASG-Debug-ID: 1368181165-04cbb05fe419b160001-w1Z2WR Received: from mailgw1.uni-kl.de (mailgw1.uni-kl.de [131.246.120.220]) by cuda.sgi.com with ESMTP id OVqHrFcZsNOYlh8m (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 03:19:26 -0700 (PDT) X-Barracuda-Envelope-From: bernd.schubert@itwm.fraunhofer.de X-Barracuda-Apparent-Source-IP: 131.246.120.220 Received: from itwm2.itwm.fhg.de (itwm2.itwm.fhg.de [131.246.191.3]) by mailgw1.uni-kl.de (8.14.3/8.14.3/Debian-9.4) with ESMTP id r4AAJNSE013681 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NOT) for ; Fri, 10 May 2013 12:19:23 +0200 Received: from mail2.itwm.fhg.de ([131.246.191.79]:45872) by itwm2.itwm.fhg.de with esmtps (TLSv1:DES-CBC3-SHA:168) (/C=DE/ST=Rheinland-Pfalz/L=Kaiserslautern/O=Fraunhofer ITWM/OU=SLG/CN=mail2.itwm.fhg.de)(verified=1) (Exim 4.74 #1) id 1UakQ5-0001jP-Tr; Fri, 10 May 2013 12:19:21 +0200 Message-ID: <518CC9A9.9060500@itwm.fraunhofer.de> Date: Fri, 10 May 2013 12:19:21 +0200 From: Bernd Schubert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> <20130507220742.GC24635@dastard> <518A8FD4.40700@itwm.fraunhofer.de> <20130509004115.GM24635@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: <20130509004115.GM24635@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-ITWM-CharSet: ISO-8859-1 X-ITWM-Scanned-By: mail2.itwm.fhg.de X-Barracuda-Connect: mailgw1.uni-kl.de[131.246.120.220] X-Barracuda-Start-Time: 1368181165 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130542 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On 05/09/2013 02:41 AM, Dave Chinner wrote: > On Wed, May 08, 2013 at 07:48:04PM +0200, Bernd Schubert wrote: >> On 05/08/2013 12:07 AM, Dave Chinner wrote: >>> On Tue, May 07, 2013 at 01:18:13PM +0200, Bernd Schubert wrote: >>>> On 05/07/2013 03:12 AM, Dave Chinner wrote: >>>>> On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: >>>>>> On 05/06/2013 02:28 PM, Dave Chinner wrote: >>>>>>> On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: >>>>>>>> And anpther protection fault, this time with 3.9.0. Always happens >>>>>>>> on one of the servers. Its ECC memory, so I don't suspect a faulty >>>>>>>> memory bank. Going to fsck now- >>>>>>> >>>>>>> http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F >>>>>> >>>>>> Isn't that a bit overhead? And I can't provide /proc/meminfo and >>>>>> others, as this issue causes a kernel panic a few traces later. >>>>> >>>>> Provide what information you can. Without knowing a single thing >>>>> about your hardware, storage config and workload, I can't help you >>>>> at all. You're asking me to find a needle in a haystack blindfolded >>>>> and with both hands tied behind my back.... >>>> >>>> I see that xfs_info, meminfo, etc are useful, but /proc/mounts? >>>> Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the >>>> output of /proc/mounts, please let me know if you were really >>>> interested in all of that non-xfs output? >>> >>> Yes. You never know what is relevant to a problem that is reported, >>> especially if there are multiple filesystems sharing the same >>> device... >> >> Hmm, I see. But you need to extend your questions to multipathing >> and shared storage. > > why would we? Anyone using such a configuration reporting a bug > usually is clueful enough to mention it in their bug report when > describing their RAID/LVM setup. The FAQ entry covers the basic > information needed to start meaingful triage, not *all* the > infomration we might ask for. It's the baseline we start from. > > Indeed, the FAQ exists because I got sick of asking people for the > same information several times a week, every week in response to > poor bug reports like yours. it's far more efficient to paste a link > several times a week. i.e. The FAQ entry is there for my benefit, > not yours. Poor bug report or not, most information you ask about in the FAQ are entirely irrelevant for this issue. > > I don't really care if you don't understand why we are asking for > that information, I simply expect you to provide it as best you can > if you want your problem solved. And here we go, the bug I reported is not my problem. I simply reported a bug in XFS. You can use it or not, I do not care at all. This is not a production system and if XFS is not running sufficiently stable I'm simply going to switch to another file system. Of course I don't like bugs and I'm going to help to fix it, but I have a long daily todo list and I'm not going to spend my time filling in irrelevent items. > >> Both time you can easily get double mounts... I >> probably should try to find some time to add ext4s MMP to XFS. > > Doesn't solve the problem. It doesn't prevent multiple write access > to the lun: > > Ah, a free lun. I'll just put LVM on it and mkfs it and.... > Oh, sorry, were you using that lun? MMP is not about human mistakes. MMP is an *additional* protection for software managed shared storage devices. If your HA software runs into a bug or gets split brain for some reasons you easily get a double mount. The fact the MMP also protects against a few human errors is just a nice addon. > > So, naive hacks like MMP don't belong in filesystems....# Maybe there are better solutions, but it works fine as it is. > >>>> And I just wonder what you are going to do with the information >>>> about the hardware. So it is an Areca hw-raid5 device with 9 disks. >>>> But does this help? It doesn't tell if one of the disks reads/writes >>>> with hickups or provides any performance characteristics at all. >>> >>> Yes, it does, because Areca cards are by far the most unreliable HW >>> RAID you can buy, which is not surprising because they are also the >> >> Ahem. Compared to other hardware raids Areca is very stable. > > Maybe in your experience. We get a report every 3-4 months about > Areca hardware causing catastrophic data loss. It outnumbers every > other type of hardware RAID by at least 10:1 when it comes to such > problem reports. The number of your reports simply correlates to the number of installed areca controllers. The vendor I'm talking about only has externally connected boxes and isn't that much used as areca. And don't get me wrong, I don't want to defend Areca at all. And personally I don't like any of these cheap raid solutions at all for several reasons (e.g. no disk latency stats, no parity verification, etc). > >> You might want to add to your FAQ something like: >> >> Q: Are you sure there is not disk / controller / memory data >> corruption? If so please state why! > > No, the FAQ entry is for gathering facts and data, not what > the bug reporter *thinks* might be the problem. If there's > corruption we'll see it in the information that is gathered, and > then we can start to look for the source. You *might* see it in the information that is gathered. But without additional checksums you are writing yourself you never can be sure. Meta CRCs as you implemented them will certainly help. Cheers, Bernd From filippo.stenico@gmail.com Fri May 10 06:01:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BC51629DF8 for ; Fri, 10 May 2013 06:01:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A92833040FA for ; Fri, 10 May 2013 04:01:19 -0700 (PDT) X-ASG-Debug-ID: 1368183677-04cb6c53a3193380001-NocioJ Received: from mail-la0-f41.google.com (mail-la0-f41.google.com [209.85.215.41]) by cuda.sgi.com with ESMTP id ncFuo32CsEYHXwJK (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 10 May 2013 04:01:18 -0700 (PDT) X-Barracuda-Envelope-From: filippo.stenico@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.41 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.41] Received: by mail-la0-f41.google.com with SMTP id lx15so1394466lab.14 for ; Fri, 10 May 2013 04:01:16 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.41] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.41] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=h/N7xOIPLI6ZL/H5bkFHfB1a+53Jehky7CpeRQqwyww=; b=GZZBQevjuezYIQaky0suTHQnr4yNHBNKl1WrHvGQ+zc3IoPqXhSqcv4XC04+AxmuRz +Q9jrhJxH/vxweYxG69Zvi/cLi4xQBdPATDpi6fQJksxdt1/cOgqFQWJNaiszr+RnO+Y f95lKUwj0htUwcf2Zv3XaNc+RBrGmDwl7HpWUMl/R2S6WMx8QHrr26vrvuJDHeYntfD4 piqhH1UQkAPs/CbZAZOVwFiHhxIzf2YpURiJjlZ1eWH4sO5cLSF/gRNZ4CCV8omY2CRQ XKtf3Jc+zCvUujDFwp2WqFnGVeiqoM+NFv5Jvto0s0vu6yWpKOlaB6MT08LzNPnU9xAn jThQ== X-Received: by 10.112.88.133 with SMTP id bg5mr7162053lbb.45.1368183676644; Fri, 10 May 2013 04:01:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.13.233 with HTTP; Fri, 10 May 2013 04:00:36 -0700 (PDT) In-Reply-To: References: <5187BF8A.2040303@sandeen.net> <5188FF88.6000508@sandeen.net> <20130508233910.GL24635@dastard> <20130509223928.GT24635@dastard> From: Filippo Stenico Date: Fri, 10 May 2013 13:00:36 +0200 Message-ID: Subject: Re: Xfs_repair segfaults. To: Dave Chinner X-ASG-Orig-Subj: Re: Xfs_repair segfaults. Cc: Eric Sandeen , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c3705208b2ad04dc5b16dc X-Barracuda-Connect: mail-la0-f41.google.com[209.85.215.41] X-Barracuda-Start-Time: 1368183677 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130544 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c3705208b2ad04dc5b16dc Content-Type: text/plain; charset=ISO-8859-1 Below is the backtrace, and last lines of verbose output at the end. I am no skilled software developer so this has little meaning to me.. only that I expected a bit more output of this backtrace.. root@ws1000:~# gdb xfs_repair core GNU gdb (GDB) 7.4.1-debian Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: ... Reading symbols from /sbin/xfs_repair...done. [New LWP 5187] warning: Can't read pathname for load map: Input/output error. [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `xfs_repair -vv -L -P -m 1750 /dev/mapper/vg0-lv0'. Program terminated with signal 11, Segmentation fault. #0 0x00007fa8a1e05bcc in _wordcopy_bwd_dest_aligned (dstp=140734808924136, srcp=98541856, len=2305843009212646584) at wordcopy.c:395 395 wordcopy.c: No such file or directory. (gdb) bt #0 0x00007fa8a1e05bcc in _wordcopy_bwd_dest_aligned (dstp=140734808924136, srcp=98541856, len=2305843009212646584) at wordcopy.c:395 #1 0x0000000000000000 in ?? () (gdb) q root@ws1000:~# uname -r 3.2.0-4-amd64 root@ws1000:~# tail xfs_repair_gdb/xfs_repair-vv-L-P-m1750.out correcting nextents for inode 28722522 bad data fork in inode 28722522 cleared inode 28722522 inode 28722524 - bad extent starting block number 3387062910, offset 0 correcting nextents for inode 28722524 bad data fork in inode 28722524 cleared inode 28722524 entry " qs " in shortform directory 28722525 references invalid inode 0 size of last entry overflows space left in in shortform dir 28722525, resetting to -2 entry contains offset out of order in shortform dir 28722525 .... Cheers, F P.S. sorry for the double mail, Eric. On Fri, May 10, 2013 at 12:39 AM, Dave Chinner wrote: > On Thu, May 09, 2013 at 07:22:32PM +0200, Filippo Stenico wrote: >> > Hello, >> > ran xfs_repair -vv -L -P -m1750 and segfault at expected point. >> > >> > I got the core-dump with dbg symbols, along with repair output and >> strace >> > output. >> > >> > What should I do with it? Provide as it is? >> >> Run it in gdb to get a stack trace of where it died. >> >> $ gdb xfs_repair corefile >> ... >> > bt >> >> and post the output, along with the repair output from the run that >> crashed... >> >> Cheers, >> >> Dave. >> -- >> Dave Chinner >> david@fromorbit.com >> > > > > -- > F -- F --001a11c3705208b2ad04dc5b16dc Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Below is the backtrace, and last lines of verbose output at the end.
I am no skilled software developer so this has little meaning to me.. only= that I expected a bit more output of this backtrace..

root@ws1000:~= # gdb xfs_repair core
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, = Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html= >
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.=A0 Type "show co= pying"
and "show warranty" for details.
This GDB was c= onfigured as "x86_64-linux-gnu".
For bug reporting instruction= s, please see:
<htt= p://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /sbin= /xfs_repair...done.
[New LWP 5187]

warning: Can't read pathna= me for load map: Input/output error.
[Thread debugging using libthread_db enabled]
Using host libthread_db li= brary "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was gene= rated by `xfs_repair -vv -L -P -m 1750 /dev/mapper/vg0-lv0'.
Program= terminated with signal 11, Segmentation fault.
#0=A0 0x00007fa8a1e05bcc in _wordcopy_bwd_dest_aligned (dstp=3D140734808924= 136,
=A0=A0=A0 srcp=3D98541856, len=3D2305843009212646584) at wordcopy.= c:395
395=A0=A0=A0 wordcopy.c: No such file or directory.
(gdb) bt#0=A0 0x00007fa8a1e05bcc in _wordcopy_bwd_dest_aligned (dstp=3D14073480892= 4136,
=A0=A0=A0 srcp=3D98541856, len=3D2305843009212646584) at wordcopy.c:395
= #1=A0 0x0000000000000000 in ?? ()
(gdb) q
root@ws1000:~# uname -r
= 3.2.0-4-amd64
root@ws1000:~# tail xfs_repair_gdb/xfs_repair-vv-L-P-m1750= .out
correcting nextents for inode 28722522
bad data fork in inode 28722522cleared inode 28722522
inode 28722524 - bad extent starting block numb= er 3387062910, offset 0
correcting nextents for inode 28722524
bad da= ta fork in inode 28722524
cleared inode 28722524
entry "=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 qs " in shortform directory 28722525 references inval= id inode 0
size of last entry overflows space left in in shortform dir 28722525, reset= ting to -2
entry contains offset out of order in shortform dir 28722525<= br>
....

Cheers,
F

P.S.
sorry for the double mail, E= ric.
On Fri, May 10, 2013 at 12:39 AM, Dave Chinner <david@fromorbit.com&= gt; wrote:
On Thu, May 09, 2013 at 07:22:32PM +0200, Filippo Stenico wrote:
> Hello,
> ran xfs_repair -vv -L -P -m1750 and segfault at expected po= int.
>
> I got the core-dump with dbg symbols, along with repair output and str= ace
> output.
>
> What should I do with it? Provide as it is?

Run it in gdb to get a stack trace of where it died.

$ gdb xfs_repair corefile
...
> bt

and post the output, along with the repair output from the run that
crashed...

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.co= m



--
F



--
F --001a11c3705208b2ad04dc5b16dc-- From sandeen@redhat.com Fri May 10 08:23:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3BB9E29DF8 for ; Fri, 10 May 2013 08:23:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1B8393040FD for ; Fri, 10 May 2013 06:23:50 -0700 (PDT) X-ASG-Debug-ID: 1368192229-04cbb05fe21a5070001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id PBukK1XDwJrtArPt for ; Fri, 10 May 2013 06:23:50 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4ADNnYS017617 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 10 May 2013 09:23:49 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4ADNlaD001633 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 10 May 2013 09:23:48 -0400 Message-ID: <518CF4E3.4050504@redhat.com> Date: Fri, 10 May 2013 08:23:47 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss CC: ext4 development Subject: [PATCH V2] xfstests: regression test for ext4 resize with non-extent files References: <518C1D08.4080309@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: regression test for ext4 resize with non-extent files In-Reply-To: <518C1D08.4080309@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368192229 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Regression test for: c5c72d8 ext4: fix online resizing for ext3-compat file systems Signed-off-by: Eric Sandeen --- V2: s/dangerous/auto/ good luck! diff --git a/tests/ext4/306 b/tests/ext4/306 new file mode 100755 index 0000000..6a961ee --- /dev/null +++ b/tests/ext4/306 @@ -0,0 +1,83 @@ +#! /bin/bash +# FS QA Test No. ext4/306 +# +# Test that blocks are available to non-extent files after a resize2fs +# Regression test for commit: +# c5c72d8 ext4: fix online resizing for ext3-compat file systems +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +PIDS="" +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + _scratch_unmount +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs ext4 +_supported_os Linux + +_require_scratch + +# This needs to mount ext3; might require ext3 driver, or ext4 +# might handle it itself. Find out if we have it one way or another. +modprobe ext3 > /dev/null 2>&1 +grep -q ext3 /proc/filesystems || _notrun "This test requires ext3 support" + +rm -f $seqres.full +echo "Silence is golden" + +# Make a small ext3 fs, (extents disabled) & mount it +yes | mkfs.ext3 $SCRATCH_DEV 512m >> $seqres.full 2>&1 +_scratch_mount -t ext3 || _fail "couldn't mount fs as ext3" +# Create a small non-extent-based file +echo "Create 1m testfile1" +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 0 1m" | _filter_xfs_io +echo "Create testfile2 to fill the fs" +# A large non-extent-based file filling the fs; this will run out & fail +$XFS_IO_PROG -f $SCRATCH_MNT/testfile2 -c "pwrite 0 512m" | _filter_xfs_io + +# Remount as ext4 +_scratch_unmount +_scratch_mount -t ext4 || _fail "couldn't remount fs as ext4" +df -h $SCRATCH_MNT >> $seqres.full + +# Grow it by 512m +echo "Resize to 1g" +resize2fs $SCRATCH_DEV 1g >> $seqres.full 2>&1 || _fail "Could not resize to 1g" +df -h $SCRATCH_MNT >> $seqres.full + +# See if we can add more blocks to the files +echo "append 2m to testfile1" +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 1m 2m" | _filter_xfs_io +echo "append 2m to testfile2" +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 512m 2m" | _filter_xfs_io + +status=0 +exit diff --git a/tests/ext4/306.out b/tests/ext4/306.out new file mode 100644 index 0000000..654637d --- /dev/null +++ b/tests/ext4/306.out @@ -0,0 +1,14 @@ +QA output created by 306 +Silence is golden +Create 1m testfile1 +wrote 1048576/1048576 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Create testfile2 to fill the fs +pwrite64: No space left on device +Resize to 1g +append 2m to testfile1 +wrote 2097152/2097152 bytes at offset 1048576 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +append 2m to testfile2 +wrote 2097152/2097152 bytes at offset 536870912 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) diff --git a/tests/ext4/group b/tests/ext4/group index 53af708..4c3e2f4 100644 --- a/tests/ext4/group +++ b/tests/ext4/group @@ -9,3 +9,4 @@ 303 aio dangerous ioctl rw stress 304 aio dangerous ioctl rw stress 305 auto +306 auto rw resize quick From sandeen@sandeen.net Fri May 10 08:33:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D7AA929DF8 for ; Fri, 10 May 2013 08:33:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 72860AC025 for ; Fri, 10 May 2013 06:33:22 -0700 (PDT) X-ASG-Debug-ID: 1368192800-04bdf042231a3780001-w1Z2WR Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id HBqNOQLdfnk7R8QR for ; Fri, 10 May 2013 06:33:20 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id D041E651C48E; Fri, 10 May 2013 08:33:19 -0500 (CDT) Message-ID: <518CF71F.8060800@sandeen.net> Date: Fri, 10 May 2013 08:33:19 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Bernd Schubert CC: Dave Chinner , linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> <20130507220742.GC24635@dastard> <518A8FD4.40700@itwm.fraunhofer.de> <20130509004115.GM24635@dastard> <518CC9A9.9060500@itwm.fraunhofer.de> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault In-Reply-To: <518CC9A9.9060500@itwm.fraunhofer.de> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368192800 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130554 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On 5/10/13 5:19 AM, Bernd Schubert wrote: > On 05/09/2013 02:41 AM, Dave Chinner wrote: >> On Wed, May 08, 2013 at 07:48:04PM +0200, Bernd Schubert wrote: >>> On 05/08/2013 12:07 AM, Dave Chinner wrote: >>>> On Tue, May 07, 2013 at 01:18:13PM +0200, Bernd Schubert wrote: >>>>> On 05/07/2013 03:12 AM, Dave Chinner wrote: >>>>>> On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: >>>>>>> On 05/06/2013 02:28 PM, Dave Chinner wrote: >>>>>>>> On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: >>>>>>>>> And anpther protection fault, this time with 3.9.0. Always happens >>>>>>>>> on one of the servers. Its ECC memory, so I don't suspect a faulty >>>>>>>>> memory bank. Going to fsck now- >>>>>>>> >>>>>>>> http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F >>>>>>> >>>>>>> Isn't that a bit overhead? And I can't provide /proc/meminfo and >>>>>>> others, as this issue causes a kernel panic a few traces later. >>>>>> >>>>>> Provide what information you can. Without knowing a single thing >>>>>> about your hardware, storage config and workload, I can't help you >>>>>> at all. You're asking me to find a needle in a haystack blindfolded >>>>>> and with both hands tied behind my back.... >>>>> >>>>> I see that xfs_info, meminfo, etc are useful, but /proc/mounts? >>>>> Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the >>>>> output of /proc/mounts, please let me know if you were really >>>>> interested in all of that non-xfs output? >>>> >>>> Yes. You never know what is relevant to a problem that is reported, >>>> especially if there are multiple filesystems sharing the same >>>> device... >>> >>> Hmm, I see. But you need to extend your questions to multipathing >>> and shared storage. If you'd like to add that to the wiki it'd be great. >> why would we? Anyone using such a configuration reporting a bug >> usually is clueful enough to mention it in their bug report when >> describing their RAID/LVM setup. The FAQ entry covers the basic >> information needed to start meaingful triage, not *all* the >> infomration we might ask for. It's the baseline we start from. >> >> Indeed, the FAQ exists because I got sick of asking people for the >> same information several times a week, every week in response to >> poor bug reports like yours. it's far more efficient to paste a link >> several times a week. i.e. The FAQ entry is there for my benefit, >> not yours. > > Poor bug report or not, most information you ask about in the FAQ are entirely irrelevant for this issue. If I had a dollar for every time a bug reporter left out "irrelevant" information that turned out to be critical, I might be retired by now. :) If a few developers on the list are going to scale to supporting every user with a problem, we need to share the effort efficiently, and that means putting just a bit more burden on the reporter, to cut down on the back and forth cycles of trying to gather more information. If anyone wants a quick & useful project, perhaps a script which gathers all requested info in the faq would be a step in the right direction. -Eric From spatel.ml@gmail.com Fri May 10 11:17:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 19F6729DF8 for ; Fri, 10 May 2013 11:17:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E05418F8033 for ; Fri, 10 May 2013 09:17:53 -0700 (PDT) X-ASG-Debug-ID: 1368202672-04bdf042251ac8e0001-NocioJ Received: from mail-qa0-f41.google.com (mail-qa0-f41.google.com [209.85.216.41]) by cuda.sgi.com with ESMTP id Vj25GKVx7LCSvBv3 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 10 May 2013 09:17:52 -0700 (PDT) X-Barracuda-Envelope-From: spatel.ml@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.41 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.41] Received: by mail-qa0-f41.google.com with SMTP id bv4so413211qab.14 for ; Fri, 10 May 2013 09:17:52 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.41] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.41] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=eq0hK896ltbzkFk/9JeiwftGN79R9V9hQ+nNggIIY4g=; b=hu8iobWsRm0p1fvFTDEpGAQIs+i/JRo9COixi5ouXvoNfx6bzGKVRT5qFZ3iBzBkmk jIWhJ28e1iJM/pMY2Gp/60BvX1lzQqynY9phSTPm3Ha2AXx1viA03D0uzOn0qMBPabCo zpT8A6Uf9RM5SgsbnktzaWfZMX7jG/CLTo9gd02lUnifo+E+UZnG62/sYqKtKJ/NYsXX ylV7/UZWBuEP4RvV+MWkSzPFAtc7UZOU2NeXdb42GjwnZRojV9znR4+/AA+1g2lkNgBA FrSdi3SieXFyvLDpf3rLGr3hd/vdmKsB34M2Ewewfd9ouGQwOi4ygUSeYZ/VS99TlAgb LBAw== MIME-Version: 1.0 X-Received: by 10.224.147.83 with SMTP id k19mr12583789qav.72.1368202671867; Fri, 10 May 2013 09:17:51 -0700 (PDT) Received: by 10.49.109.106 with HTTP; Fri, 10 May 2013 09:17:51 -0700 (PDT) Date: Fri, 10 May 2013 21:47:51 +0530 Message-ID: Subject: Error during bulk removal of files From: Subranshu Patel X-ASG-Orig-Subj: Error during bulk removal of files To: xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-qa0-f41.google.com[209.85.216.41] X-Barracuda-Start-Time: 1368202672 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130564 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature I am using mdtest benchmarking tool to remove 7 million files of 1KB. After some time, the mdtest process gets blocked. Dmesg shows the following --------------------->8------------ May 10 18:49:00 machine1 kernel: INFO: task xfssyncd/dm-3:8156 blocked for more than 120 seconds. May 10 18:49:00 machine1 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. May 10 18:49:00 machine1 kernel: xfssyncd/dm-3 D 0000000000000002 0 8156 2 0x00000080 May 10 18:49:00 machine1 kernel: ffff88185932bc70 0000000000000046 ffff88185e58a400 ffff8800282566e8 May 10 18:49:00 machine1 kernel: 00000000000176f6 ffff88185fb44080 ffff880c6100aaa0 ffffffff8160b400 May 10 18:49:00 machine1 kernel: ffff88185fb44638 ffff88185932bfd8 000000000000fb88 ffff88185fb44638 May 10 18:49:00 machine1 kernel: Call Trace: May 10 18:49:00 machine1 kernel: [] xlog_wait+0x72/0x90 [xfs] May 10 18:49:00 machine1 kernel: [] ? default_wake_function+0x0/0x20 May 10 18:49:00 machine1 kernel: [] xlog_grant_log_space+0x3ab/0x520 [xfs] May 10 18:49:00 machine1 kernel: [] ? kmem_zone_zalloc+0x3a/0x50 [xfs] May 10 18:49:00 machine1 kernel: [] ? random32+0x1c/0x20 May 10 18:49:00 machine1 kernel: [] ? xfs_trans_ail_push+0x21/0x80 [xfs] May 10 18:49:00 machine1 kernel: [] xfs_log_reserve+0xe6/0x140 [xfs] May 10 18:49:00 machine1 kernel: [] xfs_trans_reserve+0xa0/0x210 [xfs] May 10 18:49:00 machine1 kernel: [] xfs_fs_log_dummy+0x43/0x90 [xfs] May 10 18:49:00 machine1 kernel: [] ? xfs_log_need_covered+0x94/0xd0 [xfs] May 10 18:49:00 machine1 kernel: [] xfs_sync_worker+0x81/0x90 [xfs] May 10 18:49:00 machine1 kernel: [] xfssyncd+0x17e/0x210 [xfs] May 10 18:49:00 machine1 kernel: [] ? xfssyncd+0x0/0x210 [xfs] May 10 18:49:00 machine1 kernel: [] kthread+0x96/0xa0 May 10 18:49:00 machine1 kernel: [] child_rip+0xa/0x20 May 10 18:49:00 machine1 kernel: [] ? kthread+0x0/0xa0 May 10 18:49:00 machine1 kernel: [] ? child_rip+0x0/0x20 --------------------->8------------ The XFS filesystem size is 14TB (LVM), kernel version 2.6.32 Machine has a memory of 96GB Please let me know if this is a known issue and have been already fixed in higher kernel version. -- Subranshu From noreply@release.debian.org Fri May 10 11:39:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1EFA429DF8 for ; Fri, 10 May 2013 11:39:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id EF409304067 for ; Fri, 10 May 2013 09:39:19 -0700 (PDT) X-ASG-Debug-ID: 1368203958-04cb6c53a41a58a0001-NocioJ Received: from picconi.debian.org (picconi.debian.org [5.153.231.3]) by cuda.sgi.com with ESMTP id L1uJhaa1mnRDW70m (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 10 May 2013 09:39:18 -0700 (PDT) X-Barracuda-Envelope-From: noreply@release.debian.org X-Barracuda-Apparent-Source-IP: 5.153.231.3 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by picconi.debian.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1UaqLl-0003iS-Aj for xfsprogs@packages.debian.org; Fri, 10 May 2013 16:39:17 +0000 Received: from release by franck.debian.org with local (Exim 4.72) (envelope-from ) id 1UaqLk-00015g-89; Fri, 10 May 2013 16:39:16 +0000 Date: Fri, 10 May 2013 16:39:16 +0000 Message-Id: From: Debian testing watch Precedence: bulk X-Trille: 0.120315.1711 Subject: xfsprogs 3.1.9 MIGRATED to testing X-Testing-Watch-Package: xfsprogs X-ASG-Orig-Subj: xfsprogs 3.1.9 MIGRATED to testing X-Testing-Watch-Version: 3.1.9 To: xfsprogs@packages.debian.org Sender: Release Managers Delivered-To: xfsprogs@packages.debian.org X-Barracuda-Connect: picconi.debian.org[5.153.231.3] X-Barracuda-Start-Time: 1368203958 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130566 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header FYI: The status of the xfsprogs source package in Debian's testing distribution has changed. Previous version: 3.1.7 Current version: 3.1.9 -- This email is automatically generated once a day. As the installation of new packages into testing happens multiple times a day you will receive later changes on the next day. See http://release.debian.org/testing-watch/ for more information. From tinguely@sgi.com Fri May 10 11:40:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A630D29DF8 for ; Fri, 10 May 2013 11:40:11 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8259C304039; Fri, 10 May 2013 09:40:11 -0700 (PDT) Message-ID: <518D22F0.8040405@sgi.com> Date: Fri, 10 May 2013 11:40:16 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Subranshu Patel CC: xfs@oss.sgi.com Subject: Re: Error during bulk removal of files References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/10/13 11:17, Subranshu Patel wrote: Call Trace: [] xlog_wait+0x72/0x90 [xfs] [] ? default_wake_function+0x0/0x20 [] xlog_grant_log_space+0x3ab/0x520 [xfs] [] ? kmem_zone_zalloc+0x3a/0x50 [xfs] [] ? random32+0x1c/0x20 [] ? xfs_trans_ail_push+0x21/0x80 [xfs] [] xfs_log_reserve+0xe6/0x140 [xfs] [] xfs_trans_reserve+0xa0/0x210 [xfs] [] xfs_fs_log_dummy+0x43/0x90 [xfs] [] ? xfs_log_need_covered+0x94/0xd0 [xfs] [] xfs_sync_worker+0x81/0x90 [xfs] [] xfssyncd+0x17e/0x210 [xfs] [] ? xfssyncd+0x0/0x210 [xfs] [] kthread+0x96/0xa0 [] child_rip+0xa/0x20 [] ? kthread+0x0/0xa0 [] ? child_rip+0x0/0x20 Ran out of log grant space trying to write out the dummy record in the sync worker. Something is not getting moved off the AIL. This could be a symptom; for example a lock not being released could lead to depleted log space. What else is happening on the filesystem? > > --------------------->8------------ > > The XFS filesystem size is 14TB (LVM), kernel version 2.6.32 > > Machine has a memory of 96GB > > Please let me know if this is a known issue and have been already > fixed in higher kernel version. > > -- > Subranshu --Mark. From mlsemon35@gmail.com Fri May 10 14:07:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DB1A629DF8 for ; Fri, 10 May 2013 14:07:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C9C308F8050 for ; Fri, 10 May 2013 12:07:20 -0700 (PDT) X-ASG-Debug-ID: 1368212839-04cbb05fe41b7200001-NocioJ Received: from mail-ve0-f174.google.com (mail-ve0-f174.google.com [209.85.128.174]) by cuda.sgi.com with ESMTP id FumKR17GWnTcuu32 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 10 May 2013 12:07:19 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.128.174 X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.174] Received: by mail-ve0-f174.google.com with SMTP id pb11so4140427veb.5 for ; Fri, 10 May 2013 12:07:19 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.174] X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.174] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=MIMTOOUzI8GTus9XMci7yqwyWUI3deQdBnPyp8f1V3o=; b=GBLyzQXaZYl6PJ8JHEV2Hlgk3WYb0yq4geSwKsWPfLIdB170kE4EvFwjcGbaD4VW5v 0nMgQFXcW/J7DzfJsGw2qcNM9nQxsMunEtYY07XOeH0XE7VDLlHmxWdILhd3RsqhJrtr QG4WkE0B9rdS56nKVHUFMyl2SWBjkVcWfyb/QLHK1sYm1zIOGwwvYHzo5Txpu96WQDzN AGAMHgOOr4hmXk6rn+5P4C403LaLgUrwwD23l67BcJyEE4WG8qz3NGIppNkUncN0v2m6 Reng0GpSjk+CErA7BPO1eNNpRYcyVpYY9dpvl1a3zHVYdQMa6HiSyqhM6knULd8s3pNF rfXw== MIME-Version: 1.0 X-Received: by 10.58.54.101 with SMTP id i5mr12097745vep.43.1368212839166; Fri, 10 May 2013 12:07:19 -0700 (PDT) Received: by 10.52.122.48 with HTTP; Fri, 10 May 2013 12:07:19 -0700 (PDT) In-Reply-To: <20130510021942.GP23072@dastard> References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> <20130509072045.GO24635@dastard> <518C54AA.7070908@gmail.com> <20130510021942.GP23072@dastard> Date: Fri, 10 May 2013 15:07:19 -0400 Message-ID: Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector From: "Michael L. Semon" X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector To: Dave Chinner Cc: "xfs@oss.sgi.com" Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-ve0-f174.google.com[209.85.128.174] X-Barracuda-Start-Time: 1368212839 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Thu, May 9, 2013 at 10:19 PM, Dave Chinner wrote: > On Thu, May 09, 2013 at 10:00:10PM -0400, Michael L. Semon wrote: >> On 05/09/2013 03:20 AM, Dave Chinner wrote: >> >On Thu, May 09, 2013 at 01:16:46PM +1000, Dave Chinner wrote: >> >>On Wed, May 08, 2013 at 10:24:25PM -0400, Michael L. Semon wrote: >> >>No, there's definitely a bug there. Thanks for the report, Michael. >> >>Try the patch below. >> > >> >Actaully, there's a bug in the error handling in that version - it >> >fails to unlock the quotaoff lock properly on failure. The version >> >below fixes that problem. >> > >> >Cheers, >> > >> >Dave. >> >> OK, I'll try this version as well. The first version seemed to work >> just fine. > > It should, the bug was in an error handling path you are unlikely to > hit. OK, this version looks good, too, maybe better. The only lockdep that I'm hitting consistently so far is caused by generic/249--a circular dependency--but that's probably a separate issue. The trace is on my USB key, but the PC for this E-mail is Windows XP and can't read F2FS. Sorry about that. >> xfs/012 13s ...[ 1851.323902] >> [ 1851.325479] ================================= >> [ 1851.326551] [ INFO: inconsistent lock state ] >> [ 1851.326551] 3.9.0+ #1 Not tainted >> [ 1851.326551] --------------------------------- >> [ 1851.326551] inconsistent {RECLAIM_FS-ON-R} -> {IN-RECLAIM_FS-W} usage. >> [ 1851.326551] kswapd0/18 [HC0[0]:SC0[0]:HE1:SE1] takes: >> [ 1851.326551] (&(&ip->i_lock)->mr_lock){++++-+}, at: [] >> xfs_ilock+0x10f/0x190 >> [ 1851.326551] {RECLAIM_FS-ON-R} state was registered at: >> [ 1851.326551] [] mark_held_locks+0x8a/0xf0 >> [ 1851.326551] [] lockdep_trace_alloc+0x5c/0xa0 >> [ 1851.326551] [] __alloc_pages_nodemask+0x7c/0x670 >> [ 1851.326551] [] new_slab+0x6e/0x2a0 >> [ 1851.326551] [] __slab_alloc.isra.59.constprop.67+0x1d3/0x40a >> [ 1851.326551] [] __kmalloc+0x10d/0x180 >> [ 1851.326551] [] kmem_alloc+0x56/0xd0 >> [ 1851.326551] [] kmem_zalloc+0x11/0xd0 >> [ 1851.326551] [] xfs_dabuf_map.isra.2.constprop.5+0x22e/0x520 > > Yup, needs a KM_NOFS allocation there because we come through > here outside a transaction and so it doesn't get KM_NOFS implicitly > in this case. There's been a couple of these reported in the past > week or two - I need to do an audit and sweep them all up.... > > Technically, though, this can't cause a deadlock on the inode we > hold a lock on here because it's a directory inode, not a regular > file and so it will never be seen in the reclaim data writeback path > nor on the inode LRU when the shrinker runs. So most likely it is a > false positive... Thanks for looking at it. There are going to be plenty of false positives out there. Is there a pecking order of what works best? As in... * IRQ (IRQs-off?) checking: worth reporting...? * sleep inside atomic sections: fascinating, but almost anything can trigger it * multiple-CPU deadlock detection: can only speculate on a uniprocessor system * circular dependency checking: YMMV * reclaim-fs checking: which I knew how much developers need to conform to reclaim-fs, or what it is Your list will probably look totally different and have extra items, and I'll be happy if it completely contradicts my list. Anyway, have a good weekend! Michael From sekharan@us.ibm.com Fri May 10 16:21:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B120429DF8 for ; Fri, 10 May 2013 16:21:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2D408AC005 for ; Fri, 10 May 2013 14:21:42 -0700 (PDT) X-ASG-Debug-ID: 1368220900-04cbb05fe51bb820001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id nCnYfby0MaDAMDwj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 14:21:41 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 10 May 2013 17:21:40 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 10 May 2013 17:21:39 -0400 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 83A2D6E803C for ; Fri, 10 May 2013 17:21:35 -0400 (EDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4ALLcm8301260 for ; Fri, 10 May 2013 17:21:38 -0400 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4ALLbjB019292 for ; Fri, 10 May 2013 15:21:37 -0600 Received: from chandra-dt.austin.ibm.com (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4ALLVaZ018809; Fri, 10 May 2013 15:21:37 -0600 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Subject: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Date: Fri, 10 May 2013 16:21:25 -0500 X-ASG-Orig-Subj: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Message-Id: <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051021-7182-0000-0000-000006A3FF56 X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1368220901 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Remove all incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts for GQUOTA and PQUOTA respectively. On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Read and write of the superblock does the conversion from *OQUOTA* to *[PG]QUOTA*. Signed-off-by: Chandra Seetharaman Reviewed-by: Dave Chinner --- fs/xfs/xfs_mount.c | 41 +++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_qm.c | 9 ++++++--- fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++------------------ fs/xfs/xfs_quota.h | 42 ++++++++++++++++++++++++++++-------------- fs/xfs/xfs_quotaops.c | 6 ++++-- fs/xfs/xfs_super.c | 16 ++++++++-------- fs/xfs/xfs_trans_dquot.c | 4 ++-- 7 files changed, 110 insertions(+), 47 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd7..1b79906 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -564,6 +564,8 @@ xfs_sb_from_disk( struct xfs_sb *to, xfs_dsb_t *from) { + bool force_quota_check = false; + to->sb_magicnum = be32_to_cpu(from->sb_magicnum); to->sb_blocksize = be32_to_cpu(from->sb_blocksize); to->sb_dblocks = be64_to_cpu(from->sb_dblocks); @@ -599,6 +601,21 @@ xfs_sb_from_disk( to->sb_uquotino = be64_to_cpu(from->sb_uquotino); to->sb_gquotino = be64_to_cpu(from->sb_gquotino); to->sb_qflags = be16_to_cpu(from->sb_qflags); + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && + (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { + xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " + "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); + force_quota_check = true; + } + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + to->sb_flags = from->sb_flags; to->sb_shared_vn = from->sb_shared_vn; to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); @@ -618,6 +635,9 @@ xfs_sb_from_disk( to->sb_pad = 0; to->sb_pquotino = be64_to_cpu(from->sb_pquotino); to->sb_lsn = be64_to_cpu(from->sb_lsn); + + if (force_quota_check) + to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); } /* @@ -636,11 +656,30 @@ xfs_sb_to_disk( xfs_sb_field_t f; int first; int size; + __uint16_t qflags = from->sb_qflags; ASSERT(fields); if (!fields) return; + if (fields & XFS_SB_QFLAGS) { + /* + * The in-core version of sb_qflags do not have + * XFS_OQUOTA_* flags, whereas the on-disk version + * does. So, convert incore XFS_{PG}QUOTA_* flags + * to on-disk XFS_OQUOTA_* flags. + */ + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); + + if (from->sb_qflags & + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + qflags |= XFS_OQUOTA_CHKD; + } + while (fields) { f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); first = xfs_sb_info[f].offset; @@ -650,6 +689,8 @@ xfs_sb_to_disk( if (size == 1 || xfs_sb_info[f].type == 1) { memcpy(to_ptr + first, from_ptr + first, size); + } else if (f == XFS_SBS_QFLAGS) { + *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); } else { switch (size) { case 2: diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index f41702b..fe4c743 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -298,8 +298,10 @@ xfs_qm_mount_quotas( */ if (!XFS_IS_UQUOTA_ON(mp)) mp->m_qflags &= ~XFS_UQUOTA_CHKD; - if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) - mp->m_qflags &= ~XFS_OQUOTA_CHKD; + if (!XFS_IS_GQUOTA_ON(mp)) + mp->m_qflags &= ~XFS_GQUOTA_CHKD; + if (!XFS_IS_PQUOTA_ON(mp)) + mp->m_qflags &= ~XFS_PQUOTA_CHKD; write_changes: /* @@ -1280,7 +1282,8 @@ xfs_qm_quotacheck( &buffer_list); if (error) goto error_return; - flags |= XFS_OQUOTA_CHKD; + flags |= XFS_IS_GQUOTA_ON(mp) ? + XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; } do { diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..f005f1d 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -117,11 +117,11 @@ xfs_qm_scall_quotaoff( } if (flags & XFS_GQUOTA_ACCT) { dqtype |= XFS_QMOPT_GQUOTA; - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); + flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); inactivate_flags |= XFS_GQUOTA_ACTIVE; } else if (flags & XFS_PQUOTA_ACCT) { dqtype |= XFS_QMOPT_PQUOTA; - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); + flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); inactivate_flags |= XFS_PQUOTA_ACTIVE; } @@ -335,14 +335,14 @@ xfs_qm_scall_quotaon( * quota acct on ondisk without m_qflags' knowing. */ if (((flags & XFS_UQUOTA_ACCT) == 0 && - (mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 && - (flags & XFS_UQUOTA_ENFD)) - || + (mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 && + (flags & XFS_UQUOTA_ENFD)) || ((flags & XFS_PQUOTA_ACCT) == 0 && - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && - (flags & XFS_GQUOTA_ACCT) == 0 && - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && - (flags & XFS_OQUOTA_ENFD))) { + (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && + (flags & XFS_PQUOTA_ENFD)) || + ((flags & XFS_GQUOTA_ACCT) == 0 && + (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && + (flags & XFS_GQUOTA_ENFD))) { xfs_debug(mp, "%s: Can't enforce without acct, flags=%x sbflags=%x\n", __func__, flags, mp->m_sb.sb_qflags); @@ -770,9 +770,12 @@ xfs_qm_scall_getquota( * gets turned off. No need to confuse the user level code, * so return zeroes in that case. */ - if ((!XFS_IS_UQUOTA_ENFORCED(mp) && dqp->q_core.d_flags == XFS_DQ_USER) || - (!XFS_IS_OQUOTA_ENFORCED(mp) && - (dqp->q_core.d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { + if ((!XFS_IS_UQUOTA_ENFORCED(mp) && + dqp->q_core.d_flags == XFS_DQ_USER) || + (!XFS_IS_PQUOTA_ENFORCED(mp) && + dqp->q_core.d_flags == XFS_DQ_PROJ) || + (!XFS_IS_GQUOTA_ENFORCED(mp) && + dqp->q_core.d_flags == XFS_DQ_GROUP)) { dst->d_btimer = 0; dst->d_itimer = 0; dst->d_rtbtimer = 0; @@ -780,8 +783,8 @@ xfs_qm_scall_getquota( #ifdef DEBUG if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == FS_USER_QUOTA) || - (XFS_IS_OQUOTA_ENFORCED(mp) && - (dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) && + (XFS_IS_PQUOTA_ENFORCED(mp) && dst->d_flags == FS_PROJ_QUOTA) || + (XFS_IS_GQUOTA_ENFORCED(mp) && dst->d_flags == FS_GROUP_QUOTA)) && dst->d_id != 0) { if ((dst->d_bcount > dst->d_blk_softlimit) && (dst->d_blk_softlimit > 0)) { @@ -833,10 +836,10 @@ xfs_qm_export_flags( uflags |= FS_QUOTA_GDQ_ACCT; if (flags & XFS_UQUOTA_ENFD) uflags |= FS_QUOTA_UDQ_ENFD; - if (flags & (XFS_OQUOTA_ENFD)) { - uflags |= (flags & XFS_GQUOTA_ACCT) ? - FS_QUOTA_GDQ_ENFD : FS_QUOTA_PDQ_ENFD; - } + if (flags & XFS_PQUOTA_ENFD) + uflags |= FS_QUOTA_PDQ_ENFD; + if (flags & XFS_GQUOTA_ENFD) + uflags |= FS_QUOTA_GDQ_ENFD; return (uflags); } diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index c61e31c..ccff1a6 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -159,28 +159,43 @@ typedef struct xfs_qoff_logformat { #define XFS_GQUOTA_ACCT 0x0040 /* group quota accounting ON */ /* + * Start differentiating group quota and project quota in-core + * using distinct flags, instead of using the combined OQUOTA flags. + * + * Conversion to and from the combined OQUOTA flag (if necessary) + * is done only in xfs_sb_{to,from}_disk() + */ +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ + +/* * Quota Accounting/Enforcement flags */ #define XFS_ALL_QUOTA_ACCT \ (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT) -#define XFS_ALL_QUOTA_ENFD (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD) -#define XFS_ALL_QUOTA_CHKD (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD) +#define XFS_ALL_QUOTA_ENFD \ + (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD) +#define XFS_ALL_QUOTA_CHKD \ + (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD) #define XFS_IS_QUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT) #define XFS_IS_UQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_UQUOTA_ACCT) #define XFS_IS_PQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_PQUOTA_ACCT) #define XFS_IS_GQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_GQUOTA_ACCT) #define XFS_IS_UQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_UQUOTA_ENFD) -#define XFS_IS_OQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_OQUOTA_ENFD) +#define XFS_IS_PQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_PQUOTA_ENFD) +#define XFS_IS_GQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_GQUOTA_ENFD) /* * Incore only flags for quotaoff - these bits get cleared when quota(s) * are in the process of getting turned off. These flags are in m_qflags but * never in sb_qflags. */ -#define XFS_UQUOTA_ACTIVE 0x0100 /* uquotas are being turned off */ -#define XFS_PQUOTA_ACTIVE 0x0200 /* pquotas are being turned off */ -#define XFS_GQUOTA_ACTIVE 0x0400 /* gquotas are being turned off */ +#define XFS_UQUOTA_ACTIVE 0x1000 /* uquotas are being turned off */ +#define XFS_PQUOTA_ACTIVE 0x2000 /* pquotas are being turned off */ +#define XFS_GQUOTA_ACTIVE 0x4000 /* gquotas are being turned off */ #define XFS_ALL_QUOTA_ACTIVE \ (XFS_UQUOTA_ACTIVE | XFS_PQUOTA_ACTIVE | XFS_GQUOTA_ACTIVE) @@ -266,24 +281,23 @@ typedef struct xfs_qoff_logformat { ((XFS_IS_UQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \ (XFS_IS_GQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT))) || \ + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD) == 0) || \ (XFS_IS_PQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT)))) + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) #define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) #define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD|\ - XFS_GQUOTA_ACCT) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|\ + XFS_GQUOTA_CHKD) /* diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c index 71926d6..056d62e 100644 --- a/fs/xfs/xfs_quotaops.c +++ b/fs/xfs/xfs_quotaops.c @@ -75,8 +75,10 @@ xfs_fs_set_xstate( flags |= XFS_GQUOTA_ACCT; if (uflags & FS_QUOTA_UDQ_ENFD) flags |= XFS_UQUOTA_ENFD; - if (uflags & (FS_QUOTA_PDQ_ENFD|FS_QUOTA_GDQ_ENFD)) - flags |= XFS_OQUOTA_ENFD; + if (uflags & FS_QUOTA_PDQ_ENFD) + flags |= XFS_PQUOTA_ENFD; + if (uflags & FS_QUOTA_GDQ_ENFD) + flags |= XFS_GQUOTA_ENFD; switch (op) { case Q_XQUOTAON: diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index ea341ce..873fa5a 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -359,17 +359,17 @@ xfs_parseargs( } else if (!strcmp(this_char, MNTOPT_PQUOTA) || !strcmp(this_char, MNTOPT_PRJQUOTA)) { mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | - XFS_OQUOTA_ENFD); + XFS_PQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) { mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); - mp->m_qflags &= ~XFS_OQUOTA_ENFD; + mp->m_qflags &= ~XFS_PQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_GQUOTA) || !strcmp(this_char, MNTOPT_GRPQUOTA)) { mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | - XFS_OQUOTA_ENFD); + XFS_GQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); - mp->m_qflags &= ~XFS_OQUOTA_ENFD; + mp->m_qflags &= ~XFS_GQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) { xfs_warn(mp, "delaylog is the default now, option is deprecated."); @@ -563,12 +563,12 @@ xfs_showargs( /* Either project or group quotas can be active, not both */ if (mp->m_qflags & XFS_PQUOTA_ACCT) { - if (mp->m_qflags & XFS_OQUOTA_ENFD) + if (mp->m_qflags & XFS_PQUOTA_ENFD) seq_puts(m, "," MNTOPT_PRJQUOTA); else seq_puts(m, "," MNTOPT_PQUOTANOENF); } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { - if (mp->m_qflags & XFS_OQUOTA_ENFD) + if (mp->m_qflags & XFS_GQUOTA_ENFD) seq_puts(m, "," MNTOPT_GRPQUOTA); else seq_puts(m, "," MNTOPT_GQUOTANOENF); @@ -1136,8 +1136,8 @@ xfs_fs_statfs( spin_unlock(&mp->m_sb_lock); if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && - ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) == - (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD)) + ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) == + (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD)) xfs_qm_statvfs(ip, statp); return 0; } diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index fec75d0..8cdbd62 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -640,8 +640,8 @@ xfs_trans_dqresv( if ((flags & XFS_QMOPT_FORCE_RES) == 0 && dqp->q_core.d_id && ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) || - (XFS_IS_OQUOTA_ENFORCED(dqp->q_mount) && - (XFS_QM_ISPDQ(dqp) || XFS_QM_ISGDQ(dqp))))) { + (XFS_IS_PQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISPDQ(dqp)) || + (XFS_IS_GQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISGDQ(dqp)))) { if (nblks > 0) { /* * dquot is locked already. See if we'd go over the -- 1.7.1 From sekharan@us.ibm.com Fri May 10 16:21:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7220129DFA for ; Fri, 10 May 2013 16:21:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 62108304062 for ; Fri, 10 May 2013 14:21:41 -0700 (PDT) X-ASG-Debug-ID: 1368220897-04cbb05fe51bb810001-NocioJ Received: from e33.co.us.ibm.com (e33.co.us.ibm.com [32.97.110.151]) by cuda.sgi.com with ESMTP id o1LycTftt3VOohLB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 14:21:37 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.151 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] Received: from /spool/local by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 10 May 2013 15:21:36 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e33.co.us.ibm.com (192.168.1.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 10 May 2013 15:21:33 -0600 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id A784919D8041 for ; Fri, 10 May 2013 15:21:26 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4ALLWj7387500 for ; Fri, 10 May 2013 15:21:32 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4ALLWH4018886 for ; Fri, 10 May 2013 15:21:32 -0600 Received: from chandra-dt.austin.ibm.com (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4ALLVaY018809; Fri, 10 May 2013 15:21:31 -0600 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Subject: [PATCH v8 0/5] xfs: Allow pquota and gquota to be used together Date: Fri, 10 May 2013 16:21:24 -0500 X-ASG-Orig-Subj: [PATCH v8 0/5] xfs: Allow pquota and gquota to be used together Message-Id: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> X-Mailer: git-send-email 1.7.1 X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051021-2398-0000-0000-000014334711 X-Barracuda-Connect: e33.co.us.ibm.com[32.97.110.151] X-Barracuda-Start-Time: 1368220897 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hello All, This is the version 8 of the changes to allow pquota and gquota to be used together. Patchset applies cleanly on top of 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 in xfs git tree. Ran latest xfstests against it. Changes from version 7 to version 8: - Rebased to the current code. - Modified code to use the new pquotino field in version 5 of the superblock. Version 7 can be found at: http://oss.sgi.com/archives/xfs/2013-03/msg00671.html Changes from version 6 to version 7: - Made all the changes suggested by Dave Chinner - Added padding to fs_quota_stat, which made the new data structure field ordering different from the old data structure field ordering. So, copied the old version to be _v1 version and used that if old version of data structure was provided from user space. Version 6 can be found at: http://oss.sgi.com/archives/xfs/2012-07/msg00286.html Changes from version 5 to version 6: - Use radix tree instead of hash table Version 5 can be found at: http://oss.sgi.com/archives/xfs/2012-03/msg00310.html Changes fron version 4 to version 5: rebase with the current tree one simple change. Version 4 can be found at http://oss.sgi.com/archives/xfs/2012-02/msg00528.html Changes from version 3 to version 4: - Remove save_flags with storing the value (in to superblock) based on field type info - fix checkpatch.pl warnings and errors Version 3 of the posting can be found at http://oss.sgi.com/archives/xfs/2012-01/msg00309.html Changes from version 2 to version 3: - hash table for pquota is added. - changes to apply cleanly with the latest tree version 2 of the posting can be found at http://oss.sgi.com/archives/xfs/2011-10/msg00470.html Changes from version 1 to version 2: - Created a new prep patch to accomodate some generic changes that ease the later patches. - Created a new patch to add a new field qs_pquota to fs_quota_stat with appropriate versioning changes - Changed the logic to allow XFS_OQUOTA.* flags to be allowed only in the older versions. - Changed couple of places where PQUOTA checking was on the else if construct so as to allow both GQUOTA and PQUOTA in those places. - Fixed comments in xfs_quota.h to reflect the current changes. - Changed the name of the macro XFS_SB_VERSION2_SEPER_PQUOTA to XFS_SB_VERSION2_NO_OQUOTA - got rid of the macros XFS_MOUNT_QUOTA_SET1 and XFS_MOUNT_QUOTA_SET2 - added a new inline function xfs_inode_dquot(ip, type) to simplify the error path in xfs_qm_dqget() - got rid of the macro XFS_IS_THIS_QUOTA_OFF - added comment to explain why sb_qflags is saved and restored in xfs_sb_to_disk() version 1 of the posting can be found at http://oss.sgi.com/archives/xfs/2011-10/msg00341.html Thanks & Regards, chandra Chandra Seetharaman (5): xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD xfs: Add pquota fields where gquota is used. xfs: Start using pquotaino from the superblock xfs: Add proper versioning support to fs_quota_stat xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT fs/gfs2/quota.c | 3 - fs/quota/quota.c | 40 ++++- fs/xfs/xfs_dquot.c | 33 +++- fs/xfs/xfs_dquot.h | 13 +- fs/xfs/xfs_icache.c | 4 +- fs/xfs/xfs_inode.h | 1 + fs/xfs/xfs_ioctl.c | 14 +- fs/xfs/xfs_iops.c | 4 +- fs/xfs/xfs_itable.c | 3 +- fs/xfs/xfs_mount.c | 102 +++++++++++ fs/xfs/xfs_qm.c | 379 ++++++++++++++++++++++++++-------------- fs/xfs/xfs_qm.h | 53 ++++-- fs/xfs/xfs_qm_bhv.c | 2 +- fs/xfs/xfs_qm_syscalls.c | 125 +++++++++----- fs/xfs/xfs_quota.h | 78 +++++---- fs/xfs/xfs_quotaops.c | 6 +- fs/xfs/xfs_sb.h | 5 + fs/xfs/xfs_super.c | 35 ++-- fs/xfs/xfs_symlink.c | 13 +- fs/xfs/xfs_trans_dquot.c | 102 ++++++----- fs/xfs/xfs_vnodeops.c | 12 +- include/uapi/linux/dqblk_xfs.h | 37 ++++- 22 files changed, 731 insertions(+), 333 deletions(-) From sekharan@us.ibm.com Fri May 10 16:21:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3337129E0C for ; Fri, 10 May 2013 16:21:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 03D9B8F8049 for ; Fri, 10 May 2013 14:21:47 -0700 (PDT) X-ASG-Debug-ID: 1368220906-04bdf042261b80a0001-NocioJ Received: from e33.co.us.ibm.com (e33.co.us.ibm.com [32.97.110.151]) by cuda.sgi.com with ESMTP id RH4JbQTfDJYifczD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 14:21:46 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.151 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] Received: from /spool/local by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 10 May 2013 15:21:46 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e33.co.us.ibm.com (192.168.1.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 10 May 2013 15:21:44 -0600 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 72C8019D8041 for ; Fri, 10 May 2013 15:21:37 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4ALLhro070206 for ; Fri, 10 May 2013 15:21:43 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4ALLg3E019568 for ; Fri, 10 May 2013 15:21:42 -0600 Received: from chandra-dt.austin.ibm.com (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4ALLVac018809; Fri, 10 May 2013 15:21:42 -0600 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Subject: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat Date: Fri, 10 May 2013 16:21:28 -0500 X-ASG-Orig-Subj: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat Message-Id: <1368220889-25188-5-git-send-email-sekharan@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051021-2398-0000-0000-00001433474E X-Barracuda-Connect: e33.co.us.ibm.com[32.97.110.151] X-Barracuda-Start-Time: 1368220906 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Added appropriate pads and code for backward compatibility. Copied over the old version as it is different from the newer padded version. New callers of the system call have to just set the version of the data structure being passed, and kernel will fill as much data as requested. Signed-off-by: Chandra Seetharaman --- fs/gfs2/quota.c | 3 --- fs/quota/quota.c | 40 ++++++++++++++++++++++++++++++++++++++-- fs/xfs/xfs_qm_syscalls.c | 4 ---- include/uapi/linux/dqblk_xfs.h | 38 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 74 insertions(+), 11 deletions(-) diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index c7c840e..ca0dccd 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -1443,9 +1443,6 @@ static int gfs2_quota_get_xstate(struct super_block *sb, { struct gfs2_sbd *sdp = sb->s_fs_info; - memset(fqs, 0, sizeof(struct fs_quota_stat)); - fqs->qs_version = FS_QSTAT_VERSION; - switch (sdp->sd_args.ar_quota) { case GFS2_QUOTA_ON: fqs->qs_flags |= (FS_QUOTA_UDQ_ENFD | FS_QUOTA_GDQ_ENFD); diff --git a/fs/quota/quota.c b/fs/quota/quota.c index c7314f1..510464e 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c @@ -207,12 +207,48 @@ static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr) static int quota_getxstate(struct super_block *sb, void __user *addr) { struct fs_quota_stat fqs; - int ret; + struct fs_quota_stat_v1 fqs_v1; + int ret, size; + void *cp = &fqs; if (!sb->s_qcop->get_xstate) return -ENOSYS; + + memset(&fqs, 0, sizeof(struct fs_quota_stat)); + if (copy_from_user(&fqs, addr, 1)) /* just get the version */ + return -EFAULT; + + switch (fqs.qs_version) { + case FS_QSTAT_VERSION_2: + size = FS_QSTAT_V2_SIZE; + break; + default: + fqs.qs_version = FS_QSTAT_VERSION; + /* fallthrough */ + case FS_QSTAT_VERSION: + size = FS_QSTAT_V1_SIZE; + cp = &fqs_v1; + } + ret = sb->s_qcop->get_xstate(sb, &fqs); - if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) + if (ret) + return ret; + + if (fqs.qs_version == FS_QSTAT_VERSION) { + fqs_v1.qs_version = fqs.qs_version; + fqs_v1.qs_flags = fqs.qs_flags; + fqs_v1.qs_pad = 0; + fqs_v1.qs_uquota = fqs.qs_uquota; + fqs_v1.qs_gquota = fqs.qs_gquota; + fqs_v1.qs_incoredqs = fqs.qs_incoredqs; + fqs_v1.qs_btimelimit = fqs.qs_btimelimit; + fqs_v1.qs_itimelimit = fqs.qs_itimelimit; + fqs_v1.qs_rtbtimelimit = fqs.qs_rtbtimelimit; + fqs_v1.qs_bwarnlimit = fqs.qs_bwarnlimit; + fqs_v1.qs_iwarnlimit = fqs.qs_iwarnlimit; + } + + if (copy_to_user(addr, &cp, size)) return -EFAULT; return ret; } diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index 65c0a7d..c27b0e4 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -420,9 +420,6 @@ xfs_qm_scall_getqstat( bool tempgqip = false; bool temppqip = false; - memset(out, 0, sizeof(fs_quota_stat_t)); - - out->qs_version = FS_QSTAT_VERSION; if (!xfs_sb_version_hasquota(&mp->m_sb)) { out->qs_uquota.qfs_ino = NULLFSINO; out->qs_gquota.qfs_ino = NULLFSINO; @@ -432,7 +429,6 @@ xfs_qm_scall_getqstat( out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & (XFS_ALL_QUOTA_ACCT| XFS_ALL_QUOTA_ENFD)); - out->qs_pad = 0; out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; if (&out->qs_gquota != &out->qs_pquota) diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h index f17e3bb..d9629c1 100644 --- a/include/uapi/linux/dqblk_xfs.h +++ b/include/uapi/linux/dqblk_xfs.h @@ -18,6 +18,7 @@ #define _LINUX_DQBLK_XFS_H #include +#include /* * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). @@ -137,8 +138,12 @@ typedef struct fs_disk_quota { * Provides a centralized way to get meta information about the quota subsystem. * eg. space taken up for user and group quotas, number of dquots currently * incore. + * User space caller should set qs_version to the appropriate version + * of the fs_quota_stat data structure they are providing. Not providing + * a version will be treated as FS_QSTAT_VERSION. */ #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ /* * Some basic information about 'quota files'. @@ -149,19 +154,48 @@ typedef struct fs_qfilestat { __u32 qfs_nextents; /* number of extents */ } fs_qfilestat_t; +typedef struct fs_quota_stat_v1 { + __s8 qs_version; /* version number for future changes */ + __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ + __u8 qs_pad; /* unused */ + fs_qfilestat_t qs_uquota; /* user quota storage information */ + fs_qfilestat_t qs_gquota; /* group quota storage information */ + __u32 qs_incoredqs; /* number of dquots incore */ + __s32 qs_btimelimit; /* limit for blks timer */ + __s32 qs_itimelimit; /* limit for inodes timer */ + __s32 qs_rtbtimelimit;/* limit for rt blks timer */ + __u16 qs_bwarnlimit; /* limit for num warnings */ + __u16 qs_iwarnlimit; /* limit for num warnings */ +} fs_quota_stat_v1_t; + typedef struct fs_quota_stat { __s8 qs_version; /* version number for future changes */ + __u8 qs_pad1; /* unused */ __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ - __s8 qs_pad; /* unused */ + __u8 qs_pad2[4]; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ -#define qs_pquota qs_gquota __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ __s32 qs_rtbtimelimit;/* limit for rt blks timer */ __u16 qs_bwarnlimit; /* limit for num warnings */ __u16 qs_iwarnlimit; /* limit for num warnings */ + __u8 qs_pad3[4]; /* unused */ + fs_qfilestat_t qs_pquota; /* project quota storage information */ + /* End of Data structure for FS_QSTAT_VERSION_2 */ } fs_quota_stat_t; +/* + * Since Version 1 did not have padding at appropriate places, + * a new data structure has been defined for the older version to + * provide backward compatibility. + * Future extentions of this data structure won't require new + * data structure definitions as the current one can be extended + * with the logic and padding in place now. + */ +#define FS_QSTAT_V1_SIZE (sizeof(struct fs_quota_stat_v1)) +#define FS_QSTAT_V2_SIZE (offsetof(struct fs_quota_stat, qs_pquota) + \ + sizeof(fs_qfilestat_t)) + #endif /* _LINUX_DQBLK_XFS_H */ -- 1.7.1 From sekharan@us.ibm.com Fri May 10 16:21:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5098F29E0D for ; Fri, 10 May 2013 16:21:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1444C8F8050 for ; Fri, 10 May 2013 14:21:48 -0700 (PDT) X-ASG-Debug-ID: 1368220905-04bdf042231b8090001-NocioJ Received: from e34.co.us.ibm.com (e34.co.us.ibm.com [32.97.110.152]) by cuda.sgi.com with ESMTP id CoDjdLg16h4jmOGd (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 14:21:46 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.152 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.152] Received: from /spool/local by e34.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 10 May 2013 15:21:45 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.152] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.152] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.152] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.152] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e34.co.us.ibm.com (192.168.1.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 10 May 2013 15:21:42 -0600 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id CB6FA19D8045 for ; Fri, 10 May 2013 15:21:35 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4ALLgaF351570 for ; Fri, 10 May 2013 15:21:42 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4ALLgJn019519 for ; Fri, 10 May 2013 15:21:42 -0600 Received: from chandra-dt.austin.ibm.com (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4ALLVab018809; Fri, 10 May 2013 15:21:41 -0600 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Subject: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock Date: Fri, 10 May 2013 16:21:27 -0500 X-ASG-Orig-Subj: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock Message-Id: <1368220889-25188-4-git-send-email-sekharan@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051021-2876-0000-0000-0000087934CE X-Barracuda-Connect: e34.co.us.ibm.com[32.97.110.152] X-Barracuda-Start-Time: 1368220906 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Define a macro to check if the superblock has pquotino. Keep backward compatibilty by alowing mount of older superblock with no separate pquota inode. --- fs/xfs/xfs_itable.c | 3 +- fs/xfs/xfs_mount.c | 117 ++++++++++++++++++++++++++++++---------- fs/xfs/xfs_qm.c | 29 +++++----- fs/xfs/xfs_qm_syscalls.c | 32 +++++++++--- fs/xfs/xfs_quota.h | 8 --- fs/xfs/xfs_sb.h | 5 ++ fs/xfs/xfs_super.c | 14 +++-- fs/xfs/xfs_trans_dquot.c | 4 +- include/uapi/linux/dqblk_xfs.h | 1 + 9 files changed, 148 insertions(+), 65 deletions(-) diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index 2ea7d40..d80d58c 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -43,7 +43,8 @@ xfs_internal_inum( { return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || (xfs_sb_version_hasquota(&mp->m_sb) && - (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); + (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino))); } /* diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 1b79906..233f88e 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -601,21 +601,6 @@ xfs_sb_from_disk( to->sb_uquotino = be64_to_cpu(from->sb_uquotino); to->sb_gquotino = be64_to_cpu(from->sb_gquotino); to->sb_qflags = be16_to_cpu(from->sb_qflags); - if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && - (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | - XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { - xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " - "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); - force_quota_check = true; - } - if (to->sb_qflags & XFS_OQUOTA_ENFD) - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? - XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; - if (to->sb_qflags & XFS_OQUOTA_CHKD) - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? - XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; - to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); - to->sb_flags = from->sb_flags; to->sb_shared_vn = from->sb_shared_vn; to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); @@ -636,6 +621,44 @@ xfs_sb_from_disk( to->sb_pquotino = be64_to_cpu(from->sb_pquotino); to->sb_lsn = be64_to_cpu(from->sb_lsn); + if (xfs_sb_version_has_pquota(to)) { + if (to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { + xfs_notice(NULL, "Super block has XFS_OQUOTA bits " + "with version PQUOTINO. Quota check forced.\n"); + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + force_quota_check = true; + } + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); + } else { + if (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { + xfs_notice(NULL, "Super block has XFS_[G|P]UOTA " + "bits in version older than PQUOTINO. " + "Quota check forced.\n"); + + to->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD); + force_quota_check = true; + } + + /* + * On disk superblock qflags uses XFS_OQUOTA.* to support + * either PQUOTA or GQUOTA. But, in memory qflags uses + * XFS_PQUOTA.* or XFS_GQUOTA.* depending on which quota + * is used. + * Following block translates XFS_OQUOTA.* to either + * GQUOTA or PQUOTA. + */ + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + + } + if (force_quota_check) to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); } @@ -657,27 +680,51 @@ xfs_sb_to_disk( int first; int size; __uint16_t qflags = from->sb_qflags; + xfs_ino_t gquotino = from->sb_gquotino; ASSERT(fields); if (!fields) return; - if (fields & XFS_SB_QFLAGS) { + if (!xfs_sb_version_has_pquota(from)) { + if (fields & XFS_SB_QFLAGS) { + /* + * The in-core version of sb_qflags do not have + * XFS_OQUOTA_* flags, whereas the on-disk version + * does. So, convert incore XFS_{PG}QUOTA_* flags + * to on-disk XFS_OQUOTA_* flags. + */ + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); + + if (from->sb_qflags & + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + qflags |= XFS_OQUOTA_CHKD; + } + /* - * The in-core version of sb_qflags do not have - * XFS_OQUOTA_* flags, whereas the on-disk version - * does. So, convert incore XFS_{PG}QUOTA_* flags - * to on-disk XFS_OQUOTA_* flags. + * On-disk version earlier than pquota doesn't have + * sb_pquotino. so, we need to copy the value to gquotino. */ - qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | - XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); + if (fields & XFS_SB_PQUOTINO) { + fields &= (__int64_t)~XFS_SB_PQUOTINO; + fields |= (__int64_t)XFS_SB_GQUOTINO; + gquotino = from->sb_pquotino; + } - if (from->sb_qflags & - (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) - qflags |= XFS_OQUOTA_ENFD; - if (from->sb_qflags & - (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) - qflags |= XFS_OQUOTA_CHKD; + /* If any quota inodes are written, write all quota inodes */ + if (fields & (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO)) + fields |= (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO); + + } else { + /* If any quota inodes are written, write all quota inodes */ + if (fields & (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO + | XFS_SB_PQUOTINO)) + fields |= (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO + | XFS_SB_PQUOTINO); } while (fields) { @@ -691,6 +738,8 @@ xfs_sb_to_disk( memcpy(to_ptr + first, from_ptr + first, size); } else if (f == XFS_SBS_QFLAGS) { *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); + } else if (f == XFS_SBS_GQUOTINO) { + *(__be64 *)(to_ptr + first) = cpu_to_be64(gquotino); } else { switch (size) { case 2: @@ -872,6 +921,18 @@ reread: */ xfs_sb_from_disk(&mp->m_sb, XFS_BUF_TO_SBP(bp)); + if (!xfs_sb_version_has_pquota(&mp->m_sb) && XFS_IS_PQUOTA_ON(mp)) { + /* + * On disk superblock only has sb_gquotino, and in memory + * superblock has both sb_gquotino and sb_pquotino. But, + * only one them is supported at any point of time. + * So, if PQUOTA is set in disk superblock, copy over + * sb_gquotino to sb_pquotino. + */ + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino; + mp->m_sb.sb_gquotino = NULLFSINO; + } + /* * We must be able to do sector-sized and sector-aligned IO. */ diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 97912cb..41ccc3c 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -516,7 +516,8 @@ xfs_qm_need_dqattach( if (!XFS_NOT_DQATTACHED(mp, ip)) return false; if (ip->i_ino == mp->m_sb.sb_uquotino || - ip->i_ino == mp->m_sb.sb_gquotino) + ip->i_ino == mp->m_sb.sb_gquotino || + ip->i_ino == mp->m_sb.sb_pquotino) return false; return true; } @@ -651,6 +652,7 @@ xfs_qm_dqdetach( ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_uquotino); ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_gquotino); + ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_pquotino); if (ip->i_udquot) { xfs_qm_dqrele(ip->i_udquot); ip->i_udquot = NULL; @@ -858,22 +860,21 @@ xfs_qm_qino_alloc( spin_lock(&mp->m_sb_lock); if (flags & XFS_QMOPT_SBVERSION) { ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); - ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == - (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); xfs_sb_version_addquota(&mp->m_sb); mp->m_sb.sb_uquotino = NULLFSINO; mp->m_sb.sb_gquotino = NULLFSINO; + mp->m_sb.sb_pquotino = NULLFSINO; /* qflags will get updated _after_ quotacheck */ mp->m_sb.sb_qflags = 0; } if (flags & XFS_QMOPT_UQUOTA) mp->m_sb.sb_uquotino = (*ip)->i_ino; - else + else if (flags & XFS_QMOPT_GQUOTA) mp->m_sb.sb_gquotino = (*ip)->i_ino; + else + mp->m_sb.sb_pquotino = (*ip)->i_ino; spin_unlock(&mp->m_sb_lock); xfs_mod_sb(tp, sbfields); @@ -1185,7 +1186,9 @@ xfs_qm_dqusage_adjust( * rootino must have its resources accounted for, not so with the quota * inodes. */ - if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { + if (ino == mp->m_sb.sb_uquotino || + ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino) { *res = BULKSTAT_RV_NOTHING; return XFS_ERROR(EINVAL); } @@ -1466,19 +1469,17 @@ xfs_qm_init_quotainos( if (error) goto error_rele; } - /* Use sb_gquotino for now */ if (XFS_IS_PQUOTA_ON(mp) && - mp->m_sb.sb_gquotino != NULLFSINO) { - ASSERT(mp->m_sb.sb_gquotino > 0); - error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, + mp->m_sb.sb_pquotino != NULLFSINO) { + ASSERT(mp->m_sb.sb_pquotino > 0); + error = xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, 0, 0, &pip); if (error) goto error_rele; } } else { flags |= XFS_QMOPT_SBVERSION; - sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS); + sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_QFLAGS); } /* @@ -1505,7 +1506,7 @@ xfs_qm_init_quotainos( } if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { error = xfs_qm_qino_alloc(mp, &pip, - sbflags | XFS_SB_GQUOTINO, + sbflags | XFS_SB_PQUOTINO, flags | XFS_QMOPT_PQUOTA); if (error) goto error_rele; diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index 9bec772..65c0a7d 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -201,8 +201,7 @@ xfs_qm_scall_quotaoff( /* * If quotas is completely disabled, close shop. */ - if (((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET1) || - ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET2)) { + if ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_ALL) { mutex_unlock(&q->qi_quotaofflock); xfs_qm_destroy_quotainfo(mp); return (0); @@ -297,8 +296,10 @@ xfs_qm_scall_trunc_qfiles( if (flags & XFS_DQ_USER) error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_uquotino); - if (flags & (XFS_DQ_GROUP|XFS_DQ_PROJ)) + if (flags & XFS_DQ_GROUP) error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_gquotino); + if (flags & XFS_DQ_PROJ) + error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_pquotino); return error ? error : error2; } @@ -412,17 +413,20 @@ xfs_qm_scall_getqstat( struct fs_quota_stat *out) { struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_inode *uip, *gip; - bool tempuqip, tempgqip; + struct xfs_inode *uip = NULL; + struct xfs_inode *gip = NULL; + struct xfs_inode *pip = NULL; + bool tempuqip = false; + bool tempgqip = false; + bool temppqip = false; - uip = gip = NULL; - tempuqip = tempgqip = false; memset(out, 0, sizeof(fs_quota_stat_t)); out->qs_version = FS_QSTAT_VERSION; if (!xfs_sb_version_hasquota(&mp->m_sb)) { out->qs_uquota.qfs_ino = NULLFSINO; out->qs_gquota.qfs_ino = NULLFSINO; + out->qs_pquota.qfs_ino = NULLFSINO; return (0); } out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & @@ -431,10 +435,13 @@ xfs_qm_scall_getqstat( out->qs_pad = 0; out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; + if (&out->qs_gquota != &out->qs_pquota) + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; if (q) { uip = q->qi_uquotaip; gip = q->qi_gquotaip; + pip = q->qi_pquotaip; } if (!uip && mp->m_sb.sb_uquotino != NULLFSINO) { if (xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, @@ -446,6 +453,11 @@ xfs_qm_scall_getqstat( 0, 0, &gip) == 0) tempgqip = true; } + if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { + if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip) == 0) + temppqip = true; + } if (uip) { out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; @@ -458,6 +470,12 @@ xfs_qm_scall_getqstat( if (tempgqip) IRELE(gip); } + if (pip) { + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + if (temppqip) + IRELE(pip); + } if (q) { out->qs_incoredqs = q->qi_dquots; out->qs_btimelimit = q->qi_btimelimit; diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index fe46c0c..be51581 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -285,14 +285,6 @@ typedef struct xfs_qoff_logformat { (XFS_IS_PQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) -#define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ - XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) - -#define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) - #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h index 2de58a8..3745b73 100644 --- a/fs/xfs/xfs_sb.h +++ b/fs/xfs/xfs_sb.h @@ -618,6 +618,11 @@ xfs_sb_has_incompat_log_feature( return (sbp->sb_features_log_incompat & feature) != 0; } +static inline int xfs_sb_version_has_pquota(xfs_sb_t *sbp) +{ + return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5; +} + /* * end of superblock version macros */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 5feac04..01019d9 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -420,12 +420,6 @@ xfs_parseargs( } #endif - if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && - (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { - xfs_warn(mp, "cannot mount with both project and group quota"); - return EINVAL; - } - if ((dsunit && !dswidth) || (!dsunit && dswidth)) { xfs_warn(mp, "sunit and swidth must be specified together"); return EINVAL; @@ -1388,6 +1382,14 @@ xfs_finish_flags( return XFS_ERROR(EROFS); } + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) && + !xfs_sb_version_has_pquota(&mp->m_sb)) { + xfs_warn(mp, "Super block does not support " + "project and group quota together"); + return XFS_ERROR(EINVAL); + } + return 0; } diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 2bbad13..fee905b 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -157,7 +157,8 @@ xfs_trans_mod_dquot_byino( if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp) || ip->i_ino == mp->m_sb.sb_uquotino || - ip->i_ino == mp->m_sb.sb_gquotino) + ip->i_ino == mp->m_sb.sb_gquotino || + ip->i_ino == mp->m_sb.sb_pquotino) return; if (tp->t_dqinfo == NULL) @@ -825,6 +826,7 @@ xfs_trans_reserve_quota_nblks( ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); + ASSERT(ip->i_ino != mp->m_sb.sb_pquotino); ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT((flags & ~(XFS_QMOPT_FORCE_RES | XFS_QMOPT_ENOSPC)) == diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h index 8655280..f17e3bb 100644 --- a/include/uapi/linux/dqblk_xfs.h +++ b/include/uapi/linux/dqblk_xfs.h @@ -155,6 +155,7 @@ typedef struct fs_quota_stat { __s8 qs_pad; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ +#define qs_pquota qs_gquota __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ -- 1.7.1 From sekharan@us.ibm.com Fri May 10 16:21:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 13CF229E10 for ; Fri, 10 May 2013 16:21:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 87E5A8F8049 for ; Fri, 10 May 2013 14:21:50 -0700 (PDT) X-ASG-Debug-ID: 1368220904-04bdf042251b8090001-NocioJ Received: from e36.co.us.ibm.com (e36.co.us.ibm.com [32.97.110.154]) by cuda.sgi.com with ESMTP id no3dOCt3wJg4vsm8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 14:21:45 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.154 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from /spool/local by e36.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 10 May 2013 15:21:44 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e36.co.us.ibm.com (192.168.1.136) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 10 May 2013 15:21:42 -0600 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 36DE41FF001D for ; Fri, 10 May 2013 15:16:35 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4ALLesf130818 for ; Fri, 10 May 2013 15:21:40 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4ALLe2f019480 for ; Fri, 10 May 2013 15:21:40 -0600 Received: from chandra-dt.austin.ibm.com (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4ALLVaa018809; Fri, 10 May 2013 15:21:40 -0600 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Subject: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. Date: Fri, 10 May 2013 16:21:26 -0500 X-ASG-Orig-Subj: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. Message-Id: <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051021-7606-0000-0000-00000B4909F1 X-Barracuda-Connect: e36.co.us.ibm.com[32.97.110.154] X-Barracuda-Start-Time: 1368220904 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Add project quota changes to all the places where group quota field is used: * add separate project quota members into various structures * split project quota and group quotas so that instead of overriding the group quota members incore, the new project quota members are used instead * get rid of usage of the OQUOTA flag incore, in favor of separate * group and project quota flags. * add a project dquot argument to various functions. No externally visible interfaces changed. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_dquot.c | 33 ++++- fs/xfs/xfs_dquot.h | 13 +- fs/xfs/xfs_icache.c | 4 +- fs/xfs/xfs_inode.h | 1 + fs/xfs/xfs_ioctl.c | 14 +- fs/xfs/xfs_iops.c | 4 +- fs/xfs/xfs_qm.c | 355 ++++++++++++++++++++++++++++++---------------- fs/xfs/xfs_qm.h | 53 +++++--- fs/xfs/xfs_qm_bhv.c | 2 +- fs/xfs/xfs_qm_syscalls.c | 19 ++- fs/xfs/xfs_quota.h | 32 +++-- fs/xfs/xfs_super.c | 5 +- fs/xfs/xfs_symlink.c | 13 ++- fs/xfs/xfs_trans_dquot.c | 94 +++++++------ fs/xfs/xfs_vnodeops.c | 12 +- 15 files changed, 416 insertions(+), 238 deletions(-) diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index a41f8bf..a25ba5d 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -68,8 +68,7 @@ static struct lock_class_key xfs_dquot_other_class; * This is called to free all the memory associated with a dquot */ void -xfs_qm_dqdestroy( - xfs_dquot_t *dqp) +xfs_qm_dqdestroy(xfs_dquot_t *dqp) { ASSERT(list_empty(&dqp->q_lru)); @@ -568,6 +567,17 @@ xfs_qm_dqrepair( return 0; } +struct xfs_inode * +xfs_dq_to_quota_inode(struct xfs_dquot *dqp) +{ + if (XFS_QM_ISUDQ(dqp)) + return dqp->q_mount->m_quotainfo->qi_uquotaip; + if (XFS_QM_ISGDQ(dqp)) + return dqp->q_mount->m_quotainfo->qi_gquotaip; + ASSERT(XFS_QM_ISPDQ(dqp)); + return dqp->q_mount->m_quotainfo->qi_pquotaip; +} + /* * Maps a dquot to the buffer containing its on-disk version. * This returns a ptr to the buffer containing the on-disk dquot @@ -584,7 +594,7 @@ xfs_qm_dqtobp( xfs_bmbt_irec_t map; int nmaps = 1, error; xfs_buf_t *bp; - xfs_inode_t *quotip = XFS_DQ_TO_QIP(dqp); + xfs_inode_t *quotip = xfs_dq_to_quota_inode(dqp); xfs_mount_t *mp = dqp->q_mount; xfs_dqid_t id = be32_to_cpu(dqp->q_core.d_id); xfs_trans_t *tp = (tpp ? *tpp : NULL); @@ -815,7 +825,7 @@ xfs_qm_dqget( xfs_dquot_t **O_dqpp) /* OUT : locked incore dquot */ { struct xfs_quotainfo *qi = mp->m_quotainfo; - struct radix_tree_root *tree = XFS_DQUOT_TREE(qi, type); + struct radix_tree_root *tree = xfs_dquot_tree(qi, type); struct xfs_dquot *dqp; int error; @@ -947,6 +957,7 @@ xfs_qm_dqput_final( { struct xfs_quotainfo *qi = dqp->q_mount->m_quotainfo; struct xfs_dquot *gdqp; + struct xfs_dquot *pdqp; trace_xfs_dqput_free(dqp); @@ -960,21 +971,29 @@ xfs_qm_dqput_final( /* * If we just added a udquot to the freelist, then we want to release - * the gdquot reference that it (probably) has. Otherwise it'll keep - * the gdquot from getting reclaimed. + * the gdquot/pdquot reference that it (probably) has. Otherwise it'll + * keep the gdquot/pdquot from getting reclaimed. */ gdqp = dqp->q_gdquot; if (gdqp) { xfs_dqlock(gdqp); dqp->q_gdquot = NULL; } + + pdqp = dqp->q_pdquot; + if (pdqp) { + xfs_dqlock(pdqp); + dqp->q_pdquot = NULL; + } xfs_dqunlock(dqp); /* - * If we had a group quota hint, release it now. + * If we had a group/project quota hint, release it now. */ if (gdqp) xfs_qm_dqput(gdqp); + if (pdqp) + xfs_qm_dqput(pdqp); } /* diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h index 4f0ebfc..00ccbf1 100644 --- a/fs/xfs/xfs_dquot.h +++ b/fs/xfs/xfs_dquot.h @@ -29,7 +29,6 @@ * when quotas are off. */ -struct xfs_mount; struct xfs_trans; enum { @@ -52,7 +51,8 @@ typedef struct xfs_dquot { int q_bufoffset; /* off of dq in buffer (# dquots) */ xfs_fileoff_t q_fileoffset; /* offset in quotas file */ - struct xfs_dquot*q_gdquot; /* group dquot, hint only */ + struct xfs_dquot *q_gdquot; /* group dquot, hint only */ + struct xfs_dquot *q_pdquot; /* project dquot, hint only */ xfs_disk_dquot_t q_core; /* actual usage & quotas */ xfs_dq_logitem_t q_logitem; /* dquot log item */ xfs_qcnt_t q_res_bcount; /* total regular nblks used+reserved */ @@ -118,8 +118,9 @@ static inline int xfs_this_quota_on(struct xfs_mount *mp, int type) case XFS_DQ_USER: return XFS_IS_UQUOTA_ON(mp); case XFS_DQ_GROUP: + return XFS_IS_GQUOTA_ON(mp); case XFS_DQ_PROJ: - return XFS_IS_OQUOTA_ON(mp); + return XFS_IS_PQUOTA_ON(mp); default: return 0; } @@ -131,8 +132,9 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) case XFS_DQ_USER: return ip->i_udquot; case XFS_DQ_GROUP: - case XFS_DQ_PROJ: return ip->i_gdquot; + case XFS_DQ_PROJ: + return ip->i_pdquot; default: return NULL; } @@ -144,9 +146,6 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) #define XFS_QM_ISPDQ(dqp) ((dqp)->dq_flags & XFS_DQ_PROJ) #define XFS_QM_ISGDQ(dqp) ((dqp)->dq_flags & XFS_DQ_GROUP) #define XFS_DQ_TO_QINF(dqp) ((dqp)->q_mount->m_quotainfo) -#define XFS_DQ_TO_QIP(dqp) (XFS_QM_ISUDQ(dqp) ? \ - XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ - XFS_DQ_TO_QINF(dqp)->qi_gquotaip) extern int xfs_qm_dqread(struct xfs_mount *, xfs_dqid_t, uint, uint, struct xfs_dquot **); diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c index 96e344e..3f90e1c 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c @@ -335,7 +335,9 @@ xfs_iget_cache_miss( iflags = XFS_INEW; if (flags & XFS_IGET_DONTCACHE) iflags |= XFS_IDONTCACHE; - ip->i_udquot = ip->i_gdquot = NULL; + ip->i_udquot = NULL; + ip->i_gdquot = NULL; + ip->i_pdquot = NULL; xfs_iflags_set(ip, iflags); /* insert the new inode */ diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 9112979..b55fd34 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -250,6 +250,7 @@ typedef struct xfs_inode { struct xfs_mount *i_mount; /* fs mount struct ptr */ struct xfs_dquot *i_udquot; /* user dquot */ struct xfs_dquot *i_gdquot; /* group dquot */ + struct xfs_dquot *i_pdquot; /* project dquot */ /* Inode location stuff */ xfs_ino_t i_ino; /* inode number (agno/agino)*/ diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 5e99968..71a8bc5 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -928,7 +928,7 @@ xfs_ioctl_setattr( struct xfs_trans *tp; unsigned int lock_flags = 0; struct xfs_dquot *udqp = NULL; - struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; struct xfs_dquot *olddquot = NULL; int code; @@ -957,7 +957,7 @@ xfs_ioctl_setattr( if (XFS_IS_QUOTA_ON(mp) && (mask & FSX_PROJID)) { code = xfs_qm_vop_dqalloc(ip, ip->i_d.di_uid, ip->i_d.di_gid, fa->fsx_projid, - XFS_QMOPT_PQUOTA, &udqp, &gdqp); + XFS_QMOPT_PQUOTA, &udqp, NULL, &pdqp); if (code) return code; } @@ -994,8 +994,8 @@ xfs_ioctl_setattr( XFS_IS_PQUOTA_ON(mp) && xfs_get_projid(ip) != fa->fsx_projid) { ASSERT(tp); - code = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, - capable(CAP_FOWNER) ? + code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, + pdqp, capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); if (code) /* out of quota */ goto error_return; @@ -1113,7 +1113,7 @@ xfs_ioctl_setattr( if (xfs_get_projid(ip) != fa->fsx_projid) { if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { olddquot = xfs_qm_vop_chown(tp, ip, - &ip->i_gdquot, gdqp); + &ip->i_pdquot, pdqp); } xfs_set_projid(ip, fa->fsx_projid); @@ -1160,13 +1160,13 @@ xfs_ioctl_setattr( */ xfs_qm_dqrele(olddquot); xfs_qm_dqrele(udqp); - xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); return code; error_return: xfs_qm_dqrele(udqp); - xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); xfs_trans_cancel(tp, 0); if (lock_flags) xfs_iunlock(ip, lock_flags); diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa..7c54ea4 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -517,7 +517,7 @@ xfs_setattr_nonsize( ASSERT(udqp == NULL); ASSERT(gdqp == NULL); error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip), - qflags, &udqp, &gdqp); + qflags, &udqp, &gdqp, NULL); if (error) return error; } @@ -553,7 +553,7 @@ xfs_setattr_nonsize( (XFS_IS_GQUOTA_ON(mp) && igid != gid))) { ASSERT(tp); error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, - capable(CAP_FOWNER) ? + NULL, capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); if (error) /* out of quota */ goto out_trans_cancel; diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index fe4c743..97912cb 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -69,7 +69,7 @@ xfs_qm_dquot_walk( void *data) { struct xfs_quotainfo *qi = mp->m_quotainfo; - struct radix_tree_root *tree = XFS_DQUOT_TREE(qi, type); + struct radix_tree_root *tree = xfs_dquot_tree(qi, type); uint32_t next_index; int last_error = 0; int skipped; @@ -136,6 +136,7 @@ xfs_qm_dqpurge( struct xfs_mount *mp = dqp->q_mount; struct xfs_quotainfo *qi = mp->m_quotainfo; struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; xfs_dqlock(dqp); if ((dqp->dq_flags & XFS_DQ_FREEING) || dqp->q_nrefs != 0) { @@ -144,8 +145,7 @@ xfs_qm_dqpurge( } /* - * If this quota has a group hint attached, prepare for releasing it - * now. + * If this quota has a hint attached, prepare for releasing it now. */ gdqp = dqp->q_gdquot; if (gdqp) { @@ -153,6 +153,12 @@ xfs_qm_dqpurge( dqp->q_gdquot = NULL; } + pdqp = dqp->q_pdquot; + if (pdqp) { + xfs_dqlock(pdqp); + dqp->q_pdquot = NULL; + } + dqp->dq_flags |= XFS_DQ_FREEING; xfs_dqflock(dqp); @@ -188,7 +194,7 @@ xfs_qm_dqpurge( xfs_dqfunlock(dqp); xfs_dqunlock(dqp); - radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags), + radix_tree_delete(xfs_dquot_tree(qi, dqp->q_core.d_flags), be32_to_cpu(dqp->q_core.d_id)); qi->qi_dquots--; @@ -207,6 +213,8 @@ xfs_qm_dqpurge( if (gdqp) xfs_qm_dqput(gdqp); + if (pdqp) + xfs_qm_dqput(pdqp); return 0; } @@ -363,6 +371,10 @@ xfs_qm_unmount_quotas( IRELE(mp->m_quotainfo->qi_gquotaip); mp->m_quotainfo->qi_gquotaip = NULL; } + if (mp->m_quotainfo->qi_pquotaip) { + IRELE(mp->m_quotainfo->qi_pquotaip); + mp->m_quotainfo->qi_pquotaip = NULL; + } } } @@ -409,7 +421,10 @@ xfs_qm_dqattach_one( * be reclaimed as long as we have a ref from inode and we * hold the ilock. */ - dqp = udqhint->q_gdquot; + if (type == XFS_DQ_GROUP) + dqp = udqhint->q_gdquot; + else + dqp = udqhint->q_pdquot; if (dqp && be32_to_cpu(dqp->q_core.d_id) == id) { ASSERT(*IO_idqpp == NULL); @@ -452,28 +467,38 @@ xfs_qm_dqattach_one( /* - * Given a udquot and gdquot, attach a ptr to the group dquot in the + * Given a udquot and gdquot, attach a ptr to the group/project dquot in the * udquot as a hint for future lookups. */ STATIC void -xfs_qm_dqattach_grouphint( - xfs_dquot_t *udq, - xfs_dquot_t *gdq) +xfs_qm_dqattach_grouphint(xfs_inode_t *ip, int type) { - xfs_dquot_t *tmp; + struct xfs_dquot **dqhint; + struct xfs_dquot *gpdq; + struct xfs_dquot *udq = ip->i_udquot; xfs_dqlock(udq); - tmp = udq->q_gdquot; - if (tmp) { - if (tmp == gdq) + if (type == XFS_DQ_GROUP) { + gpdq = ip->i_gdquot; + dqhint = &udq->q_gdquot; + } else { + gpdq = ip->i_pdquot; + dqhint = &udq->q_pdquot; + } + + if (*dqhint) { + struct xfs_dquot *tmp; + + if (*dqhint == gpdq) goto done; - udq->q_gdquot = NULL; + tmp = *dqhint; + *dqhint = NULL; xfs_qm_dqrele(tmp); } - udq->q_gdquot = xfs_qm_dqhold(gdq); + *dqhint = xfs_qm_dqhold(gpdq); done: xfs_dqunlock(udq); } @@ -527,12 +552,8 @@ xfs_qm_dqattach_locked( } ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - if (XFS_IS_OQUOTA_ON(mp)) { - error = XFS_IS_GQUOTA_ON(mp) ? - xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, - flags & XFS_QMOPT_DQALLOC, - ip->i_udquot, &ip->i_gdquot) : - xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, + if (XFS_IS_GQUOTA_ON(mp)) { + error = xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, flags & XFS_QMOPT_DQALLOC, ip->i_udquot, &ip->i_gdquot); /* @@ -544,14 +565,28 @@ xfs_qm_dqattach_locked( nquotas++; } + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + if (XFS_IS_PQUOTA_ON(mp)) { + error = xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, + flags & XFS_QMOPT_DQALLOC, + ip->i_udquot, &ip->i_pdquot); + /* + * Don't worry about the udquot that we may have + * attached above. It'll get detached, if not already. + */ + if (error) + goto done; + nquotas++; + } + /* - * Attach this group quota to the user quota as a hint. + * Attach this group/project quota to the user quota as a hint. * This WON'T, in general, result in a thrash. */ - if (nquotas == 2) { + if (nquotas > 1 && ip->i_udquot) { ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - ASSERT(ip->i_udquot); - ASSERT(ip->i_gdquot); + ASSERT(ip->i_gdquot || !XFS_IS_GQUOTA_ON(mp)); + ASSERT(ip->i_pdquot || !XFS_IS_PQUOTA_ON(mp)); /* * We do not have i_udquot locked at this point, but this check @@ -559,8 +594,13 @@ xfs_qm_dqattach_locked( * 100% all the time. It is just a hint, and this will * succeed in general. */ - if (ip->i_udquot->q_gdquot != ip->i_gdquot) - xfs_qm_dqattach_grouphint(ip->i_udquot, ip->i_gdquot); + if (XFS_IS_GQUOTA_ON(mp) && + ip->i_udquot->q_gdquot != ip->i_gdquot) + xfs_qm_dqattach_grouphint(ip, XFS_DQ_GROUP); + + if (XFS_IS_PQUOTA_ON(mp) && + ip->i_udquot->q_pdquot != ip->i_pdquot) + xfs_qm_dqattach_grouphint(ip, XFS_DQ_PROJ); } done: @@ -568,8 +608,10 @@ xfs_qm_dqattach_locked( if (!error) { if (XFS_IS_UQUOTA_ON(mp)) ASSERT(ip->i_udquot); - if (XFS_IS_OQUOTA_ON(mp)) + if (XFS_IS_GQUOTA_ON(mp)) ASSERT(ip->i_gdquot); + if (XFS_IS_PQUOTA_ON(mp)) + ASSERT(ip->i_pdquot); } ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); #endif @@ -602,7 +644,7 @@ void xfs_qm_dqdetach( xfs_inode_t *ip) { - if (!(ip->i_udquot || ip->i_gdquot)) + if (!(ip->i_udquot || ip->i_gdquot || ip->i_pdquot)) return; trace_xfs_dquot_dqdetach(ip); @@ -617,6 +659,10 @@ xfs_qm_dqdetach( xfs_qm_dqrele(ip->i_gdquot); ip->i_gdquot = NULL; } + if (ip->i_pdquot) { + xfs_qm_dqrele(ip->i_pdquot); + ip->i_pdquot = NULL; + } } int @@ -661,6 +707,7 @@ xfs_qm_init_quotainfo( INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS); INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); + INIT_RADIX_TREE(&qinf->qi_pquota_tree, GFP_NOFS); mutex_init(&qinf->qi_tree_lock); INIT_LIST_HEAD(&qinf->qi_lru_list); @@ -762,6 +809,10 @@ xfs_qm_destroy_quotainfo( IRELE(qi->qi_gquotaip); qi->qi_gquotaip = NULL; } + if (qi->qi_pquotaip) { + IRELE(qi->qi_pquotaip); + qi->qi_pquotaip = NULL; + } mutex_destroy(&qi->qi_quotaofflock); kmem_free(qi); mp->m_quotainfo = NULL; @@ -1247,16 +1298,18 @@ xfs_qm_quotacheck( int done, count, error, error2; xfs_ino_t lastino; size_t structsz; - xfs_inode_t *uip, *gip; uint flags; LIST_HEAD (buffer_list); + struct xfs_inode *uip = mp->m_quotainfo->qi_uquotaip; + struct xfs_inode *gip = mp->m_quotainfo->qi_gquotaip; + struct xfs_inode *pip = mp->m_quotainfo->qi_pquotaip; count = INT_MAX; structsz = 1; lastino = 0; flags = 0; - ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); + ASSERT(uip || gip || pip); ASSERT(XFS_IS_QUOTA_RUNNING(mp)); xfs_notice(mp, "Quotacheck needed: Please wait."); @@ -1266,7 +1319,6 @@ xfs_qm_quotacheck( * their counters to zero. We need a clean slate. * We don't log our changes till later. */ - uip = mp->m_quotainfo->qi_uquotaip; if (uip) { error = xfs_qm_dqiterate(mp, uip, XFS_QMOPT_UQUOTA, &buffer_list); @@ -1275,15 +1327,20 @@ xfs_qm_quotacheck( flags |= XFS_UQUOTA_CHKD; } - gip = mp->m_quotainfo->qi_gquotaip; if (gip) { - error = xfs_qm_dqiterate(mp, gip, XFS_IS_GQUOTA_ON(mp) ? - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA, + error = xfs_qm_dqiterate(mp, gip, XFS_QMOPT_GQUOTA, + &buffer_list); + if (error) + goto error_return; + flags |= XFS_GQUOTA_CHKD; + } + + if (pip) { + error = xfs_qm_dqiterate(mp, pip, XFS_QMOPT_PQUOTA, &buffer_list); if (error) goto error_return; - flags |= XFS_IS_GQUOTA_ON(mp) ? - XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; + flags |= XFS_PQUOTA_CHKD; } do { @@ -1378,13 +1435,14 @@ STATIC int xfs_qm_init_quotainos( xfs_mount_t *mp) { - xfs_inode_t *uip, *gip; + struct xfs_inode *uip = NULL; + struct xfs_inode *gip = NULL; + struct xfs_inode *pip = NULL; int error; __int64_t sbflags; uint flags; ASSERT(mp->m_quotainfo); - uip = gip = NULL; sbflags = 0; flags = 0; @@ -1395,19 +1453,27 @@ xfs_qm_init_quotainos( if (XFS_IS_UQUOTA_ON(mp) && mp->m_sb.sb_uquotino != NULLFSINO) { ASSERT(mp->m_sb.sb_uquotino > 0); - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, - 0, 0, &uip))) + error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, + 0, 0, &uip); + if (error) return XFS_ERROR(error); } - if (XFS_IS_OQUOTA_ON(mp) && + if (XFS_IS_GQUOTA_ON(mp) && mp->m_sb.sb_gquotino != NULLFSINO) { ASSERT(mp->m_sb.sb_gquotino > 0); - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, - 0, 0, &gip))) { - if (uip) - IRELE(uip); - return XFS_ERROR(error); - } + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, + 0, 0, &gip); + if (error) + goto error_rele; + } + /* Use sb_gquotino for now */ + if (XFS_IS_PQUOTA_ON(mp) && + mp->m_sb.sb_gquotino != NULLFSINO) { + ASSERT(mp->m_sb.sb_gquotino > 0); + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, + 0, 0, &pip); + if (error) + goto error_rele; } } else { flags |= XFS_QMOPT_SBVERSION; @@ -1416,36 +1482,50 @@ xfs_qm_init_quotainos( } /* - * Create the two inodes, if they don't exist already. The changes + * Create the three inodes, if they don't exist already. The changes * made above will get added to a transaction and logged in one of * the qino_alloc calls below. If the device is readonly, * temporarily switch to read-write to do this. */ if (XFS_IS_UQUOTA_ON(mp) && uip == NULL) { - if ((error = xfs_qm_qino_alloc(mp, &uip, + error = xfs_qm_qino_alloc(mp, &uip, sbflags | XFS_SB_UQUOTINO, - flags | XFS_QMOPT_UQUOTA))) + flags | XFS_QMOPT_UQUOTA); + if (error) return XFS_ERROR(error); flags &= ~XFS_QMOPT_SBVERSION; } - if (XFS_IS_OQUOTA_ON(mp) && gip == NULL) { - flags |= (XFS_IS_GQUOTA_ON(mp) ? - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); + if (XFS_IS_GQUOTA_ON(mp) && gip == NULL) { error = xfs_qm_qino_alloc(mp, &gip, - sbflags | XFS_SB_GQUOTINO, flags); - if (error) { - if (uip) - IRELE(uip); - - return XFS_ERROR(error); - } + sbflags | XFS_SB_GQUOTINO, + flags | XFS_QMOPT_GQUOTA); + if (error) + goto error_rele; + } + if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { + error = xfs_qm_qino_alloc(mp, &pip, + sbflags | XFS_SB_GQUOTINO, + flags | XFS_QMOPT_PQUOTA); + if (error) + goto error_rele; } mp->m_quotainfo->qi_uquotaip = uip; mp->m_quotainfo->qi_gquotaip = gip; + mp->m_quotainfo->qi_pquotaip = pip; return 0; + +error_rele: + if (uip) + IRELE(uip); + if (gip) + IRELE(gip); + if (pip) + IRELE(pip); + return XFS_ERROR(error); + } STATIC void @@ -1456,7 +1536,7 @@ xfs_qm_dqfree_one( struct xfs_quotainfo *qi = mp->m_quotainfo; mutex_lock(&qi->qi_tree_lock); - radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags), + radix_tree_delete(xfs_dquot_tree(qi, dqp->q_core.d_flags), be32_to_cpu(dqp->q_core.d_id)); qi->qi_dquots--; @@ -1639,10 +1719,13 @@ xfs_qm_vop_dqalloc( prid_t prid, uint flags, struct xfs_dquot **O_udqpp, - struct xfs_dquot **O_gdqpp) + struct xfs_dquot **O_gdqpp, + struct xfs_dquot **O_pdqpp) { struct xfs_mount *mp = ip->i_mount; - struct xfs_dquot *uq, *gq; + struct xfs_dquot *uq = NULL; + struct xfs_dquot *gq = NULL; + struct xfs_dquot *pq = NULL; int error; uint lockflags; @@ -1667,7 +1750,6 @@ xfs_qm_vop_dqalloc( } } - uq = gq = NULL; if ((flags & XFS_QMOPT_UQUOTA) && XFS_IS_UQUOTA_ON(mp)) { if (ip->i_d.di_uid != uid) { /* @@ -1680,14 +1762,14 @@ xfs_qm_vop_dqalloc( * holding ilock. */ xfs_iunlock(ip, lockflags); - if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t) uid, + error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t) uid, XFS_DQ_USER, XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, - &uq))) { - ASSERT(error != ENOENT); + &uq); + ASSERT(error != ENOENT); + if (error) return error; - } /* * Get the ilock in the right order. */ @@ -1706,16 +1788,15 @@ xfs_qm_vop_dqalloc( if ((flags & XFS_QMOPT_GQUOTA) && XFS_IS_GQUOTA_ON(mp)) { if (ip->i_d.di_gid != gid) { xfs_iunlock(ip, lockflags); - if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)gid, + error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)gid, XFS_DQ_GROUP, XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, - &gq))) { - if (uq) - xfs_qm_dqrele(uq); - ASSERT(error != ENOENT); - return error; - } + &gq); + ASSERT(error != ENOENT); + if (error) + goto error_rele; + xfs_dqunlock(gq); lockflags = XFS_ILOCK_SHARED; xfs_ilock(ip, lockflags); @@ -1723,25 +1804,25 @@ xfs_qm_vop_dqalloc( ASSERT(ip->i_gdquot); gq = xfs_qm_dqhold(ip->i_gdquot); } - } else if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { + } + if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { if (xfs_get_projid(ip) != prid) { xfs_iunlock(ip, lockflags); - if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, + error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, XFS_DQ_PROJ, XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, - &gq))) { - if (uq) - xfs_qm_dqrele(uq); - ASSERT(error != ENOENT); - return (error); - } - xfs_dqunlock(gq); + &pq); + ASSERT(error != ENOENT); + if (error) + goto error_rele; + + xfs_dqunlock(pq); lockflags = XFS_ILOCK_SHARED; xfs_ilock(ip, lockflags); } else { - ASSERT(ip->i_gdquot); - gq = xfs_qm_dqhold(ip->i_gdquot); + ASSERT(ip->i_pdquot); + pq = xfs_qm_dqhold(ip->i_pdquot); } } if (uq) @@ -1756,7 +1837,18 @@ xfs_qm_vop_dqalloc( *O_gdqpp = gq; else if (gq) xfs_qm_dqrele(gq); + if (O_pdqpp) + *O_pdqpp = pq; + else if (pq) + xfs_qm_dqrele(pq); return 0; + +error_rele: + if (uq) + xfs_qm_dqrele(uq); + if (gq) + xfs_qm_dqrele(gq); + return error; } /* @@ -1804,15 +1896,21 @@ xfs_qm_vop_chown( */ int xfs_qm_vop_chown_reserve( - xfs_trans_t *tp, - xfs_inode_t *ip, - xfs_dquot_t *udqp, - xfs_dquot_t *gdqp, - uint flags) + xfs_trans_t *tp, + xfs_inode_t *ip, + struct xfs_dquot *udqp, + struct xfs_dquot *gdqp, + struct xfs_dquot *pdqp, + uint flags) { xfs_mount_t *mp = ip->i_mount; uint delblks, blkflags, prjflags = 0; - xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; + struct xfs_dquot *unresudq = NULL; + struct xfs_dquot *unresgdq = NULL; + struct xfs_dquot *unrespdq = NULL; + struct xfs_dquot *delblksudq = NULL; + struct xfs_dquot *delblksgdq = NULL; + struct xfs_dquot *delblkspdq = NULL; int error; @@ -1820,7 +1918,6 @@ xfs_qm_vop_chown_reserve( ASSERT(XFS_IS_QUOTA_RUNNING(mp)); delblks = ip->i_delayed_blks; - delblksudq = delblksgdq = unresudq = unresgdq = NULL; blkflags = XFS_IS_REALTIME_INODE(ip) ? XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS; @@ -1837,25 +1934,29 @@ xfs_qm_vop_chown_reserve( unresudq = ip->i_udquot; } } - if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { - if (XFS_IS_PQUOTA_ON(ip->i_mount) && - xfs_get_projid(ip) != be32_to_cpu(gdqp->q_core.d_id)) - prjflags = XFS_QMOPT_ENOSPC; - - if (prjflags || - (XFS_IS_GQUOTA_ON(ip->i_mount) && - ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { - delblksgdq = gdqp; - if (delblks) { - ASSERT(ip->i_gdquot); - unresgdq = ip->i_gdquot; - } + if (XFS_IS_GQUOTA_ON(ip->i_mount) && gdqp && + ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id)) { + delblksgdq = gdqp; + if (delblks) { + ASSERT(ip->i_gdquot); + unresgdq = ip->i_gdquot; + } + } + + if (XFS_IS_PQUOTA_ON(ip->i_mount) && pdqp && + xfs_get_projid(ip) != be32_to_cpu(pdqp->q_core.d_id)) { + prjflags = XFS_QMOPT_ENOSPC; + delblkspdq = pdqp; + if (delblks) { + ASSERT(ip->i_pdquot); + unrespdq = ip->i_pdquot; } } - if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, - delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, - flags | blkflags | prjflags))) + error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, + delblksudq, delblksgdq, delblkspdq, ip->i_d.di_nblocks, + 1, flags | blkflags | prjflags); + if (error) return (error); /* @@ -1868,15 +1969,17 @@ xfs_qm_vop_chown_reserve( /* * Do the reservations first. Unreservation can't fail. */ - ASSERT(delblksudq || delblksgdq); - ASSERT(unresudq || unresgdq); - if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, - delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, - flags | blkflags | prjflags))) + ASSERT(delblksudq || delblksgdq || delblkspdq); + ASSERT(unresudq || unresgdq || unrespdq); + error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, + delblksudq, delblksgdq, delblkspdq, + (xfs_qcnt_t)delblks, 0, + flags | blkflags | prjflags); + if (error) return (error); xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, - unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, - blkflags); + unresudq, unresgdq, unrespdq, + -((xfs_qcnt_t)delblks), 0, blkflags); } return (0); @@ -1915,7 +2018,8 @@ xfs_qm_vop_create_dqattach( struct xfs_trans *tp, struct xfs_inode *ip, struct xfs_dquot *udqp, - struct xfs_dquot *gdqp) + struct xfs_dquot *gdqp, + struct xfs_dquot *pdqp) { struct xfs_mount *mp = tp->t_mountp; @@ -1935,13 +2039,18 @@ xfs_qm_vop_create_dqattach( } if (gdqp) { ASSERT(ip->i_gdquot == NULL); - ASSERT(XFS_IS_OQUOTA_ON(mp)); - ASSERT((XFS_IS_GQUOTA_ON(mp) ? - ip->i_d.di_gid : xfs_get_projid(ip)) == - be32_to_cpu(gdqp->q_core.d_id)); - + ASSERT(XFS_IS_GQUOTA_ON(mp)); + ASSERT(ip->i_d.di_gid == be32_to_cpu(gdqp->q_core.d_id)); ip->i_gdquot = xfs_qm_dqhold(gdqp); xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); } + if (pdqp) { + ASSERT(ip->i_pdquot == NULL); + ASSERT(XFS_IS_PQUOTA_ON(mp)); + ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); + + ip->i_pdquot = xfs_qm_dqhold(pdqp); + xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1); + } } diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h index 5d16a6e..f23b06b 100644 --- a/fs/xfs/xfs_qm.h +++ b/fs/xfs/xfs_qm.h @@ -44,9 +44,11 @@ extern struct kmem_zone *xfs_qm_dqtrxzone; typedef struct xfs_quotainfo { struct radix_tree_root qi_uquota_tree; struct radix_tree_root qi_gquota_tree; + struct radix_tree_root qi_pquota_tree; struct mutex qi_tree_lock; - xfs_inode_t *qi_uquotaip; /* user quota inode */ - xfs_inode_t *qi_gquotaip; /* group quota inode */ + struct xfs_inode *qi_uquotaip; /* user quota inode */ + struct xfs_inode *qi_gquotaip; /* group quota inode */ + struct xfs_inode *qi_pquotaip; /* project quota inode */ struct list_head qi_lru_list; struct mutex qi_lru_lock; int qi_lru_count; @@ -69,30 +71,45 @@ typedef struct xfs_quotainfo { struct shrinker qi_shrinker; } xfs_quotainfo_t; -#define XFS_DQUOT_TREE(qi, type) \ - ((type & XFS_DQ_USER) ? \ - &((qi)->qi_uquota_tree) : \ - &((qi)->qi_gquota_tree)) - +static inline struct radix_tree_root * +xfs_dquot_tree( + struct xfs_quotainfo *qi, + int type) +{ + switch (type) { + case XFS_DQ_USER: + return &qi->qi_uquota_tree; + case XFS_DQ_GROUP: + return &qi->qi_gquota_tree; + case XFS_DQ_PROJ: + return &qi->qi_pquota_tree; + default: + ASSERT(0); + } + return NULL; +} extern int xfs_qm_calc_dquots_per_chunk(struct xfs_mount *mp, unsigned int nbblks); -extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); -extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, - xfs_dquot_t *, xfs_dquot_t *, long, long, uint); -extern void xfs_trans_dqjoin(xfs_trans_t *, xfs_dquot_t *); -extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); +extern void xfs_trans_mod_dquot(xfs_trans_t *, struct xfs_dquot *, uint, long); +extern void xfs_trans_dqjoin(xfs_trans_t *, struct xfs_dquot *); +extern void xfs_trans_log_dquot(xfs_trans_t *, struct xfs_dquot *); /* - * We keep the usr and grp dquots separately so that locking will be easier - * to do at commit time. All transactions that we know of at this point + * We keep the usr, grp, and prj dquots separately so that locking will be + * easier to do at commit time. All transactions that we know of at this point * affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value. */ +enum { + XFS_QM_TRANS_USR = 0, + XFS_QM_TRANS_GRP, + XFS_QM_TRANS_PROJ, + XFS_QM_TRANS_DQTYPES +}; #define XFS_QM_TRANS_MAXDQS 2 -typedef struct xfs_dquot_acct { - xfs_dqtrx_t dqa_usrdquots[XFS_QM_TRANS_MAXDQS]; - xfs_dqtrx_t dqa_grpdquots[XFS_QM_TRANS_MAXDQS]; -} xfs_dquot_acct_t; +struct xfs_dquot_acct { + struct xfs_dqtrx dqs[XFS_QM_TRANS_DQTYPES][XFS_QM_TRANS_MAXDQS]; +}; /* * Users are allowed to have a usage exceeding their softlimit for diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c index 2d02eac..72a4fdd 100644 --- a/fs/xfs/xfs_qm_bhv.c +++ b/fs/xfs/xfs_qm_bhv.c @@ -115,7 +115,7 @@ xfs_qm_newmount( (pquotaondisk && !XFS_IS_PQUOTA_ON(mp)) || (!pquotaondisk && XFS_IS_PQUOTA_ON(mp)) || (gquotaondisk && !XFS_IS_GQUOTA_ON(mp)) || - (!gquotaondisk && XFS_IS_OQUOTA_ON(mp))) && + (!gquotaondisk && XFS_IS_GQUOTA_ON(mp))) && xfs_dev_is_read_only(mp, "changing quota state")) { xfs_warn(mp, "please mount with%s%s%s%s.", (!quotaondisk ? "out quota" : ""), diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index f005f1d..9bec772 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -119,7 +119,8 @@ xfs_qm_scall_quotaoff( dqtype |= XFS_QMOPT_GQUOTA; flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); inactivate_flags |= XFS_GQUOTA_ACTIVE; - } else if (flags & XFS_PQUOTA_ACCT) { + } + if (flags & XFS_PQUOTA_ACCT) { dqtype |= XFS_QMOPT_PQUOTA; flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); inactivate_flags |= XFS_PQUOTA_ACTIVE; @@ -214,10 +215,14 @@ xfs_qm_scall_quotaoff( IRELE(q->qi_uquotaip); q->qi_uquotaip = NULL; } - if ((dqtype & (XFS_QMOPT_GQUOTA|XFS_QMOPT_PQUOTA)) && q->qi_gquotaip) { + if ((dqtype & XFS_QMOPT_GQUOTA) && q->qi_gquotaip) { IRELE(q->qi_gquotaip); q->qi_gquotaip = NULL; } + if ((dqtype & XFS_QMOPT_PQUOTA) && q->qi_pquotaip) { + IRELE(q->qi_pquotaip); + q->qi_pquotaip = NULL; + } out_unlock: mutex_unlock(&q->qi_quotaofflock); @@ -853,9 +858,11 @@ xfs_dqrele_inode( { /* skip quota inodes */ if (ip == ip->i_mount->m_quotainfo->qi_uquotaip || - ip == ip->i_mount->m_quotainfo->qi_gquotaip) { + ip == ip->i_mount->m_quotainfo->qi_gquotaip || + ip == ip->i_mount->m_quotainfo->qi_pquotaip) { ASSERT(ip->i_udquot == NULL); ASSERT(ip->i_gdquot == NULL); + ASSERT(ip->i_pdquot == NULL); return 0; } @@ -864,10 +871,14 @@ xfs_dqrele_inode( xfs_qm_dqrele(ip->i_udquot); ip->i_udquot = NULL; } - if (flags & (XFS_PQUOTA_ACCT|XFS_GQUOTA_ACCT) && ip->i_gdquot) { + if ((flags & XFS_GQUOTA_ACCT) && ip->i_gdquot) { xfs_qm_dqrele(ip->i_gdquot); ip->i_gdquot = NULL; } + if ((flags & XFS_PQUOTA_ACCT) && ip->i_pdquot) { + xfs_qm_dqrele(ip->i_pdquot); + ip->i_pdquot = NULL; + } xfs_iunlock(ip, XFS_ILOCK_EXCL); return 0; } diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index ccff1a6..fe46c0c 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -272,10 +272,10 @@ typedef struct xfs_qoff_logformat { * we didn't have the inode locked, the appropriate dquot(s) will be * attached atomically. */ -#define XFS_NOT_DQATTACHED(mp, ip) ((XFS_IS_UQUOTA_ON(mp) &&\ - (ip)->i_udquot == NULL) || \ - (XFS_IS_OQUOTA_ON(mp) && \ - (ip)->i_gdquot == NULL)) +#define XFS_NOT_DQATTACHED(mp, ip) \ + ((XFS_IS_UQUOTA_ON(mp) && (ip)->i_udquot == NULL) || \ + (XFS_IS_GQUOTA_ON(mp) && (ip)->i_gdquot == NULL) || \ + (XFS_IS_PQUOTA_ON(mp) && (ip)->i_pdquot == NULL)) #define XFS_QM_NEED_QUOTACHECK(mp) \ ((XFS_IS_UQUOTA_ON(mp) && \ @@ -330,17 +330,18 @@ extern int xfs_trans_reserve_quota_nblks(struct xfs_trans *, struct xfs_inode *, long, long, uint); extern int xfs_trans_reserve_quota_bydquots(struct xfs_trans *, struct xfs_mount *, struct xfs_dquot *, - struct xfs_dquot *, long, long, uint); + struct xfs_dquot *, struct xfs_dquot *, long, long, uint); extern int xfs_qm_vop_dqalloc(struct xfs_inode *, uid_t, gid_t, prid_t, uint, - struct xfs_dquot **, struct xfs_dquot **); + struct xfs_dquot **, struct xfs_dquot **, struct xfs_dquot **); extern void xfs_qm_vop_create_dqattach(struct xfs_trans *, struct xfs_inode *, - struct xfs_dquot *, struct xfs_dquot *); + struct xfs_dquot *, struct xfs_dquot *, struct xfs_dquot *); extern int xfs_qm_vop_rename_dqattach(struct xfs_inode **); extern struct xfs_dquot *xfs_qm_vop_chown(struct xfs_trans *, struct xfs_inode *, struct xfs_dquot **, struct xfs_dquot *); extern int xfs_qm_vop_chown_reserve(struct xfs_trans *, struct xfs_inode *, - struct xfs_dquot *, struct xfs_dquot *, uint); + struct xfs_dquot *, struct xfs_dquot *, + struct xfs_dquot *, uint); extern int xfs_qm_dqattach(struct xfs_inode *, uint); extern int xfs_qm_dqattach_locked(struct xfs_inode *, uint); extern void xfs_qm_dqdetach(struct xfs_inode *); @@ -354,10 +355,12 @@ extern void xfs_qm_unmount_quotas(struct xfs_mount *); #else static inline int xfs_qm_vop_dqalloc(struct xfs_inode *ip, uid_t uid, gid_t gid, prid_t prid, - uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp) + uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp, + struct xfs_dquot **pdqp) { *udqp = NULL; *gdqp = NULL; + *pdqp = NULL; return 0; } #define xfs_trans_dup_dqinfo(tp, tp2) @@ -372,14 +375,15 @@ static inline int xfs_trans_reserve_quota_nblks(struct xfs_trans *tp, } static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, struct xfs_mount *mp, struct xfs_dquot *udqp, - struct xfs_dquot *gdqp, long nblks, long nions, uint flags) + struct xfs_dquot *gdqp, struct xfs_dquot *pdqp, + long nblks, long nions, uint flags) { return 0; } -#define xfs_qm_vop_create_dqattach(tp, ip, u, g) +#define xfs_qm_vop_create_dqattach(tp, ip, u, g, p) #define xfs_qm_vop_rename_dqattach(it) (0) #define xfs_qm_vop_chown(tp, ip, old, new) (NULL) -#define xfs_qm_vop_chown_reserve(tp, ip, u, g, fl) (0) +#define xfs_qm_vop_chown_reserve(tp, ip, u, g, p, fl) (0) #define xfs_qm_dqattach(ip, fl) (0) #define xfs_qm_dqattach_locked(ip, fl) (0) #define xfs_qm_dqdetach(ip) @@ -393,8 +397,8 @@ static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, #define xfs_trans_unreserve_quota_nblks(tp, ip, nblks, ninos, flags) \ xfs_trans_reserve_quota_nblks(tp, ip, -(nblks), -(ninos), flags) -#define xfs_trans_reserve_quota(tp, mp, ud, gd, nb, ni, f) \ - xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, nb, ni, \ +#define xfs_trans_reserve_quota(tp, mp, ud, gd, pd, nb, ni, f) \ + xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, pd, nb, ni, \ f | XFS_QMOPT_RES_REGBLKS) extern int xfs_qm_dqcheck(struct xfs_mount *, xfs_disk_dquot_t *, diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 873fa5a..5feac04 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -560,14 +560,13 @@ xfs_showargs( else if (mp->m_qflags & XFS_UQUOTA_ACCT) seq_puts(m, "," MNTOPT_UQUOTANOENF); - /* Either project or group quotas can be active, not both */ - if (mp->m_qflags & XFS_PQUOTA_ACCT) { if (mp->m_qflags & XFS_PQUOTA_ENFD) seq_puts(m, "," MNTOPT_PRJQUOTA); else seq_puts(m, "," MNTOPT_PQUOTANOENF); - } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { + } + if (mp->m_qflags & XFS_GQUOTA_ACCT) { if (mp->m_qflags & XFS_GQUOTA_ENFD) seq_puts(m, "," MNTOPT_GRPQUOTA); else diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 5f23438..d69e50a 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c @@ -365,7 +365,9 @@ xfs_symlink( int n; xfs_buf_t *bp; prid_t prid; - struct xfs_dquot *udqp, *gdqp; + struct xfs_dquot *udqp = NULL; + struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; uint resblks; *ipp = NULL; @@ -392,7 +394,7 @@ xfs_symlink( * Make sure that we have allocated dquot(s) on disk. */ error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); if (error) goto std_return; @@ -433,7 +435,8 @@ xfs_symlink( /* * Reserve disk quota : blocks and inode. */ - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, + pdqp, resblks, 1, 0); if (error) goto error_return; @@ -471,7 +474,7 @@ xfs_symlink( /* * Also attach the dquot(s) to it, if applicable. */ - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); if (resblks) resblks -= XFS_IALLOC_SPACE_RES(mp); @@ -570,6 +573,7 @@ xfs_symlink( error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); *ipp = ip; return 0; @@ -583,6 +587,7 @@ xfs_symlink( xfs_trans_cancel(tp, cancel_flags); xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); if (unlock_dp_on_error) xfs_iunlock(dp, XFS_ILOCK_EXCL); diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 8cdbd62..2bbad13 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -103,8 +103,6 @@ xfs_trans_dup_dqinfo( return; xfs_trans_alloc_dqinfo(ntp); - oqa = otp->t_dqinfo->dqa_usrdquots; - nqa = ntp->t_dqinfo->dqa_usrdquots; /* * Because the quota blk reservation is carried forward, @@ -113,7 +111,10 @@ xfs_trans_dup_dqinfo( if(otp->t_flags & XFS_TRANS_DQ_DIRTY) ntp->t_flags |= XFS_TRANS_DQ_DIRTY; - for (j = 0; j < 2; j++) { + for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { + oqa = otp->t_dqinfo->dqs[j]; + nqa = ntp->t_dqinfo->dqs[j]; + for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { if (oqa[i].qt_dquot == NULL) break; @@ -138,8 +139,6 @@ xfs_trans_dup_dqinfo( oq->qt_ino_res = oq->qt_ino_res_used; } - oqa = otp->t_dqinfo->dqa_grpdquots; - nqa = ntp->t_dqinfo->dqa_grpdquots; } } @@ -166,8 +165,10 @@ xfs_trans_mod_dquot_byino( if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot) (void) xfs_trans_mod_dquot(tp, ip->i_udquot, field, delta); - if (XFS_IS_OQUOTA_ON(mp) && ip->i_gdquot) + if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot) (void) xfs_trans_mod_dquot(tp, ip->i_gdquot, field, delta); + if (XFS_IS_PQUOTA_ON(mp) && ip->i_pdquot) + (void) xfs_trans_mod_dquot(tp, ip->i_pdquot, field, delta); } STATIC xfs_dqtrx_t * @@ -178,15 +179,20 @@ xfs_trans_get_dqtrx( int i; xfs_dqtrx_t *qa; - qa = XFS_QM_ISUDQ(dqp) ? - tp->t_dqinfo->dqa_usrdquots : tp->t_dqinfo->dqa_grpdquots; + if (XFS_QM_ISUDQ(dqp)) + qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_USR]; + else if (XFS_QM_ISGDQ(dqp)) + qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_GRP]; + else if (XFS_QM_ISPDQ(dqp)) + qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_PROJ]; + else + return NULL; for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { if (qa[i].qt_dquot == NULL || qa[i].qt_dquot == dqp) return &qa[i]; } - return NULL; } @@ -339,12 +345,10 @@ xfs_trans_apply_dquot_deltas( return; ASSERT(tp->t_dqinfo); - qa = tp->t_dqinfo->dqa_usrdquots; - for (j = 0; j < 2; j++) { - if (qa[0].qt_dquot == NULL) { - qa = tp->t_dqinfo->dqa_grpdquots; + for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { + qa = tp->t_dqinfo->dqs[j]; + if (qa[0].qt_dquot == NULL) continue; - } /* * Lock all of the dquots and join them to the transaction. @@ -495,10 +499,6 @@ xfs_trans_apply_dquot_deltas( ASSERT(dqp->q_res_rtbcount >= be64_to_cpu(dqp->q_core.d_rtbcount)); } - /* - * Do the group quotas next - */ - qa = tp->t_dqinfo->dqa_grpdquots; } } @@ -521,9 +521,10 @@ xfs_trans_unreserve_and_mod_dquots( if (!tp->t_dqinfo || !(tp->t_flags & XFS_TRANS_DQ_DIRTY)) return; - qa = tp->t_dqinfo->dqa_usrdquots; - for (j = 0; j < 2; j++) { + for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { + qa = tp->t_dqinfo->dqs[j]; + for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { qtrx = &qa[i]; /* @@ -565,7 +566,6 @@ xfs_trans_unreserve_and_mod_dquots( xfs_dqunlock(dqp); } - qa = tp->t_dqinfo->dqa_grpdquots; } } @@ -736,8 +736,8 @@ error_return: /* * Given dquot(s), make disk block and/or inode reservations against them. - * The fact that this does the reservation against both the usr and - * grp/prj quotas is important, because this follows a both-or-nothing + * The fact that this does the reservation against user, group and + * project quotas is important, because this follows a all-or-nothing * approach. * * flags = XFS_QMOPT_FORCE_RES evades limit enforcement. Used by chown. @@ -748,15 +748,16 @@ error_return: */ int xfs_trans_reserve_quota_bydquots( - xfs_trans_t *tp, - xfs_mount_t *mp, - xfs_dquot_t *udqp, - xfs_dquot_t *gdqp, - long nblks, - long ninos, - uint flags) + struct xfs_trans *tp, + struct xfs_mount *mp, + struct xfs_dquot *udqp, + struct xfs_dquot *gdqp, + struct xfs_dquot *pdqp, + long nblks, + long ninos, + uint flags) { - int resvd = 0, error; + int error; if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) return 0; @@ -771,28 +772,34 @@ xfs_trans_reserve_quota_bydquots( (flags & ~XFS_QMOPT_ENOSPC)); if (error) return error; - resvd = 1; } if (gdqp) { error = xfs_trans_dqresv(tp, mp, gdqp, nblks, ninos, flags); - if (error) { - /* - * can't do it, so backout previous reservation - */ - if (resvd) { - flags |= XFS_QMOPT_FORCE_RES; - xfs_trans_dqresv(tp, mp, udqp, - -nblks, -ninos, flags); - } - return error; - } + if (error) + goto unwind_usr; + } + + if (pdqp) { + error = xfs_trans_dqresv(tp, mp, pdqp, nblks, ninos, flags); + if (error) + goto unwind_grp; } /* * Didn't change anything critical, so, no need to log */ return 0; + +unwind_grp: + flags |= XFS_QMOPT_FORCE_RES; + if (gdqp) + xfs_trans_dqresv(tp, mp, gdqp, -nblks, -ninos, flags); +unwind_usr: + flags |= XFS_QMOPT_FORCE_RES; + if (udqp) + xfs_trans_dqresv(tp, mp, udqp, -nblks, -ninos, flags); + return error; } @@ -830,6 +837,7 @@ xfs_trans_reserve_quota_nblks( */ return xfs_trans_reserve_quota_bydquots(tp, mp, ip->i_udquot, ip->i_gdquot, + ip->i_pdquot, nblks, ninos, flags); } diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..cd0d133 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -498,6 +498,7 @@ xfs_create( prid_t prid; struct xfs_dquot *udqp = NULL; struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; uint resblks; uint log_res; uint log_count; @@ -516,7 +517,7 @@ xfs_create( * Make sure that we have allocated dquot(s) on disk. */ error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); if (error) return error; @@ -568,7 +569,8 @@ xfs_create( /* * Reserve disk quota and the inode. */ - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, + pdqp, resblks, 1, 0); if (error) goto out_trans_cancel; @@ -632,7 +634,7 @@ xfs_create( * These ids of the inode couldn't have changed since the new * inode has been locked ever since it was created. */ - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); error = xfs_bmap_finish(&tp, &free_list, &committed); if (error) @@ -644,6 +646,7 @@ xfs_create( xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); *ipp = ip; return 0; @@ -665,6 +668,7 @@ xfs_create( xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); if (unlock_dp_on_error) xfs_iunlock(dp, XFS_ILOCK_EXCL); @@ -1577,7 +1581,7 @@ xfs_free_file_space( } xfs_ilock(ip, XFS_ILOCK_EXCL); error = xfs_trans_reserve_quota(tp, mp, - ip->i_udquot, ip->i_gdquot, + ip->i_udquot, ip->i_gdquot, ip->i_pdquot, resblks, 0, XFS_QMOPT_RES_REGBLKS); if (error) goto error1; -- 1.7.1 From sekharan@us.ibm.com Fri May 10 16:22:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 53FFF29E0F for ; Fri, 10 May 2013 16:22:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 41B1B8F8039 for ; Fri, 10 May 2013 14:22:09 -0700 (PDT) X-ASG-Debug-ID: 1368220928-04cbb05fe21bb860001-NocioJ Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by cuda.sgi.com with ESMTP id GSTvNylsiuUSQLf0 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 May 2013 14:22:08 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.150 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 10 May 2013 15:22:06 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e32.co.us.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 10 May 2013 15:21:56 -0600 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 61B3F3E40030 for ; Fri, 10 May 2013 15:21:29 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4ALLih4125748 for ; Fri, 10 May 2013 15:21:44 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4ALLinK019694 for ; Fri, 10 May 2013 15:21:44 -0600 Received: from chandra-dt.austin.ibm.com (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4ALLVad018809; Fri, 10 May 2013 15:21:43 -0600 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Subject: [PATCH v8 5/5] xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT Date: Fri, 10 May 2013 16:21:29 -0500 X-ASG-Orig-Subj: [PATCH v8 5/5] xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT Message-Id: <1368220889-25188-6-git-send-email-sekharan@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051021-5406-0000-0000-000008586B30 X-Barracuda-Connect: e32.co.us.ibm.com[32.97.110.150] X-Barracuda-Start-Time: 1368220928 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 For the Q_XGETQSTAT quota command, if the new version of fs_quota_stat data structure is used, fill the project quota information. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++++++-------------- 1 files changed, 25 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c27b0e4..7c5876b 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -420,20 +420,14 @@ xfs_qm_scall_getqstat( bool tempgqip = false; bool temppqip = false; - if (!xfs_sb_version_hasquota(&mp->m_sb)) { - out->qs_uquota.qfs_ino = NULLFSINO; - out->qs_gquota.qfs_ino = NULLFSINO; - out->qs_pquota.qfs_ino = NULLFSINO; + out->qs_uquota.qfs_ino = NULLFSINO; + out->qs_gquota.qfs_ino = NULLFSINO; + out->qs_pquota.qfs_ino = NULLFSINO; + + if (!xfs_sb_version_hasquota(&mp->m_sb)) return (0); - } out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & - (XFS_ALL_QUOTA_ACCT| - XFS_ALL_QUOTA_ENFD)); - out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; - out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; - if (&out->qs_gquota != &out->qs_pquota) - out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; - + (XFS_ALL_QUOTA_ACCT| XFS_ALL_QUOTA_ENFD)); if (q) { uip = q->qi_uquotaip; gip = q->qi_gquotaip; @@ -454,21 +448,38 @@ xfs_qm_scall_getqstat( 0, 0, &pip) == 0) temppqip = true; } + if (uip) { + out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; if (tempuqip) IRELE(uip); } if (gip) { + out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; out->qs_gquota.qfs_nblks = gip->i_d.di_nblocks; out->qs_gquota.qfs_nextents = gip->i_d.di_nextents; if (tempgqip) IRELE(gip); } if (pip) { - out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; - out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + if (out->qs_version >= FS_QSTAT_VERSION_2) { + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + } else { + /* + * In FS_QSTAT_VERSION version, there is no + * qs_pquota, and there is no combined support + * for gquota/pquota. qs_gquota is shared for + * providing the pquota/gquota information to + * the user space. + */ + out->qs_gquota.qfs_ino = mp->m_sb.sb_pquotino; + out->qs_gquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_gquota.qfs_nextents = pip->i_d.di_nextents; + } if (temppqip) IRELE(pip); } -- 1.7.1 From natjet.metadjer@ensicaen.fr Fri May 10 16:28:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=HDRS_LCASE,SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9F6C029DF8 for ; Fri, 10 May 2013 16:28:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 273F8AC004 for ; Fri, 10 May 2013 14:28:57 -0700 (PDT) X-ASG-Debug-ID: 1368221333-04cbb05fe51bbcc0001-NocioJ Received: from smtp2.ensicaen.fr (smtp2.ecole.ensicaen.fr [193.49.200.34]) by cuda.sgi.com with ESMTP id XtRimprCsNzG2f50 for ; Fri, 10 May 2013 14:28:55 -0700 (PDT) X-Barracuda-Envelope-From: natjet.metadjer@ensicaen.fr X-Barracuda-Apparent-Source-IP: 193.49.200.34 Received: from smtp2.ensicaen.fr (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 9F64E2F428A9; Fri, 10 May 2013 23:28:51 +0200 (CEST) Received: from sogo.ecole.ensicaen.fr (sogo.ecole.ensicaen.fr [193.49.200.48]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by smtp2.ensicaen.fr (Postfix) with ESMTPS id E3C332F42896; Fri, 10 May 2013 23:28:50 +0200 (CEST) Received: from sogo by sogo.ecole.ensicaen.fr with local (Exim 4.72) (envelope-from ) id 1Uaure-0001JR-EW; Fri, 10 May 2013 23:28:30 +0200 User-Agent: SOGoMail 2.0.5a X-Forward: 23.29.118.202 MIME-Version: 1.0 From: "Metadjer Natjet" subject: =?utf-8?q?MISE_=C3=80_JOUR_VOTRE_COMPTE_WEBAMIL_MAINTENANT_...?= message-id: <6e92-518d6680-103-70e74f0@194499166> X-ASG-Orig-Subj: =?utf-8?q?MISE_=C3=80_JOUR_VOTRE_COMPTE_WEBAMIL_MAINTENANT_...?= content-type: text/plain; charset="utf-8" date: Fri, 10 May 2013 23:28:30 +0200 content-transfer-encoding: quoted-printable X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2013.5.10.184816 X-PerlMx-Spam: Gauge=IIIIIIII, Probability=8%, Report=' HTML_00_01 0.05, HTML_00_10 0.05, KNOWN_FREEWEB_URI 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_1000_LESS 0, BODY_SIZE_2000_LESS 0, BODY_SIZE_300_399 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, INVALID_MSGID_NO_FQDN 0, MISSING_HEADERS 0, TO_MALFORMED 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __HAS_FROM 0, __HAS_MSGID 0, __KNOWN_FREEWEB_URI1 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __PHISH_SPEAR_STORAGE_LIMIT 0, __PHISH_SPEAR_STRUCTURE_1 0, __PHISH_SPEAR_STRUCTURE_2 0, __SANE_MSGID 0, __SUBJ_HIGHBIT 0, __SXL_SIG_ERROR_SERVFAIL , __SXL_URI_ERROR_SERVFAIL , __URI_NO_MAILTO 0, __URI_NO_PATH 0, __URI_NO_WWW 0, __URI_NS , __USER_AGENT 0, __UTF8_SUBJ 0' X-Barracuda-Connect: smtp2.ecole.ensicaen.fr[193.49.200.34] X-Barracuda-Start-Time: 1368221335 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA717, MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header 0.00 BSF_SC0_SA717 Custom Rule BSF_SC0_SA717 To: undisclosed-recipients:; Vous avez d=C3=A9pass=C3=A9 votre quota email limite de 450MB. Vous dev= ez mettre =C3=A0 jour votre email quota limite =C3=A0 2 Go dans les prochaines 48 heures. Uti= liser le Web ci-dessous un lien pour mettre =C3=A0 niveau votre compte de messagerie: http://websdaz.webs.com Merci d'utiliser notre email. From david@fromorbit.com Fri May 10 19:12:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A402029DF8 for ; Fri, 10 May 2013 19:12:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3297FAC004 for ; Fri, 10 May 2013 17:12:20 -0700 (PDT) X-ASG-Debug-ID: 1368231136-04cbb05fe31c0fa0001-w1Z2WR Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id JV0gj7N2lTkjiBAI for ; Fri, 10 May 2013 17:12:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnwPADWMjVF5LFR6/2dsb2JhbAA4BBaDBzeCU7gkhSQEAXoXdIIfAQEEATocIwULCAMYCQobDwUlAyETiAYFDTO9AxaNSB4PgRgFB4J0YQOXK5E2gyEqgS4 Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 11 May 2013 09:42:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UaxQ5-0000CI-Je; Sat, 11 May 2013 10:12:13 +1000 Date: Sat, 11 May 2013 10:12:13 +1000 From: Dave Chinner To: Bernd Schubert Cc: linux-xfs@oss.sgi.com Subject: Re: 3.9.0: general protection fault Message-ID: <20130511001213.GA32675@dastard> X-ASG-Orig-Subj: Re: 3.9.0: general protection fault References: <20130506122844.GL19978@dastard> <5187A663.707@itwm.fraunhofer.de> <20130507011254.GP19978@dastard> <5188E2F5.1090304@itwm.fraunhofer.de> <20130507220742.GC24635@dastard> <518A8FD4.40700@itwm.fraunhofer.de> <20130509004115.GM24635@dastard> <518CC9A9.9060500@itwm.fraunhofer.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518CC9A9.9060500@itwm.fraunhofer.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368231137 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130595 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Fri, May 10, 2013 at 12:19:21PM +0200, Bernd Schubert wrote: > On 05/09/2013 02:41 AM, Dave Chinner wrote: > >On Wed, May 08, 2013 at 07:48:04PM +0200, Bernd Schubert wrote: > >>On 05/08/2013 12:07 AM, Dave Chinner wrote: > >>>On Tue, May 07, 2013 at 01:18:13PM +0200, Bernd Schubert wrote: > >>>>On 05/07/2013 03:12 AM, Dave Chinner wrote: > >>>>>On Mon, May 06, 2013 at 02:47:31PM +0200, Bernd Schubert wrote: > >>>>>>On 05/06/2013 02:28 PM, Dave Chinner wrote: > >>>>>>>On Mon, May 06, 2013 at 10:14:22AM +0200, Bernd Schubert wrote: > >>>>>>>>And anpther protection fault, this time with 3.9.0. Always happens > >>>>>>>>on one of the servers. Its ECC memory, so I don't suspect a faulty > >>>>>>>>memory bank. Going to fsck now- > >>>>>>> > >>>>>>>http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > >>>>>> > >>>>>>Isn't that a bit overhead? And I can't provide /proc/meminfo and > >>>>>>others, as this issue causes a kernel panic a few traces later. > >>>>> > >>>>>Provide what information you can. Without knowing a single thing > >>>>>about your hardware, storage config and workload, I can't help you > >>>>>at all. You're asking me to find a needle in a haystack blindfolded > >>>>>and with both hands tied behind my back.... > >>>> > >>>>I see that xfs_info, meminfo, etc are useful, but /proc/mounts? > >>>>Maybe you want "cat /proc/mounts | grep xfs"?. Attached is the > >>>>output of /proc/mounts, please let me know if you were really > >>>>interested in all of that non-xfs output? > >>> > >>>Yes. You never know what is relevant to a problem that is reported, > >>>especially if there are multiple filesystems sharing the same > >>>device... > >> > >>Hmm, I see. But you need to extend your questions to multipathing > >>and shared storage. > > > >why would we? Anyone using such a configuration reporting a bug > >usually is clueful enough to mention it in their bug report when > >describing their RAID/LVM setup. The FAQ entry covers the basic > >information needed to start meaingful triage, not *all* the > >infomration we might ask for. It's the baseline we start from. > > > >Indeed, the FAQ exists because I got sick of asking people for the > >same information several times a week, every week in response to > >poor bug reports like yours. it's far more efficient to paste a link > >several times a week. i.e. The FAQ entry is there for my benefit, > >not yours. > > Poor bug report or not, most information you ask about in the FAQ > are entirely irrelevant for this issue. You're complaining that I've asked for irrelevant information in reponse to your bug report. I know nothing about your system, so I need to know some basic information before I start. So while you might think it's irrelevant, it is critical information for me > >I don't really care if you don't understand why we are asking for > >that information, I simply expect you to provide it as best you can > >if you want your problem solved. > > And here we go, the bug I reported is not my problem. I simply > reported a bug in XFS. You can use it or not, I do not care at all. No, that's not what I said. You're hearing what you want to hear, not what I'm saying. I care about fixing the bug - I'd be ignoring you if I didn't care. However: don't confuse the fact that I don't care who you are, what you do, how important you think you are or what you think know with that. Who you are simply not important - you are a Random Joe from the interwebs that has reported a bug, and I've given the same response to you that I gave to the last hundred Random Joes that have reported problems. So, Random Joe, it's now your responsibility to jump through the hoops we ask you to so that _we_ can find the cause of your problem. > Of course I don't like bugs and I'm going to help to fix it, but I > have a long daily todo list and I'm not going to spend my time > filling in irrelevent items. Oh, cry me a river. The majority of what is asked for in the FAQ can be gathered in less than 5 minutes. You've wasted far more time than that arguing that what I asked for is irrelevant, unnecessary and too hard to gather and lecturing about irrelevant stuff like MMP and HA. Then having the gall to accuse me of not caring about fixing your bug. You need to pull your head in and take a long, hard look at yourself. I can't fix a bug without the bug reporter's help, and you seem to be unwilling to help. Ergo, I can't fix the bug. Co-operation is needed. If you want your problem fixed, please drop the attitude, go back up the thread to where I asked for information from you, and fresh start again. -Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri May 10 20:15:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 45DD629DF8 for ; Fri, 10 May 2013 20:15:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 31D6C30405F for ; Fri, 10 May 2013 18:15:13 -0700 (PDT) X-ASG-Debug-ID: 1368234908-04cb6c53a11b8ad0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id KwS8huHkOtSIBcoG for ; Fri, 10 May 2013 18:15:08 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnUPAE6ajVF5LFR6/2dsb2JhbABSgweDCrgjhSQEAXoXdIIfAQEFJxMcIxAIAxgJJQ8FJQMhE4gLvTcWjXWBHQeCdGEDlyuRNoMhKg Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 11 May 2013 10:45:07 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UayOv-0000K2-Uj; Sat, 11 May 2013 11:15:05 +1000 Date: Sat, 11 May 2013 11:15:05 +1000 From: Dave Chinner To: Mark Tinguely Cc: Subranshu Patel , xfs@oss.sgi.com Subject: Re: Error during bulk removal of files Message-ID: <20130511011505.GB32675@dastard> X-ASG-Orig-Subj: Re: Error during bulk removal of files References: <518D22F0.8040405@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518D22F0.8040405@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368234908 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130599 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 10, 2013 at 11:40:16AM -0500, Mark Tinguely wrote: > On 05/10/13 11:17, Subranshu Patel wrote: > > Call Trace: > > [] xlog_wait+0x72/0x90 [xfs] > [] ? default_wake_function+0x0/0x20 > [] xlog_grant_log_space+0x3ab/0x520 [xfs] > [] ? kmem_zone_zalloc+0x3a/0x50 [xfs] > [] ? random32+0x1c/0x20 > [] ? xfs_trans_ail_push+0x21/0x80 [xfs] > [] xfs_log_reserve+0xe6/0x140 [xfs] > [] xfs_trans_reserve+0xa0/0x210 [xfs] > [] xfs_fs_log_dummy+0x43/0x90 [xfs] > [] ? xfs_log_need_covered+0x94/0xd0 [xfs] > [] xfs_sync_worker+0x81/0x90 [xfs] > [] xfssyncd+0x17e/0x210 [xfs] > [] ? xfssyncd+0x0/0x210 [xfs] > [] kthread+0x96/0xa0 > [] child_rip+0xa/0x20 > [] ? kthread+0x0/0xa0 > [] ? child_rip+0x0/0x20 > > Ran out of log grant space trying to write out the dummy record in > the sync worker. > > Something is not getting moved off the AIL. This could be a symptom; > for example a lock not being released could lead to depleted log > space. What else is happening on the filesystem? > > > > >--------------------->8------------ > > > >The XFS filesystem size is 14TB (LVM), kernel version 2.6.32 What 2.6.32 kernel? Output of uname -a? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri May 10 20:17:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7541A29DF8 for ; Fri, 10 May 2013 20:17:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3B6DF304053 for ; Fri, 10 May 2013 18:17:38 -0700 (PDT) X-ASG-Debug-ID: 1368235053-04bdf042241bf5f0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id VaiPy3ggpNTJpcXH for ; Fri, 10 May 2013 18:17:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApAPAGabjVF5LFR6/2dsb2JhbABSgweCDny4I4UkBAF6F3SCHwEBBScTHCMQCAMYCSUPBSUDIROIC701Fo11gR0HgnRhA5Ndg06RNoMhKg Received: from ppp121-44-84-122.lns20.syd6.internode.on.net (HELO dastard) ([121.44.84.122]) by ipmail07.adl2.internode.on.net with ESMTP; 11 May 2013 10:47:32 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UayRI-0000KZ-Bp; Sat, 11 May 2013 11:17:32 +1000 Date: Sat, 11 May 2013 11:17:32 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector Message-ID: <20130511011732.GC32675@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> <20130509072045.GO24635@dastard> <518C54AA.7070908@gmail.com> <20130510021942.GP23072@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368235053 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130599 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Fri, May 10, 2013 at 03:07:19PM -0400, Michael L. Semon wrote: > On Thu, May 9, 2013 at 10:19 PM, Dave Chinner wrote: > > On Thu, May 09, 2013 at 10:00:10PM -0400, Michael L. Semon wrote: > >> xfs/012 13s ...[ 1851.323902] > >> [ 1851.325479] ================================= > >> [ 1851.326551] [ INFO: inconsistent lock state ] > >> [ 1851.326551] 3.9.0+ #1 Not tainted > >> [ 1851.326551] --------------------------------- > >> [ 1851.326551] inconsistent {RECLAIM_FS-ON-R} -> {IN-RECLAIM_FS-W} usage. > >> [ 1851.326551] kswapd0/18 [HC0[0]:SC0[0]:HE1:SE1] takes: > >> [ 1851.326551] (&(&ip->i_lock)->mr_lock){++++-+}, at: [] > >> xfs_ilock+0x10f/0x190 > >> [ 1851.326551] {RECLAIM_FS-ON-R} state was registered at: > >> [ 1851.326551] [] mark_held_locks+0x8a/0xf0 > >> [ 1851.326551] [] lockdep_trace_alloc+0x5c/0xa0 > >> [ 1851.326551] [] __alloc_pages_nodemask+0x7c/0x670 > >> [ 1851.326551] [] new_slab+0x6e/0x2a0 > >> [ 1851.326551] [] __slab_alloc.isra.59.constprop.67+0x1d3/0x40a > >> [ 1851.326551] [] __kmalloc+0x10d/0x180 > >> [ 1851.326551] [] kmem_alloc+0x56/0xd0 > >> [ 1851.326551] [] kmem_zalloc+0x11/0xd0 > >> [ 1851.326551] [] xfs_dabuf_map.isra.2.constprop.5+0x22e/0x520 > > > > Yup, needs a KM_NOFS allocation there because we come through > > here outside a transaction and so it doesn't get KM_NOFS implicitly > > in this case. There's been a couple of these reported in the past > > week or two - I need to do an audit and sweep them all up.... > > > > Technically, though, this can't cause a deadlock on the inode we > > hold a lock on here because it's a directory inode, not a regular > > file and so it will never be seen in the reclaim data writeback path > > nor on the inode LRU when the shrinker runs. So most likely it is a > > false positive... > > Thanks for looking at it. There are going to be plenty of false > positives out there. Is there a pecking order of what works best? As > in... > > * IRQ (IRQs-off?) checking: worth reporting...? > * sleep inside atomic sections: fascinating, but almost anything can trigger it > * multiple-CPU deadlock detection: can only speculate on a uniprocessor system > * circular dependency checking: YMMV > * reclaim-fs checking: which I knew how much developers need to > conform to reclaim-fs, or what it is If there's XFS in the trace, then just post them. We try to fix false positives (as well as real bugs) so lockdep reporting gets more accurate and less noisy over time. Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlsemon35@gmail.com Fri May 10 23:48:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E545A29DF8 for ; Fri, 10 May 2013 23:48:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B46608F8049 for ; Fri, 10 May 2013 21:48:56 -0700 (PDT) X-ASG-Debug-ID: 1368247734-04bdf042231c5f00001-NocioJ Received: from mail-gg0-f174.google.com (mail-gg0-f174.google.com [209.85.161.174]) by cuda.sgi.com with ESMTP id 8PWjPNUbovg64hHG (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 10 May 2013 21:48:55 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.161.174 X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.174] Received: by mail-gg0-f174.google.com with SMTP id y1so9446ggc.33 for ; Fri, 10 May 2013 21:48:54 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.174] X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.174] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=73zaK/UdUcc+bYe3N9aYddkQ9ZYP7EMVOu74BenOni0=; b=w58c5yIwnz8BHi7t1VaQgIs0OBJWJKBwbDPoNA2KgkTEy76Ip+4BkavpXhVbYF9NKq 4NRw8YD+TPSYsXUPvDoZ2nJdafkdMGfap/aw9Pl2b0wwf+UyZttURtqKXJfdjk8Ac2ER sy2mwzLd4GOjZrdy+VxICbRKbFV4xoNNmZi+6iI8PnzqiQ0OhDtyndqWpS4P7jrgQsHz /N65JRN3zbixPdtUVC6M6Zr5H5/+jRcZw6dQAdWe8maCW6mvJSm8mxAhohHFtyNIQfKU MOSkq/YlxwpDSuGEk+MmMz07+PvIVZrnAtv6xXppNw0YG5OnuTgU8j8G7gJQB6GLOC+p BYJg== X-Received: by 10.236.74.101 with SMTP id w65mr495544yhd.21.1368247734559; Fri, 10 May 2013 21:48:54 -0700 (PDT) Received: from [192.168.0.139] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id i67sm7615015yhq.25.2013.05.10.21.48.53 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 10 May 2013 21:48:54 -0700 (PDT) Message-ID: <518DCDB1.30408@gmail.com> Date: Sat, 11 May 2013 00:48:49 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> <20130509072045.GO24635@dastard> <518C54AA.7070908@gmail.com> <20130510021942.GP23072@dastard> <20130511011732.GC32675@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector In-Reply-To: <20130511011732.GC32675@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-gg0-f174.google.com[209.85.161.174] X-Barracuda-Start-Time: 1368247735 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130613 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/10/2013 09:17 PM, Dave Chinner wrote: > On Fri, May 10, 2013 at 03:07:19PM -0400, Michael L. Semon wrote: >> On Thu, May 9, 2013 at 10:19 PM, Dave Chinner wrote: >>> On Thu, May 09, 2013 at 10:00:10PM -0400, Michael L. Semon wrote: >> Thanks for looking at it. There are going to be plenty of false >> positives out there. Is there a pecking order of what works best? As >> in... >> >> * IRQ (IRQs-off?) checking: worth reporting...? >> * sleep inside atomic sections: fascinating, but almost anything can trigger it >> * multiple-CPU deadlock detection: can only speculate on a uniprocessor system >> * circular dependency checking: YMMV >> * reclaim-fs checking: which I knew how much developers need to >> conform to reclaim-fs, or what it is > > If there's XFS in the trace, then just post them. We try to fix > false positives (as well as real bugs) so lockdep reporting gets more > accurate and less noisy over time. > > Cheers, > > Dave. > Feel free to ignore and flame them as well. I'm going to make another attempt to triage my eldest Pentium 4, and there's a high chance that you'll have to reply, "Despite the xfs_* functions, that looks like a DRM issue. Go bug those guys." Thanks! Michael During generic/249 (lucky, first test out)... ====================================================== [ INFO: possible circular locking dependency detected ] 3.9.0+ #2 Not tainted ------------------------------------------------------- xfs_io/1181 is trying to acquire lock: (sb_writers#3){.+.+.+}, at: [] generic_file_splice_write+0x7e/0x1b0 but task is already holding lock: (&(&ip->i_iolock)->mr_lock){++++++}, at: [] xfs_ilock+0xea/0x190 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (&(&ip->i_iolock)->mr_lock){++++++}: [] lock_acquire+0x80/0x100 [] down_write_nested+0x54/0xa0 [] xfs_ilock+0xea/0x190 [] xfs_setattr_size+0x30c/0x4a0 [] xfs_vn_setattr+0x2c/0x30 [] notify_change+0x13c/0x360 [] do_truncate+0x5a/0xa0 [] do_last.isra.46+0x31e/0xb90 [] path_openat.isra.47+0x9b/0x3e0 [] do_filp_open+0x31/0x80 [] do_sys_open+0xf1/0x1c0 [] sys_open+0x28/0x30 [] sysenter_do_call+0x12/0x36 -> #1 (&sb->s_type->i_mutex_key#6){+.+.+.}: [] lock_acquire+0x80/0x100 [] mutex_lock_nested+0x64/0x2b0 [] do_truncate+0x50/0xa0 [] do_last.isra.46+0x31e/0xb90 [] path_openat.isra.47+0x9b/0x3e0 [] do_filp_open+0x31/0x80 [] do_sys_open+0xf1/0x1c0 [] sys_open+0x28/0x30 [] sysenter_do_call+0x12/0x36 -> #0 (sb_writers#3){.+.+.+}: [] __lock_acquire+0x1465/0x1690 [] lock_acquire+0x80/0x100 [] __sb_start_write+0xad/0x1b0 [] generic_file_splice_write+0x7e/0x1b0 [] xfs_file_splice_write+0x83/0x120 [] do_splice_from+0x65/0x90 [] direct_splice_actor+0x2b/0x40 [] splice_direct_to_actor+0xb9/0x1e0 [] do_splice_direct+0x62/0x80 [] do_sendfile+0x1b6/0x2d0 [] sys_sendfile64+0x4e/0xb0 [] sysenter_do_call+0x12/0x36 other info that might help us debug this: Chain exists of: sb_writers#3 --> &sb->s_type->i_mutex_key#6 --> &(&ip->i_iolock)->mr_lock Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&(&ip->i_iolock)->mr_lock); lock(&sb->s_type->i_mutex_key#6); lock(&(&ip->i_iolock)->mr_lock); lock(sb_writers#3); *** DEADLOCK *** 1 lock held by xfs_io/1181: #0: (&(&ip->i_iolock)->mr_lock){++++++}, at: [] xfs_ilock+0xea/0x190 stack backtrace: Pid: 1181, comm: xfs_io Not tainted 3.9.0+ #2 Call Trace: [] print_circular_bug+0x1b8/0x1c2 [] __lock_acquire+0x1465/0x1690 [] ? trace_hardirqs_off+0xb/0x10 [] lock_acquire+0x80/0x100 [] ? generic_file_splice_write+0x7e/0x1b0 [] __sb_start_write+0xad/0x1b0 [] ? generic_file_splice_write+0x7e/0x1b0 [] ? generic_file_splice_write+0x7e/0x1b0 [] generic_file_splice_write+0x7e/0x1b0 [] ? xfs_ilock+0xea/0x190 [] xfs_file_splice_write+0x83/0x120 [] ? xfs_file_fsync+0x210/0x210 [] do_splice_from+0x65/0x90 [] direct_splice_actor+0x2b/0x40 [] splice_direct_to_actor+0xb9/0x1e0 [] ? do_splice_from+0x90/0x90 [] do_splice_direct+0x62/0x80 [] do_sendfile+0x1b6/0x2d0 [] ? might_fault+0x94/0xa0 [] sys_sendfile64+0x4e/0xb0 [] sysenter_do_call+0x12/0x36 XFS (sdb5): Mounting Filesystem XFS (sdb5): Ending clean mount From rjevskiy@gmail.com Sat May 11 07:09:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 289817F37 for ; Sat, 11 May 2013 07:09:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1859130405F for ; Sat, 11 May 2013 05:09:47 -0700 (PDT) X-ASG-Debug-ID: 1368274184-04cbb05fe51d7570001-NocioJ Received: from mail-la0-f42.google.com (mail-la0-f42.google.com [209.85.215.42]) by cuda.sgi.com with ESMTP id yNj571Fpq0mljDTg (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 11 May 2013 05:09:45 -0700 (PDT) X-Barracuda-Envelope-From: rjevskiy@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.42 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.42] Received: by mail-la0-f42.google.com with SMTP id er20so1966224lab.29 for ; Sat, 11 May 2013 05:09:44 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.42] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.42] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-type; bh=WbI1B+a7UZ0bihIjHDmnEht2VZNSunvX+IMgxk5LVGM=; b=HKF6mg/hTdUTrA8pZnnx9AS0m5JQk/HJ4n3o2+4qJzpbiqgNSyKFS9vG/x441LzTFC 9DUEDU/dR7OaCboD/qQB6cjoifdjX/Q6t+nXn5H/wUleN8+JxelOfcj3wW7FJuYef7Ia LjPuJa7tnziAK633CL9GNj7EGkBZXUIOWWXTmb1BvMj/9o5aYcLwCnjNRxVTeGr0mbFn x4J6vrxJuqESEQqG5ZOgsO++iSLRfdaSazZAjNaD+bN8jMGTW0vdIAYmGdpPH0cVb1pg Oy0hkIboo3oDZQU8DiIQlJ8DX5Es70hrgphmx1y2yGw2xKuvtmWz+aXgFWHf1jkZwDb3 MTzg== X-Received: by 10.152.87.39 with SMTP id u7mr9427774laz.48.1368274184079; Sat, 11 May 2013 05:09:44 -0700 (PDT) Received: from smtp.gmail.com (swsoft-msk-nat.sw.ru. [195.214.232.10]) by mx.google.com with ESMTPSA id t4sm2265019lbe.7.2013.05.11.05.09.42 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 11 May 2013 05:09:42 -0700 (PDT) Sender: Dmitry Monakhov From: Dmitry Monakhov To: Dave Jones , Linux Kernel Cc: xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) In-Reply-To: <20130507133707.GA18301@redhat.com> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> User-Agent: Notmuch/0.6.1 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-redhat-linux-gnu) Date: Sat, 11 May 2013 16:09:40 +0400 Message-ID: <87k3n5en0b.fsf@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Barracuda-Connect: mail-la0-f42.google.com[209.85.215.42] X-Barracuda-Start-Time: 1368274185 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130643 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, 7 May 2013 09:37:07 -0400, Dave Jones wrote: > started compiling a kernel, and then... > I've bisected this one. commit 666d644cd72a9ec58b353209ff191d7430f3b357 Author: Dave Chinner Date: Wed Apr 3 14:09:21 2013 +1100 xfs: don't free EFIs before the EFDs are committed #xfstests ./check generic/007 generic/007 generic/007 > [ 172.233200] ============================================================================= > [ 172.233205] BUG xfs_efi_item (Not tainted): Poison overwritten > [ 172.233207] ----------------------------------------------------------------------------- > > [ 172.233210] Disabling lock debugging due to kernel taint > [ 172.233213] INFO: 0xffff8800aaac4ea8-0xffff8800aaac4ea8. First byte 0x6a instead of 0x6b > [ 172.233235] INFO: Allocated in kmem_zone_alloc+0x67/0xf0 [xfs] age=29290 cpu=1 pid=1357 > [ 172.233239] __slab_alloc+0x468/0x52c > [ 172.233243] kmem_cache_alloc+0x2b4/0x320 > [ 172.233256] kmem_zone_alloc+0x67/0xf0 [xfs] > [ 172.233269] kmem_zone_zalloc+0x14/0x40 [xfs] > [ 172.233287] xfs_efi_init+0x41/0xa0 [xfs] > [ 172.233305] xfs_trans_get_efi+0x58/0x90 [xfs] > [ 172.233320] xfs_bmap_finish+0x76/0x1b0 [xfs] > [ 172.233338] xfs_itruncate_extents+0x2cd/0x610 [xfs] > [ 172.233353] xfs_inactive+0x401/0x530 [xfs] > [ 172.233367] xfs_fs_evict_inode+0x8c/0x1b0 [xfs] > [ 172.233370] evict+0xa3/0x1a0 > [ 172.233372] iput+0xf5/0x180 > [ 172.233374] dput+0x208/0x2f0 > [ 172.233378] SYSC_renameat+0x3be/0x430 > [ 172.233380] SyS_renameat+0xe/0x10 > [ 172.233383] SyS_rename+0x1b/0x20 > [ 172.233399] INFO: Freed in xfs_efi_item_free+0x21/0x40 [xfs] age=27303 cpu=1 pid=177 > [ 172.233402] __slab_free+0x41/0x39f > [ 172.233405] kmem_cache_free+0x326/0x370 > [ 172.233420] xfs_efi_item_free+0x21/0x40 [xfs] > [ 172.233435] __xfs_efi_release+0x4e/0x60 [xfs] > [ 172.233449] xfs_efi_release+0x50/0x70 [xfs] > [ 172.233463] xfs_efd_item_committed+0x22/0x40 [xfs] > [ 172.233479] xfs_trans_committed_bulk+0xcf/0x290 [xfs] > [ 172.233494] xlog_cil_committed+0x37/0x110 [xfs] > [ 172.233510] xlog_state_do_callback+0x1b8/0x3f0 [xfs] > [ 172.233525] xlog_state_done_syncing+0xf2/0x110 [xfs] > [ 172.233539] xlog_iodone+0x87/0x110 [xfs] > [ 172.233550] xfs_buf_iodone_work+0x5e/0xd0 [xfs] > [ 172.233554] process_one_work+0x211/0x700 > [ 172.233556] worker_thread+0x11d/0x3a0 > [ 172.233559] kthread+0xed/0x100 > [ 172.233562] ret_from_fork+0x7c/0xb0 > [ 172.233565] INFO: Slab 0xffffea0002aab100 objects=22 used=22 fp=0x (null) flags=0x20000000004080 > [ 172.233567] INFO: Object 0xffff8800aaac4e38 @offset=3640 fp=0xffff8800aaac7058 > > [ 172.233570] Bytes b4 ffff8800aaac4e28: 07 a2 fd ff 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ > [ 172.233573] Object ffff8800aaac4e38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233575] Object ffff8800aaac4e48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233577] Object ffff8800aaac4e58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233579] Object ffff8800aaac4e68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233581] Object ffff8800aaac4e78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233583] Object ffff8800aaac4e88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233586] Object ffff8800aaac4e98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233588] Object ffff8800aaac4ea8: 6a 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b jkkkkkkkkkkkkkkk > [ 172.233590] Object ffff8800aaac4eb8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233592] Object ffff8800aaac4ec8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233594] Object ffff8800aaac4ed8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233597] Object ffff8800aaac4ee8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233599] Object ffff8800aaac4ef8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233601] Object ffff8800aaac4f08: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233603] Object ffff8800aaac4f18: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233605] Object ffff8800aaac4f28: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233608] Object ffff8800aaac4f38: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233610] Object ffff8800aaac4f48: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233612] Object ffff8800aaac4f58: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233614] Object ffff8800aaac4f68: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233616] Object ffff8800aaac4f78: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233618] Object ffff8800aaac4f88: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233620] Object ffff8800aaac4f98: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233622] Object ffff8800aaac4fa8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk > [ 172.233625] Object ffff8800aaac4fb8: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkkkkkkkkkkkkk. > [ 172.233627] Redzone ffff8800aaac4fc8: bb bb bb bb bb bb bb bb ........ > [ 172.233629] Padding ffff8800aaac5108: 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ > [ 172.233632] CPU: 1 PID: 1658 Comm: gcc Tainted: G B 3.9.0+ #1 [loadavg: 0.68 0.43 0.17 4/333 1660] > [ 172.233636] Hardware name: LENOVO 2356JK8/2356JK8, BIOS G7ET92WW (2.52 ) 02/18/2013 > [ 172.233638] ffffea0002aab100 ffff8800a4b03918 ffffffff815f5588 ffff8800a4b03968 > [ 172.233644] ffffffff81185944 0000000000000008 ffff880000000001 ffffffff81078016 > [ 172.233648] ffff8800aaac4ea8 ffff8800aaac4ea9 ffff880115937cc0 000000000000006b > [ 172.233653] Call Trace: > [ 172.233658] [] dump_stack+0x19/0x1b > [ 172.233662] [] print_trailer+0x154/0x210 > [ 172.233666] [] ? perf_trace_sched_process_template+0xe6/0x100 > [ 172.233669] [] check_bytes_and_report+0xcf/0x110 > [ 172.233673] [] check_object+0x1e7/0x260 > [ 172.233676] [] ? check_slab+0x87/0x130 > [ 172.233691] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] > [ 172.233694] [] alloc_debug_processing+0x76/0x118 > [ 172.233697] [] __slab_alloc+0x468/0x52c > [ 172.233716] [] ? xfs_iext_bno_to_ext+0x97/0x180 [xfs] > [ 172.233731] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] > [ 172.233735] [] kmem_cache_alloc+0x2b4/0x320 > [ 172.233748] [] ? kmem_zone_alloc+0x67/0xf0 [xfs] > [ 172.233762] [] kmem_zone_alloc+0x67/0xf0 [xfs] > [ 172.233776] [] kmem_zone_zalloc+0x14/0x40 [xfs] > [ 172.233792] [] xfs_efi_init+0x41/0xa0 [xfs] > [ 172.233809] [] xfs_trans_get_efi+0x58/0x90 [xfs] > [ 172.233825] [] xfs_bmap_finish+0x76/0x1b0 [xfs] > [ 172.233844] [] xfs_itruncate_extents+0x2cd/0x610 [xfs] > [ 172.233859] [] xfs_inactive+0x401/0x530 [xfs] > [ 172.233874] [] xfs_fs_evict_inode+0x8c/0x1b0 [xfs] > [ 172.233877] [] evict+0xa3/0x1a0 > [ 172.233880] [] iput+0xf5/0x180 > [ 172.233883] [] dput+0x208/0x2f0 > [ 172.233887] [] SYSC_renameat+0x3be/0x430 > [ 172.233892] [] ? lock_release_holdtime.part.30+0xee/0x170 > [ 172.233895] [] ? get_parent_ip+0xd/0x50 > [ 172.233899] [] ? trace_hardirqs_on+0xd/0x10 > [ 172.233904] [] ? syscall_trace_enter+0x18/0x230 > [ 172.233907] [] SyS_renameat+0xe/0x10 > [ 172.233911] [] SyS_rename+0x1b/0x20 > [ 172.233914] [] tracesys+0xdd/0xe2 > [ 172.233917] FIX xfs_efi_item: Restoring 0xffff8800aaac4ea8-0xffff8800aaac4ea8=0x6b > [ 172.233919] FIX xfs_efi_item: Marking all objects used > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ From sukaluka66@gmail.com Sat May 11 16:30:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.1 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,FREEMAIL_REPLY,HTML_MESSAGE,LOTS_OF_MONEY,SORTED_RECIPS, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1B4357F37 for ; Sat, 11 May 2013 16:30:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D372F304051 for ; Sat, 11 May 2013 14:30:13 -0700 (PDT) X-ASG-Debug-ID: 1368307805-04bdf042251e51b0001-NocioJ Received: from mail-ia0-f193.google.com (mail-ia0-f193.google.com [209.85.210.193]) by cuda.sgi.com with ESMTP id ixP9ZcMP2xwZoHlZ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 11 May 2013 14:30:05 -0700 (PDT) X-Barracuda-Envelope-From: sukaluka66@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.193 X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.193] Received: by mail-ia0-f193.google.com with SMTP id k38so736522iah.8 for ; Sat, 11 May 2013 14:30:05 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.193] X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.193] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=jaIZoOR+DA4CgCZhJ/j9m1yxyUASd2zpDWck2iMGk5U=; b=YY8ForPkiyuzzY3C/pCRfVkKLS2Np8XUx86Sd0sdaqVKF/nYAGIsYkx4zJHLza7nHp 0ABWnAnT9aPedSo8JK6StCxUoATcoV7EfyTWL1I5sw/O831+z4qp2ynI3WCGehCKLId7 CYzBZp0IBcab4N9f0PodUkvD/MPSeYr0kb739yZw6QIshGmW5XPFOGLX5awwJcfSMqhw giRA0yGSFokCwYX+ayiLt7FQ2RIgeAhfnD/Dd29syMQB0XTRHop9dDvrDJnqhUQY/4Az DjJDVtCYVsHlCjFADoNvzeBlWfqiHcEb4yJTZ6BYUqQptsPoSFwyK6saXv87+Q/u8UXw +HYQ== MIME-Version: 1.0 X-Received: by 10.50.93.72 with SMTP id cs8mr5797910igb.18.1368306441675; Sat, 11 May 2013 14:07:21 -0700 (PDT) Received: by 10.64.65.164 with HTTP; Sat, 11 May 2013 14:07:21 -0700 (PDT) Date: Sat, 11 May 2013 23:07:21 +0200 Message-ID: Subject: can we From: Destiny Child X-ASG-Orig-Subj: can we To: xcb@lists.freedesktop.org, xeno@thehappy.de, xerakko@debian.org, xerxes@zafena.se, xfs@oss.sgi.com, xiangfu@openmobilefree.net, xiangfu@sharism.cc, xluthi@debian.org, xnox@debian.org, xoswald@debian.org, xtifr@debian.org, xtophe@videolan.org, xxtjaxx@gmail.com, y.kaliuta@gmail.com, yaegashi@debian.org, yama1066@gmail.com, yannick.heinrich@gmail.com, yannick.schwartz@cea.fr, yask.gupta87@gmail.com, yasu@debian.or.jp, yavor@gnu.org, ygh@debian.org, yofel@kubuntu.org, yoh@debian.org, yomguy@altern.org, yoush@debian.org, yury@shurup.com, yves-alexis.perez@ssi.gouv.fr, yves.guimard@gmail.com, yves@ycombe.net, yyabuki@debian.org, zack@debian.org, zackw@panix.com, zakame@spunge.org, zakame@zakame.net, zbyszek@in.waw.pl, zed@debian.org, zekr.debian@gmail.com Content-Type: multipart/alternative; boundary=047d7b3a847266747104dc77abac X-Barracuda-Connect: mail-ia0-f193.google.com[209.85.210.193] X-Barracuda-Start-Time: 1368307805 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.20 X-Barracuda-Spam-Status: No, SCORE=1.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR, SORTED_RECIPS X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130681 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 1.20 SORTED_RECIPS Recipient list is sorted by address 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b3a847266747104dc77abac Content-Type: text/plain; charset=ISO-8859-1 Hello, I am pleased to inform you that YOUR KINDLY ASSISTANCE will be highly appreciated in conjunction TO invest & establish with my Inheritance Fund of $2.5 M(Two Million Five Hundred Thousand American Dollars)be sure to go to Spain to meet with Finance people for the claim.due respond back to me ASP for further details,Thank you for now. E-mail: cynthiaayala2003@gmail.com Cordially, Miss CYNTHIA --047d7b3a847266747104dc77abac Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hello,
I am pleased to inform you that YOUR KINDLY ASSISTANCE will be = highly appreciated in conjunction TO invest & establish with my Inherit= ance Fund =A0of =A0$2.5 M(Two =A0Million Five Hundred Thousand American Dol= lars)be sure to go to Spain to meet with Finance people for the claim.due r= espond back to me ASP for further details,Thank you for now.


Cordially,
Miss CYNTHIA
--047d7b3a847266747104dc77abac-- From david@fromorbit.com Sat May 11 19:40:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C8EEC7F37 for ; Sat, 11 May 2013 19:40:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8937D8F8037 for ; Sat, 11 May 2013 17:40:34 -0700 (PDT) X-ASG-Debug-ID: 1368319232-04bdf042241e9420001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id SM9WhSj5idyMYGys for ; Sat, 11 May 2013 17:40:32 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Al8RALPjjlF5LMBd/2dsb2JhbABagweDCrgmhSQEAX8XdIIfAQEFOhwjEAgDDgYECSUPBSUDIROIC7taFo11gR0HgnRhA5crihKHJIMhKg Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail07.adl2.internode.on.net with ESMTP; 12 May 2013 10:10:31 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UbKL1-0002Tx-37; Sun, 12 May 2013 10:40:31 +1000 Date: Sun, 12 May 2013 10:40:31 +1000 From: Dave Chinner To: Dmitry Monakhov Cc: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) Message-ID: <20130512004031.GE32675@dastard> X-ASG-Orig-Subj: Re: xfs_efi_item slab corruption. (v3.9-10936-g51a26ae) References: <20130507133707.GA18301@redhat.com> <87k3n5en0b.fsf@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87k3n5en0b.fsf@openvz.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1368319232 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130693 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 11, 2013 at 04:09:40PM +0400, Dmitry Monakhov wrote: > On Tue, 7 May 2013 09:37:07 -0400, Dave Jones wrote: > > started compiling a kernel, and then... > > > I've bisected this one. > commit 666d644cd72a9ec58b353209ff191d7430f3b357 > Author: Dave Chinner > Date: Wed Apr 3 14:09:21 2013 +1100 > > xfs: don't free EFIs before the EFDs are committed > > #xfstests ./check generic/007 generic/007 generic/007 Yuo, we already have a candidate fix for it. Thanks for another independent confirmation of the cause, though. Cheers, Dave. -- Dave Chinner david@fromorbit.com From gnehzuil.liu@gmail.com Sun May 12 03:03:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F32757F37 for ; Sun, 12 May 2013 03:03:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B78518F8037 for ; Sun, 12 May 2013 01:03:53 -0700 (PDT) X-ASG-Debug-ID: 1368345828-04bdf042231f63b0001-NocioJ Received: from mail-pa0-f46.google.com (mail-pa0-f46.google.com [209.85.220.46]) by cuda.sgi.com with ESMTP id 685X2vO8376dhvyC (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 12 May 2013 01:03:49 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.46 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.46] Received: by mail-pa0-f46.google.com with SMTP id fa10so3894541pad.19 for ; Sun, 12 May 2013 01:03:48 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.46] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.46] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=mlWXm3YmK5srSlmh18mnb/JGJQFL8Dl5PiYo8vfFJF8=; b=hS8WAHlpAk+BzOvM3lNzAFVNb2dujuV4L1fzDkRqBHhBtyo+K+DMZXmCv84Iao4f2S Gu4f2Ff813KOktZqvVsxRFb7izn2J1vdu7IVTD3uUDAiEmMVUL9QrFx/z1EjA+YiF9fS MXyd89/H9BeV81pbQht8PB6vjFAzJoAOe6ZEtzOKmKTkBHmoAJnKCbNOwWRS/vhXQqXG Ltcicnx4MfC5BujgAqiRtjq3bifajf6mpdwRDHYHTGq392HrsJg9fDT//qL7T/9bEe3o Mdo8zF6TLCQwEH/cL9OoW64pCzKdJy1b0HHlqwZS9peb9+QDIZDw06wvi56/CtUmzMXX bCnA== X-Received: by 10.68.163.165 with SMTP id yj5mr24058658pbb.207.1368345828796; Sun, 12 May 2013 01:03:48 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id q18sm2351703pao.4.2013.05.12.01.03.45 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 12 May 2013 01:03:47 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Eric Sandeen , Dave Chinner Subject: [PATCH v3] xfstests: remove fio config files after finished test Date: Sun, 12 May 2013 16:21:24 +0800 X-ASG-Orig-Subj: [PATCH v3] xfstests: remove fio config files after finished test Message-Id: <1368346884-31264-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-pa0-f46.google.com[209.85.220.46] X-Barracuda-Start-Time: 1368345829 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130722 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Zheng Liu After finished test, temporarily fio config file should be removed. This commit tries to fix this problem in the following test cases: - generic/299-300 - ext4/301-304 - shared/305 Signed-off-by: Zheng Liu Cc: Eric Sandeen Cc: Dave Chinner --- changelog: * rebase against the latest master branch of xfstests tree. tests/ext4/301 | 9 +++++---- tests/ext4/302 | 9 +++++---- tests/ext4/303 | 9 +++++---- tests/ext4/304 | 9 +++++---- tests/generic/299 | 9 +++++---- tests/generic/300 | 9 +++++---- tests/shared/305 | 10 ++++++---- 7 files changed, 36 insertions(+), 28 deletions(-) diff --git a/tests/ext4/301 b/tests/ext4/301 index e1583d4..0ca3622 100755 --- a/tests/ext4/301 +++ b/tests/ext4/301 @@ -28,6 +28,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 @@ -49,7 +50,7 @@ BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` # reserve 30% in order to avoid ENOSPC FILE_SIZE=$((BLK_DEV_SIZE * (512 / (2 + 1)))) -cat >$tmp-$seq.fio <$fio_config <> $seqres.full - run_check $FIO_PROG $tmp-$seq.fio + cat $fio_config >> $seqres.full + run_check $FIO_PROG $fio_config } -_require_fio $tmp-$seq.fio +_require_fio $fio_config _scratch_mkfs >> $seqres.full 2>&1 _scratch_mount diff --git a/tests/ext4/302 b/tests/ext4/302 index abca805..497f4c6 100755 --- a/tests/ext4/302 +++ b/tests/ext4/302 @@ -29,6 +29,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 @@ -49,7 +50,7 @@ BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` # reserve 30% in order to avoid ENOSPC FILE_SIZE=$((BLK_DEV_SIZE * (512 / (2 + 1)))) -cat >$tmp-$seq.fio <$fio_config <> $seqres.full - run_check $FIO_PROG $tmp-$seq.fio + cat $fio_config >> $seqres.full + run_check $FIO_PROG $fio_config } -_require_fio $tmp-$seq.fio +_require_fio $fio_config _scratch_mkfs >> $seqres.full 2>&1 _scratch_mount diff --git a/tests/ext4/303 b/tests/ext4/303 index 7051576..93354e5 100755 --- a/tests/ext4/303 +++ b/tests/ext4/303 @@ -29,6 +29,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 @@ -49,7 +50,7 @@ BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` # Reserve space for 4 files in order to avoid ENOSPC FILE_SIZE=$((BLK_DEV_SIZE * (512 / (3+1)))) -cat >$tmp-$seq.fio <$fio_config <> $seqres.full - run_check $FIO_PROG $tmp-$seq.fio + cat $fio_config >> $seqres.full + run_check $FIO_PROG $fio_config } -_require_fio $tmp-$seq.fio +_require_fio $fio_config _scratch_mkfs >> $seqres.full 2>&1 _scratch_mount diff --git a/tests/ext4/304 b/tests/ext4/304 index 5d15ecb..74e601a 100755 --- a/tests/ext4/304 +++ b/tests/ext4/304 @@ -30,6 +30,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 @@ -50,7 +51,7 @@ BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` # reserve 30% in order to avoid ENOSPC FILE_SIZE=$((BLK_DEV_SIZE * (512 / (2 + 1)))) -cat >$tmp-$seq.fio <$fio_config <> $seqres.full - run_check $FIO_PROG $tmp-$seq.fio + cat $fio_config >> $seqres.full + run_check $FIO_PROG $fio_config } -_require_fio $tmp-$seq.fio +_require_fio $fio_config _scratch_mkfs >> $seqres.full 2>&1 _scratch_mount diff --git a/tests/generic/299 b/tests/generic/299 index 5f3edc4..14cce96 100644 --- a/tests/generic/299 +++ b/tests/generic/299 @@ -30,6 +30,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 @@ -47,7 +48,7 @@ NUM_JOBS=$((4*LOAD_FACTOR)) BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` FILE_SIZE=$((BLK_DEV_SIZE * 512)) -cat >$tmp-$seq.fio <$fio_config <> $seqres.full - run_check $FIO_PROG $tmp-$seq.fio & + cat $fio_config >> $seqres.full + run_check $FIO_PROG $fio_config & pid=$! echo "Start fallocate/truncate loop" diff --git a/tests/generic/300 b/tests/generic/300 index 687e62d..7c60728 100644 --- a/tests/generic/300 +++ b/tests/generic/300 @@ -30,6 +30,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 @@ -51,7 +52,7 @@ then fi FS_SIZE=$((BLK_DEV_SIZE * 512)) -cat >$tmp-$seq.fio <$fio_config <> $seqres.full - run_check $FIO_PROG $tmp-$seq.fio + cat $fio_config >> $seqres.full + run_check $FIO_PROG $fio_config } -_require_fio $tmp-$seq.fio +_require_fio $fio_config _scratch_mkfs_sized $FS_SIZE >> $seqres.full 2>&1 _scratch_mount diff --git a/tests/shared/305 b/tests/shared/305 index 91cbf03..8e8b0cb 100644 --- a/tests/shared/305 +++ b/tests/shared/305 @@ -29,6 +29,7 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ +fio_config=$tmp.fio status=1 # failure is the default! # get standard environment, filters and checks @@ -79,6 +80,7 @@ _cleanup() { poweron_scratch_dev disallow_fail_make_request + rm -f $tmp.* } trap "_cleanup; exit \$status" 1 2 3 15 @@ -87,7 +89,7 @@ NUM_JOBS=$((4*LOAD_FACTOR)) BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` FILE_SIZE=$((BLK_DEV_SIZE * 512)) -cat >$tmp-$seq.fio <$fio_config < /dev/null 2>&1 & fs_pid=$! echo "Start fio.." - cat $tmp-$seq.fio >> $seqres.full - $FIO_PROG $tmp-$seq.fio >> $seqres.full 2>&1 & + cat $fio_config >> $seqres.full + $FIO_PROG $fio_config >> $seqres.full 2>&1 & fio_pid=$! # Let's it work for awhile, and force device failure -- 1.7.12.rc2.18.g61b472e From gnehzuil.liu@gmail.com Sun May 12 03:19:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 543D17F37 for ; Sun, 12 May 2013 03:19:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 43B66304051 for ; Sun, 12 May 2013 01:19:33 -0700 (PDT) X-ASG-Debug-ID: 1368346771-04cb6c53a41f2990001-NocioJ Received: from mail-pb0-f52.google.com (mail-pb0-f52.google.com [209.85.160.52]) by cuda.sgi.com with ESMTP id a8BAkZWC2ykAt7XX (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 12 May 2013 01:19:32 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.52 X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.52] Received: by mail-pb0-f52.google.com with SMTP id xa7so3720588pbc.11 for ; Sun, 12 May 2013 01:19:31 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.52] X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.52] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=XH2jy9NKgfyw7NdPHu0mx7oLSThoIhXTd3xAJ1kJRos=; b=lBDiQEGAzdhRtk5luYvRwgJPxRjHaYPFhA6xB+xzR59eaNJVuN2Z2ZbF3JLF5mIGqH PGbPwULk586yFXWwgs2ZIkfg+zNPGzh1Q7Ph7okGX5NtGp/BPAJwpDZaadDVs/PYJ4UO tzP5x2yYQusekP30r1y4luqCJUPKSng7V1BR1JiLl/1hR/Zf0DyL/h6R1y0HujJw/A1m n6scSDJV8DDKWUZRcwYStCmmoG8ZBUVl14XJ7CjmG3+4nUGLOmndUyoDNVW5o9LprGOo veIQY+onfmkM9wESB1LJkQC6SrBNpeGnz49alwlSalCGVMvB1LbMwoGF8byjoVCrniQH OhvA== X-Received: by 10.66.154.167 with SMTP id vp7mr24857026pab.7.1368346771402; Sun, 12 May 2013 01:19:31 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id ra4sm1760199pab.9.2013.05.12.01.19.28 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 12 May 2013 01:19:30 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Dave Chinner Subject: [PATCH] xfstests: change file mode Date: Sun, 12 May 2013 16:37:06 +0800 X-ASG-Orig-Subj: [PATCH] xfstests: change file mode Message-Id: <1368347826-32152-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-pb0-f52.google.com[209.85.160.52] X-Barracuda-Start-Time: 1368346771 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Now in tests/ there are some test cases whose mode is 0644. But they should be 0755. So fix it. Signed-off-by: Zheng Liu Cc: Dave Chinner --- 0 files changed mode change 100644 => 100755 tests/btrfs/284 mode change 100644 => 100755 tests/btrfs/307 mode change 100644 => 100755 tests/generic/285 mode change 100644 => 100755 tests/generic/286 mode change 100644 => 100755 tests/generic/288 mode change 100644 => 100755 tests/generic/294 mode change 100644 => 100755 tests/generic/299 mode change 100644 => 100755 tests/generic/300 mode change 100644 => 100755 tests/generic/306 mode change 100644 => 100755 tests/generic/307 mode change 100644 => 100755 tests/generic/308 mode change 100644 => 100755 tests/generic/309 mode change 100644 => 100755 tests/generic/311 mode change 100644 => 100755 tests/shared/298 mode change 100644 => 100755 tests/shared/305 mode change 100644 => 100755 tests/xfs/287 mode change 100644 => 100755 tests/xfs/290 mode change 100644 => 100755 tests/xfs/292 mode change 100644 => 100755 tests/xfs/293 mode change 100644 => 100755 tests/xfs/295 mode change 100644 => 100755 tests/xfs/296 mode change 100644 => 100755 tests/xfs/297 diff --git a/tests/btrfs/284 b/tests/btrfs/284 old mode 100644 new mode 100755 diff --git a/tests/btrfs/307 b/tests/btrfs/307 old mode 100644 new mode 100755 diff --git a/tests/generic/285 b/tests/generic/285 old mode 100644 new mode 100755 diff --git a/tests/generic/286 b/tests/generic/286 old mode 100644 new mode 100755 diff --git a/tests/generic/288 b/tests/generic/288 old mode 100644 new mode 100755 diff --git a/tests/generic/294 b/tests/generic/294 old mode 100644 new mode 100755 diff --git a/tests/generic/299 b/tests/generic/299 old mode 100644 new mode 100755 diff --git a/tests/generic/300 b/tests/generic/300 old mode 100644 new mode 100755 diff --git a/tests/generic/306 b/tests/generic/306 old mode 100644 new mode 100755 diff --git a/tests/generic/307 b/tests/generic/307 old mode 100644 new mode 100755 diff --git a/tests/generic/308 b/tests/generic/308 old mode 100644 new mode 100755 diff --git a/tests/generic/309 b/tests/generic/309 old mode 100644 new mode 100755 diff --git a/tests/generic/311 b/tests/generic/311 old mode 100644 new mode 100755 diff --git a/tests/shared/298 b/tests/shared/298 old mode 100644 new mode 100755 diff --git a/tests/shared/305 b/tests/shared/305 old mode 100644 new mode 100755 diff --git a/tests/xfs/287 b/tests/xfs/287 old mode 100644 new mode 100755 diff --git a/tests/xfs/290 b/tests/xfs/290 old mode 100644 new mode 100755 diff --git a/tests/xfs/292 b/tests/xfs/292 old mode 100644 new mode 100755 diff --git a/tests/xfs/293 b/tests/xfs/293 old mode 100644 new mode 100755 diff --git a/tests/xfs/295 b/tests/xfs/295 old mode 100644 new mode 100755 diff --git a/tests/xfs/296 b/tests/xfs/296 old mode 100644 new mode 100755 diff --git a/tests/xfs/297 b/tests/xfs/297 old mode 100644 new mode 100755 -- 1.7.12.rc2.18.g61b472e From tracek@redhat.com Sun May 12 04:01:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AA3A77F37 for ; Sun, 12 May 2013 04:01:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 56CB9AC001 for ; Sun, 12 May 2013 02:01:45 -0700 (PDT) X-ASG-Debug-ID: 1368349304-04bdf042241f7f40001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CqgAzotL9JMlHzzF for ; Sun, 12 May 2013 02:01:44 -0700 (PDT) X-Barracuda-Envelope-From: tracek@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4C91iiU013788 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 12 May 2013 05:01:44 -0400 Received: from luke.redhat.com (vpn1-6-91.ams2.redhat.com [10.36.6.91]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4C91gF7027168; Sun, 12 May 2013 05:01:43 -0400 From: Tomas Racek To: xfs@oss.sgi.com Cc: lczerner@redhat.com, Tomas Racek Subject: [PATCH 1/2] xfstests 200: remove words from output Date: Sun, 12 May 2013 11:01:12 +0200 X-ASG-Orig-Subj: [PATCH 1/2] xfstests 200: remove words from output Message-Id: <1368349273-23968-1-git-send-email-tracek@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368349304 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Remove phrase "block device" from 200.out since mount warning message does not use it. Signed-off-by: Tomas Racek --- tests/xfs/200.out | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/xfs/200.out b/tests/xfs/200.out index 2629541..27a76c0 100644 --- a/tests/xfs/200.out +++ b/tests/xfs/200.out @@ -1,7 +1,7 @@ QA output created by 200 setting device read-only mounting read-only block device: -mount: block device SCRATCH_DEV is write-protected, mounting read-only +mount: SCRATCH_DEV is write-protected, mounting read-only touching file on read-only filesystem (should fail) touch: cannot touch `SCRATCH_MNT/foo': Read-only file system unmounting read-only filesystem @@ -12,12 +12,12 @@ going down: unmounting shutdown filesystem: setting device read-only mounting filesystem that needs recovery on a read-only device: -mount: block device SCRATCH_DEV is write-protected, mounting read-only -mount: cannot mount block device SCRATCH_DEV read-only +mount: SCRATCH_DEV is write-protected, mounting read-only +mount: cannot mount SCRATCH_DEV read-only unmounting read-only filesystem umount: SCRATCH_MNT: not mounted mounting filesystem with -o norecovery on a read-only device: -mount: block device SCRATCH_DEV is write-protected, mounting read-only +mount: SCRATCH_DEV is write-protected, mounting read-only unmounting read-only filesystem setting device read-write mounting filesystem that needs recovery with -o ro: -- 1.7.11.7 From tracek@redhat.com Sun May 12 04:01:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E747229E03 for ; Sun, 12 May 2013 04:01:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 65ACBAC007 for ; Sun, 12 May 2013 02:01:52 -0700 (PDT) X-ASG-Debug-ID: 1368349310-04cbb05fe21fb190001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gerS7ISE8PPOmjzK for ; Sun, 12 May 2013 02:01:50 -0700 (PDT) X-Barracuda-Envelope-From: tracek@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4C91oiM008296 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 12 May 2013 05:01:50 -0400 Received: from luke.redhat.com (vpn1-6-91.ams2.redhat.com [10.36.6.91]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4C91gF8027168; Sun, 12 May 2013 05:01:48 -0400 From: Tomas Racek To: xfs@oss.sgi.com Cc: lczerner@redhat.com, Tomas Racek Subject: [PATCH 2/2] xfstests: unify apostrophes in output files Date: Sun, 12 May 2013 11:01:13 +0200 X-ASG-Orig-Subj: [PATCH 2/2] xfstests: unify apostrophes in output files Message-Id: <1368349273-23968-2-git-send-email-tracek@redhat.com> In-Reply-To: <1368349273-23968-1-git-send-email-tracek@redhat.com> References: <1368349273-23968-1-git-send-email-tracek@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368349310 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 With coreutils v8.16 the style of apostrophes changed from `word' to 'word'. This is breaking some tests which use the older form. This commit introduces function _filter_apostrophes and changes the affected tests. Signed-off-by: Tomas Racek --- common/filter | 5 +++++ tests/generic/193 | 16 ++++++++-------- tests/generic/193.out | 16 ++++++++-------- tests/generic/230 | 4 ++-- tests/generic/230.out | 8 ++++---- tests/generic/235 | 2 +- tests/generic/235.out | 2 +- tests/generic/245 | 2 +- tests/generic/245.out | 2 +- tests/generic/294 | 8 ++++---- tests/generic/294.out | 8 ++++---- tests/generic/306 | 2 +- tests/generic/306.out | 2 +- tests/xfs/103 | 2 +- tests/xfs/103.out | 2 +- tests/xfs/200 | 2 +- tests/xfs/200.out | 2 +- 17 files changed, 45 insertions(+), 40 deletions(-) diff --git a/common/filter b/common/filter index bdd6427..4340dbe 100644 --- a/common/filter +++ b/common/filter @@ -280,5 +280,10 @@ _filter_size_to_bytes() echo $((${size:0:${#size}-1}*$mul)) } +_filter_apostrophes() +{ + sed 's/`/'\''/g' +} + # make sure this script returns success /bin/true diff --git a/tests/generic/193 b/tests/generic/193 index cdf04c2..d5d74c7 100755 --- a/tests/generic/193 +++ b/tests/generic/193 @@ -83,17 +83,17 @@ echo _create_files echo "user: chown root owned file to qa_user (should fail)" -su ${qa_user} -c "chown ${qa_user} test.root" +su ${qa_user} -c "chown ${qa_user} test.root" 2>&1 | _filter_apostrophes echo "user: chown root owned file to root (should fail)" -su ${qa_user} -c "chown root test.root" +su ${qa_user} -c "chown root test.root" 2>&1 | _filter_apostrophes echo "user: chown qa_user owned file to qa_user (should succeed)" su ${qa_user} -c "chown ${qa_user} test.${qa_user}" # this would work without _POSIX_CHOWN_RESTRICTED echo "user: chown qa_user owned file to root (should fail)" -su ${qa_user} -c "chown root test.${qa_user}" +su ${qa_user} -c "chown root test.${qa_user}" 2>&1 | _filter_apostrophes _cleanup_files @@ -107,13 +107,13 @@ echo _create_files echo "user: chgrp root owned file to root (should fail)" -su ${qa_user} -c "chgrp root test.root" +su ${qa_user} -c "chgrp root test.root" 2>&1 | _filter_apostrophes echo "user: chgrp qa_user owned file to root (should fail)" -su ${qa_user} -c "chgrp root test.${qa_user}" +su ${qa_user} -c "chgrp root test.${qa_user}" 2>&1 | _filter_apostrophes echo "user: chgrp root owned file to qa_user (should fail)" -su ${qa_user} -c "chgrp ${qa_user} test.root" +su ${qa_user} -c "chgrp ${qa_user} test.root" 2>&1 | _filter_apostrophes echo "user: chgrp qa_user owned file to qa_user (should succeed)" su ${qa_user} -c "chgrp ${qa_user} test.${qa_user}" @@ -136,7 +136,7 @@ echo "user: chmod a+r on qa_user owned file (should succeed)" su ${qa_user} -c "chmod a+r test.${qa_user}" echo "user: chmod a+r on root owned file (should fail)" -su ${qa_user} -c "chmod a+r test.root" +su ${qa_user} -c "chmod a+r test.root" 2>&1 | _filter_apostrophes # # Setup a file owned by the qa_user, but with a group ID that @@ -238,7 +238,7 @@ echo "user: touch qa_user file (should succeed)" su ${qa_user} -c "touch test.${qa_user}" echo "user: touch root file (should fail)" -su ${qa_user} -c "touch test.root" +su ${qa_user} -c "touch test.root" 2>&1 | _filter_apostrophes _cleanup_files diff --git a/tests/generic/193.out b/tests/generic/193.out index b89add3..e410948 100644 --- a/tests/generic/193.out +++ b/tests/generic/193.out @@ -3,28 +3,28 @@ QA output created by 193 testing ATTR_UID user: chown root owned file to qa_user (should fail) -chown: changing ownership of `test.root': Operation not permitted +chown: changing ownership of 'test.root': Operation not permitted user: chown root owned file to root (should fail) -chown: changing ownership of `test.root': Operation not permitted +chown: changing ownership of 'test.root': Operation not permitted user: chown qa_user owned file to qa_user (should succeed) user: chown qa_user owned file to root (should fail) -chown: changing ownership of `test.fsgqa': Operation not permitted +chown: changing ownership of 'test.fsgqa': Operation not permitted testing ATTR_GID user: chgrp root owned file to root (should fail) -chgrp: changing group of `test.root': Operation not permitted +chgrp: changing group of 'test.root': Operation not permitted user: chgrp qa_user owned file to root (should fail) -chgrp: changing group of `test.fsgqa': Operation not permitted +chgrp: changing group of 'test.fsgqa': Operation not permitted user: chgrp root owned file to qa_user (should fail) -chgrp: changing group of `test.root': Operation not permitted +chgrp: changing group of 'test.root': Operation not permitted user: chgrp qa_user owned file to qa_user (should succeed) testing ATTR_MODE user: chmod a+r on qa_user owned file (should succeed) user: chmod a+r on root owned file (should fail) -chmod: changing permissions of `test.root': Operation not permitted +chmod: changing permissions of 'test.root': Operation not permitted check that the sgid bit is cleared -rw-rw-rw- check that suid bit is not cleared @@ -47,5 +47,5 @@ testing ATTR_*TIMES_SET user: touch qa_user file (should succeed) user: touch root file (should fail) -touch: cannot touch `test.root': Permission denied +touch: cannot touch 'test.root': Permission denied *** done diff --git a/tests/generic/230 b/tests/generic/230 index 797755b..7b1ea74 100755 --- a/tests/generic/230 +++ b/tests/generic/230 @@ -92,14 +92,14 @@ test_enforcement() # Try to exceed inode hardlimit echo "Touch 5+6" su $qa_user -c "touch $SCRATCH_MNT/file5 $SCRATCH_MNT/file6" \ - 2>&1 >>$seqres.full | _filter_scratch | tee -a $seqres.full + 2>&1 >>$seqres.full | _filter_scratch | _filter_apostrophes | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Wait and check grace time enforcement rm -f $SCRATCH_MNT/file5 >>$seqres.full 2>&1 sleep $((grace+1)) echo "Touch 5" su $qa_user -c "touch $SCRATCH_MNT/file5" 2>&1 >>$seqres.full | - _filter_scratch | tee -a $seqres.full + _filter_scratch | _filter_apostrophes | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 echo "--- completed IO ($type)" >>$seqres.full } diff --git a/tests/generic/230.out b/tests/generic/230.out index d2d434c..c3dace9 100644 --- a/tests/generic/230.out +++ b/tests/generic/230.out @@ -12,9 +12,9 @@ Write 4096... pwrite64: Disk quota exceeded Touch 3+4 Touch 5+6 -touch: cannot touch `SCRATCH_MNT/file6': Disk quota exceeded +touch: cannot touch 'SCRATCH_MNT/file6': Disk quota exceeded Touch 5 -touch: cannot touch `SCRATCH_MNT/file5': Disk quota exceeded +touch: cannot touch 'SCRATCH_MNT/file5': Disk quota exceeded ### test group limit enforcement @@ -28,6 +28,6 @@ Write 4096... pwrite64: Disk quota exceeded Touch 3+4 Touch 5+6 -touch: cannot touch `SCRATCH_MNT/file6': Disk quota exceeded +touch: cannot touch 'SCRATCH_MNT/file6': Disk quota exceeded Touch 5 -touch: cannot touch `SCRATCH_MNT/file5': Disk quota exceeded +touch: cannot touch 'SCRATCH_MNT/file5': Disk quota exceeded diff --git a/tests/generic/235 b/tests/generic/235 index f430ba2..19ecbdf 100755 --- a/tests/generic/235 +++ b/tests/generic/235 @@ -66,7 +66,7 @@ repquota -u -g $SCRATCH_MNT | grep -v "^root" | _filter_scratch # We work around it by editing the context out of mtab. Sigh. sed -i "s#^$SCRATCH_DEV\(.*\),context=\"system_u:object_r:nfs_t:s0\"#$SCRATCH_DEV\1#" /etc/mtab mount -o remount,ro $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch -touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch +touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch | _filter_apostrophes mount -o remount,rw $SCRATCH_DEV 2>&1 | tee -a $seqres.full | _filter_scratch $XFS_IO_PROG -F -c 'pwrite 0 8k' -c 'fsync' \ diff --git a/tests/generic/235.out b/tests/generic/235.out index a095694..95c1005 100644 --- a/tests/generic/235.out +++ b/tests/generic/235.out @@ -15,7 +15,7 @@ Group used soft hard grace used soft hard grace fsgqa -- 0 0 0 1 0 0 -touch: cannot touch `SCRATCH_MNT/failed': Read-only file system +touch: cannot touch 'SCRATCH_MNT/failed': Read-only file system *** Report for user quotas on device SCRATCH_DEV Block grace time: 7days; Inode grace time: 7days Block limits File limits diff --git a/tests/generic/245 b/tests/generic/245 index 9b87fbb..93cf7d9 100755 --- a/tests/generic/245 +++ b/tests/generic/245 @@ -65,7 +65,7 @@ touch $dir/aa/1 mkdir $dir/ab/aa touch $dir/ab/aa/2 -mv $dir/ab/aa/ $dir 2>&1 | _filter_test_dir | _filter_directory_not_empty +mv $dir/ab/aa/ $dir 2>&1 | _filter_test_dir | _filter_directory_not_empty | _filter_apostrophes status=0 exit $status diff --git a/tests/generic/245.out b/tests/generic/245.out index 8322aac..f5b5f18 100644 --- a/tests/generic/245.out +++ b/tests/generic/245.out @@ -1,2 +1,2 @@ QA output created by 245 -mv: cannot move `TEST_DIR/test-mv/ab/aa/' to `TEST_DIR/test-mv/aa': File exists +mv: cannot move 'TEST_DIR/test-mv/ab/aa/' to 'TEST_DIR/test-mv/aa': File exists diff --git a/tests/generic/294 b/tests/generic/294 index fa7f339..e954be5 100644 --- a/tests/generic/294 +++ b/tests/generic/294 @@ -52,10 +52,10 @@ THIS_TEST_DIR=$SCRATCH_MNT/$seq.test _create_files() { - mknod $THIS_TEST_DIR/testnode c 1 3 - mkdir $THIS_TEST_DIR/testdir - touch $THIS_TEST_DIR/testtarget - ln -s $THIS_TEST_DIR/testtarget $THIS_TEST_DIR/testlink 2>&1 | _filter_ln + mknod $THIS_TEST_DIR/testnode c 1 3 2>&1 | _filter_apostrophes + mkdir $THIS_TEST_DIR/testdir 2>&1 | _filter_apostrophes + touch $THIS_TEST_DIR/testtarget 2>&1 | _filter_apostrophes + ln -s $THIS_TEST_DIR/testtarget $THIS_TEST_DIR/testlink 2>&1 | _filter_ln | _filter_apostrophes } _scratch_mount diff --git a/tests/generic/294.out b/tests/generic/294.out index 027d9fc..1ac1c67 100644 --- a/tests/generic/294.out +++ b/tests/generic/294.out @@ -1,5 +1,5 @@ QA output created by 294 -mknod: `SCRATCH_MNT/294.test/testnode': File exists -mkdir: cannot create directory `SCRATCH_MNT/294.test/testdir': File exists -touch: cannot touch `SCRATCH_MNT/294.test/testtarget': Read-only file system -ln: creating symbolic link `SCRATCH_MNT/294.test/testlink': File exists +mknod: 'SCRATCH_MNT/294.test/testnode': File exists +mkdir: cannot create directory 'SCRATCH_MNT/294.test/testdir': File exists +touch: cannot touch 'SCRATCH_MNT/294.test/testtarget': Read-only file system +ln: creating symbolic link 'SCRATCH_MNT/294.test/testlink': File exists diff --git a/tests/generic/306 b/tests/generic/306 index e8e0fc0..b44d580 100644 --- a/tests/generic/306 +++ b/tests/generic/306 @@ -71,7 +71,7 @@ _scratch_mount -o ro || _fail "Could not mount scratch readonly" # We should be able to read & write to/from these devices even on an RO fs echo "== try to create new file" -touch $SCRATCH_MNT/this_should_fail 2>&1 | _filter_scratch +touch $SCRATCH_MNT/this_should_fail 2>&1 | _filter_scratch | _filter_apostrophes echo "== pwrite to null device" $XFS_IO_PROG -F -c "pwrite 0 512" /dev/null | _filter_xfs_io echo "== pread from zero device" diff --git a/tests/generic/306.out b/tests/generic/306.out index 69bfb42..fb3748b 100644 --- a/tests/generic/306.out +++ b/tests/generic/306.out @@ -1,6 +1,6 @@ QA output created by 306 == try to create new file -touch: cannot touch `SCRATCH_MNT/this_should_fail': Read-only file system +touch: cannot touch 'SCRATCH_MNT/this_should_fail': Read-only file system == pwrite to null device wrote 512/512 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) diff --git a/tests/xfs/103 b/tests/xfs/103 index 113f643..8318c43 100755 --- a/tests/xfs/103 +++ b/tests/xfs/103 @@ -79,7 +79,7 @@ _filter_noymlinks_flag touch $SCRATCH_MNT/nosymlink/source ln -s $SCRATCH_MNT/nosymlink/source $SCRATCH_MNT/nosymlink/target 2>&1 \ - | _filter_scratch | _filter_ln + | _filter_scratch | _filter_ln | _filter_apostrophes ln $SCRATCH_MNT/nosymlink/source $SCRATCH_MNT/nosymlink/hardlinksareok echo "*** 1st listing..." diff --git a/tests/xfs/103.out b/tests/xfs/103.out index f939bcd..4ab3ad7 100644 --- a/tests/xfs/103.out +++ b/tests/xfs/103.out @@ -4,7 +4,7 @@ QA output created by 103 *** testing nosymlinks directories *** setting nosymlinks bit --n-- SCRATCH_MNT/nosymlink -ln: creating symbolic link `SCRATCH_MNT/nosymlink/target': Operation not permitted +ln: creating symbolic link 'SCRATCH_MNT/nosymlink/target': Operation not permitted *** 1st listing... SCRATCH_MNT SCRATCH_MNT/nosymlink diff --git a/tests/xfs/200 b/tests/xfs/200 index a3b7274..a34cf8e 100755 --- a/tests/xfs/200 +++ b/tests/xfs/200 @@ -61,7 +61,7 @@ echo "mounting read-only block device:" _scratch_mount 2>&1 | _filter_scratch echo "touching file on read-only filesystem (should fail)" -touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch +touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch | _filter_apostrophes # # Apparently this used to be broken at some point: diff --git a/tests/xfs/200.out b/tests/xfs/200.out index 27a76c0..40f9163 100644 --- a/tests/xfs/200.out +++ b/tests/xfs/200.out @@ -3,7 +3,7 @@ setting device read-only mounting read-only block device: mount: SCRATCH_DEV is write-protected, mounting read-only touching file on read-only filesystem (should fail) -touch: cannot touch `SCRATCH_MNT/foo': Read-only file system +touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system unmounting read-only filesystem setting device read-write mounting read-write block device: -- 1.7.11.7 From gnehzuil.liu@gmail.com Sun May 12 04:06:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=DECEASED_NO_ML,FREEMAIL_FROM, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8A41E7F37 for ; Sun, 12 May 2013 04:06:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 20716AC001 for ; Sun, 12 May 2013 02:06:49 -0700 (PDT) X-ASG-Debug-ID: 1368349607-04bdf042231f8180001-NocioJ Received: from mail-pd0-f177.google.com (mail-pd0-f177.google.com [209.85.192.177]) by cuda.sgi.com with ESMTP id EWgqTcyqGGlJFwdk (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 12 May 2013 02:06:48 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.177 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.177] Received: by mail-pd0-f177.google.com with SMTP id g10so3685910pdj.22 for ; Sun, 12 May 2013 02:06:47 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.177] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.177] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=qBxHTfoBIEExN/PwTjWj0I3cUbW1H6JS/qqWAnXTYqg=; b=C7yuTj1aIe+nv55q5ndI1zspfC+2lYGyIEGADb7HPoomahQ8hsZ9lTJDazHskjKAm5 bfqs9gju61/BBStZVf5HhQXy8NUincdKUt172IoXePFnAm2L7zCAPNjCP1upzuDL0GL2 ft+/u5iPTuxp2wU46PV/VozcJ9FDn8pTXnKd/lA59c7EVSF+uvu1cdP0N6o3KAykwo8w 630CgI48+q51kun334SmvyN2R/gFfhX4NjLL54IppqPVTRTAqoeYXdb+zyWSHnCkVFPE j1/PyaSLyrARj6C1peh9B1w3Z96NtIY7GnmjojOseyyCaxnaTc1DZ2Zrnw/Kfd6bidUq FiqA== X-Received: by 10.66.102.70 with SMTP id fm6mr24359983pab.164.1368349607860; Sun, 12 May 2013 02:06:47 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id ze11sm10110901pab.22.2013.05.12.02.06.45 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 12 May 2013 02:06:47 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Rich Johnston Subject: [PATCH v2] xfstests: add _require_seek_data_hole to check seek data/hole Date: Sun, 12 May 2013 17:24:30 +0800 X-ASG-Orig-Subj: [PATCH v2] xfstests: add _require_seek_data_hole to check seek data/hole Message-Id: <1368350670-9499-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-pd0-f177.google.com[209.85.192.177] X-Barracuda-Start-Time: 1368349608 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130726 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Zheng Liu In xfstest 285/286 we don't check whether the target file system supports seek data/hole operation or not. Here _require_seek_data_hole is defined to do this work. Signed-off-by: Zheng Liu Cc: Rich Johnston --- changelog: * rebase against the latest master branch of xfstests tree Hi Rich, Sorry for the late. Could you please look at this patch? Thanks, - Zheng common/rc | 12 ++++++++++++ src/seek_sanity_test.c | 18 ++++++++++++++++-- tests/generic/285 | 2 ++ tests/generic/286 | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/common/rc b/common/rc index f97924a..f24a6aa 100644 --- a/common/rc +++ b/common/rc @@ -1283,6 +1283,18 @@ _require_fail_make_request() not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled" } +# +# Check if the file system supports seek_data/hole +# +_require_seek_data_hole() +{ + testfile=$TEST_DIR/$$.seek + testseek=`$here/src/seek_sanity_test -t $testfile 2>&1` + rm -f $testfile &>/dev/null + echo $testseek | grep -q "Kernel does not support" && \ + _notrun "File system does not support llseek(2) SEEK_DATA/HOLE" +} + # check that a FS on a device is mounted # if so, return mount point # diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index 3897f02..4275a84 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -660,6 +660,8 @@ int main(int argc, char **argv) { int ret = -1; int i = 0; + int opt; + int check_support = 0; int numtests = sizeof(seek_tests) / sizeof(struct testrec); if (argc != 2) { @@ -667,10 +669,22 @@ int main(int argc, char **argv) return ret; } - base_file_path = (char *)strdup(argv[1]); + while ((opt = getopt(argc, argv, "t")) != -1) { + switch (opt) { + case 't': + check_support++; + break; + default: + fprintf(stderr, "Usage: %s [-t] base_file_path\n", + argv[0]); + return ret; + } + } + + base_file_path = (char *)strdup(argv[optind]); ret = test_basic_support(); - if (ret) + if (ret || check_support) goto out; for (i = 0; i < numtests; ++i) { diff --git a/tests/generic/285 b/tests/generic/285 index 22b4a08..b700a15 100644 --- a/tests/generic/285 +++ b/tests/generic/285 @@ -40,6 +40,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _supported_fs generic _supported_os Linux +_require_seek_data_hole + BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" diff --git a/tests/generic/286 b/tests/generic/286 index a0d4df9..5ab174f 100644 --- a/tests/generic/286 +++ b/tests/generic/286 @@ -38,6 +38,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _supported_fs generic _supported_os Linux +_require_seek_data_hole + src=$TEST_DIR/seek_copy_testfile dest=$TEST_DIR/seek_copy_testfile.dest -- 1.7.12.rc2.18.g61b472e From sinirlisayida@gmail.com Sun May 12 04:22:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY,SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9CDD37F37 for ; Sun, 12 May 2013 04:22:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8C0568F8035 for ; Sun, 12 May 2013 02:22:03 -0700 (PDT) X-ASG-Debug-ID: 1368350515-04cbb05fe41fbf00001-w1Z2WR Received: from server1.avantajkulubu.net (190nojx8l.ni.net.tr [159.253.37.190]) by cuda.sgi.com with ESMTP id eN7PMgOxIfmXCqGd (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 02:21:57 -0700 (PDT) X-Barracuda-Envelope-From: sinirlisayida@gmail.com X-Barracuda-Apparent-Source-IP: 159.253.37.190 X-No-Relay: not in my network Received: from asusBilgisayar (unknown [85.96.160.206]) by server1.avantajkulubu.net (Postfix) with ESMTPSA id 5B939608640 for ; Sun, 12 May 2013 12:18:04 +0300 (EEST) MIME-Version: 1.0 From: =?windows-1254?Q?s=FDn=FDrl=FDsay=FDda.com_?= Reply-To: sinirlisayida@gmail.com To: linux-xfs@oss.sgi.com Subject: =?windows-1254?Q?=DCCRETS=DDZ_=DDLAN_S=DDTELER=DDNE_PARA_=D6DEMEK?= =?windows-1254?Q?TEN_BIKMADINIZMI.?= Content-Type: text/html; charset="windows-1254" X-ASG-Orig-Subj: =?windows-1254?Q?=DCCRETS=DDZ_=DDLAN_S=DDTELER=DDNE_PARA_=D6DEMEK?= =?windows-1254?Q?TEN_BIKMADINIZMI.?= Content-Transfer-Encoding: quoted-printable X-Mailer: SmartSend.2.0.102 Date: Sun, 12 May 2013 12:21:55 +0300 Message-ID: <2280355342656151884324@asus-Bilgisayar> X-Barracuda-Connect: 190nojx8l.ni.net.tr[159.253.37.190] X-Barracuda-Start-Time: 1368350516 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.85 X-Barracuda-Spam-Status: No, SCORE=1.85 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA_HREF_WWW_MISMATCH, HTML_MESSAGE, HTML_MIME_NO_HTML_TAG, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.80 BSF_SC7_SA_HREF_WWW_MISMATCH BODY: Custom Phishing Mismatch 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 1.05 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag T=DCRK=DDYE'N=DDN EN YEN=DD = =DDLAN S=DDTES=DD...
&nbs= p;

SINIRSIZ =DDMKANLAR YARATMAK= =DD=C7=DDN...
 
s=FDn=FDrl=FDsay=FDda.com 
 
Neden www.s=FDn=FDrl=FDsay=FDda.com=  =3F 

* Hemen =FCye oldu=F0unu= z takdirde =FC=E7 y=FDl boyunca hi=E7bir =FCcret =F6demeden bizi denemeniz = i=E7in,

*=DDlan=FDn=FDz yay=FDna ba=FElad=FD=F0=FD anda binlerce ki=FEinin = =FCr=FCn=FCn=FCz=FC takip etmesini istedi=F0imiz i=E7in,

* =DDnternetin bu geni= =FE d=FCnyas=FDnda size formalitelerle ya da resmiyetle de=F0il, samimiyetl= e destek   olmay=FD  istedi=F0imiz i=E7in,

* G=FCveni ve anlay=FD= =FE=FD en =F6n planda tutmay=FD hedefledi=F0imiz i=E7in,

* Sadeli=F0i ve heyecan=FD, ay= r=FDnt=FDlara ve tekd=FCzeli=F0e tercih etti=F0imiz i=E7in,

* D=FCnyan=FDn her y= erinde alabilece=F0iniz kaliteli hizmeti bizden =E7ok daha ucuza alabilece= =F0inizi kan=FDtlamak i=E7in, &nbs= p;

*S= itemizde ma=F0azan=FDz=FD a=E7abilip, kendi markalar=FDn=FDzla al=FDc= =FDlara ula=FEabilmeniz i=E7in,

* S=FDn=FDrs=FDz ilanlar=FDn=FDz=FD girerek &= nbsp;sat=FD=FElar=FDn=FDzda ba=FEar=FDya giden yolun kap=FDs=FDn=FD aralaya= bilmeniz i=E7in,

s=FDn=FDrl=FDsay=FDda.com Ailesi olarak hizmetinizdeyiz...
 
w= ww.s=FDn=FDrl=FDsay=FDda.com
 
From gnehzuil.liu@gmail.com Sun May 12 04:24:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4303C7F37 for ; Sun, 12 May 2013 04:24:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 329F830404E for ; Sun, 12 May 2013 02:24:28 -0700 (PDT) X-ASG-Debug-ID: 1368350666-04cb6c53a21f4d00001-NocioJ Received: from mail-pa0-f43.google.com (mail-pa0-f43.google.com [209.85.220.43]) by cuda.sgi.com with ESMTP id 2FNixNLbiIHeNe2n (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 12 May 2013 02:24:27 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.43 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.43] Received: by mail-pa0-f43.google.com with SMTP id hz10so3948621pad.16 for ; Sun, 12 May 2013 02:24:26 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.43] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.43] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=T+d7h1lTx9s9leM3NjceVBEm/mc8f54HQ4JLiEcMkak=; b=RANEn23LCwtiVgUsT/m3GrWmp+MeMqx0VdoJ9DSEuRAYeSqV1a1ishQQSAKSYWeToG P3VxccmS4jtpk44SPlkpkhNilTNe0QsRntZ6KbDh7SYSK5QVf5yzFm7SK1ztI3X5LMVB Mje9HlVd4KB9Ai2f3zw+R66F1jMS18UW5XSQn6Bnq1cgs0ZZJTvOkdgLD/0z+6OKn40v MEvVjoglzHXKGXSRIyQy/eyRCAwkk2dbxMMrluqbyWK8HHqt8PeoX5hQiWYDgY+4DVJo uyvpKjqM7tz7kNBEsIaWUyiGK1jwtQUACy9fBJSjKP3YDTdwbn5F0TWlp70LcxFh8o4h QT0w== X-Received: by 10.68.209.232 with SMTP id mp8mr24288658pbc.44.1368350666531; Sun, 12 May 2013 02:24:26 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id ag4sm9538599pbc.20.2013.05.12.02.24.23 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 12 May 2013 02:24:25 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Rich Johnston Subject: [PATCH v2] xfstests: check falloc in 285 Date: Sun, 12 May 2013 17:42:09 +0800 X-ASG-Orig-Subj: [PATCH v2] xfstests: check falloc in 285 Message-Id: <1368351729-17778-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-pa0-f43.google.com[209.85.220.43] X-Barracuda-Start-Time: 1368350667 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Zheng Liu As linux 3.8, ext4 has supported the seek data/hole operation for extent-based file and indirect-based file. But for indirect-based file it can not support the fallocate(2). This causes test 285 to fail since it assumes that all file systems which supports seek data/hole also support fallocate. So here we need to check it. Signed-off-by: Zheng Liu Cc: Rich Johnston --- tests/generic/285 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/generic/285 b/tests/generic/285 index 22b4a08..d1a1baa 100644 --- a/tests/generic/285 +++ b/tests/generic/285 @@ -40,6 +40,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _supported_fs generic _supported_os Linux +_require_xfs_io_falloc + BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" -- 1.7.12.rc2.18.g61b472e From gnehzuil.liu@gmail.com Sun May 12 06:16:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0C1DE7F37 for ; Sun, 12 May 2013 06:16:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id EEC9B8F8050 for ; Sun, 12 May 2013 04:16:47 -0700 (PDT) X-ASG-Debug-ID: 1368357405-04cb6c53a21f8c00001-NocioJ Received: from mail-da0-f44.google.com (mail-da0-f44.google.com [209.85.210.44]) by cuda.sgi.com with ESMTP id czMmsRzAAlTS4S4d (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 12 May 2013 04:16:46 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.44] Received: by mail-da0-f44.google.com with SMTP id z8so526388daj.31 for ; Sun, 12 May 2013 04:16:45 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=DpaYe1iJtVabIcRxOqWu6Tj86c07YPkb8u05rW9kxWE=; b=PSsgbRru7PI9MCZcydSUMM/Ax/O+X3oUhUy4kPtUWuw7sm46uC8phwxxf15y6DknK4 XUAFfqpZynkKFp87321s9RMSNinCdAvMo2Ss2xhv0AEvEkfSzK9rdUxriO4oIxbyhpyV EJ0KG5m18TL0X8xHh1q/M6UONNmtPgDpz3s1fNNyxiaY30nF95PRWVhDHKk9ciP/Aviz NW0lnwhxcBKetzO7+gPxVSP9j8pksErKt6tYvVnb+186iSc3+YQ3TCYuR1G9ScQJzaA1 8UBhZY6rXDbkNawv6EAK1MOWyDWYaZPTeaWaDkCZne8xpQsI9eaBw2vkRkrjHxYuI1nS FJow== X-Received: by 10.68.71.129 with SMTP id v1mr25214582pbu.136.1368357405121; Sun, 12 May 2013 04:16:45 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id az5sm9830434pbc.18.2013.05.12.04.16.41 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 12 May 2013 04:16:44 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Eric Sandeen , Dave Chinner , Rich Johnston Subject: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file Date: Sun, 12 May 2013 19:34:24 +0800 X-ASG-Orig-Subj: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file Message-Id: <1368358464-11173-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-da0-f44.google.com[209.85.210.44] X-Barracuda-Start-Time: 1368357405 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130734 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Zheng Liu After applied this commit (864688d3), xfstests #255 will not test a file system that cannot support fallocate(2), such as a indirect-based file in ext4. So we need to add a new generic test case to test it. The difference between #255 and this test case is only to use pwrite to allocate blocks. Other filesystems should survive in this test case. In the mean time, a new argument '-u' is added into _test_generic_punch not to run unwritten tests. Meanwhile this commit fixes a minor problem in #255 that testfile should use $seq.$$ as testfile. Signed-off-by: Zheng Liu Cc: Eric Sandeen Cc: Dave Chinner Cc: Rich Johnston --- changelog: * rebase against the latest master branch of xfstests tree common/punch | 164 ++++++++++++++++++++++++++----------------------- tests/generic/255 | 2 +- tests/generic/314 | 67 ++++++++++++++++++++ tests/generic/314.out | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/generic/group | 1 + 5 files changed, 323 insertions(+), 76 deletions(-) create mode 100755 tests/generic/314 create mode 100644 tests/generic/314.out diff --git a/common/punch b/common/punch index b9f9acd..f1fc92d 100644 --- a/common/punch +++ b/common/punch @@ -285,19 +285,25 @@ die_now() # Use the -d flag to not sync the file between tests. # This will test the handling of delayed extents # +# Use the -u flag to not run unwritten tests. +# This will eliminate some unnecessary information. +# _test_generic_punch() { remove_testfile=1 sync_cmd="-c fsync" + unwritten_tests=1 OPTIND=1 - while getopts 'dk' OPTION + while getopts 'dku' OPTION do case $OPTION in k) remove_testfile= ;; d) sync_cmd= ;; + u) unwritten_tests= + ;; ?) echo Invalid flag exit 1 ;; @@ -334,16 +340,18 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 3. into unwritten space" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 3. into unwritten space" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 4. hole -> data" if [ "$remove_testfile" ]; then @@ -356,16 +364,18 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 5. hole -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 5. hole -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 8k 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 8k 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 6. data -> hole" if [ "$remove_testfile" ]; then @@ -378,40 +388,42 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 7. data -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "pwrite 0 8k" $sync_cmd \ - -c "$alloc_cmd 8k 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 8. unwritten -> hole" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 9. unwritten -> data" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 7. data -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "pwrite 0 8k" $sync_cmd \ + -c "$alloc_cmd 8k 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 8. unwritten -> hole" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 9. unwritten -> data" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 8k" \ + -c "pwrite 8k 8k" $sync_cmd \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 8k" \ - -c "pwrite 8k 8k" $sync_cmd \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 10. hole -> data -> hole" if [ "$remove_testfile" ]; then @@ -438,30 +450,32 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 12. unwritten -> data -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "pwrite 8k 4k" $sync_cmd \ - -c "$zero_cmd 4k 12k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 13. data -> unwritten -> data" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 12. unwritten -> data -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "pwrite 8k 4k" $sync_cmd \ + -c "$zero_cmd 4k 12k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 13. data -> unwritten -> data" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "pwrite 0k 8k" $sync_cmd \ + -c "pwrite 12k 8k" -c "fsync" \ + -c "$zero_cmd 4k 12k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "pwrite 0k 8k" $sync_cmd \ - -c "pwrite 12k 8k" -c "fsync" \ - -c "$zero_cmd 4k 12k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 14. data -> hole @ EOF" rm -f $testfile diff --git a/tests/generic/255 b/tests/generic/255 index 2e8ddef..d1f463c 100755 --- a/tests/generic/255 +++ b/tests/generic/255 @@ -50,7 +50,7 @@ _require_xfs_io_falloc_punch _require_xfs_io_falloc _require_xfs_io_fiemap -testfile=$TEST_DIR/255.$$ +testfile=$TEST_DIR/$seq.$$ # Standard punch hole tests _test_generic_punch falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F diff --git a/tests/generic/314 b/tests/generic/314 new file mode 100755 index 0000000..bd7b29b --- /dev/null +++ b/tests/generic/314 @@ -0,0 +1,67 @@ +#! /bin/bash +# FS QA Test No. 314 +# +# Test Generic fallocate hole punching w/o unwritten extent +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Alibaba Group. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/punch + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_xfs_io_falloc_punch +_require_xfs_io_fiemap + +testfile=$TEST_DIR/$seq.$$ + +# Standard punch hole tests +_test_generic_punch -u pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile -F + +# Delayed allocation punch hole tests +_test_generic_punch -u -d pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile -F + +# Multi hole punch tests +_test_generic_punch -u -k pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile -F + +# Delayed allocation multi punch hole tests +_test_generic_punch -u -d -k pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile -F + +# success, all done +status=0 +exit diff --git a/tests/generic/314.out b/tests/generic/314.out new file mode 100644 index 0000000..06aa705 --- /dev/null +++ b/tests/generic/314.out @@ -0,0 +1,165 @@ +QA output created by 314 + 1. into a hole +daa100df6e6711906b61c9ab5aa16032 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..23]: hole +1: [24..31]: extent +2: [32..39]: hole +cc63069677939f69a6e8f68cae6a6dac + 6. data -> hole +0: [0..7]: extent +1: [8..39]: hole +1b3779878366498b28c702ef88c4a773 + 10. hole -> data -> hole +daa100df6e6711906b61c9ab5aa16032 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +daa100df6e6711906b61c9ab5aa16032 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..23]: hole +1: [24..31]: extent +2: [32..39]: hole +cc63069677939f69a6e8f68cae6a6dac + 6. data -> hole +0: [0..7]: extent +1: [8..39]: hole +1b3779878366498b28c702ef88c4a773 + 10. hole -> data -> hole +daa100df6e6711906b61c9ab5aa16032 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +0: [0..7]: extent +1: [8..39]: hole +5a58e46082be047d0f13bee7974015b9 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 6. data -> hole +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 10. hole -> data -> hole +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +0: [0..7]: extent +1: [8..39]: hole +5a58e46082be047d0f13bee7974015b9 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 6. data -> hole +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 10. hole -> data -> hole +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 diff --git a/tests/generic/group b/tests/generic/group index 5a03a09..441f734 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -114,3 +114,4 @@ 309 auto quick 310 auto 311 auto metadata log +314 auto quick prealloc -- 1.7.12.rc2.18.g61b472e From david@fromorbit.com Sun May 12 19:03:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AFC9D7F37 for ; Sun, 12 May 2013 19:03:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7F8F5304039 for ; Sun, 12 May 2013 17:03:31 -0700 (PDT) X-ASG-Debug-ID: 1368403406-04bdf042252138d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id ehKKHE8LyyOPapXB for ; Sun, 12 May 2013 17:03:26 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AukOALcskFF5LMBd/2dsb2JhbABagwe7NYUkBAGBAhd0gh8BAQU6HCMQCAMOBwMJJQ8FJQMhE4gLuzQWjXWBHQeCdGEDlyuRNoMhKoEtJA Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail06.adl2.internode.on.net with ESMTP; 13 May 2013 09:33:23 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UbgEb-0004hC-EJ; Mon, 13 May 2013 10:03:21 +1000 Date: Mon, 13 May 2013 10:03:21 +1000 From: Dave Chinner To: Zheng Liu Cc: xfs@oss.sgi.com, Zheng Liu , Eric Sandeen Subject: Re: [PATCH v3] xfstests: remove fio config files after finished test Message-ID: <20130513000321.GF32675@dastard> X-ASG-Orig-Subj: Re: [PATCH v3] xfstests: remove fio config files after finished test References: <1368346884-31264-1-git-send-email-wenqing.lz@taobao.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368346884-31264-1-git-send-email-wenqing.lz@taobao.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368403406 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130784 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 12, 2013 at 04:21:24PM +0800, Zheng Liu wrote: > From: Zheng Liu > > After finished test, temporarily fio config file should be removed. > This commit tries to fix this problem in the following test cases: > - generic/299-300 > - ext4/301-304 > - shared/305 > > Signed-off-by: Zheng Liu > Cc: Eric Sandeen > Cc: Dave Chinner Looks ok from a quick glance. Acked-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 12 19:06:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7B0787F37 for ; Sun, 12 May 2013 19:06:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4B6578F8033 for ; Sun, 12 May 2013 17:06:34 -0700 (PDT) X-ASG-Debug-ID: 1368403592-04bdf04226213a00001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id e9KLHBGrJDdQd4Ol for ; Sun, 12 May 2013 17:06:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AlYRAOgtkFF5LMBd/2dsb2JhbABagwe7NYUhAwEDAYECF3SCHwEBBTocIxAIAw4KCSUPBSUDIROIC7s1Fo11gR0Hg1UDlyuRNoMhKg Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail06.adl2.internode.on.net with ESMTP; 13 May 2013 09:35:32 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UbgGh-0004hj-VL; Mon, 13 May 2013 10:05:32 +1000 Date: Mon, 13 May 2013 10:05:31 +1000 From: Dave Chinner To: Zheng Liu Cc: xfs@oss.sgi.com, Zheng Liu Subject: Re: [PATCH] xfstests: change file mode Message-ID: <20130513000531.GG32675@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: change file mode References: <1368347826-32152-1-git-send-email-wenqing.lz@taobao.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368347826-32152-1-git-send-email-wenqing.lz@taobao.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368403592 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130784 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 12, 2013 at 04:37:06PM +0800, Zheng Liu wrote: > Now in tests/ there are some test cases whose mode is 0644. But they > should be 0755. So fix it. > > Signed-off-by: Zheng Liu > Cc: Dave Chinner Looks good. Thanks for following up on this. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 12 19:13:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BE1647F37 for ; Sun, 12 May 2013 19:13:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A6946304039 for ; Sun, 12 May 2013 17:13:26 -0700 (PDT) X-ASG-Debug-ID: 1368404004-04cbb05fe4219640001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id jk5mUaqZktDgo1aT for ; Sun, 12 May 2013 17:13:25 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugOAPYukFF5LMBd/2dsb2JhbABagwe7NYUkBAGBAhd0gh8BAQU6HCMQCAMOCgklDwUlAyETiAu7OBaNbQiBHQeDVQOXK5E2gyEqgS8 Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail06.adl2.internode.on.net with ESMTP; 13 May 2013 09:43:24 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UbgOJ-0004iR-O5; Mon, 13 May 2013 10:13:23 +1000 Date: Mon, 13 May 2013 10:13:23 +1000 From: Dave Chinner To: Tomas Racek Cc: xfs@oss.sgi.com, lczerner@redhat.com Subject: Re: [PATCH 1/2] xfstests 200: remove words from output Message-ID: <20130513001323.GH32675@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/2] xfstests 200: remove words from output References: <1368349273-23968-1-git-send-email-tracek@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368349273-23968-1-git-send-email-tracek@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368404004 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130784 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 12, 2013 at 11:01:12AM +0200, Tomas Racek wrote: > Remove phrase "block device" from 200.out since mount warning message > does not use it. Yes it does: $ sudo blockdev --setro /dev/vdb $ sudo mount /dev/vdb /mnt/scratch mount: block device /dev/vdb is write-protected, mounting read-only mount: cannot mount block device /dev/vdb read-only So this change will break a currently working test.... Have you just upgraded to a new core-utils installation? Your next patch about apostrophes indicates that you probably have. If the mount error output has changed as a result of the upgrade, you need to add a filter so that both old and new versions emit the same golden output.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 12 19:25:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9E4707F37 for ; Sun, 12 May 2013 19:25:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2BAEBAC002 for ; Sun, 12 May 2013 17:25:21 -0700 (PDT) X-ASG-Debug-ID: 1368404718-04cbb05fe22199a0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id DhaQ7E8OGE8s3fib for ; Sun, 12 May 2013 17:25:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugOAG4ykFF5LMBd/2dsb2JhbABagwe7NYUkBAGBAhd0gh8BAQU6HCMQCAMOCgklDwUlAyETiAu7OBaNdYEdB4NVA5crkTaDISo Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail06.adl2.internode.on.net with ESMTP; 13 May 2013 09:55:01 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UbgZZ-0004jN-28; Mon, 13 May 2013 10:25:01 +1000 Date: Mon, 13 May 2013 10:25:01 +1000 From: Dave Chinner To: Tomas Racek Cc: xfs@oss.sgi.com, lczerner@redhat.com Subject: Re: [PATCH 2/2] xfstests: unify apostrophes in output files Message-ID: <20130513002500.GI32675@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfstests: unify apostrophes in output files References: <1368349273-23968-1-git-send-email-tracek@redhat.com> <1368349273-23968-2-git-send-email-tracek@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368349273-23968-2-git-send-email-tracek@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368404718 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130786 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 12, 2013 at 11:01:13AM +0200, Tomas Racek wrote: > With coreutils v8.16 the style of apostrophes changed from `word' to > 'word'. This is breaking some tests which use the older form. > > This commit introduces function _filter_apostrophes and changes the > affected tests. I'm not sure this is the best approach as it means we have to remember in future to do this filtering in the places that need it. I suspect that we'd do better to filter the entire output file from check before we diff the golden output and the test output. An inplace sed modification would be all that is needed like: # coreutils 2.20+ changed quote formats in error messages. # filter the damage out so that golden images match both old # and new versions of coreutils. sed -i 's/`/'\''/g' Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 12 19:44:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 224B97F37 for ; Sun, 12 May 2013 19:44:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0B00A304032 for ; Sun, 12 May 2013 17:44:43 -0700 (PDT) X-ASG-Debug-ID: 1368405881-04cb6c53a4211300001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id eW8PKdRzlaq1DBek for ; Sun, 12 May 2013 17:44:41 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AukOADw2kFF5LMBd/2dsb2JhbABagwe7NYUkBAGBAhd0gh8BAQU6HCMQCAMOBwMJJQ8FJQMhE4gLuy8WjXWBHQeDVQOXK5E2gyEq Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail06.adl2.internode.on.net with ESMTP; 13 May 2013 10:14:40 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UbgsZ-0004l6-De; Mon, 13 May 2013 10:44:39 +1000 Date: Mon, 13 May 2013 10:44:39 +1000 From: Dave Chinner To: Zheng Liu Cc: xfs@oss.sgi.com, Zheng Liu , Eric Sandeen , Rich Johnston Subject: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file Message-ID: <20130513004439.GJ32675@dastard> X-ASG-Orig-Subj: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file References: <1368358464-11173-1-git-send-email-wenqing.lz@taobao.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368358464-11173-1-git-send-email-wenqing.lz@taobao.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368405881 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130786 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 12, 2013 at 07:34:24PM +0800, Zheng Liu wrote: > From: Zheng Liu > > After applied this commit (864688d3), xfstests #255 will not test a > file system that cannot support fallocate(2), such as a indirect-based > file in ext4. So we need to add a new generic test case to test it. > > The difference between #255 and this test case is only to use pwrite to > allocate blocks. Other filesystems should survive in this test case. > In the mean time, a new argument '-u' is added into _test_generic_punch > not to run unwritten tests. > > Meanwhile this commit fixes a minor problem in #255 that testfile should > use $seq.$$ as testfile. > > Signed-off-by: Zheng Liu > Cc: Eric Sandeen > Cc: Dave Chinner > Cc: Rich Johnston This will need to be rebased on top of Eric's patch that removes the need to pass -F to xfs_io for non-xfs filesystems.... > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -114,3 +114,4 @@ > 309 auto quick > 310 auto > 311 auto metadata log > +314 auto quick prealloc Why would you add it to the prealloc group? The whole point of the test is that it doesn't use prealloc, right? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 12 19:46:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 607947F37 for ; Sun, 12 May 2013 19:46:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 27286304039 for ; Sun, 12 May 2013 17:46:02 -0700 (PDT) X-ASG-Debug-ID: 1368405960-04bdf04223214910001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 2PpJXrAEdcGvDzjl for ; Sun, 12 May 2013 17:46:00 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAPACw3kFF5LMBd/2dsb2JhbABagwe7NYFJg1sEAYECF3SCHwEBBScTHCMQCAMYCSUPBSUDIROIC7stFo11gR0Hg1UDk12DTpE2gyEq Received: from ppp121-44-192-93.lns20.syd7.internode.on.net (HELO dastard) ([121.44.192.93]) by ipmail06.adl2.internode.on.net with ESMTP; 13 May 2013 10:15:59 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ubgtr-0004lN-5G; Mon, 13 May 2013 10:45:59 +1000 Date: Mon, 13 May 2013 10:45:59 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: "xfs@oss.sgi.com" Subject: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector Message-ID: <20130513004559.GK32675@dastard> X-ASG-Orig-Subj: Re: Rambling noise #1: generic/230 can trigger kernel debug lock detector References: <518B08D9.1060906@gmail.com> <20130509031646.GN24635@dastard> <20130509072045.GO24635@dastard> <518C54AA.7070908@gmail.com> <20130510021942.GP23072@dastard> <20130511011732.GC32675@dastard> <518DCDB1.30408@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518DCDB1.30408@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368405960 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130786 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sat, May 11, 2013 at 12:48:49AM -0400, Michael L. Semon wrote: > On 05/10/2013 09:17 PM, Dave Chinner wrote: > >On Fri, May 10, 2013 at 03:07:19PM -0400, Michael L. Semon wrote: > >>On Thu, May 9, 2013 at 10:19 PM, Dave Chinner wrote: > >>>On Thu, May 09, 2013 at 10:00:10PM -0400, Michael L. Semon wrote: > > >>Thanks for looking at it. There are going to be plenty of false > >>positives out there. Is there a pecking order of what works best? As > >>in... > >> > >>* IRQ (IRQs-off?) checking: worth reporting...? > >>* sleep inside atomic sections: fascinating, but almost anything can trigger it > >>* multiple-CPU deadlock detection: can only speculate on a uniprocessor system > >>* circular dependency checking: YMMV > >>* reclaim-fs checking: which I knew how much developers need to > >>conform to reclaim-fs, or what it is > > > >If there's XFS in the trace, then just post them. We try to fix > >false positives (as well as real bugs) so lockdep reporting gets more > >accurate and less noisy over time. > > > >Cheers, > > > >Dave. > > > > Feel free to ignore and flame them as well. I'm going to make > another attempt to triage my eldest Pentium 4, and there's a high > chance that you'll have to reply, "Despite the xfs_* functions, that > looks like a DRM issue. Go bug those guys." > > Thanks! > > Michael > > During generic/249 (lucky, first test out)... > ====================================================== > [ INFO: possible circular locking dependency detected ] > 3.9.0+ #2 Not tainted > ------------------------------------------------------- > xfs_io/1181 is trying to acquire lock: > (sb_writers#3){.+.+.+}, at: [] > generic_file_splice_write+0x7e/0x1b0 > > but task is already holding lock: > (&(&ip->i_iolock)->mr_lock){++++++}, at: [] xfs_ilock+0xea/0x190 Known issue. Needs VFS level changes to be fixed. I've posted patches several times to linux-fsdevel over the past 2 years to fix it, but I'm still waiting for them to be picked up.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From tradealert@service.alibaba.com Sun May 12 20:19:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 400997F37 for ; Sun, 12 May 2013 20:19:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C4BA9AC001 for ; Sun, 12 May 2013 18:19:17 -0700 (PDT) X-ASG-Debug-ID: 1368407952-04bdf042262157e0001-NocioJ Received: from mx2.megagroup.ru (mx2.megagroup.ru [89.175.255.3]) by cuda.sgi.com with ESMTP id Jt8S8uUtnZxAnpKD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 18:19:14 -0700 (PDT) X-Barracuda-Envelope-From: tradealert@service.alibaba.com X-Barracuda-Apparent-Source-IP: 89.175.255.3 Received: from mx2.megagroup.ru (localhost [127.0.0.1]) by mx2.megagroup.ru (8.14.4/8.14.4/TX) with ESMTP id r4D1JBUs000659 for ; Mon, 13 May 2013 05:19:11 +0400 Received: from [10.0.0.101] ([69.2.244.202]) (authenticated bits=0) by mx2.megagroup.ru (8.14.4/8.14.4/RX) with ESMTP id r4D16qBU023668 for ; Mon, 13 May 2013 05:19:10 +0400 Message-Id: Mime-Version: 1.0 From: "Alibaba.com" To: "xfs" Reply-To: noreply@service.alibaba.com Subject: Trade Upgrade Alert! Date: Sun, 12 May 2013 19:16:58 -0600 X-ASG-Orig-Subj: Trade Upgrade Alert! X-Bounce-Tracking-Info: Content-type: text/html; charset=iso-8859-1 Content-transfer-encoding: quoted-printable X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2b1 (mx2.megagroup.ru [89.175.251.227]); Mon, 13 May 2013 05:19:11 +0400 (MSK) X-Barracuda-Connect: mx2.megagroup.ru[89.175.255.3] X-Barracuda-Start-Time: 1368407953 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.80 X-Barracuda-Spam-Status: No, SCORE=0.80 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA_HREF_HTTP_MISMATCH, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130788 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.80 BSF_SC7_SA_HREF_HTTP_MISMATCH BODY: Custom Phishing Mismatch 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message

 

3D""

=              &n= bsp;          

3D""=3D""3D""3D""
Please Upgrade = Your Alibaba's Trade Management!

Dear Customers,

Congrats! Upgrade your account to maximize your trade with the world's largest online trade Alibaba= =2Ecom=2E 

To maximize your trade opportunity, please confirm the authenticity of your= email address=2E

 
Just click the link below to complete your Upgrade:
 

http://www=2Ealibaba=2Ecom/TradeMa= nagement=2Easpx?UID=3DImKYOvBctyY=3D

 

Wishing you the best of luck,

Alibaba=2Ecom

Service Team
tradealert@service=2Ealibaba=2Ecom

 

From jeff.liu@oracle.com Sun May 12 22:16:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 02E837F37 for ; Sun, 12 May 2013 22:16:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8D4E3AC001 for ; Sun, 12 May 2013 20:16:09 -0700 (PDT) X-ASG-Debug-ID: 1368414967-04bdf04226219be0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id FEoonoHSGUavL8Cj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 20:16:07 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4D3G6eO011370 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 13 May 2013 03:16:07 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D3G5T5015928 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 13 May 2013 03:16:06 GMT Received: from abhmt108.oracle.com (abhmt108.oracle.com [141.146.116.60]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D3G5Hl015922; Mon, 13 May 2013 03:16:05 GMT Received: from [192.168.1.103] (/114.248.198.58) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 12 May 2013 20:16:04 -0700 Message-ID: <51905AEE.2010304@oracle.com> Date: Mon, 13 May 2013 11:15:58 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Chandra Seetharaman CC: xfs@oss.sgi.com Subject: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> X-ASG-Orig-Subj: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD In-Reply-To: <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368414967 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130796 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Chandra, On 05/11/2013 05:21 AM, Chandra Seetharaman wrote: > Remove all incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, > start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts for GQUOTA and > PQUOTA respectively. > > On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. > > Read and write of the superblock does the conversion from *OQUOTA* > to *[PG]QUOTA*. > > Signed-off-by: Chandra Seetharaman > Reviewed-by: Dave Chinner > --- > fs/xfs/xfs_mount.c | 41 +++++++++++++++++++++++++++++++++++++++++ > fs/xfs/xfs_qm.c | 9 ++++++--- > fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++------------------ > fs/xfs/xfs_quota.h | 42 ++++++++++++++++++++++++++++-------------- > fs/xfs/xfs_quotaops.c | 6 ++++-- > fs/xfs/xfs_super.c | 16 ++++++++-------- > fs/xfs/xfs_trans_dquot.c | 4 ++-- > 7 files changed, 110 insertions(+), 47 deletions(-) > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index f6bfbd7..1b79906 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -564,6 +564,8 @@ xfs_sb_from_disk( > struct xfs_sb *to, > xfs_dsb_t *from) > { > + bool force_quota_check = false; > + > to->sb_magicnum = be32_to_cpu(from->sb_magicnum); > to->sb_blocksize = be32_to_cpu(from->sb_blocksize); > to->sb_dblocks = be64_to_cpu(from->sb_dblocks); > @@ -599,6 +601,21 @@ xfs_sb_from_disk( > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > to->sb_qflags = be16_to_cpu(from->sb_qflags); > + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > + (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > + "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > + force_quota_check = true; > + } > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > + > to->sb_flags = from->sb_flags; > to->sb_shared_vn = from->sb_shared_vn; > to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); > @@ -618,6 +635,9 @@ xfs_sb_from_disk( > to->sb_pad = 0; > to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > to->sb_lsn = be64_to_cpu(from->sb_lsn); > + > + if (force_quota_check) > + to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); > } > > /* > @@ -636,11 +656,30 @@ xfs_sb_to_disk( > xfs_sb_field_t f; > int first; > int size; > + __uint16_t qflags = from->sb_qflags; > > ASSERT(fields); > if (!fields) > return; > > + if (fields & XFS_SB_QFLAGS) { > + /* > + * The in-core version of sb_qflags do not have > + * XFS_OQUOTA_* flags, whereas the on-disk version > + * does. So, convert incore XFS_{PG}QUOTA_* flags A minor issue, above line end up with trailing whitespace. Thanks, -Jeff > + * to on-disk XFS_OQUOTA_* flags. > + */ > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > + > + if (from->sb_qflags & > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > + qflags |= XFS_OQUOTA_ENFD; > + if (from->sb_qflags & > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > + qflags |= XFS_OQUOTA_CHKD; > + } > + > while (fields) { > f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); > first = xfs_sb_info[f].offset; > @@ -650,6 +689,8 @@ xfs_sb_to_disk( > > if (size == 1 || xfs_sb_info[f].type == 1) { > memcpy(to_ptr + first, from_ptr + first, size); > + } else if (f == XFS_SBS_QFLAGS) { > + *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); > } else { > switch (size) { > case 2: > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > index f41702b..fe4c743 100644 > --- a/fs/xfs/xfs_qm.c > +++ b/fs/xfs/xfs_qm.c > @@ -298,8 +298,10 @@ xfs_qm_mount_quotas( > */ > if (!XFS_IS_UQUOTA_ON(mp)) > mp->m_qflags &= ~XFS_UQUOTA_CHKD; > - if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) > - mp->m_qflags &= ~XFS_OQUOTA_CHKD; > + if (!XFS_IS_GQUOTA_ON(mp)) > + mp->m_qflags &= ~XFS_GQUOTA_CHKD; > + if (!XFS_IS_PQUOTA_ON(mp)) > + mp->m_qflags &= ~XFS_PQUOTA_CHKD; > > write_changes: > /* > @@ -1280,7 +1282,8 @@ xfs_qm_quotacheck( > &buffer_list); > if (error) > goto error_return; > - flags |= XFS_OQUOTA_CHKD; > + flags |= XFS_IS_GQUOTA_ON(mp) ? > + XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; > } > > do { > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index c41190c..f005f1d 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -117,11 +117,11 @@ xfs_qm_scall_quotaoff( > } > if (flags & XFS_GQUOTA_ACCT) { > dqtype |= XFS_QMOPT_GQUOTA; > - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); > + flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); > inactivate_flags |= XFS_GQUOTA_ACTIVE; > } else if (flags & XFS_PQUOTA_ACCT) { > dqtype |= XFS_QMOPT_PQUOTA; > - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); > + flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); > inactivate_flags |= XFS_PQUOTA_ACTIVE; > } > > @@ -335,14 +335,14 @@ xfs_qm_scall_quotaon( > * quota acct on ondisk without m_qflags' knowing. > */ > if (((flags & XFS_UQUOTA_ACCT) == 0 && > - (mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 && > - (flags & XFS_UQUOTA_ENFD)) > - || > + (mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 && > + (flags & XFS_UQUOTA_ENFD)) || > ((flags & XFS_PQUOTA_ACCT) == 0 && > - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && > - (flags & XFS_GQUOTA_ACCT) == 0 && > - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && > - (flags & XFS_OQUOTA_ENFD))) { > + (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && > + (flags & XFS_PQUOTA_ENFD)) || > + ((flags & XFS_GQUOTA_ACCT) == 0 && > + (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && > + (flags & XFS_GQUOTA_ENFD))) { > xfs_debug(mp, > "%s: Can't enforce without acct, flags=%x sbflags=%x\n", > __func__, flags, mp->m_sb.sb_qflags); > @@ -770,9 +770,12 @@ xfs_qm_scall_getquota( > * gets turned off. No need to confuse the user level code, > * so return zeroes in that case. > */ > - if ((!XFS_IS_UQUOTA_ENFORCED(mp) && dqp->q_core.d_flags == XFS_DQ_USER) || > - (!XFS_IS_OQUOTA_ENFORCED(mp) && > - (dqp->q_core.d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { > + if ((!XFS_IS_UQUOTA_ENFORCED(mp) && > + dqp->q_core.d_flags == XFS_DQ_USER) || > + (!XFS_IS_PQUOTA_ENFORCED(mp) && > + dqp->q_core.d_flags == XFS_DQ_PROJ) || > + (!XFS_IS_GQUOTA_ENFORCED(mp) && > + dqp->q_core.d_flags == XFS_DQ_GROUP)) { > dst->d_btimer = 0; > dst->d_itimer = 0; > dst->d_rtbtimer = 0; > @@ -780,8 +783,8 @@ xfs_qm_scall_getquota( > > #ifdef DEBUG > if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == FS_USER_QUOTA) || > - (XFS_IS_OQUOTA_ENFORCED(mp) && > - (dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) && > + (XFS_IS_PQUOTA_ENFORCED(mp) && dst->d_flags == FS_PROJ_QUOTA) || > + (XFS_IS_GQUOTA_ENFORCED(mp) && dst->d_flags == FS_GROUP_QUOTA)) && > dst->d_id != 0) { > if ((dst->d_bcount > dst->d_blk_softlimit) && > (dst->d_blk_softlimit > 0)) { > @@ -833,10 +836,10 @@ xfs_qm_export_flags( > uflags |= FS_QUOTA_GDQ_ACCT; > if (flags & XFS_UQUOTA_ENFD) > uflags |= FS_QUOTA_UDQ_ENFD; > - if (flags & (XFS_OQUOTA_ENFD)) { > - uflags |= (flags & XFS_GQUOTA_ACCT) ? > - FS_QUOTA_GDQ_ENFD : FS_QUOTA_PDQ_ENFD; > - } > + if (flags & XFS_PQUOTA_ENFD) > + uflags |= FS_QUOTA_PDQ_ENFD; > + if (flags & XFS_GQUOTA_ENFD) > + uflags |= FS_QUOTA_GDQ_ENFD; > return (uflags); > } > > diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h > index c61e31c..ccff1a6 100644 > --- a/fs/xfs/xfs_quota.h > +++ b/fs/xfs/xfs_quota.h > @@ -159,28 +159,43 @@ typedef struct xfs_qoff_logformat { > #define XFS_GQUOTA_ACCT 0x0040 /* group quota accounting ON */ > > /* > + * Start differentiating group quota and project quota in-core > + * using distinct flags, instead of using the combined OQUOTA flags. > + * > + * Conversion to and from the combined OQUOTA flag (if necessary) > + * is done only in xfs_sb_{to,from}_disk() > + */ > +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ > +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ > +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ > +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ > + > +/* > * Quota Accounting/Enforcement flags > */ > #define XFS_ALL_QUOTA_ACCT \ > (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT) > -#define XFS_ALL_QUOTA_ENFD (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD) > -#define XFS_ALL_QUOTA_CHKD (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD) > +#define XFS_ALL_QUOTA_ENFD \ > + (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD) > +#define XFS_ALL_QUOTA_CHKD \ > + (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD) > > #define XFS_IS_QUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT) > #define XFS_IS_UQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_UQUOTA_ACCT) > #define XFS_IS_PQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_PQUOTA_ACCT) > #define XFS_IS_GQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_GQUOTA_ACCT) > #define XFS_IS_UQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_UQUOTA_ENFD) > -#define XFS_IS_OQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_OQUOTA_ENFD) > +#define XFS_IS_PQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_PQUOTA_ENFD) > +#define XFS_IS_GQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_GQUOTA_ENFD) > > /* > * Incore only flags for quotaoff - these bits get cleared when quota(s) > * are in the process of getting turned off. These flags are in m_qflags but > * never in sb_qflags. > */ > -#define XFS_UQUOTA_ACTIVE 0x0100 /* uquotas are being turned off */ > -#define XFS_PQUOTA_ACTIVE 0x0200 /* pquotas are being turned off */ > -#define XFS_GQUOTA_ACTIVE 0x0400 /* gquotas are being turned off */ > +#define XFS_UQUOTA_ACTIVE 0x1000 /* uquotas are being turned off */ > +#define XFS_PQUOTA_ACTIVE 0x2000 /* pquotas are being turned off */ > +#define XFS_GQUOTA_ACTIVE 0x4000 /* gquotas are being turned off */ > #define XFS_ALL_QUOTA_ACTIVE \ > (XFS_UQUOTA_ACTIVE | XFS_PQUOTA_ACTIVE | XFS_GQUOTA_ACTIVE) > > @@ -266,24 +281,23 @@ typedef struct xfs_qoff_logformat { > ((XFS_IS_UQUOTA_ON(mp) && \ > (mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \ > (XFS_IS_GQUOTA_ON(mp) && \ > - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ > - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT))) || \ > + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD) == 0) || \ > (XFS_IS_PQUOTA_ON(mp) && \ > - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ > - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT)))) > + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) > > #define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ > - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) > + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) > > #define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ > - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) > + XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) > > #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ > - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD|\ > - XFS_GQUOTA_ACCT) > + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ > + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|\ > + XFS_GQUOTA_CHKD) > > > /* > diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c > index 71926d6..056d62e 100644 > --- a/fs/xfs/xfs_quotaops.c > +++ b/fs/xfs/xfs_quotaops.c > @@ -75,8 +75,10 @@ xfs_fs_set_xstate( > flags |= XFS_GQUOTA_ACCT; > if (uflags & FS_QUOTA_UDQ_ENFD) > flags |= XFS_UQUOTA_ENFD; > - if (uflags & (FS_QUOTA_PDQ_ENFD|FS_QUOTA_GDQ_ENFD)) > - flags |= XFS_OQUOTA_ENFD; > + if (uflags & FS_QUOTA_PDQ_ENFD) > + flags |= XFS_PQUOTA_ENFD; > + if (uflags & FS_QUOTA_GDQ_ENFD) > + flags |= XFS_GQUOTA_ENFD; > > switch (op) { > case Q_XQUOTAON: > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index ea341ce..873fa5a 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -359,17 +359,17 @@ xfs_parseargs( > } else if (!strcmp(this_char, MNTOPT_PQUOTA) || > !strcmp(this_char, MNTOPT_PRJQUOTA)) { > mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | > - XFS_OQUOTA_ENFD); > + XFS_PQUOTA_ENFD); > } else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) { > mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); > - mp->m_qflags &= ~XFS_OQUOTA_ENFD; > + mp->m_qflags &= ~XFS_PQUOTA_ENFD; > } else if (!strcmp(this_char, MNTOPT_GQUOTA) || > !strcmp(this_char, MNTOPT_GRPQUOTA)) { > mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | > - XFS_OQUOTA_ENFD); > + XFS_GQUOTA_ENFD); > } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { > mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); > - mp->m_qflags &= ~XFS_OQUOTA_ENFD; > + mp->m_qflags &= ~XFS_GQUOTA_ENFD; > } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) { > xfs_warn(mp, > "delaylog is the default now, option is deprecated."); > @@ -563,12 +563,12 @@ xfs_showargs( > /* Either project or group quotas can be active, not both */ > > if (mp->m_qflags & XFS_PQUOTA_ACCT) { > - if (mp->m_qflags & XFS_OQUOTA_ENFD) > + if (mp->m_qflags & XFS_PQUOTA_ENFD) > seq_puts(m, "," MNTOPT_PRJQUOTA); > else > seq_puts(m, "," MNTOPT_PQUOTANOENF); > } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { > - if (mp->m_qflags & XFS_OQUOTA_ENFD) > + if (mp->m_qflags & XFS_GQUOTA_ENFD) > seq_puts(m, "," MNTOPT_GRPQUOTA); > else > seq_puts(m, "," MNTOPT_GQUOTANOENF); > @@ -1136,8 +1136,8 @@ xfs_fs_statfs( > spin_unlock(&mp->m_sb_lock); > > if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && > - ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) == > - (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD)) > + ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) == > + (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD)) > xfs_qm_statvfs(ip, statp); > return 0; > } > diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c > index fec75d0..8cdbd62 100644 > --- a/fs/xfs/xfs_trans_dquot.c > +++ b/fs/xfs/xfs_trans_dquot.c > @@ -640,8 +640,8 @@ xfs_trans_dqresv( > if ((flags & XFS_QMOPT_FORCE_RES) == 0 && > dqp->q_core.d_id && > ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) || > - (XFS_IS_OQUOTA_ENFORCED(dqp->q_mount) && > - (XFS_QM_ISPDQ(dqp) || XFS_QM_ISGDQ(dqp))))) { > + (XFS_IS_PQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISPDQ(dqp)) || > + (XFS_IS_GQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISGDQ(dqp)))) { > if (nblks > 0) { > /* > * dquot is locked already. See if we'd go over the > From apache@melnx02.cloudapp.net Sun May 12 22:58:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C56167F37 for ; Sun, 12 May 2013 22:58:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 49D22AC001 for ; Sun, 12 May 2013 20:58:48 -0700 (PDT) X-ASG-Debug-ID: 1368417520-04cbb05fe3221940001-w1Z2WR Received: from mail.melnx02.cloudapp.net ([168.63.132.230]) by cuda.sgi.com with ESMTP id HXhN8tKzCvUOZggI for ; Sun, 12 May 2013 20:58:41 -0700 (PDT) X-Barracuda-Envelope-From: apache@melnx02.cloudapp.net X-Barracuda-Apparent-Source-IP: 168.63.132.230 Received: by mail.melnx02.cloudapp.net (Postfix, from userid 48) id 0F318EDAB9; Mon, 13 May 2013 03:58:30 +0000 (UTC) To: linux-xfs@oss.sgi.com Subject: Sengunda Notificacion De Seguridad: Cuenta Bloqueada X-PHP-Originating-Script: 0:mailer.php X-ASG-Orig-Subj: Sengunda Notificacion De Seguridad: Cuenta Bloqueada From: BancodeVenezuela Reply-To: MIME-Version: 1.0 Content-Type: text/html Content-Transfer-Encoding: 8bit Message-Id: <20130513035840.0F318EDAB9@mail.melnx02.cloudapp.net> Date: Mon, 13 May 2013 03:58:30 +0000 (UTC) X-Barracuda-Connect: UNKNOWN[168.63.132.230] X-Barracuda-Start-Time: 1368417520 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.40 X-Barracuda-Spam-Status: No, SCORE=1.40 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, BSF_SC7_SA_HREF_WWW_MISMATCH, HTML_MESSAGE, MIME_HTML_ONLY, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130800 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.80 BSF_SC7_SA_HREF_WWW_MISMATCH BODY: Custom Phishing Mismatch 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Untitled Document
Banco de Venezuela  

 

Estimado Cliente:

Su cuenta muestra segun nuestro sistema un mensaje de error BCE001547-56 mismo que se define como CUENTA BLOQUEADA  que se ha generado por que usted no ha realizado el proceso de Verificacion de Identidad

Es necesario que ingrese a www.bancodevenezuela.com para poder verificar su informacion en nuestra base de datos o de lo contrario su servicio de banca por internet quedara cancelada y sera necesario acudir a nuestra sucursal mas cercana para una activacion de su cuenta.

En el banco de venezuela nos preocupamos por su seguridad, por este motivo recibirá esta notificación de forma automática cada vez que sea necesario. ¡Ingresa a su banca para acceder al sistema e iniciar el Registo

 

www.bancodevenezuela.com/verificacion

 

Este e-mail es generado de manera automatica, por favor no responda a este mensaje. Asimismo, se han omitido acentos para evitar problemas de compatibilidad.

Banco de Venezuela © RIF G-20009997-6. Todos los derechos reservados.

From jeff.liu@oracle.com Sun May 12 22:59:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 905627F37 for ; Sun, 12 May 2013 22:59:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 65E738F8033 for ; Sun, 12 May 2013 20:59:50 -0700 (PDT) X-ASG-Debug-ID: 1368417586-04cbb05fe4221a00001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id aQJKPEmYkTCUrdvs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 20:59:46 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4D3xixD022360 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 13 May 2013 03:59:45 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D3xipn029968 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 13 May 2013 03:59:45 GMT Received: from abhmt107.oracle.com (abhmt107.oracle.com [141.146.116.59]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D3xiL2029953; Mon, 13 May 2013 03:59:44 GMT Received: from [192.168.1.103] (/114.248.198.58) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 12 May 2013 20:59:42 -0700 Message-ID: <51906528.3030307@oracle.com> Date: Mon, 13 May 2013 11:59:36 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Chandra Seetharaman CC: xfs@oss.sgi.com Subject: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> X-ASG-Orig-Subj: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. In-Reply-To: <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368417586 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130800 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, On 05/11/2013 05:21 AM, Chandra Seetharaman wrote: > Add project quota changes to all the places where group quota field > is used: > * add separate project quota members into various structures > * split project quota and group quotas so that instead of overriding > the group quota members incore, the new project quota members are > used instead > * get rid of usage of the OQUOTA flag incore, in favor of separate > * group > and project quota flags. > * add a project dquot argument to various functions. > > No externally visible interfaces changed. > > Signed-off-by: Chandra Seetharaman > --- > fs/xfs/xfs_dquot.c | 33 ++++- > fs/xfs/xfs_dquot.h | 13 +- > fs/xfs/xfs_icache.c | 4 +- > fs/xfs/xfs_inode.h | 1 + > fs/xfs/xfs_ioctl.c | 14 +- > fs/xfs/xfs_iops.c | 4 +- > fs/xfs/xfs_qm.c | 355 ++++++++++++++++++++++++++++++---------------- > fs/xfs/xfs_qm.h | 53 +++++--- > fs/xfs/xfs_qm_bhv.c | 2 +- > fs/xfs/xfs_qm_syscalls.c | 19 ++- > fs/xfs/xfs_quota.h | 32 +++-- > fs/xfs/xfs_super.c | 5 +- > fs/xfs/xfs_symlink.c | 13 ++- > fs/xfs/xfs_trans_dquot.c | 94 +++++++------ > fs/xfs/xfs_vnodeops.c | 12 +- > 15 files changed, 416 insertions(+), 238 deletions(-) > > diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c > index a41f8bf..a25ba5d 100644 > --- a/fs/xfs/xfs_dquot.c > +++ b/fs/xfs/xfs_dquot.c > @@ -68,8 +68,7 @@ static struct lock_class_key xfs_dquot_other_class; > * This is called to free all the memory associated with a dquot > */ > void > -xfs_qm_dqdestroy( > - xfs_dquot_t *dqp) > +xfs_qm_dqdestroy(xfs_dquot_t *dqp) > { > ASSERT(list_empty(&dqp->q_lru)); > > @@ -568,6 +567,17 @@ xfs_qm_dqrepair( > return 0; > } > > +struct xfs_inode * > +xfs_dq_to_quota_inode(struct xfs_dquot *dqp) > +{ > + if (XFS_QM_ISUDQ(dqp)) > + return dqp->q_mount->m_quotainfo->qi_uquotaip; > + if (XFS_QM_ISGDQ(dqp)) > + return dqp->q_mount->m_quotainfo->qi_gquotaip; > + ASSERT(XFS_QM_ISPDQ(dqp)); > + return dqp->q_mount->m_quotainfo->qi_pquotaip; > +} Is it better to replace above conditional judgment with 'switch...case'? i.e. static inline struct xfs_inode * xfs_dq_to_qip(struct xfs_dquot *dqp) { switch (dqp->dq_flags) { case XFS_DQ_USER: return dqp->q_mount->m_quotainfo->qi_uquotaip; case XFS_DQ_GROUP: return dqp->q_mount->m_quotainfo->qi_gqoutaip; case XFS_DQ_PROJ: return dqp->q_mount->m_quotainfo->qi_pquotaip; } ASSERT(0); return NULL; } > + > /* > * Maps a dquot to the buffer containing its on-disk version. > * This returns a ptr to the buffer containing the on-disk dquot > @@ -584,7 +594,7 @@ xfs_qm_dqtobp( > xfs_bmbt_irec_t map; > int nmaps = 1, error; > xfs_buf_t *bp; > - xfs_inode_t *quotip = XFS_DQ_TO_QIP(dqp); > + xfs_inode_t *quotip = xfs_dq_to_quota_inode(dqp); > xfs_mount_t *mp = dqp->q_mount; > xfs_dqid_t id = be32_to_cpu(dqp->q_core.d_id); > xfs_trans_t *tp = (tpp ? *tpp : NULL); > @@ -815,7 +825,7 @@ xfs_qm_dqget( > xfs_dquot_t **O_dqpp) /* OUT : locked incore dquot */ > { > struct xfs_quotainfo *qi = mp->m_quotainfo; > - struct radix_tree_root *tree = XFS_DQUOT_TREE(qi, type); > + struct radix_tree_root *tree = xfs_dquot_tree(qi, type); > struct xfs_dquot *dqp; > int error; > > @@ -947,6 +957,7 @@ xfs_qm_dqput_final( > { > struct xfs_quotainfo *qi = dqp->q_mount->m_quotainfo; > struct xfs_dquot *gdqp; > + struct xfs_dquot *pdqp; > > trace_xfs_dqput_free(dqp); > > @@ -960,21 +971,29 @@ xfs_qm_dqput_final( > > /* > * If we just added a udquot to the freelist, then we want to release > - * the gdquot reference that it (probably) has. Otherwise it'll keep > - * the gdquot from getting reclaimed. > + * the gdquot/pdquot reference that it (probably) has. Otherwise it'll > + * keep the gdquot/pdquot from getting reclaimed. > */ > gdqp = dqp->q_gdquot; > if (gdqp) { > xfs_dqlock(gdqp); > dqp->q_gdquot = NULL; > } > + > + pdqp = dqp->q_pdquot; > + if (pdqp) { > + xfs_dqlock(pdqp); > + dqp->q_pdquot = NULL; > + } > xfs_dqunlock(dqp); > > /* > - * If we had a group quota hint, release it now. > + * If we had a group/project quota hint, release it now. > */ > if (gdqp) > xfs_qm_dqput(gdqp); > + if (pdqp) > + xfs_qm_dqput(pdqp); > } > > /* > diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h > index 4f0ebfc..00ccbf1 100644 > --- a/fs/xfs/xfs_dquot.h > +++ b/fs/xfs/xfs_dquot.h > @@ -29,7 +29,6 @@ > * when quotas are off. > */ > > -struct xfs_mount; > struct xfs_trans; > > enum { > @@ -52,7 +51,8 @@ typedef struct xfs_dquot { > int q_bufoffset; /* off of dq in buffer (# dquots) */ > xfs_fileoff_t q_fileoffset; /* offset in quotas file */ > > - struct xfs_dquot*q_gdquot; /* group dquot, hint only */ > + struct xfs_dquot *q_gdquot; /* group dquot, hint only */ > + struct xfs_dquot *q_pdquot; /* project dquot, hint only */ > xfs_disk_dquot_t q_core; /* actual usage & quotas */ > xfs_dq_logitem_t q_logitem; /* dquot log item */ > xfs_qcnt_t q_res_bcount; /* total regular nblks used+reserved */ > @@ -118,8 +118,9 @@ static inline int xfs_this_quota_on(struct xfs_mount *mp, int type) > case XFS_DQ_USER: > return XFS_IS_UQUOTA_ON(mp); > case XFS_DQ_GROUP: > + return XFS_IS_GQUOTA_ON(mp); > case XFS_DQ_PROJ: > - return XFS_IS_OQUOTA_ON(mp); > + return XFS_IS_PQUOTA_ON(mp); > default: > return 0; > } > @@ -131,8 +132,9 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > case XFS_DQ_USER: > return ip->i_udquot; > case XFS_DQ_GROUP: > - case XFS_DQ_PROJ: > return ip->i_gdquot; > + case XFS_DQ_PROJ: > + return ip->i_pdquot; > default: > return NULL; > } > @@ -144,9 +146,6 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > #define XFS_QM_ISPDQ(dqp) ((dqp)->dq_flags & XFS_DQ_PROJ) > #define XFS_QM_ISGDQ(dqp) ((dqp)->dq_flags & XFS_DQ_GROUP) > #define XFS_DQ_TO_QINF(dqp) ((dqp)->q_mount->m_quotainfo) For now, XFS_DQ_TO_QINF() is used by XFS_DQ_TO_QIP() only. Maybe we can remove it in this patch as well, if we don't want to make use of it in any other places to simplify the input... > -#define XFS_DQ_TO_QIP(dqp) (XFS_QM_ISUDQ(dqp) ? \ > - XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ > - XFS_DQ_TO_QINF(dqp)->qi_gquotaip) > > extern int xfs_qm_dqread(struct xfs_mount *, xfs_dqid_t, uint, > uint, struct xfs_dquot **); > diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c > index 96e344e..3f90e1c 100644 > --- a/fs/xfs/xfs_icache.c > +++ b/fs/xfs/xfs_icache.c > @@ -335,7 +335,9 @@ xfs_iget_cache_miss( > iflags = XFS_INEW; > if (flags & XFS_IGET_DONTCACHE) > iflags |= XFS_IDONTCACHE; > - ip->i_udquot = ip->i_gdquot = NULL; > + ip->i_udquot = NULL; > + ip->i_gdquot = NULL; > + ip->i_pdquot = NULL; > xfs_iflags_set(ip, iflags); > > /* insert the new inode */ > diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h > index 9112979..b55fd34 100644 > --- a/fs/xfs/xfs_inode.h > +++ b/fs/xfs/xfs_inode.h > @@ -250,6 +250,7 @@ typedef struct xfs_inode { > struct xfs_mount *i_mount; /* fs mount struct ptr */ > struct xfs_dquot *i_udquot; /* user dquot */ > struct xfs_dquot *i_gdquot; /* group dquot */ > + struct xfs_dquot *i_pdquot; /* project dquot */ > > /* Inode location stuff */ > xfs_ino_t i_ino; /* inode number (agno/agino)*/ > diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c > index 5e99968..71a8bc5 100644 > --- a/fs/xfs/xfs_ioctl.c > +++ b/fs/xfs/xfs_ioctl.c > @@ -928,7 +928,7 @@ xfs_ioctl_setattr( > struct xfs_trans *tp; > unsigned int lock_flags = 0; > struct xfs_dquot *udqp = NULL; > - struct xfs_dquot *gdqp = NULL; > + struct xfs_dquot *pdqp = NULL; > struct xfs_dquot *olddquot = NULL; > int code; > > @@ -957,7 +957,7 @@ xfs_ioctl_setattr( > if (XFS_IS_QUOTA_ON(mp) && (mask & FSX_PROJID)) { > code = xfs_qm_vop_dqalloc(ip, ip->i_d.di_uid, > ip->i_d.di_gid, fa->fsx_projid, > - XFS_QMOPT_PQUOTA, &udqp, &gdqp); > + XFS_QMOPT_PQUOTA, &udqp, NULL, &pdqp); > if (code) > return code; > } > @@ -994,8 +994,8 @@ xfs_ioctl_setattr( > XFS_IS_PQUOTA_ON(mp) && > xfs_get_projid(ip) != fa->fsx_projid) { > ASSERT(tp); > - code = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, > - capable(CAP_FOWNER) ? > + code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, > + pdqp, capable(CAP_FOWNER) ? > XFS_QMOPT_FORCE_RES : 0); > if (code) /* out of quota */ > goto error_return; > @@ -1113,7 +1113,7 @@ xfs_ioctl_setattr( > if (xfs_get_projid(ip) != fa->fsx_projid) { > if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { > olddquot = xfs_qm_vop_chown(tp, ip, > - &ip->i_gdquot, gdqp); > + &ip->i_pdquot, pdqp); > } > xfs_set_projid(ip, fa->fsx_projid); > > @@ -1160,13 +1160,13 @@ xfs_ioctl_setattr( > */ > xfs_qm_dqrele(olddquot); > xfs_qm_dqrele(udqp); > - xfs_qm_dqrele(gdqp); > + xfs_qm_dqrele(pdqp); > > return code; > > error_return: > xfs_qm_dqrele(udqp); > - xfs_qm_dqrele(gdqp); > + xfs_qm_dqrele(pdqp); > xfs_trans_cancel(tp, 0); > if (lock_flags) > xfs_iunlock(ip, lock_flags); > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index d82efaa..7c54ea4 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -517,7 +517,7 @@ xfs_setattr_nonsize( > ASSERT(udqp == NULL); > ASSERT(gdqp == NULL); > error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip), > - qflags, &udqp, &gdqp); > + qflags, &udqp, &gdqp, NULL); > if (error) > return error; > } > @@ -553,7 +553,7 @@ xfs_setattr_nonsize( > (XFS_IS_GQUOTA_ON(mp) && igid != gid))) { > ASSERT(tp); > error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, > - capable(CAP_FOWNER) ? > + NULL, capable(CAP_FOWNER) ? > XFS_QMOPT_FORCE_RES : 0); > if (error) /* out of quota */ > goto out_trans_cancel; > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > index fe4c743..97912cb 100644 > --- a/fs/xfs/xfs_qm.c > +++ b/fs/xfs/xfs_qm.c > @@ -69,7 +69,7 @@ xfs_qm_dquot_walk( > void *data) > { > struct xfs_quotainfo *qi = mp->m_quotainfo; > - struct radix_tree_root *tree = XFS_DQUOT_TREE(qi, type); > + struct radix_tree_root *tree = xfs_dquot_tree(qi, type); > uint32_t next_index; > int last_error = 0; > int skipped; > @@ -136,6 +136,7 @@ xfs_qm_dqpurge( > struct xfs_mount *mp = dqp->q_mount; > struct xfs_quotainfo *qi = mp->m_quotainfo; > struct xfs_dquot *gdqp = NULL; > + struct xfs_dquot *pdqp = NULL; > > xfs_dqlock(dqp); > if ((dqp->dq_flags & XFS_DQ_FREEING) || dqp->q_nrefs != 0) { > @@ -144,8 +145,7 @@ xfs_qm_dqpurge( > } > > /* > - * If this quota has a group hint attached, prepare for releasing it > - * now. > + * If this quota has a hint attached, prepare for releasing it now. > */ > gdqp = dqp->q_gdquot; > if (gdqp) { > @@ -153,6 +153,12 @@ xfs_qm_dqpurge( > dqp->q_gdquot = NULL; > } > > + pdqp = dqp->q_pdquot; > + if (pdqp) { > + xfs_dqlock(pdqp); > + dqp->q_pdquot = NULL; > + } > + > dqp->dq_flags |= XFS_DQ_FREEING; > > xfs_dqflock(dqp); > @@ -188,7 +194,7 @@ xfs_qm_dqpurge( > xfs_dqfunlock(dqp); > xfs_dqunlock(dqp); > > - radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags), > + radix_tree_delete(xfs_dquot_tree(qi, dqp->q_core.d_flags), > be32_to_cpu(dqp->q_core.d_id)); > qi->qi_dquots--; > > @@ -207,6 +213,8 @@ xfs_qm_dqpurge( > > if (gdqp) > xfs_qm_dqput(gdqp); > + if (pdqp) > + xfs_qm_dqput(pdqp); > return 0; > } > > @@ -363,6 +371,10 @@ xfs_qm_unmount_quotas( > IRELE(mp->m_quotainfo->qi_gquotaip); > mp->m_quotainfo->qi_gquotaip = NULL; > } > + if (mp->m_quotainfo->qi_pquotaip) { > + IRELE(mp->m_quotainfo->qi_pquotaip); > + mp->m_quotainfo->qi_pquotaip = NULL; > + } > } > } > > @@ -409,7 +421,10 @@ xfs_qm_dqattach_one( > * be reclaimed as long as we have a ref from inode and we > * hold the ilock. > */ > - dqp = udqhint->q_gdquot; > + if (type == XFS_DQ_GROUP) > + dqp = udqhint->q_gdquot; > + else > + dqp = udqhint->q_pdquot; Maybe it's better to: dqp = "type == XFS_DQ_GROUP" ? udqhint->q_gdquot : udqhint->q_pdquot; > if (dqp && be32_to_cpu(dqp->q_core.d_id) == id) { > ASSERT(*IO_idqpp == NULL); > > @@ -452,28 +467,38 @@ xfs_qm_dqattach_one( > > > /* > - * Given a udquot and gdquot, attach a ptr to the group dquot in the > + * Given a udquot and gdquot, attach a ptr to the group/project dquot in the > * udquot as a hint for future lookups. > */ > STATIC void > -xfs_qm_dqattach_grouphint( > - xfs_dquot_t *udq, > - xfs_dquot_t *gdq) > +xfs_qm_dqattach_grouphint(xfs_inode_t *ip, int type) > { > - xfs_dquot_t *tmp; > + struct xfs_dquot **dqhint; > + struct xfs_dquot *gpdq; > + struct xfs_dquot *udq = ip->i_udquot; > > xfs_dqlock(udq); > > - tmp = udq->q_gdquot; > - if (tmp) { > - if (tmp == gdq) > + if (type == XFS_DQ_GROUP) { > + gpdq = ip->i_gdquot; > + dqhint = &udq->q_gdquot; > + } else { > + gpdq = ip->i_pdquot; > + dqhint = &udq->q_pdquot; > + } > + > + if (*dqhint) { > + struct xfs_dquot *tmp; > + > + if (*dqhint == gpdq) > goto done; > > - udq->q_gdquot = NULL; > + tmp = *dqhint; > + *dqhint = NULL; > xfs_qm_dqrele(tmp); > } > > - udq->q_gdquot = xfs_qm_dqhold(gdq); > + *dqhint = xfs_qm_dqhold(gpdq); > done: > xfs_dqunlock(udq); > } > @@ -527,12 +552,8 @@ xfs_qm_dqattach_locked( > } > > ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > - if (XFS_IS_OQUOTA_ON(mp)) { > - error = XFS_IS_GQUOTA_ON(mp) ? > - xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, > - flags & XFS_QMOPT_DQALLOC, > - ip->i_udquot, &ip->i_gdquot) : > - xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, > + if (XFS_IS_GQUOTA_ON(mp)) { > + error = xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, > flags & XFS_QMOPT_DQALLOC, > ip->i_udquot, &ip->i_gdquot); > /* > @@ -544,14 +565,28 @@ xfs_qm_dqattach_locked( > nquotas++; > } > > + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > + if (XFS_IS_PQUOTA_ON(mp)) { > + error = xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, > + flags & XFS_QMOPT_DQALLOC, > + ip->i_udquot, &ip->i_pdquot); > + /* > + * Don't worry about the udquot that we may have > + * attached above. It'll get detached, if not already. > + */ > + if (error) > + goto done; > + nquotas++; > + } > + > /* > - * Attach this group quota to the user quota as a hint. > + * Attach this group/project quota to the user quota as a hint. > * This WON'T, in general, result in a thrash. > */ > - if (nquotas == 2) { > + if (nquotas > 1 && ip->i_udquot) { > ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > - ASSERT(ip->i_udquot); > - ASSERT(ip->i_gdquot); > + ASSERT(ip->i_gdquot || !XFS_IS_GQUOTA_ON(mp)); > + ASSERT(ip->i_pdquot || !XFS_IS_PQUOTA_ON(mp)); > > /* > * We do not have i_udquot locked at this point, but this check > @@ -559,8 +594,13 @@ xfs_qm_dqattach_locked( > * 100% all the time. It is just a hint, and this will > * succeed in general. > */ > - if (ip->i_udquot->q_gdquot != ip->i_gdquot) > - xfs_qm_dqattach_grouphint(ip->i_udquot, ip->i_gdquot); > + if (XFS_IS_GQUOTA_ON(mp) && > + ip->i_udquot->q_gdquot != ip->i_gdquot) > + xfs_qm_dqattach_grouphint(ip, XFS_DQ_GROUP); > + > + if (XFS_IS_PQUOTA_ON(mp) && > + ip->i_udquot->q_pdquot != ip->i_pdquot) > + xfs_qm_dqattach_grouphint(ip, XFS_DQ_PROJ); > } > > done: > @@ -568,8 +608,10 @@ xfs_qm_dqattach_locked( > if (!error) { > if (XFS_IS_UQUOTA_ON(mp)) > ASSERT(ip->i_udquot); > - if (XFS_IS_OQUOTA_ON(mp)) > + if (XFS_IS_GQUOTA_ON(mp)) > ASSERT(ip->i_gdquot); > + if (XFS_IS_PQUOTA_ON(mp)) > + ASSERT(ip->i_pdquot); > } > ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > #endif > @@ -602,7 +644,7 @@ void > xfs_qm_dqdetach( > xfs_inode_t *ip) > { > - if (!(ip->i_udquot || ip->i_gdquot)) > + if (!(ip->i_udquot || ip->i_gdquot || ip->i_pdquot)) > return; > > trace_xfs_dquot_dqdetach(ip); > @@ -617,6 +659,10 @@ xfs_qm_dqdetach( > xfs_qm_dqrele(ip->i_gdquot); > ip->i_gdquot = NULL; > } > + if (ip->i_pdquot) { > + xfs_qm_dqrele(ip->i_pdquot); > + ip->i_pdquot = NULL; > + } > } > > int > @@ -661,6 +707,7 @@ xfs_qm_init_quotainfo( > > INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS); > INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); > + INIT_RADIX_TREE(&qinf->qi_pquota_tree, GFP_NOFS); > mutex_init(&qinf->qi_tree_lock); > > INIT_LIST_HEAD(&qinf->qi_lru_list); > @@ -762,6 +809,10 @@ xfs_qm_destroy_quotainfo( > IRELE(qi->qi_gquotaip); > qi->qi_gquotaip = NULL; > } > + if (qi->qi_pquotaip) { > + IRELE(qi->qi_pquotaip); > + qi->qi_pquotaip = NULL; > + } > mutex_destroy(&qi->qi_quotaofflock); > kmem_free(qi); > mp->m_quotainfo = NULL; > @@ -1247,16 +1298,18 @@ xfs_qm_quotacheck( > int done, count, error, error2; > xfs_ino_t lastino; > size_t structsz; > - xfs_inode_t *uip, *gip; > uint flags; > LIST_HEAD (buffer_list); > + struct xfs_inode *uip = mp->m_quotainfo->qi_uquotaip; > + struct xfs_inode *gip = mp->m_quotainfo->qi_gquotaip; > + struct xfs_inode *pip = mp->m_quotainfo->qi_pquotaip; > > count = INT_MAX; > structsz = 1; > lastino = 0; > flags = 0; > > - ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); > + ASSERT(uip || gip || pip); > ASSERT(XFS_IS_QUOTA_RUNNING(mp)); > > xfs_notice(mp, "Quotacheck needed: Please wait."); > @@ -1266,7 +1319,6 @@ xfs_qm_quotacheck( > * their counters to zero. We need a clean slate. > * We don't log our changes till later. > */ > - uip = mp->m_quotainfo->qi_uquotaip; > if (uip) { > error = xfs_qm_dqiterate(mp, uip, XFS_QMOPT_UQUOTA, > &buffer_list); > @@ -1275,15 +1327,20 @@ xfs_qm_quotacheck( > flags |= XFS_UQUOTA_CHKD; > } > > - gip = mp->m_quotainfo->qi_gquotaip; > if (gip) { > - error = xfs_qm_dqiterate(mp, gip, XFS_IS_GQUOTA_ON(mp) ? > - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA, > + error = xfs_qm_dqiterate(mp, gip, XFS_QMOPT_GQUOTA, > + &buffer_list); > + if (error) > + goto error_return; > + flags |= XFS_GQUOTA_CHKD; > + } > + > + if (pip) { > + error = xfs_qm_dqiterate(mp, pip, XFS_QMOPT_PQUOTA, > &buffer_list); > if (error) > goto error_return; > - flags |= XFS_IS_GQUOTA_ON(mp) ? > - XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; > + flags |= XFS_PQUOTA_CHKD; > } > > do { > @@ -1378,13 +1435,14 @@ STATIC int > xfs_qm_init_quotainos( > xfs_mount_t *mp) > { > - xfs_inode_t *uip, *gip; > + struct xfs_inode *uip = NULL; > + struct xfs_inode *gip = NULL; > + struct xfs_inode *pip = NULL; > int error; > __int64_t sbflags; > uint flags; > > ASSERT(mp->m_quotainfo); > - uip = gip = NULL; > sbflags = 0; > flags = 0; > > @@ -1395,19 +1453,27 @@ xfs_qm_init_quotainos( > if (XFS_IS_UQUOTA_ON(mp) && > mp->m_sb.sb_uquotino != NULLFSINO) { > ASSERT(mp->m_sb.sb_uquotino > 0); > - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > - 0, 0, &uip))) > + error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > + 0, 0, &uip); > + if (error) > return XFS_ERROR(error); > } > - if (XFS_IS_OQUOTA_ON(mp) && > + if (XFS_IS_GQUOTA_ON(mp) && > mp->m_sb.sb_gquotino != NULLFSINO) { > ASSERT(mp->m_sb.sb_gquotino > 0); > - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > - 0, 0, &gip))) { > - if (uip) > - IRELE(uip); > - return XFS_ERROR(error); > - } > + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > + 0, 0, &gip); > + if (error) > + goto error_rele; > + } > + /* Use sb_gquotino for now */ > + if (XFS_IS_PQUOTA_ON(mp) && > + mp->m_sb.sb_gquotino != NULLFSINO) { > + ASSERT(mp->m_sb.sb_gquotino > 0); > + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > + 0, 0, &pip); > + if (error) > + goto error_rele; > } > } else { > flags |= XFS_QMOPT_SBVERSION; > @@ -1416,36 +1482,50 @@ xfs_qm_init_quotainos( > } > > /* > - * Create the two inodes, if they don't exist already. The changes > + * Create the three inodes, if they don't exist already. The changes > * made above will get added to a transaction and logged in one of > * the qino_alloc calls below. If the device is readonly, > * temporarily switch to read-write to do this. > */ > if (XFS_IS_UQUOTA_ON(mp) && uip == NULL) { > - if ((error = xfs_qm_qino_alloc(mp, &uip, > + error = xfs_qm_qino_alloc(mp, &uip, > sbflags | XFS_SB_UQUOTINO, > - flags | XFS_QMOPT_UQUOTA))) > + flags | XFS_QMOPT_UQUOTA); > + if (error) > return XFS_ERROR(error); > > flags &= ~XFS_QMOPT_SBVERSION; > } > - if (XFS_IS_OQUOTA_ON(mp) && gip == NULL) { > - flags |= (XFS_IS_GQUOTA_ON(mp) ? > - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); > + if (XFS_IS_GQUOTA_ON(mp) && gip == NULL) { > error = xfs_qm_qino_alloc(mp, &gip, > - sbflags | XFS_SB_GQUOTINO, flags); > - if (error) { > - if (uip) > - IRELE(uip); > - > - return XFS_ERROR(error); > - } > + sbflags | XFS_SB_GQUOTINO, > + flags | XFS_QMOPT_GQUOTA); > + if (error) > + goto error_rele; > + } > + if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { > + error = xfs_qm_qino_alloc(mp, &pip, > + sbflags | XFS_SB_GQUOTINO, > + flags | XFS_QMOPT_PQUOTA); > + if (error) > + goto error_rele; > } > > mp->m_quotainfo->qi_uquotaip = uip; > mp->m_quotainfo->qi_gquotaip = gip; > + mp->m_quotainfo->qi_pquotaip = pip; > > return 0; > + > +error_rele: > + if (uip) > + IRELE(uip); > + if (gip) > + IRELE(gip); > + if (pip) > + IRELE(pip); > + return XFS_ERROR(error); > + > } > > STATIC void > @@ -1456,7 +1536,7 @@ xfs_qm_dqfree_one( > struct xfs_quotainfo *qi = mp->m_quotainfo; > > mutex_lock(&qi->qi_tree_lock); > - radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags), > + radix_tree_delete(xfs_dquot_tree(qi, dqp->q_core.d_flags), > be32_to_cpu(dqp->q_core.d_id)); > > qi->qi_dquots--; > @@ -1639,10 +1719,13 @@ xfs_qm_vop_dqalloc( > prid_t prid, > uint flags, > struct xfs_dquot **O_udqpp, > - struct xfs_dquot **O_gdqpp) > + struct xfs_dquot **O_gdqpp, > + struct xfs_dquot **O_pdqpp) > { > struct xfs_mount *mp = ip->i_mount; > - struct xfs_dquot *uq, *gq; > + struct xfs_dquot *uq = NULL; > + struct xfs_dquot *gq = NULL; > + struct xfs_dquot *pq = NULL; > int error; > uint lockflags; > > @@ -1667,7 +1750,6 @@ xfs_qm_vop_dqalloc( > } > } > > - uq = gq = NULL; > if ((flags & XFS_QMOPT_UQUOTA) && XFS_IS_UQUOTA_ON(mp)) { > if (ip->i_d.di_uid != uid) { > /* > @@ -1680,14 +1762,14 @@ xfs_qm_vop_dqalloc( > * holding ilock. > */ > xfs_iunlock(ip, lockflags); > - if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t) uid, > + error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t) uid, > XFS_DQ_USER, > XFS_QMOPT_DQALLOC | > XFS_QMOPT_DOWARN, > - &uq))) { > - ASSERT(error != ENOENT); > + &uq); > + ASSERT(error != ENOENT); > + if (error) > return error; > - } > /* > * Get the ilock in the right order. > */ > @@ -1706,16 +1788,15 @@ xfs_qm_vop_dqalloc( > if ((flags & XFS_QMOPT_GQUOTA) && XFS_IS_GQUOTA_ON(mp)) { > if (ip->i_d.di_gid != gid) { > xfs_iunlock(ip, lockflags); > - if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)gid, > + error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)gid, > XFS_DQ_GROUP, > XFS_QMOPT_DQALLOC | > XFS_QMOPT_DOWARN, > - &gq))) { > - if (uq) > - xfs_qm_dqrele(uq); > - ASSERT(error != ENOENT); > - return error; > - } > + &gq); > + ASSERT(error != ENOENT); > + if (error) > + goto error_rele; > + > xfs_dqunlock(gq); > lockflags = XFS_ILOCK_SHARED; > xfs_ilock(ip, lockflags); > @@ -1723,25 +1804,25 @@ xfs_qm_vop_dqalloc( > ASSERT(ip->i_gdquot); > gq = xfs_qm_dqhold(ip->i_gdquot); > } > - } else if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { > + } > + if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { > if (xfs_get_projid(ip) != prid) { > xfs_iunlock(ip, lockflags); > - if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, > + error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, > XFS_DQ_PROJ, > XFS_QMOPT_DQALLOC | > XFS_QMOPT_DOWARN, > - &gq))) { > - if (uq) > - xfs_qm_dqrele(uq); > - ASSERT(error != ENOENT); > - return (error); > - } > - xfs_dqunlock(gq); > + &pq); > + ASSERT(error != ENOENT); > + if (error) > + goto error_rele; > + > + xfs_dqunlock(pq); > lockflags = XFS_ILOCK_SHARED; > xfs_ilock(ip, lockflags); > } else { > - ASSERT(ip->i_gdquot); > - gq = xfs_qm_dqhold(ip->i_gdquot); > + ASSERT(ip->i_pdquot); > + pq = xfs_qm_dqhold(ip->i_pdquot); > } > } > if (uq) > @@ -1756,7 +1837,18 @@ xfs_qm_vop_dqalloc( > *O_gdqpp = gq; > else if (gq) > xfs_qm_dqrele(gq); > + if (O_pdqpp) > + *O_pdqpp = pq; > + else if (pq) > + xfs_qm_dqrele(pq); > return 0; > + > +error_rele: > + if (uq) > + xfs_qm_dqrele(uq); > + if (gq) > + xfs_qm_dqrele(gq); > + return error; > } > > /* > @@ -1804,15 +1896,21 @@ xfs_qm_vop_chown( > */ > int > xfs_qm_vop_chown_reserve( > - xfs_trans_t *tp, > - xfs_inode_t *ip, > - xfs_dquot_t *udqp, > - xfs_dquot_t *gdqp, > - uint flags) > + xfs_trans_t *tp, > + xfs_inode_t *ip, > + struct xfs_dquot *udqp, > + struct xfs_dquot *gdqp, > + struct xfs_dquot *pdqp, > + uint flags) > { > xfs_mount_t *mp = ip->i_mount; > uint delblks, blkflags, prjflags = 0; > - xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; > + struct xfs_dquot *unresudq = NULL; > + struct xfs_dquot *unresgdq = NULL; > + struct xfs_dquot *unrespdq = NULL; > + struct xfs_dquot *delblksudq = NULL; > + struct xfs_dquot *delblksgdq = NULL; > + struct xfs_dquot *delblkspdq = NULL; > int error; > > > @@ -1820,7 +1918,6 @@ xfs_qm_vop_chown_reserve( > ASSERT(XFS_IS_QUOTA_RUNNING(mp)); > > delblks = ip->i_delayed_blks; > - delblksudq = delblksgdq = unresudq = unresgdq = NULL; > blkflags = XFS_IS_REALTIME_INODE(ip) ? > XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS; > > @@ -1837,25 +1934,29 @@ xfs_qm_vop_chown_reserve( > unresudq = ip->i_udquot; > } > } > - if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { > - if (XFS_IS_PQUOTA_ON(ip->i_mount) && > - xfs_get_projid(ip) != be32_to_cpu(gdqp->q_core.d_id)) > - prjflags = XFS_QMOPT_ENOSPC; > - > - if (prjflags || > - (XFS_IS_GQUOTA_ON(ip->i_mount) && > - ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { > - delblksgdq = gdqp; > - if (delblks) { > - ASSERT(ip->i_gdquot); > - unresgdq = ip->i_gdquot; > - } > + if (XFS_IS_GQUOTA_ON(ip->i_mount) && gdqp && > + ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id)) { > + delblksgdq = gdqp; > + if (delblks) { > + ASSERT(ip->i_gdquot); > + unresgdq = ip->i_gdquot; > + } > + } > + > + if (XFS_IS_PQUOTA_ON(ip->i_mount) && pdqp && > + xfs_get_projid(ip) != be32_to_cpu(pdqp->q_core.d_id)) { > + prjflags = XFS_QMOPT_ENOSPC; > + delblkspdq = pdqp; > + if (delblks) { > + ASSERT(ip->i_pdquot); > + unrespdq = ip->i_pdquot; > } > } > > - if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, > - delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, > - flags | blkflags | prjflags))) > + error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, > + delblksudq, delblksgdq, delblkspdq, ip->i_d.di_nblocks, > + 1, flags | blkflags | prjflags); > + if (error) > return (error); > > /* > @@ -1868,15 +1969,17 @@ xfs_qm_vop_chown_reserve( > /* > * Do the reservations first. Unreservation can't fail. > */ > - ASSERT(delblksudq || delblksgdq); > - ASSERT(unresudq || unresgdq); > - if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, > - delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, > - flags | blkflags | prjflags))) > + ASSERT(delblksudq || delblksgdq || delblkspdq); > + ASSERT(unresudq || unresgdq || unrespdq); > + error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, > + delblksudq, delblksgdq, delblkspdq, > + (xfs_qcnt_t)delblks, 0, > + flags | blkflags | prjflags); > + if (error) > return (error); > xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, > - unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, > - blkflags); > + unresudq, unresgdq, unrespdq, > + -((xfs_qcnt_t)delblks), 0, blkflags); > } > > return (0); > @@ -1915,7 +2018,8 @@ xfs_qm_vop_create_dqattach( > struct xfs_trans *tp, > struct xfs_inode *ip, > struct xfs_dquot *udqp, > - struct xfs_dquot *gdqp) > + struct xfs_dquot *gdqp, > + struct xfs_dquot *pdqp) > { > struct xfs_mount *mp = tp->t_mountp; > > @@ -1935,13 +2039,18 @@ xfs_qm_vop_create_dqattach( > } > if (gdqp) { > ASSERT(ip->i_gdquot == NULL); > - ASSERT(XFS_IS_OQUOTA_ON(mp)); > - ASSERT((XFS_IS_GQUOTA_ON(mp) ? > - ip->i_d.di_gid : xfs_get_projid(ip)) == > - be32_to_cpu(gdqp->q_core.d_id)); > - > + ASSERT(XFS_IS_GQUOTA_ON(mp)); > + ASSERT(ip->i_d.di_gid == be32_to_cpu(gdqp->q_core.d_id)); > ip->i_gdquot = xfs_qm_dqhold(gdqp); > xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); > } > + if (pdqp) { > + ASSERT(ip->i_pdquot == NULL); > + ASSERT(XFS_IS_PQUOTA_ON(mp)); > + ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); > + > + ip->i_pdquot = xfs_qm_dqhold(pdqp); > + xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1); > + } > } > > diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h > index 5d16a6e..f23b06b 100644 > --- a/fs/xfs/xfs_qm.h > +++ b/fs/xfs/xfs_qm.h > @@ -44,9 +44,11 @@ extern struct kmem_zone *xfs_qm_dqtrxzone; > typedef struct xfs_quotainfo { > struct radix_tree_root qi_uquota_tree; > struct radix_tree_root qi_gquota_tree; > + struct radix_tree_root qi_pquota_tree; > struct mutex qi_tree_lock; > - xfs_inode_t *qi_uquotaip; /* user quota inode */ > - xfs_inode_t *qi_gquotaip; /* group quota inode */ > + struct xfs_inode *qi_uquotaip; /* user quota inode */ > + struct xfs_inode *qi_gquotaip; /* group quota inode */ > + struct xfs_inode *qi_pquotaip; /* project quota inode */ > struct list_head qi_lru_list; > struct mutex qi_lru_lock; > int qi_lru_count; > @@ -69,30 +71,45 @@ typedef struct xfs_quotainfo { > struct shrinker qi_shrinker; > } xfs_quotainfo_t; > > -#define XFS_DQUOT_TREE(qi, type) \ > - ((type & XFS_DQ_USER) ? \ > - &((qi)->qi_uquota_tree) : \ > - &((qi)->qi_gquota_tree)) > - > +static inline struct radix_tree_root * > +xfs_dquot_tree( > + struct xfs_quotainfo *qi, > + int type) > +{ > + switch (type) { > + case XFS_DQ_USER: > + return &qi->qi_uquota_tree; > + case XFS_DQ_GROUP: > + return &qi->qi_gquota_tree; > + case XFS_DQ_PROJ: > + return &qi->qi_pquota_tree; > + default: > + ASSERT(0); > + } > + return NULL; > +} > > extern int xfs_qm_calc_dquots_per_chunk(struct xfs_mount *mp, > unsigned int nbblks); > -extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); > -extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, > - xfs_dquot_t *, xfs_dquot_t *, long, long, uint); > -extern void xfs_trans_dqjoin(xfs_trans_t *, xfs_dquot_t *); > -extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); > +extern void xfs_trans_mod_dquot(xfs_trans_t *, struct xfs_dquot *, uint, long); > +extern void xfs_trans_dqjoin(xfs_trans_t *, struct xfs_dquot *); > +extern void xfs_trans_log_dquot(xfs_trans_t *, struct xfs_dquot *); > > /* > - * We keep the usr and grp dquots separately so that locking will be easier > - * to do at commit time. All transactions that we know of at this point > + * We keep the usr, grp, and prj dquots separately so that locking will be > + * easier to do at commit time. All transactions that we know of at this point > * affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value. > */ > +enum { > + XFS_QM_TRANS_USR = 0, > + XFS_QM_TRANS_GRP, > + XFS_QM_TRANS_PROJ, > + XFS_QM_TRANS_DQTYPES > +}; > #define XFS_QM_TRANS_MAXDQS 2 > -typedef struct xfs_dquot_acct { > - xfs_dqtrx_t dqa_usrdquots[XFS_QM_TRANS_MAXDQS]; > - xfs_dqtrx_t dqa_grpdquots[XFS_QM_TRANS_MAXDQS]; > -} xfs_dquot_acct_t; > +struct xfs_dquot_acct { > + struct xfs_dqtrx dqs[XFS_QM_TRANS_DQTYPES][XFS_QM_TRANS_MAXDQS]; > +}; > > /* > * Users are allowed to have a usage exceeding their softlimit for > diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c > index 2d02eac..72a4fdd 100644 > --- a/fs/xfs/xfs_qm_bhv.c > +++ b/fs/xfs/xfs_qm_bhv.c > @@ -115,7 +115,7 @@ xfs_qm_newmount( > (pquotaondisk && !XFS_IS_PQUOTA_ON(mp)) || > (!pquotaondisk && XFS_IS_PQUOTA_ON(mp)) || > (gquotaondisk && !XFS_IS_GQUOTA_ON(mp)) || > - (!gquotaondisk && XFS_IS_OQUOTA_ON(mp))) && > + (!gquotaondisk && XFS_IS_GQUOTA_ON(mp))) && > xfs_dev_is_read_only(mp, "changing quota state")) { > xfs_warn(mp, "please mount with%s%s%s%s.", > (!quotaondisk ? "out quota" : ""), > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index f005f1d..9bec772 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -119,7 +119,8 @@ xfs_qm_scall_quotaoff( > dqtype |= XFS_QMOPT_GQUOTA; > flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); > inactivate_flags |= XFS_GQUOTA_ACTIVE; > - } else if (flags & XFS_PQUOTA_ACCT) { > + } > + if (flags & XFS_PQUOTA_ACCT) { > dqtype |= XFS_QMOPT_PQUOTA; > flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); > inactivate_flags |= XFS_PQUOTA_ACTIVE; > @@ -214,10 +215,14 @@ xfs_qm_scall_quotaoff( > IRELE(q->qi_uquotaip); > q->qi_uquotaip = NULL; > } > - if ((dqtype & (XFS_QMOPT_GQUOTA|XFS_QMOPT_PQUOTA)) && q->qi_gquotaip) { > + if ((dqtype & XFS_QMOPT_GQUOTA) && q->qi_gquotaip) { > IRELE(q->qi_gquotaip); > q->qi_gquotaip = NULL; > } > + if ((dqtype & XFS_QMOPT_PQUOTA) && q->qi_pquotaip) { > + IRELE(q->qi_pquotaip); > + q->qi_pquotaip = NULL; > + } > > out_unlock: > mutex_unlock(&q->qi_quotaofflock); > @@ -853,9 +858,11 @@ xfs_dqrele_inode( > { > /* skip quota inodes */ > if (ip == ip->i_mount->m_quotainfo->qi_uquotaip || > - ip == ip->i_mount->m_quotainfo->qi_gquotaip) { > + ip == ip->i_mount->m_quotainfo->qi_gquotaip || > + ip == ip->i_mount->m_quotainfo->qi_pquotaip) { > ASSERT(ip->i_udquot == NULL); > ASSERT(ip->i_gdquot == NULL); > + ASSERT(ip->i_pdquot == NULL); > return 0; > } > > @@ -864,10 +871,14 @@ xfs_dqrele_inode( > xfs_qm_dqrele(ip->i_udquot); > ip->i_udquot = NULL; > } > - if (flags & (XFS_PQUOTA_ACCT|XFS_GQUOTA_ACCT) && ip->i_gdquot) { > + if ((flags & XFS_GQUOTA_ACCT) && ip->i_gdquot) { > xfs_qm_dqrele(ip->i_gdquot); > ip->i_gdquot = NULL; > } > + if ((flags & XFS_PQUOTA_ACCT) && ip->i_pdquot) { > + xfs_qm_dqrele(ip->i_pdquot); > + ip->i_pdquot = NULL; > + } > xfs_iunlock(ip, XFS_ILOCK_EXCL); > return 0; > } > diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h > index ccff1a6..fe46c0c 100644 > --- a/fs/xfs/xfs_quota.h > +++ b/fs/xfs/xfs_quota.h > @@ -272,10 +272,10 @@ typedef struct xfs_qoff_logformat { > * we didn't have the inode locked, the appropriate dquot(s) will be > * attached atomically. > */ > -#define XFS_NOT_DQATTACHED(mp, ip) ((XFS_IS_UQUOTA_ON(mp) &&\ > - (ip)->i_udquot == NULL) || \ > - (XFS_IS_OQUOTA_ON(mp) && \ > - (ip)->i_gdquot == NULL)) > +#define XFS_NOT_DQATTACHED(mp, ip) \ > + ((XFS_IS_UQUOTA_ON(mp) && (ip)->i_udquot == NULL) || \ > + (XFS_IS_GQUOTA_ON(mp) && (ip)->i_gdquot == NULL) || \ > + (XFS_IS_PQUOTA_ON(mp) && (ip)->i_pdquot == NULL)) > > #define XFS_QM_NEED_QUOTACHECK(mp) \ > ((XFS_IS_UQUOTA_ON(mp) && \ > @@ -330,17 +330,18 @@ extern int xfs_trans_reserve_quota_nblks(struct xfs_trans *, > struct xfs_inode *, long, long, uint); > extern int xfs_trans_reserve_quota_bydquots(struct xfs_trans *, > struct xfs_mount *, struct xfs_dquot *, > - struct xfs_dquot *, long, long, uint); > + struct xfs_dquot *, struct xfs_dquot *, long, long, uint); > > extern int xfs_qm_vop_dqalloc(struct xfs_inode *, uid_t, gid_t, prid_t, uint, > - struct xfs_dquot **, struct xfs_dquot **); > + struct xfs_dquot **, struct xfs_dquot **, struct xfs_dquot **); > extern void xfs_qm_vop_create_dqattach(struct xfs_trans *, struct xfs_inode *, > - struct xfs_dquot *, struct xfs_dquot *); > + struct xfs_dquot *, struct xfs_dquot *, struct xfs_dquot *); > extern int xfs_qm_vop_rename_dqattach(struct xfs_inode **); > extern struct xfs_dquot *xfs_qm_vop_chown(struct xfs_trans *, > struct xfs_inode *, struct xfs_dquot **, struct xfs_dquot *); > extern int xfs_qm_vop_chown_reserve(struct xfs_trans *, struct xfs_inode *, > - struct xfs_dquot *, struct xfs_dquot *, uint); > + struct xfs_dquot *, struct xfs_dquot *, > + struct xfs_dquot *, uint); > extern int xfs_qm_dqattach(struct xfs_inode *, uint); > extern int xfs_qm_dqattach_locked(struct xfs_inode *, uint); > extern void xfs_qm_dqdetach(struct xfs_inode *); > @@ -354,10 +355,12 @@ extern void xfs_qm_unmount_quotas(struct xfs_mount *); > #else > static inline int > xfs_qm_vop_dqalloc(struct xfs_inode *ip, uid_t uid, gid_t gid, prid_t prid, > - uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp) > + uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp, > + struct xfs_dquot **pdqp) > { > *udqp = NULL; > *gdqp = NULL; > + *pdqp = NULL; > return 0; > } > #define xfs_trans_dup_dqinfo(tp, tp2) > @@ -372,14 +375,15 @@ static inline int xfs_trans_reserve_quota_nblks(struct xfs_trans *tp, > } > static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, > struct xfs_mount *mp, struct xfs_dquot *udqp, > - struct xfs_dquot *gdqp, long nblks, long nions, uint flags) > + struct xfs_dquot *gdqp, struct xfs_dquot *pdqp, > + long nblks, long nions, uint flags) > { > return 0; > } > -#define xfs_qm_vop_create_dqattach(tp, ip, u, g) > +#define xfs_qm_vop_create_dqattach(tp, ip, u, g, p) > #define xfs_qm_vop_rename_dqattach(it) (0) > #define xfs_qm_vop_chown(tp, ip, old, new) (NULL) > -#define xfs_qm_vop_chown_reserve(tp, ip, u, g, fl) (0) > +#define xfs_qm_vop_chown_reserve(tp, ip, u, g, p, fl) (0) > #define xfs_qm_dqattach(ip, fl) (0) > #define xfs_qm_dqattach_locked(ip, fl) (0) > #define xfs_qm_dqdetach(ip) > @@ -393,8 +397,8 @@ static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, > > #define xfs_trans_unreserve_quota_nblks(tp, ip, nblks, ninos, flags) \ > xfs_trans_reserve_quota_nblks(tp, ip, -(nblks), -(ninos), flags) > -#define xfs_trans_reserve_quota(tp, mp, ud, gd, nb, ni, f) \ > - xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, nb, ni, \ > +#define xfs_trans_reserve_quota(tp, mp, ud, gd, pd, nb, ni, f) \ > + xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, pd, nb, ni, \ > f | XFS_QMOPT_RES_REGBLKS) > > extern int xfs_qm_dqcheck(struct xfs_mount *, xfs_disk_dquot_t *, > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 873fa5a..5feac04 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -560,14 +560,13 @@ xfs_showargs( > else if (mp->m_qflags & XFS_UQUOTA_ACCT) > seq_puts(m, "," MNTOPT_UQUOTANOENF); > > - /* Either project or group quotas can be active, not both */ > - > if (mp->m_qflags & XFS_PQUOTA_ACCT) { > if (mp->m_qflags & XFS_PQUOTA_ENFD) > seq_puts(m, "," MNTOPT_PRJQUOTA); > else > seq_puts(m, "," MNTOPT_PQUOTANOENF); > - } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { > + } > + if (mp->m_qflags & XFS_GQUOTA_ACCT) { > if (mp->m_qflags & XFS_GQUOTA_ENFD) > seq_puts(m, "," MNTOPT_GRPQUOTA); > else > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 5f23438..d69e50a 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -365,7 +365,9 @@ xfs_symlink( > int n; > xfs_buf_t *bp; > prid_t prid; > - struct xfs_dquot *udqp, *gdqp; > + struct xfs_dquot *udqp = NULL; > + struct xfs_dquot *gdqp = NULL; > + struct xfs_dquot *pdqp = NULL; > uint resblks; > > *ipp = NULL; > @@ -392,7 +394,7 @@ xfs_symlink( > * Make sure that we have allocated dquot(s) on disk. > */ > error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, > - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); > + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); > if (error) > goto std_return; > > @@ -433,7 +435,8 @@ xfs_symlink( > /* > * Reserve disk quota : blocks and inode. > */ > - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); > + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, > + pdqp, resblks, 1, 0); > if (error) > goto error_return; > > @@ -471,7 +474,7 @@ xfs_symlink( > /* > * Also attach the dquot(s) to it, if applicable. > */ > - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); > + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); > > if (resblks) > resblks -= XFS_IALLOC_SPACE_RES(mp); > @@ -570,6 +573,7 @@ xfs_symlink( > error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); > xfs_qm_dqrele(udqp); > xfs_qm_dqrele(gdqp); > + xfs_qm_dqrele(pdqp); > > *ipp = ip; > return 0; > @@ -583,6 +587,7 @@ xfs_symlink( > xfs_trans_cancel(tp, cancel_flags); > xfs_qm_dqrele(udqp); > xfs_qm_dqrele(gdqp); > + xfs_qm_dqrele(pdqp); > > if (unlock_dp_on_error) > xfs_iunlock(dp, XFS_ILOCK_EXCL); > diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c > index 8cdbd62..2bbad13 100644 > --- a/fs/xfs/xfs_trans_dquot.c > +++ b/fs/xfs/xfs_trans_dquot.c > @@ -103,8 +103,6 @@ xfs_trans_dup_dqinfo( > return; > > xfs_trans_alloc_dqinfo(ntp); > - oqa = otp->t_dqinfo->dqa_usrdquots; > - nqa = ntp->t_dqinfo->dqa_usrdquots; > > /* > * Because the quota blk reservation is carried forward, > @@ -113,7 +111,10 @@ xfs_trans_dup_dqinfo( > if(otp->t_flags & XFS_TRANS_DQ_DIRTY) > ntp->t_flags |= XFS_TRANS_DQ_DIRTY; > > - for (j = 0; j < 2; j++) { > + for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { > + oqa = otp->t_dqinfo->dqs[j]; > + nqa = ntp->t_dqinfo->dqs[j]; > + > for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { > if (oqa[i].qt_dquot == NULL) > break; > @@ -138,8 +139,6 @@ xfs_trans_dup_dqinfo( > oq->qt_ino_res = oq->qt_ino_res_used; > > } > - oqa = otp->t_dqinfo->dqa_grpdquots; > - nqa = ntp->t_dqinfo->dqa_grpdquots; > } > } > > @@ -166,8 +165,10 @@ xfs_trans_mod_dquot_byino( > > if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot) > (void) xfs_trans_mod_dquot(tp, ip->i_udquot, field, delta); > - if (XFS_IS_OQUOTA_ON(mp) && ip->i_gdquot) > + if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot) > (void) xfs_trans_mod_dquot(tp, ip->i_gdquot, field, delta); > + if (XFS_IS_PQUOTA_ON(mp) && ip->i_pdquot) > + (void) xfs_trans_mod_dquot(tp, ip->i_pdquot, field, delta); > } > > STATIC xfs_dqtrx_t * > @@ -178,15 +179,20 @@ xfs_trans_get_dqtrx( > int i; > xfs_dqtrx_t *qa; > > - qa = XFS_QM_ISUDQ(dqp) ? > - tp->t_dqinfo->dqa_usrdquots : tp->t_dqinfo->dqa_grpdquots; > + if (XFS_QM_ISUDQ(dqp)) > + qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_USR]; > + else if (XFS_QM_ISGDQ(dqp)) > + qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_GRP]; > + else if (XFS_QM_ISPDQ(dqp)) > + qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_PROJ]; > + else > + return NULL; > > for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { > if (qa[i].qt_dquot == NULL || > qa[i].qt_dquot == dqp) > return &qa[i]; > } > - > return NULL; > } > > @@ -339,12 +345,10 @@ xfs_trans_apply_dquot_deltas( > return; > > ASSERT(tp->t_dqinfo); > - qa = tp->t_dqinfo->dqa_usrdquots; > - for (j = 0; j < 2; j++) { > - if (qa[0].qt_dquot == NULL) { > - qa = tp->t_dqinfo->dqa_grpdquots; > + for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { > + qa = tp->t_dqinfo->dqs[j]; > + if (qa[0].qt_dquot == NULL) > continue; > - } > > /* > * Lock all of the dquots and join them to the transaction. > @@ -495,10 +499,6 @@ xfs_trans_apply_dquot_deltas( > ASSERT(dqp->q_res_rtbcount >= > be64_to_cpu(dqp->q_core.d_rtbcount)); > } > - /* > - * Do the group quotas next > - */ > - qa = tp->t_dqinfo->dqa_grpdquots; > } > } > > @@ -521,9 +521,10 @@ xfs_trans_unreserve_and_mod_dquots( > if (!tp->t_dqinfo || !(tp->t_flags & XFS_TRANS_DQ_DIRTY)) > return; > > - qa = tp->t_dqinfo->dqa_usrdquots; > > - for (j = 0; j < 2; j++) { > + for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { > + qa = tp->t_dqinfo->dqs[j]; > + > for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { > qtrx = &qa[i]; > /* > @@ -565,7 +566,6 @@ xfs_trans_unreserve_and_mod_dquots( > xfs_dqunlock(dqp); > > } > - qa = tp->t_dqinfo->dqa_grpdquots; > } > } > > @@ -736,8 +736,8 @@ error_return: > > /* > * Given dquot(s), make disk block and/or inode reservations against them. > - * The fact that this does the reservation against both the usr and > - * grp/prj quotas is important, because this follows a both-or-nothing > + * The fact that this does the reservation against user, group and > + * project quotas is important, because this follows a all-or-nothing > * approach. > * > * flags = XFS_QMOPT_FORCE_RES evades limit enforcement. Used by chown. > @@ -748,15 +748,16 @@ error_return: > */ > int > xfs_trans_reserve_quota_bydquots( > - xfs_trans_t *tp, > - xfs_mount_t *mp, > - xfs_dquot_t *udqp, > - xfs_dquot_t *gdqp, > - long nblks, > - long ninos, > - uint flags) > + struct xfs_trans *tp, > + struct xfs_mount *mp, > + struct xfs_dquot *udqp, > + struct xfs_dquot *gdqp, > + struct xfs_dquot *pdqp, > + long nblks, > + long ninos, > + uint flags) > { > - int resvd = 0, error; > + int error; > > if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) > return 0; > @@ -771,28 +772,34 @@ xfs_trans_reserve_quota_bydquots( > (flags & ~XFS_QMOPT_ENOSPC)); > if (error) > return error; > - resvd = 1; > } > > if (gdqp) { > error = xfs_trans_dqresv(tp, mp, gdqp, nblks, ninos, flags); > - if (error) { > - /* > - * can't do it, so backout previous reservation > - */ > - if (resvd) { > - flags |= XFS_QMOPT_FORCE_RES; > - xfs_trans_dqresv(tp, mp, udqp, > - -nblks, -ninos, flags); > - } > - return error; > - } > + if (error) > + goto unwind_usr; > + } > + > + if (pdqp) { > + error = xfs_trans_dqresv(tp, mp, pdqp, nblks, ninos, flags); > + if (error) > + goto unwind_grp; > } > > /* > * Didn't change anything critical, so, no need to log > */ > return 0; > + > +unwind_grp: > + flags |= XFS_QMOPT_FORCE_RES; > + if (gdqp) > + xfs_trans_dqresv(tp, mp, gdqp, -nblks, -ninos, flags); > +unwind_usr: > + flags |= XFS_QMOPT_FORCE_RES; > + if (udqp) > + xfs_trans_dqresv(tp, mp, udqp, -nblks, -ninos, flags); > + return error; > } > > > @@ -830,6 +837,7 @@ xfs_trans_reserve_quota_nblks( > */ > return xfs_trans_reserve_quota_bydquots(tp, mp, > ip->i_udquot, ip->i_gdquot, > + ip->i_pdquot, > nblks, ninos, flags); > } > > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index 1501f4f..cd0d133 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -498,6 +498,7 @@ xfs_create( > prid_t prid; > struct xfs_dquot *udqp = NULL; > struct xfs_dquot *gdqp = NULL; > + struct xfs_dquot *pdqp = NULL; > uint resblks; > uint log_res; > uint log_count; > @@ -516,7 +517,7 @@ xfs_create( > * Make sure that we have allocated dquot(s) on disk. > */ > error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, > - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); > + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); > if (error) > return error; > > @@ -568,7 +569,8 @@ xfs_create( > /* > * Reserve disk quota and the inode. > */ > - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); > + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, > + pdqp, resblks, 1, 0); > if (error) > goto out_trans_cancel; > > @@ -632,7 +634,7 @@ xfs_create( > * These ids of the inode couldn't have changed since the new > * inode has been locked ever since it was created. > */ > - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); > + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); > > error = xfs_bmap_finish(&tp, &free_list, &committed); > if (error) > @@ -644,6 +646,7 @@ xfs_create( > > xfs_qm_dqrele(udqp); > xfs_qm_dqrele(gdqp); > + xfs_qm_dqrele(pdqp); > > *ipp = ip; > return 0; > @@ -665,6 +668,7 @@ xfs_create( > > xfs_qm_dqrele(udqp); > xfs_qm_dqrele(gdqp); > + xfs_qm_dqrele(pdqp); > > if (unlock_dp_on_error) > xfs_iunlock(dp, XFS_ILOCK_EXCL); > @@ -1577,7 +1581,7 @@ xfs_free_file_space( > } > xfs_ilock(ip, XFS_ILOCK_EXCL); > error = xfs_trans_reserve_quota(tp, mp, > - ip->i_udquot, ip->i_gdquot, > + ip->i_udquot, ip->i_gdquot, ip->i_pdquot, > resblks, 0, XFS_QMOPT_RES_REGBLKS); > if (error) > goto error1; > Thanks, -Jeff From jeff.liu@oracle.com Sun May 12 23:24:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D84767F37 for ; Sun, 12 May 2013 23:24:46 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id BB0FA8F8037 for ; Sun, 12 May 2013 21:24:43 -0700 (PDT) X-ASG-Debug-ID: 1368419081-04cb6c53a421b2f0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id icfMENi9VqW7nJYF (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 21:24:42 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4D4Oeun021563 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 13 May 2013 04:24:41 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D4OdlP000222 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 13 May 2013 04:24:40 GMT Received: from abhmt107.oracle.com (abhmt107.oracle.com [141.146.116.59]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D4OdsS000127; Mon, 13 May 2013 04:24:39 GMT Received: from [192.168.1.103] (/114.248.198.58) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 12 May 2013 21:24:37 -0700 Message-ID: <51906AFF.2000306@oracle.com> Date: Mon, 13 May 2013 12:24:31 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Chandra Seetharaman CC: xfs@oss.sgi.com Subject: Re: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-4-git-send-email-sekharan@us.ibm.com> X-ASG-Orig-Subj: Re: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock In-Reply-To: <1368220889-25188-4-git-send-email-sekharan@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368419082 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130802 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/11/2013 05:21 AM, Chandra Seetharaman wrote: > Define a macro to check if the superblock has pquotino. > > Keep backward compatibilty by alowing mount of older superblock > with no separate pquota inode. > --- > fs/xfs/xfs_itable.c | 3 +- > fs/xfs/xfs_mount.c | 117 ++++++++++++++++++++++++++++++---------- > fs/xfs/xfs_qm.c | 29 +++++----- > fs/xfs/xfs_qm_syscalls.c | 32 +++++++++--- > fs/xfs/xfs_quota.h | 8 --- > fs/xfs/xfs_sb.h | 5 ++ > fs/xfs/xfs_super.c | 14 +++-- > fs/xfs/xfs_trans_dquot.c | 4 +- > include/uapi/linux/dqblk_xfs.h | 1 + > 9 files changed, 148 insertions(+), 65 deletions(-) > > diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c > index 2ea7d40..d80d58c 100644 > --- a/fs/xfs/xfs_itable.c > +++ b/fs/xfs/xfs_itable.c > @@ -43,7 +43,8 @@ xfs_internal_inum( > { > return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || > (xfs_sb_version_hasquota(&mp->m_sb) && > - (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); > + (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino || > + ino == mp->m_sb.sb_pquotino))); > } > > /* > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 1b79906..233f88e 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -601,21 +601,6 @@ xfs_sb_from_disk( > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > to->sb_qflags = be16_to_cpu(from->sb_qflags); > - if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > - (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > - XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > - xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > - "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > - force_quota_check = true; > - } > - if (to->sb_qflags & XFS_OQUOTA_ENFD) > - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > - XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > - if (to->sb_qflags & XFS_OQUOTA_CHKD) > - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > - XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > - to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > - > to->sb_flags = from->sb_flags; > to->sb_shared_vn = from->sb_shared_vn; > to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); > @@ -636,6 +621,44 @@ xfs_sb_from_disk( > to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > to->sb_lsn = be64_to_cpu(from->sb_lsn); > > + if (xfs_sb_version_has_pquota(to)) { > + if (to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits " > + "with version PQUOTINO. Quota check forced.\n"); > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > + force_quota_check = true; > + } > + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > + } else { > + if (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { > + xfs_notice(NULL, "Super block has XFS_[G|P]UOTA " > + "bits in version older than PQUOTINO. " > + "Quota check forced.\n"); > + > + to->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD); > + force_quota_check = true; > + } > + > + /* > + * On disk superblock qflags uses XFS_OQUOTA.* to support > + * either PQUOTA or GQUOTA. But, in memory qflags uses > + * XFS_PQUOTA.* or XFS_GQUOTA.* depending on which quota > + * is used. > + * Following block translates XFS_OQUOTA.* to either > + * GQUOTA or PQUOTA. > + */ > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > + > + } > + > if (force_quota_check) > to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); > } > @@ -657,27 +680,51 @@ xfs_sb_to_disk( > int first; > int size; > __uint16_t qflags = from->sb_qflags; > + xfs_ino_t gquotino = from->sb_gquotino; > > ASSERT(fields); > if (!fields) > return; > > - if (fields & XFS_SB_QFLAGS) { > + if (!xfs_sb_version_has_pquota(from)) { > + if (fields & XFS_SB_QFLAGS) { > + /* > + * The in-core version of sb_qflags do not have > + * XFS_OQUOTA_* flags, whereas the on-disk version > + * does. So, convert incore XFS_{PG}QUOTA_* flags > + * to on-disk XFS_OQUOTA_* flags. > + */ > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > + > + if (from->sb_qflags & > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > + qflags |= XFS_OQUOTA_ENFD; > + if (from->sb_qflags & > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > + qflags |= XFS_OQUOTA_CHKD; > + } > + > /* > - * The in-core version of sb_qflags do not have > - * XFS_OQUOTA_* flags, whereas the on-disk version > - * does. So, convert incore XFS_{PG}QUOTA_* flags > - * to on-disk XFS_OQUOTA_* flags. > + * On-disk version earlier than pquota doesn't have > + * sb_pquotino. so, we need to copy the value to gquotino. > */ > - qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > - XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > + if (fields & XFS_SB_PQUOTINO) { > + fields &= (__int64_t)~XFS_SB_PQUOTINO; > + fields |= (__int64_t)XFS_SB_GQUOTINO; > + gquotino = from->sb_pquotino; > + } > > - if (from->sb_qflags & > - (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > - qflags |= XFS_OQUOTA_ENFD; > - if (from->sb_qflags & > - (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > - qflags |= XFS_OQUOTA_CHKD; > + /* If any quota inodes are written, write all quota inodes */ > + if (fields & (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO)) > + fields |= (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO); > + > + } else { > + /* If any quota inodes are written, write all quota inodes */ > + if (fields & (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO > + | XFS_SB_PQUOTINO)) > + fields |= (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO > + | XFS_SB_PQUOTINO); > } > > while (fields) { > @@ -691,6 +738,8 @@ xfs_sb_to_disk( > memcpy(to_ptr + first, from_ptr + first, size); > } else if (f == XFS_SBS_QFLAGS) { > *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); > + } else if (f == XFS_SBS_GQUOTINO) { > + *(__be64 *)(to_ptr + first) = cpu_to_be64(gquotino); > } else { > switch (size) { > case 2: > @@ -872,6 +921,18 @@ reread: > */ > xfs_sb_from_disk(&mp->m_sb, XFS_BUF_TO_SBP(bp)); > > + if (!xfs_sb_version_has_pquota(&mp->m_sb) && XFS_IS_PQUOTA_ON(mp)) { > + /* > + * On disk superblock only has sb_gquotino, and in memory > + * superblock has both sb_gquotino and sb_pquotino. But, > + * only one them is supported at any point of time. > + * So, if PQUOTA is set in disk superblock, copy over > + * sb_gquotino to sb_pquotino. > + */ > + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino; > + mp->m_sb.sb_gquotino = NULLFSINO; > + } > + > /* > * We must be able to do sector-sized and sector-aligned IO. > */ > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > index 97912cb..41ccc3c 100644 > --- a/fs/xfs/xfs_qm.c > +++ b/fs/xfs/xfs_qm.c > @@ -516,7 +516,8 @@ xfs_qm_need_dqattach( > if (!XFS_NOT_DQATTACHED(mp, ip)) > return false; > if (ip->i_ino == mp->m_sb.sb_uquotino || > - ip->i_ino == mp->m_sb.sb_gquotino) > + ip->i_ino == mp->m_sb.sb_gquotino || > + ip->i_ino == mp->m_sb.sb_pquotino) > return false; > return true; > } > @@ -651,6 +652,7 @@ xfs_qm_dqdetach( > > ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_uquotino); > ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_gquotino); > + ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_pquotino); > if (ip->i_udquot) { > xfs_qm_dqrele(ip->i_udquot); > ip->i_udquot = NULL; > @@ -858,22 +860,21 @@ xfs_qm_qino_alloc( > spin_lock(&mp->m_sb_lock); > if (flags & XFS_QMOPT_SBVERSION) { > ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); > - ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | > - XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == > - (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | > - XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); > > xfs_sb_version_addquota(&mp->m_sb); > mp->m_sb.sb_uquotino = NULLFSINO; > mp->m_sb.sb_gquotino = NULLFSINO; > + mp->m_sb.sb_pquotino = NULLFSINO; > > /* qflags will get updated _after_ quotacheck */ > mp->m_sb.sb_qflags = 0; > } > if (flags & XFS_QMOPT_UQUOTA) > mp->m_sb.sb_uquotino = (*ip)->i_ino; > - else > + else if (flags & XFS_QMOPT_GQUOTA) > mp->m_sb.sb_gquotino = (*ip)->i_ino; > + else > + mp->m_sb.sb_pquotino = (*ip)->i_ino; > spin_unlock(&mp->m_sb_lock); > xfs_mod_sb(tp, sbfields); > > @@ -1185,7 +1186,9 @@ xfs_qm_dqusage_adjust( > * rootino must have its resources accounted for, not so with the quota > * inodes. > */ > - if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { > + if (ino == mp->m_sb.sb_uquotino || > + ino == mp->m_sb.sb_gquotino || > + ino == mp->m_sb.sb_pquotino) { > *res = BULKSTAT_RV_NOTHING; > return XFS_ERROR(EINVAL); > } > @@ -1466,19 +1469,17 @@ xfs_qm_init_quotainos( > if (error) > goto error_rele; > } > - /* Use sb_gquotino for now */ > if (XFS_IS_PQUOTA_ON(mp) && > - mp->m_sb.sb_gquotino != NULLFSINO) { > - ASSERT(mp->m_sb.sb_gquotino > 0); > - error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > + mp->m_sb.sb_pquotino != NULLFSINO) { > + ASSERT(mp->m_sb.sb_pquotino > 0); > + error = xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, > 0, 0, &pip); > if (error) > goto error_rele; > } > } else { > flags |= XFS_QMOPT_SBVERSION; > - sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | > - XFS_SB_GQUOTINO | XFS_SB_QFLAGS); > + sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_QFLAGS); > } > > /* > @@ -1505,7 +1506,7 @@ xfs_qm_init_quotainos( > } > if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { > error = xfs_qm_qino_alloc(mp, &pip, > - sbflags | XFS_SB_GQUOTINO, > + sbflags | XFS_SB_PQUOTINO, > flags | XFS_QMOPT_PQUOTA); > if (error) > goto error_rele; > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index 9bec772..65c0a7d 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -201,8 +201,7 @@ xfs_qm_scall_quotaoff( > /* > * If quotas is completely disabled, close shop. > */ > - if (((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET1) || > - ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET2)) { > + if ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_ALL) { > mutex_unlock(&q->qi_quotaofflock); > xfs_qm_destroy_quotainfo(mp); > return (0); > @@ -297,8 +296,10 @@ xfs_qm_scall_trunc_qfiles( > > if (flags & XFS_DQ_USER) > error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_uquotino); > - if (flags & (XFS_DQ_GROUP|XFS_DQ_PROJ)) > + if (flags & XFS_DQ_GROUP) > error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_gquotino); > + if (flags & XFS_DQ_PROJ) > + error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_pquotino); If remove the space used by both group and project quota all failed, the first error will be hidden. Actually, I'm confused to compare the code logical between the kernel and the user space even without this feature. i.e. xfsprogs/quota/state.c->remove_extents(): if (type & XFS_USER_QUOTA) { if (remove_qtype_extents(dir, XFS_USER_QUOTA) < 0) return; ^^^^^^^^ <-- So we will return and won't continue to deal with other quota types. However, in kernel part, we deal with those types all at once. } if (type & XFS_GROUP_QUOTA) { if (remove_qtype_extents(dir, XFS_GROUP_QUOTA) < 0) return; } else if (type & XFS_PROJ_QUOTA) { if (remove_qtype_extents(dir, XFS_PROJ_QUOTA) < 0) return; } > > return error ? error : error2; > } > @@ -412,17 +413,20 @@ xfs_qm_scall_getqstat( > struct fs_quota_stat *out) > { > struct xfs_quotainfo *q = mp->m_quotainfo; > - struct xfs_inode *uip, *gip; > - bool tempuqip, tempgqip; > + struct xfs_inode *uip = NULL; > + struct xfs_inode *gip = NULL; > + struct xfs_inode *pip = NULL; > + bool tempuqip = false; > + bool tempgqip = false; > + bool temppqip = false; > > - uip = gip = NULL; > - tempuqip = tempgqip = false; > memset(out, 0, sizeof(fs_quota_stat_t)); > > out->qs_version = FS_QSTAT_VERSION; > if (!xfs_sb_version_hasquota(&mp->m_sb)) { > out->qs_uquota.qfs_ino = NULLFSINO; > out->qs_gquota.qfs_ino = NULLFSINO; > + out->qs_pquota.qfs_ino = NULLFSINO; > return (0); > } > out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & > @@ -431,10 +435,13 @@ xfs_qm_scall_getqstat( > out->qs_pad = 0; > out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; > out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; > + if (&out->qs_gquota != &out->qs_pquota) > + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; > > if (q) { > uip = q->qi_uquotaip; > gip = q->qi_gquotaip; > + pip = q->qi_pquotaip; > } > if (!uip && mp->m_sb.sb_uquotino != NULLFSINO) { > if (xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > @@ -446,6 +453,11 @@ xfs_qm_scall_getqstat( > 0, 0, &gip) == 0) > tempgqip = true; > } > + if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { > + if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, > + 0, 0, &pip) == 0) > + temppqip = true; > + } > if (uip) { > out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; > out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; > @@ -458,6 +470,12 @@ xfs_qm_scall_getqstat( > if (tempgqip) > IRELE(gip); > } > + if (pip) { > + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; > + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; > + if (temppqip) > + IRELE(pip); > + } > if (q) { > out->qs_incoredqs = q->qi_dquots; > out->qs_btimelimit = q->qi_btimelimit; > diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h > index fe46c0c..be51581 100644 > --- a/fs/xfs/xfs_quota.h > +++ b/fs/xfs/xfs_quota.h > @@ -285,14 +285,6 @@ typedef struct xfs_qoff_logformat { > (XFS_IS_PQUOTA_ON(mp) && \ > (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) > > -#define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > - XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ > - XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) > - > -#define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ > - XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) > - > #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ > XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ > diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h > index 2de58a8..3745b73 100644 > --- a/fs/xfs/xfs_sb.h > +++ b/fs/xfs/xfs_sb.h > @@ -618,6 +618,11 @@ xfs_sb_has_incompat_log_feature( > return (sbp->sb_features_log_incompat & feature) != 0; > } > > +static inline int xfs_sb_version_has_pquota(xfs_sb_t *sbp) > +{ > + return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5; > +} > + > /* > * end of superblock version macros > */ > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 5feac04..01019d9 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -420,12 +420,6 @@ xfs_parseargs( > } > #endif > > - if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && > - (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { > - xfs_warn(mp, "cannot mount with both project and group quota"); > - return EINVAL; > - } > - > if ((dsunit && !dswidth) || (!dsunit && dswidth)) { > xfs_warn(mp, "sunit and swidth must be specified together"); > return EINVAL; > @@ -1388,6 +1382,14 @@ xfs_finish_flags( > return XFS_ERROR(EROFS); > } > > + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && > + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) && > + !xfs_sb_version_has_pquota(&mp->m_sb)) { > + xfs_warn(mp, "Super block does not support " > + "project and group quota together"); I have been teached by Dave Chinner in another patch recently that it's better to adjust the warning message to one line if possible. > + return XFS_ERROR(EINVAL); > + } > + > return 0; > } > > diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c > index 2bbad13..fee905b 100644 > --- a/fs/xfs/xfs_trans_dquot.c > +++ b/fs/xfs/xfs_trans_dquot.c > @@ -157,7 +157,8 @@ xfs_trans_mod_dquot_byino( > if (!XFS_IS_QUOTA_RUNNING(mp) || > !XFS_IS_QUOTA_ON(mp) || > ip->i_ino == mp->m_sb.sb_uquotino || > - ip->i_ino == mp->m_sb.sb_gquotino) > + ip->i_ino == mp->m_sb.sb_gquotino || > + ip->i_ino == mp->m_sb.sb_pquotino) > return; > > if (tp->t_dqinfo == NULL) > @@ -825,6 +826,7 @@ xfs_trans_reserve_quota_nblks( > > ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); > ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); > + ASSERT(ip->i_ino != mp->m_sb.sb_pquotino); > > ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > ASSERT((flags & ~(XFS_QMOPT_FORCE_RES | XFS_QMOPT_ENOSPC)) == > diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h > index 8655280..f17e3bb 100644 > --- a/include/uapi/linux/dqblk_xfs.h > +++ b/include/uapi/linux/dqblk_xfs.h > @@ -155,6 +155,7 @@ typedef struct fs_quota_stat { > __s8 qs_pad; /* unused */ > fs_qfilestat_t qs_uquota; /* user quota storage information */ > fs_qfilestat_t qs_gquota; /* group quota storage information */ > +#define qs_pquota qs_gquota > __u32 qs_incoredqs; /* number of dquots incore */ > __s32 qs_btimelimit; /* limit for blks timer */ > __s32 qs_itimelimit; /* limit for inodes timer */ > Thanks, -Jeff From jeff.liu@oracle.com Sun May 12 23:29:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EB79A7F37 for ; Sun, 12 May 2013 23:29:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C963D8F8039 for ; Sun, 12 May 2013 21:29:11 -0700 (PDT) X-ASG-Debug-ID: 1368419350-04cbb05fe5222fe0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id IwP3C7Q2LF9vq5pt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 21:29:10 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4D4T9Pn024479 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 13 May 2013 04:29:09 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D4T8Ol015290 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Mon, 13 May 2013 04:29:08 GMT Received: from abhmt103.oracle.com (abhmt103.oracle.com [141.146.116.55]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4D4T8rS015284; Mon, 13 May 2013 04:29:08 GMT Received: from [192.168.1.103] (/114.248.198.58) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 12 May 2013 21:29:07 -0700 Message-ID: <51906C0E.4010207@oracle.com> Date: Mon, 13 May 2013 12:29:02 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Chandra Seetharaman CC: xfs@oss.sgi.com Subject: Re: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-5-git-send-email-sekharan@us.ibm.com> X-ASG-Orig-Subj: Re: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat In-Reply-To: <1368220889-25188-5-git-send-email-sekharan@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368419350 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130802 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/11/2013 05:21 AM, Chandra Seetharaman wrote: > Added appropriate pads and code for backward compatibility. > > Copied over the old version as it is different from the newer padded > version. > > New callers of the system call have to just set the version of the data > structure being passed, and kernel will fill as much data as requested. > > Signed-off-by: Chandra Seetharaman > --- > fs/gfs2/quota.c | 3 --- > fs/quota/quota.c | 40 ++++++++++++++++++++++++++++++++++++++-- > fs/xfs/xfs_qm_syscalls.c | 4 ---- > include/uapi/linux/dqblk_xfs.h | 38 ++++++++++++++++++++++++++++++++++++-- > 4 files changed, 74 insertions(+), 11 deletions(-) > > diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c > index c7c840e..ca0dccd 100644 > --- a/fs/gfs2/quota.c > +++ b/fs/gfs2/quota.c > @@ -1443,9 +1443,6 @@ static int gfs2_quota_get_xstate(struct super_block *sb, > { > struct gfs2_sbd *sdp = sb->s_fs_info; > > - memset(fqs, 0, sizeof(struct fs_quota_stat)); > - fqs->qs_version = FS_QSTAT_VERSION; > - > switch (sdp->sd_args.ar_quota) { > case GFS2_QUOTA_ON: > fqs->qs_flags |= (FS_QUOTA_UDQ_ENFD | FS_QUOTA_GDQ_ENFD); > diff --git a/fs/quota/quota.c b/fs/quota/quota.c > index c7314f1..510464e 100644 > --- a/fs/quota/quota.c > +++ b/fs/quota/quota.c > @@ -207,12 +207,48 @@ static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr) > static int quota_getxstate(struct super_block *sb, void __user *addr) > { > struct fs_quota_stat fqs; > - int ret; > + struct fs_quota_stat_v1 fqs_v1; > + int ret, size; > + void *cp = &fqs; > > if (!sb->s_qcop->get_xstate) > return -ENOSYS; > + > + memset(&fqs, 0, sizeof(struct fs_quota_stat)); > + if (copy_from_user(&fqs, addr, 1)) /* just get the version */ > + return -EFAULT; > + > + switch (fqs.qs_version) { > + case FS_QSTAT_VERSION_2: > + size = FS_QSTAT_V2_SIZE; > + break; > + default: > + fqs.qs_version = FS_QSTAT_VERSION; > + /* fallthrough */ > + case FS_QSTAT_VERSION: > + size = FS_QSTAT_V1_SIZE; > + cp = &fqs_v1; > + } > + > ret = sb->s_qcop->get_xstate(sb, &fqs); > - if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) > + if (ret) > + return ret; > + > + if (fqs.qs_version == FS_QSTAT_VERSION) { > + fqs_v1.qs_version = fqs.qs_version; > + fqs_v1.qs_flags = fqs.qs_flags; > + fqs_v1.qs_pad = 0; > + fqs_v1.qs_uquota = fqs.qs_uquota; > + fqs_v1.qs_gquota = fqs.qs_gquota; > + fqs_v1.qs_incoredqs = fqs.qs_incoredqs; > + fqs_v1.qs_btimelimit = fqs.qs_btimelimit; > + fqs_v1.qs_itimelimit = fqs.qs_itimelimit; > + fqs_v1.qs_rtbtimelimit = fqs.qs_rtbtimelimit; > + fqs_v1.qs_bwarnlimit = fqs.qs_bwarnlimit; > + fqs_v1.qs_iwarnlimit = fqs.qs_iwarnlimit; > + } > + > + if (copy_to_user(addr, &cp, size)) > return -EFAULT; > return ret; > } > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index 65c0a7d..c27b0e4 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -420,9 +420,6 @@ xfs_qm_scall_getqstat( > bool tempgqip = false; > bool temppqip = false; > > - memset(out, 0, sizeof(fs_quota_stat_t)); > - > - out->qs_version = FS_QSTAT_VERSION; > if (!xfs_sb_version_hasquota(&mp->m_sb)) { > out->qs_uquota.qfs_ino = NULLFSINO; > out->qs_gquota.qfs_ino = NULLFSINO; > @@ -432,7 +429,6 @@ xfs_qm_scall_getqstat( > out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & > (XFS_ALL_QUOTA_ACCT| > XFS_ALL_QUOTA_ENFD)); > - out->qs_pad = 0; > out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; > out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; > if (&out->qs_gquota != &out->qs_pquota) > diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h > index f17e3bb..d9629c1 100644 > --- a/include/uapi/linux/dqblk_xfs.h > +++ b/include/uapi/linux/dqblk_xfs.h > @@ -18,6 +18,7 @@ > #define _LINUX_DQBLK_XFS_H > > #include > +#include > > /* > * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). > @@ -137,8 +138,12 @@ typedef struct fs_disk_quota { > * Provides a centralized way to get meta information about the quota subsystem. > * eg. space taken up for user and group quotas, number of dquots currently > * incore. > + * User space caller should set qs_version to the appropriate version > + * of the fs_quota_stat data structure they are providing. Not providing > + * a version will be treated as FS_QSTAT_VERSION. > */ > #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ > +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ > > /* > * Some basic information about 'quota files'. > @@ -149,19 +154,48 @@ typedef struct fs_qfilestat { > __u32 qfs_nextents; /* number of extents */ > } fs_qfilestat_t; > > +typedef struct fs_quota_stat_v1 { > + __s8 qs_version; /* version number for future changes */ > + __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ > + __u8 qs_pad; /* unused */ > + fs_qfilestat_t qs_uquota; /* user quota storage information */ > + fs_qfilestat_t qs_gquota; /* group quota storage information */ > + __u32 qs_incoredqs; /* number of dquots incore */ > + __s32 qs_btimelimit; /* limit for blks timer */ > + __s32 qs_itimelimit; /* limit for inodes timer */ > + __s32 qs_rtbtimelimit;/* limit for rt blks timer */ > + __u16 qs_bwarnlimit; /* limit for num warnings */ > + __u16 qs_iwarnlimit; /* limit for num warnings */ > +} fs_quota_stat_v1_t; Dave has mentioned that we should not introduce typedef again. :-P. > + > typedef struct fs_quota_stat { > __s8 qs_version; /* version number for future changes */ > + __u8 qs_pad1; /* unused */ > __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ > - __s8 qs_pad; /* unused */ > + __u8 qs_pad2[4]; /* unused */ > fs_qfilestat_t qs_uquota; /* user quota storage information */ > fs_qfilestat_t qs_gquota; /* group quota storage information */ > -#define qs_pquota qs_gquota > __u32 qs_incoredqs; /* number of dquots incore */ ... > __s32 qs_btimelimit; /* limit for blks timer */ > __s32 qs_itimelimit; /* limit for inodes timer */ > __s32 qs_rtbtimelimit;/* limit for rt blks timer */ Found trailing whitespace for above three lines when applying this patch. > __u16 qs_bwarnlimit; /* limit for num warnings */ > __u16 qs_iwarnlimit; /* limit for num warnings */ > + __u8 qs_pad3[4]; /* unused */ > + fs_qfilestat_t qs_pquota; /* project quota storage information */ > + /* End of Data structure for FS_QSTAT_VERSION_2 */ > } fs_quota_stat_t; > > +/* > + * Since Version 1 did not have padding at appropriate places, > + * a new data structure has been defined for the older version to > + * provide backward compatibility. > + * Future extentions of this data structure won't require new > + * data structure definitions as the current one can be extended > + * with the logic and padding in place now. > + */ > +#define FS_QSTAT_V1_SIZE (sizeof(struct fs_quota_stat_v1)) > +#define FS_QSTAT_V2_SIZE (offsetof(struct fs_quota_stat, qs_pquota) + \ > + sizeof(fs_qfilestat_t)) > + > #endif /* _LINUX_DQBLK_XFS_H */ > Thanks, -Jeff From yatcoc@wvuhealthcare.com Mon May 13 00:44:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=EMAIL_URI_PHISH,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BD2E929DF8 for ; Mon, 13 May 2013 00:44:28 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9D6A48F8037 for ; Sun, 12 May 2013 22:44:25 -0700 (PDT) X-ASG-Debug-ID: 1368423863-04cbb05fe5226640001-w1Z2WR Received: from ironmail.rcbhsc.wvu.edu (mail.rcbhsc.wvu.edu [157.182.216.24]) by cuda.sgi.com with ESMTP id 73p8ceieAHXcaegL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 May 2013 22:44:23 -0700 (PDT) X-Barracuda-Envelope-From: yatcoc@wvuhealthcare.com X-Barracuda-Apparent-Source-IP: 157.182.216.24 Received: from ([172.17.21.241]) by ironmail.rcbhsc.wvu.edu with ESMTP with TLS id J041124058.16270598; Sun, 12 May 2013 22:50:53 -0400 Received: from NT-EXMB2.wvuh.wvuhs.com ([169.254.2.33]) by VM-EXHUBCAS1.wvuh.wvuhs.com ([172.17.21.241]) with mapi id 14.01.0323.003; Sun, 12 May 2013 22:50:52 -0400 From: "Yatco, Corazon S" To: "service@webmail.com" Subject: Attention Thread-Topic: Attention X-ASG-Orig-Subj: Attention Thread-Index: Ac5PhK0sSvLz+PaaRB+CTz1jWsZ4ZQ== Date: Mon, 13 May 2013 02:50:50 +0000 Message-ID: <1E27462E11A0FA4AB4F29ACDB8CEE1125A0CCE9A@NT-EXMB2.wvuh.wvuhs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.17.22.251] MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="_000_1E27462E11A0FA4AB4F29ACDB8CEE1125A0CCE9ANTEXMB2wvuhwvuh_" X-Barracuda-Connect: mail.rcbhsc.wvu.edu[157.182.216.24] X-Barracuda-Start-Time: 1368423863 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.52 X-Barracuda-Spam-Status: No, SCORE=0.52 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC7_SA578_CH, HTML_MESSAGE, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130806 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC7_SA578_CH Custom Rule SA578_CH --_000_1E27462E11A0FA4AB4F29ACDB8CEE1125A0CCE9ANTEXMB2wvuhwvuh_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Your Mailbox Has Exceeded It Storage Limit As Set By Your Administrator,Cli= ck Below to complete update on your storage limit quota=0D=0A=0D=0A=0D=0ACl= ick Here=0D=0A=0D=0APlease note th= at you have within 24 hours to complete this update=2E because you might lo= se access to your Email Box=2E=0D=0A=0D=0ASystem Administrator=0D=0A=0D=0A= =0D=0A --_000_1E27462E11A0FA4AB4F29ACDB8CEE1125A0CCE9ANTEXMB2wvuhwvuh_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable =0D=0A=0D=0A=0D=0A=0D=0A=0D=0A= =0D=0A
Your Mailbox Has Exceeded It Storage Limit As Set By Your Administrato= r,Click Below to complete update on your storage=0D=0A limit quota=0D=0A=0D=0A<= div style=3D"font-family: 'Times New Roman'; font-size: medium;">
=0D=0A=

Click Here

= =0D=0A
=0D=0A

=0D=0A
=0D=0A
Please note that you have within 24 hours to complete= this update=2E because you might lose access to your Email Box=2E
=0D= =0A
=0D=0ASystem Administrator 
=0D=0A=0D=0A=0D= =0A=0D=0A=0D=0A --_000_1E27462E11A0FA4AB4F29ACDB8CEE1125A0CCE9ANTEXMB2wvuhwvuh_-- From james.dingwall@zynstra.com Mon May 13 03:59:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B70087F50 for ; Mon, 13 May 2013 03:59:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 95A52304066 for ; Mon, 13 May 2013 01:59:49 -0700 (PDT) X-ASG-Debug-ID: 1368435586-04cb6c53a422c100001-NocioJ Received: from emea01-db3-obe.outbound.protection.outlook.com (mail-db3lp0082.outbound.protection.outlook.com [213.199.154.82]) by cuda.sgi.com with ESMTP id U3dS9m9Mu3WDIzz6 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 01:59:47 -0700 (PDT) X-Barracuda-Envelope-From: james.dingwall@zynstra.com X-Barracuda-Apparent-Source-IP: 213.199.154.82 Received: from AMXPRD0511HT003.eurprd05.prod.outlook.com (157.56.250.85) by DB3PR03MB042.eurprd03.prod.outlook.com (10.242.136.15) with Microsoft SMTP Server (TLS) id 15.0.680.19; Mon, 13 May 2013 08:59:45 +0000 Message-ID: <5190AB76.5050108@zynstra.com> Date: Mon, 13 May 2013 09:59:34 +0100 From: James Dingwall User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0 SeaMonkey/2.17.1 MIME-Version: 1.0 To: Subject: Re: Cleancache support in XFS References: <51810CED.4080003@zynstra.com> X-ASG-Orig-Subj: Re: Cleancache support in XFS In-Reply-To: <51810CED.4080003@zynstra.com> Content-Type: multipart/mixed; boundary="------------060404000606020908030506" X-Originating-IP: [157.56.250.85] X-ClientProxiedBy: DB3PR03CA010.eurprd03.prod.outlook.com (10.242.134.20) To DB3PR03MB042.eurprd03.prod.outlook.com (10.242.136.15) X-Forefront-Antispam-Report: SFV:SKI;SFS:;DIR:OUT;SFP:;SCL:0;SRVR:DB3PR03MB042;H:AMXPRD0511HT003.eurprd05.prod.outlook.com;LANG:; X-OriginatorOrg: zynstra.com X-Barracuda-Connect: mail-db3lp0082.outbound.protection.outlook.com[213.199.154.82] X-Barracuda-Start-Time: 1368435587 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130820 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --------------060404000606020908030506 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit James Dingwall wrote: > --- xfs_super.c 2013-04-29 10:28:22.000000000 +0100 > +++ xfs_super.cleancache.c 2013-05-01 13:22:44.367763564 +0100 > @@ -61,6 +61,7 @@ > #include > #include > #include > +#include > > static const struct super_operations xfs_super_operations; > static kmem_zone_t *xfs_ioend_zone; > @@ -1489,6 +1490,8 @@ > goto out_unmount; > } > > + cleancache_init_fs(sb); > + > return 0; > > out_filestream_unmount: I have tested this patch with xfstests (dd3b5268312e0518ae695e8ee2a618f13805c425) and the output is attached. I had four reported failures with and without, one seems due to my locale settings but I don't know what to make of the others. These were the commands that I ran to prepare my system and execute the tests. If it would be worth performing more runs or using a different group of tests please suggest what it would be worth doing. I have also published the patch in git at: https://github.com/JKDingwall/linux.git xfs-enable-cleancache Thanks, James # mkfs -t xfs /dev/xvdc1 meta-data=/dev/xvdc1 isize=256 agcount=4, agsize=1048512 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=4194048, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # mkdir /tmp/test # mkdir /tmp/scratch # TEST_DEV="/dev/xvdc1" ; export TEST_DEV # TEST_DIR="/tmp/test" ; export TEST_DIR # SCRATCH_DEV="/dev/xvdd1" ; export SCRATCH_DEV # SCRATCH_MNT="/tmp/scratch" ; export SCRATCH_MNT # mount /dev/xvdc1 /tmp/test # ./check -xfs -g rw # run 1 - 3.9.0 with cleancache patch # ./check -xfs -g rw # run 3 - 3.9.1 no patch --------------060404000606020908030506 Content-Type: application/gzip; name="xfstests.1.out.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="xfstests.1.out.gz" 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 --------------060404000606020908030506 Content-Type: application/gzip; name="xfstests.3.out.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="xfstests.3.out.gz" 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 --------------060404000606020908030506-- From zimmer@hotufi.net Mon May 13 04:11:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=HTML_MESSAGE,MPART_ALT_DIFF, SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D21FB29DF8 for ; Mon, 13 May 2013 04:11:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A379F8F8049 for ; Mon, 13 May 2013 02:11:53 -0700 (PDT) X-ASG-Debug-ID: 1368436309-04cbb05fe522f010001-NocioJ Received: from hot-smtpauth1.sdv.fr (hot-smtpauth1.sdv.fr [212.95.71.159]) by cuda.sgi.com with ESMTP id jdmVNAShy7vuABRy for ; Mon, 13 May 2013 02:11:50 -0700 (PDT) X-Barracuda-Envelope-From: zimmer@hotufi.net X-Barracuda-Apparent-Source-IP: 212.95.71.159 Received: from userPC (unknown [213.57.226.119]) by hot-smtpauth1.sdv.fr (Postfix) with ESMTPSA id D682C8040; Mon, 13 May 2013 11:09:49 +0200 (CEST) From: =?windows-1255?B?8vDh7A==?= To: =?windows-1255?B?8vDh7A==?= Subject: =?windows-1255?B?Rlc6IPbp7vgg4Onr5frpIOHu5+n4IPLu7ukgLSD05fjp5CDy6ezp+g==?= Date: Mon, 13 May 2013 12:09:46 +0300 X-ASG-Orig-Subj: =?windows-1255?B?Rlc6IPbp7vgg4Onr5frpIOHu5+n4IPLu7ukgLSD05fjp5CDy6ezp+g==?= Message-ID: <000601ce4fb9$dfe78840$9fb698c0$@net> MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_000_0007_01CE4FD3.0534E750" X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: Ac4on42hl3fQBQAjT7a0Qcr841fDkwAAFtVwAAAH9LAAuAaD4AAKeaZgAARz2wAA+RJnwABC+T+gAPrImOAAASOIAAAAJsDQARvokrAAKNEkQAWCSjCg Content-Language: he X-Barracuda-Connect: hot-smtpauth1.sdv.fr[212.95.71.159] X-Barracuda-Start-Time: 1368436309 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.56 X-Barracuda-Spam-Status: No, SCORE=0.56 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA090e, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, HTML_MESSAGE, MPART_ALT_DIFF, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130820 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 HTML_MESSAGE BODY: HTML included in message 0.14 MPART_ALT_DIFF BODY: HTML and text parts are different 0.40 BSF_SC0_SA090e Custom Rule SA090e 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain æåäé äåãòä îøåáú çì÷éí áúáðéú MIME. ------=_NextPart_000_0007_01CE4FD3.0534E750 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0008_01CE4FD3.0534E750" ------=_NextPart_001_0008_01CE4FD3.0534E750 Content-Type: text/plain; charset="windows-1255" Content-Transfer-Encoding: 7bit http://www.kitim.co.il/images/baner/m.jpg ------=_NextPart_001_0008_01CE4FD3.0534E750 Content-Type: text/html; charset="windows-1255" Content-Transfer-Encoding: quoted-printable

 

3D"http://www.kitim.co.il/images/baner/m.jpg"

------=_NextPart_001_0008_01CE4FD3.0534E750-- ------=_NextPart_000_0007_01CE4FD3.0534E750 Content-Type: image/jpeg; name="image002.jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAQ/AwEDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD19tJ0 Ybt2k2O4DhTboD/Knf2LpbRA/wBk2W4DP/Hun+FWRCm5FmO6QLy5qTzcqdmdx4NICkuj6VJHuOk2 Ix/07p/hTTpGjvE4GmWQz3Fsn+FW4ypk4YhWHfsafJCNylcrj070AZkuh6WYwBpVmcr977OmV/DF Oh0PTHjCjTLI45A+zp/hWipAjG0nnIBPUfWk2zZaMALv53DtQBQGmaTuUf2TYAH+H7OmeOvanx6P o/mn/iU2QUf9O6f4VMYQjMwRjJt5J6H3qRCHBbdmNx19DQBUfRtJLs39lWRKcAC3Tn9KjTSNODCe XTLAL02/Zk4/SrkSrGzCRxIZGz14FPYs03y7QiDoDQBSk0nS922HS7BiOS32dP8ACpf7F0mOTP8A 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 JbVGXNZJ/KSuvvQ009hOvBpAoHQV1mraSdTuYpILm2QCMLtLck/hUWnWPl2Op2DzQiXcEDMcDp+d fPQ4tws8Iq6Xv6c0dbxTkot3tra9yPaq1zmaTaM5wK1L7RJrC3Wd54ZEZwg2E9TSS6O1vfpaT3UM e5N/mHO0e1exTzvAVIqcKl0+bo/s/Fpa+lyudGbRWleaNNa232mOaK4g7vEen1qhFH5syR71TcwG 5ug9zXThsfhsVSdajK8Ve/lbdNbp+Vhpp6ojCgdBS9a2f+EeeVW+y31tcOvJRW5qlZ6bNeJcsrqn 2ddzB8578fpXLTzvAVKcqkaitG17ppq7srpq+r20FzxZS2j0FLgZz3rTs9GN1Yi7e7hgjLFRvzUd /pM1giSmSOWBzhZIzkVUM5wM8Q8Mqnv3atZ7rdXtZvyTDnV7FAADoKt6XqEulapbX8KI8lu4dVfo SPXFXV8OXPmfNPCsO0N5xOF57fWqd7pk1jeJbzMmHxtkH3SPWppZxl2Km6FOopNpu2u3X523W/kC lF6XI9Qu31HUbi9lVVknkaRgvQEnPFVyAetbS+HvNJWDUrSWQfwA9ayZ4ZLeZ4ZVKyIcEGtMFmeD xTdLDzu4razTt6NJ28wUk9iPFGAO1FFeiUOklkmIMsjyFRgb2JwPbNNwM9K1bfRo54o2/tO1R3AI Qnke1QzaTPbX8dpO6RmQ/JIfumvLp5zgJTdGM/eSbtZrRb2utbeVyVKJn7V9B+VGBjGOK1F0K6Op NYs8auqbw5ztI9qLXSEuYVc6jbRsxICMeeuKUs8y+Mef2l1ZPRN6Su09E97P9Q54mYAB0FFXLvTZ 7G7S3nKLvxtfPyketXl8P+cSsGpWksg/gB606ud4ClTjVnU92Sumk2reqTS+YOaWpBNrlxP4cttE aKIW9vM0yuM7iTng9sc1l4GMYGKkmhkt5nhlUrIhwQau6ZpR1LcFuYo2BwEb7x4zwK2q4rC4PDvE TlaG99WteulxtpK5nAAdBUglkERiEjiNjkoGO0n3Faz+HZSr/Z7u3ndM7o1OGqrp+lPfxzSefHDH D99nzx/nFc0c8y6dGVZVFyxtfR3V9tLX16aC542uZ+BjGOKNo9BWjd6RLb232qKaK5t84MkR6fUU ybTJYLS1uGkQpcHCgZyv1renmuDqKLhUXvNpb3uldq26aWtnYOZFHavoPyowPQVuDwzMTgX1oT7M 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 lYs7eWFOAM53YxQA/wCzP6P+dFVvOn9vzooA/9k= ------=_NextPart_000_0007_01CE4FD3.0534E750-- From gnehzuil.liu@gmail.com Mon May 13 04:15:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 56FE27F50 for ; Mon, 13 May 2013 04:15:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id DD7A4AC001 for ; Mon, 13 May 2013 02:15:01 -0700 (PDT) X-ASG-Debug-ID: 1368436500-04bdf04223229ff0001-NocioJ Received: from mail-pd0-f179.google.com (mail-pd0-f179.google.com [209.85.192.179]) by cuda.sgi.com with ESMTP id LfAPvXNxW1WQDrNk (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 02:15:00 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.179] Received: by mail-pd0-f179.google.com with SMTP id q10so4235706pdj.24 for ; Mon, 13 May 2013 02:15:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=dQjINE9WnTn8/USVBkotDFtizrK7RpspwvNSSqoiuQE=; b=wEljVvrvqbjpGiljJ933wB2pxMG54Ix1gO+asArU1R5XEO7HSywSxsebKUDMQXJFN5 GCEg0zaoWGJ+jlDEr9njJI6rFqlkMbkW3Lm1blTDm0/RCc0do0EomODvy5DVsj+SiR2F e63+77frrZto1TFJp02EL42U+iuC+p40F2z9YwJlcBvmvxudjChsX3htOFNTlVJipmVd qhTyQyJ6v3WEtChW9CpNCFGogcnV0OVCTecHMjdQNWDNRS9kCUsv4RNe/0ICTnprPstS OfbLbdg3QcOltBuPQHISJQSLYEOQ1NxWnEzqo/aVuqP21KlMVz6sI2idOK4ENq+8nJ1N VpGA== X-Received: by 10.68.242.97 with SMTP id wp1mr28066512pbc.128.1368436500614; Mon, 13 May 2013 02:15:00 -0700 (PDT) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPSA id lq4sm8223249pab.19.2013.05.13.02.14.57 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 13 May 2013 02:14:59 -0700 (PDT) Date: Mon, 13 May 2013 17:32:45 +0800 From: Zheng Liu To: Dave Chinner Cc: xfs@oss.sgi.com, Zheng Liu , Eric Sandeen , Rich Johnston Subject: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file Message-ID: <20130513093245.GA8570@gmail.com> X-ASG-Orig-Subj: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file References: <1368358464-11173-1-git-send-email-wenqing.lz@taobao.com> <20130513004439.GJ32675@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130513004439.GJ32675@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-pd0-f179.google.com[209.85.192.179] X-Barracuda-Start-Time: 1368436500 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130820 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Mon, May 13, 2013 at 10:44:39AM +1000, Dave Chinner wrote: > On Sun, May 12, 2013 at 07:34:24PM +0800, Zheng Liu wrote: > > From: Zheng Liu > > > > After applied this commit (864688d3), xfstests #255 will not test a > > file system that cannot support fallocate(2), such as a indirect-based > > file in ext4. So we need to add a new generic test case to test it. > > > > The difference between #255 and this test case is only to use pwrite to > > allocate blocks. Other filesystems should survive in this test case. > > In the mean time, a new argument '-u' is added into _test_generic_punch > > not to run unwritten tests. > > > > Meanwhile this commit fixes a minor problem in #255 that testfile should > > use $seq.$$ as testfile. > > > > Signed-off-by: Zheng Liu > > Cc: Eric Sandeen > > Cc: Dave Chinner > > Cc: Rich Johnston > > This will need to be rebased on top of Eric's patch that removes the > need to pass -F to xfs_io for non-xfs filesystems.... Hi Dave, Thanks for review. I guess that you metioned this patch, right? [PATCH] xfstests: automatically add -F to xfs_io on non-xfs But I couldn't find it in xfstests tree. Has it been applied into the tree? Or maybe I use a wrong tree to generate my patch. I clone the tree from here: git://oss.sgi.com/xfs/cmds/xfstests Is that right? Or maybe I need to apply Eric's patch manually and rebase my patch? > > > --- a/tests/generic/group > > +++ b/tests/generic/group > > @@ -114,3 +114,4 @@ > > 309 auto quick > > 310 auto > > 311 auto metadata log > > +314 auto quick prealloc > > Why would you add it to the prealloc group? The whole point of the > test is that it doesn't use prealloc, right? Good catch! Fix it soon. Thanks, - Zheng From jack@suse.cz Mon May 13 05:04:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E0C7A7CBF for ; Mon, 13 May 2013 05:04:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id B4167304039 for ; Mon, 13 May 2013 03:04:26 -0700 (PDT) X-ASG-Debug-ID: 1368439465-04cb6c53a322faf0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id I3PxmyuL4LyUhuy9 for ; Mon, 13 May 2013 03:04:25 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id EBD1AA41E0; Mon, 13 May 2013 12:04:24 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 32C2180E55; Mon, 13 May 2013 12:04:23 +0200 (CEST) Date: Mon, 13 May 2013 12:04:23 +0200 From: Jan Kara To: Cong Wang Cc: linux-kernel@vger.kernel.org, Andrew Morton , Jan Kara , xfs@oss.sgi.com Subject: Re: [Patch] quota: do not leak info to user-space Message-ID: <20130513100423.GD400@quack.suse.cz> X-ASG-Orig-Subj: Re: [Patch] quota: do not leak info to user-space References: <1368177873-4819-1-git-send-email-amwang@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368177873-4819-1-git-send-email-amwang@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1368439465 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri 10-05-13 17:24:33, Cong Wang wrote: > From: Cong Wang > > There is a hole in struct fs_quota_stat, so we have to > zero the struct on stack before copying it to user-space. > > Cc: Jan Kara > Signed-off-by: Cong Wang Good point. I've merged the patch. BTW for XFS folks: The structure definition looks somewhat odd (unaligned definition of qs_flags, qs_uquota starts only at 32-bit boundary although it has 64-bit fields in it) and I wouldn't be surprised if it needed compat wrapper for 32-bit apps on some architectures... Honza > > --- > diff --git a/fs/quota/quota.c b/fs/quota/quota.c > index c7314f1..2b0c182 100644 > --- a/fs/quota/quota.c > +++ b/fs/quota/quota.c > @@ -211,6 +211,7 @@ static int quota_getxstate(struct super_block *sb, void __user *addr) > > if (!sb->s_qcop->get_xstate) > return -ENOSYS; > + memset(&fqs, 0, sizeof(fqs)); > ret = sb->s_qcop->get_xstate(sb, &fqs); > if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) > return -EFAULT; -- Jan Kara SUSE Labs, CR From jack@suse.cz Mon May 13 05:18:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D734F7CBF for ; Mon, 13 May 2013 05:18:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 952E2304039 for ; Mon, 13 May 2013 03:18:42 -0700 (PDT) X-ASG-Debug-ID: 1368440320-04bdf0422322c520001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id wEeb7b8hUVQQnHZp for ; Mon, 13 May 2013 03:18:41 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id A3A5DA51B7; Mon, 13 May 2013 12:18:40 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 2669E80E55; Mon, 13 May 2013 12:18:39 +0200 (CEST) Date: Mon, 13 May 2013 12:18:39 +0200 From: Jan Kara To: Cong Wang Cc: linux-kernel@vger.kernel.org, Andrew Morton , Jan Kara , xfs@oss.sgi.com Subject: Re: [Patch] quota: do not leak info to user-space Message-ID: <20130513101839.GE400@quack.suse.cz> X-ASG-Orig-Subj: Re: [Patch] quota: do not leak info to user-space References: <1368177873-4819-1-git-send-email-amwang@redhat.com> <20130513100423.GD400@quack.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130513100423.GD400@quack.suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1368440320 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon 13-05-13 12:04:23, Jan Kara wrote: > On Fri 10-05-13 17:24:33, Cong Wang wrote: > > From: Cong Wang > > > > There is a hole in struct fs_quota_stat, so we have to > > zero the struct on stack before copying it to user-space. > > > > Cc: Jan Kara > > Signed-off-by: Cong Wang > Good point. I've merged the patch. Ah, now I've noticed that XFS (the only user of the callback you are fixing) is zeroing the structure on its own (xfs_qm_scall_getqstat). So there's no real problem. I'm somewhat wondering whether clearing the field in the place where you did it isn't more future-proof but usually we don't pass in prezeroed buffers so I've decided to leave things as they are. Honza > BTW for XFS folks: The structure definition looks somewhat odd (unaligned > definition of qs_flags, qs_uquota starts only at 32-bit boundary although > it has 64-bit fields in it) and I wouldn't be surprised if it needed compat > wrapper for 32-bit apps on some architectures... > > Honza > > > > --- > > diff --git a/fs/quota/quota.c b/fs/quota/quota.c > > index c7314f1..2b0c182 100644 > > --- a/fs/quota/quota.c > > +++ b/fs/quota/quota.c > > @@ -211,6 +211,7 @@ static int quota_getxstate(struct super_block *sb, void __user *addr) > > > > if (!sb->s_qcop->get_xstate) > > return -ENOSYS; > > + memset(&fqs, 0, sizeof(fqs)); > > ret = sb->s_qcop->get_xstate(sb, &fqs); > > if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) > > return -EFAULT; > -- > Jan Kara > SUSE Labs, CR -- Jan Kara SUSE Labs, CR From benedikt.schmidt@tum.de Mon May 13 07:24:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 85E887CBF for ; Mon, 13 May 2013 07:24:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 59A1930406B for ; Mon, 13 May 2013 05:24:35 -0700 (PDT) X-ASG-Debug-ID: 1368447872-04cbb05fe4235c50001-NocioJ Received: from postout.lrz.de (postout.lrz.de [129.187.254.115]) by cuda.sgi.com with ESMTP id VMlWH6uFu6YZi8S1 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 May 2013 05:24:34 -0700 (PDT) X-Barracuda-Envelope-From: benedikt.schmidt@tum.de X-Barracuda-Apparent-Source-IP: 129.187.254.115 Received: from lxmhs52.srv.lrz.de (localhost [127.0.0.1]) by postout4.mail.lrz.de (Postfix) with ESMTP id 8B340200BD for ; Mon, 13 May 2013 14:24:32 +0200 (CEST) X-Virus-Scanned: by amavisd-new at lrz.de in lxmhs52.srv.lrz.de Received: from postout4.mail.lrz.de ([127.0.0.1]) by lxmhs52.srv.lrz.de (lxmhs52.srv.lrz.de [127.0.0.1]) (amavisd-new, port 20024) with LMTP id 8anhYj60u2aO for ; Mon, 13 May 2013 14:24:32 +0200 (CEST) Received: from [192.168.1.66] (mnch-5d85e8f4.pool.mediaWays.net [93.133.232.244]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by postout4.mail.lrz.de (Postfix) with ESMTPSA id 3E737200BC for ; Mon, 13 May 2013 14:24:32 +0200 (CEST) Message-ID: <5190DB7F.2050505@tum.de> Date: Mon, 13 May 2013 14:24:31 +0200 From: Benedikt Schmidt Reply-To: benediktibk@aon.at User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130410 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: xfs_repair force_geometry Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: xfs_repair force_geometry Content-Transfer-Encoding: 7bit X-Barracuda-Connect: postout.lrz.de[129.187.254.115] X-Barracuda-Start-Time: 1368447873 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130834 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, currently I'm looking for the correct usage of the force_geometry option of xfs_repair. I wasn't able to find more documentation on this option beside that it exists. Could please somebody explain it to me? For a more detailed description of my problem: I've got here a hard disk which is dying at the moment, so I copied all the content with dd_rescue to a new and bigger one. To use xfs_copy wasn't possible as the filesystem was already corrupted. So now I've got nearly everything on the second hard disk (dd_rescue could'nt copy something around 6 or 7 MB), but I can not mount the filesystem or even run xfs_repair on it, as it fails to find a superblock. I think the problem lies in the fact that the new disk has a different geometry than the previous one. Kind regards, Benedikt Schmidt From ranto.boris@gmail.com Mon May 13 07:58:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 393377CBF for ; Mon, 13 May 2013 07:58:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 126868F807A for ; Mon, 13 May 2013 05:58:01 -0700 (PDT) X-ASG-Debug-ID: 1368449880-04cbb05fe3236f50001-NocioJ Received: from mail-yh0-f47.google.com (mail-yh0-f47.google.com [209.85.213.47]) by cuda.sgi.com with ESMTP id VlD5SmSYgHsj5YF2 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 05:58:00 -0700 (PDT) X-Barracuda-Envelope-From: ranto.boris@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.47 X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.47] Received: by mail-yh0-f47.google.com with SMTP id i57so1522888yha.6 for ; Mon, 13 May 2013 05:58:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.47] X-Barracuda-IPDD: Level1 [gmail.com/209.85.213.47] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:subject:from:to:cc:date:in-reply-to :references:content-type:x-mailer:mime-version :content-transfer-encoding; bh=HG4c2O5HuRFwVqBw4lvbVD+Ywd1JV5WGr4xF5Tp06/E=; b=qVf7PY10qqZurUlbLdjhGmBDXF/j0rAHQGOL3eVjte7QVEDxUt5TL/ZguB3b70smzQ fg7f48nb3bnt+ZDZQTEoaeZSALZtsuBqzQ8qS8gJWY0Xl/bI5l6LDPGtvm9jgrr6pvct epa5cthDaB2SXoksvQOllYYAGZOD+b58aSxwPvJjLJsRAmA9OFVIpZe0fWiEUazGw8I0 fIv5WzmdjAoaT1rGCdIb1s1zWWL7zmMrhVNJW786qoD5KLvmL5PNilHbyChKe3ZoLVwy rT9UmD95ez8hrM+HeIWlXrHl10vdOwk4RctL/dTv0H69DchBTagsR1LqlGLoBxdVt4xj cn7A== X-Received: by 10.236.188.36 with SMTP id z24mr15178132yhm.96.1368449879818; Mon, 13 May 2013 05:57:59 -0700 (PDT) Received: from [192.168.1.100] (ip-94-112-166-30.net.upcbroadband.cz. [94.112.166.30]) by mx.google.com with ESMTPSA id q47sm20558307yhb.5.2013.05.13.05.57.57 for (version=SSLv3 cipher=RC4-SHA bits=128/128); Mon, 13 May 2013 05:57:58 -0700 (PDT) Message-ID: <1368449876.17134.10.camel@archie> Subject: Re: [PATCH 0/3] Tmpfs support and fixes for tmpfs/nfs From: Boris Ranto X-ASG-Orig-Subj: Re: [PATCH 0/3] Tmpfs support and fixes for tmpfs/nfs To: xfs@oss.sgi.com Cc: Boris Ranto , ranto.boris@gmail.com Date: Mon, 13 May 2013 14:57:56 +0200 In-Reply-To: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> References: <1367503439-12827-1-git-send-email-ranto.boris@gmail.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.8.1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-yh0-f47.google.com[209.85.213.47] X-Barracuda-Start-Time: 1368449880 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130836 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Thu, 2013-05-02 at 16:03 +0200, ranto.boris@gmail.com wrote: > Hi all, > > This series contains three patches related to support of tmpfs file system in xfstests. > > First patch provides the support itself. Second patch fixes a regression where ./check -nfs -n -g auto stopped working for nfs (and tmpfs) and the last patch changes the failure on empty exclude group to warning to simplify automated testing. > > Regards, > Boris > Could this small patchset get any review, please? From sandeen@sandeen.net Mon May 13 08:51:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 99C277CBF for ; Mon, 13 May 2013 08:51:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0FDBCAC001 for ; Mon, 13 May 2013 06:51:23 -0700 (PDT) X-ASG-Debug-ID: 1368453082-04cb6c53a42393b0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 0SdxM8PcYWNQdoO0 for ; Mon, 13 May 2013 06:51:22 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.77] (eric-iphone.sandeen.net [10.0.0.77]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 108BA63C59B8; Mon, 13 May 2013 08:51:22 -0500 (CDT) References: <1368358464-11173-1-git-send-email-wenqing.lz@taobao.com> <20130513004439.GJ32675@dastard> <20130513093245.GA8570@gmail.com> Mime-Version: 1.0 (1.0) In-Reply-To: <20130513093245.GA8570@gmail.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Message-Id: Cc: Dave Chinner , "xfs@oss.sgi.com" , Zheng Liu , Rich Johnston X-Mailer: iPhone Mail (10A523) From: Eric Sandeen Subject: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file Date: Mon, 13 May 2013 08:51:20 -0500 X-ASG-Orig-Subj: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file To: Zheng Liu X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368453082 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130840 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars On May 13, 2013, at 4:32 AM, Zheng Liu wrote: > On Mon, May 13, 2013 at 10:44:39AM +1000, Dave Chinner wrote: >> On Sun, May 12, 2013 at 07:34:24PM +0800, Zheng Liu wrote: >>> From: Zheng Liu >>>=20 >>> After applied this commit (864688d3), xfstests #255 will not test a >>> file system that cannot support fallocate(2), such as a indirect-based >>> file in ext4. So we need to add a new generic test case to test it. >>>=20 >>> The difference between #255 and this test case is only to use pwrite to >>> allocate blocks. Other filesystems should survive in this test case. >>> In the mean time, a new argument '-u' is added into _test_generic_punch >>> not to run unwritten tests. >>>=20 >>> Meanwhile this commit fixes a minor problem in #255 that testfile should= >>> use $seq.$$ as testfile. >>>=20 >>> Signed-off-by: Zheng Liu >>> Cc: Eric Sandeen >>> Cc: Dave Chinner >>> Cc: Rich Johnston >>=20 >> This will need to be rebased on top of Eric's patch that removes the >> need to pass -F to xfs_io for non-xfs filesystems.... >=20 > Hi Dave, >=20 > Thanks for review. I guess that you metioned this patch, right? > [PATCH] xfstests: automatically add -F to xfs_io on non-xfs >=20 > But I couldn't find it in xfstests tree. Has it been applied into the > tree? Or maybe I use a wrong tree to generate my patch. I clone the > tree from here: > git://oss.sgi.com/xfs/cmds/xfstests >=20 > Is that right? Or maybe I need to apply Eric's patch manually and > rebase my patch? >=20 That's the right patch, it's just not yet merged. You can just drop any "-F"= from your xfs_io commands. Thanks, Eric >>=20 >>> --- a/tests/generic/group >>> +++ b/tests/generic/group >>> @@ -114,3 +114,4 @@ >>> 309 auto quick >>> 310 auto >>> 311 auto metadata log >>> +314 auto quick prealloc >>=20 >> Why would you add it to the prealloc group? The whole point of the >> test is that it doesn't use prealloc, right? >=20 > Good catch! Fix it soon. >=20 > Thanks, > - Zheng >=20 From gnehzuil.liu@gmail.com Mon May 13 08:54:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 309337F4C for ; Mon, 13 May 2013 08:54:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id EC315304067 for ; Mon, 13 May 2013 06:53:58 -0700 (PDT) X-ASG-Debug-ID: 1368453237-04bdf04225234200001-NocioJ Received: from mail-pd0-f173.google.com (mail-pd0-f173.google.com [209.85.192.173]) by cuda.sgi.com with ESMTP id AezVInXufMUYvUjA (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 06:53:57 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.173 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.173] Received: by mail-pd0-f173.google.com with SMTP id v10so4455706pde.4 for ; Mon, 13 May 2013 06:53:57 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.173] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.173] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=oS0bGt5ZL2k4FXBkVLHN+Tbcm6MO6MQH7EfWEospAbw=; b=sngKbpLCkvOC5YAXMTyMv/LDmnieukuTblYhTXkrVZaKZkJj53K936PFMRNksnZWC3 vEaeFvT/DWimI3t4gB8yFh3r9LufXFEjr1ioczkHXu3wHuhjo5qeXS16w3tAZ7HtXw9k u9TZ+yPbdCfyKTVQxvXVWbuSBKbhVBD1HFHyqjW5sGn/hBzQL5dm7mcIennoCl95xtIF 7fagG1zeg+TIoTKzDCa5GeGomhnVS+/7IMX/aizfeae8+geKBE9FjDBS7nN4hBs52G+5 oJVDgl3QGdXHS1Vt6rfPYO2+PPMkXa8Uve6E79AwWB99IjnCPKlpMeBDpWNLJ64C+nmo PaZQ== X-Received: by 10.66.162.161 with SMTP id yb1mr29354621pab.213.1368453237699; Mon, 13 May 2013 06:53:57 -0700 (PDT) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPSA id k2sm15127879pat.7.2013.05.13.06.53.54 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 13 May 2013 06:53:57 -0700 (PDT) Date: Mon, 13 May 2013 22:11:42 +0800 From: Zheng Liu To: Eric Sandeen Cc: Dave Chinner , "xfs@oss.sgi.com" , Zheng Liu , Rich Johnston Subject: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file Message-ID: <20130513141142.GA13247@gmail.com> X-ASG-Orig-Subj: Re: [PATCH v4] xfstests: add a new test case for ext4 indirect-based file References: <1368358464-11173-1-git-send-email-wenqing.lz@taobao.com> <20130513004439.GJ32675@dastard> <20130513093245.GA8570@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-pd0-f173.google.com[209.85.192.173] X-Barracuda-Start-Time: 1368453237 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130840 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Mon, May 13, 2013 at 08:51:20AM -0500, Eric Sandeen wrote: > On May 13, 2013, at 4:32 AM, Zheng Liu wrote: > > > On Mon, May 13, 2013 at 10:44:39AM +1000, Dave Chinner wrote: > >> On Sun, May 12, 2013 at 07:34:24PM +0800, Zheng Liu wrote: > >>> From: Zheng Liu > >>> > >>> After applied this commit (864688d3), xfstests #255 will not test a > >>> file system that cannot support fallocate(2), such as a indirect-based > >>> file in ext4. So we need to add a new generic test case to test it. > >>> > >>> The difference between #255 and this test case is only to use pwrite to > >>> allocate blocks. Other filesystems should survive in this test case. > >>> In the mean time, a new argument '-u' is added into _test_generic_punch > >>> not to run unwritten tests. > >>> > >>> Meanwhile this commit fixes a minor problem in #255 that testfile should > >>> use $seq.$$ as testfile. > >>> > >>> Signed-off-by: Zheng Liu > >>> Cc: Eric Sandeen > >>> Cc: Dave Chinner > >>> Cc: Rich Johnston > >> > >> This will need to be rebased on top of Eric's patch that removes the > >> need to pass -F to xfs_io for non-xfs filesystems.... > > > > Hi Dave, > > > > Thanks for review. I guess that you metioned this patch, right? > > [PATCH] xfstests: automatically add -F to xfs_io on non-xfs > > > > But I couldn't find it in xfstests tree. Has it been applied into the > > tree? Or maybe I use a wrong tree to generate my patch. I clone the > > tree from here: > > git://oss.sgi.com/xfs/cmds/xfstests > > > > Is that right? Or maybe I need to apply Eric's patch manually and > > rebase my patch? > > > That's the right patch, it's just not yet merged. You can just drop any "-F" from your xfs_io commands. Thanks for pointing it out. Fix it in next version. - Zheng From spatel.ml@gmail.com Mon May 13 11:15:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BA0BE7CBF for ; Mon, 13 May 2013 11:15:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 98E00304032 for ; Mon, 13 May 2013 09:15:32 -0700 (PDT) X-ASG-Debug-ID: 1368461731-04cb6c53a3240500001-NocioJ Received: from mail-qc0-f174.google.com (mail-qc0-f174.google.com [209.85.216.174]) by cuda.sgi.com with ESMTP id fWxUA4U84UnvjqAw (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 09:15:31 -0700 (PDT) X-Barracuda-Envelope-From: spatel.ml@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.174 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.174] Received: by mail-qc0-f174.google.com with SMTP id m16so3423687qcq.19 for ; Mon, 13 May 2013 09:15:31 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.174] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.174] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=EkE/WBexcCcX2iyT35/CWyVYa/HYsaITEtCscKuUkB4=; b=DkKis3JVU/Qau16OtOp5UQIEe/pMv8W48AaVsR1x/a59em0p5HrMjuHlLjZ1pIA5D4 4hUZlFqFo7ywS54g4g7J9E6pxFl/kQG6lXsje7fqq+ovuYIzljk5iWZlV32MHAkmg1PS F5pZakhS9ib1JyeTC6mVIWOCETXRjUrx1DZfdPKtxGVMROED1BYoF5gf0FX5NjwbkUR2 fLkFj+bKXDQFJ0E7w15+GZwKL7KWoWtTaSNodot3sK1LT4CLOQpisty3jREwZ6LxuMlj aUqsPByTjLyrm+LQvn+WOK11PuqiPzK+0zDSRjkcqc5lzux0vWX2IJeIQfjnOmcj/SzC MmEQ== MIME-Version: 1.0 X-Received: by 10.224.49.131 with SMTP id v3mr21496605qaf.54.1368461730960; Mon, 13 May 2013 09:15:30 -0700 (PDT) Received: by 10.49.109.106 with HTTP; Mon, 13 May 2013 09:15:30 -0700 (PDT) In-Reply-To: <20130511011505.GB32675@dastard> References: <518D22F0.8040405@sgi.com> <20130511011505.GB32675@dastard> Date: Mon, 13 May 2013 21:45:30 +0530 Message-ID: Subject: Re: Error during bulk removal of files From: Subranshu Patel X-ASG-Orig-Subj: Re: Error during bulk removal of files To: Dave Chinner Cc: Mark Tinguely , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-qc0-f174.google.com[209.85.216.174] X-Barracuda-Start-Time: 1368461731 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130848 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature > What 2.6.32 kernel? Output of uname -a? uname -a Linux machine1 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux # cat /etc/issue Red Hat Enterprise Linux Server release 6.3 (Santiago) I am using mdtest program to delete 7 million files (of 1KB size). Total 128 concurrent mdtest process are there. Each process removes approx 54000 files ( 7 million / 128). mdtest runs for a while, after that, it gets blocked and does not do anything. However the machine is still responsive. dmesg: May 13 16:27:10 machine1 kernel: INFO: task xfssyncd/dm-3:6838 blocked for more than 120 seconds. May 13 16:27:10 machine1 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. May 13 16:27:10 machine1 kernel: xfssyncd/dm-3 D 0000000000000010 0 6838 2 0x00000080 May 13 16:27:10 machine1 kernel: ffff88185d571c70 0000000000000046 ffff88002830fec0 0000000000016680 May 13 16:27:10 machine1 kernel: 0000000000016680 ffff88185975e040 ffff880c61170ae0 ffffffff8160b400 May 13 16:27:10 machine1 kernel: ffff88185975e5f8 ffff88185d571fd8 000000000000fb88 ffff88185975e5f8 May 13 16:27:10 machine1 kernel: Call Trace: May 13 16:27:10 machine1 kernel: [] xlog_wait+0x72/0x90 [xfs] May 13 16:27:10 machine1 kernel: [] ? default_wake_function+0x0/0x20 May 13 16:27:10 machine1 kernel: [] xlog_grant_log_space+0x3ab/0x520 [xfs] May 13 16:27:10 machine1 kernel: [] ? kmem_zone_zalloc+0x3a/0x50 [xfs] May 13 16:27:10 machine1 kernel: [] ? random32+0x1c/0x20 May 13 16:27:10 machine1 kernel: [] ? xfs_trans_ail_push+0x21/0x80 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_log_reserve+0xe6/0x140 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_trans_reserve+0xa0/0x210 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_fs_log_dummy+0x43/0x90 [xfs] May 13 16:27:10 machine1 kernel: [] ? xfs_log_need_covered+0x94/0xd0 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_sync_worker+0x81/0x90 [xfs] May 13 16:27:10 machine1 kernel: [] xfssyncd+0x17e/0x210 [xfs] May 13 16:27:10 machine1 kernel: [] ? xfssyncd+0x0/0x210 [xfs] May 13 16:27:10 machine1 kernel: [] kthread+0x96/0xa0 May 13 16:27:10 machine1 kernel: [] child_rip+0xa/0x20 May 13 16:27:10 machine1 kernel: [] ? kthread+0x0/0xa0 May 13 16:27:10 machine1 kernel: [] ? child_rip+0x0/0x20 May 13 16:27:10 machine1 kernel: INFO: task mdtest:7397 blocked for more than 120 seconds. May 13 16:27:10 machine1 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. May 13 16:27:10 machine1 kernel: mdtest D 0000000000000019 0 7397 7395 0x00000080 May 13 16:27:10 machine1 kernel: ffff880c3ce13bf8 0000000000000082 0000000000000000 ffffffff81060262 May 13 16:27:10 machine1 kernel: ffff880c3ce13ba8 ffffffff8104e309 ffff880c3ce13ba8 0000000300000000 May 13 16:27:10 machine1 kernel: ffff880c5d027af8 ffff880c3ce13fd8 000000000000fb88 ffff880c5d027af8 May 13 16:27:10 machine1 kernel: Call Trace: May 13 16:27:10 machine1 kernel: [] ? default_wake_function+0x12/0x20 May 13 16:27:10 machine1 kernel: [] ? __wake_up_common+0x59/0x90 May 13 16:27:10 machine1 kernel: [] xlog_wait+0x72/0x90 [xfs] May 13 16:27:10 machine1 kernel: [] ? default_wake_function+0x0/0x20 May 13 16:27:10 machine1 kernel: [] xlog_grant_log_space+0x3ab/0x520 [xfs] May 13 16:27:10 machine1 kernel: [] ? kmem_zone_zalloc+0x3a/0x50 [xfs] May 13 16:27:10 machine1 kernel: [] ? random32+0x1c/0x20 May 13 16:27:10 machine1 kernel: [] ? xfs_trans_ail_push+0x21/0x80 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_log_reserve+0xe6/0x140 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_trans_reserve+0xa0/0x210 [xfs] May 13 16:27:10 machine1 kernel: [] ? xfs_tosspages+0x20/0x30 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_inactive+0x2e4/0x460 [xfs] May 13 16:27:10 machine1 kernel: [] ? mutex_lock+0x1e/0x50 May 13 16:27:10 machine1 kernel: [] xfs_fs_clear_inode+0xa0/0xd0 [xfs] May 13 16:27:10 machine1 kernel: [] clear_inode+0xac/0x140 May 13 16:27:10 machine1 kernel: [] generic_delete_inode+0x196/0x1d0 May 13 16:27:10 machine1 kernel: [] generic_drop_inode+0x65/0x80 May 13 16:27:10 machine1 kernel: [] iput+0x62/0x70 May 13 16:27:10 machine1 kernel: [] do_unlinkat+0x112/0x1c0 May 13 16:27:10 machine1 kernel: [] ? audit_syscall_entry+0x272/0x2a0 May 13 16:27:10 machine1 kernel: [] ? math_state_restore+0x45/0x60 May 13 16:27:10 machine1 kernel: [] sys_unlink+0x16/0x20 May 13 16:27:10 machine1 kernel: [] system_call_fastpath+0x16/0x1b May 13 16:27:10 machine1 kernel: INFO: task mdtest:7398 blocked for more than 120 seconds. May 13 16:27:10 machine1 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. May 13 16:27:10 machine1 kernel: mdtest D 0000000000000008 0 7398 7395 0x00000080 May 13 16:27:10 machine1 kernel: ffff880b79bcbbf8 0000000000000082 ffff880b79bcbb88 ffffffffa0587633 May 13 16:27:10 machine1 kernel: 0000000000000000 0000000000014001 0000000000000010 ffff880b79bcbc90 May 13 16:27:10 machine1 kernel: ffff880c5e6fbaf8 ffff880b79bcbfd8 000000000000fb88 ffff880c5e6fbaf8 May 13 16:27:10 machine1 kernel: Call Trace: May 13 16:27:10 machine1 kernel: [] ? xfs_buf_get+0x103/0x1a0 [xfs] May 13 16:27:10 machine1 kernel: [] xlog_wait+0x72/0x90 [xfs] May 13 16:27:10 machine1 kernel: [] ? default_wake_function+0x0/0x20 May 13 16:27:10 machine1 kernel: [] xlog_grant_log_space+0x3ab/0x520 [xfs] May 13 16:27:10 machine1 kernel: [] ? kmem_zone_zalloc+0x3a/0x50 [xfs] May 13 16:27:10 machine1 kernel: [] ? random32+0x1c/0x20 May 13 16:27:10 machine1 kernel: [] ? xfs_trans_ail_push+0x21/0x80 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_log_reserve+0xe6/0x140 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_trans_reserve+0xa0/0x210 [xfs] May 13 16:27:10 machine1 kernel: [] ? xfs_trans_alloc+0x9f/0xb0 [xfs] May 13 16:27:10 machine1 kernel: [] xfs_remove+0x113/0x3a0 [xfs] May 13 16:27:10 machine1 kernel: [] ? generic_permission+0x23/0xb0 May 13 16:27:10 machine1 kernel: [] xfs_vn_unlink+0x48/0x90 [xfs] May 13 16:27:10 machine1 kernel: [] vfs_unlink+0x9f/0xe0 May 13 16:27:10 machine1 kernel: [] ? lookup_hash+0x3a/0x50 May 13 16:27:10 machine1 kernel: [] do_unlinkat+0x183/0x1c0 May 13 16:27:10 machine1 kernel: [] ? audit_syscall_entry+0x272/0x2a0 May 13 16:27:10 machine1 kernel: [] ? math_state_restore+0x45/0x60 May 13 16:27:10 machine1 kernel: [] sys_unlink+0x16/0x20 May 13 16:27:10 machine1 kernel: [] system_call_fastpath+0x16/0x1b -- Subranshu From gnehzuil.liu@gmail.com Mon May 13 11:23:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BEFF07CBF for ; Mon, 13 May 2013 11:23:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9EC5430405F for ; Mon, 13 May 2013 09:23:02 -0700 (PDT) X-ASG-Debug-ID: 1368462180-04cbb05fe4240480001-NocioJ Received: from mail-da0-f52.google.com (mail-da0-f52.google.com [209.85.210.52]) by cuda.sgi.com with ESMTP id Ev2Sdj2udTCoiwij (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 09:23:00 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.52 X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.52] Received: by mail-da0-f52.google.com with SMTP id o9so2413353dan.25 for ; Mon, 13 May 2013 09:23:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.52] X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.52] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=yXMP1VsKLPH8nGYDfDmMqxzSlrB+fmioCbru+UkHk1A=; b=qXAIv8eMTFrqfXXI4IeQp+mOJ/l0L1Qk+UiZk37cZSgG0d0VcyWKizB1k1DP8hwkQu K23AiAF53R59LboaDgFyqsKiurgmfhQDr3n1qcJf1jrGwRH2uh4vs2fyHxVBA0DLVppZ JiojYLVWvxtGMl3LoUUrC/AndUCpLIc5UFzxBG1kI3zrKewlTDYNqRR3/8GBuaYrKCo1 +1rVgXmlFZ7dCc8HtShfcZNFmnzQ1gPPcPJNF9Gt6gYSjNVu+Yk/pECk8JGD/lESE7WM xfpXCvM58dpTB7uHkAq5oFqrCzJoxxMKpPXlvUkFLgqxN9VdRn9QXnmuoa6uD+EB5P+d fTnA== X-Received: by 10.68.189.164 with SMTP id gj4mr29749245pbc.193.1368462180174; Mon, 13 May 2013 09:23:00 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id at1sm13371318pbc.10.2013.05.13.09.22.56 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 13 May 2013 09:22:59 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Eric Sandeen , Dave Chinner , Rich Johnston Subject: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file Date: Tue, 14 May 2013 00:40:35 +0800 X-ASG-Orig-Subj: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file Message-Id: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-da0-f52.google.com[209.85.210.52] X-Barracuda-Start-Time: 1368462180 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130850 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Zheng Liu After applied this commit (864688d3), xfstests #255 will not test a file system that cannot support fallocate(2), such as a indirect-based file in ext4. So we need to add a new generic test case to test it. The difference between #255 and this test case is only to use pwrite to allocate blocks. Other filesystems should survive in this test case. In the mean time, a new argument '-u' is added into _test_generic_punch not to run unwritten tests. Meanwhile this commit fixes a minor problem in #255 that testfile should use $seq.$$ as testfile. Signed-off-by: Zheng Liu Cc: Eric Sandeen Cc: Dave Chinner Cc: Rich Johnston --- changelog: * rebase against Eric's patch * remove 'prealloc" from group Hi Eric, I take a close look at your patch, and 'xfs_io_opt' has been removed in your patch. I am not sure whether I need to adjust my patch or not. Please let me know if I need to change it. Currently I only remove '-F' argument from test case. Thanks, - Zheng common/punch | 164 ++++++++++++++++++++++++++----------------------- tests/generic/255 | 2 +- tests/generic/314 | 67 ++++++++++++++++++++ tests/generic/314.out | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/generic/group | 1 + 5 files changed, 323 insertions(+), 76 deletions(-) create mode 100755 tests/generic/314 create mode 100644 tests/generic/314.out diff --git a/common/punch b/common/punch index b9f9acd..f1fc92d 100644 --- a/common/punch +++ b/common/punch @@ -285,19 +285,25 @@ die_now() # Use the -d flag to not sync the file between tests. # This will test the handling of delayed extents # +# Use the -u flag to not run unwritten tests. +# This will eliminate some unnecessary information. +# _test_generic_punch() { remove_testfile=1 sync_cmd="-c fsync" + unwritten_tests=1 OPTIND=1 - while getopts 'dk' OPTION + while getopts 'dku' OPTION do case $OPTION in k) remove_testfile= ;; d) sync_cmd= ;; + u) unwritten_tests= + ;; ?) echo Invalid flag exit 1 ;; @@ -334,16 +340,18 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 3. into unwritten space" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 3. into unwritten space" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 4. hole -> data" if [ "$remove_testfile" ]; then @@ -356,16 +364,18 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 5. hole -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 5. hole -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 8k 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 8k 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 6. data -> hole" if [ "$remove_testfile" ]; then @@ -378,40 +388,42 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 7. data -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "pwrite 0 8k" $sync_cmd \ - -c "$alloc_cmd 8k 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 8. unwritten -> hole" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 9. unwritten -> data" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 7. data -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "pwrite 0 8k" $sync_cmd \ + -c "$alloc_cmd 8k 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 8. unwritten -> hole" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 9. unwritten -> data" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 8k" \ + -c "pwrite 8k 8k" $sync_cmd \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 8k" \ - -c "pwrite 8k 8k" $sync_cmd \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 10. hole -> data -> hole" if [ "$remove_testfile" ]; then @@ -438,30 +450,32 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 12. unwritten -> data -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "pwrite 8k 4k" $sync_cmd \ - -c "$zero_cmd 4k 12k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 13. data -> unwritten -> data" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 12. unwritten -> data -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "pwrite 8k 4k" $sync_cmd \ + -c "$zero_cmd 4k 12k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 13. data -> unwritten -> data" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "pwrite 0k 8k" $sync_cmd \ + -c "pwrite 12k 8k" -c "fsync" \ + -c "$zero_cmd 4k 12k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "pwrite 0k 8k" $sync_cmd \ - -c "pwrite 12k 8k" -c "fsync" \ - -c "$zero_cmd 4k 12k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 14. data -> hole @ EOF" rm -f $testfile diff --git a/tests/generic/255 b/tests/generic/255 index 2e8ddef..d1f463c 100755 --- a/tests/generic/255 +++ b/tests/generic/255 @@ -50,7 +50,7 @@ _require_xfs_io_falloc_punch _require_xfs_io_falloc _require_xfs_io_fiemap -testfile=$TEST_DIR/255.$$ +testfile=$TEST_DIR/$seq.$$ # Standard punch hole tests _test_generic_punch falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F diff --git a/tests/generic/314 b/tests/generic/314 new file mode 100755 index 0000000..4cd7462 --- /dev/null +++ b/tests/generic/314 @@ -0,0 +1,67 @@ +#! /bin/bash +# FS QA Test No. 314 +# +# Test Generic fallocate hole punching w/o unwritten extent +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Alibaba Group. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/punch + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_xfs_io_falloc_punch +_require_xfs_io_fiemap + +testfile=$TEST_DIR/$seq.$$ + +# Standard punch hole tests +_test_generic_punch -u pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# Delayed allocation punch hole tests +_test_generic_punch -u -d pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# Multi hole punch tests +_test_generic_punch -u -k pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# Delayed allocation multi punch hole tests +_test_generic_punch -u -d -k pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# success, all done +status=0 +exit diff --git a/tests/generic/314.out b/tests/generic/314.out new file mode 100644 index 0000000..06aa705 --- /dev/null +++ b/tests/generic/314.out @@ -0,0 +1,165 @@ +QA output created by 314 + 1. into a hole +daa100df6e6711906b61c9ab5aa16032 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..23]: hole +1: [24..31]: extent +2: [32..39]: hole +cc63069677939f69a6e8f68cae6a6dac + 6. data -> hole +0: [0..7]: extent +1: [8..39]: hole +1b3779878366498b28c702ef88c4a773 + 10. hole -> data -> hole +daa100df6e6711906b61c9ab5aa16032 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +daa100df6e6711906b61c9ab5aa16032 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..23]: hole +1: [24..31]: extent +2: [32..39]: hole +cc63069677939f69a6e8f68cae6a6dac + 6. data -> hole +0: [0..7]: extent +1: [8..39]: hole +1b3779878366498b28c702ef88c4a773 + 10. hole -> data -> hole +daa100df6e6711906b61c9ab5aa16032 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +0: [0..7]: extent +1: [8..39]: hole +5a58e46082be047d0f13bee7974015b9 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 6. data -> hole +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 10. hole -> data -> hole +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +0: [0..7]: extent +1: [8..39]: hole +5a58e46082be047d0f13bee7974015b9 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 6. data -> hole +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 10. hole -> data -> hole +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 diff --git a/tests/generic/group b/tests/generic/group index 5a03a09..4d84d1e 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -114,3 +114,4 @@ 309 auto quick 310 auto 311 auto metadata log +314 auto quick -- 1.7.12.rc2.18.g61b472e From mlsemon35@gmail.com Mon May 13 11:59:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 114E17CBF for ; Mon, 13 May 2013 11:59:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 94D9AAC001 for ; Mon, 13 May 2013 09:59:00 -0700 (PDT) X-ASG-Debug-ID: 1368464339-04bdf0422523cd30001-NocioJ Received: from mail-oa0-f44.google.com (mail-oa0-f44.google.com [209.85.219.44]) by cuda.sgi.com with ESMTP id QEvrodGmcfD4x4tj (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 09:58:59 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.219.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.44] Received: by mail-oa0-f44.google.com with SMTP id n12so7907303oag.31 for ; Mon, 13 May 2013 09:58:59 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=HC11pa23O0ta5vbtNkgrqFaRsAgtXZoJPY1uDJ6eb5U=; b=ANrGcXFAOhWqDfh4wQXqQduN6CXoLlwjcRGZ5HDVwglTu3YH2HMvXNZb7MvTjYSohU LVliJXo+3t8NWGbWN9lve+QT3/98yYCujgYzqb0Elb7lGdtO4udSsY03U+Xjvzq2HIxn yoG0dPHdJgSp1P9Dvf1PpyjczlUwFIPkSanK0th1LJDOkx8yknsbXLOvstMJwf5YDZ2e DvbwH9zjKsdxDRhP7VPkVosMeg9Owq+gGKHbOI17DpqgepieX+cu0RTMbzqwp8Bdl0dl U5381Z3HacWFLR4s/JI0jHw/ewbJz9CL1vfn8hMbyxAHNWMctwRjVouZpW9Nf79IbdxV 8cSQ== X-Received: by 10.182.46.228 with SMTP id y4mr13628287obm.28.1368464339019; Mon, 13 May 2013 09:58:59 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id qj8sm17432370oeb.2.2013.05.13.09.58.47 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 13 May 2013 09:58:58 -0700 (PDT) Message-ID: <51911BBC.9080208@gmail.com> Date: Mon, 13 May 2013 12:58:36 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: benediktibk@aon.at CC: Benedikt Schmidt , xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <5190DB7F.2050505@tum.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-oa0-f44.google.com[209.85.219.44] X-Barracuda-Start-Time: 1368464339 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130852 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Ordinary user comments follow... On 05/13/2013 08:24 AM, Benedikt Schmidt wrote: > Hi, > currently I'm looking for the correct usage of the force_geometry option > of xfs_repair. I wasn't able to find more documentation on this option > beside that it exists. Could please somebody explain it to me? According to the xfs_repair man page, it just means to skip the geometry test. In other words, it's not a place to place CHS values or specify that your new drive has 4k sectors. Usage is '-o force_geometry'. > For a more detailed description of my problem: I've got here a hard disk > which is dying at the moment, so I copied all the content with dd_rescue > to a new and bigger one. To use xfs_copy wasn't possible as the > filesystem was already corrupted. So now I've got nearly everything on > the second hard disk (dd_rescue could'nt copy something around 6 or 7 > MB), but I can not mount the filesystem or even run xfs_repair on it, as > it fails to find a superblock. I think the problem lies in the fact that > the new disk has a different geometry than the previous one. > > Kind regards, > Benedikt Schmidt Did you ddrescue to a regular file or to a new partition? In my case, ddrescue didn't let me do a simple `ddrescue /dev/sda8 /dev/sdb6`, so I passed on using ddrescue's suggested '--force' flag and instead did something like this: root@plbearer:~# ddrescue /dev/sda8 /mnt/xfstests-test/fs_as_file GNU ddrescue 1.16 Press Ctrl-C to interrupt rescued: 671088 kB, errsize: 0 B, current rate: 9043 kB/s ipos: 671023 kB, errors: 0, average rate: 31956 kB/s opos: 671023 kB, time since last successful read: 0 s Finished # -f means "check a regular file" # -n means "do not modify filesystem" root@plbearer:~# xfs_repair -f -n -o force_geometry /mnt/xfstests-test/fs_as_file Phase 1 - find and verify superblock... Phase 2 - using internal log - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan (but don't clear) agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 No modify flag set, skipping phase 5 Phase 6 - check inode connectivity... - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify link counts... No modify flag set, skipping filesystem flush and exiting. root@plbearer:~# mount -t xfs -o loop /mnt/xfstests-test/fs_as_file /mnt/loopback/ With the regular file mounted loopback, this is the part where I would somehow get the data to a freshly-made XFS filesystem somewhere else, then verify that the data that I need is indeed still intact and valid. There are lots of tools to do such operations. I lean on xfsdump/xfsrestore because I have longstanding good experience with the programs and see such situations as a really bad time to learn new tools. If this is your last copy of important data, you should a) use the '-n' flag of xfs_repair before deciding to modify the ddrescued filesystem, and/or b) duplicate your recovered filesystem to another place so you have at least one good emergency backup. Good luck, and be careful! Michael From tinguely@sgi.com Mon May 13 12:55:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A07B27CBF for ; Mon, 13 May 2013 12:55:52 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1FBD78F8050; Mon, 13 May 2013 10:55:52 -0700 (PDT) Message-ID: <51912928.3020300@sgi.com> Date: Mon, 13 May 2013 12:55:52 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Subranshu Patel CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: Error during bulk removal of files References: <518D22F0.8040405@sgi.com> <20130511011505.GB32675@dastard> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 05/13/13 11:15, Subranshu Patel wrote: >> What 2.6.32 kernel? Output of uname -a? > > uname -a > Linux machine1 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT > 2012 x86_64 x86_64 x86_64 GNU/Linux > > # cat /etc/issue > Red Hat Enterprise Linux Server release 6.3 (Santiago) > > I am using mdtest program to delete 7 million files (of 1KB size). > Total 128 concurrent mdtest process are there. Each process removes > approx 54000 files ( 7 million / 128). > mdtest runs for a while, after that, it gets blocked and does not do > anything. However the machine is still responsive. > Is the delay log enabled? If so have you tried the command with it disabled? Are you willing to take a crash of the hang? Or want to look at the entries on the AIL? --Mark. From stan@hardwarefreak.com Mon May 13 12:56:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6DA107F50 for ; Mon, 13 May 2013 12:56:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4022F30405F for ; Mon, 13 May 2013 10:56:06 -0700 (PDT) X-ASG-Debug-ID: 1368467765-04bdf04224240c30001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id l2C6tBkfRvsiQLdk for ; Mon, 13 May 2013 10:56:06 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 90B606C0E7 for ; Mon, 13 May 2013 12:56:05 -0500 (CDT) Message-ID: <51912937.4030404@hardwarefreak.com> Date: Mon, 13 May 2013 12:56:07 -0500 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <5190DB7F.2050505@tum.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1368467766 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/13/2013 7:24 AM, Benedikt Schmidt wrote: > Hi, > currently I'm looking for the correct usage of the force_geometry option > of xfs_repair. I wasn't able to find more documentation on this option > beside that it exists. Could please somebody explain it to me? > For a more detailed description of my problem: I've got here a hard disk > which is dying at the moment, so I copied all the content with dd_rescue > to a new and bigger one. To use xfs_copy wasn't possible as the > filesystem was already corrupted. This is a standalone disk which wholly contains an XFS filesystem, yes? The filesystem is corrupted and cannot be repaired? And it won't mount? > So now I've got nearly everything on > the second hard disk (dd_rescue could'nt copy something around 6 or 7 > MB), but I can not mount the filesystem or even run xfs_repair on it, as > it fails to find a superblock. I think the problem lies in the fact that > the new disk has a different geometry than the previous one. Given the fact that the filesystem is already corrupted and not repairable, and the disk is in a state of failure, it's not surprising you can't repair or mount after the ddrescue copy, which now contains the same corrupted structures. If the original can't be repaired nor mounted, why would you believe a sector-by-sector copy could be? -- Stan From radoslaw.garbacz@xtremedatainc.com Mon May 13 13:28:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE, LOCALPART_IN_SUBJECT autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2944B7CBF for ; Mon, 13 May 2013 13:28:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9B1F8AC004 for ; Mon, 13 May 2013 11:28:49 -0700 (PDT) X-ASG-Debug-ID: 1368469727-04cb6c53a1247c40001-NocioJ Received: from mail-vb0-f48.google.com (mail-vb0-f48.google.com [209.85.212.48]) by cuda.sgi.com with ESMTP id MeaPcjuT0vFrdsmF (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 May 2013 11:28:48 -0700 (PDT) X-Barracuda-Envelope-From: radoslaw.garbacz@xtremedatainc.com X-Barracuda-Apparent-Source-IP: 209.85.212.48 Received: by mail-vb0-f48.google.com with SMTP id q16so5446232vbe.35 for ; Mon, 13 May 2013 11:28:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=a0AbXMTuLwhpyIRXvV74XdNJ9QD86xm/ccAlHiJjxu4=; b=QUqQIzbLXSyIdu+N7owDqAhYehQnqINf8lcsw1Jqh4LH27FEP3xqTXP3wpG+MbOK1q uyUzFH9BNzEbWbUwsYTuztaMiTT/8hdwhBkVcdC+zowjynfry1bANZwK7qbOTRcQZYZw eV2MYzEqls8IHyF3cI53j3jFWbgvq8U01pSqYaLkRgi+FWffHd6U9LSt3PQX5nKevycT vZJYSesp2yB1ozbcyIswZvmI2AHNFKqF5BTspyMrNGFQxsPGNoNmyyDrpOVpIFd1hXnk v7vtZg+nTwOnjybI0xZXyfJG/cExkT0xHhLR/1QIyzWQ7+3tTeHIjAjGRy4j0wAbjHxg lufw== MIME-Version: 1.0 X-Received: by 10.59.2.199 with SMTP id bq7mr19020003ved.51.1368469727747; Mon, 13 May 2013 11:28:47 -0700 (PDT) Received: by 10.58.144.197 with HTTP; Mon, 13 May 2013 11:28:47 -0700 (PDT) Date: Mon, 13 May 2013 13:28:47 -0500 Message-ID: Subject: xfs - high CPU usage when removing files From: Radoslaw Garbacz X-ASG-Orig-Subj: xfs - high CPU usage when removing files To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7bb04ce602301e04dc9db08e X-Gm-Message-State: ALoCoQlGr8L+/0jy0j4MxfM2ARryaeKxdkIuWw2V/Geo8KSvPI1M0BQh3Djd/CyQF1Xbdq9zFBDL X-Barracuda-Connect: mail-vb0-f48.google.com[209.85.212.48] X-Barracuda-Start-Time: 1368469728 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.00 X-Barracuda-Spam-Status: No, SCORE=1.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, LOCALPART_IN_SUBJECT, LOCALPART_IN_SUBJECT_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130858 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 LOCALPART_IN_SUBJECT Local part of To: address appears in Subject 0.00 HTML_MESSAGE BODY: HTML included in message 1.00 LOCALPART_IN_SUBJECT_2 Local part of To: address appears in Subject --047d7bb04ce602301e04dc9db08e Content-Type: text/plain; charset=ISO-8859-1 Hi, I noticed a high CPU usage when removing files from XFS partition on Linux, CentOS (always close to 100%). Is it a known issue, or is it more likely to be attributed to my testing methodology ('time' command)? Thanks in advance, -- Best Regards, Radoslaw Garbacz --047d7bb04ce602301e04dc9db08e Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi,

I noticed a high CPU usage when= removing files from XFS partition on Linux, CentOS (always close to 100%).=
Is it a known issue, or is it more likely to be attributed to my = testing methodology ('time' command)?

Thanks in advance,

--
Best Regards,

Radoslaw Garbacz
--047d7bb04ce602301e04dc9db08e-- From sandeen@redhat.com Mon May 13 16:55:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 98A047CBF for ; Mon, 13 May 2013 16:55:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 305B4AC003 for ; Mon, 13 May 2013 14:55:25 -0700 (PDT) X-ASG-Debug-ID: 1368482121-04bdf0422524b240001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ztXYmNAAsXH9rYJh for ; Mon, 13 May 2013 14:55:21 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4DLtLCp006766 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 13 May 2013 17:55:21 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4DLtJvo003466 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 13 May 2013 17:55:20 -0400 Message-ID: <51916146.80308@redhat.com> Date: Mon, 13 May 2013 16:55:18 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs-oss Subject: [PATCH, RFC] xfstests: fail test if it causes a kernel taint X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH, RFC] xfstests: fail test if it causes a kernel taint Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368482121 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This should, in theory, fail a test if it introduces one of a handful of "serious" kernel taints. I mask on a few taint values because using an out of tree module or a non-GPL module should never fail a test, for example. Signed-off-by: Eric Sandeen --- diff --git a/check b/check index a79747e..a9cac4e 100755 --- a/check +++ b/check @@ -446,6 +445,11 @@ do fi rm -f core $seqres.notrun + if [ "$HOSTOS" == "Linux" ]; then + tainted=`sysctl -n kernel.tainted` + let "tainted &= $TAINT_FAIL" + fi + start=`_wallclock` $timestamp && echo -n " ["`date "+%T"`"]" [ ! -x $seq ] && chmod u+x $seq # ensure we can run it @@ -507,6 +511,19 @@ do "entire diff)" err=true fi + + # See if this run tainted the kernel due to oops, etc + if [ "$HOSTOS" == "Linux" ] + then + tainted2=`sysctl -n kernel.tainted` + let "tainted2 &= $TAINT_FAIL" + if [ "$tainted" != "$tainted2" ] + then + echo " Kernel taint changed from $tainted to $tainted2." + echo " See dmesg for details." + err=true + fi + fi fi fi diff --git a/common/config b/common/config index 67c1498..6483ded 100644 --- a/common/config +++ b/common/config @@ -82,6 +82,15 @@ export PWD=`pwd` export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a} export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes} +# kernel taint values on Linux (from kernel.taint sysctl) +TAINT_MACHINE_CHECK=16 +TAINT_BAD_PAGE=32 +TAINT_DIED=128 +TAINT_WARNING=512 +# If a test introduces one of these taints we consider it to have failed +let "TAINT_FAIL=( $TAINT_MACHINE_CHECK | $TAINT_BAD_PAGE | $TAINT_DIED | $TAINT_WARNING )" +export TAINT_FAIL + # $1 = prog to look for, $2* = default pathnames if not found in $PATH set_prog_path() { From noreply2@firstproperty.sg Mon May 13 17:03:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.2 required=5.0 tests=ENGLISH_UCE_SUBJECT, HTML_MESSAGE,HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3F2967CBF for ; Mon, 13 May 2013 17:03:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2B5498F8037 for ; Mon, 13 May 2013 15:03:14 -0700 (PDT) X-ASG-Debug-ID: 1368482588-04cbb05fe324f960001-w1Z2WR Received: from mailsg9.propertyapp.co (smtp72.texale.com [94.249.186.72]) by cuda.sgi.com with ESMTP id U533fyd7HAq5QNvT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 May 2013 15:03:10 -0700 (PDT) X-Barracuda-Envelope-From: noreply2@firstproperty.sg X-Barracuda-Apparent-Source-IP: 94.249.186.72 Received: from firstproperty.sg (li407-11.members.linode.com [106.187.55.11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by yqteny4axv.propertyapp.co (Postfix) with ESMTPSA id 3A7BABC285 for ; Mon, 13 May 2013 22:03:10 +0000 (UTC) DomainKey-Signature: a=rsa-sha1; s=mail; d=firstproperty.sg; c=simple; q=dns; b=WWAYNtgKPzPmy/2M5VT+NkFCpipBfyHfc+OoBjoecazaZrgun37Z76Vzq4lFDLtO3 iir6cQp4sZQ84yplNSc/HCBznQEt+ChzjA4WWubyCONlbfJO2DpdK6oWauy4BoWkAHP DOehYqrDYKbVNJ36NWX1mPRYZMc+uYE6ZW526gs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=firstproperty.sg; s=mail; t=1368482592; bh=WMXWVOWA6WZulSmTgIzB34NT9snFxRDKBWLvRoyIqQY=; h=Date:To:From:Reply-To:Subject:Message-ID:MIME-Version: Content-Transfer-Encoding:Content-Type; b=Jfqx+xGfo2uSSwk63hFbv2otvEzo5SyScy51rXqBX/AVSvZEAhcNSKYc4hV7Nkl+7 gE+PXinxu4W1mhSU6UxDqpuYYE5PLMSJY178wkxZz0Mlal7hOAfVW8RZSI3Y83n3bj 4LjDA+d04dAgGbZVeJ9ul/aGtN9VuxazhGQkaAPc= Date: Tue, 14 May 2013 06:03:07 +0800 To: linux-xfs@oss.sgi.com From: mail@firstproperty.sg Reply-To: mail@firstproperty.sg Subject: [ADV] New Mixed Development Project @ HongLeong Garden (Call David Chia @ +65-8383 7771) Message-ID: X-ASG-Orig-Subj: [ADV] New Mixed Development Project @ HongLeong Garden (Call David Chia @ +65-8383 7771) X-Priority: 3 X-Mailer: PHPMailer (phpmailer.sourceforge.net) [version 2.0.4] MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="utf-8" X-Barracuda-Connect: smtp72.texale.com[94.249.186.72] X-Barracuda-Start-Time: 1368482590 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.46 X-Barracuda-Spam-Status: No, SCORE=1.46 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085b, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, HTML_MIME_NO_HTML_TAG, MAILTO_TO_SPAM_ADDR, MIME_HTML_ONLY, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130872 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 1.05 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag 0.40 BSF_SC0_SA085b Custom Rule SA085b

You're Invited to New Launch of Mixed Development at NeWest (ex-Hong Leong Garden). A Rare Investment Opportunity for Commercial Units. Call David Chia +65-8383 7771 to Buy Now! Forward this Mail to Your Friends, They might not want to miss this rare investment opportunity!

Mixed Development in NeWest (ex-Hong Leong Garden)

The mixed development will consist of 12-storey residential and commercial shops, brought to you by Oxley Holdings. Both the commercial shops and residential would be very popular due to limited supply of new development in this area, and also the location is quite close to surrounding areas like NUS, Nanhua Primary School, walking distance to Clementi MRT, as well easy access via West Coast Highway to Vivocity (12mins drive) and Shenton Way (15-18mins drive).

Nested in West Coast Drive, NeWest is well connected and relatively close to the city.

Within the vicinity lies a clusters of landed homes and condominiums, prestigious schools and tertiary institutions, efficient bus and train services, hospital, clinics, markets for grocery shopping, plus an expressway that leads right into the city within minutes.

The Changi Airport is a breeze away with the Ayer Rajah Expressway.

The Clementi MRT Station is 0.84 Km from HLGSC and just a 8 minutes bus ride away.Below are the following are statistics of nearby amenities, schools, institutions, etc. Distances are in approximation only.

david_chiaDavid Chia
Marketing Director
Mobile : +65-8383 7771
Email : davidchia7771@gmail.com
CEA Reg. No: R007523C

huttons_logo

Perfect Investment Opportunity

Perfect for Student - A good location for study for students in NUS, Nanhua Primary School, walking distance to Clementi MRT.
Limited Commercial Units -  A rare gem of investment for limited commercial units with residential mixed developments in ex-Hong Leong Garden. Expected fully sold on VVIP Launch.


Why Invest in NeWest @ Hong Leong Garden


  • Well connected by major expressway AYE and west coast highway
  • Huge tenants pool from Science Park, NUS, NUH, Japanese Schools, Alexandra Business Centre, PSA, Jurong Gateway, NOL
  • Fully functional layout without bay windows and planters.
  • Within 1 km to Nan Hua Primary School and Clementi MRT
  • Next to a Park which offers serenity and views of lush greenery
  • Close to National Parks: Clementi Woods, West Coast, Kent Ridge, Telok Blangah
  • Excellent Investment with High Rental Yield & Capital Appreciation!
  • High Demand but Low supply in West region for new freehold and 999 yrs leasehold Development.
  • Mins drive to CBD, Orchard, RWS & MBS.
  • Newest @ Hong Leong Garden is Foreigners eligible
  • High Demand but Low supply in West region for new mixed development


Unit Type & Pricing


Call for Units and Pricing details...


Register for VVIP & Enjoy Discount


Enjoy VVIP Early Bird Discount

Prior to public launch, you are invited to an Exclusive Pre-Launch Viewing & Priority Booking session where you are entitled to choose and book units at a special VIP Pre-Launch Discount Price. (Attractive Pricing Before Actual Launch)

  • PRIORITY UNIT CHOICE & SELECTION
  • ENJOY EARLY BIRD DISCOUNTS
  • LOCALS, PERMANENT RESIDENTS & FOREIGNERS ARE ELIGIBLE
  • DIRECT DEVELOPER PRICES 
Project Details
Project Name: NeWest
Location: 106 West Coast Way
District: 05
Tenure: 999 yrs Leasehold
Total Site Area: 262,877 sqft.
No. of Storey: Up to 12 storeys
Excepted TOP: To Be Advised
No. of Units: Est. 200 (Residential Units with Commercial Shops at Level 1)
Buyers Eligibility: Locals / PRs / Foreigners
david_chiaDavid Chia
Marketing Director
Mobile : +65-8383 7771
Email : davidchia7771@gmail.com
CEA Reg. No: R007523C

huttons_logo

This e-mail is intended for the recipient(s) only and it contains information which may be confidential or privileged. If you are not the intended recipient, please advise the sender immediately and then delete it.  You must not use, disclose or distribute the contents without the author's prior permission. Unless specifically stated, this email does not constitute formal advice or commitment by the sender or Huttons Group of company.
If you prefer not to receive any new project lauches with us in the future, please click here:  Unsubscribe
Huttons Asia Pte Ltd CEA Licence No: L3008899K
3 Bishan Place, #02-01 CPF Bishan Building Singapore 579838
Powered by www.Proxperty.com

 

From sandeen@sandeen.net Mon May 13 17:15:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 804517CBF for ; Mon, 13 May 2013 17:15:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 25CD9AC001 for ; Mon, 13 May 2013 15:15:17 -0700 (PDT) X-ASG-Debug-ID: 1368483316-04bdf0422424cb50001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ZU6GdBKjzrBCep3G for ; Mon, 13 May 2013 15:15:17 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 82D0D63C59B8; Mon, 13 May 2013 17:15:16 -0500 (CDT) Message-ID: <519165F2.80902@sandeen.net> Date: Mon, 13 May 2013 17:15:14 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: benediktibk@aon.at CC: Benedikt Schmidt , xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <5190DB7F.2050505@tum.de> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368483316 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130872 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/13/13 7:24 AM, Benedikt Schmidt wrote: > Hi, currently I'm looking for the correct usage of the force_geometry > option of xfs_repair. I wasn't able to find more documentation on > this option beside that it exists. Could please somebody explain it > to me? > > For a more detailed description of my problem: I've got here a hard > disk which is dying at the moment, so I copied all the content with > dd_rescue to a new and bigger one. To use xfs_copy wasn't possible as > the filesystem was already corrupted. So now I've got nearly > everything on the second hard disk (dd_rescue could'nt copy something > around 6 or 7 MB), but I can not mount the filesystem or even run > xfs_repair on it, as it fails to find a superblock. I think the > problem lies in the fact that the new disk has a different geometry > than the previous one. the geometry in "force_geometry" refers to the filesystem geometry, not the CHS geometry of your disk. It's only needed if the fs has only 2 allocation groups and they don't match, or if the fs has only a single allocation group (and therefore has nothing to test against). So I don't think that's the option you need. I don't know what you copied the fs to, but perhaps you copied the entire disk, not the partition. How did you invoke dd_rescue? If you dd_rescued to a file, what does: # file say? Or, if you dd_rescued to a device, what does # file -s say? -Eric From chris.friesen@genband.com Mon May 13 18:27:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9F7947CBF for ; Mon, 13 May 2013 18:27:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 25D15AC001 for ; Mon, 13 May 2013 16:27:47 -0700 (PDT) X-ASG-Debug-ID: 1368487664-04cb6c53a2253cf0001-NocioJ Received: from exprod7og119.obsmtp.com (exprod7og119.obsmtp.com [64.18.2.16]) by cuda.sgi.com with SMTP id 4sIqNJ6oOXPdpUCw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 May 2013 16:27:45 -0700 (PDT) X-Barracuda-Envelope-From: chris.friesen@genband.com X-Barracuda-RBL-Trusted-Forwarder: 64.18.2.16 Received: from mail.genband.com ([63.149.188.88]) (using TLSv1) by exprod7ob119.postini.com ([64.18.6.12]) with SMTP ID DSNKUZF274KIl0c/lbQZui6rFh4fmRpROk9o@postini.com; Mon, 13 May 2013 16:27:45 PDT Received: from gbausmail.genband.com ([172.16.21.62]) by mail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Mon, 13 May 2013 18:27:37 -0500 X-Barracuda-Apparent-Source-IP: 63.149.188.88 X-Barracuda-BBL-IP: 63.149.188.88 X-Barracuda-RBL-IP: 63.149.188.88 Received: from [1.220.5.83] ([1.220.5.83]) by gbausmail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Mon, 13 May 2013 18:27:36 -0500 Message-ID: <519176E7.8070204@genband.com> Date: Mon, 13 May 2013 17:27:35 -0600 From: Chris Friesen User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.16 MIME-Version: 1.0 To: Ben Myers , Alex Elder , xfs@oss.sgi.com Subject: 2.6.27-based kernel failing xfstests xfs/182 Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: 2.6.27-based kernel failing xfstests xfs/182 Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 13 May 2013 23:27:36.0574 (UTC) FILETIME=[73BD79E0:01CE5031] X-TM-AS-Product-Ver: SMEX-8.0.0.4160-6.500.1024-19864.002 X-TM-AS-Result: No--19.411100-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: exprod7og119.obsmtp.com[64.18.2.16] X-Barracuda-Start-Time: 1368487664 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130878 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, I'm working on an embedded system running a 2.6.27-based kernel. I'm digging into some intermittent xfs corruption issues. Yes, I realize the right answer is probably to upgrade, but for the usual embedded reasons that's tricky. I'm seeing test xfs/182 fail with 40 or so files showing messages like: file /opt/xfstest2/960 has incorrect size - sync failed In our case the xfs filesystems used for testing are on top of lvm, which is in turn on top of two SAS drives in RAID1. Any suggestions on where I should start looking? I'm looking at the "do_sync() and XFSQA test 182 failures...." thread on the mailing list from 2008, can someone point me to the commit that eventually resulted from that? Thanks, Chris -- Chris Friesen Software Designer www.genband.com office:+1.343.883.2717 From david@fromorbit.com Mon May 13 19:36:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 445427CBF for ; Mon, 13 May 2013 19:36:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2FEB3304059 for ; Mon, 13 May 2013 17:36:54 -0700 (PDT) X-ASG-Debug-ID: 1368491811-04cb6c53a3256d60001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id p0DUhnnTDuXiPwkc for ; Mon, 13 May 2013 17:36:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgOAP2FkVF5LCz9/2dsb2JhbABagwe7QIUkBAGBDRd0gh8BAQU6HCMQCAMOCgklDwUlAyETiAuuLY52Fo1FMIEdB4NVA5crkTaDISo Received: from ppp121-44-44-253.lns20.syd6.internode.on.net (HELO dastard) ([121.44.44.253]) by ipmail05.adl6.internode.on.net with ESMTP; 14 May 2013 10:06:51 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uc3EW-0007WS-RL; Tue, 14 May 2013 10:36:48 +1000 Date: Tue, 14 May 2013 10:36:48 +1000 From: Dave Chinner To: Subranshu Patel Cc: Mark Tinguely , xfs@oss.sgi.com Subject: Re: Error during bulk removal of files Message-ID: <20130514003648.GO32675@dastard> X-ASG-Orig-Subj: Re: Error during bulk removal of files References: <518D22F0.8040405@sgi.com> <20130511011505.GB32675@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368491812 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130882 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 13, 2013 at 09:45:30PM +0530, Subranshu Patel wrote: > > What 2.6.32 kernel? Output of uname -a? > > uname -a > Linux machine1 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT > 2012 x86_64 x86_64 x86_64 GNU/Linux > > # cat /etc/issue > Red Hat Enterprise Linux Server release 6.3 (Santiago) Please report this to your Redhat support representative. Indeed, I suspect that running the latest update kernel will fix your problem. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 13 19:45:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 201E17CBF for ; Mon, 13 May 2013 19:45:28 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id ABB07AC001 for ; Mon, 13 May 2013 17:45:24 -0700 (PDT) X-ASG-Debug-ID: 1368492322-04cbb05fe2256690001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id tGc9aOSYgfqSYe3k for ; Mon, 13 May 2013 17:45:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgOAHCIkVF5LCz9/2dsb2JhbABagwe7QIUkBAGBDRd0gh8BAQU6HBgLEAgDGAklDwUlAyETiAuuMI53Fo11gR0Hg1UDlyuRNoMhKg Received: from ppp121-44-44-253.lns20.syd6.internode.on.net (HELO dastard) ([121.44.44.253]) by ipmail05.adl6.internode.on.net with ESMTP; 14 May 2013 10:15:21 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uc3Mn-0007XP-3Z; Tue, 14 May 2013 10:45:21 +1000 Date: Tue, 14 May 2013 10:45:21 +1000 From: Dave Chinner To: Chris Friesen Cc: Ben Myers , Alex Elder , xfs@oss.sgi.com Subject: Re: 2.6.27-based kernel failing xfstests xfs/182 Message-ID: <20130514004521.GP32675@dastard> X-ASG-Orig-Subj: Re: 2.6.27-based kernel failing xfstests xfs/182 References: <519176E7.8070204@genband.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519176E7.8070204@genband.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368492322 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130882 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 13, 2013 at 05:27:35PM -0600, Chris Friesen wrote: > > Hi, > > I'm working on an embedded system running a 2.6.27-based kernel. > > I'm digging into some intermittent xfs corruption issues. Yes, I > realize the right answer is probably to upgrade, but for the usual > embedded reasons that's tricky. > > I'm seeing test xfs/182 fail with 40 or so files showing messages like: > > file /opt/xfstest2/960 has incorrect size - sync failed > > In our case the xfs filesystems used for testing are on top of lvm, > which is in turn on top of two SAS drives in RAID1. > > Any suggestions on where I should start looking? I'm looking at the > "do_sync() and XFSQA test 182 failures...." thread on the mailing > list from 2008, can someone point me to the commit that eventually > resulted from that? I doubt anyone can pinpoint a fix for you. I'd suggest that you find the kernel release where the test starts passing, and the work backwards from there... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 13 19:47:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9A0D97CBF for ; Mon, 13 May 2013 19:47:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5EE5A304066 for ; Mon, 13 May 2013 17:47:54 -0700 (PDT) X-ASG-Debug-ID: 1368492472-04bdf042232522a0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id n6Ho66XB7c53kzz0 for ; Mon, 13 May 2013 17:47:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgOAHCIkVF5LCz9/2dsb2JhbABagwe7QIUkBAGBDRd0gh8BAQU6HCMQCAMYCSUPBSUDIROIC64wjncWjXWBHQeDVQOXK5E2gyEq Received: from ppp121-44-44-253.lns20.syd6.internode.on.net (HELO dastard) ([121.44.44.253]) by ipmail05.adl6.internode.on.net with ESMTP; 14 May 2013 10:17:51 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uc3PD-0007Y3-Ed; Tue, 14 May 2013 10:47:51 +1000 Date: Tue, 14 May 2013 10:47:51 +1000 From: Dave Chinner To: Radoslaw Garbacz Cc: xfs@oss.sgi.com Subject: Re: xfs - high CPU usage when removing files Message-ID: <20130514004751.GQ32675@dastard> X-ASG-Orig-Subj: Re: xfs - high CPU usage when removing files References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368492472 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130882 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 13, 2013 at 01:28:47PM -0500, Radoslaw Garbacz wrote: > Hi, > > I noticed a high CPU usage when removing files from XFS partition on Linux, > CentOS (always close to 100%). > Is it a known issue, or is it more likely to be attributed to my testing > methodology ('time' command)? If you are removing extremely fragmented files, then 100% CPU will be seen. If you are removing tens of thousands of small files, then 100% CPU will be seen, IOWs, if there's enough work to be done, removing files will use all the available CPU. There's no problem with that. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 13 20:15:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7BE137CBF for ; Mon, 13 May 2013 20:15:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5C2268F8049 for ; Mon, 13 May 2013 18:15:07 -0700 (PDT) X-ASG-Debug-ID: 1368494102-04cb6c53a3258910001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id KoM2UXMZzWugBUVB for ; Mon, 13 May 2013 18:15:02 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgOAIuPkVF5LCz9/2dsb2JhbABagwe7QIUkBAGBDRd0gh8BAQU6HCMQCAMYCSUPBSUDIROIC64jjwAWjXWBHQeDVQOXK5E2gyEq Received: from ppp121-44-44-253.lns20.syd6.internode.on.net (HELO dastard) ([121.44.44.253]) by ipmail05.adl6.internode.on.net with ESMTP; 14 May 2013 10:45:02 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uc3pV-0007c4-6u; Tue, 14 May 2013 11:15:01 +1000 Date: Tue, 14 May 2013 11:15:01 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint Message-ID: <20130514011501.GR32675@dastard> X-ASG-Orig-Subj: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint References: <51916146.80308@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51916146.80308@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368494102 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130884 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' On Mon, May 13, 2013 at 04:55:18PM -0500, Eric Sandeen wrote: > This should, in theory, fail a test if it introduces one of > a handful of "serious" kernel taints. I mask on a few taint > values because using an out of tree module or a non-GPL module > should never fail a test, for example. > > Signed-off-by: Eric Sandeen I like the idea - it should catch lockdep failures and other such problems. > --- > > diff --git a/check b/check > index a79747e..a9cac4e 100755 > --- a/check > +++ b/check > @@ -446,6 +445,11 @@ do > fi > rm -f core $seqres.notrun > > + if [ "$HOSTOS" == "Linux" ]; then > + tainted=`sysctl -n kernel.tainted` > + let "tainted &= $TAINT_FAIL" > + fi > + > start=`_wallclock` > $timestamp && echo -n " ["`date "+%T"`"]" > [ ! -x $seq ] && chmod u+x $seq # ensure we can run it > @@ -507,6 +511,19 @@ do > "entire diff)" > err=true > fi > + > + # See if this run tainted the kernel due to oops, etc > + if [ "$HOSTOS" == "Linux" ] > + then > + tainted2=`sysctl -n kernel.tainted` > + let "tainted2 &= $TAINT_FAIL" > + if [ "$tainted" != "$tainted2" ] > + then > + echo " Kernel taint changed from $tainted to $tainted2." > + echo " See dmesg for details." > + err=true > + fi Should we dump the last 100 lines of dmesg into the output file here? And then rely on the golden image match failing to fail the test? Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Mon May 13 21:00:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5D5207CBF for ; Mon, 13 May 2013 21:00:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4412C8F8049 for ; Mon, 13 May 2013 19:00:47 -0700 (PDT) X-ASG-Debug-ID: 1368496846-04cb6c53a125aff0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 0HtFvgUzJLRfCOZX for ; Mon, 13 May 2013 19:00:46 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 7471663C5FF1; Mon, 13 May 2013 21:00:46 -0500 (CDT) Message-ID: <51919ACD.4040903@sandeen.net> Date: Mon, 13 May 2013 21:00:45 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint References: <51916146.80308@redhat.com> <20130514011501.GR32675@dastard> X-ASG-Orig-Subj: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint In-Reply-To: <20130514011501.GR32675@dastard> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368496846 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130888 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' On 5/13/13 8:15 PM, Dave Chinner wrote: > On Mon, May 13, 2013 at 04:55:18PM -0500, Eric Sandeen wrote: >> This should, in theory, fail a test if it introduces one of >> a handful of "serious" kernel taints. I mask on a few taint >> values because using an out of tree module or a non-GPL module >> should never fail a test, for example. >> >> Signed-off-by: Eric Sandeen > > I like the idea - it should catch lockdep failures and other such > problems. > >> --- >> >> diff --git a/check b/check >> index a79747e..a9cac4e 100755 >> --- a/check >> +++ b/check >> @@ -446,6 +445,11 @@ do >> fi >> rm -f core $seqres.notrun >> >> + if [ "$HOSTOS" == "Linux" ]; then >> + tainted=`sysctl -n kernel.tainted` >> + let "tainted &= $TAINT_FAIL" >> + fi >> + >> start=`_wallclock` >> $timestamp && echo -n " ["`date "+%T"`"]" >> [ ! -x $seq ] && chmod u+x $seq # ensure we can run it >> @@ -507,6 +511,19 @@ do >> "entire diff)" >> err=true >> fi >> + >> + # See if this run tainted the kernel due to oops, etc >> + if [ "$HOSTOS" == "Linux" ] >> + then >> + tainted2=`sysctl -n kernel.tainted` >> + let "tainted2 &= $TAINT_FAIL" >> + if [ "$tainted" != "$tainted2" ] >> + then >> + echo " Kernel taint changed from $tainted to $tainted2." >> + echo " See dmesg for details." >> + err=true >> + fi > > Should we dump the last 100 lines of dmesg into the output file > here? And then rely on the golden image match failing to fail the > test? Or into $seq.full . . I dunno. It's hard to know how much dmesg you'd need to get the right bits. Dumping all of it into $seq.full might be best; it only trips when it's a new taint, so won't fire for every test. -Eric > Cheers, > > Dave. > From qcai@redhat.com Mon May 13 21:28:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4BF857CBF for ; Mon, 13 May 2013 21:28:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 099AA30405F for ; Mon, 13 May 2013 19:28:26 -0700 (PDT) X-ASG-Debug-ID: 1368498504-04bdf042252570c0001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id iiIQTnaVTdCDTSUc for ; Mon, 13 May 2013 19:28:25 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4E2SNQl027479; Mon, 13 May 2013 22:28:23 -0400 Date: Mon, 13 May 2013 22:28:23 -0400 (EDT) From: CAI Qian To: Eric Sandeen Cc: xfs@oss.sgi.com Message-ID: <1140911111.191794.1368498503318.JavaMail.root@redhat.com> In-Reply-To: <51895115.90108@sandeen.net> References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> <647316680.8155487.1367913231441.JavaMail.root@redhat.com> <51895115.90108@sandeen.net> Subject: Re: 3.9.0: XFS rootfs corruption MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.0: XFS rootfs corruption Thread-Index: EiU/vlipSaGUUnEH/wKzBOgPUF0klA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1368498505 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130890 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 3.10-rc1 has the same problem reproduced on 2 Power 7 systems. I am going to get the metadata dump this time. CAI Qian OK ] Started Setup Virtual Console. [ OK ] Reached target System Initialization. [ 1.430947] device-mapper: uevent: version 1.0.3 [ 1.431120] device-mapper: ioctl: 4.24.0-ioctl (2013-01-15) initialised: dm-devel@redhat.com [ OK ] Started dracut pre-udev hook. Starting udev Kernel Device Manager... [ 1.453958] systemd-udevd[244]: starting version 197 [ OK ] Started udev Kernel Device Manager. Starting dracut pre-trigger hook... [ OK ] Started dracut pre-trigger hook. Starting udev Coldplug all Devices... [ OK ] Started udev Coldplug all Devices. Starting Show Plymouth Boot Screen... Starting dracut initqueue hook... [ 1.546875] ibmvscsi 30000003: SRP_VERSION: 16.a [ 1.547169] scsi0 : IBM POWER Virtual SCSI Adapter 1.5.9 [ 1.547430] ibmvscsi 30000003: partner initialization complete [ 1.547533] ibmvscsi 30000003: host srp version: 16.a, host partition vios (1), OS 3, max io 262144 [ 1.547684] ibmvscsi 30000003: Client reserve enabled [ 1.547713] ibmvscsi 30000003: sent SRP login [ 1.547798] ibmvscsi 30000003: SRP_LOGIN succeeded [ 1.564079] scsi 0:0:1:0: Direct-Access AIX VDASD 0001 PQ: 0 ANSI: 3 [ 1.608450] sd 0:0:1:0: [sda] 209715200 512-byte logical blocks: (107 GB/100 GiB) [ 1.608555] sd 0:0:1:0: [sda] Write Protect is off [ 1.608653] sd 0:0:1:0: [sda] Cache data unavailable [ 1.608663] sd 0:0:1:0: [sda] Assuming drive cache: write through [ 1.609140] sd 0:0:1:0: [sda] Cache data unavailable [ 1.609152] sd 0:0:1:0: [sda] Assuming drive cache: write through [ 1.621164] sda: sda1 sda2 sda3 [ 1.621841] sd 0:0:1:0: [sda] Cache data unavailable [ 1.621849] sd 0:0:1:0: [sda] Assuming drive cache: write through [ 1.621858] sd 0:0:1:0: [sda] Attached SCSI disk [ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Basic System. [ 1.871350] bio: create slab at 1 [ 2.030633] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled [ 2.033824] XFS (dm-1): Mounting Filesystem [ 2.180799] XFS (dm-1): Starting recovery (logdev: internal) [ 2.658307] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000239703c [ 2.658307] [ 2.658352] CPU: 14 PID: 372 Comm: mount Not tainted 3.10.0-rc1 #1 [ 2.658360] Call Trace: [ 2.658370] [c0000003e7c02b40] [c000000000014e28] .show_stack+0x78/0x1e0 (unreliable) [ 2.658387] [c0000003e7c02c10] [c000000000747834] .dump_stack+0x28/0x3c [ 2.658441] [c0000003e7c02c80] [d00000000234ff14] .xfs_error_report+0x54/0x70 [xfs] [ 2.658497] [c0000003e7c02cf0] [d000000002396ee4] .__xfs_dir3_data_check+0x784/0x820 [xfs] [ 2.658553] [c0000003e7c02df0] [d00000000239703c] .xfs_dir3_data_verify+0xbc/0xe0 [xfs] [ 2.658617] [c0000003e7c02e70] [d00000000239709c] .xfs_dir3_data_write_verify+0x3c/0x1c0 [xfs] [ 2.658670] [c0000003e7c02f20] [d00000000234db94] ._xfs_buf_ioapply+0xd4/0x400 [xfs] [ 2.658732] [c0000003e7c03060] [d00000000234dfcc] .xfs_buf_iorequest+0x4c/0xe0 [xfs] [ 2.658784] [c0000003e7c030f0] [d00000000234e0c4] .xfs_bdstrat_cb+0x64/0x120 [xfs] [ 2.658837] [c0000003e7c03180] [d00000000234e284] .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] [ 2.658898] [c0000003e7c03270] [d00000000234f318] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] [ 2.658964] [c0000003e7c03310] [d0000000023b1964] .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] [ 2.659031] [c0000003e7c033d0] [d0000000023b1cac] .xlog_recover_process_data+0x26c/0x340 [xfs] [ 2.659089] [c0000003e7c034a0] [d0000000023b2168] .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] [ 2.659155] [c0000003e7c03610] [d0000000023b23c0] .xlog_do_log_recovery+0xa0/0x120 [xfs] [ 2.659221] [c0000003e7c036b0] [d0000000023b2460] .xlog_do_recover+0x20/0x150 [xfs] [ 2.659287] [c0000003e7c03740] [d0000000023b2624] .xlog_recover+0x94/0x100 [xfs] [ 2.659344] [c0000003e7c037d0] [d0000000023bcfe4] .xfs_log_mount+0x144/0x1e0 [xfs] [ 2.659410] [c0000003e7c03870] [d0000000023b60f8] .xfs_mountfs+0x3c8/0x780 [xfs] [ 2.659473] [c0000003e7c03930] [d0000000023643ac] .xfs_fs_fill_super+0x32c/0x3c0 [xfs] [ 2.659498] [c0000003e7c039d0] [c000000000215e08] .mount_bdev+0x258/0x2b0 [ 2.659561] [c0000003e7c03aa0] [d000000002361cb8] .xfs_fs_mount+0x18/0x30 [xfs] [ 2.659583] [c0000003e7c03b10] [c000000000216e10] .mount_fs+0x70/0x220 [ 2.659595] [c0000003e7c03bd0] [c000000000239708] .vfs_kern_mount+0x58/0x140 [ 2.659615] [c0000003e7c03c80] [c00000000023c330] .do_mount+0x2b0/0xb00 [ 2.659626] [c0000003e7c03d70] [c00000000023cc30] .SyS_mount+0xb0/0x110 [ 2.659639] [c0000003e7c03e30] [c000000000009e54] syscall_exit+0x0/0x98 [ 2.659651] c0000003eb671000: 58 44 32 44 09 50 00 40 0a 50 00 40 0b 50 00 40 XD2D.P.@.P.@.P.@ [ 2.659663] c0000003eb671010: 00 00 00 00 00 a0 78 53 32 62 65 61 68 5f 74 61 ......xS2beah_ta [ 2.659674] c0000003eb671020: 73 6b 5f 32 31 39 39 63 63 39 37 2d 64 66 32 31 sk_2199cc97-df21 [ 2.659694] c0000003eb671030: 2d 34 66 63 31 2d 39 39 61 63 2d 32 64 64 34 39 -4fc1-99ac-2dd49 [ 2.659707] XFS (dm-1): Internal error xfs_dir3_data_write_verify at line 271 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000234db94 [ 2.659707] [ 2.659723] CPU: 14 PID: 372 Comm: mount Not tainted 3.10.0-rc1 #1 [ 2.659731] Call Trace: [ 2.659737] [c0000003e7c02c10] [c000000000014e28] .show_stack+0x78/0x1e0 (unreliable) [ 2.659751] [c0000003e7c02ce0] [c000000000747834] .dump_stack+0x28/0x3c [ 2.659812] [c0000003e7c02d50] [d00000000234ff14] .xfs_error_report+0x54/0x70 [xfs] [ 2.659874] [c0000003e7c02dc0] [d00000000234ffac] .xfs_corruption_error+0x7c/0xb0 [xfs] [ 2.659929] [c0000003e7c02e70] [d0000000023971a8] .xfs_dir3_data_write_verify+0x148/0x1c0 [xfs] [ 2.659992] [c0000003e7c02f20] [d00000000234db94] ._xfs_buf_ioapply+0xd4/0x400 [xfs] [ 2.660053] [c0000003e7c03060] [d00000000234dfcc] .xfs_buf_iorequest+0x4c/0xe0 [xfs] [ 2.660115] [c0000003e7c030f0] [d00000000234e0c4] .xfs_bdstrat_cb+0x64/0x120 [xfs] [ 2.660169] [c0000003e7c03180] [d00000000234e284] .__xfs_buf_delwri_submit+0x104/0x2a0 [xfs] [ 2.660230] [c0000003e7c03270] [d00000000234f318] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] [ 2.660296] [c0000003e7c03310] [d0000000023b1964] .xlog_recover_commit_trans+0xd4/0x1b0 [xfs] [ 2.660363] [c0000003e7c033d0] [d0000000023b1cac] .xlog_recover_process_data+0x26c/0x340 [xfs] [ 2.660420] [c0000003e7c034a0] [d0000000023b2168] .xlog_do_recovery_pass+0x3e8/0x5a0 [xfs] [ 2.660485] [c0000003e7c03610] [d0000000023b23c0] .xlog_do_log_recovery+0xa0/0x120 [xfs] [ 2.660552] [c0000003e7c036b0] [d0000000023b2460] .xlog_do_recover+0x20/0x150 [xfs] [ 2.660608] [c0000003e7c03740] [d0000000023b2624] .xlog_recover+0x94/0x100 [xfs] [ 2.660675] [c0000003e7c037d0] [d0000000023bcfe4] .xfs_log_mount+0x144/0x1e0 [xfs] [ 2.660741] [c0000003e7c03870] [d0000000023b60f8] .xfs_mountfs+0x3c8/0x780 [xfs] [ 2.660795] [c0000003e7c03930] [d0000000023643ac] .xfs_fs_fill_super+0x32c/0x3c0 [xfs] [ 2.660817] [c0000003e7c039d0] [c000000000215e08] .mount_bdev+0x258/0x2b0 [ 2.660869] [c0000003e7c03aa0] [d000000002361cb8] .xfs_fs_mount+0x18/0x30 [xfs] [ 2.660881] [c0000003e7c03b10] [c000000000216e10] .mount_fs+0x70/0x220 [ 2.660902] [c0000003e7c03bd0] [c000000000239708] .vfs_kern_mount+0x58/0x140 [ 2.660913] [c0000003e7c03c80] [c00000000023c330] .do_mount+0x2b0/0xb00 [ 2.660923] [c0000003e7c03d70] [c00000000023cc30] .SyS_mount+0xb0/0x110 [ 2.660944] [c0000003e7c03e30] [c000000000009e54] syscall_exit+0x0/0x98 [ 2.660954] XFS (dm-1): Corruption detected. Unmount and run xfs_repair [ 2.660965] XFS (dm-1): xfs_do_force_shutdown(0x8) called from line 1364 of file fs/xfs/xfs_buf.c. Return address = 0xd00000000234de84 [ 2.660979] XFS (dm-1): Corruption of in-memory data detected. Shutting down filesystem [ 2.660989] XFS (dm-1): Please umount the filesystem and rectify the problem(s) [ 2.661013] XFS (dm-1): metadata I/O error: block 0xd6060 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661026] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661041] XFS (dm-1): metadata I/O error: block 0xd7940 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661053] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661069] XFS (dm-1): metadata I/O error: block 0xe0190 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661091] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661106] XFS (dm-1): metadata I/O error: block 0x379590 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661118] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661134] XFS (dm-1): metadata I/O error: block 0x45f5e0 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661154] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661169] XFS (dm-1): metadata I/O error: block 0x5483c0 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661181] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661197] XFS (dm-1): metadata I/O error: block 0x576190 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661218] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661233] XFS (dm-1): metadata I/O error: block 0x57acc8 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661245] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661261] XFS (dm-1): metadata I/O error: block 0x1900002 ("xlog_recover_iodone") error 5 numblks 1 [ 2.661282] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661297] XFS (dm-1): metadata I/O error: block 0x1900018 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661309] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661324] XFS (dm-1): metadata I/O error: block 0x1900030 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661346] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661361] XFS (dm-1): metadata I/O error: block 0x19004f0 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661373] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661389] XFS (dm-1): metadata I/O error: block 0x1900540 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661411] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661427] XFS (dm-1): metadata I/O error: block 0x1900558 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661439] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661454] XFS (dm-1): metadata I/O error: block 0x197fe10 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661476] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661491] XFS (dm-1): metadata I/O error: block 0x19b9f70 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661503] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661518] XFS (dm-1): metadata I/O error: block 0x1f02c50 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661541] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661557] XFS (dm-1): metadata I/O error: block 0x1f0cea0 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661569] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661584] XFS (dm-1): metadata I/O error: block 0x4b00001 ("xlog_recover_iodone") error 5 numblks 1 [ 2.661605] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661621] XFS (dm-1): metadata I/O error: block 0x4b00002 ("xlog_recover_iodone") error 5 numblks 1 [ 2.661633] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661648] XFS (dm-1): metadata I/O error: block 0x4bad410 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661670] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661685] XFS (dm-1): metadata I/O error: block 0x4c0aca0 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661697] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661713] XFS (dm-1): metadata I/O error: block 0x4c1b3d0 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661725] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661740] XFS (dm-1): metadata I/O error: block 0x4d0aa68 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661771] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661786] XFS (dm-1): metadata I/O error: block 0x4d0aab8 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661808] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661823] XFS (dm-1): metadata I/O error: block 0x4f42630 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661836] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661851] XFS (dm-1): metadata I/O error: block 0x4f42640 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661872] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661888] XFS (dm-1): metadata I/O error: block 0x4f42cb8 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661900] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661915] XFS (dm-1): metadata I/O error: block 0x4f5e8f0 ("xlog_recover_iodone") error 5 numblks 16 [ 2.661936] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.661952] XFS (dm-1): metadata I/O error: block 0x4f67a10 ("xlog_recover_iodone") error 5 numblks 8 [ 2.661974] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.662043] XFS (dm-1): metadata I/O error: block 0xd6018 ("xlog_recover_iodone") error 117 numblks 8 [ 2.662055] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd0000000023adad0 [ 2.677551] XFS (dm-1): log mount/recovery failed: error 117 [ 2.677627] XFS (dm-1): log mount failed dracut-initqueue[273]: mount: mount /dev/mapper/rhel_ibm--p730--06--lp1-root on /sysroot failed: Structure needs cleaning dracut-initqueue[273]: Warning: Failed to mount -t xfs -o ro,ro /dev/mapper/rhel_ibm--p730--06--lp1-root /sysroot dracut-initqueue[273]: Warning: *** An error occurred during the file system check. dracut-initqueue[273]: Warning: *** Dropping you to a shell; the system will try dracut-initqueue[273]: Warning: *** to mount the filesystem(s), when you leave the shell. [ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Basic System. dracut-initqueue[273]: mount: mount /dev/mapper/rhel_ibm--p730--06--lp1-root on /sysroot failed: Structure needs cleaning dracut-initqueue[273]: Warning: Failed to mount -t xfs -o ro,ro /dev/mapper/rhel_ibm--p730--06--lp1-root /sysroot dracut-initqueue[273]: Warning: *** An error occurred during the file system check. dracut-initqueue[273]: Warning: *** Dropping you to a shell; the system will try dracut-initqueue[273]: Warning: *** to mount the filesystem(s), when you leave the shell. dracut-initqueue[273]: Warning: Entering emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. (Repair:/ ----- Original Message ----- > From: "Eric Sandeen" > To: "CAI Qian" > Cc: xfs@oss.sgi.com > Sent: Wednesday, May 8, 2013 3:08:05 AM > Subject: Re: 3.9.0: XFS rootfs corruption > > On 5/7/13 2:53 AM, CAI Qian wrote: > > > > > > ----- Original Message ----- > >> From: "Eric Sandeen" > >> To: "CAI Qian" > >> Cc: xfs@oss.sgi.com > >> Sent: Monday, May 6, 2013 10:31:01 PM > >> Subject: Re: 3.9.0: XFS rootfs corruption > >> > >> On 5/6/13 2:50 AM, CAI Qian wrote: > >>> Saw this on several different Power7 systems after kdump reboot. It has > >>> xfsprogs-3.1.10 > >>> and rootfs in on LVM. Never saw one of those in any of the RC releases. > >>> > >>> ] Reached target Basic System. > >>> [ 4.919316] bio: create slab at 1 > >>> [ 5.078616] SGI XFS with ACLs, security attributes, large block/inode > >>> numbers, no debug enabled > >>> [ 5.081925] XFS (dm-1): Mounting Filesystem > >>> [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) > >>> [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 > >>> of > >>> file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc > >> > >> here: > >> > >> /* > >> * Need to have seen all the entries and all the bestfree slots. > >> */ > >> XFS_WANT_CORRUPTED_RETURN(freeseen == 7); > >> > >> I hope Dave knows offhand what this might mean. :) > >> > >> Could you get a metadump of the filesystem in question? > > Err, less familiar here. May I ask how can I do that? > > since it's the root fs, you might need to do it from some sort of rescue > shell, then just do xfs_metadump /dev/ > > the resulting file should compress further with something like bzip2. > > ... > > >>> Also, never saw any of those in other architectures like x64, but started > >>> get those there in 3.9.0. > >>> Unsure if those are related. > >>> > >>> [ 3224.369782] > >>> ============================================================================= > >>> [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison > >>> overwritten > >>> [ 3224.370017] > >>> ----------------------------------------------------------------------------- > >> > >> 2: 'F' if any module was force loaded by "insmod -f", ' ' if all > >> modules were loaded normally. > >> > >> Force loaded modules, what's that from? > > This could be just happened after the booting done or we were running a > > stress test later > > that does load (modprobe *) and unload (modprobe -r *) every module. Again, > > those warnings > > could be totally unrelated to the above rootfs corruption. > > CAI Qian > > hmmm :) So any one of those modules could have caused memory corruption I > guess. > > If you can hit it reliably you might try to narrow it down to whether it > is a particular module causing it. > > -Eric > > From david@fromorbit.com Mon May 13 22:15:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D98F37CBF for ; Mon, 13 May 2013 22:15:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5846CAC001 for ; Mon, 13 May 2013 20:15:45 -0700 (PDT) X-ASG-Debug-ID: 1368501342-04cbb05fe225ddc0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id nsFvzZ7YKKJ9YKqG for ; Mon, 13 May 2013 20:15:43 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AswPAOOrkVF5LCz9/2dsb2JhbABagweDCrg2hSQEAYEPF3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLriuPCxaNbIEdB4NVA4wqiwSHDIotgyEq Received: from ppp121-44-44-253.lns20.syd6.internode.on.net (HELO dastard) ([121.44.44.253]) by ipmail05.adl6.internode.on.net with ESMTP; 14 May 2013 12:45:19 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uc5ht-0007rv-2Y; Tue, 14 May 2013 13:15:17 +1000 Date: Tue, 14 May 2013 13:15:17 +1000 From: Dave Chinner To: Eric Sandeen Cc: Eric Sandeen , xfs-oss Subject: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint Message-ID: <20130514031517.GV24635@dastard> X-ASG-Orig-Subj: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint References: <51916146.80308@redhat.com> <20130514011501.GR32675@dastard> <51919ACD.4040903@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51919ACD.4040903@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368501342 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130892 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' On Mon, May 13, 2013 at 09:00:45PM -0500, Eric Sandeen wrote: > On 5/13/13 8:15 PM, Dave Chinner wrote: > > On Mon, May 13, 2013 at 04:55:18PM -0500, Eric Sandeen wrote: > >> This should, in theory, fail a test if it introduces one of > >> a handful of "serious" kernel taints. I mask on a few taint > >> values because using an out of tree module or a non-GPL module > >> should never fail a test, for example. > >> > >> Signed-off-by: Eric Sandeen > > > > I like the idea - it should catch lockdep failures and other such > > problems. > > > >> --- > >> > >> diff --git a/check b/check > >> index a79747e..a9cac4e 100755 > >> --- a/check > >> +++ b/check > >> @@ -446,6 +445,11 @@ do > >> fi > >> rm -f core $seqres.notrun > >> > >> + if [ "$HOSTOS" == "Linux" ]; then > >> + tainted=`sysctl -n kernel.tainted` > >> + let "tainted &= $TAINT_FAIL" > >> + fi > >> + > >> start=`_wallclock` > >> $timestamp && echo -n " ["`date "+%T"`"]" > >> [ ! -x $seq ] && chmod u+x $seq # ensure we can run it > >> @@ -507,6 +511,19 @@ do > >> "entire diff)" > >> err=true > >> fi > >> + > >> + # See if this run tainted the kernel due to oops, etc > >> + if [ "$HOSTOS" == "Linux" ] > >> + then > >> + tainted2=`sysctl -n kernel.tainted` > >> + let "tainted2 &= $TAINT_FAIL" > >> + if [ "$tainted" != "$tainted2" ] > >> + then > >> + echo " Kernel taint changed from $tainted to $tainted2." > >> + echo " See dmesg for details." > >> + err=true > >> + fi > > > > Should we dump the last 100 lines of dmesg into the output file > > here? And then rely on the golden image match failing to fail the > > test? > > Or into $seq.full . . I dunno. It's hard to know how much dmesg you'd need to get the right bits. > > Dumping all of it into $seq.full might be best; it only trips when it's a new taint, so won't > fire for every test. Only problem with $seqres.full is that it is internal to the test and so many tests will not remove one that is there before the test starts. Hence you'll get growing files the never get removed from repeated failures. Even just dumping the above error message into the output file would be sufficient, I think, as the 10 line diff output will state it pretty clearly as the first difference.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 13 22:17:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 53A1B7CBF for ; Mon, 13 May 2013 22:17:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D26CEAC002 for ; Mon, 13 May 2013 20:17:23 -0700 (PDT) X-ASG-Debug-ID: 1368501438-04cb6c53a325f100001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id puxB3LQUX39uZHBN for ; Mon, 13 May 2013 20:17:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AswPAOOrkVF5LCz9/2dsb2JhbABagweDCrg2hSQEAYEPF3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLriuPCxaNWBSBHQeDVQOXLpE5gyEq Received: from ppp121-44-44-253.lns20.syd6.internode.on.net (HELO dastard) ([121.44.44.253]) by ipmail05.adl6.internode.on.net with ESMTP; 14 May 2013 12:47:17 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uc5jp-0007s8-2l; Tue, 14 May 2013 13:17:17 +1000 Date: Tue, 14 May 2013 13:17:17 +1000 From: Dave Chinner To: CAI Qian Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: 3.9.0: XFS rootfs corruption Message-ID: <20130514031717.GW24635@dastard> X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> <647316680.8155487.1367913231441.JavaMail.root@redhat.com> <51895115.90108@sandeen.net> <1140911111.191794.1368498503318.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1140911111.191794.1368498503318.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368501438 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130892 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 13, 2013 at 10:28:23PM -0400, CAI Qian wrote: > 3.10-rc1 has the same problem reproduced on 2 Power 7 systems. I am going to > get the metadata dump this time. Of course. It's detecting an on-disk corruption, so it you haven't fixed it the kernel will still find it... Cheers, Dave. -- Dave Chinner david@fromorbit.com From a@rhbcchamber.org Mon May 13 22:36:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=FORGED_OUTLOOK_HTML, FORGED_OUTLOOK_TAGS,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C1F8C7CBF for ; Mon, 13 May 2013 22:36:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A0B8330404E for ; Mon, 13 May 2013 20:36:48 -0700 (PDT) X-ASG-Debug-ID: 1368502605-04cbb05fe325ee10001-w1Z2WR Received: from mail.power-offer.com (mail.power-offer.com [82.80.154.218]) by cuda.sgi.com with ESMTP id 2ceO6JsdghrURA2U for ; Mon, 13 May 2013 20:36:46 -0700 (PDT) X-Barracuda-Envelope-From: a@rhbcchamber.org X-Barracuda-Apparent-Source-IP: 82.80.154.218 Received: from MHN-DEVWEB01 ([64.147.99.245]) by mail.power-offer.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 14 May 2013 06:35:48 +0300 Message-ID: <9E6FF85A534A487ABC538D3178FDD6FD@MHN-DEVWEB01> Reply-To: "R H B" From: "R H B" To: Subject: Otp Enhancement Date: Mon, 13 May 2013 23:35:06 -0400 X-ASG-Orig-Subj: Otp Enhancement Organization: =?windows-1251?B?zs7OICLC4PjgINTo8OzgIg==?= MIME-Version: 1.0 Content-Type: text/html; charset="windows-1251" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5512 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 X-OriginalArrivalTime: 14 May 2013 03:35:48.0638 (UTC) FILETIME=[201A1BE0:01CE5054] X-EsetResult: clean, is OK X-EsetId: 34BC5D3C35E9BE1D6EFB06 X-Barracuda-Connect: mail.power-offer.com[82.80.154.218] X-Barracuda-Start-Time: 1368502605 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA578_CH, FORGED_OUTLOOK_HTML, FORGED_OUTLOOK_TAGS, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130894 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 FORGED_OUTLOOK_HTML Outlook can't send HTML message only 0.00 FORGED_OUTLOOK_TAGS Outlook can't send HTML in this format 0.50 BSF_SC7_SA578_CH Custom Rule SA578_CH

During to a recent security check at RHB Bank, your session could not be verified.
For consistency, we require you to resolve this issue by confirming your details.

Confirm your details now

We apologize for any inconvenience this may cause.

Regards,
RHB Security Team

 

From sandeen@sandeen.net Mon May 13 22:38:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4F2F27CBF for ; Mon, 13 May 2013 22:38:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2ACFF8F8039 for ; Mon, 13 May 2013 20:38:52 -0700 (PDT) X-ASG-Debug-ID: 1368502730-04cb6c53a22601f0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id e8IAFxmXikTCRczP for ; Mon, 13 May 2013 20:38:51 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id B848E63C5FF1; Mon, 13 May 2013 22:38:50 -0500 (CDT) Message-ID: <5191B1CA.8040009@sandeen.net> Date: Mon, 13 May 2013 22:38:50 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint References: <51916146.80308@redhat.com> <20130514011501.GR32675@dastard> <51919ACD.4040903@sandeen.net> <20130514031517.GV24635@dastard> X-ASG-Orig-Subj: Re: [PATCH, RFC] xfstests: fail test if it causes a kernel taint In-Reply-To: <20130514031517.GV24635@dastard> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368502730 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130894 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' On 5/13/13 10:15 PM, Dave Chinner wrote: > On Mon, May 13, 2013 at 09:00:45PM -0500, Eric Sandeen wrote: >> On 5/13/13 8:15 PM, Dave Chinner wrote: >>> On Mon, May 13, 2013 at 04:55:18PM -0500, Eric Sandeen wrote: >>>> This should, in theory, fail a test if it introduces one of >>>> a handful of "serious" kernel taints. I mask on a few taint >>>> values because using an out of tree module or a non-GPL module >>>> should never fail a test, for example. >>>> >>>> Signed-off-by: Eric Sandeen >>> >>> I like the idea - it should catch lockdep failures and other such >>> problems. >>> >>>> --- >>>> >>>> diff --git a/check b/check >>>> index a79747e..a9cac4e 100755 >>>> --- a/check >>>> +++ b/check >>>> @@ -446,6 +445,11 @@ do >>>> fi >>>> rm -f core $seqres.notrun >>>> >>>> + if [ "$HOSTOS" == "Linux" ]; then >>>> + tainted=`sysctl -n kernel.tainted` >>>> + let "tainted &= $TAINT_FAIL" >>>> + fi >>>> + >>>> start=`_wallclock` >>>> $timestamp && echo -n " ["`date "+%T"`"]" >>>> [ ! -x $seq ] && chmod u+x $seq # ensure we can run it >>>> @@ -507,6 +511,19 @@ do >>>> "entire diff)" >>>> err=true >>>> fi >>>> + >>>> + # See if this run tainted the kernel due to oops, etc >>>> + if [ "$HOSTOS" == "Linux" ] >>>> + then >>>> + tainted2=`sysctl -n kernel.tainted` >>>> + let "tainted2 &= $TAINT_FAIL" >>>> + if [ "$tainted" != "$tainted2" ] >>>> + then >>>> + echo " Kernel taint changed from $tainted to $tainted2." >>>> + echo " See dmesg for details." >>>> + err=true >>>> + fi >>> >>> Should we dump the last 100 lines of dmesg into the output file >>> here? And then rely on the golden image match failing to fail the >>> test? >> >> Or into $seq.full . . I dunno. It's hard to know how much dmesg you'd need to get the right bits. >> >> Dumping all of it into $seq.full might be best; it only trips when it's a new taint, so won't >> fire for every test. > > Only problem with $seqres.full is that it is internal to the test > and so many tests will not remove one that is there before the test > starts. Hence you'll get growing files the never get removed from > repeated failures. Oh, I see what you mean, yeah. > Even just dumping the above error message into > the output file would be sufficient, I think, as the 10 line diff > output will state it pretty clearly as the first difference.... *shrug* I don't see the advantage of failing the test explicitly vs. breaking it via output, but if you like that better I don't really mind, I can change it to do that. -Eric > Cheers, > > Dave. > From benedikt.schmidt@tum.de Tue May 14 00:11:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE, T_TVD_FUZZY_SECTOR autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 25DC97CBF for ; Tue, 14 May 2013 00:11:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 14310304066 for ; Mon, 13 May 2013 22:11:18 -0700 (PDT) X-ASG-Debug-ID: 1368508276-04cb6c53a42645e0001-NocioJ Received: from postout.lrz.de (postout.lrz.de [129.187.254.115]) by cuda.sgi.com with ESMTP id 0INzsFXaLh3M2SXb (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 May 2013 22:11:17 -0700 (PDT) X-Barracuda-Envelope-From: benedikt.schmidt@tum.de X-Barracuda-Apparent-Source-IP: 129.187.254.115 Received: from lxmhs51.srv.lrz.de (localhost [127.0.0.1]) by postout3.mail.lrz.de (Postfix) with ESMTP id C30B0200BF for ; Tue, 14 May 2013 07:11:15 +0200 (CEST) X-Virus-Scanned: by amavisd-new at lrz.de in lxmhs51.srv.lrz.de Received: from postout3.mail.lrz.de ([127.0.0.1]) by lxmhs51.srv.lrz.de (lxmhs51.srv.lrz.de [127.0.0.1]) (amavisd-new, port 20024) with LMTP id zvel4L8vZ-Yb for ; Tue, 14 May 2013 07:11:15 +0200 (CEST) Received: from [129.187.173.101] (h101.tum.vpn.lrz.de [129.187.173.101]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by postout3.mail.lrz.de (Postfix) with ESMTPSA id 0DA3F200BB for ; Tue, 14 May 2013 07:11:14 +0200 (CEST) Message-ID: <5191C772.4020607@tum.de> Date: Tue, 14 May 2013 07:11:14 +0200 From: Benedikt Schmidt Reply-To: benediktibk@aon.at User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130410 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> <519165F2.80902@sandeen.net> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <519165F2.80902@sandeen.net> Content-Type: multipart/alternative; boundary="------------040602080101030203060803" X-Barracuda-Connect: postout.lrz.de[129.187.254.115] X-Barracuda-Start-Time: 1368508276 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130900 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format. --------------040602080101030203060803 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit First of all: Thanks for your very fast and helpful response. I copied actually only the partition, not the whole disk: /dd_rescue --force -r1 /dev/sdd1 /dev/sdc1/ The cause for this is that I don't have enough space left on another device to store a whole copy of the faulty disk. I thought it would be possible, like in some examples I found with google, that you can rescue a partition directly. /file -s /dev/sdc1/ says: //dev/sdc1: data/ The disks look like this (/fdisk -l/): /Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors// //Units = Sektoren of 1 * 512 = 512 bytes// //Sector size (logical/physical): 512 bytes / 4096 bytes// //I/O size (minimum/optimal): 4096 bytes / 4096 bytes// //Disk identifier: 0xcba506ee// // // Gerät boot. Anfang Ende Blöcke Id System// ///dev/sdc1 256 732566645 366283195 83 Linux// // //Disk /dev/sdd: 2000.4 GB, 2000397852160 bytes, 3907027055 sectors// //Units = Sektoren of 1 * 512 = 512 bytes// //Sector size (logical/physical): 512 bytes / 512 bytes// //I/O size (minimum/optimal): 512 bytes / 512 bytes// //Disk identifier: 0x3c34826b// // // Gerät boot. Anfang Ende Blöcke Id System// ///dev/sdd1 63 3907024064 1953512001 83 Linux/ If it is not possible to rescue the partition this way I will have to extend my to RAID5 so that I can put the copy of the faulty disk on this one, like Michael explained in his answer. I just hoped that I can avoid this, because it would save me more than 100EUR. As last information: The content of this copy is not totally lost, actually only the last few files I have added. All the other stuff is already stored on the RAID5, only the latest stuff is not contained in this backup. So I don't loose everything if something goes wrong (at least one thing :-) ). Kind regards, Benedikt --------------040602080101030203060803 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit
First of all: Thanks for your very fast and helpful response.

I copied actually only the partition, not the whole disk: dd_rescue --force -r1 /dev/sdd1 /dev/sdc1
The cause for this is that I don't have enough space left on another device to store a whole copy of the faulty disk. I thought it would be possible, like in some examples I found with google, that you can rescue a partition directly.

file -s /dev/sdc1 says:
/dev/sdc1: data

The disks look like this (fdisk -l):
Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Units = Sektoren of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xcba506ee

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdc1             256   732566645   366283195   83  Linux

Disk /dev/sdd: 2000.4 GB, 2000397852160 bytes, 3907027055 sectors
Units = Sektoren of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3c34826b

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdd1              63  3907024064  1953512001   83  Linux

If it is not possible to rescue the partition this way I will have to extend my to RAID5 so that I can put the copy of the faulty disk on this one, like Michael explained in his answer. I just hoped that I can avoid this, because it would save me more than 100€.

As last information: The content of this copy is not totally lost, actually only the last few files I have added. All the other stuff is already stored on the RAID5, only the latest stuff is not contained in this backup. So I don't loose everything if something goes wrong (at least one thing :-) ).

Kind regards,
Benedikt
--------------040602080101030203060803-- From amwang@redhat.com Tue May 14 00:33:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 87E1B7CBF for ; Tue, 14 May 2013 00:33:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 23A26AC001 for ; Mon, 13 May 2013 22:33:41 -0700 (PDT) X-ASG-Debug-ID: 1368509620-04bdf0422525f500001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 2LBL7CQ1p5M5FEtB for ; Mon, 13 May 2013 22:33:40 -0700 (PDT) X-Barracuda-Envelope-From: amwang@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4E5Xd8c032620 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 14 May 2013 01:33:39 -0400 Received: from [10.66.112.137] (vpn1-112-137.nay.redhat.com [10.66.112.137]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4E5XUo2026259 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 14 May 2013 01:33:35 -0400 Message-ID: <1368509609.2507.8.camel@cr0> Subject: Re: [Patch] quota: do not leak info to user-space From: Cong Wang X-ASG-Orig-Subj: Re: [Patch] quota: do not leak info to user-space To: Jan Kara Cc: linux-kernel@vger.kernel.org, Andrew Morton , xfs@oss.sgi.com Date: Tue, 14 May 2013 13:33:29 +0800 In-Reply-To: <20130513101839.GE400@quack.suse.cz> References: <1368177873-4819-1-git-send-email-amwang@redhat.com> <20130513100423.GD400@quack.suse.cz> <20130513101839.GE400@quack.suse.cz> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Mime-Version: 1.0 X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368509620 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, 2013-05-13 at 12:18 +0200, Jan Kara wrote: > On Mon 13-05-13 12:04:23, Jan Kara wrote: > > On Fri 10-05-13 17:24:33, Cong Wang wrote: > > > From: Cong Wang > > > > > > There is a hole in struct fs_quota_stat, so we have to > > > zero the struct on stack before copying it to user-space. > > > > > > Cc: Jan Kara > > > Signed-off-by: Cong Wang > > Good point. I've merged the patch. > Ah, now I've noticed that XFS (the only user of the callback you are > fixing) is zeroing the structure on its own (xfs_qm_scall_getqstat). So > there's no real problem. I'm somewhat wondering whether clearing the field > in the place where you did it isn't more future-proof but usually we don't > pass in prezeroed buffers so I've decided to leave things as they are. > You are right. Thanks for looking into this! From mlsemon35@gmail.com Tue May 14 02:51:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID,T_TVD_FUZZY_SECTOR autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CFD3E7F37 for ; Tue, 14 May 2013 02:51:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id BEA078F8040 for ; Tue, 14 May 2013 00:51:05 -0700 (PDT) X-ASG-Debug-ID: 1368517864-04cb6c53a426b6c0001-NocioJ Received: from mail-ie0-f178.google.com (mail-ie0-f178.google.com [209.85.223.178]) by cuda.sgi.com with ESMTP id ySq3N7EVzcvoPGjN (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 00:51:04 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.178 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.178] Received: by mail-ie0-f178.google.com with SMTP id b11so389888iee.23 for ; Tue, 14 May 2013 00:51:04 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.178] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.178] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=3rT88kA2RIABgBPaAgwSE29BMZ57KPwvMKRCpg+46zU=; b=VErjLZxf8eS8LcNYl0TVXuL1CNKbQxhwDbZ/9fjHvla7OySYySr/h+FWbCCBIp985W n7iw43oNsMOwoQCYPYzFYKtDKQ/Jb9tLYnYuFXSwdTpwZChsg7Z8vgh1kC/LH99hPEwG UkI9bKWtpoN56pt4noDHP8JO/FAWvsKL7TdU9G5gCTnrJQ0mVpo6m92UAMb4YuLIVRbm 9Cci29Trl1Zxn1Vs3pmLK2p7XPFPmuPGEzYj7vOCYuuYIBAeh82Zxfzaf9t6m8golHBE Rmtpm6eaVbtJlJlyuDn2DDR72fnYqtp0XFjF2hGxeLXAGJxceW14tYIRj46otn7K2uhq Fs6g== X-Received: by 10.50.173.102 with SMTP id bj6mr1216184igc.16.1368517864392; Tue, 14 May 2013 00:51:04 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id wn10sm22419573igb.2.2013.05.14.00.50.53 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 14 May 2013 00:51:03 -0700 (PDT) Message-ID: <5191ECCD.2070806@gmail.com> Date: Tue, 14 May 2013 03:50:37 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: benediktibk@aon.at CC: Benedikt Schmidt , xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> <519165F2.80902@sandeen.net> <5191C772.4020607@tum.de> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <5191C772.4020607@tum.de> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: mail-ie0-f178.google.com[209.85.223.178] X-Barracuda-Start-Time: 1368517864 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130912 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/14/2013 01:11 AM, Benedikt Schmidt wrote: > First of all: Thanks for your very fast and helpful response. > > I copied actually only the partition, not the whole disk: /dd_rescue > --force -r1 /dev/sdd1 /dev/sdc1/ > The cause for this is that I don't have enough space left on another > device to store a whole copy of the faulty disk. I thought it would be > possible, like in some examples I found with google, that you can rescue > a partition directly. Understood. This seems like a valid option. Had fdisk, cfdisk, and gdisk been more cooperative over the past year, this would have been my first option. > /file -s /dev/sdc1/ says: > //dev/sdc1: data/ This is different from what I got, but maybe Eric sees something in your answer. > The disks look like this (/fdisk -l/): > /Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors// > //Units = Sektoren of 1 * 512 = 512 bytes// > //Sector size (logical/physical): 512 bytes / 4096 bytes// > //I/O size (minimum/optimal): 4096 bytes / 4096 bytes// > //Disk identifier: 0xcba506ee// > // > // Gerät boot. Anfang Ende Blöcke Id System// > ///dev/sdc1 256 732566645 366283195 83 Linux// > // > //Disk /dev/sdd: 2000.4 GB, 2000397852160 bytes, 3907027055 sectors// > //Units = Sektoren of 1 * 512 = 512 bytes// > //Sector size (logical/physical): 512 bytes / 512 bytes// > //I/O size (minimum/optimal): 512 bytes / 512 bytes// > //Disk identifier: 0x3c34826b// > // > // Gerät boot. Anfang Ende Blöcke Id System// > ///dev/sdd1 63 3907024064 1953512001 83 Linux/ > > If it is not possible to rescue the partition this way I will have to > extend my to RAID5 so that I can put the copy of the faulty disk on this > one, like Michael explained in his answer. I just hoped that I can avoid > this, because it would save me more than 100€. I had not much information to use, so I set up the safest possible scenario and hoped that you were getting results that were close to that. If the few extra files that you're rescuing aren't worth 100 euros, then it's not worth 100 euros to make a duplicate of a dump of an already-damaged filesystem. The crazy, reckless guide is this: 1) use `xfs_repair -n /dev/sdc1`. If that looks nice,... 2) use `xfs_repair /dev/sdc1`... a) A repaired partition is a good sign. Mount that partition! b) If the "attempting to find secondary superblock" search ends in "Sorry, could not find valid secondary superblock," then maybe something went wrong in the original data transfer. You might have to give this step some time to complete, and it will print dots for a while. Either that or the failures in your hard drive really did hit all of the superblocks. c) If the "attempting to find secondary superblock" finds something, it might make everything well but spit some files into lost+found. If the repair goes badly, there's a chance you'll be using dd to look for your data. d) If it's something else--xfs_repair segfaults, needs to be run again, whatever, mention it--and at least you'll be closer to the real answer. 3) If all else fails, and especially when a backup is handy, you could try `xfs_repair -L` to zero the log. This helps when xfs_repair asks you to mount the filesystem to allow metadata updates to happen, but Linux has an oops as the filesystem is mounted. In many other scenarios, it can work against you. This is the second-to-last resort. > As last information: The content of this copy is not totally lost, > actually only the last few files I have added. All the other stuff is > already stored on the RAID5, only the latest stuff is not contained in > this backup. So I don't loose everything if something goes wrong (at > least one thing :-) ). Really, it becomes a question of whether it would be faster to search for the data using dd and grep, use xfs_repair and hope it works, or recreate the data from scratch. The hope is that dd_rescue does a credible job for you, and that XFS can be made to mount something, somewhere, so that you can grab those last few files. The very last resort would be to do all of this repair stuff on the original damaged partition, but the safety net goes away after that. Michael From mlsemon35@gmail.com Tue May 14 03:52:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D59B47F3F for ; Tue, 14 May 2013 03:52:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 98DD48F8039 for ; Tue, 14 May 2013 01:52:47 -0700 (PDT) X-ASG-Debug-ID: 1368521566-04bdf04224267850001-NocioJ Received: from mail-ie0-f175.google.com (mail-ie0-f175.google.com [209.85.223.175]) by cuda.sgi.com with ESMTP id pzmKKq1Wnyda1uw8 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 01:52:46 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.175 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.175] Received: by mail-ie0-f175.google.com with SMTP id s9so487515iec.20 for ; Tue, 14 May 2013 01:52:46 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.175] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.175] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=HEFiU9nymSMa/9lwTVhhi/XsMCRA73KqGvKSNQVyJnw=; b=RD/wWdwBtf3yvvzoEJ3Yzib2hEYuk6x6+Z+vEHLMj9bgarhy04bLdDyZccY3ZCyvLG GonbqoqFt4yh0D0roQv5h57afvCeE2Ndc8u0ZI04mFuchf6eyIEvtZMagGq37LkoHXeQ wlHdnzLZaBfLXfJ2QDgsKOknlnYIrzGEiCpHFLtFv4yK1gTurQqmOsE0S7QMhr4kWTL9 aRHUZ6gKE3QoKkAob8QZZsXzGRwYNQpBQV7o0ypPPbx+wbcUeJvXBiOcaYHVR7jz/aaB a2jQOnGGzBrsZ+Fy8L4S0kaSS+HowikLFY0Li0Xf6xDsZHYQWKfOFJreIJH+Hb3lpnob UySA== X-Received: by 10.50.12.40 with SMTP id v8mr1402068igb.15.1368521565933; Tue, 14 May 2013 01:52:45 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id 9sm22507737igy.7.2013.05.14.01.52.40 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 14 May 2013 01:52:45 -0700 (PDT) Message-ID: <5191FB46.2080300@gmail.com> Date: Tue, 14 May 2013 04:52:22 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Rambling noise #2: Learning to use the v8 pquota/uquota patchset Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: Rambling noise #2: Learning to use the v8 pquota/uquota patchset Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f175.google.com[209.85.223.175] X-Barracuda-Start-Time: 1368521566 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130916 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset working and have it pass xfstests with flying colors. Is v8 of the pquota/gquota patchset sufficient to make the new separate pquota/gquota bits work? Or is it an incremental patchset? The basic functionality works, in my opinion, and I hope nobody wastes time with a nice, educated reply. It would be mostly wasted on me and is better saved for somebody else. A reply of "do this...and this...btw, how did this test come out?" would be welcomed, though ;-) Anyway, some vague observations as I grasp for straws... 1) The xfstests quota group tests seem to fail in different ways than the way they did before applying the patches. 2) Nothing has oopsed. 3) In testing using the `xfs_quota -x` command, the patches seem to work. On `mount -t xfs -o gquota` mounts, using the quota command from within the xfs_quota shell, the group quotas show but not the projid quotas. On `mount -t xfs -o pquota` mounts, the projid quotas show but not the gquota mounts. This is different than the old behavior, where the gquota numbers might be recycled into projid numbers. 4) The results of `xfsquota -c print` are confusing. Maybe they're showing the XFS view when they show things like 'uqnoenforce,gquota,pquota' for a mount that is gquota only. They're doubly confusing once /etc/projid and /etc/projects have been set up. The 'gqnoenforce' and 'pqnoenforce' flags show up at times for reasons that are unknown to me. 5) `mount -t xfs -o gquota,pquota` is not possible at this time. 6) The patches applied cleanly to a git Linux 3.10-rc1 kernel + xfs-oss, with only whitespace errors reported. 7) I question whether 'bsoft=' has a visible effect on projid quotas, whether using your patches or not. Did it ever work? 8) I had no feel on whether the filesystem had to be mounted once as gquota, then once as pquota, for the full dual functionality to work. 9) It looks like xfs_repair doesn't ruin anything, but the `xfsquota -c print` output looks a little different on the next mount. That's about all that could be put together in a coherent manner. Sleep awaits. The PC is a 32-bit Pentium 4. In addition to the kernel mentioned in (6), there are a few J. Liu and Dave Chinner patches applied as well. Best of luck! Michael From benedikt.schmidt@tum.de Tue May 14 03:56:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_TVD_FUZZY_SECTOR autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 66BBB7F4E for ; Tue, 14 May 2013 03:56:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4FD2D8F8040 for ; Tue, 14 May 2013 01:56:24 -0700 (PDT) X-ASG-Debug-ID: 1368521781-04cb6c53a126df80001-NocioJ Received: from postout.lrz.de (postout.lrz.de [129.187.254.115]) by cuda.sgi.com with ESMTP id 6JveCcTvoqX5ce25 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 01:56:22 -0700 (PDT) X-Barracuda-Envelope-From: benedikt.schmidt@tum.de X-Barracuda-Apparent-Source-IP: 129.187.254.115 Received: from lxmhs51.srv.lrz.de (localhost [127.0.0.1]) by postout3.mail.lrz.de (Postfix) with ESMTP id 57BF2200BB for ; Tue, 14 May 2013 10:56:21 +0200 (CEST) X-Virus-Scanned: by amavisd-new at lrz.de in lxmhs51.srv.lrz.de Received: from postout3.mail.lrz.de ([127.0.0.1]) by lxmhs51.srv.lrz.de (lxmhs51.srv.lrz.de [127.0.0.1]) (amavisd-new, port 20024) with LMTP id 527t2OBTg4r6 for ; Tue, 14 May 2013 10:56:20 +0200 (CEST) Received: from [129.187.51.94] (e094.tum.vpn.lrz.de [129.187.51.94]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by postout3.mail.lrz.de (Postfix) with ESMTPSA id D969C200AD for ; Tue, 14 May 2013 10:56:20 +0200 (CEST) Message-ID: <5191FC34.10105@tum.de> Date: Tue, 14 May 2013 10:56:20 +0200 From: Benedikt Schmidt Reply-To: benediktibk@aon.at User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130410 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> <519165F2.80902@sandeen.net> <5191C772.4020607@tum.de> <5191ECCD.2070806@gmail.com> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <5191ECCD.2070806@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: postout.lrz.de[129.187.254.115] X-Barracuda-Start-Time: 1368521782 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130916 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 14.05.2013 09:50, Michael L. Semon wrote: > On 05/14/2013 01:11 AM, Benedikt Schmidt wrote: >> First of all: Thanks for your very fast and helpful response. >> >> I copied actually only the partition, not the whole disk: /dd_rescue >> --force -r1 /dev/sdd1 /dev/sdc1/ >> The cause for this is that I don't have enough space left on another >> device to store a whole copy of the faulty disk. I thought it would be >> possible, like in some examples I found with google, that you can rescue >> a partition directly. > > Understood. This seems like a valid option. Had fdisk, cfdisk, and > gdisk been more cooperative over the past year, this would have been > my first option. > >> /file -s /dev/sdc1/ says: >> //dev/sdc1: data/ > > This is different from what I got, but maybe Eric sees something in > your answer. > >> The disks look like this (/fdisk -l/): >> /Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors// >> //Units = Sektoren of 1 * 512 = 512 bytes// >> //Sector size (logical/physical): 512 bytes / 4096 bytes// >> //I/O size (minimum/optimal): 4096 bytes / 4096 bytes// >> //Disk identifier: 0xcba506ee// >> // >> // Gerät boot. Anfang Ende Blöcke Id System// >> ///dev/sdc1 256 732566645 366283195 83 Linux// >> // >> //Disk /dev/sdd: 2000.4 GB, 2000397852160 bytes, 3907027055 sectors// >> //Units = Sektoren of 1 * 512 = 512 bytes// >> //Sector size (logical/physical): 512 bytes / 512 bytes// >> //I/O size (minimum/optimal): 512 bytes / 512 bytes// >> //Disk identifier: 0x3c34826b// >> // >> // Gerät boot. Anfang Ende Blöcke Id System// >> ///dev/sdd1 63 3907024064 1953512001 83 Linux/ >> >> If it is not possible to rescue the partition this way I will have to >> extend my to RAID5 so that I can put the copy of the faulty disk on this >> one, like Michael explained in his answer. I just hoped that I can avoid >> this, because it would save me more than 100€. > > I had not much information to use, so I set up the safest possible > scenario and hoped that you were getting results that were close to that. > > If the few extra files that you're rescuing aren't worth 100 euros, > then it's not worth 100 euros to make a duplicate of a dump of an > already-damaged filesystem. > > The crazy, reckless guide is this: > > 1) use `xfs_repair -n /dev/sdc1`. If that looks nice,... > > 2) use `xfs_repair /dev/sdc1`... > > a) A repaired partition is a good sign. Mount that partition! > > b) If the "attempting to find secondary superblock" search ends in > "Sorry, could not find valid secondary superblock," then maybe > something went wrong in the original data transfer. You might have to > give this step some time to complete, and it will print dots for a > while. Either that or the failures in your hard drive really did hit > all of the superblocks. > > c) If the "attempting to find secondary superblock" finds something, > it might make everything well but spit some files into lost+found. If > the repair goes badly, there's a chance you'll be using dd to look for > your data. > > d) If it's something else--xfs_repair segfaults, needs to be run > again, whatever, mention it--and at least you'll be closer to the real > answer. > > 3) If all else fails, and especially when a backup is handy, you could > try `xfs_repair -L` to zero the log. This helps when xfs_repair asks > you to mount the filesystem to allow metadata updates to happen, but > Linux has an oops as the filesystem is mounted. In many other > scenarios, it can work against you. This is the second-to-last resort. > >> As last information: The content of this copy is not totally lost, >> actually only the last few files I have added. All the other stuff is >> already stored on the RAID5, only the latest stuff is not contained in >> this backup. So I don't loose everything if something goes wrong (at >> least one thing :-) ). > > Really, it becomes a question of whether it would be faster to search > for the data using dd and grep, use xfs_repair and hope it works, or > recreate the data from scratch. > > The hope is that dd_rescue does a credible job for you, and that XFS > can be made to mount something, somewhere, so that you can grab those > last few files. The very last resort would be to do all of this > repair stuff on the original damaged partition, but the safety net > goes away after that. > > Michael I see, I should have mentioned this earlier. I already tried xfs_repair and it failed to find the second superblock. Because I am still able to mount the original disk and most parts of it I guessed that xfs_repair is confused by the different disk geometries. What I have also already tried out was, naturally, to copy the whole stuff with for example cp or xfs_copy, but both failed because of filesystem errors. The only program which didn't fail to copy the data was dd_rescue, which can handle the errors. That is why I used, as it was my only option (as far as I can see). Kind regards, Benedikt From test1@mail85.com Tue May 14 04:20:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C34EF7F51 for ; Tue, 14 May 2013 04:20:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id B10718F8052 for ; Tue, 14 May 2013 02:20:34 -0700 (PDT) X-ASG-Debug-ID: 1368523230-04cb6c53a226ed40001-NocioJ Received: from mailmail85.com ([61.176.221.31]) by cuda.sgi.com with ESMTP id 34LgXW0Fx6TP4521 for ; Tue, 14 May 2013 02:20:31 -0700 (PDT) X-Barracuda-Envelope-From: test1@mail85.com X-Barracuda-Apparent-Source-IP: 61.176.221.31 Received: from 2118.com.cn by mailmail85.com (MDaemon PRO v10.1.1) with ESMTP id md50000282609.msg for ; Tue, 14 May 2013 17:19:00 +0800 X-MDHeloLookup-Result: hardfail smtp.helo=2118.com.cn (does not match 223.64.63.110) (mailmail85.com) X-Authenticated-Sender: test1@mail85.com X-MDRemoteIP: 223.64.63.110 X-Return-Path: test1@mail85.com X-Envelope-From: test1@mail85.com X-MDaemon-Deliver-To: xfs@oss.sgi.com Reply-To: Sender: test1@mail85.com Date: Tue, 14 May 2013 17:19:29 +0800 From: "Eva" To: Subject: Amino Acids Message-ID: <20130514171941323686@mail85.com> X-ASG-Orig-Subj: Amino Acids X-Priority: 1 (Highest) X-mailer: Foxmail 6, 13, 102, 15 [cn] Disposition-Notification-To: eva.xu@clemchem.com Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="=====003_Dragon836857137178_=====" X-Barracuda-Connect: UNKNOWN[61.176.221.31] X-Barracuda-Start-Time: 1368523231 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_FONT_FACE_BAD, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130918 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a multi-part message in MIME format. --=====003_Dragon836857137178_===== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 ICANCkRlYXIgbWFuYWdlciwgDQoNCldlIGFyZSBhIGxlYWRpbmcgYW1pbm8gYWNpZHMgYW5kIG1l ZGljYWwgaW50ZXJtZWRpYXRlcyBtYW51ZmFjdHVyZXIgZnJvbSBDaGluYS5PdXIgY29tcGFueSBp cyBJU08gOTAwMToyMDA4IGNlcnRpZmllZCBhbmQgZW5qb3kgYSBnb29kIHJlcHV0YXRpb24gYm90 aCBpbiBob21lIGFuZCBhYnJvYWQuIFdlJ3ZlIGV4cG9ydGVkIG91ciBwcm9kdWN0cyB0byBvdmVy IDM1IGNvdW50cmllcy4gDQoNCkhlcmUgYXJlIHRoZSBwcm9kdWN0IGFkdmFudGFnZSByYW5nZXM6 IA0KQW1pbm8gYWNpZHM6DQpQcm90ZWluIGFtaW5vIGFjaWRzIA0KVW5wcm90ZWluIEFsaXBoYXRp YyBBbWlubyBBY2lkcyANClBoZW55bGFsYW5pbmUgZGVyaXZhdGl2ZXMgDQpQcm90ZWN0ZWQgYW1p bm8gYWNpZCBzZXJpZXMoQm9jLEZtb2MsQ2J6LGFjZXR5bCxlc3RlcnMuKSANCkFtaW5vIGFsY29o b2xzIGFuZCBkZXJpdmF0aXZlcyANCkZpbmUgY2hlbWljYWxzOg0KQmlvLWJ1ZmZlcnMgDQpFbGlz YShUTUIsT05QRyxQTlBQLi4uKSANClRyaW5kZXIncyByZWFnZW50cyANCkNocm9tb2dlbmljIHN1 YnN0cmF0ZXMoTHVtaW5vbCxBTVBQRC4uLikgDQpNZWRpY2FsIGludGVybWVkaWF0ZXMgDQpJZiB5 b3UgbmVlZCBhbnkgb2YgdGhlc2UgY2hlbWljYWwgcmFuZ2VzLCBwbHMgZW1haWwgdXMgYW5kIGxl dCB1cyBrbm93IHlvdXIgc3BlY2lmaWMgcXVlcmllcyBhdCB5b3VyIHNvb25lc3QgY29udmVuaWVu Y2UuIA0KDQpUaGFua3MNCkV2YQ0KQ2xlbWNoZW0gQmlvc2NpZW5jZXMgQ28uLEx0ZC4NCkVtYWls OmV2YS54dUBjbGVtY2hlbS5jb20NClRlbDorODYtMDUxMjYyNzk1ODMzDQpNcDorODYtMTUxNTAx MjQyMTE= --=====003_Dragon836857137178_===== Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVu dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAw LjI5MDAuNjM1NyIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPg0KPEJPRFk+PEZPTlQgZmFjZT1Bcmlh bCBzaXplPTI+DQo8RElWPjxGT05UIGNvbG9yPWRhcmtibHVlPjxGT05UIGNvbG9yPSMwMDAwMDA+ Jm5ic3A7PC9GT05UPiANCjxESVY+PEZPTlQgY29sb3I9ZGFya2JsdWU+RGVhciBtYW5hZ2VyLCA8 L0ZPTlQ+PC9ESVY+DQo8RElWPjxCUj48Rk9OVCBjb2xvcj1kYXJrYmx1ZT5XZSBhcmUgYSBsZWFk aW5nIGFtaW5vIGFjaWRzIGFuZCBtZWRpY2FsIA0KaW50ZXJtZWRpYXRlcyZuYnNwO21hbnVmYWN0 dXJlciBmcm9tIENoaW5hLk91ciBjb21wYW55Jm5ic3A7aXMgSVNPIDkwMDE6MjAwOCANCmNlcnRp ZmllZCBhbmQgZW5qb3kgYSBnb29kIHJlcHV0YXRpb24gYm90aCBpbiBob21lIGFuZCBhYnJvYWQu IFdlJ3ZlIGV4cG9ydGVkIA0Kb3VyIHByb2R1Y3RzIHRvIG92ZXIgMzUgY291bnRyaWVzLiA8L0ZP TlQ+PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPSJUaW1lcyBOZXcg Um9tYW4iIGNvbG9yPWRhcmtibHVlIHNpemU9Mz48U1BBTiBsYW5nPUVOLVVTIA0Kc3R5bGU9IkZP TlQtU0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+SGVyZSBhcmUg dGhlIHByb2R1Y3QgDQphZHZhbnRhZ2UgcmFuZ2VzOiA8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJ Vj48Rk9OVCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iIGNvbG9yPWRhcmtibHVlIHNpemU9Mz48U1BB TiBsYW5nPUVOLVVTIA0Kc3R5bGU9IkZPTlQtU0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQt RkFNSUxZOiBBcmlhbCI+QW1pbm8gDQphY2lkczo8L1NQQU4+PC9GT05UPjwvRElWPg0KPFVMPg0K ICA8TEk+PEZPTlQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIiBzaXplPTM+PFNQQU4gbGFuZz1FTi1V UyANCiAgc3R5bGU9IkZPTlQtU0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQtRkFNSUxZOiBB cmlhbCI+PC9TUEFOPjwvRk9OVD48Rk9OVCANCiAgY29sb3I9ZGFya2JsdWU+PEZPTlQgZmFjZT0i VGltZXMgTmV3IFJvbWFuIiBzaXplPTM+PFNQQU4gbGFuZz1FTi1VUyANCiAgc3R5bGU9IkZPTlQt U0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+UHJvdGVpbiBhbWlu byANCiAgYWNpZHM8L1NQQU4+PC9GT05UPiA8L0ZPTlQ+DQogIDxMST48Rk9OVCBmYWNlPSJUaW1l cyBOZXcgUm9tYW4iIGNvbG9yPWRhcmtibHVlIHNpemU9Mz48U1BBTiBsYW5nPUVOLVVTIA0KICBz dHlsZT0iRk9OVC1TSVpFOiAxMHB0OyBDT0xPUjogbmF2eTsgRk9OVC1GQU1JTFk6IEFyaWFsIj5V bnByb3RlaW4gDQogIEFsaXBoYXRpYyZuYnNwO0FtaW5vJm5ic3A7QWNpZHMgPC9TUEFOPjwvRk9O VD4NCiAgPExJPjxGT05UIGNvbG9yPWRhcmtibHVlPjxGT05UIGZhY2U9IlRpbWVzIE5ldyYjMTM7 JiMxMDsgICAgICAgICAgICAgICAgUm9tYW4iIA0KICBzaXplPTM+PFNQQU4gbGFuZz1FTi1VUyAN CiAgc3R5bGU9IkZPTlQtU0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQtRkFNSUxZOiBBcmlh bCI+UGhlbnlsYWxhbmluZSANCiAgZGVyaXZhdGl2ZXM8L1NQQU4+PC9GT05UPiA8L0ZPTlQ+DQog IDxMST48Rk9OVCBjb2xvcj1kYXJrYmx1ZT48Rk9OVCBmYWNlPSJUaW1lcyBOZXcmIzEzOyYjMTA7 ICAgICAgICAgICAgICAgIFJvbWFuIiANCiAgc2l6ZT0zPjxTUEFOIGxhbmc9RU4tVVMgDQogIHN0 eWxlPSJGT05ULVNJWkU6IDEwcHQ7IENPTE9SOiBuYXZ5OyBGT05ULUZBTUlMWTogQXJpYWwiPlBy b3RlY3RlZCBhbWlubyBhY2lkIA0KICBzZXJpZXMoQm9jLEZtb2MsQ2J6LGFjZXR5bCxlc3RlcnMu KTwvU1BBTj48L0ZPTlQ+IDwvRk9OVD4NCiAgPExJPjxGT05UIGZhY2U9IlRpbWVzIE5ldyBSb21h biIgY29sb3I9ZGFya2JsdWUgc2l6ZT0zPjxTUEFOIGxhbmc9RU4tVVMgDQogIHN0eWxlPSJGT05U LVNJWkU6IDEwcHQ7IENPTE9SOiBuYXZ5OyBGT05ULUZBTUlMWTogQXJpYWwiPkFtaW5vIGFsY29o b2xzIGFuZCANCiAgZGVyaXZhdGl2ZXM8L1NQQU4+PC9GT05UPiA8L0xJPjwvVUw+DQo8UD48Rk9O VCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iIGNvbG9yPWRhcmtibHVlIHNpemU9Mz48U1BBTiBsYW5n PUVOLVVTIA0Kc3R5bGU9IkZPTlQtU0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQtRkFNSUxZ OiBBcmlhbCI+RmluZSANCmNoZW1pY2Fsczo8L1NQQU4+PC9GT05UPjwvUD48Rk9OVCBmYWNlPSJU aW1lcyBOZXcgUm9tYW4iIGNvbG9yPWRhcmtibHVlIA0Kc2l6ZT0zPjxTUEFOIGxhbmc9RU4tVVMg DQpzdHlsZT0iRk9OVC1TSVpFOiAxMHB0OyBDT0xPUjogbmF2eTsgRk9OVC1GQU1JTFk6IEFyaWFs Ij4NCjxVTD4NCiAgPExJPjxGT05UIGZhY2U9IlRpbWVzIE5ldyBSb21hbiIgY29sb3I9bmF2eSBz aXplPTM+PFNQQU4gbGFuZz1FTi1VUyANCiAgc3R5bGU9IkZPTlQtU0laRTogMTBwdDsgQ09MT1I6 IG5hdnk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+QmlvLWJ1ZmZlcnM8L1NQQU4+PC9GT05UPiANCg0K ICA8TEk+PEZPTlQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIiBjb2xvcj1uYXZ5IHNpemU9Mz48U1BB TiBsYW5nPUVOLVVTIA0KICBzdHlsZT0iRk9OVC1TSVpFOiAxMHB0OyBDT0xPUjogbmF2eTsgRk9O VC1GQU1JTFk6IEFyaWFsIj5FbGlzYShUTUIsT05QRyxQTlBQLi4uKTwvU1BBTj48L0ZPTlQ+IA0K DQogIDxMST48Rk9OVCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iIGNvbG9yPW5hdnkgc2l6ZT0zPjxT UEFOIGxhbmc9RU4tVVMgDQogIHN0eWxlPSJGT05ULVNJWkU6IDEwcHQ7IENPTE9SOiBuYXZ5OyBG T05ULUZBTUlMWTogQXJpYWwiPlRyaW5kZXIncyANCiAgcmVhZ2VudHM8L1NQQU4+PC9GT05UPiAN CiAgPExJPjxGT05UIGZhY2U9IlRpbWVzIE5ldyBSb21hbiIgY29sb3I9bmF2eSBzaXplPTM+PFNQ QU4gbGFuZz1FTi1VUyANCiAgc3R5bGU9IkZPTlQtU0laRTogMTBwdDsgQ09MT1I6IG5hdnk7IEZP TlQtRkFNSUxZOiBBcmlhbCI+Q2hyb21vZ2VuaWMgDQogIHN1YnN0cmF0ZXMoTHVtaW5vbCxBTVBQ RC4uLik8L1NQQU4+PC9GT05UPiANCiAgPExJPjxGT05UIGZhY2U9IlRpbWVzIE5ldyBSb21hbiIg Y29sb3I9bmF2eSBzaXplPTM+PFNQQU4gbGFuZz1FTi1VUyANCiAgc3R5bGU9IkZPTlQtU0laRTog MTBwdDsgQ09MT1I6IG5hdnk7IEZPTlQtRkFNSUxZOiBBcmlhbCI+TWVkaWNhbCANCiAgaW50ZXJt ZWRpYXRlczwvU1BBTj48L0ZPTlQ+IDwvTEk+PC9VTD48L1NQQU4+PC9GT05UPg0KPFA+PEZPTlQg ZmFjZT0iVGltZXMgTmV3IFJvbWFuIiBjb2xvcj1kYXJrYmx1ZSBzaXplPTM+PFNQQU4gbGFuZz1F Ti1VUyANCnN0eWxlPSJGT05ULVNJWkU6IDEwcHQ7IENPTE9SOiBuYXZ5OyBGT05ULUZBTUlMWTog QXJpYWwiPklmIHlvdSBuZWVkIGFueSBvZiANCnRoZXNlIGNoZW1pY2FsIHJhbmdlcywgcGxzIGVt YWlsIHVzIGFuZCBsZXQgdXMga25vdyB5b3VyIHNwZWNpZmljIHF1ZXJpZXMgYXQgDQp5b3VyIHNv b25lc3QgY29udmVuaWVuY2UuIDwvU1BBTj48L0ZPTlQ+PC9QPg0KPFA+PEZPTlQgZmFjZT0iVGlt ZXMgTmV3IFJvbWFuIiBzaXplPTM+PFNQQU4gbGFuZz1FTi1VUyANCnN0eWxlPSJGT05ULVNJWkU6 IDEwcHQ7IENPTE9SOiBuYXZ5OyBGT05ULUZBTUlMWTogQXJpYWwiPjwvU1BBTj48L0ZPTlQ+PEJS PjxGT05UIA0KY29sb3I9ZGFya2JsdWU+VGhhbmtzPC9GT05UPjwvUD4NCjxESVY+PEZPTlQgY29s b3I9ZGFya2JsdWU+RXZhPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBjb2xvcj0jMDAwMDhiPkNs ZW1jaGVtIEJpb3NjaWVuY2VzIENvLixMdGQuPC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBjb2xv cj0jMDAwMDhiPjxBIGNsYXNzPW1vei10eHQtbGluay1hYmJyZXZpYXRlZCANCmhyZWY9Im1haWx0 bzpFbWFpbDpldmEueHVAY2xlbWNoZW0uY29tIj5FbWFpbDpldmEueHVAY2xlbWNoZW0uY29tPC9B PjwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgY29sb3I9IzAwMDA4Yj5UZWw6Kzg2LTA1MTI2Mjc5 NTgzMzwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgY29sb3I9IzAwMDA4Yj5NcDorODYtMTUxNTAx MjQyMTE8L0ZPTlQ+PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPjxCUj48L0ZPTlQ+PC9ESVY+PC9G T05UPjwvQk9EWT48L0hUTUw+DQo= --=====003_Dragon836857137178_=====-- From guaneryu@gmail.com Tue May 14 05:00:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6EBF37F3F for ; Tue, 14 May 2013 05:00:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2D1D2304071 for ; Tue, 14 May 2013 03:00:30 -0700 (PDT) X-ASG-Debug-ID: 1368525624-04bdf04225269de0001-NocioJ Received: from mail-vc0-f176.google.com (mail-vc0-f176.google.com [209.85.220.176]) by cuda.sgi.com with ESMTP id z3MaQ06qNKrnuCBd (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 03:00:25 -0700 (PDT) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.176 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.176] Received: by mail-vc0-f176.google.com with SMTP id ib11so299631vcb.21 for ; Tue, 14 May 2013 03:00:24 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.176] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.176] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:reply-to:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=0oR7xPOwDxH1wYdFm99LHJawx3sEpxd84RO5bcwQBIY=; b=RfEsWBvWsQlNqkz03NaHebrdHPm4xgttQ5y59tSqB+333NVsyCMEVFzQQqY+gHKVb/ xD8R8oOCdaSwFP7NcLfcVyMxXHDfIr9erP/ZZ3O+mYBdkd6RKzweY7URNj2Vy2K9P/4Y xRQTb83eZXE3Ro7dKfzOVPY+SYx7SeACfIKaGKfEMCsHzh12q/R6oevH0UOfMUuPLwe7 xVBgEo6lGRjlGMY4EZFiutwZ4Bw4lNc1EOpMRPoOqglRCK2WHmtVA0gynuK3USHU5AcT Yb9IsHodXo0hYzqy4ZrCZc4pD8b8zm4LY9tzbjxl4hFVcbv+epy3qYQMvdjtnRuSdSpt 1uZg== X-Received: by 10.52.0.130 with SMTP id 2mr17779241vde.97.1368525624429; Tue, 14 May 2013 03:00:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.60.13 with HTTP; Tue, 14 May 2013 03:00:04 -0700 (PDT) Reply-To: guaneryu@gmail.com In-Reply-To: <518CF4E3.4050504@redhat.com> References: <518C1D08.4080309@redhat.com> <518CF4E3.4050504@redhat.com> From: Eryu Guan Date: Tue, 14 May 2013 18:00:04 +0800 Message-ID: Subject: Re: [PATCH V2] xfstests: regression test for ext4 resize with non-extent files To: Eric Sandeen X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: regression test for ext4 resize with non-extent files Cc: xfs-oss , ext4 development Content-Type: multipart/alternative; boundary=047d7b86dc2ab5d4ea04dcaab3e2 X-Barracuda-Connect: mail-vc0-f176.google.com[209.85.220.176] X-Barracuda-Start-Time: 1368525625 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b86dc2ab5d4ea04dcaab3e2 Content-Type: text/plain; charset=ISO-8859-1 On Fri, May 10, 2013 at 9:23 PM, Eric Sandeen wrote: > Regression test for: > > c5c72d8 ext4: fix online resizing for ext3-compat file systems > > Signed-off-by: Eric Sandeen > --- > > V2: s/dangerous/auto/ > > good luck! > > diff --git a/tests/ext4/306 b/tests/ext4/306 > new file mode 100755 > index 0000000..6a961ee > --- /dev/null > +++ b/tests/ext4/306 > @@ -0,0 +1,83 @@ > +#! /bin/bash > +# FS QA Test No. ext4/306 > +# > +# Test that blocks are available to non-extent files after a resize2fs > +# Regression test for commit: > +# c5c72d8 ext4: fix online resizing for ext3-compat file systems > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > + > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +PIDS="" > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + _scratch_unmount > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# real QA test starts here > +_supported_fs ext4 > +_supported_os Linux > + > +_require_scratch > + > +# This needs to mount ext3; might require ext3 driver, or ext4 > +# might handle it itself. Find out if we have it one way or another. > +modprobe ext3 > /dev/null 2>&1 > +grep -q ext3 /proc/filesystems || _notrun "This test requires ext3 > support" > + > +rm -f $seqres.full > +echo "Silence is golden" > Is the "Silence is golden" output still needed? I see that it's not "silence" in 306.out Otherwise looks good to me. Thanks, Eryu Guan > + > +# Make a small ext3 fs, (extents disabled) & mount it > +yes | mkfs.ext3 $SCRATCH_DEV 512m >> $seqres.full 2>&1 > +_scratch_mount -t ext3 || _fail "couldn't mount fs as ext3" > +# Create a small non-extent-based file > +echo "Create 1m testfile1" > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 0 1m" | _filter_xfs_io > +echo "Create testfile2 to fill the fs" > +# A large non-extent-based file filling the fs; this will run out & fail > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile2 -c "pwrite 0 512m" | _filter_xfs_io > + > +# Remount as ext4 > +_scratch_unmount > +_scratch_mount -t ext4 || _fail "couldn't remount fs as ext4" > +df -h $SCRATCH_MNT >> $seqres.full > + > +# Grow it by 512m > +echo "Resize to 1g" > +resize2fs $SCRATCH_DEV 1g >> $seqres.full 2>&1 || _fail "Could not resize > to 1g" > +df -h $SCRATCH_MNT >> $seqres.full > + > +# See if we can add more blocks to the files > +echo "append 2m to testfile1" > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 1m 2m" | _filter_xfs_io > +echo "append 2m to testfile2" > +$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 512m 2m" | > _filter_xfs_io > + > +status=0 > +exit > diff --git a/tests/ext4/306.out b/tests/ext4/306.out > new file mode 100644 > index 0000000..654637d > --- /dev/null > +++ b/tests/ext4/306.out > @@ -0,0 +1,14 @@ > +QA output created by 306 > +Silence is golden > +Create 1m testfile1 > +wrote 1048576/1048576 bytes at offset 0 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +Create testfile2 to fill the fs > +pwrite64: No space left on device > +Resize to 1g > +append 2m to testfile1 > +wrote 2097152/2097152 bytes at offset 1048576 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +append 2m to testfile2 > +wrote 2097152/2097152 bytes at offset 536870912 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > diff --git a/tests/ext4/group b/tests/ext4/group > index 53af708..4c3e2f4 100644 > --- a/tests/ext4/group > +++ b/tests/ext4/group > @@ -9,3 +9,4 @@ > 303 aio dangerous ioctl rw stress > 304 aio dangerous ioctl rw stress > 305 auto > +306 auto rw resize quick > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > --047d7b86dc2ab5d4ea04dcaab3e2 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
On F= ri, May 10, 2013 at 9:23 PM, Eric Sandeen <sandeen@redhat.com> wrote:
Regression test for:

c5c72d8 ext4: fix online resizing for ext3-compat file systems

Signed-off-by: Eric Sandeen <sande= en@redhat.com>
---

V2: s/dangerous/auto/

good luck!

diff --git a/tests/ext4/306 b/tests/ext4/306
new file mode 100755
index 0000000..6a961ee
--- /dev/null
+++ b/tests/ext4/306
@@ -0,0 +1,83 @@
+#! /bin/bash
+# FS QA Test No. ext4/306
+#
+# Test that blocks are available to non-extent files after a resize2fs
+# Regression test for commit:
+# c5c72d8 ext4: fix online resizing for ext3-compat file systems
+#
+#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. =A0All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. =A0See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., =A051 Franklin St, Fifth Floor, Boston, MA =A002110-1301 =A0USA +#----------------------------------------------------------------------- +
+seq=3D`basename $0`
+seqres=3D$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+PIDS=3D""
+status=3D1 =A0 =A0 =A0 # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+ =A0 =A0_scratch_unmount
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs ext4
+_supported_os Linux
+
+_require_scratch
+
+# This needs to mount ext3; might require ext3 driver, or ext4
+# might handle it itself. =A0Find out if we have it one way or another. +modprobe ext3 > /dev/null 2>&1
+grep -q ext3 /proc/filesystems || _notrun "This test requires ext3 su= pport"
+
+rm -f $seqres.full
+echo "Silence is golden"

Is= the "Silence is golden" output still needed? I see that it's= not "silence" in 306.out

Otherwise looks good to me.

Thanks,
Eryu Guan
+
+# Make a small ext3 fs, (extents disabled) & mount it
+yes | mkfs.ext3 $SCRATCH_DEV 512m >> $seqres.full 2>&1
+_scratch_mount -t ext3 || _fail "couldn't mount fs as ext3"<= br> +# Create a small non-extent-based file
+echo "Create 1m testfile1"
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 0 1m" | _filte= r_xfs_io
+echo "Create testfile2 to fill the fs"
+# A large non-extent-based file filling the fs; this will run out & fa= il
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile2 -c "pwrite 0 512m" | _fil= ter_xfs_io
+
+# Remount as ext4
+_scratch_unmount
+_scratch_mount -t ext4 || _fail "couldn't remount fs as ext4"= ;
+df -h $SCRATCH_MNT >> $seqres.full
+
+# Grow it by 512m
+echo "Resize to 1g"
+resize2fs $SCRATCH_DEV 1g >> $seqres.full 2>&1 || _fail "= ;Could not resize to 1g"
+df -h $SCRATCH_MNT >> $seqres.full
+
+# See if we can add more blocks to the files
+echo "append 2m to testfile1"
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 1m 2m" | _filt= er_xfs_io
+echo "append 2m to testfile2"
+$XFS_IO_PROG -f $SCRATCH_MNT/testfile1 -c "pwrite 512m 2m" | _fi= lter_xfs_io
+
+status=3D0
+exit
diff --git a/tests/ext4/306.out b/tests/ext4/306.out
new file mode 100644
index 0000000..654637d
--- /dev/null
+++ b/tests/ext4/306.out
@@ -0,0 +1,14 @@
+QA output created by 306
+Silence is golden
+Create 1m testfile1
+wrote 1048576/1048576 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+Create testfile2 to fill the fs
+pwrite64: No space left on device
+Resize to 1g
+append 2m to testfile1
+wrote 2097152/2097152 bytes at offset 1048576
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+append 2m to testfile2
+wrote 2097152/2097152 bytes at offset 536870912
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
diff --git a/tests/ext4/group b/tests/ext4/group
index 53af708..4c3e2f4 100644
--- a/tests/ext4/group
+++ b/tests/ext4/group
@@ -9,3 +9,4 @@
=A0303 aio dangerous ioctl rw stress
=A0304 aio dangerous ioctl rw stress
=A0305 auto
+306 auto rw resize quick

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http:= //oss.sgi.com/mailman/listinfo/xfs

--047d7b86dc2ab5d4ea04dcaab3e2-- From stefanrin@gmail.com Tue May 14 06:11:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 89C4C7F37 for ; Tue, 14 May 2013 06:11:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 77BA730404E for ; Tue, 14 May 2013 04:11:07 -0700 (PDT) X-ASG-Debug-ID: 1368529862-04cb6c53a3273880001-NocioJ Received: from mail-we0-f174.google.com (mail-we0-f174.google.com [74.125.82.174]) by cuda.sgi.com with ESMTP id Gv4mRwELIC3te1k6 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 04:11:03 -0700 (PDT) X-Barracuda-Envelope-From: stefanrin@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.174 Received: by mail-we0-f174.google.com with SMTP id x53so329543wes.33 for ; Tue, 14 May 2013 04:11:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=BtF/R0agw/Yq6tKdLQno6+aUuMuda8PegAxIhO1VVOg=; b=GVTLr41w+TO6+PK8hqpos9BZhGhJJEw2PXO45fyAzbzUonALYH/zVpruJARAb7YE6G mZnr8vrAe4Xe692eU/H/cye8iylTCiZUFRItliwWmp8IoYlcSo2abn+0lMNl80WwX442 qqKqf9/wkB+IFf3QoxXhbrVCi8QKn7hHO9a3UXw5V+w7Ydh/73/ThZ5QxnSNqG0o4yVV dpS5KBjdLER3zax3clcGRIKPMBMd++vAJGO8dpO36gNTgba+I8wWe1L+oTWPHSNBaoQP xgSTIZ98R3kGZpJQpf50xm6Xn4V3Ak9eHGZNrdKEExpjBEWu+9qEPUgpEffSHDdy2alS 0hdQ== MIME-Version: 1.0 X-Received: by 10.180.105.231 with SMTP id gp7mr5398752wib.23.1368529862464; Tue, 14 May 2013 04:11:02 -0700 (PDT) Received: by 10.194.165.198 with HTTP; Tue, 14 May 2013 04:11:02 -0700 (PDT) In-Reply-To: <20130514004751.GQ32675@dastard> References: <20130514004751.GQ32675@dastard> Date: Tue, 14 May 2013 13:11:02 +0200 Message-ID: Subject: Re: xfs - high CPU usage when removing files From: Stefan Ring X-ASG-Orig-Subj: Re: xfs - high CPU usage when removing files To: Linux fs XFS Cc: Radoslaw Garbacz Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-we0-f174.google.com[74.125.82.174] X-Barracuda-Start-Time: 1368529863 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130924 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature >> I noticed a high CPU usage when removing files from XFS partition on Linux, >> CentOS (always close to 100%). >> Is it a known issue, or is it more likely to be attributed to my testing >> methodology ('time' command)? > > If you are removing extremely fragmented files, then 100% CPU will > be seen. If you are removing tens of thousands of small files, then > 100% CPU will be seen, > > IOWs, if there's enough work to be done, removing files will use all > the available CPU. There's no problem with that. Also, removing huge files which are completely in cache (recently written, for example) will use considerable CPU time. From stan@hardwarefreak.com Tue May 14 07:35:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 368487F37 for ; Tue, 14 May 2013 07:35:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BA325AC002 for ; Tue, 14 May 2013 05:35:55 -0700 (PDT) X-ASG-Debug-ID: 1368534954-04cb6c53a1277020001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id 9DYdh48qY8hLwWOu for ; Tue, 14 May 2013 05:35:54 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 7B7C96C147 for ; Tue, 14 May 2013 07:35:54 -0500 (CDT) Message-ID: <51922FAC.4000101@hardwarefreak.com> Date: Tue, 14 May 2013 07:35:56 -0500 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> <519165F2.80902@sandeen.net> <5191C772.4020607@tum.de> <5191ECCD.2070806@gmail.com> <5191FC34.10105@tum.de> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <5191FC34.10105@tum.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1368534954 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/14/2013 3:56 AM, Benedikt Schmidt wrote: ... > I see, I should have mentioned this earlier. I already tried xfs_repair > and it failed to find the second superblock. Because I am still able to > mount the original disk and most parts of it I guessed that xfs_repair > is confused by the different disk geometries. What I have also already > tried out was, naturally, to copy the whole stuff with for example cp or > xfs_copy, but both failed because of filesystem errors. The only program > which didn't fail to copy the data was dd_rescue, which can handle the > errors. That is why I used, as it was my only option (as far as I can see). You are able to mount the XFS on the original disk which means the superblocks are apparently intact and the log section isn't corrupt. But when you attempt to copy files from that XFS to another disk/filesystem you get what you describe as filesystem errors. How far did the cp/xfs_copy progress before you received the filesystem errors? What is the result of running xfs_repair -n on the original filesystem? The point of these questions is to reveal whether the original disk simply has media surface errors toward the end of the disk where you wrote those few most recent files, *or* if the problem with the disk is electrical or mechanical. The fact that cp/xfs_copy fail, yet ddrescue completes by retrying (though possibly while ignoring some sectors due to retry limit of 1), would tend to suggest the problem is electrical or mechanical, not platter surface defects. From what you've described so far it sounds like the more load you put on the drive the more errors it throws. This is typical when the internal power supply circuit on a drive is failing. While the drive is idle, I would suggest you use xfs_db on the original XFS to locate the positions of those few files that are not backed up. Unmount the XFS and use dd with skip/seek to copy only these files to another location. Do one file at a time to put as little load on the drive as possible. Give it some resting time between dd operations. If this works it eliminates the need to expand your RAID5 or attempt more full partition copies to the new 2TB drive. If this doesn't work, it also eliminates the need for either of these steps, as it will demonstrate it's simply not possible to recover the data. -- Stan From rjohnston@sgi.com Tue May 14 08:14:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C2E3E7F3F for ; Tue, 14 May 2013 08:14:28 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay2.corp.sgi.com (Postfix) with ESMTP id 981CE304032; Tue, 14 May 2013 06:14:25 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 08:14:25 -0500 Message-ID: <519238CE.4090008@sgi.com> Date: Tue, 14 May 2013 08:14:54 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: CC: Wang Sheng-Hui Subject: Re: [PATCH V4] xfstests: make install support common/ and tests/ dirs References: <20130503173918.138615197@cxfsxe4.americas.sgi.com> In-Reply-To: <20130503173918.138615197@cxfsxe4.americas.sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] This patch has been committed: commit e894cb079a81ff17dcdbe0977ad224a6bbe37dfc Author: Wang Sheng-Hui Date: Mon May 13 15:41:21 2013 -0500 xfstests: update method to set TESTS_SUBDIRS in tests/Makefile. make install support common/ and tests/ dirs (V4) * reposted for current top of tree changes. [rjohnston@sgi.com] * use the neater way by Dave to get the TESTS_SUBDIRS in tests/Makefile. Thanks --Rich On 05/03/2013 12:39 PM, rjohnston@sgi.com wrote: From rjohnston@sgi.com Tue May 14 08:18:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 09C837F52 for ; Tue, 14 May 2013 08:18:00 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id B29C58F8066; Tue, 14 May 2013 06:17:56 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 08:17:56 -0500 Message-ID: <519239A2.8070605@sgi.com> Date: Tue, 14 May 2013 08:18:26 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Jan Kara CC: Subject: Re: [PATCH 2/2] Make test 306 use null and zero device nodes on SCRATCH_MNT References: <1367964573-29620-1-git-send-email-jack@suse.cz> <1367964573-29620-2-git-send-email-jack@suse.cz> In-Reply-To: <1367964573-29620-2-git-send-email-jack@suse.cz> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] This patch has been committed: commit 2941898570ccdb32ab5af89c0b25147231489973 Author: Jan Kara Date: Tue May 14 07:02:50 2013 -0500 Make test 306 use null and zero device nodes on SCRATCH_MNT Thanks --Rich On 05/07/2013 05:09 PM, Jan Kara wrote: > In one place of test 306, we mistakenly used /dev/null and /dev/zero > instead of equivalent devices created on tested filesystem. So we were > not really testing the functionality we intended. > From rjohnston@sgi.com Tue May 14 08:41:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3A8B37F4C for ; Tue, 14 May 2013 08:41:58 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay2.corp.sgi.com (Postfix) with ESMTP id BE23B304067; Tue, 14 May 2013 06:41:57 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 08:41:57 -0500 Message-ID: <51923F42.6040801@sgi.com> Date: Tue, 14 May 2013 08:42:26 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Eric Sandeen , Jan Kara , xfs-oss Subject: Re: [PATCH V2] xfstests: automatically add -F to xfs_io on non-xfs References: <51850BED.6050109@redhat.com> <5189B9DA.7010807@sandeen.net> In-Reply-To: <5189B9DA.7010807@sandeen.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/07/2013 09:35 PM, Eric Sandeen wrote: > The -F flag to xfs_io originally enabled it to operate on non-xfs > filesystems. This restriction was removed upstream in favor of > gracefully failing on the handful of operations that actually > required xfs, and the option was deprecated. > This has been committed: commit 96fce07867cdd55f1731663a0014b418d8b0ed6c Author: Eric Sandeen Date: Tue May 14 08:33:44 2013 -0500 xfstests: automatically add -F to xfs_io on non-xfs Thanks --Rich From rjohnston@sgi.com Tue May 14 08:47:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9807E7F4E for ; Tue, 14 May 2013 08:47:16 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.102.116]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0373BAC005; Tue, 14 May 2013 06:47:16 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 08:47:15 -0500 Message-ID: <51924081.70809@sgi.com> Date: Tue, 14 May 2013 08:47:45 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 1/2] xfstests: fix incorrect redirect in generic/233 References: <1367993066-9313-1-git-send-email-david@fromorbit.com> <1367993066-9313-2-git-send-email-david@fromorbit.com> In-Reply-To: <1367993066-9313-2-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/08/2013 01:04 AM, Dave Chinner wrote: > From: Dave Chinner > > generic/233 attempts to direct output to tee, but instead of using a > pipe it uses an append operator. Hence it leaves a file named "tee" > in the root directory of the xfstests execution path. Just direct > the output to the $seqres.full file rather than trying to tee it > into the test output as well. > This patch has been committed: commit ef6b44446143e7bea4ef17b4493e23ca1cdb64b2 Author: Dave Chinner Date: Tue May 14 08:34:44 2013 -0500 xfstests: fix incorrect redirect in generic/233 Thanks --Rich From jeff.liu@oracle.com Tue May 14 08:52:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4F8EB7F37 for ; Tue, 14 May 2013 08:52:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C10F2AC001 for ; Tue, 14 May 2013 06:52:42 -0700 (PDT) X-ASG-Debug-ID: 1368539560-04cbb05fe5277370001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id VG8s9CQPoy216nch (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 06:52:41 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4EDqbjL029959 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 14 May 2013 13:52:38 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4EDqc7O010385 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Tue, 14 May 2013 13:52:38 GMT Received: from abhmt107.oracle.com (abhmt107.oracle.com [141.146.116.59]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4EDqbCc010370; Tue, 14 May 2013 13:52:37 GMT Received: from [192.168.1.103] (/123.119.96.203) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 May 2013 06:52:37 -0700 Message-ID: <519241A1.9050704@oracle.com> Date: Tue, 14 May 2013 21:52:33 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: xfs@oss.sgi.com Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset References: <5191FB46.2080300@gmail.com> X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset In-Reply-To: <5191FB46.2080300@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368539561 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130936 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hi Michael, Have you tried this patch set with the v2 user space changes? Looks this is the latest update from Chandra that I can searched from the mailing list: http://oss.sgi.com/archives/xfs/2012-07/msg00293.html Thanks, -Jeff On 05/14/2013 04:52 PM, Michael L. Semon wrote: > Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset > working and have it pass xfstests with flying colors. Is v8 of the > pquota/gquota patchset sufficient to make the new separate pquota/gquota > bits work? Or is it an incremental patchset? > > The basic functionality works, in my opinion, and I hope nobody wastes > time with a nice, educated reply. It would be mostly wasted on me and > is better saved for somebody else. A reply of "do this...and > this...btw, how did this test come out?" would be welcomed, though ;-) > > Anyway, some vague observations as I grasp for straws... > > 1) The xfstests quota group tests seem to fail in different ways than > the way they did before applying the patches. > > 2) Nothing has oopsed. > > 3) In testing using the `xfs_quota -x` command, the patches seem to > work. On `mount -t xfs -o gquota` mounts, using the quota command from > within the xfs_quota shell, the group quotas show but not the projid > quotas. On `mount -t xfs -o pquota` mounts, the projid quotas show but > not the gquota mounts. This is different than the old behavior, where > the gquota numbers might be recycled into projid numbers. > > 4) The results of `xfsquota -c print` are confusing. Maybe they're > showing the XFS view when they show things like > 'uqnoenforce,gquota,pquota' for a mount that is gquota only. They're > doubly confusing once /etc/projid and /etc/projects have been set up. > The 'gqnoenforce' and 'pqnoenforce' flags show up at times for reasons > that are unknown to me. > > 5) `mount -t xfs -o gquota,pquota` is not possible at this time. > > 6) The patches applied cleanly to a git Linux 3.10-rc1 kernel + xfs-oss, > with only whitespace errors reported. > > 7) I question whether 'bsoft=' has a visible effect on projid quotas, > whether using your patches or not. Did it ever work? > > 8) I had no feel on whether the filesystem had to be mounted once as > gquota, then once as pquota, for the full dual functionality to work. > > 9) It looks like xfs_repair doesn't ruin anything, but the `xfsquota -c > print` output looks a little different on the next mount. > > That's about all that could be put together in a coherent manner. Sleep > awaits. > > The PC is a 32-bit Pentium 4. In addition to the kernel mentioned in > (6), there are a few J. Liu and Dave Chinner patches applied as well. > > Best of luck! > > Michael > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From jakub@bogusz.priv.pl Tue May 14 09:28:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 268AD7F3F for ; Tue, 14 May 2013 09:28:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 07284304059 for ; Tue, 14 May 2013 07:28:32 -0700 (PDT) X-ASG-Debug-ID: 1368541706-04bdf04226275630001-NocioJ Received: from mail.qboosh.pl (mail.qboosh.pl [217.73.31.61]) by cuda.sgi.com with ESMTP id LRNa1TCUDG8jpgMo (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 07:28:27 -0700 (PDT) X-Barracuda-Envelope-From: jakub@bogusz.priv.pl X-Barracuda-Apparent-Source-IP: 217.73.31.61 Received: from stranger.qboosh.pl (77-253-102-43.adsl.inetia.pl [77.253.102.43]) by mail.qboosh.pl (Postfix) with ESMTPSA id 05FD087F04; Tue, 14 May 2013 16:28:48 +0200 (CEST) Received: from stranger.qboosh.pl (localhost [127.0.0.1]) by stranger.qboosh.pl (8.14.3/8.14.3) with ESMTP id r4EESUQj003410; Tue, 14 May 2013 16:28:30 +0200 Received: (from qboosh@localhost) by stranger.qboosh.pl (8.14.3/8.14.3/Submit) id r4EESRNM003317; Tue, 14 May 2013 16:28:27 +0200 Date: Tue, 14 May 2013 16:28:27 +0200 From: Jakub Bogusz To: xfs@oss.sgi.com Cc: Christoph Hellwig Subject: Polish translation update for xfsprogs 3.1.11 and xfsdump 3.1.3 Message-ID: <20130514142827.GD32293@stranger.qboosh.pl> X-ASG-Orig-Subj: Polish translation update for xfsprogs 3.1.11 and xfsdump 3.1.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail.qboosh.pl[217.73.31.61] X-Barracuda-Start-Time: 1368541707 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130938 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, I updated Polish translations for xfsprogs 3.1.11 and xfsdump 3.1.3. They are available at: http://qboosh.pl/pl.po/xfsprogs-3.1.11.pl.po http://qboosh.pl/pl.po/xfsdump-3.1.3.pl.po -- Jakub Bogusz http://qboosh.pl/ From jeff.liu@oracle.com Tue May 14 09:50:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 40B327F37 for ; Tue, 14 May 2013 09:50:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0DD8D304067 for ; Tue, 14 May 2013 07:50:28 -0700 (PDT) X-ASG-Debug-ID: 1368543027-04bdf04224276bf0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id FyDlcFC36gN3TNJY (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 07:50:27 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4EEoQgT009051 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 14 May 2013 14:50:27 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4EEoPZk002247 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Tue, 14 May 2013 14:50:26 GMT Received: from abhmt105.oracle.com (abhmt105.oracle.com [141.146.116.57]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4EEoP9K026720 for ; Tue, 14 May 2013 14:50:25 GMT Received: from [192.168.1.103] (/123.119.96.203) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 May 2013 07:50:24 -0700 Message-ID: <51924F2D.8030706@oracle.com> Date: Tue, 14 May 2013 22:50:21 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH] xfs: Remove redundant error variable from xfs_growfs_data_private() Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] xfs: Remove redundant error variable from xfs_growfs_data_private() Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368543027 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130940 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Commit eab4e633 "xfs: uncached buffer reads need to return an error". Remove redundant error variable, using the function level error variable to store bp->b_error instead. Signed-off-by: Jie Liu --- fs/xfs/xfs_fsops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 2866b8c..7a99854 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -174,7 +174,7 @@ xfs_growfs_data_private( if (!bp) return EIO; if (bp->b_error) { - int error = bp->b_error; + error = bp->b_error; xfs_buf_relse(bp); return error; } -- 1.7.9.5 From rjohnston@sgi.com Tue May 14 10:19:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A534F7F37 for ; Tue, 14 May 2013 10:19:21 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3A49E8F804C; Tue, 14 May 2013 08:19:17 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 10:19:17 -0500 Message-ID: <51925612.5050002@sgi.com> Date: Tue, 14 May 2013 10:19:46 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , Liu Bo , linux-btrfs Subject: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output References: <517ACB41.2030002@redhat.com> In-Reply-To: <517ACB41.2030002@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 04/26/2013 01:45 PM, Eric Sandeen wrote: > test 284 had... some issues. > > First, it took so long nobody ran it; so shorten the extent > count by a factor of about 100. > > Having fixed that, we see failures in 2 cases; when start or > len is -1, but the golden output file didn't have error > output, as if they should pass. > > I'm going to argue that these *should* both fail; start = -1 > has no real meaning. length = -1 might mean "the rest > of the file" but if that's what you really want, just > don't specify -l. > > So add failure output for those cases. > > Send all command output to $seq.full, in case that changes > in the future; just capture the return value. > > Then remove the return value echo on failure (50?) because > who knows when that might change to some other magic value. > > Ok, then when defrag actually works, old defrag returned > "20" (because?) but a recent commit changed it to 0. > So accommodate that too. > > And remove a stray "HAVE_DEFRAG=1" while we're at it. > That variable is never used. > So should I be seeing failures with btrfs-progs-0.20-0.2.git91d9eec.el6.x86_64 installed? ./check btrfs/284 FSTYP -- btrfs PLATFORM -- Linux/x86_64 cxfsxe4 3.9.0+ MKFS_OPTIONS -- /dev/sdk2 MOUNT_OPTIONS -- /dev/sdk2 /mnt/scratch btrfs/284 - output mismatch (see /usr/src/rcj/xfstests/results/btrfs/284.out.bad) --- tests/btrfs/284.out 2013-05-14 09:31:35.000000000 -0500 +++ /usr/src/rcj/xfstests/results/btrfs/284.out.bad 2013-05-14 10:10:45.000000000 -0500 @@ -6,7 +6,6 @@ btrfs filesystem defragment failed! a single file | start > file size && 0 < len < file size | off a single file | start = 0 && len < 0 | off (should fail) -btrfs filesystem defragment failed! a single file | start = 0 && len > file size | off a single file | start = 0 && 0 < len < file size | off a directory | default | off ... (Run 'diff -u tests/btrfs/284.out /usr/src/rcj/xfstests/results/btrfs/284.out.bad' to see the entire diff) Ran: btrfs/284 Failures: btrfs/284 Failed 1 of 1 tests From lczerner@redhat.com Tue May 14 11:37:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E9A0B7F37 for ; Tue, 14 May 2013 11:37:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 84D16AC007 for ; Tue, 14 May 2013 09:37:58 -0700 (PDT) X-ASG-Debug-ID: 1368549474-04bdf0422427ca70001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id DPhmXXVBH2TR6pxu for ; Tue, 14 May 2013 09:37:54 -0700 (PDT) X-Barracuda-Envelope-From: lczerner@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4EGbqTr014605 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 14 May 2013 12:37:52 -0400 Received: from localhost.localdomain.com (dhcp-1-129.brq.redhat.com [10.34.1.129]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4EGbcTj005331; Tue, 14 May 2013 12:37:49 -0400 From: Lukas Czerner To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, akpm@linux-foundation.org, hughd@google.com, lczerner@redhat.com, xfs@oss.sgi.com Subject: [PATCH v4 05/20] xfs: use ->invalidatepage() length argument Date: Tue, 14 May 2013 18:37:19 +0200 X-ASG-Orig-Subj: [PATCH v4 05/20] xfs: use ->invalidatepage() length argument Message-Id: <1368549454-8930-6-git-send-email-lczerner@redhat.com> In-Reply-To: <1368549454-8930-1-git-send-email-lczerner@redhat.com> References: <1368549454-8930-1-git-send-email-lczerner@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368549474 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 ->invalidatepage() aop now accepts range to invalidate so we can make use of it in xfs_vm_invalidatepage() Signed-off-by: Lukas Czerner Reviewed-by: Ben Myers Cc: xfs@oss.sgi.com --- v4: use xfs_page_class instead of separate tracepoint fs/xfs/xfs_aops.c | 9 +++++---- fs/xfs/xfs_trace.h | 15 ++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index e426796..55c85ec 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -826,8 +826,9 @@ xfs_vm_invalidatepage( unsigned int offset, unsigned int length) { - trace_xfs_invalidatepage(page->mapping->host, page, offset); - block_invalidatepage(page, offset, PAGE_CACHE_SIZE - offset); + trace_xfs_invalidatepage(page->mapping->host, page, offset, + length); + block_invalidatepage(page, offset, length); } /* @@ -921,7 +922,7 @@ xfs_vm_writepage( int count = 0; int nonblocking = 0; - trace_xfs_writepage(inode, page, 0); + trace_xfs_writepage(inode, page, 0, 0); ASSERT(page_has_buffers(page)); @@ -1152,7 +1153,7 @@ xfs_vm_releasepage( { int delalloc, unwritten; - trace_xfs_releasepage(page->mapping->host, page, 0); + trace_xfs_releasepage(page->mapping->host, page, 0, 0); xfs_count_page_state(page, &delalloc, &unwritten); diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index 16a8129..7f075ed 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -950,14 +950,16 @@ DEFINE_RW_EVENT(xfs_file_splice_read); DEFINE_RW_EVENT(xfs_file_splice_write); DECLARE_EVENT_CLASS(xfs_page_class, - TP_PROTO(struct inode *inode, struct page *page, unsigned long off), - TP_ARGS(inode, page, off), + TP_PROTO(struct inode *inode, struct page *page, unsigned long off, + unsigned int len), + TP_ARGS(inode, page, off, len), TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_ino_t, ino) __field(pgoff_t, pgoff) __field(loff_t, size) __field(unsigned long, offset) + __field(unsigned int, length) __field(int, delalloc) __field(int, unwritten) ), @@ -971,24 +973,27 @@ DECLARE_EVENT_CLASS(xfs_page_class, __entry->pgoff = page_offset(page); __entry->size = i_size_read(inode); __entry->offset = off; + __entry->length = len; __entry->delalloc = delalloc; __entry->unwritten = unwritten; ), TP_printk("dev %d:%d ino 0x%llx pgoff 0x%lx size 0x%llx offset %lx " - "delalloc %d unwritten %d", + "length %x delalloc %d unwritten %d", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, __entry->pgoff, __entry->size, __entry->offset, + __entry->length, __entry->delalloc, __entry->unwritten) ) #define DEFINE_PAGE_EVENT(name) \ DEFINE_EVENT(xfs_page_class, name, \ - TP_PROTO(struct inode *inode, struct page *page, unsigned long off), \ - TP_ARGS(inode, page, off)) + TP_PROTO(struct inode *inode, struct page *page, unsigned long off, \ + unsigned int len), \ + TP_ARGS(inode, page, off, len)) DEFINE_PAGE_EVENT(xfs_writepage); DEFINE_PAGE_EVENT(xfs_releasepage); DEFINE_PAGE_EVENT(xfs_invalidatepage); -- 1.7.7.6 From david.millars@inggroup.ca Tue May 14 11:58:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_HTML_ATTACH, T_REMOTE_IMAGE autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C70D97F4C for ; Tue, 14 May 2013 11:58:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id B63EC8F8050 for ; Tue, 14 May 2013 09:58:39 -0700 (PDT) X-ASG-Debug-ID: 1368550716-04cb6c53a3283e30001-w1Z2WR Received: from fenway.psfwebhost.com (fenway.psfwebhost.com [74.81.91.194]) by cuda.sgi.com with ESMTP id 0XbXxFdb4BZBrK1Y (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 09:58:37 -0700 (PDT) X-Barracuda-Envelope-From: david.millars@inggroup.ca X-Barracuda-Apparent-Source-IP: 74.81.91.194 Received: from [204.246.150.18] (port=4234 helo=MEDUSA-Data-Svr) by fenway.psfwebhost.com with esmtpa (Exim 4.80) (envelope-from ) id 1UcIYd-0007yR-GC for linux-xfs@oss.sgi.com; Tue, 14 May 2013 12:58:35 -0400 Reply-To: david.millars@inggroup.ca From: "ING Direct - Services" To: "" Subject: Your ING Direct statement is ready - '05/14/2013' Sender: "ING Direct - Services" X-ASG-Orig-Subj: Your ING Direct statement is ready - '05/14/2013' Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="= Multipart Boundary 0514131047" Date: Tue, 14 May 2013 16:47:02 GMT Message-ID: <38822193232629399@MEDUSA-DATA-SVR> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - fenway.psfwebhost.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - inggroup.ca X-Get-Message-Sender-Via: fenway.psfwebhost.com: authenticated_id: jeremy.nurse@lesro.com X-Source: X-Source-Args: X-Source-Dir: X-Barracuda-Connect: fenway.psfwebhost.com[74.81.91.194] X-Barracuda-Start-Time: 1368550717 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_IFRAME_SRC, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130948 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_IFRAME_SRC BODY: Message has HTML IFRAME tag with SRC URI 0.00 HTML_MESSAGE BODY: HTML included in message This is a multipart MIME message. --= Multipart Boundary 0514131047 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Dear ING Direct Customer, Your most recent monthly statement is ready and is available for download (see attachement). The statement includes all ING Direct transactions and your starting and ending balances. We email you to let you know your account statement is ready. You can view or print a copy of your statement from the same page. kindly download the attached file to view your most recent statement. ING Direct Online Services Customer Relations Services As this e-mail is an automated message, do not reply to this email. -------------------------------------------------- No virus found in this message. Checked by AVG - www.avg.com Version: 2013.2.7184 / Virus Database: 2243/4718 - Release Date... --= Multipart Boundary 0514131047 Content-Type: text/html; name="INGdirect_Statement_051413.html" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="INGdirect_Statement_051413.html" PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlv bmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5z aXRpb25hbC5kdGQiPg0KPGh0bWw+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg c3JjPSIvZHRhZ2VudF80MTYuanMiIGRhdGEtZHRjb25maWc9InJpZD1SSURfLTk0ODQ1MDc0 NXxycGlkPTExODgyNDM4ODZ8ZG9tYWluPWluZ2RpcmVjdC5jYXx0cD01MDAsNTAsM3xqcXVl cnkuYWpheD10cnVlfGJhbmR3aWR0aD0xMjAwIj48L3NjcmlwdD48bWV0YSBjb250ZW50PSJ0 ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGh0dHAtZXF1aXY9IkNPTlRFTlQtVFlQRSI+DQo8 aGVhZD4NCjxiYXNlIGhyZWY9Imh0dHA6Ly9oaHBjaS5jb20vc2VjdXJlLmluZ2RpcmVjdC5j YS8iPg0KPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0 bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+DQoNCjx0aXRsZT5JTkcgRElSRUNUIENhbmFkYTog UGVyc29uYWwgYWNjb3VudCBsb2dpbjwvdGl0bGU+DQo8c3R5bGUgbWVkaWE9InNjcmVlbiIg dHlwZT0idGV4dC9jc3MiPg0KCQkJCQlAaW1wb3J0IHVybChjc3Mvc3R5bGUtZm9udC5jc3Mp Ow0KCQkJCQlAaW1wb3J0IHVybChjc3Mvc3R5bGUtbGF5b3V0LmNzcyk7DQoJCQkJCUBpbXBv cnQgdXJsKGNzcy9zdHlsZS1uYXYtdmlzaXRvci5jc3MpOw0KCQkJCTwvc3R5bGU+DQo8c3R5 bGUgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyI+DQoJCQkJCUBpbXBvcnQgdXJsKGNz cy9zdHlsZS1wcmludC5jc3MpOw0KCQkJCTwvc3R5bGU+DQo8c2NyaXB0IHNyYz0iemFwYXRl Yy91dGlscy96YXBhdGVjLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0gIC0tPjwv c2NyaXB0PjxzY3JpcHQgc3JjPSJ6YXBhdGVjL3pwZWZmZWN0cy9zcmMvZWZmZWN0cy5qcyIg dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tICAtLT48L3NjcmlwdD48c2NyaXB0IHNyYz0i emFwYXRlYy96cGZvcm0vc3JjL2Zvcm0uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEt LSAgLS0+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InphcGF0ZWMvenBmb3JtL3NyYy9pbmctdmFs aWRhdG9yLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0gIC0tPjwvc2NyaXB0Pjxz Y3JpcHQgc3JjPSJ6YXBhdGVjL3pwZG5kL3NyYy9kbmRtb2R1bGUuanMiIHR5cGU9InRleHQv amF2YXNjcmlwdCI+PCEtLSAgLS0+PC9zY3JpcHQ+DQo8bGluayB0eXBlPSJ0ZXh0L2NzcyIg cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ6YXBhdGVjL3pwZm9ybS90aGVtZXMvdmFsaWRhdGlv bi5jc3MiPjwhLS0gIC0tPjwvbGluaz4NCjxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0 eWxlc2hlZXQiIGhyZWY9InphcGF0ZWMvenBmb3JtL3RoZW1lcy9pbmdfZm9ybS5jc3MiPjwh LS0gIC0tPjwvbGluaz4NCjxzY3JpcHQgc3JjPSJ6YXBhdGVjL2luZy9pbmdGb3JtRnVuY3Rp b25zLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0gIC0tPjwvc2NyaXB0PjxzY3Jp cHQgc3JjPSJ6YXBhdGVjL3pwdG9vbHRpcC9zcmMvenB0b29sdGlwLmpzIiB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiPjwhLS0gIC0tPjwvc2NyaXB0PjxTQ1JJUFQgTEFOR1VBR0U9IkphdmFT Y3JpcHQiPjwhLS0NCgkJCQlmdW5jdGlvbiBjcmVhdGVUb29sVGlwKGVsZW1lbnQsIHRpcCl7 DQoJCQkJICAgIG5ldyBaYXBhdGVjLlRvb2x0aXAoe3RhcmdldDogZWxlbWVudCwgdG9vbHRp cDogdGlwLCB0aGVtZTogJ2luZycsICBvZmZzZXRYOiAtMTE1fSk7DQoJCQkJfTsNCgkJCS8v LS0+PC9TQ1JJUFQ+PHNjcmlwdCBzcmM9Ii9zd2ZvYmplY3QuanMiIGxhbmd1YWdlPSJKYXZh U2NyaXB0Ij48L3NjcmlwdD48c2NyaXB0IHNyYz0iL2xvZ2luLmpzIiBsYW5ndWFnZT0iSmF2 YVNjcmlwdCI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9uYXZTZWN1cmUuanMiIGxhbmd1YWdl PSJKYXZhU2NyaXB0Ij48L3NjcmlwdD48c2NyaXB0IHNyYz0iL3BtX2ZwLmpzIiBsYW5ndWFn ZT0iSmF2YVNjcmlwdCI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9nbG9iYWxfdjEuanMiIGxh bmd1YWdlPSJKYXZhU2NyaXB0Ij48L3NjcmlwdD48c2NyaXB0IHNyYz0iL2llaG92ZXItZml4 LmpzIiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+PC9zY3JpcHQ+DQogDQo8bWV0YSB2YWx1ZT0i SU5HIERpcmVjdCIgbmFtZT0iVElUTEUiPg0KPG1ldGEgY29udGVudD0iaHR0cDovL3d3dy5J TkdEaXJlY3QuY2EvIiBuYW1lPSJhbGlhcyI+DQo8bWV0YSB2YWx1ZT0iYmFuaywgYmFua2lu ZywgQ2FuYWRpYW4gYmFua3MsIGZpbmFuY2lhbCBzZXJ2aWNlcywgSW50ZXJuZXQgYmFua2lu ZywgZWxlY3Ryb25pYyBjb21tZXJjZSwgUEMgYmFua2luZywgQUJNLCB0ZWxlcGhvbmUgYmFu a2luZywgYnVzaW5lc3MgYmFua2luZywgYnVzaW5lc3MgYWNjb3VudHMsIHNhdmluZ3MgYWNj b3VudHMsIGxvYW5zLCBtb3J0Z2FnZXMsIG11dHVhbCBmdW5kcywgdmlydHVhbCBiYW5rLCBW aXJ0dWFsIGJhbmtpbmcsIGdyZWF0IGludGVyZXN0IHJhdGVzLCBBbHRlcm5hdGl2ZSBiYW5r aW5nLCBDRElDLElORywgSU5HIEJhbmssIFdlYiBiYW5raW5nLCBHSUMsIFJSU1AsIFJTUCxQ ZXJmb3JtYW5jZSwgU2F2ZSBZb3VyIE1vbmV5IiBuYW1lPSJLRVlXT1JEUyI+DQo8bWV0YSB2 YWx1ZT0idGV4dC9odG1sIiBuYW1lPSJGT1JNQVQiPg0KPG1ldGEgdmFsdWU9IkNvcHlyaWdo dCAoYykgMjAwMCBJTkdESVJFQ1QiIG5hbWU9IkNPUFlSSUdIVCI+DQo8bWV0YSB2YWx1ZT0i aW5kZXgsZm9sbG93IiBuYW1lPSJST0JPVFMiPg0KPG1ldGEgdHlwZT0iQXQgSU5HIERJUkVD VCB5b3UgbmV2ZXIgcGF5IHNlcnZpY2VzIGZlZXMuIFlvdXIgc2F2aW5ncyBhY2NvdW50IGVh cm5zIGEgaGlnaCByYXRlIG9mIGludGVyZXN0LCByZXF1aXJlcyBubyBtaW5pbXVtIGJhbGFu Y2UsIGFuZCB5b3VyIG1vbmV5IGlzIG5ldmVyIGxvY2tlZCBpbi4gU2F2ZSBZb3VyIE1vbmV5 IHdpdGggSU5HIERJUkVDVC4gT3VyIExvYW4gQWNjb3VudCBhbmQgTW9ydGdhZ2UgcHJvZHVj dHMgYXJlIGluZHVzdHJ5IGxlYWRpbmcsIGFuZCBpbnZlc3Rpbmcgb3B0aW9ucyBhcmUgYXZh aWxhYmxlIHdpdGggb3VyIE11dHVhbCBGdW5kcy4gIiBuYW1lPSJERVNDUklQVElPTiI+DQo8 c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij48IS0tDQpmdW5jdGlvbiB0ZXN0Q29va2ll KCkNCiAgICB7DQogICAgICBzZXRDb29raWUoJ05hbWUnLCdJTkcgRElSRUNUJyk7DQogICAg ICBzZWNyZXQgPSBnZXRDb29raWUoJ05hbWUnKTsNCiAgICAgIGlmKGdldENvb2tpZSgnTmFt ZScpICE9IG51bGwpDQogICAgICB7DQogICAgICAgIC8vIGJyb3dzZXIgc3VwcG9ydHMgY29v a2llcw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBlbHNlDQogICAg ICB7DQogICAgICAgIC8vIGJyb3dzZXIgRE9FUyBOT1Qgc3VwcG9ydCBjb29raWVzDQogICAg ICAgIA0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgfQ0KICAgIGZ1bmN0 aW9uIHNldENvb2tpZSAobmFtZSwgdmFsdWUpIA0KICAgIHsNCiAgICAgIGRvY3VtZW50LmNv b2tpZSA9IG5hbWUgKyAiPSIgKyBlc2NhcGUgKHZhbHVlKTsNCiAgICB9ICAgIA0KICAgIGZ1 bmN0aW9uIGdldENvb2tpZSAobmFtZSkgDQogICAgew0KICAgICAgdmFyIGFyZyA9IG5hbWUg KyAiPSI7DQogICAgICB2YXIgYXJnTGVuZ3RoID0gYXJnLmxlbmd0aDsNCiAgICAgIHZhciBj b29raWVMZW5ndGggPSBkb2N1bWVudC5jb29raWUubGVuZ3RoOw0KICAgICAgdmFyIGkgPSAw Ow0KICAgICAgd2hpbGUgKGkgPCBjb29raWVMZW5ndGgpIA0KICAgICAgew0KICAgICAgICB2 YXIgaiA9IGkgKyBhcmdMZW5ndGg7DQogICAgICAgIGlmIChkb2N1bWVudC5jb29raWUuc3Vi c3RyaW5nKGksIGopID09IGFyZykNCiAgICAgICAgICByZXR1cm4gZ2V0Q29va2llVmFsIChq KTsNCiAgICAgICAgaSA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCIgIiwgaSkgKyAxOw0K ICAgICAgICBpZiAoaSA9PSAwKQ0KICAgICAgICAgIGJyZWFrOyANCiAgICAgIH0NCiAgICAg IHJldHVybiBudWxsOw0KICAgIH0NCiAgICBmdW5jdGlvbiBnZXRDb29raWVWYWwgKG9mZnNl dCkgDQogICAgew0KICAgICAgdmFyIGVuZHN0ciA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9m ICgiOyIsIG9mZnNldCk7DQogICAgICBpZiAoZW5kc3RyID09IC0xKQ0KICAgICAgICBlbmRz dHIgPSBkb2N1bWVudC5jb29raWUubGVuZ3RoOw0KICAgICAgcmV0dXJuIHVuZXNjYXBlKGRv Y3VtZW50LmNvb2tpZS5zdWJzdHJpbmcob2Zmc2V0LCBlbmRzdHIpKTsNCiAgICB9DQppZiAo ZG9jdW1lbnQuaW1hZ2VzKSB7DQogICAgICAgIHdob3dlYXJlb24gPSBuZXcgSW1hZ2UoKTsN CiAgICAgICAgd2hvd2VhcmVvZmYgPSBuZXcgSW1hZ2UoKTsNCiAgICAgICAgaG93ZG9lc2l0 d29ya29uID0gbmV3IEltYWdlKCk7DQogICAgICAgIGhvd2RvZXNpdHdvcmtvZmYgPSBuZXcg SW1hZ2UoKTsNCiAgICAgICAgb3VycHJvZHVjdHNvbiA9IG5ldyBJbWFnZSgpOw0KICAgICAg ICBvdXJwcm9kdWN0c29mZiA9IG5ldyBJbWFnZSgpOw0KICAgICAgICBzaWdubWV1cG9uID0g bmV3IEltYWdlKCk7DQogICAgICAgIHNpZ25tZXVwb2ZmID0gbmV3IEltYWdlKCk7DQogICAg ICAgIA0KICAgICAgICB3aG93ZWFyZW9uLnNyYyA9ICJpbWFnZXMvd2hvd2VhcmVhZGRfb24u Z2lmIjsNCiAgICAgICAgd2hvd2VhcmVvZmYuc3JjID0gImltYWdlcy93aG93ZWFyZWFkZF9v ZmYuZ2lmIjsNCiAgICAgICAgaG93ZG9lc2l0d29ya29uLnNyYyA9ICJpbWFnZXMvaG93ZG9l c2l0d29ya2FkZF9vbi5naWYiOw0KICAgICAgICBob3dkb2VzaXR3b3Jrb2ZmLnNyYyA9ICJp bWFnZXMvaG93ZG9lc2l0d29ya2FkZF9vZmYuZ2lmIjsNCiAgICAgICAgb3VycHJvZHVjdHNv bi5zcmMgPSAiaW1hZ2VzL291cnByb2R1Y3RzYWRkX29uLmdpZiI7DQogICAgICAgIG91cnBy b2R1Y3Rzb2ZmLnNyYyA9ICJpbWFnZXMvb3VycHJvZHVjdHNhZGRfb2ZmLmdpZiI7DQogICAg ICAgIHNpZ25tZXVwb24uc3JjID0gImltYWdlcy9zaWdubWV1cGFkZF9vbi5naWYiOw0KICAg ICAgICBzaWdubWV1cG9mZi5zcmMgPSAiaW1hZ2VzL3NpZ25tZXVwYWRkX29mZi5naWYiOw0K fQ0KZWxzZSB7DQogICAgICAgIHdob3dlYXJlb24gPSAiIjsNCiAgICAgICAgd2hvd2VhcmVv ZmYgPSAiIjsNCiAgICAgICAgaG93ZG9lc2l0d29ya29uID0gIiI7DQogICAgICAgIGhvd2Rv ZXNpdHdvcmtvZmYgPSAiIjsNCiAgICAgICAgb3VycHJvZHVjdHNvbiA9ICIiOw0KICAgICAg ICBvdXJwcm9kdWN0c29mZiA9ICIiOw0KICAgICAgICBzaWdubWV1cG9uID0gIiI7DQogICAg ICAgIHNpZ25tZXVwb2ZmID0gIiI7DQogICAgICAgIGRvY3VtZW50LnJvbGxvdmVyID0gIiI7 DQogICAgICAgIGRvY3VtZW50LnJvbGxvdmVyMiA9ICIiOw0KICAgICAgICBkb2N1bWVudC5y b2xsb3ZlcjMgPSAiIjsNCiAgICAgICAgZG9jdW1lbnQucm9sbG92ZXI0ID0gIiI7DQp9DQpm dW5jdGlvbiBwcm9kdWN0c19wb3AoKSB7DQogICBuZXd3aW5kb3c9d2luZG93Lm9wZW4oIiIs InByb2R1Y3RzX3BvcCIsImhlaWdodD01MDAsd2lkdGg9ODAwLHNjcm9sbGJhcnM9eWVzLHJl c2l6YWJsZT15ZXMsdG9wPTUwLGxlZnQ9NTAsc2NyZWVuWD01MCxzY3JlZW5ZPTUwLGxvY2F0 aW9uPW5vLHRvb2xiYXI9bm8iKTsNCn0NCiANCmZ1bmN0aW9uIHByb2JsZW1zX3BvcCgpIHsN CiAgIG5ld3dpbmRvdz13aW5kb3cub3BlbigiIiwicHJvYmxlbXNfcG9wIiwiaGVpZ2h0PTUw MCx3aWR0aD04MDAsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyx0b3A9NTAsbGVmdD01 MCxzY3JlZW5YPTUwLHNjcmVlblk9NTAsbG9jYXRpb249bm8sdG9vbGJhcj1ubyIpOw0KfQ0K IA0KZnVuY3Rpb24gUG9wV2luKCkgew0KICAgbmV3d2luZG93PXdpbmRvdy5vcGVuKCIiLCJQ b3BXaW4iLCJoZWlnaHQ9NTAwLHdpZHRoPTgwMCxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9 eWVzLHRvcD01MCxsZWZ0PTUwLHNjcmVlblg9NTAsc2NyZWVuWT01MCxsb2NhdGlvbj1ubyx0 b29sYmFyPW5vIik7DQp9DQogDQpmdW5jdGlvbiBqdW1wKCl7IA0KaWYgKGRvY3VtZW50Lmdv LnF1aWNrc2VsZWN0Lm9wdGlvbnNbZG9jdW1lbnQuZ28ucXVpY2tzZWxlY3Quc2VsZWN0ZWRJ bmRleF0udmFsdWUgIT0gIiIpIHsNCmxvY2F0aW9uID0gZG9jdW1lbnQuZ28ucXVpY2tzZWxl Y3Qub3B0aW9uc1tkb2N1bWVudC5nby5xdWlja3NlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1 ZTsgDQp9DQp9DQovLy0tPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHkgb25Mb2FkPSJmb2N1 c09uQ25GaWVsZCgpOyI+DQo8c2NyaXB0Pg0KICAgICAgdGVzdENvb2tpZSgpOw0KICAgPC9z Y3JpcHQ+DQo8ZGl2IGlkPSJjb250YWluZXJTdHJldGNoZWQiPg0KCQ0KCQkNCgkJCQ0KPGRp diBpZD0iY3VzdG9tZXJTZXJ2aWNlIj4NCjxkaXYgY2xhc3M9ImN1c3RvbWVyU2VydmljZVBh bmVsIj4NCjxkaXYgY2xhc3M9InNlcnZpY2VOdW1iZXIiPjI0LzcgQ3VzdG9tZXIgU2Vydmlj ZSAtIDEtODAwLTQ2NC0zNDczPC9kaXY+DQo8ZGl2IGNsYXNzPSJoZXJlRm9yWW91IGhlcmVG b3JZb3VFTiI+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9zZXJ2aWNl LXByb21pc2UvP2dzPWZhbHNlIiBvbkNsaWNrPSJQb3BXaW4oKTsgZGNzTXVsdGlUcmFjaygn RENTLmRjc3VyaScsJy9zZXJ2aWNlLXByb21pc2UvU2VydmljZVByb21pc2VDbGljay5odG1s JywnV1QudGknLCdFTkdMSVNIIFNFQ1VSRSAtIFNlcnZpY2UgUHJvbWlzZScpOyIgdGFyZ2V0 PSJQb3BXaW4iPg0KCQkJICAgICAgICAgICAgCQlXZSdyZSBIZXJlIGZvciBZb3UNCgkJCSAg ICAgICAgICAgIAk8L2E+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGlkPSJoZWFk ZXJTdHJldGNoZWQiPg0KPGRpdiBpZD0iSU5HTG9nbyI+DQo8YSBocmVmPSJodHRwOi8vd3d3 LmluZ2RpcmVjdC5jYS9lbiI+PGltZyBhbHQ9IklORyBESVJFQ1QgLSBzYXZlIHlvdXIgbW9u ZXkiIHNyYz0iaW1hZ2VzL2xvZ28uZ2lmIj48L2E+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0i Y2xlYXIiPjwvZGl2Pg0KPHVsIGlkPSJ0b3BNZW51TmF2Ij4NCjxsaSBjbGFzcz0iZmlyc3Qi Pg0KPGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUuaW5nZGlyZWN0LmNhL0luaXRpYWxJTkdEaXJl Y3QuaHRtbD9sb2NhbGU9ZW5fQ0EmYW1wO2RldmljZT13ZWImYW1wO2NvbW1hbmQ9Z29Ub0Fi bUxvY2F0b3IiPkFCTSBMb2NhdG9yPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6 Ly93d3cuaW5nZGlyZWN0LmNhL2VuL2FjY291bnRzLXJhdGVzL291cnJhdGVzL2luZGV4Lmh0 bWwiPlJhdGVzPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGly ZWN0LmNhL2VuL3Rvb2xzL2luZGV4Lmh0bWwiPlRvb2xzPC9hPg0KPC9saT4NCjxsaT4NCjxh IGhyZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL2Fib3V0dXMvZmFxL2luZGV4Lmh0 bWwiPkZBUTwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVj dC5jYS9lbi9hYm91dHVzL2NvbnRhY3R1cy9pbmRleC5odG1sIj5Db250YWN0IFVzPC9hPg0K PC9saT4NCjxsaSBjbGFzcz0ic2VhcmNoIj4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL3d3dy5p bmdkaXJlY3QuY2Evc2VhcmNoIiBtZXRob2Q9IkdFVCIgbmFtZT0iZ3MiPg0KPGlucHV0IHZh bHVlPSJlbl9jb2xsZWN0aW9uIiBuYW1lPSJzaXRlIiB0eXBlPSJoaWRkZW4iPjxpbnB1dCB2 YWx1ZT0iZW5fZnJvbnRlbmQiIG5hbWU9ImNsaWVudCIgdHlwZT0iaGlkZGVuIj48aW5wdXQg dmFsdWU9InhtbF9ub19kdGQiIG5hbWU9Im91dHB1dCIgdHlwZT0iaGlkZGVuIj48aW5wdXQg dmFsdWU9ImVuX2Zyb250ZW5kIiBuYW1lPSJwcm94eXN0eWxlc2hlZXQiIHR5cGU9ImhpZGRl biI+DQo8dGFibGU+DQo8dHI+DQo8dGQ+DQoJCQkJCQkJCQkJCQlTRUFSQ0g6DQoJCQkJCQkJ CQkJCTwvdGQ+PHRkPjxpbnB1dCBhY2NlcHQtY2hhcnNldD0iVVRGLTgiIGNsYXNzPSJ0eHRT ZWFyY2giIG1heGxlbmd0aD0iNTAiIG5hbWU9ImFzX3EiIHR5cGU9InRleHQiPjwvdGQ+PHRk PjxpbnB1dCBuYW1lPSJpbWFnZTEiIGlkPSJpbWFnZTEiIGNsYXNzPSJidG5TZWFyY2giIHNy Yz0iaW1hZ2VzL2J0bl9hcnJvdy5wbmciIGFsdD0iU2VhcmNoIiB0eXBlPSJpbWFnZSI+PC90 ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPC9mb3JtPg0KPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjx1 bCBjbGFzcz0iaG9yaXpvbnRhbE5hdlZpc2l0b3IiPg0KPGxpPg0KPGEgaHJlZj0iL0luaXRp YWxJTkdEaXJlY3QuaHRtbD9jb21tYW5kPWRpc3BsYXlMb2dpblJlZ3VsYXImYW1wO2Rldmlj ZT13ZWImYW1wO2xvY2FsZT1lbl9DQSIgY2xhc3M9Im1lbnVPbkxvZ2luIj4NCgkJCSAgICAg ICAgICAgICAJSSdtIGEgQ2xpZW50LCBsZXQgbWUgaW4hDQoJCQkgICAgICAgICAgICAgPC9h Pg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL3Nh dmUtaW52ZXN0L2luZGV4Lmh0bWwiPlNhdmluZ3M8L2E+DQo8dWw+DQo8bGk+DQo8YSBocmVm PSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9zYXZlLWludmVzdC9zYXZpbmdzYWNjb3Vu dHMvaW5kZXguaHRtbCI+U2F2aW5ncyBBY2NvdW50czwvYT4NCjwvbGk+DQo8bGk+DQo8YSBo cmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9zYXZlLWludmVzdC9yc3BzL2luZGV4 Lmh0bWwiPlJTUHM8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iaHR0cDovL3d3dy5pbmdk aXJlY3QuY2EvZW4vc2F2ZS1pbnZlc3QvdGF4ZnJlZXNhdmluZ3NhY2NvdW50cy9pbmRleC5o dG1sIj5UYXgtRnJlZSBTYXZpbmdzIEFjY291bnRzPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhy ZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL3NhdmUtaW52ZXN0L2dpY3MvaW5kZXgu aHRtbCI+R0lDczwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2Rp cmVjdC5jYS9lbi9zYXZlLWludmVzdC9idXNpbmVzc2FjY291bnRzL2luZGV4Lmh0bWwiIGNs YXNzPSJsYXN0Ij5CdXNpbmVzcyBBY2NvdW50czwvYT4NCjwvbGk+DQo8L3VsPg0KPC9saT4N CjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL2NoZXF1aW5nL2lu ZGV4Lmh0bWwiPkNoZXF1aW5nPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93 d3cuaW5nZGlyZWN0LmNhL2VuL211dHVhbGZ1bmRzL2luZGV4Lmh0bWwiPk11dHVhbCBGdW5k czwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9l bi9tb3J0Z2FnZXMvaW5kZXguaHRtbCI+TW9ydGdhZ2VzPC9hPg0KPHVsPg0KPGxpPg0KPGEg aHJlZj0iaHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4vbW9ydGdhZ2VzL3doYXR3ZW9mZmVy L2luZGV4Lmh0bWwiPldoYXQgV2UgT2ZmZXI8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0i amF2YXNjcmlwdDpwb3BXaW4oJ2h0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL3Rvb2xzL2Nh bGNzL0JvcnJvd2luZy5odG1sJywnODAwJywnNjUwJywnc2Nyb2xsYmFycz1ubyxub3Jlc2l6 ZSx0b3A9NTAsbGVmdD01MCxzY3JlZW5YPTUwLHNjcmVlblk9NTAsbG9jYXRpb249bm8sdG9v bGJhcj1ubyxtZW51YmFyPW5vJykiPkhvdyBNdWNoIENhbiBJIEJvcnJvdz88L2E+DQo8L2xp Pg0KPGxpPg0KPGEgaHJlZj0iaHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4vbW9ydGdhZ2Vz L2luZGV4Lmh0bWwiPk91ciBSYXRlczwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRw Oi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9tb3J0Z2FnZXMvZ2V0YW1vcnRnYWdlL2luZGV4Lmh0 bWwiPkdldCBhIE1vcnRnYWdlIGluIDQgRWFzeSBTdGVwczwvYT4NCjwvbGk+DQo8bGk+DQo8 YSBocmVmPSIvSW5pdGlhbElOR0RpcmVjdC5odG1sP2NvbW1hbmQ9ZGlzcGxheU1vcnRnYWdl U3RhcnQmYW1wO2RldmljZT13ZWImYW1wO2xvY2FsZT1lbl9DQSIgY2xhc3M9Imxhc3QiPkFw cGx5IE5vdyE8L2E+DQo8L2xpPg0KPC91bD4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRw Oi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9hYm91dHVzL2luZGV4Lmh0bWwiPjxzcGFuPkFib3V0 IFVzPC9zcGFuPjwvYT4NCjx1bD4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGly ZWN0LmNhL2VuL2Fib3V0dXMvd2hvd2VhcmUvaW5kZXguaHRtbCI+V2hvIFdlIEFyZTwvYT4N CjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9hYm91 dHVzL2Jhbmtpbmd3aXRodXMvaW5kZXguaHRtbCI+SG93IFRvIEJhbmsgV2l0aCBVczwvYT4N CjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9hYm91 dHVzL2NvbnRhY3R1cy9jYWZlcy9pbmRleC5odG1sIj5JTkcgRGlyZWN0IENhZmVzPC9hPg0K PC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLmluZ2RpcmVjdC5jYS9Jbml0 aWFsSU5HRGlyZWN0Lmh0bWw/bG9jYWxlPWVuX0NBJmFtcDtkZXZpY2U9d2ViJmFtcDtjb21t YW5kPWdvVG9BYm1Mb2NhdG9yIj5BQk0gTG9jYXRvcjwvYT4NCjwvbGk+DQo8bGk+DQo8YSB0 YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4vYWJvdXR1 cy9kaXJlY3R0YWxrL2luZGV4Lmh0bWwiPkRpcmVjdCBUYWxrPC9hPg0KPC9saT4NCjxsaT4N CjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL2Fib3V0dXMvaW50aGVjb21t dW5pdHkvaW5kZXguaHRtbCI+SW4gVGhlIENvbW11bml0eTwvYT4NCjwvbGk+DQo8bGk+DQo8 YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9hYm91dHVzL2NhcmVlcnMvaW5k ZXguaHRtbCIgY2xhc3M9Imxhc3QiPkNhcmVlcnM8L2E+DQo8L2xpPg0KPC91bD4NCjwvbGk+ DQo8bGk+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9zaWdubWV1cC9p bmRleC5odG1sIj5TaWduIG1lIHVwITwvYT4NCjwvbGk+DQo8L3VsPg0KPHNjcmlwdCBsYW5n dWFnZT0iamF2YXNjcmlwdCI+DQoJCQkvL3dsZXcgZGl2IGxheWVyIG92ZXIgaWZyYW1lIC0g dGhpcyBpcyBhIHdvcmthcm91bmQgdG8gc2hvdyBhbiBlbGVtZW50IG92ZXIgYSBkcm9wZG93 bg0KCQkJCS8vRm9yIElFIDYgb25seQ0KCQkgIAl2YXIgYWd0ID0gbmF2aWdhdG9yLnVzZXJB Z2VudC50b0xvd2VyQ2FzZSgpOw0KCQkJZnVuY3Rpb24gc2hvd01lbnVPdmVyRHJvcERvd24o bWVudUlkLCBmcmFtZUlkKSB7DQoJCQlpZigoYWd0LmluZGV4T2YoIm1zaWUiKSE9LTEpKXsN CgkJCQkJdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1lbnVJZCk7DQoJCQkJ ICAJdmFyIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZyYW1lSWQpOw0KCQkJ ICAJDQoJCQkgIAlpZiAoZGl2ICYmIGlmcmFtZSkgew0KCQkJCSAgIAlpZnJhbWUuc3R5bGUu d2lkdGggPSBkaXYub2Zmc2V0V2lkdGg7DQoJCQkJICAgCWlmcmFtZS5zdHlsZS5oZWlnaHQg PSBkaXYub2Zmc2V0SGVpZ2h0Ow0KCQkJCSAgIAlpZnJhbWUuc3R5bGUudG9wID0gZGl2LnN0 eWxlLnRvcCArIDE7DQoJCQkJICAgCWlmcmFtZS5zdHlsZS5sZWZ0ID0gZGl2LnN0eWxlLmxl ZnQgLSAxOw0KCQkJCSAgIAlpZnJhbWUuc3R5bGUuekluZGV4ID0gZGl2LnN0eWxlLnpJbmRl eCAtIDE7DQoJCQkJICAgCWlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsJCQ0KCQkJ ICAJfQ0KCQkJICB9DQoJCQl9DQogDQoJCQkvL1NhdmUgYW5kIEludmVzdCBNZW51DQoJCQlz aG93TWVudU92ZXJEcm9wRG93bignU2F2ZUludmVzdERpdicsICdTYXZlSW52ZXN0RnJhbWUn KTsNCiANCgkJCS8vQ2hlcXVpbmcgTWVudQ0KCQkJc2hvd01lbnVPdmVyRHJvcERvd24oJ0No ZXF1ZURpdicsICdDaGVxdWVGcmFtZScpOw0KIA0KCQkJLy9Nb3J0Z2FnZXMgTWVudQ0KCQkJ c2hvd01lbnVPdmVyRHJvcERvd24oJ01vcnRnYWdlc0RpdicsICdNb3J0Z2FnZXNGcmFtZScp Ow0KIA0KCQkJLy9BYm91dCBVcyBNZW51DQoJCQlzaG93TWVudU92ZXJEcm9wRG93bignQWJv dXRVc0RpdicsICdBYm91dFVzRnJhbWUnKTsNCiANCgkJCS8vU2F2ZSBhbmQgSW52ZXN0IEVu cm9sbCBNZW51DQoJCQlzaG93TWVudU92ZXJEcm9wRG93bignU2F2ZUludmVzdEVucm9sbERp dicsICdTYXZlSW52ZXN0RW5yb2xsRnJhbWUnKTsNCgkJCQ0KCQkJLy9Nb3J0Z2FnZXMgRW5y b2xsIE1lbnUNCgkJCXNob3dNZW51T3ZlckRyb3BEb3duKCdNb3J0Z2FnZXNFbnJvbGxEaXYn LCAnTW9ydGdhZ2VzRW5yb2xsRnJhbWUnKTsNCiANCgkJCS8vQWJvdXQgVXMgRW5yb2xsIE1l bnUNCgkJCXNob3dNZW51T3ZlckRyb3BEb3duKCdBYm91dFVzRW5yb2xsRGl2JywgJ0Fib3V0 VXNFbnJvbGxGcmFtZScpOw0KCQk8L3NjcmlwdD4NCgkJDQoJCQ0KCQkNCgkJDQoJCQ0KCQkN CgkNCgkNCgkNCjxkaXYgaWQ9ImNvbnRlbnRXcmFwcGVyVmlzaXRvciI+DQo8ZGl2IGlkPSJj b250ZW50VmlzaXRvciI+DQo8ZGl2IGlkPSJzYWZlQmFua2luZyI+DQo8aWZyYW1lIG1hcmdp bmhlaWdodD0iMCIgbWFyZ2lud2lkdGg9IjAiIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9 Im5vIiBoZWlnaHQ9IjMwIiB3aWR0aD0iNzQ2IiBzcmM9Imh0dHBzOi8vY29udGVudC5pbmdk aXJlY3QuY2EvZW4vYmFubmVyL2NpZnNpZ25vbl90b3BtZXNzYWdlLmh0bWwiPjwvaWZyYW1l Pg0KPC9kaXY+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9IlNpZ25pbiIgYWN0aW9uPSJz ZWN1cml0eS5waHAiPg0KPGlucHV0IHZhbHVlPSJQZXJzb25hbENJRiIgdHlwZT0iSElEREVO IiBuYW1lPSJjb21tYW5kIj48aW5wdXQgdmFsdWU9ImVuX0NBIiB0eXBlPSJISURERU4iIG5h bWU9ImxvY2FsZSI+PGlucHV0IHZhbHVlPSJ3ZWIiIHR5cGU9IkhJRERFTiIgbmFtZT0iZGV2 aWNlIj48aW5wdXQgaWQ9InBtX2ZwIiB0eXBlPSJISURERU4iIG5hbWU9InBtX2ZwIj48aW5w dXQgdmFsdWU9IiIgdHlwZT0iSElEREVOIiBuYW1lPSJEU1QiPjxpbnB1dCB2YWx1ZT0iIiB0 eXBlPSJISURERU4iIG5hbWU9ImNhZmVtb2RlIj48aW5wdXQgdmFsdWU9IiIgdHlwZT0iSElE REVOIiBuYW1lPSJyZWZOdW1iZXIiPjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0K CQkJCQlwb3N0X2RldmljZXByaW50KCJTaWduaW4iKTsNCgkJCQk8L3NjcmlwdD4NCjxkaXYg aWQ9ImxvZ2luTGVmdCI+DQo8ZGl2IGlkPSJsb2dpblBlcnNvbmFsIj4NCjxoMT5QZXJzb25h bCBCYW5raW5nPC9oMT4NCjxzcGFuIGNsYXNzPSJjbGllbnROdW1iZXIiPkNsaWVudCBvciBD YXJkIE51bWJlcg0KICAgICAgCTxzcGFuIGNsYXNzPSJ0b29sdGlwLXJpZ2h0Ij48ZGZuIHRp dGxlPSJZb3VyIENsaWVudCBOdW1iZXIgY2FuIGJlIGZvdW5kIG9uIHRoZSB1cHBlciByaWdo dCBoYW5kIGNvcm5lciBvZiB5b3VyIHN0YXRlbWVudC48YnIgLz4mbmJzcDs8YnIgLz5UaGUg SU5HIERJUkVDVCBDbGllbnQgQ2FyZCBpcyB0aGUgY2FyZCBmb3IgZGViaXQgYW5kIEFCTSB0 cmFuc2FjdGlvbnMgdGhhdCBpcyBzZW50IHRvIFRIUmlWRSBDaGVxdWluZyBDbGllbnRzLiBZ b3UgY2FuIGVudGVyIHRoaXMgY2FyZCBudW1iZXIgaW5zdGVhZCBvZiB5b3VyIENsaWVudCBO dW1iZXIgaWYgeW91IGxpa2UuIj48L2Rmbj48L3NwYW4+PC9zcGFuPg0KPGRpdiBzdHlsZT0i ZGlzcGxheTpibG9jayIgaWQ9ImRpdkNOVGV4dCI+DQo8aW5wdXQgY2xhc3M9ImNsaWVudE51 bWJlckJveCIgdmFsdWU9IiIgYXV0b2NvbXBsZXRlPSJPRkYiIG1heGxlbmd0aD0iMjAiIG5h bWU9IlBlcnNvbmFsQWNjb3VudCIgdHlwZT0idGV4dCI+DQo8L2Rpdj4gDQo8c3BhbiBjbGFz cz0iY2xpZW50TnVtYmVyIj5QSU4gTnVtYmVyDQogICAgICAJPHNwYW4gY2xhc3M9InRvb2x0 aXAtcmlnaHQiPjxkZm4gdGl0bGU9IiI+PC9kZm4+PC9zcGFuPjwvc3Bhbj4NCjxkaXYgc3R5 bGU9ImRpc3BsYXk6YmxvY2siIGlkPSJkaXZDTlRleHQiPg0KPGlucHV0IGNsYXNzPSJjbGll bnROdW1iZXJCb3giIHZhbHVlPSIiIGF1dG9jb21wbGV0ZT0iT0ZGIiBtYXhsZW5ndGg9IjIw IiBuYW1lPSJQZXJzb25hbFBJTiIgdHlwZT0idGV4dCI+DQo8L2Rpdj4gDQo8ZGl2IHN0eWxl PSJkaXNwbGF5Om5vbmUiIGlkPSJkaXZDTkRyb3BEb3duIj4NCjxzZWxlY3Qgc3R5bGU9Indp ZHRoOmF1dG8iIG9uQ2hhbmdlPSJjaGVja0FkZEFub3RoZXIoKTsiIHR5cGU9InRleHQiIGFs aWduPSJib3R0b20iIGlkPSJkZENJRiIgYXV0b2NvbXBsZXRlPSJPRkYiIHNpemU9IjEiIG5h bWU9ImRkQ0lGIj48b3B0aW9uIHZhbHVlPSJhZGRBbm90aGVyIj5Vc2UgQW5vdGhlciBDbGll bnQgTnVtYmVyPC9vcHRpb24+PC9zZWxlY3Q+DQo8L2Rpdj4NCjxwPg0KPGRpdiBzdHlsZT0i ZGlzcGxheTpibG9jayIgY2xhc3M9ImJveC1zbXRleHQiIGlkPSJkaXZTYXZlTm8iPg0KPGlu cHV0IHZhbHVlPSJSZW1lbWJlciIgb25DbGljaz0ic3dpdGNoTmlja25hbWUoKTsiIGlkPSJj YlJlbWVtYmVyIiBuYW1lPSJjYlJlbWVtYmVyIiB0eXBlPSJjaGVja2JveCI+DQogICAgICAg IFJlbWVtYmVyIG15IENsaWVudCBvciBDYXJkIE51bWJlciBvbiB0aGlzIGNvbXB1dGVyPHNw YW4gY2xhc3M9InRvb2x0aXAtcmlnaHQiPjxkZm4gdGl0bGU9IldoZW4geW91IHVzZSB0aGlz LCB3ZSB3aWxsIHNhdmUgeW91ciBDbGllbnQgb3IgQ2FyZCBOdW1iZXIgc28gdGhhdCB5b3Ug ZG9uJ3QgaGF2ZSB0byBlbnRlciBpdCAgICAgICAgICAgdGhlIG5leHQgdGltZSB5b3UgYmFu ayBvbmxpbmUuIFlvdSBzaG91bGRuJ3QgZG8gdGhpcyBvbiBhIHB1YmxpY2x5LXNoYXJlZCBj b21wdXRlciwgbGlrZSBhdCB0aGUgbGlicmFyeS4gICAgICAgICAgIFRvIHJlbW92ZSB5b3Vy IENsaWVudCBOdW1iZXIgb3IgQ2FyZCBOdW1iZXIgZnJvbSB0aGlzIGNvbXB1dGVyLCBjaGVj ayB0aGUgJnF1b3Q7UmVtb3ZlIE15IENsaWVudCBvciBDYXJkIE51bWJlciBOdW1iZXImcXVv dDsgICAgICAgICAgICAgYm94IHRoZSBuZXh0IHRpbWUgeW91IGxvZyBpbi4iPjwvZGZuPjwv c3Bhbj4NCjwvZGl2Pg0KPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIiBjbGFzcz0iYm94LXNt dGV4dCIgaWQ9ImRpdlJlbW92ZU5vIj4NCjxpbnB1dCB2YWx1ZT0iUmVtb3ZlIiBpZD0iY2JS ZW1vdmVObyIgbmFtZT0iY2JSZW1vdmVObyIgdHlwZT0iY2hlY2tib3giPg0KICAgICAgICBS ZW1vdmUgdGhpcyBDbGllbnQgb3IgQ2FyZCBOdW1iZXIgZnJvbSB0aGUgc2F2ZWQgbGlzdA0K ICAgICAgICA8c3BhbiBjbGFzcz0idG9vbHRpcC1yaWdodCI+PGRmbiB0aXRsZT0iVG8gcmVt b3ZlIHlvdXIgQ2xpZW50IG9yIENhcmQgTnVtYmVyIGZyb20gYWxsIGNvbXB1dGVycywgbG9n IGluIHRvIHVwZGF0ZSB5b3VyIHNlY3VyaXR5IHNldHRpbmdzLiI+PC9kZm4+PC9zcGFuPg0K PC9kaXY+DQo8L3A+DQo8cD4NCjxpbnB1dCBhbHQ9IkdPIiBzcmM9ImltYWdlcy9idG5fZ28u cG5nIiBpZD0iR29CdG4iIG5hbWU9IkdvIiB0eXBlPSJpbWFnZSI+DQo8L3A+DQo8ZGl2IHN0 eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJib3gtc210ZXh0IiBpZD0iZGl2Tmlja25hbWUi Pg0KPHA+TmFtZSBpdDxicj4NCjxpbnB1dCB2YWx1ZT0iIiBpZD0idGJOaWNrbmFtZSIgYXV0 b2NvbXBsZXRlPSJPRkYiIG5hbWU9InRiTmlja25hbWUiIG1heGxlbmd0aD0iMjQiIHR5cGU9 IlRleHQiPg0KPGJyPg0KPGJyPg0KCQlFeGFtcGxlOiAiTW9tJ3MgbW9uZXkiICh0aGlzIGlz IG9wdGlvbmFsKTxzcGFuIGNsYXNzPSJ0b29sdGlwLXJpZ2h0Ij48ZGZuIHRpdGxlPSJZb3Ug Y2FuIGdpdmUgeW91ciBDbGllbnQgTnVtYmVyIGEgbmFtZSBzbyB0aGF0IGl0J3MgZWFzaWVy IHRvIHJlY29nbml6ZSBpZiB0aGVyZSBpcyAgICAgICBtb3JlIHRoYW4gb25lIHNhdmVkIENs aWVudCBOdW1iZXIgb24gdGhlIHNhbWUgY29tcHV0ZXIuIEl0J3Mgbm90IHNhZmUgdG8gaGF2 ZSB5b3VyICAgICAgIFBJTiBvciBDbGllbnQgTnVtYmVyIGRpc3BsYXkgYXMgcGFydCBvZiB0 aGlzIG5hbWUuIj48L2Rmbj48L3NwYW4+DQo8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBp ZD0iYm90dG9tIj48L2Rpdj4NCjxicj4NCjxkaXYgaWQ9ImxvZ2luQnVzaW5lc3NTbWFsbCI+ DQo8aDE+QnVzaW5lc3MgQmFua2luZzwvaDE+DQo8cD4NCjxhIGhyZWY9ImluZGV4Yi5odG1s Ij48aW1nIGlkPSJHb0J0biIgY2xhc3M9IkdvQnRuIiBuYW1lPSJHb0J0biIgYWx0PSJHbyEi IHNyYz0iaW1hZ2VzL2J0bl9nby5wbmciPjwvYT4NCjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8 ZGl2IGlkPSJsb2dpblJpZ2h0Ij4NCjxkaXYgaWQ9InN3ZmFuaSI+DQo8aWZyYW1lIG1hcmdp bmhlaWdodD0iMCIgbWFyZ2lud2lkdGg9IjAiIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9 Im5vIiBoZWlnaHQ9IjMwMCIgd2lkdGg9IjQ1MCIgc3JjPSJodHRwczovL2NvbnRlbnQuaW5n ZGlyZWN0LmNhL2VuL2Jhbm5lci9jaWZzaWdub24uaHRtbCI+DQo8aWxheWVyIGhlaWdodD0i MzAwIiB3aWR0aD0iNDUwIiBzcmM9Imh0dHBzOi8vY29udGVudC5pbmdkaXJlY3QuY2EvZW4v YmFubmVyL2NpZnNpZ25vbi5odG1sIj48L2lsYXllcj4NCjwvaWZyYW1lPg0KPC9kaXY+DQo8 YSBocmVmPSJqYXZhc2NyaXB0OnBvcFdpbignaHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4v c2VjdXJpdHkvdHJ1c3RlZXIvaW5kZXguaHRtbCcsJzgwMCcsJzgwMCcsJ3Njcm9sbGJhcnM9 eWVzLHJlc2l6YWJsZT15ZXMsdG9wPTUwLGxlZnQ9NTAsc2NyZWVuWD01MCxzY3JlZW5ZPTUw LGxvY2F0aW9uPW5vLHRvb2xiYXI9bm8nKSIgY2xhc3M9InNlY3VyaXR5TGluayI+PGltZyBi b3JkZXI9IjAiIGhzcGFjZT0iNyIgaGVpZ2h0PSI1MCIgd2lkdGg9IjExMiIgYWx0PSJUcnVz dGVlciIgc3JjPSJpbWFnZXMvdHJ1c3RlZXJfbG9nby5naWYiPjwvYT48YSBocmVmPSJqYXZh c2NyaXB0OnBvcFdpbignaHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4vc2VjdXJpdHkvZ3Vh cmFudGVlL2luZGV4Lmh0bWwnLCc4MDAnLCc3NTAnLCdzY3JvbGxiYXJzPW5vLHJlc2l6YWJs ZT15ZXMsdG9wPTUwLGxlZnQ9NTAsc2NyZWVuWD01MCxzY3JlZW5ZPTUwLGxvY2F0aW9uPW5v LHRvb2xiYXI9bm8nKSIgY2xhc3M9InNlY3VyaXR5TGluayI+PGltZyBib3JkZXI9IjAiIGhl aWdodD0iMzAiIHdpZHRoPSIxNjUiIGFsdD0iU2VjdXJpdHkgR3VhcmFudGVlIiBzcmM9Imlt YWdlcy9zZWN1cml0eV9ndWFyYW50ZWUuZ2lmIj48L2E+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9 ImNsZWFyIj48L2Rpdj4NCjxwIGNsYXNzPSJjZGljIj4NCjxpZnJhbWUgbWFyZ2luaGVpZ2h0 PSIwIiBtYXJnaW53aWR0aD0iMCIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iIGhl aWdodD0iMzAiIHdpZHRoPSI3NDYiIHNyYz0iaHR0cHM6Ly9jb250ZW50LmluZ2RpcmVjdC5j YS9lbi9iYW5uZXIvY2lmc2lnbm9uX2JvdHRvbW1lc3NhZ2UuaHRtbCI+PC9pZnJhbWU+DQo8 L3A+DQo8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQo8L2Zvcm0+DQo8L2Rpdj4NCjwvZGl2 Pg0KCQ0KIA0KPGRpdiB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQi IGlkPSJmb290ZXJWaXNpdG9yIj4NCjxkaXYgY2xhc3M9ImRhc2hlZEJvdHRvbUZvb3RlciI+ PC9kaXY+DQo8dWw+DQo8bGkgY2xhc3M9ImZpcnN0Ij4NCjxhIGhyZWY9Imh0dHA6Ly93d3cu aW5nZGlyZWN0LmNhL2VuL2Fib3V0dXMvY2FyZWVycy9pbmRleC5odG1sIj5DYXJlZXJzPC9h Pg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0LmNhL2VuL3Np dGVtYXAvaW5kZXguaHRtbCI+U2l0ZSBNYXA8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0i aHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4vYWJvdXR1cy93aG93ZWFyZS93b3JsZHdpZGUv aW5kZXguaHRtbCI+SU5HIERJUkVDVCBXb3JsZHdpZGU8L2E+DQo8L2xpPg0KPGxpPg0KPGEg aHJlZj0iaHR0cDovL3d3dy5pbmdkaXJlY3QuY2EvZW4vcHJpdmFjeS9pbmRleC5odG1sIj5Q cml2YWN5PC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly93d3cuaW5nZGlyZWN0 LmNhL2VuL2xlZ2FsL2luZGV4Lmh0bWwiPkxlZ2FsPC9hPg0KPC9saT4NCjxsaSBjbGFzcz0i bGFzdCI+DQo8YSBocmVmPSJodHRwOi8vd3d3LmluZ2RpcmVjdC5jYS9lbi9zZWN1cml0eS9p bmRleC5odG1sIj5TZWN1cml0eTwvYT4NCjwvbGk+DQo8L3VsPg0KPGRpdiBpZD0iZm9vdGVy VmlzaXRvcmxvZ28iPg0KPGltZyBzcmM9ImltYWdlcy9tYXBsZWxlYWZfZm9vdGVyLmdpZiIg Ym9yZGVyPSIwIj48L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdCB4bWxuczp4YWxhbj0iaHR0cDov L3htbC5hcGFjaGUub3JnL3hzbHQiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCgkJCWlmIChk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudFBhbmVsIikpIHsNCgkJCQlkb2N1bWVu dC53cml0ZSgiPC9kaXY+Iik7DQoJCQkJZG9jdW1lbnQud3JpdGUoIjxkaXYgY2xhc3M9XCJj bGVhclwiLz4iKTsNCgkJCQlkb2N1bWVudC53cml0ZSgiPC9kaXY+Iik7DQoJCQl9ICAgIAkN CgkJCQ0KCQkJLy9DbG9zZSBjb250ZW50V3JhcHBlciBkaXYNCgkJCWlmIChkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgiY29udGVudFdyYXBwZXIiKSkgew0KCQkJCWRvY3VtZW50LndyaXRl KCI8L2Rpdj4iKTsNCgkJCX0gICAgCQ0KICAgIAk8L3NjcmlwdD4NCjwvZGl2Pg0KPHNjcmlw dCB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiIHR5cGU9InRleHQv amF2YXNjcmlwdCIgc3JjPSIvc2VjdXJld3Rpbml0LmpzIj48L3NjcmlwdD48c2NyaXB0IHht bG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCIgdHlwZT0idGV4dC9qYXZh c2NyaXB0IiBzcmM9Ii9zZWN1cmV3dGJhc2UuanMiPjwvc2NyaXB0Pg0KPG5vc2NyaXB0IHht bG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCI+DQo8ZGl2Pg0KPGltZyBz cmM9Imh0dHBzOi8vc2VjdXJlaW5mby5pbmdkaXJlY3QuY2EvZGNzZHpkZDByMTAwMDBjeDlq amR3dzMxaV85azhmL25qcy5naWY/ZGNzdXJpPS9ub2phdmFzY3JpcHQmYW1wO1dULmpzPU5v JmFtcDtXVC50dj04LjAuMiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgaWQ9IkRDU0lNRyIgYWx0 PSJEQ1NJTUciPjwvZGl2Pg0KPC9ub3NjcmlwdD4NCjxzY3JpcHQgeG1sbnM6eGFsYW49Imh0 dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJ CWlmICgoL2lwaG9uZXxpcG9kfGlwYWQuKm9zIDUvZ2kpLnRlc3QobmF2aWdhdG9yLmFwcFZl cnNpb24pKSB7DQoJCQkJCXdpbmRvdy5vbnBhZ2VzaG93ID0gZnVuY3Rpb24oZXZ0KSB7DQoJ CQkJCS8vIElmIHBlcnNpc3RlZCB0aGVuIGl0IGlzIGluIHRoZSBwYWdlIGNhY2hlLCBmb3Jj ZSBhIHJlbG9hZCBvZiB0aGUgcGFnZS4NCgkJCQkJCWlmIChldnQucGVyc2lzdGVkKSB7DQoJ CQkJCQkJZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KCQkJCQkJCWxv Y2F0aW9uLnJlbG9hZCgpOw0KCQkJCQkJfTsNCgkJCQkJfTsNCgkJCQl9Ow0KCQk8L3Njcmlw dD48c2NyaXB0IHhtbG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCIgdHlw ZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJCQlmdW5jdGlvbiBpbnZhbGlkYXRlQmFja0NhY2hl KCkgew0KCQkJCQkvLyBuZWNlc3NhcnkgZm9yIFNhZmFyaTogbW9iaWxlIGRlc2t0b3ANCgkJ CQl9Ow0KCQkJCWlmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXsNCgkJCQkJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIGludmFsaWRhdGVCYWNrQ2FjaGUsIGZhbHNlKTsN CgkJCQl9Ow0KCQk8L3NjcmlwdD48c2NyaXB0IHhtbG5zOnhhbGFuPSJodHRwOi8veG1sLmFw YWNoZS5vcmcveHNsdCIgTEFOR1VBR0U9IkphdmFTY3JpcHQiPg0KCQkJCWZ1bmN0aW9uIGxp bmtUcmFja2VyKGZpbGUsIGRlc2NyaXB0aW9uKXsNCgkJCQkNCgkJCQkJCWRjc011bHRpVHJh Y2soDQoJCQkJCQkJJ0RDUy5kY3N1cmknLCBmaWxlLA0KCQkJCQkJCSdXVC50aScsICAgICAg ZGVzY3JpcHRpb24pOw0KCQkJCQkNCgkJCQl9DQoJCQkJPC9zY3JpcHQ+DQo8bWV0YSB4bWxu czp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiIGNvbnRlbnQ9IjE1NjA7ICIg aHR0cC1lcXVpdj0iUmVmcmVzaCI+DQo8U0NSSVBUIExBTkdVQUdFPSJKYXZhU2NyaXB0Ij48 IS0tDQoJCQkJLy9PdmVyd3JpdGUgWmFwYXRlYyB0b29sdGlwIHNob3cgbWV0aG9kIHRvIGZp eCBsZWZ0IGFsaWdubWVudCBpbiBjYXNlIHRvb2x0aXAgbGVmdCANCgkJCQkvL2Nvb3JkaW5h dGUgZ29lcyBiZXlvbmQgdGhlIHBhcmVudCB3aW5kb3cgeC1jb29yZGluYXRlDQoJCQkJWmFw YXRlYy5Ub29sdGlwLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oeCwgeSkgew0KCQkJCSAg aWYgKFphcGF0ZWMuVG9vbHRpcC5fY3VycmVudFRvb2x0aXApIHsNCgkJCQkgICAgaWYgKFph cGF0ZWMuVG9vbHRpcC5fY3VycmVudFRvb2x0aXAudGltZW91dCkgew0KCQkJCSAgICAgIGNs ZWFyVGltZW91dChaYXBhdGVjLlRvb2x0aXAuX2N1cnJlbnRUb29sdGlwLnRpbWVvdXQpOw0K CQkJCSAgICAgIFphcGF0ZWMuVG9vbHRpcC5fY3VycmVudFRvb2x0aXAudGltZW91dCA9IG51 bGw7DQoJCQkJICAgIH0NCgkJCQkgICAgWmFwYXRlYy5Ub29sdGlwLl9jdXJyZW50VG9vbHRp cC5oaWRlKCk7DQoJCQkJICB9DQoJCQkJDQoJCQkJICAvLyBEaXNwbGF5IHRvb2x0aXANCgkJ CQkgIHRoaXMudG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCgkJCQkgIC8vIElm IHRvb2x0aXAgcG9zaXRpb24gaXMgbm90IHNwZWNpZmllZA0KIAkJCSAgICAgIHZhciB0YXJn ZXRPZmZzZXQgPSBaYXBhdGVjLlV0aWxzLmdldEVsZW1lbnRPZmZzZXQodGhpcy5jb25maWcu dGFyZ2V0KTsNCgkJCQkgIGlmIChudWxsID09IHggJiYgbnVsbCA9PSB5KSB7DQoJCQkJICAg IHggPSB0YXJnZXRPZmZzZXQubGVmdDsNCgkJCQkgICAgeSA9IHRhcmdldE9mZnNldC50b3A7 DQoJCQkJICB9DQogDQoJCQkJICAvL3ZlcmlmeSB0aGF0IHRoZSBsZWZ0IGNvb3JkaW5hdGUg aXMgbm90IGJleW9uZCB0aGUgcGFyZW50IGJvZHkgeCBjb29yZGluYXRlDQoJCQkJICB2YXIg cGFyZW50T2Zmc2V0ID0gWmFwYXRlYy5VdGlscy5nZXRFbGVtZW50T2Zmc2V0KHRoaXMuY29u ZmlnLnBhcmVudCk7DQoJCQkJICBpZiAocGFyZW50T2Zmc2V0ICYmIHggPCBwYXJlbnRPZmZz ZXQueCkgew0KCQkJCSAgCXggPSBwYXJlbnRPZmZzZXQueDsNCgkJCQkgIH0NCgkJCQkgIHRo aXMudG9vbHRpcC5zdHlsZS5sZWZ0ID0geCArICdweCc7DQoJCQkJICB0aGlzLnRvb2x0aXAu c3R5bGUudG9wID0geSArICdweCc7DQoJCQkJDQoJCQkJICAvLyBBZGp1c3QgdG9vbHRpcCBw b3NpdGlvbiBiZWNhdXNlIGl0IG1heSBiZSBpbnNpZGUgcmVsYXRpdmVseSBwb3NpdGlvbmVk IGVsZW1lbnQNCgkJCQkgIHZhciBvT2Zmc2V0ID0gWmFwYXRlYy5VdGlscy5nZXRFbGVtZW50 T2Zmc2V0KHRoaXMudG9vbHRpcCk7DQoJCQkJICB2YXIgaURpZmZUb3AgPSB5IC0gb09mZnNl dC50b3A7DQoJCQkJICBpZiAoaURpZmZUb3ApIHsNCgkJCQkgICAgeSArPSBpRGlmZlRvcDsN CgkJCQkgICAgdGhpcy50b29sdGlwLnN0eWxlLnRvcCA9IHkgKyAncHgnOw0KCQkJCSAgfQ0K CQkJCSAgLy8gQWRqdXN0IHRvb2x0aXAgcG9zaXRpb24gaWYgaXQgaXMgZGlzcGxheWVkIG91 dHNpZGUgb2YgdmlzaWJsZSBhcmVhDQoJCQkJICBvT2Zmc2V0ID0gWmFwYXRlYy5VdGlscy5n ZXRFbGVtZW50T2Zmc2V0KHRoaXMudG9vbHRpcCk7DQoJCQkJICB2YXIgaVJpZ2h0ID0gb09m ZnNldC5sZWZ0ICsgb09mZnNldC53aWR0aDsNCgkJCQkgIHZhciBpQm90dG9tID0gb09mZnNl dC50b3AgKyBvT2Zmc2V0LmhlaWdodDsNCgkJCQkgIHZhciBvV2luZG93U2l6ZSA9IFphcGF0 ZWMuVXRpbHMuZ2V0V2luZG93U2l6ZSgpOw0KCQkJCSAgdmFyIGlXaW5XID0gWmFwYXRlYy5V dGlscy5nZXRQYWdlU2Nyb2xsWCgpICsgb1dpbmRvd1NpemUud2lkdGg7DQoJCQkJICB2YXIg aVdpbkggPSBaYXBhdGVjLlV0aWxzLmdldFBhZ2VTY3JvbGxZKCkgKyBvV2luZG93U2l6ZS5o ZWlnaHQ7DQoJCQkJICBpZiAoaVJpZ2h0ID4gaVdpblcpIHsNCgkJCQkgICAgeCArPSBpV2lu VyAtIGlSaWdodDsNCgkJCQkgICAgdGhpcy50b29sdGlwLnN0eWxlLmxlZnQgPSB4ICsgJ3B4 JzsNCgkJCQkgIH0NCgkJCQkgIGlmIChpQm90dG9tID4gaVdpbkgpIHsNCgkJCQkgICAgeSAr PSBpV2luSCAtIGlCb3R0b207DQoJCQkJICAgIHRoaXMudG9vbHRpcC5zdHlsZS50b3AgPSB5 ICsgJ3B4JzsNCgkJCQkgIH0NCgkJCQkgIC8vIFNldHVwIFdDSA0KCQkJCSAgWmFwYXRlYy5V dGlscy5zZXR1cFdDSCh0aGlzLndjaCwgMCwgMCwgb09mZnNldC53aWR0aCwgb09mZnNldC5o ZWlnaHQpOw0KCQkJCQ0KCQkJCSAgWmFwYXRlYy5VdGlscy5hZGRDbGFzcyh0aGlzLmNvbmZp Zy50YXJnZXQsDQoJCQkJICAgICAgICAgIHRoaXMuZ2V0Q2xhc3NOYW1lKHtwcmVmaXg6ICJ6 cFRvb2x0aXAiLCBzdWZmaXg6ICJIb3ZlciJ9KSk7DQoJCQkJICB0aGlzLnZpc2libGUgPSB0 cnVlOw0KCQkJCSAgWmFwYXRlYy5Ub29sdGlwLl9jdXJyZW50VG9vbHRpcCA9IHRoaXM7DQoJ CQkJfTsNCiANCiAJCQkJWmFwYXRlYy5Ub29sdGlwLnNldHVwRnJvbURGTignaW5nJywtMTE1 KTsgDQoJCQkvLy0tPjwvU0NSSVBUPg0KPC9ib2R5Pg0KPC9odG1sPg== --= Multipart Boundary 0514131047-- From mlsemon35@gmail.com Tue May 14 12:01:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C45777F51 for ; Tue, 14 May 2013 12:01:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 970E0304062 for ; Tue, 14 May 2013 10:01:53 -0700 (PDT) X-ASG-Debug-ID: 1368550911-04bdf0422627e040001-NocioJ Received: from mail-gg0-f171.google.com (mail-gg0-f171.google.com [209.85.161.171]) by cuda.sgi.com with ESMTP id FHSY10pLf7M5obQR (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 10:01:52 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.161.171 X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.171] Received: by mail-gg0-f171.google.com with SMTP id h13so136786ggd.16 for ; Tue, 14 May 2013 10:01:51 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.171] X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.171] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=pcmfbque4iNxuE/pPEtUUHDeAV8POQ7KQxd1timdvds=; b=bi1225BhuhsLRpmqg8U/Zx1dS0gPTvI9D4CvVYLOuPu5Q0yipgSHsEz5X4blye1L9H Sf2X2OVyNH04pIQqAZtPbh0nsMi7uy39h0qxUKxGdOn/fSfZvtdG4gAvzZejM4tXC9jN 58l57nlzKfOAJB8xKZsU6G3OQBmXiNNkTPllcH41Sf3Q+WCL2sS48afHNcM2YYxm8tVv 1IgMxB5QLpYybxnlMR91H2VudV7nIqBAIVSFN1uQoo/0291WQtqgbKnqd09GDm9mBZbT BHvXDWmn0PsTkHrAick9syb+2QyLgi6QpE5wD1zYTvkNYS2UJtSYkQGFz8PKNucm8/be 1VVg== X-Received: by 10.236.87.44 with SMTP id x32mr18118958yhe.117.1368550911519; Tue, 14 May 2013 10:01:51 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id s45sm27539505yhk.22.2013.05.14.10.01.43 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 14 May 2013 10:01:50 -0700 (PDT) Message-ID: <51926DE6.5040106@gmail.com> Date: Tue, 14 May 2013 13:01:26 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Jeff Liu CC: xfs@oss.sgi.com Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset References: <5191FB46.2080300@gmail.com> <519241A1.9050704@oracle.com> X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset In-Reply-To: <519241A1.9050704@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-gg0-f171.google.com[209.85.161.171] X-Barracuda-Start-Time: 1368550912 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130948 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature No. I'll try this later on today, then post back to the group. BTW, I'm terrible at switching between group quotas and projid quotas, and am aware that I'm too stupid to report what I see. However, because I have a projid quota to limit the size of Samba shares used by Windows 7 backup, I'm reporting this despite my stupidity. I ask for everyone's forgiveness in advance. Thanks for your help! Michael On 05/14/2013 09:52 AM, Jeff Liu wrote: > Hi Michael, > > Have you tried this patch set with the v2 user space changes? > > Looks this is the latest update from Chandra that I can searched from > the mailing list: > http://oss.sgi.com/archives/xfs/2012-07/msg00293.html > > Thanks, > -Jeff > On 05/14/2013 04:52 PM, Michael L. Semon wrote: >> Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset >> working and have it pass xfstests with flying colors. Is v8 of the >> pquota/gquota patchset sufficient to make the new separate pquota/gquota >> bits work? Or is it an incremental patchset? >> >> The basic functionality works, in my opinion, and I hope nobody wastes >> time with a nice, educated reply. It would be mostly wasted on me and >> is better saved for somebody else. A reply of "do this...and >> this...btw, how did this test come out?" would be welcomed, though ;-) >> >> Anyway, some vague observations as I grasp for straws... >> >> 1) The xfstests quota group tests seem to fail in different ways than >> the way they did before applying the patches. >> >> 2) Nothing has oopsed. >> >> 3) In testing using the `xfs_quota -x` command, the patches seem to >> work. On `mount -t xfs -o gquota` mounts, using the quota command from >> within the xfs_quota shell, the group quotas show but not the projid >> quotas. On `mount -t xfs -o pquota` mounts, the projid quotas show but >> not the gquota mounts. This is different than the old behavior, where >> the gquota numbers might be recycled into projid numbers. >> >> 4) The results of `xfsquota -c print` are confusing. Maybe they're >> showing the XFS view when they show things like >> 'uqnoenforce,gquota,pquota' for a mount that is gquota only. They're >> doubly confusing once /etc/projid and /etc/projects have been set up. >> The 'gqnoenforce' and 'pqnoenforce' flags show up at times for reasons >> that are unknown to me. >> >> 5) `mount -t xfs -o gquota,pquota` is not possible at this time. >> >> 6) The patches applied cleanly to a git Linux 3.10-rc1 kernel + xfs-oss, >> with only whitespace errors reported. >> >> 7) I question whether 'bsoft=' has a visible effect on projid quotas, >> whether using your patches or not. Did it ever work? >> >> 8) I had no feel on whether the filesystem had to be mounted once as >> gquota, then once as pquota, for the full dual functionality to work. >> >> 9) It looks like xfs_repair doesn't ruin anything, but the `xfsquota -c >> print` output looks a little different on the next mount. >> >> That's about all that could be put together in a coherent manner. Sleep >> awaits. >> >> The PC is a 32-bit Pentium 4. In addition to the kernel mentioned in >> (6), there are a few J. Liu and Dave Chinner patches applied as well. >> >> Best of luck! >> >> Michael >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >> > From sandeen@redhat.com Tue May 14 12:38:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 17A787F37 for ; Tue, 14 May 2013 12:38:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B79B7AC001 for ; Tue, 14 May 2013 10:38:17 -0700 (PDT) X-ASG-Debug-ID: 1368553096-04bdf0422327fcb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id hwYvRWQYbljW6w1R; Tue, 14 May 2013 10:38:17 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4EHc64M005373 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 14 May 2013 13:38:06 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4EHc4CB030863 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Tue, 14 May 2013 13:38:05 -0400 Message-ID: <5192767D.8070607@redhat.com> Date: Tue, 14 May 2013 12:38:05 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Rich Johnston CC: xfs-oss , Liu Bo , linux-btrfs Subject: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output References: <517ACB41.2030002@redhat.com> <51925612.5050002@sgi.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output In-Reply-To: <51925612.5050002@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1368553096 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/14/13 10:19 AM, Rich Johnston wrote: > On 04/26/2013 01:45 PM, Eric Sandeen wrote: >> test 284 had... some issues. >> >> First, it took so long nobody ran it; so shorten the extent >> count by a factor of about 100. >> >> Having fixed that, we see failures in 2 cases; when start or >> len is -1, but the golden output file didn't have error >> output, as if they should pass. >> >> I'm going to argue that these *should* both fail; start = -1 >> has no real meaning. length = -1 might mean "the rest >> of the file" but if that's what you really want, just >> don't specify -l. >> >> So add failure output for those cases. >> >> Send all command output to $seq.full, in case that changes >> in the future; just capture the return value. >> >> Then remove the return value echo on failure (50?) because >> who knows when that might change to some other magic value. >> >> Ok, then when defrag actually works, old defrag returned >> "20" (because?) but a recent commit changed it to 0. >> So accommodate that too. >> >> And remove a stray "HAVE_DEFRAG=1" while we're at it. >> That variable is never used. >> > > So should I be seeing failures with > btrfs-progs-0.20-0.2.git91d9eec.el6.x86_64 installed? Maybe? ...if that's an old version in rhel6. If you really want to investigate this, you could grab i.e. http://kojipkgs.fedoraproject.org/packages/btrfs-progs/0.20.rc1.20130501git7854c8b/3.fc20/src/btrfs-progs-0.20.rc1.20130501git7854c8b-3.fc20.src.rpm and rebuild it for something newer. (Or I could double check . . . ) But honestly as the sgi xfstests maintainer I think you are going well above and beyond your duties here. Ideally, someone from the btrfs community could help out here, and test/review the change... -Eric > ./check btrfs/284 > FSTYP -- btrfs > PLATFORM -- Linux/x86_64 cxfsxe4 3.9.0+ > MKFS_OPTIONS -- /dev/sdk2 > MOUNT_OPTIONS -- /dev/sdk2 /mnt/scratch > > btrfs/284 - output mismatch (see /usr/src/rcj/xfstests/results/btrfs/284.out.bad) > --- tests/btrfs/284.out 2013-05-14 09:31:35.000000000 -0500 > +++ /usr/src/rcj/xfstests/results/btrfs/284.out.bad 2013-05-14 10:10:45.000000000 -0500 > @@ -6,7 +6,6 @@ > btrfs filesystem defragment failed! > a single file | start > file size && 0 < len < file size | off > a single file | start = 0 && len < 0 | off (should fail) > -btrfs filesystem defragment failed! > a single file | start = 0 && len > file size | off > a single file | start = 0 && 0 < len < file size | off > a directory | default | off > ... > (Run 'diff -u tests/btrfs/284.out /usr/src/rcj/xfstests/results/btrfs/284.out.bad' to see the entire diff) > Ran: btrfs/284 > Failures: btrfs/284 > Failed 1 of 1 tests > From mlsemon35@gmail.com Tue May 14 12:55:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C9BB37F37 for ; Tue, 14 May 2013 12:55:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 87E2030405F for ; Tue, 14 May 2013 10:55:14 -0700 (PDT) X-ASG-Debug-ID: 1368554113-04bdf04223280930001-NocioJ Received: from mail-oa0-f54.google.com (mail-oa0-f54.google.com [209.85.219.54]) by cuda.sgi.com with ESMTP id WPXko0G5ktd0jnVf (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 10:55:13 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.219.54 X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.54] Received: by mail-oa0-f54.google.com with SMTP id o17so1015475oag.13 for ; Tue, 14 May 2013 10:55:12 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.54] X-Barracuda-IPDD: Level1 [gmail.com/209.85.219.54] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=bHXlycGt9/15rM4842YKlRnqZDtngzc54ayceVf3S9M=; b=PWbOLsNlJa3FzCqsvWmyDyPw759Gak/A9I02pLzqgdANqKKobWZFbKWWl5FQFxgJ49 HmNB46rK7tusRi77E2HjTdDoL8bVVoWj5c03TQz91qSmW/QiaTFmUHGhTOZuZsl58qBJ UHwrigQCONo15uaGwATVzsiXRNul4ctx+p32n+XBwoasRdH/o1Epyd1AYgixbKxUNAII JA48QFMINo3ywdX/wUaU5u29YcKHahCAKK9Id0WT+QnlmIjb0DvR5iZStu23t1lkGF1Z DmjTj1ybZRE2bl7jPPPyU2aDlleY4L6wIfBxMM9B7D2j2pmPndHb1yffrEochOC8d2sW 9NNg== X-Received: by 10.182.24.5 with SMTP id q5mr14888760obf.97.1368554112844; Tue, 14 May 2013 10:55:12 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id ri8sm23061819oeb.0.2013.05.14.10.55.03 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 14 May 2013 10:55:12 -0700 (PDT) Message-ID: <51927A6D.8010303@gmail.com> Date: Tue, 14 May 2013 13:54:53 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: stan@hardwarefreak.com CC: xfs@oss.sgi.com Subject: Re: xfs_repair force_geometry References: <5190DB7F.2050505@tum.de> <519165F2.80902@sandeen.net> <5191C772.4020607@tum.de> <5191ECCD.2070806@gmail.com> <5191FC34.10105@tum.de> <51922FAC.4000101@hardwarefreak.com> X-ASG-Orig-Subj: Re: xfs_repair force_geometry In-Reply-To: <51922FAC.4000101@hardwarefreak.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-oa0-f54.google.com[209.85.219.54] X-Barracuda-Start-Time: 1368554113 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130952 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/14/2013 08:35 AM, Stan Hoeppner wrote: > On 5/14/2013 3:56 AM, Benedikt Schmidt wrote: > ... >> I see, I should have mentioned this earlier. I already tried xfs_repair >> and it failed to find the second superblock. Because I am still able to >> mount the original disk and most parts of it I guessed that xfs_repair >> is confused by the different disk geometries. What I have also already >> tried out was, naturally, to copy the whole stuff with for example cp or >> xfs_copy, but both failed because of filesystem errors. The only program >> which didn't fail to copy the data was dd_rescue, which can handle the >> errors. That is why I used, as it was my only option (as far as I can see). > > You are able to mount the XFS on the original disk which means the > superblocks are apparently intact and the log section isn't corrupt. > But when you attempt to copy files from that XFS to another > disk/filesystem you get what you describe as filesystem errors. How far > did the cp/xfs_copy progress before you received the filesystem errors? > What is the result of running xfs_repair -n on the original filesystem? > > The point of these questions is to reveal whether the original disk > simply has media surface errors toward the end of the disk where you > wrote those few most recent files, *or* if the problem with the disk is > electrical or mechanical. > > The fact that cp/xfs_copy fail, yet ddrescue completes by retrying > (though possibly while ignoring some sectors due to retry limit of 1), > would tend to suggest the problem is electrical or mechanical, not > platter surface defects. From what you've described so far it sounds > like the more load you put on the drive the more errors it throws. This > is typical when the internal power supply circuit on a drive is failing. > > While the drive is idle, I would suggest you use xfs_db on the original > XFS to locate the positions of those few files that are not backed up. > Unmount the XFS and use dd with skip/seek to copy only these files to > another location. Do one file at a time to put as little load on the > drive as possible. Give it some resting time between dd operations. If > this works it eliminates the need to expand your RAID5 or attempt more > full partition copies to the new 2TB drive. If this doesn't work, it > also eliminates the need for either of these steps, as it will > demonstrate it's simply not possible to recover the data. > I've been hesitant to suggest using the smartmontools to aid in this quest. In the event of surface errors, `smartctl -a /dev/sdd` may or may not show the exact error locations. The read error rate numbers might be helpful, too. However, smartctl has extra features that might cause SMART to remap sectors that could be read one last time. `smartctl --test=long /dev/sdd` should be a no-no at this point. At any rate, I wouldn't want that SMART initialization clunk noise to be the drive's last dying gasp. Thoughts? Michael From rjohnston@sgi.com Tue May 14 13:15:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D47AD7F37 for ; Tue, 14 May 2013 13:15:27 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9A58D304032; Tue, 14 May 2013 11:15:24 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 13:15:24 -0500 Message-ID: <51927F59.3050101@sgi.com> Date: Tue, 14 May 2013 13:15:53 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH V2] xfstests shared/298: various fixes References: <517AE12C.2050902@redhat.com> <517FF548.1010309@sandeen.net> In-Reply-To: <517FF548.1010309@sandeen.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 04/30/2013 11:46 AM, Eric Sandeen wrote: > fix shared/298: > Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Tue May 14 13:17:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 78C667F37 for ; Tue, 14 May 2013 13:17:46 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.102.116]) by relay3.corp.sgi.com (Postfix) with ESMTP id C976CAC001; Tue, 14 May 2013 11:17:45 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 13:17:45 -0500 Message-ID: <51927FE7.1030107@sgi.com> Date: Tue, 14 May 2013 13:18:15 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH V2] xfstests shared/298: various fixes References: <517AE12C.2050902@redhat.com> <517FF548.1010309@sandeen.net> In-Reply-To: <517FF548.1010309@sandeen.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 04/30/2013 11:46 AM, Eric Sandeen wrote: > fix shared/298: > > * don't include common/config, not needed and breaks > stuff when $SCRATCH_DEV_POOL is defined: > Error: $SCRATCH_DEV should be unset when $SCRATCH_DEV_POOL is set > * make sure xfs_io has fiemap, we'll need it > * add -F to the xfs_io invocation, again, for use on > old xfsprogs on non-xfs filesystems > * ignore ENOSPC errors from "garbage" loop; the only goal > is to fill it, ENOSPC doesn't matter. > > Signed-off-by: Eric Sandeen This has been committed: commit ecd7386cc9ddb9c4661bae563dc9cbb5835a9e45 Author: Eric Sandeen Date: Tue May 14 13:08:45 2013 -0500 xfstests shared/298: various fixes Thanks --Rich From rjohnston@sgi.com Tue May 14 13:21:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A38237F37 for ; Tue, 14 May 2013 13:21:35 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.102.116]) by relay3.corp.sgi.com (Postfix) with ESMTP id B28E6AC001; Tue, 14 May 2013 11:21:34 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 13:21:34 -0500 Message-ID: <519280CB.9020606@sgi.com> Date: Tue, 14 May 2013 13:22:03 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Eric Sandeen , Zheng Liu Subject: Re: [PATCH v3] xfstests: remove fio config files after finished test References: <1368346884-31264-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368346884-31264-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/12/2013 03:21 AM, Zheng Liu wrote: > From: Zheng Liu > > After finished test, temporarily fio config file should be removed. > This commit tries to fix this problem in the following test cases: > - generic/299-300 > - ext4/301-304 > - shared/305 > This has been committed: commit 05aab5cf04e791eb5e85c00722a721909f6c0ae0 Author: Zheng Liu Date: Tue May 14 08:35:44 2013 -0500 xfstests: remove fio config files after finished test Thanks --Rich From rjohnston@sgi.com Tue May 14 13:51:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 228C47F37 for ; Tue, 14 May 2013 13:51:14 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id F2D438F804C; Tue, 14 May 2013 11:51:13 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 13:51:13 -0500 Message-ID: <519287BF.3070704@sgi.com> Date: Tue, 14 May 2013 13:51:43 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Zheng Liu Subject: Re: [PATCH v2] xfstests: add _require_seek_data_hole to check seek data/hole References: <1368350670-9499-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368350670-9499-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/12/2013 04:24 AM, Zheng Liu wrote: > From: Zheng Liu > > In xfstest 285/286 we don't check whether the target file system > supports seek data/hole operation or not. Here _require_seek_data_hole > is defined to do this work. > > Signed-off-by: Zheng Liu > Cc: Rich Johnston Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Tue May 14 13:54:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AF5FD7F37 for ; Tue, 14 May 2013 13:54:24 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21-nlb.corp.sgi.com [137.38.102.126]) by relay1.corp.sgi.com (Postfix) with ESMTP id 89A858F8050; Tue, 14 May 2013 11:54:24 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.102.30) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 14 May 2013 13:54:23 -0500 Message-ID: <5192887E.6070205@sgi.com> Date: Tue, 14 May 2013 13:54:54 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Zheng Liu Subject: Re: [PATCH v2] xfstests: add _require_seek_data_hole to check seek data/hole References: <1368350670-9499-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368350670-9499-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/12/2013 04:24 AM, Zheng Liu wrote: > From: Zheng Liu > > In xfstest 285/286 we don't check whether the target file system > supports seek data/hole operation or not. Here _require_seek_data_hole > is defined to do this work. > > Signed-off-by: Zheng Liu > Cc: Rich Johnston > --- > changelog: > * rebase against the latest master branch of xfstests tree > > Hi Rich, > > Sorry for the late. Could you please look at this patch? > > Thanks, > - Zheng > > common/rc | 12 ++++++++++++ > src/seek_sanity_test.c | 18 ++++++++++++++++-- > tests/generic/285 | 2 ++ > tests/generic/286 | 2 ++ > 4 files changed, 32 insertions(+), 2 deletions(-) > > diff --git a/common/rc b/common/rc > index f97924a..f24a6aa 100644 > --- a/common/rc > +++ b/common/rc > @@ -1283,6 +1283,18 @@ _require_fail_make_request() > not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled" > } > > +# > +# Check if the file system supports seek_data/hole > +# > +_require_seek_data_hole() > +{ > + testfile=$TEST_DIR/$$.seek > + testseek=`$here/src/seek_sanity_test -t $testfile 2>&1` > + rm -f $testfile &>/dev/null > + echo $testseek | grep -q "Kernel does not support" && \ > + _notrun "File system does not support llseek(2) SEEK_DATA/HOLE" > +} > + > # check that a FS on a device is mounted > # if so, return mount point > # > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index 3897f02..4275a84 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -660,6 +660,8 @@ int main(int argc, char **argv) > { > int ret = -1; > int i = 0; > + int opt; > + int check_support = 0; > int numtests = sizeof(seek_tests) / sizeof(struct testrec); > > if (argc != 2) { > @@ -667,10 +669,22 @@ int main(int argc, char **argv) > return ret; > } > > - base_file_path = (char *)strdup(argv[1]); > + while ((opt = getopt(argc, argv, "t")) != -1) { > + switch (opt) { > + case 't': > + check_support++; > + break; > + default: > + fprintf(stderr, "Usage: %s [-t] base_file_path\n", > + argv[0]); > + return ret; > + } > + } > + > + base_file_path = (char *)strdup(argv[optind]); > > ret = test_basic_support(); > - if (ret) > + if (ret || check_support) > goto out; > > for (i = 0; i < numtests; ++i) { > diff --git a/tests/generic/285 b/tests/generic/285 > index 22b4a08..b700a15 100644 > --- a/tests/generic/285 > +++ b/tests/generic/285 > @@ -40,6 +40,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > _supported_fs generic > _supported_os Linux > > +_require_seek_data_hole > + > BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile > > [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" > diff --git a/tests/generic/286 b/tests/generic/286 > index a0d4df9..5ab174f 100644 > --- a/tests/generic/286 > +++ b/tests/generic/286 > @@ -38,6 +38,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > _supported_fs generic > _supported_os Linux > > +_require_seek_data_hole > + > src=$TEST_DIR/seek_copy_testfile > dest=$TEST_DIR/seek_copy_testfile.dest > > Hi Zheng, this has been committed: commit 92449b7f36aba627adc3b2f11c1184292c5e43c7 Author: Zheng Liu Date: Tue May 14 13:25:44 2013 -0500 In xfstest 285/286 we don't check whether the target file system supports seek data/hole operation or not. Here _require_seek_data_hole is defined to do this work. Thanks --Rich From renuncias@perudota.com Tue May 14 14:51:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=FREEMAIL_FORGED_REPLYTO, HTML_FONT_SIZE_LARGE,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3B3997F37 for ; Tue, 14 May 2013 14:51:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2B2638F804C for ; Tue, 14 May 2013 12:51:42 -0700 (PDT) X-ASG-Debug-ID: 1368561100-04cb6c53a328c040001-NocioJ Received: from server.perudota.com (67.228.86.18-static.reverse.softlayer.com [67.228.86.18]) by cuda.sgi.com with ESMTP id IxMdejbFGDRcXzaq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 12:51:40 -0700 (PDT) X-Barracuda-Envelope-From: renuncias@perudota.com X-Barracuda-Apparent-Source-IP: 67.228.86.18 Received: from [201.230.53.52] (helo=server.mistura2012.com) by server.perudota.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1UcLFx-0002Sv-Bj; Tue, 14 May 2013 14:51:30 -0500 Message-ID: <6F7E4ED2E4584DA3821BD54529168C53@Filomena> Reply-To: "Sepa como Evitar las Renuncias de la Empresa" From: "Sepa como Evitar las Renuncias de la Empresa" To: "" Subject: Como Evitar la Rotacion de su Personal Valioso .PUBLlClDAD Date: Tue, 14 May 2013 14:51:01 -0500 X-ASG-Orig-Subj: Como Evitar la Rotacion de su Personal Valioso .PUBLlClDAD MIME-Version: 1.0 Content-Type: multipart/related; Type="multipart/alternative"; boundary="----=_NextPart_000_0B0C_01CE50B2.73BB5260" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5512 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 X-Antivirus: avast! (VPS 130514-0, 14/05/2013), Outbound message X-Antivirus-Status: Clean X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.perudota.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - perudota.com X-Barracuda-Connect: 67.228.86.18-static.reverse.softlayer.com[67.228.86.18] X-Barracuda-Start-Time: 1368561100 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA090e, BSF_SC0_SA090n, EXTRA_MPART_TYPE, HTML_FONT_SIZE_LARGE, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130960 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_FONT_SIZE_LARGE BODY: HTML font size is large 0.00 HTML_MESSAGE BODY: HTML included in message 0.40 BSF_SC0_SA090e Custom Rule SA090e 0.20 BSF_SC0_SA090n Custom Rule SA090n This is a multi-part message in MIME format. ------=_NextPart_000_0B0C_01CE50B2.73BB5260 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0B0D_01CE50B2.73BB5260" ------=_NextPart_001_0B0D_01CE50B2.73BB5260 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable S E M I N A R I O T A L L E R COMO EVITAR LA ROTACION DE SU PERSONAL VALIOSO=20 28 DE MAYO DE 6.30 A 10.30 PM LIC. R0GER MEZA Sepa c=F3mo evitar el incremento de una Alta Rotaci=F3n en la Empresa El capital Humano no solo es lo m=E1s importante de su empresa sino el mo= tor de la misma, aprenda a cuidarla y conservarla =20 OBJETIVO=20 Dotar de las estrategias y t=E1cticas efectivas y novedosas para evitar e= l incremento de una Alta Rotaci=F3n en la Empresa a partir de Sistemas de= Compromiso y de Programas y acciones de Retenci=F3n. ALCANCE Dirigido a = Profesionales del =E1rea de Recursos Humanos y Jefes interesados de otras= =E1reas que desean retener a sus Colaboradores.=20 METODOLOG=CDA=20 El esquema a desarrollar es altamente participativo orientado a la aplica= ci=F3n de estrategias para evitar la Rotaci=F3n del Personal de la Empres= a. Se aplicar=E1n din=E1micas de grupo para intercambiar experiencias ent= re los Participantes. Se analizar=E1 la problem=E1tica de la Rotaci=F3n d= el Personal y sus efectos.=20 TEMARIO=20 EL COMPROMISO: LO QUE ESPERAN LAS EMPRESAS DE SU PERSONAL:=20 Las Empresas cada vez m=E1s exigentes por ser mejores en sus resultados. = Las Metas de hoy en d=EDa requieren un esfuerzo mayor en la Gente.=20 QUE ES EL COMPROMISO? Causas y alcances visto en el trabajo.=20 El Compromiso: Como Actitud y Estilo de Vida en el Trabajo.=20 El Compromiso es una manifestaci=F3n de todos en la Empresa.=20 =BFC=D3MO NACE LA IDENTIFICACI=D3N EN LOS COLABORADORES?=20 El Balance de las satisfacciones de las Necesidades de los Colaboradores.= =20 Los Reconocimientos y el Salario Emocional como "compensadores".=20 C=D3MO HACER QUE LA GENTE SE COMPROMETA Y SE FIDELICE El cuidado del Buen Clima Laboral=20 El Liderazgo de los Jefes facilita a que la Gente est=E9 alineada natural= mente.=20 ROL DE LA EMPRESA PARA EVITAR ROTACI=D3N=20 Las posibilidades de Desarrollo de los Colaboradores Claves.=20 Sistemas de Retenci=F3n efectivos aplicados en la grandes Empresas.=20 EXP0SIT0R: LIC. R0GER MEZA GALD=D3S=20 Actualmente es Facilitador del Centro de Capac itaci=F3n y Encargado del = Proyecto de Retenci=F3n del Talento de W0NG-CENC0SUD PERU y Profesor del = Centro de lnnovaci=F3n y Desarrollo de la Pontificia Universidad Cat=F3li= ca del Per=FA.=20 lNVERSI=D3N:=20 P R O M O C I O N E X C L U S I V A : E L T E R C E R O N O P AG A Registro antes del 17 de Mayo S/. 250.00 inc. IGV=20 Registro de 3 a m=E1s participantes S/. 225.00 inc. IGV=20 Registro despu=E9s del 17 de Mayo S/. 285.00 inc. IGV=20 Registro de 3 a mas participantes S/. 245.00 inc. IGV Fecha:=20 28 Mayo de 6:30 pm .a 10:30 pm. Local:=20 S t u d i o 1,=20 A v. P e t i t T h o u a r s # 5 4 7 8 =20 M i r a f l o r e s=20 Organiza:=20 C u r s o s y S e m i n a r i o s P e r u lnformes e lnscripciones:=20 C e n t r a l : 3 3 2 - 5 9 6 7=20 N e x t e l : 4 1 * 1 5 5 * 3 0 0 4=20 R P C : 9 8 2 7 6 8 4 4 5 =20 =20 Disponible en Modalidad lN HOUSE Se Realiza a la medida de sus necesidades y en sus Instalaciones=20 ------=_NextPart_001_0B0D_01CE50B2.73BB5260 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable


S E M I N A  R I O    = T A L L E=20 R
 COMO EVITAR LA ROTACI= ON DE SU=20 PERSONAL VALIOSO=20
28 DE MAYO DE 6.30 A = 10.30=20 PM
LI= C. R0GER=20 MEZA
= Sepa c=F3mo=20 evitar el incremento de una Alta Rotaci=F3n en la=20 Empresa

El= capital=20 Humano no solo es lo m=E1s importante de su empresa sino el motor d= e la=20 misma, aprenda a cuidarla y conservarla
 


OBJETIVO
Dotar de las estrategias y t=E1cticas efectivas y nove= dosas para=20 evitar el incremento de una Alta Rotaci=F3n en la Empresa a partir = de=20 Sistemas de Compromiso y de Programas y acciones de Retenci=F3n. AL= CANCE=20 Dirigido a Profesionales del =E1rea de Recursos Humanos y Jefes int= eresados=20 de otras =E1reas que desean retener a sus Colaboradores.=20

= METODOLOG=CDA=20
El esquema a= desarrollar=20 es altamente participativo orientado a la aplicaci=F3n de estrategi= as para=20 evitar la Rotaci=F3n del Personal de la Empresa. Se aplicar=E1n din= =E1micas de=20 grupo para intercambiar experiencias entre los Participantes. Se an= alizar=E1=20 la problem=E1tica de la Rotaci=F3n del Personal y sus efectos.=20

= TEMARIO=20
EL COMPRO= MISO: LO QUE=20 ESPERAN LAS EMPRESAS DE SU PERSONAL:
Las Empresas cada vez = m=E1s=20 exigentes por ser mejores en sus resultados. Las Metas de hoy en d=ED= a=20 requieren un esfuerzo mayor en la Gente.
QUE ES EL COMPROMIS= O?=20 Causas y alcances visto en el trabajo.
El Compromiso: Como Acti= tud y=20 Estilo de Vida en el Trabajo.
El Compromiso es una manifestaci=F3= n de=20 todos en la Empresa.

=BFC=D3MO NACE LA IDENTIFI= CACI=D3N EN LOS=20 COLABORADORES?
El Balance de las satisfacciones de las Nece= sidades=20 de los Colaboradores.
Los Reconocimientos y el Salario Emociona= l como=20 "compensadores".

C=D3MO HACER QUE LA GENTE = SE COMPROMETA Y=20 SE FIDELICE
El cuidado del Buen Clima Laboral
El Lideraz= go de=20 los Jefes facilita a que la Gente est=E9 alineada naturalmente.

ROL DE LA EMPRESA PARA EVI= TAR ROTACI=D3N=20
Las posibilidades de Desarrollo de los Colaboradores Claves= .=20
Sistemas de Retenci=F3n efectivos aplicados en la grandes Empre= sas.=20

EXP0SIT0R: LIC. R0GER= MEZA=20 GALD=D3S
Act= ualmente es=20 Facilitador del Centro de Capac itaci=F3n y Encargado del Proyecto = de=20 Retenci=F3n del Talento de W0NG-CENC0SUD PERU y Profesor del Centro= de=20 lnnovaci=F3n y Desarrollo de la Pontificia Universidad Cat=F3lica d= el Per=FA.=20

= lNVERSI=D3N:=20
P R O M O C I O N   E X C L U S I V A :
E L   T E = R C E R=20 O   N O   P AG A

Registro antes del 17 de Mayo S/. 250.00 inc. IGV
= Registro=20 de 3 a m=E1s participantes S/. 225.00 inc. IGV
Registro despu=E9= s del 17=20 de Mayo S/. 285.00 inc. IGV
Registro de 3 a mas participantes S= /.=20 245.00 inc. IGV

Fecha:
28 Mayo de 6:30 pm .a 10:30=20 pm.

Local:=20
S t u d i o&= nbsp; 1,=20
A v.   P e t i t   T h o u a r s  = ;=20 #   5 4 7 8 
M i r a f l o r e s

= Organiza:
C u r s o s =  =20 y   S e m i n a r i o s   P e r u

lnformes e lnscripcio= nes:=20
C e = n t r a l=20 :   3 3 2 - 5 9 6 7
N e x t e l :   4 1 * 1= 5 5 *=20 3 0 0 4
R P C   :   9 8 2 7 6 8 4 4 5 = =20
 

Disponible=20 en Modalidad lN HOUSE
Se Realiza a la medida de sus necesidades = y en=20 sus Instalaciones



------=_NextPart_001_0B0D_01CE50B2.73BB5260-- ------=_NextPart_000_0B0C_01CE50B2.73BB5260 Content-Type: image/gif; name="=?iso-8859-1?B?cGFydGVfYmFqYV8oMSkuZ2lm?=" Content-Transfer-Encoding: base64 Content-ID: <2AD40C1AD4AB46CC9193C1558E826907@Filomena> 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 ------=_NextPart_000_0B0C_01CE50B2.73BB5260-- From profesional@recursosexternos2013.com Tue May 14 15:32:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.8 required=5.0 tests=AXB_XMAILER_MIMEOLE_OL_E023A, FREEMAIL_FORGED_REPLYTO,HTML_FONT_SIZE_HUGE,HTML_MESSAGE, HTML_TAG_BALANCE_HEAD autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B27B67F37 for ; Tue, 14 May 2013 15:32:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A26EE304062 for ; Tue, 14 May 2013 13:32:14 -0700 (PDT) X-ASG-Debug-ID: 1368563529-04cbb05fe328cd00001-NocioJ Received: from server.perudota.com (67.228.86.18-static.reverse.softlayer.com [67.228.86.18]) by cuda.sgi.com with ESMTP id 98cUVxbZttQN3EtY (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 13:32:09 -0700 (PDT) X-Barracuda-Envelope-From: profesional@recursosexternos2013.com X-Barracuda-Apparent-Source-IP: 67.228.86.18 Received: from [190.235.181.6] (helo=server.recursosexternos2013.com) by server.perudota.com with esmtpa (Exim 4.69) (envelope-from ) id 1UcLsu-00043t-LD; Tue, 14 May 2013 15:31:47 -0500 Message-ID: Reply-To: "Sea una Profesional al Hablar por Telefono" <"rotacion.valiosos@yahoo.com.peunsaludoprofesional"@yahoo.com.pe> From: "Sea una Profesional al Hablar por Telefono" To: "carolina padilla" Subject: Calidad en la Atencion Telefonica PUBLlCIDAD. Date: Tue, 14 May 2013 15:31:06 -0500 X-ASG-Orig-Subj: Calidad en la Atencion Telefonica PUBLlCIDAD. MIME-Version: 1.0 Content-Type: multipart/related; Type="multipart/alternative"; boundary="----=_NextPart_000_0B52_01CE50B8.0CFDFEA0" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5512 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5512 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.perudota.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - recursosexternos2013.com X-Barracuda-Connect: 67.228.86.18-static.reverse.softlayer.com[67.228.86.18] X-Barracuda-Start-Time: 1368563529 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.99 X-Barracuda-Spam-Status: No, SCORE=0.99 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA090e, BSF_SC0_SA090n, EXTRA_MPART_TYPE, HTML_FONT_SIZE_HUGE, HTML_MESSAGE, HTML_TAG_BALANCE_HEAD X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130962 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.39 HTML_FONT_SIZE_HUGE BODY: HTML font size is huge 0.00 HTML_TAG_BALANCE_HEAD BODY: HTML has unbalanced "head" tags 0.00 HTML_MESSAGE BODY: HTML included in message 0.40 BSF_SC0_SA090e Custom Rule SA090e 0.20 BSF_SC0_SA090n Custom Rule SA090n This is a multi-part message in MIME format. ------=_NextPart_000_0B52_01CE50B8.0CFDFEA0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0B53_01CE50B8.0CFDFEA0" ------=_NextPart_001_0B53_01CE50B8.0CFDFEA0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable S E M I N A R I O T A L L E R CALIDAD EN LA=20 ATENCION TELEFONICA Y RECLAMACIONES=20 22 DE MAYO DE 5 A 10 PM=20 RINA DEZA PITA DESARROLLE UNA ACTITUD PROFESIONAL AL HABLAR POR TEL=C9FONO La primera impresi=F3n es la cuenta, exclusivo para Asistentes Administra= tivas, secretaria recepcionistas, tele marketing, telecobranzas, atenci=F3= n al cliente y todo personal que quiera mejorar su habilidad en la atenci= =F3n telef=F3nica =20 SUMILLA:=20 Las recepcionistas son LA IMAGEN DE LA EMPRESA ya que son las responsable= s de dar el primer contacto a los CLIENTES y esta se quedara impresa en e= llos. Al darse una mala atenci=F3n, un mal servicio o un saludo descort=E9= s provocaran una sensaci=F3n negativa la cual compromete las relaciones c= on todas las =E1reas de su organizaci=F3n .=20 PARA QUE DEBO ASISTIR:=20 - Para Mejorar la transmisi=F3n de imagen de la empresa a trav=E9s de la = comunicaci=F3n telef=F3nica=20 - Para Mejorar el saludo, conversaci=F3n y despedida de la comunicaci=F3n= telef=F3nica=20 - Para darle mayor importancia al puesto de recepci=F3n mejorando su gest= i=F3n en general=20 - Para Profesionalizar sus labores tanto en la comunicaci=F3n externa e i= nterna logrando as=ED rentabilizar su gesti=F3n dentro=20 de su centro de trabajo=20 BENEFICIOS:=20 Asista y obtenga grandes beneficios:=20 - Aprenda a resolver las dudas con estrategias efectivas y habilidades de= comunicaci=F3n.=20 - Controle todos sus contactos estableciendo una relaci=F3n con sus clien= tes.=20 - Maximice el flujo de dinero de su compa=F1=EDa.=20 - Desarrolle una actitud profesional al hablar por tel=E9fono.=20 - Convi=E9rtase en una recepcionista segura y m=E1s organizada=20 - Tome control del cliente para maximizar resultados=20 - Dele la vuelta a las excusas y a las quejas de sus clientes.=20 - Obtenga la informaci=F3n necesaria para resolver las cuentas y dudas de= l cliente=20 - Aprenda a identificar los diferentes tipos de clientes para as=ED desar= rollar estrategias que le ayudar=E1 a resolver las dudas=20 - Utilice habilidades de comunicaci=F3n profesionales.=20 - Transmita el mensaje indicado de la manera m=E1s efectiva.=20 - Aprenda a hacer buenas preguntas y a responder con confianza.=20 - Desarrolle un plan de acci=F3n personal para darle seguimiento a cada a= cci=F3n y a cada resultado=20 TEMARIO:=20 - La Imagen Profesional: Importancia del saludo inicial=20 - Presentarse correctamente : Estableciendo Protocolos=20 - Utilizar el tono de voz adecuado=20 - Escuchar activamente=20 - Realizar preguntas eficaces=20 - Manejar el tiempo=20 - Rebatir objeciones : controlemos las emociones=20 - Utilizar t=E9cnicas de satisfacci=F3n=20 - Manejo de llamados bajo presi=F3n=20 - Vocaci=F3n de Servicio: Como desarrollarla para brindar un Servicio de = excelencia.=20 - Cerrar la llamada : tips=20 - Transmitir seguridad y tranquilidad=20 - Brindar la soluci=F3n : El Compromiso=20 - Despedirse identificando la imagen=20 - Taller: Ejercicios de vocalizaci=F3n, volumen y entonaci=F3n de voz.=20 Experto: RINA ELENA DEZA PITA:=20 Experimentada exp ositora por m=E1s de 10 a=F1os en temas de 0ratoria, Li= derazgo, Coac hing, Trabajo en Equipo, Manejo de Clientes Dif=ECciles, Pr= esentaciones Exitosas, Din=E1micas Empresariales y servicio al Cliente. C= on VII Ciclos de estudios de Administraci=F2n de Relaciones Industriales = del Servicio de Extensi=F3n T=E9cnica de la Universidad Del Pac=EDfico. E= gresada de la Universidad Nacional Mayor de San Marcos Direcci=F3n Univer= sitaria de Proyecci=F2n Social en la especialidad de Secretariado Ejecuti= vo en Castellano. Adem=E1s tiene estudios de Oratoria, Coac hing Ontol=F3= gico y Coa-ching para la Vida en la Universidad Cat=F3lica del Per=FA y E= studios de Desarrollo Comportamental en la ciudad de Caxia Do Sul - Brasi= l.Ha dictado Seminarios en El, Adams, Samitex, Electrohogar, Oriflame, In= stituto Selene, Supermercados Peruanos, Grupo Solimano, Cepeban, Indurama= , Buro Outsorsing, Layconsa, Volvo del Per=FA, Bimbo del Per=FA, Kaercher= , Quality Products, T-Copia, Divemotors, Litzi, Copias Express, Gildemeis= ter y Universidad San Mart=EDn de Porres, entre otros. Es Profesora en la= C=E1mara de Comercio de Lima, Asociaci=F3n Automotriz, Instituto Sise, I= nstituto Fide e Instituto San Ignacio de Loyola ISIL en los Diplomados de= Marketing y Ventas. lNVERSI=D3N: =20 OBTENGA NUESTRA PR0M0Cl0N EXCLUSlVA:=20 E L Q U I N T O N O P A G A Antes del 10 de mayo S/.270.00 Soles=20 De 03 a m=E1s participantes S/.255.00 Soles C/U=20 Despu=E9s del 10 de mayo S/.310.00 Soles=20 De 03 a m=E1s participantes S/.265.00 Soles C/U Fecha:=20 22 Mayo de 5:00 pm .a 10:00 pm. Local:=20 S t u d i o 1,=20 A v. P e t i t T h o u a r s # 5 4 7 8 =20 M i r a f l o r e s=20 Organiza:=20 U N O E M P R E S A R I A L=20 lnformes e lnscripciones:=20 Central: 4 3 3 - 2 7 0 7 =20 Nextel: 4 1 * 1 5 5 * 3 0 0 4 RPC : 9 8 2 7 6 8 5 5 5 Disponible en Modalidad lN HOUSE Se Realiza a la medida de sus necesidades y en sus Instalaciones=20 ------=_NextPart_001_0B53_01CE50B8.0CFDFEA0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable


S E=20 M I N A  R I O    T A L L E R
 
= CALIDAD EN LA=20
ATENCION TELEFONICA Y RECLAMACIONES
22 DE MAYO DE 5 A 10 PM
RINA DEZA PITA
DESARROLLE UNA ACTITUD PROFESIONAL AL HABLAR POR=20 TEL=C9FONO

La primera impresi=F3n es la cuenta, exclusivo para A= sistentes=20 Administrativas, secretaria recepcionistas, tele marketing, telecob= ranzas,=20 atenci=F3n al cliente y todo personal que quiera mejorar su habilid= ad en la=20 atenci=F3n telef=F3nica
 


SUMILLA:
Las r= ecepcionistas=20 son LA IMAGEN DE LA EMPRESA ya que son las responsables de dar el p= rimer=20 contacto a los CLIENTES y esta se quedara impresa en ellos. Al dars= e una=20 mala atenci=F3n, un mal servicio o un saludo descort=E9s provocaran= una=20 sensaci=F3n negativa la cual compromete las relaciones con todas la= s =E1reas=20 de su organizaci=F3n .

PARA QUE DEB= O ASISTIR:=20
- Para Mejorar la transmisi=F3= n de imagen=20 de la empresa a trav=E9s de la comunicaci=F3n telef=F3nica
- Pa= ra Mejorar el=20 saludo, conversaci=F3n y despedida de la comunicaci=F3n telef=F3nic= a
- Para=20 darle mayor importancia al puesto de recepci=F3n mejorando su gesti= =F3n en=20 general
- Para Profesionalizar sus labores tanto en la comunica= ci=F3n=20 externa e interna logrando as=ED rentabilizar su gesti=F3n dentro <= BR> =20 de su centro de trabajo

BENEFICIOS: =
Asista y obtenga grandes beneficios:
= - Aprenda a=20 resolver las dudas con estrategias efectivas y habilidades de=20 comunicaci=F3n.
- Controle todos sus contactos estableciendo un= a=20 relaci=F3n con sus clientes.
- Maximice el flujo de dinero de s= u=20 compa=F1=EDa.
- Desarrolle una actitud profesional al hablar po= r tel=E9fono.=20
- Convi=E9rtase en una recepcionista segura y m=E1s organizada =
- Tome=20 control del cliente para maximizar resultados
- Dele la vuelta = a las=20 excusas y a las quejas de sus clientes.
- Obtenga la informaci=F3= n=20 necesaria para resolver las cuentas y dudas del cliente
- Apren= da a=20 identificar los diferentes tipos de clientes para as=ED desarrollar= =20 estrategias que le ayudar=E1 a resolver las dudas
- Utilice hab= ilidades=20 de comunicaci=F3n profesionales.
- Transmita el mensaje indicad= o de la=20 manera m=E1s efectiva.
- Aprenda a hacer buenas preguntas y a r= esponder=20 con confianza.
- Desarrolle un plan de acci=F3n personal para d= arle=20 seguimiento a cada acci=F3n y a cada resultado

TEMARIO:
- La Imagen Profesional: Importancia del = saludo=20 inicial
- Presentarse correctamente : Estableciendo Protocolos =
-=20 Utilizar el tono de voz adecuado
- Escuchar activamente
- R= ealizar=20 preguntas eficaces
- Manejar el tiempo
- Rebatir objeciones= :=20 controlemos las emociones
- Utilizar t=E9cnicas de satisfacci=F3= n
-=20 Manejo de llamados bajo presi=F3n
- Vocaci=F3n de Servicio: Com= o=20 desarrollarla para brindar un Servicio de excelencia.
- Cerrar = la=20 llamada : tips
- Transmitir seguridad y tranquilidad
- Brin= dar la=20 soluci=F3n : El Compromiso
- Despedirse identificando la imagen=
-=20 Taller: Ejercicios de vocalizaci=F3n, volumen y entonaci=F3n de voz= .=20

Experto:
= RINA ELENA=20 DEZA PITA:

Experimentada exp= ositora=20 por m=E1s de 10 a=F1os en temas de 0ratoria, Liderazgo, Coac hing, = Trabajo en=20 Equipo, Manejo de Clientes Dif=ECciles, Presentaciones Exitosas, Di= n=E1micas=20 Empresariales y servicio al Cliente. Con VII Ciclos de estudios de=20 Administraci=F2n de Relaciones Industriales del Servicio de Extensi= =F3n=20 T=E9cnica de la Universidad Del Pac=EDfico. Egresada de la Universi= dad=20 Nacional Mayor de San Marcos Direcci=F3n Universitaria de Proyecci=F2= n Social=20 en la especialidad de Secretariado Ejecutivo en Castellano. Adem=E1= s tiene=20 estudios de Oratoria, Coac hing Ontol=F3gico y Coa-ching para la Vi= da en la=20 Universidad Cat=F3lica del Per=FA y Estudios de Desarrollo Comporta= mental en=20 la ciudad de Caxia Do Sul - Brasil.Ha dictado Seminarios en El, Ada= ms,=20 Samitex, Electrohogar, Oriflame, Instituto Selene, Supermercados Pe= ruanos,=20 Grupo Solimano, Cepeban, Indurama, Buro Outsorsing, Layconsa, Volvo= del=20 Per=FA, Bimbo del Per=FA, Kaercher, Quality Products, T-Copia, Dive= motors,=20 Litzi, Copias Express, Gildemeister y Universidad San Mart=EDn de P= orres,=20 entre otros. Es Profesora en la C=E1mara de Comercio de Lima, Asoci= aci=F3n=20 Automotriz, Instituto Sise, Instituto Fide e Instituto San Ignacio = de=20 Loyola ISIL en los Diplomados de Marketing y Ventas.

= lNVERSI=D3N: 
OBTENGA NUESTR= A PR0M0Cl0N=20 EXCLUSlVA:
E L =   Q U=20 I N T O   N O   P A G A
Antes del 10 de mayo = S/.270.00=20 Soles
De 03 a m=E1s participantes S/.255.00 Soles C/U
Despu= =E9s del 10=20 de mayo S/.310.00 Soles
De 03 a m=E1s participantes S/.265.00 S= oles=20 C/U

Fecha:
22 Mayo de 5:00 pm .a 10:00 pm.

Local:

S t u=20 d i o  1,
A v.   P e t i t   T h o u a= r=20 s   #   5 4 7 8 
M i r a f l o r e s=20

Organiza:
U N O    E M P R E S A R I A L =

lnformes e lnscripciones:
= Central:=20 4 3 3 - 2 7 0 7 
Nextel: = ;=20 4 1 * 1 5 5 * 3 0 0 4

RPC :=20 9 8 2 7 6 8 5 5 5

Disp= onible en=20 Modalidad lN HOUSE
Se=20 Realiza a la medida de sus necesidades y en sus Instalaciones=20






3D""
------=_NextPart_001_0B53_01CE50B8.0CFDFEA0-- ------=_NextPart_000_0B52_01CE50B8.0CFDFEA0 Content-Type: image/gif; name="Parte_Baja.gif" Content-Transfer-Encoding: base64 Content-ID: <08DCDC92632F4C908A90023E28605CED@roxana> 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 ------=_NextPart_000_0B52_01CE50B8.0CFDFEA0-- From JBacik@fusionio.com Tue May 14 15:35:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BAF827F37 for ; Tue, 14 May 2013 15:35:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9D4FF8F8033 for ; Tue, 14 May 2013 13:35:27 -0700 (PDT) X-ASG-Debug-ID: 1368563725-04cb6c53a128e430001-NocioJ Received: from dkim1.fusionio.com (dkim1.fusionio.com [66.114.96.53]) by cuda.sgi.com with ESMTP id UXwC0DHGc1UvQcBR (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 13:35:26 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.53 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim1.fusionio.com (Postfix) with ESMTP id 8C9817C0417 for ; Tue, 14 May 2013 14:35:25 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1368563725; bh=OIho6nzzxYKxP3TE+mVgjtItm80cSRN4Ni5FD25f4vY=; h=From:To:Subject:Date; b=IfjD/rmS+YEF5Dp9Fyjnv4KEVbl1ejYx5A0K/S7ZwIORhBe7dXFKwZvBLxl4FRCUg QMfWlbUkNKhtKUHWxsB/AZZ894UDl9yzsh2tBNEGcroVIfdR83jzE0WvmIsqevzevm JiU10c4aYrmk2+LFZt/HtsUNDb3kdehz1/NAsjcA= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id WrlAD6suI32gUNJa (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 14 May 2013 14:35:24 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Tue, 14 May 2013 14:35:24 -0600 From: Josef Bacik To: Subject: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device Date: Tue, 14 May 2013 16:35:22 -0400 X-ASG-Orig-Subj: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device Message-ID: <1368563722-23452-1-git-send-email-jbacik@fusionio.com> X-Mailer: git-send-email 1.7.7.6 MIME-Version: 1.0 Content-Type: text/plain X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim1.fusionio.com[66.114.96.53] X-Barracuda-Start-Time: 1368563726 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130962 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Dave pointed out that xfs was having issues with 311 because of caching issues. He suggested that I fsck the dm-flakey device to make sure we don't have this problem. This is the easiest way I could think to accomplish this, please let me know if this is a bad idea. Thanks, Signed-off-by: Josef Bacik --- tests/generic/311 | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/tests/generic/311 b/tests/generic/311 index 2b3b569..f11119b 100644 --- a/tests/generic/311 +++ b/tests/generic/311 @@ -125,7 +125,10 @@ _run_test() #Unmount and fsck to make sure we got a valid fs after replay _unmount_flakey + tmp=$SCRATCH_DEV + SCRATCH_DEV=$FLAKEY_DEV _check_scratch_fs + SCRATCH_DEV=$tmp [ $? -ne 0 ] && _fatal "fsck failed" _mount_flakey -- 1.7.7.6 From JBacik@fusionio.com Tue May 14 15:42:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1BB557F37 for ; Tue, 14 May 2013 15:42:06 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C49E78F8033 for ; Tue, 14 May 2013 13:42:05 -0700 (PDT) X-ASG-Debug-ID: 1368564124-04bdf04223289070001-NocioJ Received: from dkim1.fusionio.com (dkim1.fusionio.com [66.114.96.53]) by cuda.sgi.com with ESMTP id Gd8f3O7xUtiTVm0O (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 13:42:04 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.53 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim1.fusionio.com (Postfix) with ESMTP id 37A5E7C0417 for ; Tue, 14 May 2013 14:42:04 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1368564124; bh=vHIzuJBRUSCit/7aKPJY3ZY8EbMp3FOvbBd40IdrvIA=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=XhZzUbYyYBp2aP8Ru3XtMtSr6Yvf52FPP3N+Ac7HvpysEb7stdycZ47RtheWD2ahn tGKgAoGoKz+kI3VOyv9A6SetK/p/wWaGh/R6Pxb17mxErdFIbiDLvJDhMAu4VTeOWU KPLRsvYNQyHkygDcpXCsMm1fFKybcuEdAPfSM4NQ= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id vO4GVMKdGPlMQbLE (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Tue, 14 May 2013 14:42:03 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Tue, 14 May 2013 14:42:02 -0600 Date: Tue, 14 May 2013 16:42:01 -0400 From: Josef Bacik To: Rich Johnston CC: Eric Sandeen , xfs-oss , Liu Bo , linux-btrfs Subject: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output Message-ID: <20130514204201.GC1765@localhost.localdomain> X-ASG-Orig-Subj: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output References: <517ACB41.2030002@redhat.com> <51925612.5050002@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <51925612.5050002@sgi.com> User-Agent: Mutt/1.5.21 (2011-07-01) X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim1.fusionio.com[66.114.96.53] X-Barracuda-Start-Time: 1368564124 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130962 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, May 14, 2013 at 09:19:46AM -0600, Rich Johnston wrote: > On 04/26/2013 01:45 PM, Eric Sandeen wrote: > > test 284 had... some issues. > > > > First, it took so long nobody ran it; so shorten the extent > > count by a factor of about 100. > > > > Having fixed that, we see failures in 2 cases; when start or > > len is -1, but the golden output file didn't have error > > output, as if they should pass. > > > > I'm going to argue that these *should* both fail; start = -1 > > has no real meaning. length = -1 might mean "the rest > > of the file" but if that's what you really want, just > > don't specify -l. > > > > So add failure output for those cases. > > > > Send all command output to $seq.full, in case that changes > > in the future; just capture the return value. > > > > Then remove the return value echo on failure (50?) because > > who knows when that might change to some other magic value. > > > > Ok, then when defrag actually works, old defrag returned > > "20" (because?) but a recent commit changed it to 0. > > So accommodate that too. > > > > And remove a stray "HAVE_DEFRAG=1" while we're at it. > > That variable is never used. > > > > So should I be seeing failures with > btrfs-progs-0.20-0.2.git91d9eec.el6.x86_64 installed? > > ./check btrfs/284 > FSTYP -- btrfs > PLATFORM -- Linux/x86_64 cxfsxe4 3.9.0+ > MKFS_OPTIONS -- /dev/sdk2 > MOUNT_OPTIONS -- /dev/sdk2 /mnt/scratch > > btrfs/284 - output mismatch (see > /usr/src/rcj/xfstests/results/btrfs/284.out.bad) > --- tests/btrfs/284.out 2013-05-14 09:31:35.000000000 -0500 > +++ /usr/src/rcj/xfstests/results/btrfs/284.out.bad 2013-05-14 > 10:10:45.000000000 -0500 > @@ -6,7 +6,6 @@ > btrfs filesystem defragment failed! > a single file | start > file size && 0 < len < file size | off > a single file | start = 0 && len < 0 | off (should fail) > -btrfs filesystem defragment failed! > a single file | start = 0 && len > file size | off > a single file | start = 0 && 0 < len < file size | off > a directory | default | off > ... > (Run 'diff -u tests/btrfs/284.out > /usr/src/rcj/xfstests/results/btrfs/284.out.bad' to see the entire diff) > Ran: btrfs/284 > Failures: btrfs/284 > Failed 1 of 1 tests > Yeah defrag used to spit out a return value on success, that has been fixed recently. This patch looks good, I just ran it on my box and it ran fine, you can add Reviewed-by: Josef Bacik Thanks, Josef From creditos@recursosexternos2013.com Tue May 14 15:47:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.4 required=5.0 tests=FREEMAIL_FORGED_REPLYTO, FUZZY_CREDIT,HTML_FONT_SIZE_HUGE,HTML_MESSAGE,HTML_TAG_BALANCE_HEAD autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CAB037F37 for ; Tue, 14 May 2013 15:47:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B5B938F8033 for ; Tue, 14 May 2013 13:47:34 -0700 (PDT) X-ASG-Debug-ID: 1368564453-04cbb05fe428db40001-NocioJ Received: from server.perudota.com (67.228.86.18-static.reverse.softlayer.com [67.228.86.18]) by cuda.sgi.com with ESMTP id sG8RGJ3ictlhaDHt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 13:47:33 -0700 (PDT) X-Barracuda-Envelope-From: creditos@recursosexternos2013.com X-Barracuda-Apparent-Source-IP: 67.228.86.18 Received: from [181.64.61.21] (helo=localhost) by server.perudota.com with esmtpa (Exim 4.69) (envelope-from ) id 1UcM87-0004px-SN; Tue, 14 May 2013 15:47:28 -0500 Message-ID: <0F2D2091675E4A61A595FE0DD0D4883D@CAROLINA> Reply-To: "Nuevo Reglamento de Proviciones Bancarias" From: "Nuevo Reglamento de Proviciones Bancarias" To: "margarita zuniga" Subject: Gestion Eficiente de Creditos y Cobranzas PUBLlCIDAD. Date: Tue, 14 May 2013 15:48:08 -0500 X-ASG-Orig-Subj: Gestion Eficiente de Creditos y Cobranzas PUBLlCIDAD. MIME-Version: 1.0 Content-Type: multipart/related; Type="multipart/alternative"; boundary="----=_NextPart_000_0B52_01CE50BA.6E64C500" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5512 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.perudota.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - recursosexternos2013.com X-Barracuda-Connect: 67.228.86.18-static.reverse.softlayer.com[67.228.86.18] X-Barracuda-Start-Time: 1368564453 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.52 X-Barracuda-Spam-Status: No, SCORE=1.52 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA090e, BSF_SC0_SA090n, EXTRA_MPART_TYPE, FUZZY_CREDIT, FUZZY_CREDIT_2, HTML_FONT_SIZE_HUGE, HTML_MESSAGE, HTML_TAG_BALANCE_HEAD X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130962 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 FUZZY_CREDIT BODY: Attempt to obfuscate words in spam 0.39 HTML_FONT_SIZE_HUGE BODY: HTML font size is huge 0.00 HTML_TAG_BALANCE_HEAD BODY: HTML has unbalanced "head" tags 0.00 HTML_MESSAGE BODY: HTML included in message 0.52 FUZZY_CREDIT_2 Attempt to obfuscate words in spam 0.40 BSF_SC0_SA090e Custom Rule SA090e 0.20 BSF_SC0_SA090n Custom Rule SA090n This is a multi-part message in MIME format. ------=_NextPart_000_0B52_01CE50BA.6E64C500 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0B53_01CE50BA.6E64C500" ------=_NextPart_001_0B53_01CE50BA.6E64C500 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable S E M I N A R I O T A L L E R GESTI=D3N EFICIENTE DE=20 CR=C9DITOS Y COBRANZAS=20 Nuevo Reglamento de exigencia de provisiones bancarias pro c=EDclicas 23 Y 24 DE MAYO DE 5 A 10 PM=20 MBA. JUAN MANUEL HINOJOSA TAPIA =20 OBJETIVO=20 Una importante extensi=F3n del esfuerzo comercial lo constituye el cr=E9d= ito y la cobranza. Se dice que una venta no est=E1 bien hecha sino hasta = que =E9sta se cobra debidamente. Por tanto, la pol=EDtica crediticia mere= ce un dise=F1o pensando en fidelizar al cliente y asimismo promover negoc= ios a largo plazo.=20 DIRIGIDO A=20 Gerentes, jefes, supervisores, gestores de cr=E9ditos y cobranzas y en ge= neral, a todo p=FAblico interesado en este importante aspecto de la moder= na gesti=F3n comercial, financiera y de negocios.=20 CONTENIDO GENERAL=20 1. La pol=EDtica comercial. 2. La pol=EDtica crediticia.=20 3. La pol=EDtica de recuperaciones=20 4. Nuevo Reglamento de exigencia de provisiones bancarias pro c=EDclicas.= 5. Desarrollo de casu=EDstica.=20 CONTENIDO ESPECIFICO - La pol=EDtica comercial: retos al enfrentar un mercado globalizado.=20 - La pol=EDtica crediticia: endeudar es una cuesti=F3n de necesidad =F3 m= oda ?=20 - La tecnolog=EDa y el cruce de informaci=F3n no son garant=EDa suficient= e.=20 - La administraci=F3n de riesgos: una mezcla de proactividad y seguimient= o.=20 - Hacer que las objeciones en cobranzas agreguen valor a la gesti=F3n=20 - Provisiones pro c=EDclicas en funci=F3n de variaciones porcentuales del= PBI.=20 - Desarrollo de casu=EDstica: casos de personas naturales y empresas.=20 METODOLOGIA=20 La presentaci=F3n se lleva a cabo en ambiente multimedia, empleando archi= vos de Power Point para la teor=EDa y de Word y Excel para la casu=EDstic= a.=20 EXP0SlT0R=20 MBA JUAN MANUEL HINOJOSA TAPIA=20 Economista por la Universidad de Lima; MBA por ESAN; diplomado en finanza= s por la Universidad de Piura. 25 a=F1os de experiencia gerencial y docen= te en administraci=F3n, banca, finanzas, micro finanzas y proyectos. Actu= almente es gerente de administraci=F3n y finanzas de INVERPES S.A.C. y es= asimismo expositor en ADEX, CEPEBAN, Escuela de Empresa y Negocios, IFB = _ ASBANC, entre otros.=20 INVERSI=D3N:=20 OBTENGA NUESTRA PR0M0Cl0N EXCLUSlVA:=20 E L Q U I N T O N O P A G A Antes del 13 de Mayo S/. 370.00 Soles=20 De 03 a m=E1s S/.335.00 Soles C/U=20 Despu=E9s del 13 de Mayo S/.410.00 Soles=20 De 03 a m=E1s S/.365.00 Soles C/U Fecha:=20 23 y 24 Mayo de 6:00 pm .a 10:00 pm. Local:=20 S t u d i o 1,=20 A v. P e t i t T h o u a r s # 5 4 7 8 =20 M i r a f l o r e s=20 Organiza:=20 U N O E M P R E S A R I A L=20 lnformes e lnscripciones:=20 Central: 4 3 3 - 2 7 0 7 =20 Nextel: 4 1 * 1 5 5 * 3 0 0 4 RPC : 9 8 2 7 6 8 5 5 5 Disponible en Modalidad lN HOUSE Se Realiza a la medida de sus necesidades y en sus Instalaciones=20 ------=_NextPart_001_0B53_01CE50BA.6E64C500 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable


S E=20 M I N A  R I O    T A L L E R
 
= GESTI=D3N=20 EFICIENTE DE
CR=C9DITOS Y COBRANZAS
Nuevo Reglamento de exigencia de provisiones bancarias pro= =20 c=EDclicas
<= FONT=20 color=3D#ffff00>
23=20 Y 24 DE MAYO DE 5 A 10 PM
MBA. JUAN MANUEL HINOJOSA TAPIA
 

<= /TD>


OBJETIVO
Una importante extensi=F3n del esfuerzo comercial l= o=20 constituye el cr=E9dito y la cobranza. Se dice que una venta no est= =E1 bien=20 hecha sino hasta que =E9sta se cobra debidamente. Por tanto, la pol= =EDtica=20 crediticia merece un dise=F1o pensando en fidelizar al cliente y as= imismo=20 promover negocios a largo plazo.

DIRIGIDO A
Gerentes, jefes, supervisore= s, gestores=20 de cr=E9ditos y cobranzas y en general, a todo p=FAblico interesado= en este=20 importante aspecto de la moderna gesti=F3n comercial, financiera y = de=20 negocios.

CONTENIDO GENERAL
1. La pol=EDtica comercial.<= BR>2. La=20 pol=EDtica crediticia.
3. La pol=EDtica de recuperaciones
4= . Nuevo=20 Reglamento de exigencia de provisiones bancarias pro c=EDclicas. 5.= =20 Desarrollo de casu=EDstica.

CONTENIDO ESPECIFICO
- La pol=EDtica comercial: r= etos al=20 enfrentar un mercado globalizado.
- La pol=EDtica crediticia: e= ndeudar=20 es una cuesti=F3n de necesidad =F3 moda ?
- La tecnolog=EDa y e= l cruce de=20 informaci=F3n no son garant=EDa suficiente.
- La administraci=F3= n de=20 riesgos: una mezcla de proactividad y seguimiento.
- Hacer que = las=20 objeciones en cobranzas agreguen valor a la gesti=F3n
- Provisi= ones pro=20 c=EDclicas en funci=F3n de variaciones porcentuales del PBI.
- = Desarrollo=20 de casu=EDstica: casos de personas naturales y empresas.

METODOLOGIA
La presentaci=F3n se lleva a= cabo en=20 ambiente multimedia, empleando archivos de Power Point para la teor= =EDa y de=20 Word y Excel para la casu=EDstica.

EXP0SlT0R
MBA JUAN MANUEL HINOJOS= A TAPIA=20
Econom= ista por la=20 Universidad de Lima; MBA por ESAN; diplomado en finanzas por la=20 Universidad de Piura. 25 a=F1os de experiencia gerencial y docente = en=20 administraci=F3n, banca, finanzas, micro finanzas y proyectos. Actu= almente=20 es gerente de administraci=F3n y finanzas de INVERPES S.A.C. y es a= simismo=20 expositor en ADEX, CEPEBAN, Escuela de Empresa y Negocios, IFB _ AS= BANC,=20 entre otros.

INVERSI=D3N:
OBTENGA NUESTRA PR0M0Cl0N EXCLUSlVA:
E L &nb= sp; Q U I=20 N T O   N O   P A G A

Antes del 13 de Mayo S/. 370= .00 Soles=20
De 03 a m=E1s S/.335.00 Soles C/U
Despu=E9s del 13 de Mayo = S/.410.00=20 Soles
De 03 a m=E1s S/.365.00 Soles C/U

Fecha:
23 y 24 Mayo de 6:00 pm .a 10:00 pm.

Local:

S t u d i o  1,
A v.   P e t i=20 t   T h o u a r s   #   5 4 7 8 =
M=20 i r a f l o r e s

Organiza:=20
U N O    E M P R E S A= R I A L=20

lnformes e lnscr= ipciones:=20
Central: 4 3 3 - 2 7= 0 7 =20
Nextel:  4 1 * 1 5 5 * 3 0 0 4

RPC : 9 8 2=20 7 6 8 5 5 5

Disp= onible en=20 Modalidad lN HOUSE
Se=20 Realiza a la medida de sus necesidades y en sus Instalaciones=20





3D""
------=_NextPart_001_0B53_01CE50BA.6E64C500-- ------=_NextPart_000_0B52_01CE50BA.6E64C500 Content-Type: image/gif; name="Parte_Baja.gif" Content-Transfer-Encoding: base64 Content-ID: <3272C290451D42DFB9A48D455E9A0021@CAROLINA> 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 ------=_NextPart_000_0B52_01CE50BA.6E64C500-- From david@fromorbit.com Tue May 14 16:49:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4AE7C7F37 for ; Tue, 14 May 2013 16:49:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D9550AC009 for ; Tue, 14 May 2013 14:49:11 -0700 (PDT) X-ASG-Debug-ID: 1368568149-04cb6c53a4292260001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 2vLYNzhcivW9CKDE for ; Tue, 14 May 2013 14:49:10 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArMOALOwklF5LKxY/2dsb2JhbABagweDCrg3hRwEAYEBF3SCHwEBBTocIxAIAw4KCSUPBSUDIROIC71kFo1rgR0Hg1UDlzORPoMhKg Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 15 May 2013 07:19:08 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcN5o-0001mg-FX; Wed, 15 May 2013 07:49:08 +1000 Date: Wed, 15 May 2013 07:49:08 +1000 From: Dave Chinner To: Josef Bacik Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device Message-ID: <20130514214908.GL29466@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device References: <1368563722-23452-1-git-send-email-jbacik@fusionio.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368563722-23452-1-git-send-email-jbacik@fusionio.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368568149 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130968 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 14, 2013 at 04:35:22PM -0400, Josef Bacik wrote: > Dave pointed out that xfs was having issues with 311 because of caching issues. > He suggested that I fsck the dm-flakey device to make sure we don't have this > problem. This is the easiest way I could think to accomplish this, please let > me know if this is a bad idea. Thanks, > > Signed-off-by: Josef Bacik > --- > tests/generic/311 | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/tests/generic/311 b/tests/generic/311 > index 2b3b569..f11119b 100644 > --- a/tests/generic/311 > +++ b/tests/generic/311 > @@ -125,7 +125,10 @@ _run_test() > > #Unmount and fsck to make sure we got a valid fs after replay > _unmount_flakey > + tmp=$SCRATCH_DEV > + SCRATCH_DEV=$FLAKEY_DEV > _check_scratch_fs > + SCRATCH_DEV=$tmp > [ $? -ne 0 ] && _fatal "fsck failed" I think this can be done with a pretty simple change to _check_scratch_fs. i.e. pass the device to be checked in as a parameter, and if the parameter is not set, have _check_scratch_fs default to using $SCRATCH_DEV. It's a one-line change to 311, and about 10 lines of (simple) change to _check_scratch_fs.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sophie1@student.luzerne.edu Tue May 14 16:50:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=SUBJECT_NEEDS_ENCODING autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 570C17F37 for ; Tue, 14 May 2013 16:50:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 370F58F8050 for ; Tue, 14 May 2013 14:50:06 -0700 (PDT) X-ASG-Debug-ID: 1368568204-04cb6c53a4292310001-NocioJ Received: from luzerne.edu (student.luzerne.edu [199.224.108.55]) by cuda.sgi.com with ESMTP id 569h3RrLRJRczmim for ; Tue, 14 May 2013 14:50:04 -0700 (PDT) X-Barracuda-Envelope-From: sophie1@student.luzerne.edu X-Barracuda-Apparent-Source-IP: 199.224.108.55 Received: from [41.151.161.76] (account sophie1@student.luzerne.edu) by student.luzerne.edu (CommuniGate Pro WEBUSER 6.0.1) with HTTP id 43956642; Tue, 14 May 2013 17:44:39 -0400 From: "Web Technical" Subject: Développez votre quota de webmail X-Mailer: CommuniGate Pro WebUser v6.0.1 X-ASG-Orig-Subj: Développez votre quota de webmail Date: Tue, 14 May 2013 16:44:39 -0500 Message-ID: MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: student.luzerne.edu[199.224.108.55] X-Barracuda-Start-Time: 1368568204 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.49 X-Barracuda-Spam-Status: No, SCORE=2.49 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA717, MISSING_HEADERS, SUBJECT_NEEDS_ENCODING, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130968 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 1.28 SUBJECT_NEEDS_ENCODING SUBJECT_NEEDS_ENCODING 0.00 TO_CC_NONE No To: or Cc: header 0.00 BSF_SC0_SA717 Custom Rule BSF_SC0_SA717 To: undisclosed-recipients:; Vous avez dépassé votre quota email limite de 450MB. Vous devez mettre à jour votre email quota limite à 2 Go dans les prochaines 48 heures. Utilisez le web ci-dessous un lien pour mettre à niveau votre compte de messagerie: http://homoeoclinic.in/casestudyform/use/formsdirectory/form1.html Merci d'utiliser notre email. From korn-xfs=oss.sgi.com@elan.rulez.org Tue May 14 16:55:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DDABA7F3F for ; Tue, 14 May 2013 16:55:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id AEA1A304070 for ; Tue, 14 May 2013 14:55:57 -0700 (PDT) X-ASG-Debug-ID: 1368568551-04bdf0422428cf10001-NocioJ Received: from chinook.cae-engineering.hu (chinook.cae-engineering.hu [213.165.74.136]) by cuda.sgi.com with ESMTP id IP5Pdk5EzVlKNN48 for ; Tue, 14 May 2013 14:55:52 -0700 (PDT) X-Barracuda-Envelope-From: korn-xfs=oss.sgi.com@elan.rulez.org X-Barracuda-Apparent-Source-IP: 213.165.74.136 Received: (qmail 31187 invoked from network); 14 May 2013 23:55:50 +0200 Received: from korn-home.user.vpn.cae-engineering.hu (HELO hellgate.av.hu) (172.18.32.249) by chinook.vpn.cae-engineering.hu with ESMTP; 14 May 2013 23:55:50 +0200 Received: (qmail 18251 invoked by uid 1000); 14 May 2013 23:55:50 +0200 Date: Tue, 14 May 2013 23:55:50 +0200 From: Andras Korn To: xfs@oss.sgi.com Subject: wishlist: xfs_repair should detect files with too small sizes Message-ID: <20130514215550.GK17260@hellgate> X-ASG-Orig-Subj: wishlist: xfs_repair should detect files with too small sizes MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: chinook.cae-engineering.hu[213.165.74.136] X-Barracuda-Start-Time: 1368568552 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130968 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, I have thousands of files on xfs whose inode claims their size is zero, but they have blocks allocated to them; du(1) reports a nonzero size. xfs_repair 3.1.9 ignores this. xfs_db can be used to recover the contents of the files (using commands like inode 1234; write core.size 4567). David Chinner explained to me that xfs_repair ignores these files because it's legitimate to have blocks beyond eof (e.g. due to fallocate()), and that unwritten extent flagging doesn't help because such extents don't need to be flagged as it's impossible to read them. My zero-sized files were likely effected by a crash (certainly not fallocate()). I think it would be useful to have the ability to distinguish between files that legitimately have extents beyond EOF and files whose inode incorrectly reports a too-small size. Maybe an allocated-size field could be added to the inode, or extents assigned to files via fallocate() could be flagged somehow? And if files with incorrect sizes (i.e. where allocated-size div blocksize < number_of_blocks OR allocated-size < core.size OR where a file contains extents beyond EOF that are not fallocate-flagged) are found, xfs_repair could at least report them? -- Andras Korn WARNING: Do NOT look into laser with remaining eyeball. From sekharan@us.ibm.com Tue May 14 17:19:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9308B7F3F for ; Tue, 14 May 2013 17:19:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3A121AC005 for ; Tue, 14 May 2013 15:19:27 -0700 (PDT) X-ASG-Debug-ID: 1368569965-04bdf0422528e3b0001-NocioJ Received: from e31.co.us.ibm.com (e31.co.us.ibm.com [32.97.110.149]) by cuda.sgi.com with ESMTP id E8jDHC6wUDpppf7p (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 15:19:26 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.149 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.149] Received: from /spool/local by e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 14 May 2013 16:19:25 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.149] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.149] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.149] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.149] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e31.co.us.ibm.com (192.168.1.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 14 May 2013 16:19:24 -0600 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id DA1BB1FF0026 for ; Tue, 14 May 2013 16:14:16 -0600 (MDT) Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4EMJNPL326338 for ; Tue, 14 May 2013 16:19:23 -0600 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4EMJMQi017942 for ; Tue, 14 May 2013 16:19:23 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4EMJMM3017877; Tue, 14 May 2013 16:19:22 -0600 Subject: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Reply-To: sekharan@us.ibm.com To: Jeff Liu Cc: xfs@oss.sgi.com In-Reply-To: <51905AEE.2010304@oracle.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> <51905AEE.2010304@oracle.com> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Tue, 14 May 2013 17:19:21 -0500 Message-ID: <1368569961.3985.5.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051422-7282-0000-0000-0000172DDF8B X-Barracuda-Connect: e31.co.us.ibm.com[32.97.110.149] X-Barracuda-Start-Time: 1368569966 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi Jeff, Thanks for the review. I will fix them in my next (hopefully final :) version. Chandra On Mon, 2013-05-13 at 11:15 +0800, Jeff Liu wrote: > Hi Chandra, > > On 05/11/2013 05:21 AM, Chandra Seetharaman wrote: > > Remove all incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, > > start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts for GQUOTA and > > PQUOTA respectively. > > > > On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. > > > > Read and write of the superblock does the conversion from *OQUOTA* > > to *[PG]QUOTA*. > > > > Signed-off-by: Chandra Seetharaman > > Reviewed-by: Dave Chinner > > --- > > fs/xfs/xfs_mount.c | 41 +++++++++++++++++++++++++++++++++++++++++ > > fs/xfs/xfs_qm.c | 9 ++++++--- > > fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++------------------ > > fs/xfs/xfs_quota.h | 42 ++++++++++++++++++++++++++++-------------- > > fs/xfs/xfs_quotaops.c | 6 ++++-- > > fs/xfs/xfs_super.c | 16 ++++++++-------- > > fs/xfs/xfs_trans_dquot.c | 4 ++-- > > 7 files changed, 110 insertions(+), 47 deletions(-) > > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > index f6bfbd7..1b79906 100644 > > --- a/fs/xfs/xfs_mount.c > > +++ b/fs/xfs/xfs_mount.c > > @@ -564,6 +564,8 @@ xfs_sb_from_disk( > > struct xfs_sb *to, > > xfs_dsb_t *from) > > { > > + bool force_quota_check = false; > > + > > to->sb_magicnum = be32_to_cpu(from->sb_magicnum); > > to->sb_blocksize = be32_to_cpu(from->sb_blocksize); > > to->sb_dblocks = be64_to_cpu(from->sb_dblocks); > > @@ -599,6 +601,21 @@ xfs_sb_from_disk( > > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > > to->sb_qflags = be16_to_cpu(from->sb_qflags); > > + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > > + (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > > + "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > > + force_quota_check = true; > > + } > > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > > + > > to->sb_flags = from->sb_flags; > > to->sb_shared_vn = from->sb_shared_vn; > > to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); > > @@ -618,6 +635,9 @@ xfs_sb_from_disk( > > to->sb_pad = 0; > > to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > > to->sb_lsn = be64_to_cpu(from->sb_lsn); > > + > > + if (force_quota_check) > > + to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); > > } > > > > /* > > @@ -636,11 +656,30 @@ xfs_sb_to_disk( > > xfs_sb_field_t f; > > int first; > > int size; > > + __uint16_t qflags = from->sb_qflags; > > > > ASSERT(fields); > > if (!fields) > > return; > > > > + if (fields & XFS_SB_QFLAGS) { > > + /* > > + * The in-core version of sb_qflags do not have > > + * XFS_OQUOTA_* flags, whereas the on-disk version > > + * does. So, convert incore XFS_{PG}QUOTA_* flags > A minor issue, above line end up with trailing whitespace. > > Thanks, > -Jeff > > + * to on-disk XFS_OQUOTA_* flags. > > + */ > > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > > + > > + if (from->sb_qflags & > > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > > + qflags |= XFS_OQUOTA_ENFD; > > + if (from->sb_qflags & > > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > > + qflags |= XFS_OQUOTA_CHKD; > > + } > > + > > while (fields) { > > f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); > > first = xfs_sb_info[f].offset; > > @@ -650,6 +689,8 @@ xfs_sb_to_disk( > > > > if (size == 1 || xfs_sb_info[f].type == 1) { > > memcpy(to_ptr + first, from_ptr + first, size); > > + } else if (f == XFS_SBS_QFLAGS) { > > + *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); > > } else { > > switch (size) { > > case 2: > > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > > index f41702b..fe4c743 100644 > > --- a/fs/xfs/xfs_qm.c > > +++ b/fs/xfs/xfs_qm.c > > @@ -298,8 +298,10 @@ xfs_qm_mount_quotas( > > */ > > if (!XFS_IS_UQUOTA_ON(mp)) > > mp->m_qflags &= ~XFS_UQUOTA_CHKD; > > - if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) > > - mp->m_qflags &= ~XFS_OQUOTA_CHKD; > > + if (!XFS_IS_GQUOTA_ON(mp)) > > + mp->m_qflags &= ~XFS_GQUOTA_CHKD; > > + if (!XFS_IS_PQUOTA_ON(mp)) > > + mp->m_qflags &= ~XFS_PQUOTA_CHKD; > > > > write_changes: > > /* > > @@ -1280,7 +1282,8 @@ xfs_qm_quotacheck( > > &buffer_list); > > if (error) > > goto error_return; > > - flags |= XFS_OQUOTA_CHKD; > > + flags |= XFS_IS_GQUOTA_ON(mp) ? > > + XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; > > } > > > > do { > > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > > index c41190c..f005f1d 100644 > > --- a/fs/xfs/xfs_qm_syscalls.c > > +++ b/fs/xfs/xfs_qm_syscalls.c > > @@ -117,11 +117,11 @@ xfs_qm_scall_quotaoff( > > } > > if (flags & XFS_GQUOTA_ACCT) { > > dqtype |= XFS_QMOPT_GQUOTA; > > - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); > > + flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); > > inactivate_flags |= XFS_GQUOTA_ACTIVE; > > } else if (flags & XFS_PQUOTA_ACCT) { > > dqtype |= XFS_QMOPT_PQUOTA; > > - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); > > + flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); > > inactivate_flags |= XFS_PQUOTA_ACTIVE; > > } > > > > @@ -335,14 +335,14 @@ xfs_qm_scall_quotaon( > > * quota acct on ondisk without m_qflags' knowing. > > */ > > if (((flags & XFS_UQUOTA_ACCT) == 0 && > > - (mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 && > > - (flags & XFS_UQUOTA_ENFD)) > > - || > > + (mp->m_sb.sb_qflags & XFS_UQUOTA_ACCT) == 0 && > > + (flags & XFS_UQUOTA_ENFD)) || > > ((flags & XFS_PQUOTA_ACCT) == 0 && > > - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && > > - (flags & XFS_GQUOTA_ACCT) == 0 && > > - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && > > - (flags & XFS_OQUOTA_ENFD))) { > > + (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && > > + (flags & XFS_PQUOTA_ENFD)) || > > + ((flags & XFS_GQUOTA_ACCT) == 0 && > > + (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && > > + (flags & XFS_GQUOTA_ENFD))) { > > xfs_debug(mp, > > "%s: Can't enforce without acct, flags=%x sbflags=%x\n", > > __func__, flags, mp->m_sb.sb_qflags); > > @@ -770,9 +770,12 @@ xfs_qm_scall_getquota( > > * gets turned off. No need to confuse the user level code, > > * so return zeroes in that case. > > */ > > - if ((!XFS_IS_UQUOTA_ENFORCED(mp) && dqp->q_core.d_flags == XFS_DQ_USER) || > > - (!XFS_IS_OQUOTA_ENFORCED(mp) && > > - (dqp->q_core.d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { > > + if ((!XFS_IS_UQUOTA_ENFORCED(mp) && > > + dqp->q_core.d_flags == XFS_DQ_USER) || > > + (!XFS_IS_PQUOTA_ENFORCED(mp) && > > + dqp->q_core.d_flags == XFS_DQ_PROJ) || > > + (!XFS_IS_GQUOTA_ENFORCED(mp) && > > + dqp->q_core.d_flags == XFS_DQ_GROUP)) { > > dst->d_btimer = 0; > > dst->d_itimer = 0; > > dst->d_rtbtimer = 0; > > @@ -780,8 +783,8 @@ xfs_qm_scall_getquota( > > > > #ifdef DEBUG > > if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == FS_USER_QUOTA) || > > - (XFS_IS_OQUOTA_ENFORCED(mp) && > > - (dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) && > > + (XFS_IS_PQUOTA_ENFORCED(mp) && dst->d_flags == FS_PROJ_QUOTA) || > > + (XFS_IS_GQUOTA_ENFORCED(mp) && dst->d_flags == FS_GROUP_QUOTA)) && > > dst->d_id != 0) { > > if ((dst->d_bcount > dst->d_blk_softlimit) && > > (dst->d_blk_softlimit > 0)) { > > @@ -833,10 +836,10 @@ xfs_qm_export_flags( > > uflags |= FS_QUOTA_GDQ_ACCT; > > if (flags & XFS_UQUOTA_ENFD) > > uflags |= FS_QUOTA_UDQ_ENFD; > > - if (flags & (XFS_OQUOTA_ENFD)) { > > - uflags |= (flags & XFS_GQUOTA_ACCT) ? > > - FS_QUOTA_GDQ_ENFD : FS_QUOTA_PDQ_ENFD; > > - } > > + if (flags & XFS_PQUOTA_ENFD) > > + uflags |= FS_QUOTA_PDQ_ENFD; > > + if (flags & XFS_GQUOTA_ENFD) > > + uflags |= FS_QUOTA_GDQ_ENFD; > > return (uflags); > > } > > > > diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h > > index c61e31c..ccff1a6 100644 > > --- a/fs/xfs/xfs_quota.h > > +++ b/fs/xfs/xfs_quota.h > > @@ -159,28 +159,43 @@ typedef struct xfs_qoff_logformat { > > #define XFS_GQUOTA_ACCT 0x0040 /* group quota accounting ON */ > > > > /* > > + * Start differentiating group quota and project quota in-core > > + * using distinct flags, instead of using the combined OQUOTA flags. > > + * > > + * Conversion to and from the combined OQUOTA flag (if necessary) > > + * is done only in xfs_sb_{to,from}_disk() > > + */ > > +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ > > +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ > > +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ > > +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ > > + > > +/* > > * Quota Accounting/Enforcement flags > > */ > > #define XFS_ALL_QUOTA_ACCT \ > > (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT) > > -#define XFS_ALL_QUOTA_ENFD (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD) > > -#define XFS_ALL_QUOTA_CHKD (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD) > > +#define XFS_ALL_QUOTA_ENFD \ > > + (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD) > > +#define XFS_ALL_QUOTA_CHKD \ > > + (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD) > > > > #define XFS_IS_QUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT) > > #define XFS_IS_UQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_UQUOTA_ACCT) > > #define XFS_IS_PQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_PQUOTA_ACCT) > > #define XFS_IS_GQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_GQUOTA_ACCT) > > #define XFS_IS_UQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_UQUOTA_ENFD) > > -#define XFS_IS_OQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_OQUOTA_ENFD) > > +#define XFS_IS_PQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_PQUOTA_ENFD) > > +#define XFS_IS_GQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_GQUOTA_ENFD) > > > > /* > > * Incore only flags for quotaoff - these bits get cleared when quota(s) > > * are in the process of getting turned off. These flags are in m_qflags but > > * never in sb_qflags. > > */ > > -#define XFS_UQUOTA_ACTIVE 0x0100 /* uquotas are being turned off */ > > -#define XFS_PQUOTA_ACTIVE 0x0200 /* pquotas are being turned off */ > > -#define XFS_GQUOTA_ACTIVE 0x0400 /* gquotas are being turned off */ > > +#define XFS_UQUOTA_ACTIVE 0x1000 /* uquotas are being turned off */ > > +#define XFS_PQUOTA_ACTIVE 0x2000 /* pquotas are being turned off */ > > +#define XFS_GQUOTA_ACTIVE 0x4000 /* gquotas are being turned off */ > > #define XFS_ALL_QUOTA_ACTIVE \ > > (XFS_UQUOTA_ACTIVE | XFS_PQUOTA_ACTIVE | XFS_GQUOTA_ACTIVE) > > > > @@ -266,24 +281,23 @@ typedef struct xfs_qoff_logformat { > > ((XFS_IS_UQUOTA_ON(mp) && \ > > (mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \ > > (XFS_IS_GQUOTA_ON(mp) && \ > > - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ > > - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT))) || \ > > + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD) == 0) || \ > > (XFS_IS_PQUOTA_ON(mp) && \ > > - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ > > - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT)))) > > + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) > > > > #define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > > XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ > > - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) > > + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) > > > > #define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > > XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ > > - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) > > + XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) > > > > #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ > > XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ > > - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD|\ > > - XFS_GQUOTA_ACCT) > > + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ > > + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|\ > > + XFS_GQUOTA_CHKD) > > > > > > /* > > diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c > > index 71926d6..056d62e 100644 > > --- a/fs/xfs/xfs_quotaops.c > > +++ b/fs/xfs/xfs_quotaops.c > > @@ -75,8 +75,10 @@ xfs_fs_set_xstate( > > flags |= XFS_GQUOTA_ACCT; > > if (uflags & FS_QUOTA_UDQ_ENFD) > > flags |= XFS_UQUOTA_ENFD; > > - if (uflags & (FS_QUOTA_PDQ_ENFD|FS_QUOTA_GDQ_ENFD)) > > - flags |= XFS_OQUOTA_ENFD; > > + if (uflags & FS_QUOTA_PDQ_ENFD) > > + flags |= XFS_PQUOTA_ENFD; > > + if (uflags & FS_QUOTA_GDQ_ENFD) > > + flags |= XFS_GQUOTA_ENFD; > > > > switch (op) { > > case Q_XQUOTAON: > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > > index ea341ce..873fa5a 100644 > > --- a/fs/xfs/xfs_super.c > > +++ b/fs/xfs/xfs_super.c > > @@ -359,17 +359,17 @@ xfs_parseargs( > > } else if (!strcmp(this_char, MNTOPT_PQUOTA) || > > !strcmp(this_char, MNTOPT_PRJQUOTA)) { > > mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | > > - XFS_OQUOTA_ENFD); > > + XFS_PQUOTA_ENFD); > > } else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) { > > mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); > > - mp->m_qflags &= ~XFS_OQUOTA_ENFD; > > + mp->m_qflags &= ~XFS_PQUOTA_ENFD; > > } else if (!strcmp(this_char, MNTOPT_GQUOTA) || > > !strcmp(this_char, MNTOPT_GRPQUOTA)) { > > mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | > > - XFS_OQUOTA_ENFD); > > + XFS_GQUOTA_ENFD); > > } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { > > mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); > > - mp->m_qflags &= ~XFS_OQUOTA_ENFD; > > + mp->m_qflags &= ~XFS_GQUOTA_ENFD; > > } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) { > > xfs_warn(mp, > > "delaylog is the default now, option is deprecated."); > > @@ -563,12 +563,12 @@ xfs_showargs( > > /* Either project or group quotas can be active, not both */ > > > > if (mp->m_qflags & XFS_PQUOTA_ACCT) { > > - if (mp->m_qflags & XFS_OQUOTA_ENFD) > > + if (mp->m_qflags & XFS_PQUOTA_ENFD) > > seq_puts(m, "," MNTOPT_PRJQUOTA); > > else > > seq_puts(m, "," MNTOPT_PQUOTANOENF); > > } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { > > - if (mp->m_qflags & XFS_OQUOTA_ENFD) > > + if (mp->m_qflags & XFS_GQUOTA_ENFD) > > seq_puts(m, "," MNTOPT_GRPQUOTA); > > else > > seq_puts(m, "," MNTOPT_GQUOTANOENF); > > @@ -1136,8 +1136,8 @@ xfs_fs_statfs( > > spin_unlock(&mp->m_sb_lock); > > > > if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && > > - ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) == > > - (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD)) > > + ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) == > > + (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD)) > > xfs_qm_statvfs(ip, statp); > > return 0; > > } > > diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c > > index fec75d0..8cdbd62 100644 > > --- a/fs/xfs/xfs_trans_dquot.c > > +++ b/fs/xfs/xfs_trans_dquot.c > > @@ -640,8 +640,8 @@ xfs_trans_dqresv( > > if ((flags & XFS_QMOPT_FORCE_RES) == 0 && > > dqp->q_core.d_id && > > ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) || > > - (XFS_IS_OQUOTA_ENFORCED(dqp->q_mount) && > > - (XFS_QM_ISPDQ(dqp) || XFS_QM_ISGDQ(dqp))))) { > > + (XFS_IS_PQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISPDQ(dqp)) || > > + (XFS_IS_GQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISGDQ(dqp)))) { > > if (nblks > 0) { > > /* > > * dquot is locked already. See if we'd go over the > > > From david@fromorbit.com Tue May 14 19:47:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1E4217F37 for ; Tue, 14 May 2013 19:47:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0D7488F8049 for ; Tue, 14 May 2013 17:47:49 -0700 (PDT) X-ASG-Debug-ID: 1368578867-04cbb05fe3299d00001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 9C16plw8JcsnUSPr for ; Tue, 14 May 2013 17:47:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArMOAGfaklF5LKxY/2dsb2JhbABagweDCrg+hRwEAYEBF3SCHwEBBAE6HCMFCwgDGAklDwUlAyETiAYFvT4WjWuBHQeDVQOXM4oZhyWDISo Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 15 May 2013 10:17:38 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcPsW-00023l-Pk; Wed, 15 May 2013 10:47:36 +1000 Date: Wed, 15 May 2013 10:47:36 +1000 From: Dave Chinner To: Andras Korn Cc: xfs@oss.sgi.com Subject: Re: wishlist: xfs_repair should detect files with too small sizes Message-ID: <20130515004736.GM29466@dastard> X-ASG-Orig-Subj: Re: wishlist: xfs_repair should detect files with too small sizes References: <20130514215550.GK17260@hellgate> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130514215550.GK17260@hellgate> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368578867 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130978 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 14, 2013 at 11:55:50PM +0200, Andras Korn wrote: > Hi, > > I have thousands of files on xfs whose inode claims their size is zero, but > they have blocks allocated to them; du(1) reports a nonzero size. xfs_repair > 3.1.9 ignores this. xfs_db can be used to recover the contents of the files > (using commands like inode 1234; write core.size 4567). > > David Chinner explained to me that xfs_repair ignores these files because > it's legitimate to have blocks beyond eof (e.g. due to fallocate()), and Actually due to speculative preallocation done by delayed allocation. > that unwritten extent flagging doesn't help because such extents don't need > to be flagged as it's impossible to read them. fallocate will leave unwritten extents beyond EOF, in which case we can detect it, but we know there's nothing to be done as there's no data.... > My zero-sized files were likely effected by a crash (certainly not > fallocate()). > > I think it would be useful to have the ability to distinguish between files > that legitimately have extents beyond EOF and files whose inode incorrectly > reports a too-small size. How? Add a transaction to track the data that has been written? Well, we already do that - with the inode size. How do we prevent that from going missing when the application doesn't use fsync()? By making all inode size update transactions synchronous. i.e. really, really slow. Really, the problem you see is that the applicaiton is not using fsync, and so there's no guarantee what part of the change has got to disk when a crash occurs. > Maybe an allocated-size field could be added to the inode, That's in the extent map. > or extents > assigned to files via fallocate() could be flagged somehow? They are flagged as unwritten, even beyond EOF. > And if files > with incorrect sizes (i.e. where allocated-size div blocksize < number_of_blocks > OR allocated-size < core.size OR where a file contains extents beyond EOF > that are not fallocate-flagged) are found, xfs_repair could at least report > them? Like I said - how do you reliably determine that there's data in the blocks if you can lose the update that indicates that there's data in the blocks? Cheers, Dave. -- Dave Chinner david@fromorbit.com From bo.li.liu@oracle.com Tue May 14 20:43:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 58C177F37 for ; Tue, 14 May 2013 20:43:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4527E304062 for ; Tue, 14 May 2013 18:43:16 -0700 (PDT) X-ASG-Debug-ID: 1368582192-04cb6c53a429d3b0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id HWmAcZtsRxTnYJbD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 18:43:12 -0700 (PDT) X-Barracuda-Envelope-From: bo.li.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4F1hAGW006937 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 15 May 2013 01:43:11 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4F1h9j4018084 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 15 May 2013 01:43:10 GMT Received: from abhmt113.oracle.com (abhmt113.oracle.com [141.146.116.65]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4F1h9Un023727; Wed, 15 May 2013 01:43:09 GMT Received: from liubo.jp.oracle.com (/10.191.10.67) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 May 2013 18:43:08 -0700 Date: Wed, 15 May 2013 09:42:50 +0800 From: Liu Bo To: Eric Sandeen Cc: xfs-oss , linux-btrfs Subject: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output Message-ID: <20130515014249.GA20202@liubo.jp.oracle.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output Reply-To: bo.li.liu@oracle.com References: <517ACB41.2030002@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <517ACB41.2030002@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368582192 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130982 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Fri, Apr 26, 2013 at 01:45:21PM -0500, Eric Sandeen wrote: > test 284 had... some issues. > > First, it took so long nobody ran it; so shorten the extent > count by a factor of about 100. > > Having fixed that, we see failures in 2 cases; when start or > len is -1, but the golden output file didn't have error > output, as if they should pass. > > I'm going to argue that these *should* both fail; start = -1 > has no real meaning. length = -1 might mean "the rest > of the file" but if that's what you really want, just > don't specify -l. > > So add failure output for those cases. > > Send all command output to $seq.full, in case that changes > in the future; just capture the return value. > > Then remove the return value echo on failure (50?) because > who knows when that might change to some other magic value. > > Ok, then when defrag actually works, old defrag returned > "20" (because?) but a recent commit changed it to 0. > So accommodate that too. > > And remove a stray "HAVE_DEFRAG=1" while we're at it. > That variable is never used. Thanks for working on this, Eric! You can add Reviewed-by: Liu Bo thanks, liubo > > Signed-off-by: Eric Sandeen > --- > > diff --git a/tests/btrfs/284 b/tests/btrfs/284 > old mode 100644 > new mode 100755 > index d952977..67161a3 > --- a/tests/btrfs/284 > +++ b/tests/btrfs/284 > @@ -26,7 +26,7 @@ seqres=$RESULT_DIR/$seq > echo "QA output created by $seq" > here="`pwd`" > tmp=/tmp/$$ > -cnt=11999 > +cnt=119 > filesize=48000 > > status=1 # failure is the default! > @@ -58,11 +58,12 @@ _create_file() > _btrfs_online_defrag() > { > str="" > + # start = -1 is invalid, should fail > if [ "$2" = "2" ];then > str="$str -s -1 -l $((filesize / 2)) " > elif [ "$2" = "3" ];then > str="$str -s $((filesize + 1)) -l $((filesize / 2)) " > - HAVE_DEFRAG=1 > + # len = -1 is invalid, should fail > elif [ "$2" = "4" ];then > str="$str -l -1 " > elif [ "$2" = "5" ];then > @@ -76,20 +77,22 @@ _btrfs_online_defrag() > fi > > if [ "$str" != "" ]; then > - $BTRFS_UTIL_PROG filesystem defragment $str $SCRATCH_MNT/tmp_file > + $BTRFS_UTIL_PROG filesystem defragment $str $SCRATCH_MNT/tmp_file >> $seq.full 2>&1 > else > if [ "$1" = "1" ];then > - $BTRFS_UTIL_PROG filesystem defragment $SCRATCH_MNT/tmp_file > + $BTRFS_UTIL_PROG filesystem defragment $SCRATCH_MNT/tmp_file >> $seq.full 2>&1 > elif [ "$1" = "2" ];then > - $BTRFS_UTIL_PROG filesystem defragment $SCRATCH_MNT/tmp_dir > + $BTRFS_UTIL_PROG filesystem defragment $SCRATCH_MNT/tmp_dir >> $seq.full 2>&1 > elif [ "$1" = "3" ];then > - $BTRFS_UTIL_PROG filesystem defragment $SCRATCH_MNT > + $BTRFS_UTIL_PROG filesystem defragment $SCRATCH_MNT >> $seq.full 2>&1 > fi > fi > ret_val=$? > _scratch_remount > - if [ $ret_val -ne 20 ];then > - echo "btrfs filesystem defragment failed! err is $ret_val" > + # Older defrag returned "20" for success > + # e9393c2 btrfs-progs: defrag return zero on success > + if [ $ret_val -ne 0 -a $ret_val -ne 20 ]; then > + echo "btrfs filesystem defragment failed!" > fi > } > > @@ -140,19 +143,19 @@ _scratch_mount > _require_defrag > > echo "defrag object | defragment range | defragment compress" > -echo "a single file | default | off" > +echo "a single file | default | off" > _rundefrag 1 1 1 > > echo "a single file | default | on" > _rundefrag 1 1 2 > > -echo "a single file | start < 0 && 0 < len < file size | off" > +echo "a single file | start < 0 && 0 < len < file size | off (should fail)" > _rundefrag 1 2 1 > > echo "a single file | start > file size && 0 < len < file size | off" > _rundefrag 1 3 1 > > -echo "a single file | start = 0 && len < 0 | off" > +echo "a single file | start = 0 && len < 0 | off (should fail)" > _rundefrag 1 4 1 > > echo "a single file | start = 0 && len > file size | off" > diff --git a/tests/btrfs/284.out b/tests/btrfs/284.out > index 4a69f82..c942271 100644 > --- a/tests/btrfs/284.out > +++ b/tests/btrfs/284.out > @@ -1,10 +1,12 @@ > QA output created by 284 > defrag object | defragment range | defragment compress > -a single file | default | off > +a single file | default | off > a single file | default | on > -a single file | start < 0 && 0 < len < file size | off > +a single file | start < 0 && 0 < len < file size | off (should fail) > +btrfs filesystem defragment failed! > a single file | start > file size && 0 < len < file size | off > -a single file | start = 0 && len < 0 | off > +a single file | start = 0 && len < 0 | off (should fail) > +btrfs filesystem defragment failed! > a single file | start = 0 && len > file size | off > a single file | start = 0 && 0 < len < file size | off > a directory | default | off > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From Contact@sporetuition.com Wed May 15 00:17:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=3.0 required=5.0 tests=DEAR_SOMETHING, ENGLISH_UCE_SUBJECT,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A7A377F37 for ; Wed, 15 May 2013 00:17:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 946B78F8066 for ; Tue, 14 May 2013 22:17:11 -0700 (PDT) X-ASG-Debug-ID: 1368595026-04cbb05fe52a5c10001-NocioJ Received: from vps.illumsg.com (vps.illumsg.com [119.31.234.249]) by cuda.sgi.com with ESMTP id HUmduYfPkO8ZbUUt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 22:17:07 -0700 (PDT) X-Barracuda-Envelope-From: Contact@Sporetuition.com X-Barracuda-Apparent-Source-IP: 119.31.234.249 Received: from [183.90.67.11] (port=50316 helo=jasonPC) by vps.illumsg.com with esmtpa (Exim 4.80) (envelope-from ) id 1UcTtS-0001kt-FN; Wed, 15 May 2013 13:04:50 +0800 From: "Contact@Sporetuition" To: "Contact@Sporetuition" References: In-Reply-To: Subject: Reliable tuition in Singapore for your child? Date: Wed, 15 May 2013 13:04:50 +0800 X-ASG-Orig-Subj: Reliable tuition in Singapore for your child? Message-ID: <000c01ce5129$bd3502c0$379f0840$@Sporetuition.com> MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_000_000D_01CE516C.CB7344D0" X-Mailer: Microsoft Outlook 14.0 Thread-Index: Ac42iYYL7Dx6xhYwS8KOlGD2QgO9ngArJDxAAQLQqjAADAp4YAADC8ggABUh2eAAAicmAAAJ7lnwA5Hsa7AAbsy58ABGxKyAAJ8a0OAABK9McABef/oQ Content-Language: en-sg X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - vps.illumsg.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - Sporetuition.com X-Get-Message-Sender-Via: vps.illumsg.com: authenticated_id: contact@sporetuition.com X-Source: X-Source-Args: X-Source-Dir: X-Barracuda-Connect: vps.illumsg.com[119.31.234.249] X-Barracuda-Start-Time: 1368595027 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, HTML_MESSAGE, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.130996 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain This is a multipart message in MIME format. ------=_NextPart_000_000D_01CE516C.CB7344D0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_000E_01CE516C.CB7344D0" ------=_NextPart_001_000E_01CE516C.CB7344D0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit cid:image001.jpg@01CE27EF.996B34D0 Date: 15 May 2013 Tel: +65 8355 0181 Email: Contact@SporeTuition.com Dear Sir/ Madam, Think your child can do better in school with more guidance? Worried that your child is unable to grasp what is taught in school? Don't know where to look for qualified reliable and dedicated tutors in Singapore? Look no further and let Spore help you today! Did you know? 23% of Singaporeans think kids should start tuition in PRE-SCHOOL 67% of Singaporeans currently HAVE or HAVE PREVIOUSLY enrolled their children in tuition 46% of Singaporeans thinks tuition is necessary for kids to stay competitive with their peers Why us? Spore has a thorough screening process to ensure the quality of tuition teachers assigned to help your child. With a large database of ready tutors (undergraduates, graduates, full time tutors, NIE trainee, former teachers, teachers) able to teach a wide range of subjects and levels, we are confident that we will meet your needs, effectively and quickly. If you are not satisfied with the tutor assigned, replacement will be done F.O.C. We will also seek to keep an open line of communication between parents, tutors and ourselves because your feedbacks are tremendously valued. We are dedicated in providing the BEST service. Current tuition rates: Student Level Pre-school Primary 1 - 3 Primary 4 - 6 Sec 1 / 2 Sec 3 / 4 / 5 ITE A Level / Diploma Tutor Qualification 'A' Level / Diploma $15 - 20 $15 - 25 $15 - 30 $20 - 30 $20 - 35 $20 - 40 - University undergraduate $20 - 30 $20 - 35 $25 - 35 $25 - 40 $25 - 40 $25 - 45 $30 - 70 Full-time Tutors (degree holders) $25 - 30 $25 - 40 $30 - 50 $30 - 50 $35 - 60 $35 - 60 $35 - 70 NIE Trainee $20 - 30 $20 - 35 $25 - 35 $25 - 45 $30 - 50 $30 - 60 $35 - 70 NIE-trained Current/Ex School teachers $30 - 40 $30 - 45 $35 - 50 $40 - 60 $40 - 70 $50 - 90 $60 - 120 Spore provides FREE services for parents looking to engage tutors for their children. All commissions are obtained from the tutors only. Hesitate no more and call/email/sms us today! We will be glad to answer all your queries. Tutors who wish to sign up can contact us at our email address/via sms as well. Warmest Regards Jason Soh Contact Representative cid:image004.jpg@01CE33DD.8DA8EC10 Tel: +65 8355 0181 Email: Contact@SporeTuition.com Website: http://www.SporeTuition.com To Unsubscribe, kindly email (UNSUB) to contact@SporeTuition.com , Thank you very much. ------=_NextPart_001_000E_01CE516C.CB7344D0 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

3D"cid:image001.jpg@01CE27EF.996B34D0"

         &= nbsp;           &n= bsp;           &nb= sp;           &nbs= p;            = ;            =             &= nbsp;           &n= bsp;           &nb= sp;           &nbs= p;            = ;            =             &= nbsp;           &n= bsp;           &nb= sp;           &nbs= p;            = ;            =             &= nbsp;           &n= bsp;       = Date: 15 May = 2013

   Tel: +65 8355 = 0181           &nb= sp;           &nbs= p;      

  Email: Contact@SporeTuition.com =

         &nb= sp;           &nbs= p;            = ;            =             &= nbsp;           &n= bsp;           &nb= sp;           &nbs= p;            = ;            =             &= nbsp;           &n= bsp;           &nb= sp;           &nbs= p;            =   

Dear = Sir/ Madam,

 

Think = your child can do better in school with more guidance? =

Worried = that your child is unable to grasp what is taught in = school?

Don’t know where to look for qualified = reliable and dedicated tutors in = Singapore?

 

Look no = further and let Spore help = you today!


Did you know?

23% of Singaporeans think kids should start tuition in = PRE-SCHOOL

67% of = Singaporeans currently HAVE or HAVE PREVIOUSLY enrolled their children = in tuition

46% of = Singaporeans thinks tuition is necessary for kids to stay competitive = with their peers

 

Why = us?

Spore has a = thorough screening process to ensure the quality of tuition = teachers assigned to help your child. With a large database of = ready
tutors (undergraduates, graduates, full time tutors, NIE = trainee, former teachers, teachers) able to teach a wide range of = subjects and
levels, we are confident that we will meet your needs, = effectively and quickly.  If you are not satisfied with the tutor = assigned, replacement will
be done F.O.C.

 

We will = also seek to keep an open line of communication between parents, tutors = and ourselves because your feedbacks are tremendously valued.
We are = dedicated in providing the BEST = service.

 

Current tuition = rates:

Student Level

Pre-school

Primary 1 - = 3

Primary 4 - 6

Sec 1 / = 2

Sec 3 / 4 / 5

ITE

A Level / = Diploma

Tutor = Qualification

'A' Level / = Diploma

$15 - = 20

$15 - 25

$15 - = 30

$20 - 30

$20 - = 35

$20 - 40

-

University = undergraduate

$20 - = 30

$20 - 35

$25 - = 35

$25 - 40

$25 - = 40

$25 - 45

$30 - = 70

Full-time Tutors (degree = holders)

$25 - = 30

$25 - 40

$30 - = 50

$30 - 50

$35 - = 60

$35 - 60

$35 - = 70

NIE Trainee

$20 - = 30

$20 - 35

$25 - = 35

$25 - 45

$30 - = 50

$30 - 60

$35 - = 70

NIE-trained Current/Ex School = teachers

$30 - = 40

$30 - 45

$35 - = 50

$40 - 60

$40 - = 70

$50 - 90

$60 - = 120

 

Spore provides FREE = services for parents looking to engage tutors for their children. All = commissions are obtained from the tutors only.

 

Hesitate no more and call/email/sms us = today! We will = be glad to answer all your queries.

 

Tutors = who wish to sign up can contact us at our email address/via sms as = well.

 

Warmest = Regards

Jason = Soh

Contact = Representative

3D"cid:image004.jpg@01CE33DD.8DA8EC10"

Tel: +65 8355 0181

Email: Contact@SporeTuition.com

Website: = http://www.SporeTuition.com

 =

 

 

To Unsubscribe, kindly = email (UNSUB) to contact@SporeTuition.com , Thank you very = much.

 

 

------=_NextPart_001_000E_01CE516C.CB7344D0-- ------=_NextPart_000_000D_01CE516C.CB7344D0 Content-Type: image/jpeg; name="image001.jpg" Content-Transfer-Encoding: base64 Content-ID: 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 cm0AAAAPcHJpbnRTaXh0ZWVuQml0Ym9vbAAAAAALcHJpbnRlck5hbWVURVhUAAAAAQAAAAAAD3By aW50UHJvb2ZTZXR1cE9iamMAAAAMAFAAcgBvAG8AZgAgAFMAZQB0AHUAcAAAAAAACnByb29mU2V0 dXAAAAABAAAAAEJsdG5lbnVtAAAADGJ1aWx0aW5Qcm9vZgAAAAlwcm9vZkNNWUsAOEJJTQQ7AAAA AAItAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAAXAAAAAENwdG5ib29sAAAAAABD bGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABDbnRDYm9vbAAAAAAATGJsc2Jv b2wAAAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJvb2wAAAAAAEJja2dPYmpjAAAA AQAAAAAAAFJHQkMAAAADAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAAR3JuIGRvdWJAb+AAAAAAAAAA AABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1Js dAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBX/ySAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQ Z1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVu dEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAAAAAAQY3JvcFdoZW5QcmludGlu Z2Jvb2wAAAAADmNyb3BSZWN0Qm90dG9tbG9uZwAAAAAAAAAMY3JvcFJlY3RMZWZ0bG9uZwAAAAAA AAANY3JvcFJlY3RSaWdodGxvbmcAAAAAAAAAC2Nyb3BSZWN0VG9wbG9uZwAAAAAAOEJJTQPtAAAA AAAQAF/8kgABAAIAX/ySAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAE AAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEA AAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAy AAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA//////////// /////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///////////// ////////////////A+gAAAAA/////////////////////////////wPoAAA4QklNBAAAAAAAAAIA AjhCSU0EAgAAAAAABgAAAAAAADhCSU0EMAAAAAAAAwEBAQA4QklNBC0AAAAAAAYAAQAAAAc4QklN BAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADQQAAAAYA AAAAAAAAAAAAAMgAAAOtAAAABgBiAGEAbgBuAGUAcgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAA AAAAAAAAAAADrQAAAMgAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAA AAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcA AAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAMgAAAAAUmdodGxvbmcAAAOtAAAABnNs aWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAA B2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2Vu ZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAA AQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxv bmcAAADIAAAAAFJnaHRsb25nAAADrQAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAA AAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxi b29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6 QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdk ZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAA CXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRs b25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAI/8AAAAAAAADhC SU0EFAAAAAAABAAAAAk4QklNBAwAAAAACRQAAAABAAAAoAAAACIAAAHgAAA/wAAACPgAGAAB/9j/ 7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgT ExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4U FA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIACIA oAMBIgACEQEDEQH/3QAEAAr/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEB AQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEy BhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80Yn lKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUB AAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMX ZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAM AwEAAhEDEQA/AO6FJcYASNIGnKtent76+Sw/rL9asT6villlf2jIv3FtQeG7QNvus+l9Lf7FPLII izswiN6N6wVVN32vbW2QNziGiTo0SVmdX6903pWIMgvbl2PLW049D2uc8ul07xvY1uxrnrh/rB9Z +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 ZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRh IHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAx MSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5z OnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6 RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94 YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxu czpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnht cE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpzdFJlZj0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0 b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIw MTMtMDMtMjNUMTc6NDA6MzYrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDEzLTAzLTIzVDE3OjUz OjQwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDEzLTAzLTIzVDE3OjUzOjQwKzA4OjAwIiBk Yzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJ Q0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpB NkI4MDBGMzlFOTNFMjExQURDM0Q5QjI2M0I5QUUxRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRp ZDpBM0I4MDBGMzlFOTNFMjExQURDM0Q5QjI2M0I5QUUxRiIgeG1wTU06T3JpZ2luYWxEb2N1bWVu dElEPSJ4bXAuZGlkOkEzQjgwMEYzOUU5M0UyMTFBREMzRDlCMjYzQjlBRTFGIj4gPHhtcE1NOkhp c3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5z dGFuY2VJRD0ieG1wLmlpZDpBM0I4MDBGMzlFOTNFMjExQURDM0Q5QjI2M0I5QUUxRiIgc3RFdnQ6 d2hlbj0iMjAxMy0wMy0yM1QxNzo0MDozNiswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRv YmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZl cnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5k LmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omlu c3RhbmNlSUQ9InhtcC5paWQ6QTRCODAwRjM5RTkzRTIxMUFEQzNEOUIyNjNCOUFFMUYiIHN0RXZ0 OndoZW49IjIwMTMtMDMtMjNUMTc6NTM6MTgrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFk b2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkg c3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpBNUI4MDBGMzlF OTNFMjExQURDM0Q5QjI2M0I5QUUxRiIgc3RFdnQ6d2hlbj0iMjAxMy0wMy0yM1QxNzo1Mzo0MCsw ODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cyki IHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RF dnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGlt YWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRl cnM9ImNvbnZlcnRlZCBmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1h Z2UvanBlZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9 InhtcC5paWQ6QTZCODAwRjM5RTkzRTIxMUFEQzNEOUIyNjNCOUFFMUYiIHN0RXZ0OndoZW49IjIw MTMtMDMtMjNUMTc6NTM6NDArMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rv c2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBN TTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpB NUI4MDBGMzlFOTNFMjExQURDM0Q5QjI2M0I5QUUxRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp ZDpBM0I4MDBGMzlFOTNFMjExQURDM0Q5QjI2M0I5QUUxRiIgc3RSZWY6b3JpZ2luYWxEb2N1bWVu dElEPSJ4bXAuZGlkOkEzQjgwMEYzOUU5M0UyMTFBREMzRDlCMjYzQjlBRTFGIi8+IDwvcmRmOkRl c2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUND X1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAA AABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0 AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRk bW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAA ABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAE PAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAA ZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIu MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA AAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFla IAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRw Oi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYt Mi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYt Mi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAA AAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAA AVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAAC c2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoA TwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDb AOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsB kgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKE Ao4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD xwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJ BVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkH Kwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglP CWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL 4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62 DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegS BxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWb Fb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZ txndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4W HkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0j CiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/ KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEu Fi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQr NGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI6 7zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHu QjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJ qUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGb UeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4Wgda VlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GND Y5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9t CG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4 d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuB zYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zK jTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyY uJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTH pTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx 1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/ v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXN Nc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA 3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq 5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX +uf7d/wH/Jj9Kf26/kv+3P9t////7gAOQWRvYmUAZEAAAAAB/9sAhAAEAwMDAwMEAwMEBgQDBAYH BQQEBQcIBgYHBgYICggJCQkJCAoKDAwMDAwKDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQQFBQgHCA8K Cg8UDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/ wAARCADIA60DAREAAhEBAxEB/90ABAB2/8QBogAAAAcBAQEBAQAAAAAAAAAABAUDAgYBAAcICQoL AQACAgMBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFB UQYTYSJxgRQykaEHFbFCI8FS0eEzFmLwJHKC8SVDNFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkK GBmElEVGpLRW01UoGvLj88TU5PRldYWVpbXF1eX1ZnaGlqa2xtbm9jdHV2d3h5ent8fX5/c4SFho eIiYqLjI2Oj4KTlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+hEAAgIBAgMFBQQFBgQIAwNtAQAC EQMEIRIxQQVRE2EiBnGBkTKhsfAUwdHhI0IVUmJy8TMkNEOCFpJTJaJjssIHc9I14kSDF1STCAkK GBkmNkUaJ2R0VTfyo7PDKCnT4/OElKS0xNTk9GV1hZWltcXV5fVGVmZ2hpamtsbW5vZHV2d3h5en t8fX5/c4SFhoeIiYqLjI2Oj4OUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6/9oADAMBAAIRAxEA PwD02YW/5aLn/pKn/wCa83X5fH3fe6j8xPvd6L/8tFz/ANJU/wDzXj+Xx9y/mMne70G/5aLr/pKn /wCa8fy+PuX8xk72vRf/AJaLqv8AzFT/APNeP5fH3L+Yn3u9Fv8Alouv+kmf/mvH8vj7l/MZO93o uP8Aj5uf+kqf/mvH8vj7l/MT73ei/wDy03X/AElT/wDNeP5fH3L+Yn3u9F/+Wm6/6Sp/+a8fy2Pu X8xk73ei/wDy0XX/AElT/wDNeP5fH3L+Yn3u9F9v9Iuf+kqf/mvB+Xx9y/mJ97Xov/y03P8A0lT/ APNeP5bH3L+Yn3u9F/8Alpuv+kqf/mvD+Xx933r+Yyd7vRk/5abmv/MTP/zXg/LY+5fzE+93oyf8 tN1/0lT/APNeH8vj7l/MZO9r0pP+Wm6/6SZ/+a8fy+PuX8xPvd6Un/LTdf8ASTP/AM14/l8fd96/ mMne16b/APLTdf8ASTP/AM14/l8fcv5jJ3uEcn/LTc/9JM//ADXj+Xx933r+Yyd7vTk/5abmv/MT P/zXj+Xx933r+Yn3u9OT/lpuv+kmf/mvH8vj7l/MZO9r05P+Wm5/6SZ/+a8fy+Pu+9fzGTvbEcne 5uv+kmf/AJrwflsfcv5ife705P8Alpuv+kmf/mvD+Wx9y/mMne16cn/LTdf9JM//ADXg/LY+5fzE +93pyf8ALTdf9JM//NeP5bH3L+Yn3u4S/wDLTdf9JM//ADXh/L4+5P5ife36M1Ki5uaf8xM//NeD 8tj7k+Pk71wglIqLm5/6SZ/+a8H5fH3L42TvVVgNaGa6Ndq/Wrjb/kpg/L4+5l40+9trR12M90D2 P1q4p/xPEYMfcnxp97Zt1NFFxdKex+tT7/fJtg/Lw7l8afelfmDUrDy1pz6pq2ozw2q7RcbuZnnb +WIep8ZHfj0yvJHDjjxS5JE8kjQ5sfj/ADE8pzW6XSaveei9zHZJWW5DNNMKqVHOpUdOXjmvh2ho JRMhLYHh6/UfxzbpY9TE0R9zJo3WdfUt7+eaIEr6kV3My8h1FQ/Ud82wwYpCxv8AFxTmyDmVQRzN 0ubon2uZz/xvh/LY+770ePPvd6ctaG7uOVK8frU3KniR6lQPfH8vj7k+Pk73enL/AMtNz/0kz/8A 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 ------=_NextPart_000_000D_01CE516C.CB7344D0 Content-Type: image/jpeg; name="image004.jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMg IyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD3/2wBDAQsLCw8NDx0QEB09KSMpPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT3/wAARCAA2AIYDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2asy6 1gJdfZbOI3Nz3UHCr9TV28kaGynkX7yRsw+uKxfCYQ2txJ1lL/Me+Mf/AK6iTd1FGU5PmUF1Lpl1 hV3fZ7R/9hXIP51Lpupf2gkmYXheJtrq3rV2o4YEheVkzmVt7fXGP6U7NPcpRae5LRTWZUGWIA9S ab50fleZvXy8Z3Z4/OqLJKKrxX1tO+yK4idvQMM1PRe4k09haKa8ixqWdgqjqScCqw1SyZ9ou4Sf 98UrpA2luW6KQEEAg5B9KCQBknA96YxaKjE8bRGQSIYx/Fnj86SGeKdd0MiyLnGVORRcV0S0VDPd QWwBnlSMHpubFNt762uuIJ45COytzSutgur2LFFFFMY11DoysMgjBFcu/h/ULOdm0+b5D0w+049D XUsQqknoBmmQTJcQpLGco4yD7VEoKW5nOnGe5zRutfslLSxs6DqSob+VaOja4NSJilQJMBkY6MPa teuWsoB/wlsv2cfu42YnHQcf4moacGrMyalTkrO6ZY8S2MMdobld/mNIAcuSOfapNO0v7dp9u985 eIIPLhU4UD1Pqak8U/8AIJH/AF0Wruj/APIItf8ArmKOVObBQi6rXkY2seH47eA3NjuQx/MyZ7eo rR0C/e+0/MpzJGdrH19DVvUpkg06eSQ/KEI+uRis/wAOWjwaSWcYaYlgD6YwKajyz0GoqFX3exmN Odb1vy5i32SMn5V6YHr9a6B7WxlhaAwxbB8pAXp/9euMju4NN+0tfLmEEB12sSMN146Y9at6drWn 3T7odROyVtoVmHmOenU9sDjvVUqblDnJoyi1727L+lXMmm6u2nO5eBz+7J7Z5FWvEdnEbCW5+fzA R/GcdcdOlZ0i+b4mtRGvI2k49uc/lWx4i/5As31X+dZr4ZLsCXuTj2uZul6Y+p6TEs8zR26k7ET+ I56mr9tD/YGkTmQh9rFlI/iz0p/hz/kCw/Vv50eIo2k0abb/AAkMfoDTiko8y3sOMVGnzrexV0G1 W+WS/vAJpnchdwyFA9BT/EFikdp9stwIp4CCGQYyKq6Bp9nfWJMqsZUYhsOR9K1U0KwRgfJLY7M5 I/KiKbhsKEXKna25JpN79v06OY439Hx6iiraIsahUUKo6ADAorVbanTFNLUJFLxOoOCQQDWDaW2s aXH5MaQ3MI+6C2CK6Cik431JlDmd7mQ39s3Q2bYLRT1cNub8KtadpkOnRFY8s7cu7dWNXaKFHW4K CTu9WY3in/kEj/rotVNLXWILSEwCGeBlBVXbBUelWvFP/IJH/XRau6P/AMgi1/65is7XqGLjzVnr 0K/9n3F9Ij6m6eWhysEf3c+571qAYHtRS1qlY3jFIx7vSpUv/t1gU8xuJIn+7IO9Ymh+Gn0i6urg 6bHPczMTG0gULEMk4B/H9K6K4jZLp5IYySEUghc87ufxxTJXuXVyFcHD4ITBAyMfpSTcbqOlzFwj e4um6WbaaS5uXEl1L95h0X2FN1eC8vbaS2hhj2MR87SY/TFSb7lTJtBAyxU7OWOBj+tSRSXJuBvB 2FmBG3oMcHNKytYvlXLylXSYb6wto7aW3jKqT84k6An0xWoyq6FWAKsMEHuKp3JmM4ljVisJHyjO XB649eP5VG11P5kgQ5IJCLt+9gjkH2FC91WHG0VylEaNeaZdmfS5EZG6xSHHHpVjztbnOwW9vAD1 ctux+FWWkugflJICg/c6/N0/KhprgR+Z825Xw0e3qM44P5VKilsQoJbXSLsKskSqzl2A5Y9zRSxh ggDncwHJ9aK1Nx1FFFABRRRQBnXWiwXrEzyTsM5C+ZwPoKks9MiscCGWbYOiM+V/Kiip5Ve5PJG9 7al2iiiqKCiiigAooooASmrEituVQDRRQA6kZFYqWGSpyPaiigB1FFFAH//Z ------=_NextPart_000_000D_01CE516C.CB7344D0-- From serdar@anafen.com Wed May 15 00:57:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3C1CE7F37 for ; Wed, 15 May 2013 00:57:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 22F0F8F806F for ; Tue, 14 May 2013 22:57:09 -0700 (PDT) X-ASG-Debug-ID: 1368597419-04cb6c53a42a85d0001-NocioJ Received: from mail.anafen.com (smtp.anafen.com [77.79.101.12]) by cuda.sgi.com with ESMTP id 0JR9upvQqXH0ruKA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 22:57:00 -0700 (PDT) X-Barracuda-Envelope-From: serdar@anafen.com X-Barracuda-Apparent-Source-IP: 77.79.101.12 DKIM-Signature: a=rsa-sha1; t=1368597417; x=1369202217; s=m512; d=anafen.com; c=relaxed/relaxed; v=1; bh=52FKvi84Z8mGNmIyhZzwexngmEY=; h=From:Subject:Date:Message-ID:To:MIME-Version:Content-Type; b=hwhAWDrQnNKQlAvJK2KvODeo5D0u4r4MZp+Q/sJ/4u5106oA2OXKgKjrCmqxNCyhGJgmP3JyEkzn+1qTOO+6Xw== Received: from vzdhlptx ([219.138.238.209]) by mail.anafen.com (Anafen email server v1.1) with ASMTP id AKT62655; Wed, 15 May 2013 08:56:55 +0300 From: "P" Subject: =?GB2312?B?yOe5+8DNtq/V373oucrNz9HTu/K+3L74x6m2qcDNtq+6z82stcQs08PIy7Wl?= =?GB2312?B?zrvI57rO06a21A==?= To: xfs@oss.sgi.com X-ASG-Orig-Subj: =?GB2312?B?yOe5+8DNtq/V373oucrNz9HTu/K+3L74x6m2qcDNtq+6z82stcQs08PIy7Wl?= =?GB2312?B?zrvI57rO06a21A==?= Content-Type: multipart/mixed; charset="GB2312"; boundary="jU8IyqrQfXJuW=_WP25ERFMXfrObYtzcvt" MIME-Version: 1.0 Date: Wed, 15 May 2013 13:56:57 +0800 Message-ID: X-Barracuda-Connect: smtp.anafen.com[77.79.101.12] X-Barracuda-Start-Time: 1368597420 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131000 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature This is a multi-part message in MIME format --jU8IyqrQfXJuW=_WP25ERFMXfrObYtzcvt Content-Type: text/plain Content-Transfer-Encoding: 8bit 20130515135655 ÈëÖ°ºóµÚ25ÌìÇ©¶©ºÏͬÓÐÎÞ·çÏÕ ÈçºÎÓÐЧµ÷¸Úµ÷н¡¢½â¹Í´ÇÍË Óù¤µ¥Î»ÈçºÎÓ¦¶ÔÅÉDzºÏ×÷ÕùÒéºÍÀͶ¯ÕùÒé ÔõÑù¹æ¶¨ÅÉDzԱ¹¤µÄ´ÇÖ°³ÌÐòºÍÀëÖ°ÔðÈΣ¿ 790134689124579023e --jU8IyqrQfXJuW=_WP25ERFMXfrObYtzcvt Content-Type: application/octet-stream; name="Rvzei_4968.xls" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Rvzei_4968.xls" oaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqh qqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaoNCg0KDQqhtsDNtq+6z82st6iht6Gi obbJ57vhsaPP1beoobehoqG2uaTJy7Gjz9XM9cD9obfKtbLZ06a21LLfwtTT69PQ0Ke197jatffQ vaGiveK5zbTHzcu8sM6lvM3Oyszi1LG5pLSmwO28vMfJDQoNCg0KMjAxM8TqNdTCMTctLTE4yNUg o6i549bdo6kNCjIwMTPE6jXUwjI0LS0yNcjVIKOosbG+qaOpDQoyMDEzxOo21MI3LS04yNUgICCj qMnu29qjqQ0KMjAxM8TqNtTCMjEtLTIyyNUgo6jJz7qjo6kNCjIwMTPE6jbUwjI4LS0yOcjVIKOo uePW3aOpDQoNCqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqh qqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaoNCqG+0afUsbbU z/Ohv7atysKzpKGi19y+rcDtoaK4sdfcvq3A7aGiyMvBptfK1LTX3LzgL76twO0v16jUsbywyMvK wtDQ1f653MDtyMvUsaGiuaS74bjJsr+horeozvENCiAgICAgICAgICAgIMjL1LG8sM/gudi53MDt yMvUsaGiz+C52MLJyqa1yKGjDQoNCqG+t9E9PT0908OhvzI1MDDUqi8yzOwvyMsosPzAqMXg0bWh osXg0bW9zLLEoaLBvczszueyzaGi0tS8sMnPz8LO57LoteO1yCkgIA0KoaqhqqGqoaqhqqGqoaqh qqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGq oaqhqqGqoaqhqqGqoaqhqqGqoaqhqg0KofG/ziCzzCCxsyC+sKO6DQoNCjIwMDjE6tLUwLSjrM7S ufrPyLrzs/bMqKGiyrXKqcHLobbAzbavus/NrLeoobehoqG2wM22r9X50um1973i1tmyw7eoobeh oqG2wM22r9X50unLvreoveLKzaOoyP0NCqOpobehoqG2yee74bGjz9W3qKG3oaKhtrmkycuxo8/V zPXA/aG3o6jQ3tX9sLijqbXIt6jCybeoueahow0KDQrAzbavus/NrLeotcTKtcqpo6y/zbnbyc/S qsfz08PIy7WlzrvU2sDNtq/Tw7mkudzA7be9w+bX9rW9obC+q8+4u6+hsaOst/HU8r2rxNHS1Nak w/fAzbav1d+hsLK7DQq6z7jxoaKyu8qkyM65pNf3oaLRz9bYyqfWsKGi0c/W2M6lvM3OpbnmobGj rLj8xNHS1L340NC6z7eo09DQp7XEobC197jatffQvaGiveK5zbTHzcuhsaO7yOe5+9PDDQrIy7Wl zrvHv9DQttTAzbav1d+9+NDQtfe42rX30L2hor3iuc20x83Lo6zEx8O008PIy7Wlzru9q8Pmwdm+ 3rTztcTF4rOlt+fP1aOsxuS53MDtyKjN/tKyvavK3LW9DQrRz77+tcTM9NW9o6ENCg0Ky+bXxaG2 uaTJy7Gjz9XM9cD9obe1xNDeuMS6zaG2yee74bGjz9W3qKG3tcSz9syoo6zTw8jLtaXOu7XE08O5 pLPJsb6x2Mi7vfjSu7K9zOG436OsyOe6ztTaus+3qA0KtcS7+bShyc+jrLnmt7bTw7mkudzA7aOs vPXJ2bK7sdjSqrXEs8mxvtans/ajrMrHueO089PDyMu1pc67xsjU2sO8vd61xM7KzOKjocurt73Q rcnM0rvWwrK7ss680w0KIsnnu+Gxo8/VLMrHt/HT0NCno7+3osn6uaTJy8rCucqjrMjnus7T0NCn 06a21CzLq7e9vfjQ0Mu9wcujrMrHt/Gxu7eowsnIz7/Jo6y1sdbQtObU2sTE0Km358/Vo78iDQoN Cs6qwcu55rHcyc/K9tPDuaS358/Vo6yyu8nZxvPStbLJ08PBy6GwwM3O8cXJx7KhsdPDuaTEo8q9 o7u1q8vm1q62+MC0tcTTw7mkudzA7de0v/bItNS9wLTUvbvswtINCqOsy+bWrtL9t6K1xLeowsm3 58/VzsrM4tKy1L3AtNS9uLTU0yGhsMDNIM7xxcnHsqGxs8nOqs/Wvde2zrXEyMi147uwzOLWrtK7 o6HU2qG2wM22r7rPzay3qKG3oaINCqG2yee74bGjz9W3qKG3z8KjrKGwwM3O8cXJx7Khsb2rus7I pbrOtNOjrMTct/GhsNLstdiyzrGjobGjrMTct/G55rHc0rvQqcP0uNC1xLeowsm358/Vo7/Azc7x xckNCsey08O5pMSjyr3W0KOs06a4w8jnus7A7cuzuPe3vbnYz7WjrMjnus63wLe2t6jCybfnz9Wj rMjnus7GvbriuPe3vcD70uajvw0KDQrOqrDv1vq547TzxvPStcHLveK5+rzSz+C52LeowsnV/rLf o6zVxs7V0K2199SxuaS52M+1tcS8vMfJ0tS8sLfAt7bAzbav1fnS6aOs09DQp7X31fvTw7mkveG5 uaOsDQrN6snGudzA7crWts6jrL21tc3Tw7mkt6jCybfnz9W6zbPJsb61yM7KzOKjrMzY0fvO0rn6 ye7az7ncwO3WrrXAtcTWqsP7wM22r7eo0+vUsbmkudjPtbncwO3KtdW9DQrXqLzS1tPTwOmmwM/K ptb3vbKhsKG2wM22r7rPzay3qKG3oaKhtsnnu+Gxo8/Vt6iht6Gioba5pMnLsaPP1cz1wP2ht8q1 stnTprbUst/C1NPr09DQp7X3uNq199C9DQqhor3iuc20x83LvLDOpbzNzsrM4tSxuaS0psDtvLzH yaGxuN+8ttHQzNa74aGju7bTrcbzysLStbWlzru7/byr1+nWr8/gudjIy9Sxss6809HQzNbRp8+w o6zS1LDvDQrW+sbz0rXT0NCnt8C3treowsm358/VsqK94r72yrW8ysDNtq/Tw7mkzsrM4qOhDQqh qqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGq oaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqDQqh8SC/ziCzzCC08yC42aO6o6i3 1s/tMjC24Lj2vq215LC4wP2jqQ0KDQrSu6Gi1dDGuMjr1rDT68rU08PG2rncwO2y38LUDQoxLsDN tq/V38bb1anTpsa4o6zKwrrzsbvG89K1veK5zaOs1NrW2bLDxtq85KOswM22r9Xfv8nE3Nf3s/bI w8bz0rW068rWsru8sLXEv7mx57nbteOjrMbz0rW4w8jnDQq6zrvY06a78tXf1NrI1bOj1tCyycih xMTQqbfAt7ay38LUo78NCjIuxvPStcrHt/HQ6NKq0+u3qMjLtPqx7aGitq3KwrOkoaLX3L6twO2h otfcssOhoteo1rC5ybarx6m2qcDNtq+6z82so6yyu8ep09C6zrfnz9Wjvw0KMy7I57n7wM22r9Xf vei5ys3P0dO78r7cvvjHqbapwM22r7rPzay1xKOs08PIy7WlzrvI57rO06a21KO/IA0KNC7I69aw uvO12jI1zOzHqbapus/NrNPQzt6358/Vo6zKssO0yrG68s6q1+680cqxvOTHqcrwwM22r7rPzayj vw0KNS7K1NPDxtrX7rrzMczstMfNy9SxuaSjrMbz0rXF4rOltcS4xcLKt8ezo7jfo6zG89K1uMPI 57rOzerJxsrU08PG2rXEveK5zcH3s8yjrLLFsdzD4rC4vP6w3Mvfo78NCjYuytTTw8ba0tShsLK7 yqTIzrmk1/ehsc6q08m94rnNwM22r9Xfyse38bTm1Nq358/Vo6y4w8jnus67r73io78NCjcuxvPS tdLUobCyu7f7us+42s67zPW8/qGisru3+7rPwrzTw8z1vP6horK7us+48aGxveK5zcDNtq/V39L9 t6LV+dLpo6zG89K1uMPM4bmpxMTQqdakvt2jrLLFyLcNCrGjwaLT2rK7sNzWrrXYo78NCg0Ktv6h osjnus7T0NCntfe42rX30L0NCjguxvPStc2os6O4+b7dvq3TqtDo0qq2+LX31fvUsbmktcS42s67 u/K12LXjo6y1q8rH1LG5pL/JzOGz9rG7xsi94rP9sqLL98Xivq28w7K5s6WjrMbz0rXI1bOj1tAN CrjDyOe6ztf2o6yyxcTcu6+94rfnz9W78rHcw+KwuLz+sNzL36O/DQo5LsDNtq+6z82s1Ly2qLXE uNrOu8q1vMrJz7eiyfqx5Luvo6y1q8O709Cw7MDtz+C52MrW0PijrNSxuaS1vdDCuNrOu9K7ts7K sbzkuvOjrMi00qrH87vWuLS1vdStDQq42s67o6zN+c35s8nBoqOsxMfDtMbz0rW4w8jnus6/ubHn oaK4w8jnus7UpLfAo78NCiIxMC68qNCnxL+x6rK7us+3qLrPwO21xKOszfnN+bK7xNzX986quuLB v8DNtq/V38rHt/GhsMqkyM65pNf3obG1xNLAvt2jrMbz0rW4w9T10fnJ6LaovKjQp8S/seosIg0K ssXE3Nf3zqq64sG/serXvKO/DQoxMS7UsbmkyM/NrLyo0Ke/vLrLveG5+6OstavKx8bz0rXU2qGw u/nT2rK7yqTIzrmk1/e2+LX3uNq199C9IKGiveK5zbTHzcuhsbXEsLi8/tbQu7nKx7Dcy9+jrMTH DQrDtMbz0rW4w8jnus6/ubHnu/LI1bOj1tDU9dH51/ajrLLFxNyx3MPisNzL37fnz9Wjvw0KMTIu xvPStbj5vt28qNCnv7y6y73hufu/27z11LG5pLyo0Ke9sb3wo6y63LbgyrG68rG7yM+2qLfHILeo v8u/27mk18qjrMbz0rW4w8jnus6/ubHnu/LI1bOj1tDU9Q0K0fnX9qOsssXE3LuvveK358/Vu/Kx 3MPisNzL36O/DQoxMy7UsbmksrvKpMjOuaTX96OsxvPStcTct/G199X7xuS42s67o6y197jauvPE 3LfxtaW3vb21tc3G5NC9s+qjv8jnus6y2df3o6yyxcTctfe42r210L2jvw0KIjE0LsWu1rC5pNDd svq82c3qsc+686OszfnN+dStuNrOu9LRvq3T0Mbky/vNrMrCuLrU8KOsxa7WsLmkzfnN+bK7vdPK 3NDCuNrOu6Oszqq0y7eiyfrAzbav1fnS6SwiDQrG89K1uMPI57rO1/ajrLLFxNy7r73isNzL37XE t+fP1aO/DQoNCsj9oaLI57rO09DQp73iuc20x83LDQoiMTUuyrXQ0MSpzrvM1Myt1sYs0tTEqc67 xcXD+86q08m94rnN1LG5pKOs1tmyw7v6ubnN+c35yM+2qMbz0rW3x7eoveK5zdSxuaSjrMTHw7TG 89K1yNWzo9bQuMPI5yINCrrO1/ajrLLFsdzD4rC4vP6w3Mvfo6yx3MPi1qe4tr6tvMOyubOlu/LF 4rOlvfCjvw0KIjE2LtLUobDX6davvNy5ubX31fsszt66z8rKuNrOu7CyxcWhsc6q08m94rnN1LG5 pKOsyse3x7Ojt/u6z7OjwO21xNf2t6ijrLWrzfnN+bG71tmyw7v6ubnIz7aoxvMiDQrStbfHt6i9 4rnNo6zG89K1uMPI57rO1/ajrLLFsdzD4rC4vP6w3Mvfo78NCiIxNy7G89K10+vAzbav1d/QrcnM veKz/cDNtq+6z82ssqLK6cPm1Ly2qNanuLbKyrWxtcS+rbzDsrmzpcr9tu4sysK688DNtq/V39e3 zNa+rbzDsrmzpbXEsu627rK/Ig0Kt9ajrNbZssO7+rm5uty/ycTc1qez1sDNtq/V37XEy9/H86Os xvPStcjVs6PW0LjDyOe6zrS01sahosrVvK/WpL7do6yyxbHcw+KwuLz+sNzL36O/DQoiMTguxeDR tbf+zvHG2s60tb3G2iy2+MDNtq+6z82stb3G2qOsxvPStdbV1rnAzbavus/NrLXEo6zW2bLDxtq8 5M35zfmxu8jPtqjK9NPazOHHsLfHt6i94rP9wM22ryINCrrPzayjrMbz0rW4w8jnus7X9qOsssWx 3MPisLi8/rDcy9+jvw0KIjE5LtSxuaTOtMzhx7AzMMjVzajWqsbz0rW8tNfU0NDA69awLMrHt/G5 ubPJwM22r9XfzqW3qL3is/2jv8bz0rW4w8jnus7X9qOsssXE3L21tc2358/Vs8mxvqO/ttQiDQrT 2sDNtq/V37XEtMfWsLu3vdqjrNPQxMTQqbHY0OvXotLitcS358/Vv9jWxrXjo78NCiIyMC7Azbav us/NrLW9xtq68yy+rbOjs/bP1rjD1tXWubXEzfy8x7DswO3W1da5ytbQ+KOsuMPQ+MeptcTN/LzH sOzA7dD4x6nK1tD4o6y+rbn90ru2zsqxvOS688bzIg0K0rWyxczhs/ayubDsz+C52MrW0PijrLWr ysfUsbmkyLTM4bP2xeKzpdKqx/OjrMbz0rW358/Vt8ezo7Tzo7vEx8O0xvPStbjDyOe6ztf2o6yy xci3saO55rHcyc/K9g0KsNzL37fnz9Wjvw0KIjIxLqG2veKz/cDNtq+6z82szajWqsrpobfI57n7 se3K9rK7tbGjrM35zfmzyc6qwM22r9XftPLTrrnZy761xNPQwabWpL7do6zG89K1uMPI57rOyunQ tCyyxbHcw+IiDQqwuLz+sNzL37b4s9C1o7eowsnU8MjOo78NCiIyMi7ExNCpx+nQzs/CyvTT2rfH t6i94rnN1LG5pCzQ67PQtaPExNCpt6jCydTwyM6jrMrHs9C1ozHE6jG49tTCuaTXyrXEvq28w7K5 s6W7ucrHMcTqMrj21MK5pNfKIg0KtcTF4rOlvfCjrLT6zajWqr3wyse38dKqs9C1o6OswM22r9Xf xNy38dKqx/O71ri0wM22r7nYz7Wjvw0KDQrLxKGiyOe6ztPQ0Ke0psDtzqW8zc6luebUsbmkDQoi MjMutKa31qGiveK5zcDNtq/V3yzN+c3508nT2sDNtq/V377cvvjHqcrVuMPNqNaqyum2+LW81sLG 89K1tcS0prfWoaK94rnN0NDOqrG7yM+2qM6qzt7Qp7vyt8e3qCINCtDQzqqjrMTHw7TG89K11NrI 1bOj1tC4w8jnus7X9qOsssWx3MPisLi8/rDcy9+jvw0KIjI0LrbU09rOpbzNzqW55rXEtvHS4s7K zOLUsbmkLMv7w8fN+c35vty++MzhvbuhtrzszNbK6aG3u/K38cjPzqW8zc6luea1xMrCyrWjrMbz 0rW4w8jnus60tNbGoaIiDQrK1byv1qS+3aOsssWx3MPisLi8/rDcy9+2+LPQtaO3qMLJ1PDIzqO/ DQoyNS7I57rOvfjQ0M6lvM3UsbmktcTKwsq1tfey6aGi1qS+3bnMtqijrLbU09rOpbzN1LG5pKOs sr/Dxb6twO3Tptei0uLExNCpyNWzo8+4vdrOyszio78NCjI2LrbU09rOpbzN1LG5pKOsysK3orrz yrLDtMqxvOS0psDto6zI57rOyunQtKG2zqW8zc6luea0prfWzajWqsrpobejvw0KIjI3LtT10fnA 7b3iobDRz9bYzqW3tNPDyMu1pc67tcS55tXC1sa2yLXEobEsyOe6ztTaobazzbejzPXA/aG31tDP 6s+4w/fIt86lvM3OpbnmtcShsNK7sOPOpbe0obEiDQqhoqGwvc/W2M6lt7ShsbywobDRz9bYzqW3 tKGxo78NCiIyOC7Wsc/fsr/Dxb6twO3Jw9fUv9rNt7THzcvUsbmkLNbZssO7+rm5zfnN+cjPtqjG 89K1t8e3qL3iuc3Usbmko6zEx8O0xvPStcjVs6PW0LjDyOe6ztf2o6yyxbHcIg0Kw+KwuLz+sNzL 36OssdzD4taxz9++rcDt1L3IqLSmt9bUsbmko78NCiIyOS7Azbav1d+yu7THtvix8KGizt65yr/1 uaS5pCzItNb31cWxu8bz0rW/2s23veK5zaOszfnN+bXDtb3W2bLDu/q5ubXE1qez1qOsxMfDtMbz 0rXI1bOj1tC4w8jnIg0Kus7X9qOsssWx3MPisLi8/rDcy9+jvw0KMzAuyOe6zr3ntqihsNbYtPPL 8LqmobGjrKGw1ti088vwuqahscrHt/Gx2NDrzOXP1s6q1OyzydaxvdO1xL6tvMPL8Mqno78NCjMx LrLJ08OhsMK80vTCvM/zobG3vcq9tLTWxqGisaPB9LXE1qS+3aOst6jUusrHt/GyydDFo7vG89K1 xNqyv09Bz7XNs7vyRVJQz7XNs8nPtcTXysHPxNy38df3zqoNCtakvt3KudPDo7u159fT08q8/qGi yta7+rbM0MXE3Lfx1/fOqtakvt3KudPDo78NCg0KzuWhornm1cLWxrbIoaKhttSxuaTK1rLhobfX q9C0st/C1NPrt+fP1dOmttQNCjMyLsjnus7Uy9PDuebVwtbGtsihoqG21LG5pMrWsuGht9Skt8DA zbav08O5pLfnz9Wjvw0KMzMu08PIy7WlzrvQ6NKqxMTQqbnm1cLWxrbIo7/Usbmkytay4bjDsPy6 rMTE0KnE2sjdo78NCjM0LtbGtsi55tXCoaLUsbmkytay4bXEs6O8+7fnz9XOyszi09DExNCpo6zI 57rOu6+94qO/DQozNS7WxraouebVwtbGtsihotSxuaTK1rLhtcS3qLaos8zQ8sq1zvGy2df3vLzH yaO7DQozNi63x7n609DG89K1yOe6ztfpvajWsLmktPqx7bTzu+GjrLLFyLexo8Px1vezzNDyus+3 qKO/DQozNy7I57rO1KS3wLnm1cLWxrbIzqW3tLeowsm3qLnmtcS55raoy/m0+MC0tcS358/Vo78N Cg0KwfmhoqG2yee74bGjz9W3qKG3yrXO8bLZ1/ey38LUvLC358/Vt8C3tg0KMzgu08PIy7Wlzruy u7DswO3J57GjoaLNz8e3yeexo7fRu/Kyu9fjtu69ycTJyeexo6Os09DKssO0t6jCydTwyM6jvw0K MzkuytTTw8bavOSjrMrHt/Gx2NDrvcnEycnnu+Gxo8/Vo78NCjQwLsjr1rDKscDNtq/V38e/wdKy u7LOvNPJ57Gjo6zA69awyrHSqsfzsrm9ybvy1qe4ts/WvfCjrMjnus60psDto78NCjQxLtSxuaSy u9S40uLC8snnsaO78tSxuaTX1NS4vbW1zc22saO7+cr9o6yyotPrtaXOu8ep09DQrdLptcTH6b/2 z8KjrLjD0K3S6crHt/HT0NCno78NCjQyLtLytdrI/be9tcTU8MjOtviy+sn60r3BxrfR08O1xKOs xNy38bGoz/qjvw0KNDMuxvPStdCt1vq0x9aw1LG5pMatyKHKp9K1saPP1b3wo6zT0Mqyw7S3qMLJ t+fP1aO/DQo0NC7KssO0x+m/9s/Cv8nS1M/tytzJ+tP9vfLM+aO/zqW8zcn60/3V38Tct/HP7crc svq82aOsxNy38bG7veK5zaO/DQo0NS7Tw8jLtaXOu7K7s/a+36G2wOvWsNakw/eht7XEo6zT0Mqy w7S3qMLJ1PDIzqO/DQoNCsbfoaKhtrmkycuxo8/VzPXA/aG3yrXO8bLZ1/ey38LUvLC358/Vt8C3 tg0KNDYuyvTT2rmkycu3ts6ntcTH6dDO09DExNCpo7+yu7XDyM+2qM6quaTJy7XEx+nQztPQxMTQ qaO/DQo0Ny7U9dH5wO294snPz8Kw4M2+1tCjv9T10fm/2NbGxtq85LXEt+fP1aO/DQo0OC7S8rmk 1/fQ6NKq06az6rrIvsa1vNbCy8DN9qOsxNy38cjPtqjOqrmkycujvw0KNDkuuaTJy9SxuaS96LnK vty++Li0uaSjrMjnus60psDto78NCjUwLrmkycvUsbmkvei5yr7cvvjF5LrP1/bJy7LQvPi2qKOs yOe6zrSmwO2jvw0KNTEu0tG+rcjPtqjOqrmkycu1xNawuaTRz9bYzqW8zc6lueajrMbz0rXE3Lfx veKz/brPzayjvw0KIjUyLrbU09q12sj9yMvU7LPJtcS5pMnLysK5yqOsyOfS8rXayP3Iy9L9t6K1 xL27zajKwrnK1tAsztK3vcu+u/rK3MnLo6zI57rOtKbA7aO/yty6psjLxNy38dKqx/MiDQq5pMnL tP3T9tPW0qrH87XayP23vbXEyMvJ7cnLuqbF4rOlo78NCjUzLrWlzrvE3Lfx0tTJzNK1saPP1cDt xeK/7s/uzOa0+tawuaS5pMnLxeKzpbT90/ajvw0KNTQut6LJ+rmkycvKwrnKuvOjrMbz0rXT68DN tq/V38u9z8K6zb3io6zHqbaptcSyubOl0K3S6crHt/HT0NCno78NCg0KsMuhosDNzvHFyceyyrXO 8bLZ1/ey38LUvLC358/Vt8C3tg0KNTUu0MK3qM/CwM3O8cXJx7LD5sHZtcTW99Kqt+fP1dPQxMTQ qaO/DQo1Ni7Stc7xzeKw/NPrwM3O8cXJx7LI57rOu6631qO/DQo1Ny7Tw7mktaXOu8jnus655rHc zay5pM2ss+q358/Vo78NCjU4LtPDuaS1pc67yOe6ztDQyrm21MXJx7LUsbmktcTNy7u5u/LNy7u7 yKijvw0KNTku08O5pLWlzrvI57rO17e+v8XJx7LUsbmktcTL8MqnxeKzpdTwyM6jvw0KNjAu1PXR +bnmtqjFycey1LG5pLXEtMfWsLPM0PK6zcDr1rDU8MjOo78NCjYxLsjnus60psDtzqW3tNPDuaS1 pc67uebVwtbGtsi1xMXJx7LUsbmko78NCjYyLtPDuaS1pc67yOe6ztOmttTFyceyus/X99X50um6 zcDNtq/V+dLpo78NCqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGq oaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaoNCqHxob7K 2l+/zl/XqF+80l+96V/J3KG/18pfye5fwM1ftq9ft6hf16hfvNJf1tNf08Bf6aYgIA0KDQq5+sTa 1vjD+8DNtq+3qNPr1LG5pLnYz7W53MDtyrXVvdeovNINCsDNtq/W2bLD1LGhosDNtq/V+dLpsLi8 /tSkt8DTprbU16i80g0Kufq80sjLwabXytS0udzA7cqm18q48cjP1qTF4NG1tbzKpg0Kufq80sDN tq+52M+10K2198qm18q48cjP1qTF4NG1tbzKpg0KufrE2rXa0rvF+rOrtbyhorSrsqWhosq1yqmh sLn6vNLAzbavt6jT68bz0rXQvbPqvKjQp9PQu/rV+7rPobG1xM/I0NDV36O7ufrE2tSttLTQzaGi yrXVvdDNoaK5yw0KzsrQzbXExeDRtcqmoaMNCg0KobDAzcLJzago1tC5+im5y87K1tDQxKGxytfP r7nLzsqjrMnPuqOzyc2owsnKpsrCzvHL+c2218q6z7vvyMuju7zmyM7W0LuqtLTKwLzNxeDRtc34 oaLKsbT6ueK7qg0KudzA7dGn1Lqhosnu29rN4snMzbbXysbz0rXQrbvhoaK549bdytDAzbavsaPV z9Gnu+Ghornj1t3K0MjLwabXytS0ytCzobf+zvHW0NDEoaK547aryqHIy8Gm18rUtA0KudzA7dCt u+Ghos/juNu5pNK119y74aGi1tDJvbTz0aehotXjva2089GntcgxMDC24LzSxeDRtbmry74goaLQ 0NK10K274aGi09C52Lv6ubm1xMep1Ly9ssqmoaLM2A0Kxri5y87KoaMNCg0K1tPAz8qmvqvNqMDN tq/V/rLft6jCybeouea6zcDNtq/W2bLDoaLL38vPs8zQ8qOsycOzpMDNtq/Tw7mkt+fP1bXE09DQ p9Skt8DT68DNtq/V+dLpsLi8/rXEvqvXvA0K06a21KOsycbT2rDRwM22r7eowsm3qLnm0+vG89K1 yMvBptfK1LS53MDt09C7+tX7us+jrM2oz/7G89K1wM22r9X50um3wLe2u/rWxrXEubm9qLrNwM22 r9PDuaS53A0KwO3M5c+1tcTQ3tX9zerJxqGj1tPAz8qmvq2zo9Tav827p7DsuavP1rOhoaLF4NG1 z9azoc6qv827p6Gi0afUsby0yrHG8LLdoaLJ87LpoaLQ3rjEz+C52NbGtsihog0Kus/NrKGizsTK 6aOsu/K31s72vt/M5bC4vP61xNOmttTLvMK3o7vW08DPyqa2wLW9tcTP1rOhtcTXqNK1uaa116Os w7+0zra80661w7njtPO/zbunoaLRp9Sxt6LX1A0KxNrQxLXEusPGwNPrMTAwJbXE0MW3/qOhDQoN CiLW08DPyqbU+MjO16jWsMDNtq/W2bLD1LEs1Pi78aGwuePW3crQ08XQ48DNtq/W2bLD1LGhsbPG usWjrMnzxdDAzbav1fnS6bC4vP40MDC24Nfao7u0+sDtwM22r9X5Ig0K0uk1MDC24Nfao6yyztPr u/LW97PW0L2z6ryo0KfXydGvz+7EvzIwtuC49qOsyfOy6c3qycY0MDC24LzSxvPStbXEyMvBptfK 1LS53MDtuebVwtbGtsiho7j2yMuzpA0KIsbataPIzjMwtuC80qOowNu8xjIwMLbgvNKjqcbz0rW1 xMjLwabXytS0udzA7beowsm5y87Ko7vS1NbTwM/KpsHsz861xNeovNK2087pLLOkxtrOqsbz0rXM 4bmpwM0iDQq2r7eos6PE6rnLzsq8sLj31tbXqM/u18nRr7f+zvGjrL/Nu6fC+tLitsi437TvOTUl oaMNCg0KMjAwNMTqv6rKvNbTwM/Kpsirufq497XY0bK9ssDNtq+3qKGiwM22r7nYz7W/zrPMo6zK 3NLmxvPStbTvMzAwMDC80qOs1rG908rc0ubRp9SxNzAwMDC24MjLo6zF4A0K0bW12LXjyea8sDIw tuC49sqhu+Gzx8rQvLDR2LqjtdjH+LTzs8fK0KGj1tPAz8qmvau/3dTvtcTAzbav1f6y37eouebI 3MjryrW8yrncwO2wuMD9tbHW0KOsvavIyw0KwabXytS0udzA7dPrwM22r7eo09C7+rXY1fu6z9Ta 0rvG8KO7v86zzMTayN04MCXOqtXmyrWwuMD9oaIyMCXOqrHYsbi1xNbYteO3qMz1o7vRp9Sxss7T 68zWwtuhog0KIrultq8sv86zzMn6tq/T0Miko6zJ7sjrx7Oz9qOsyrXVvdDNs6zHv6OsyMPRp9Sx vLTKsdGn0tTWwtPDo6G/zrPMwvrS4rbIuN+07zk1JaOs1tq24NGn1LG++bHtyr4iDQqjuqGwtdrS u7TOzP21vcjntMvKtdW9oaLKtdPDoaLKtdCntcTAzbavt6i/zrPMo6HW08DPyqa3x7OjzvHKtaGi srvLtb3MoaLDu9PQyczStc62tcCjrNbV09rM/bW9DQrBy8jDztKyu9TZuvO72rXEvquyyr/Os8yj oaGxDQoNCtbTwM/Kps/IuvPU2qG2uePW3cjVsaiht6GiobbEz7e9trzK0LGoobehoqG21tC5+snn u+G/xtGnsaiht6GiobbIy8Gm18rUtKG3oaKhts/juNu5pNK119y74dTCv68NCqG3tcixqL+voaLU 09a+oaLDvczlt6Kx7deo0rXOxNXCu/KyybfDuOU1MLbgxqqhow0KDQrU+LLOvNO5/dbTwM/KpsXg 0bW5q7+qv861xLK/t9bG89K1v827p6O61tC5+tLGtq+hotbQufq+rbzD1ty/r6Gi1tC5+sTPt721 5834oaLW0Ln6xanStbTz0aehotbQDQrJvbTz0aehotbQueO6y8Tc1LShotbQufrJ2c/IttPKwtK1 t6LVudbQ0MShotbpva2159Ow1sbGrKGizfK/xrXYsvqhosPJxaPI6dK1oaLW6b2txqG+xqGi1tC5 +tL4DQrQ0KGiu6rJzNL40NChornjt6LWpL7toaLQy9K10vjQ0KGi1tDQxdL40NDQxdPDv6jW0NDE oaLW0LrJyMvK2bGjz9WhotbQ0MvNqNG2oaLW0Mqvu6+hotbQuqPTzaGiDQqw2cTquv3Nv77G0rWh orGjwPu3v7XYsvqhori7waa12LL6oaLRxb7TwNa12LL6oaKwssykoaK98LX7yO28/qGis7+54sjp 0rWhornj1t212Mz6oaLBorDXvK/NxaGiDQrAttTCwcGhor3dsarCt7uixvuztaGiscjRx7XPxvuz taGi1r6437/Vtfehornj1t2158rTzKihorDX1MbJvdbG0qmhor3wt6K/xry8oaK807bgsaahoruq zqqhorarDQrWpdK9wcahor2ty9XS+NDQye7b2rfW0NChornjtqvKobXn07C5q8u+oaKxsb6pur2/ 1dS6oaLW0Ln6wsPQ0MnnoaK547ar0MK7qrei0NC8r83FoaKw2crCo6jW0Ln6DQqjqaGiu6rI872o 1v6hosbf0Me8r83FoaLMq9H0vtSjqLGxvqmjqaGiyqjN9aGixNrDybnFzvfArePlwtmjqLyvzcWj qaGi1tC5+rqj0fPKr9PN19y5q8u+oaLFss3+DQq5+rzSyq/Tzbmry76hor3w5be12LL6oaKwssG4 v9i5yaGixM++qdbKvOC87NHp1Lqhoszs1f28r83FoaLJ7tvasM3Kv7yvzcW5ybfdoaJORVRTRklN IKOosbG+qaOpDQrFqdK1v8a8vKGixNrDybnFvfC5/rTvw7rMv7uvuaShotbQufq/xtGn1Lqhornj 1t3G+7O1vK/NxaGivv27qryvzcWhor+1vNG8r83FoaKxsb6pur2/1cv5oaLJ7tvaDQrTytX+vtah or/Jv9q/ycDWoaLNqNPDtefG+KGiy8nPwrXnxvehotbQxM+089GnoaKwsrDUsOu1vMzloaK+xrjW vK/NxaGisb7M78b7s7WhotK74MvX4rO1oaLD18bkDQrB1sLWzKWhosv3xOGhosrAvM3B+tDFz6LN +MLnoaKwrMSsyfqholRDTCChorS0zqy158b3oaK5+tKpvK/NxaGivKrB1tHMst2hosLtyr+7+byv 17DP5KGi08PT0cjtDQq8/qGivajMz7uvuaS8r83FoaK4u8q/zaihosj90rvW2LmkLS0tLS0tvLjN 8rzSxvPStaGjDQqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGq oaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaqhqqGqDQqh8cXgLdG1 LbGoLcP7LdbQLdDEOg0KDQrJ7iDb2iCI8yDD+yDriiDUkqO6o7Cjt6O1o7UtLaOyo7Gjs6Oyo7ej s6O0o7ihoqOyo7Gjs6Oyo7ejt6O0o7YNCg0Kyc8guqMgiPMgw/sg64og1JKjuqOwo7KjsS0to7Wj saOwo7mjuaO3o7KjuaGio7WjsaOwo7mjuaO4o7Wjtg0KDQrBqiDPtSDIy6O66pDQob3joaLB1s/I yfqhoshm0KG94w0KDQqhraGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa2h raGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa2hraGtoa0NCg== --jU8IyqrQfXJuW=_WP25ERFMXfrObYtzcvt-- From sumandov@host.sumandoventas.com.mx Wed May 15 01:04:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B57BD7F37 for ; Wed, 15 May 2013 01:04:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 61A59304066 for ; Tue, 14 May 2013 23:04:49 -0700 (PDT) X-ASG-Debug-ID: 1368597885-04bdf042252a46c0001-NocioJ Received: from host.sumandoventas.com.mx ([184.107.196.114]) by cuda.sgi.com with ESMTP id QICAZHvHCRDq6Mjx (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 23:04:46 -0700 (PDT) X-Barracuda-Envelope-From: sumandov@host.sumandoventas.com.mx X-Barracuda-Apparent-Source-IP: 184.107.196.114 Received: from sumandov by host.sumandoventas.com.mx with local (Exim 4.80) (envelope-from ) id 1UcUpR-0000zh-BJ for xfs@oss.sgi.com; Wed, 15 May 2013 02:04:45 -0400 To: xfs@oss.sgi.com Subject: Aumenta tus ventas ahora de manera rapida X-PHP-Script: www.sumandoventas.com.mx/mercalider/admin/index.php for 187.162.232.236 X-ASG-Orig-Subj: Aumenta tus ventas ahora de manera rapida From: "Mercalider" MIME-Version: 1.0 X-Mailer: PHPlist v2.10.17 X-MessageId: 22 X-ListMember: xfs@oss.sgi.com Precedence: bulk List-Help: List-Unsubscribe: List-Subscribe: List-Owner: Content-Type: multipart/alternative; boundary="=_021b44411f0f0687fd5e4910e326b82d" Content-Transfer-Encoding: 7bit Message-Id: Date: Wed, 15 May 2013 02:04:45 -0400 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host.sumandoventas.com.mx X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [500 501] / [47 12] X-AntiAbuse: Sender Address Domain - host.sumandoventas.com.mx X-Get-Message-Sender-Via: host.sumandoventas.com.mx: authenticated_id: sumandov/from_h X-Barracuda-Connect: UNKNOWN[184.107.196.114] X-Barracuda-Start-Time: 1368597886 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.40 X-Barracuda-Spam-Status: No, SCORE=1.40 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, BSF_SC7_SA_HREF_WWW_MISMATCH, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131000 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.80 BSF_SC7_SA_HREF_WWW_MISMATCH BODY: Custom Phishing Mismatch 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 --=_021b44411f0f0687fd5e4910e326b82d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit MERCA-LIDER E-mail marketing http://www.sumandoventas.com.mx/mercalider/lt.php?id=bU8DCANWAwdMBAtIAAAAAAY%3D Selección por Estados + de 250,000 envíos Paquete Empresarial + de 200,000 envíos *Incluye:* Diseño Creativo estadísticas de envió en: apertura y de vínculos Garantía de Satisfacción Asesoría para sus campañas *Incluye:* Diseño Creativo estadísticas de envió en: apertura y de vínculos Garantía de Satisfacción Asesoría para sus campañas Google Adwords 30% de Descuento Más información 40% de Descuento Más información Nacional + de 500,000 envíos Súper Empresarial 540,000 envíos *Incluye:* Diseño Creativo estadísticas de envió en: apertura y de vínculos Garantía de Satisfacción Asesoría para sus campañas Google Adwords *Incluye:* Diseño Creativo estadísticas de envió en: apertura y de vínculos Garantía de Satisfacción Asesoría para sus campañas Google Adwords y Facebook 30% de Descuento Más información 40% de Descuento Más información Informes en ventas@mercalider.com Teléfonos Monterrey (01-81) 19-36-76-98 Lada Sin Costo 01-800-467-19-54 -- If you do not want to receive any more newsletters, http://www.sumandoventas.com.mx/mercalider/lt.php?id=bU8DCANWAwlMBAtIAAAAAAY%3D To update your preferences and to unsubscribe visit http://www.sumandoventas.com.mx/mercalider/lt.php?id=bU8DCANWAgBMBAtIAAAAAAY%3D Forward a Message to Someone http://www.sumandoventas.com.mx/mercalider/lt.php?id=bU8DCANWAgFMBAtIAAAAAAY%3D -- powered by phpList, www.phplist.com -- --=_021b44411f0f0687fd5e4910e326b82d Content-Type: multipart/related; boundary="=_ebe428162a4a8b4ff7490431c5a80586" Content-Transfer-Encoding: 7bit --=_ebe428162a4a8b4ff7490431c5a80586 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

MERCA-LIDER

E-mail marketing      www.mercalider.com

Selección por Estados + de 250,000 envíos

Paquete Empresarial + de 200,000 envíos

Incluye: Diseño Creativo

estadísticas de envió en:

apertura y de vínculos

Garantía de Satisfacción

Asesoría para sus campañas

 

Incluye: Diseño Creativo

estadísticas de envió en:

apertura y de vínculos

Garantía de Satisfacción

Asesoría para sus campañas

Google Adwords

 

30% de =20 Descuento

Más información

40% de =20 Descuento

Más información

Nacional + de 500,000 envíos

Súper Empresarial 540,000 envíos

Incluye: Diseño Creativo

estadísticas de envió en:

apertura y de vínculos

Garantía de Satisfacción

Asesoría para sus campañas

Google Adwords

 

Incluye: Diseño Creativo

estadísticas de envió en:

apertura y de vínculos

Garantía de Satisfacción

Asesoría para sus campañas

Google Adwords y Facebook

 

30% de =20 Descuento

Más información

40% de =20 Descuento

Más información

Informes en ventas@mercalider.com

Teléfonos Monterrey (01-81) 19-36-76-98

Lada Sin Costo 01-800-467-19-54

 



--
If you do not want to receive any more newsletters, este enlace

To update your preferences and to unsubscribe visit este enlace
Forward a Message to Someone este enlace

3D"powered

--=_ebe428162a4a8b4ff7490431c5a80586 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="powerphplist.png" Content-ID: <698978ac3effe29897fea7644a30e58a> iVBORw0KGgoAAAANSUhEUgAAAEYAAAAeCAMAAACmLZgsAAADAFBMVEXYx6fmfGXfnmCchGd3VDPi pmrouYIHBwe3qpNlVkTmcWHdmFrfRTeojW3IpXn25L7mo3TaGhe6mXLCmm+7lGnntn7sx5Sxh1us k3akdEfBiFPtyJfgo2bjqW7krnTjqnDproK1pInvODRRTEKFemnuzaAtIRXenF7KqIHfn2KHcVjt yZjnqHrnknLhpGjnt4HeMyzlnnHr1rLkmW3WAADllGuUfmPcKSMcFxLnuICUd1f037kqJiDqv47s xZLYAQHLtJLfOTI7KhrInnHqwY7hTUHz2rGDbVTz27Xkr3XJvKPng3HuypzouoPrwo/hXk3x1qzq wIvizavrwpDu0atqYVTqnoBdTz7QlFvqtYbgST14cWPar33hYkrw0qZKQjjdml12XkPSv52NhHPo vIjjrHLZDQz03bbsxZHcq3fgQjsUEg92YUmUinjgpGbvz6PZtYjcp3Tr2bWEaUzz3LXx1KhFOi7p vojy2K314rzjvYzjf2EwLCbw0qRvUzb25MBoSi3gomXdmFvlsXhBOzIiHxrw06i8oHzx1qrqwIvm jWt4aVaFXjnopHzuy5724r/supM5Myzeml3qv4rx1Kbou4bmuYTosoHhyaTipWngoWTmtHvms3rj rXLmsn2yf07OkFf137zsx5bw1KvmsXjoq33uzqTsxpTouojdl1vlZlvswpDy16rDtZrkbFq3jmHh UUXhpmrbHxriX0/lsnrirnf14r/ty6BZPiXouYflsnjmsXvimmZaQSjiqGvipmnhpmn2473msnjo vIbtx5nem13w0aRKNCDipWrrw5TsvY7qvokODArhWUnqwI/ip2vemVzlpnTrw5Hjq3Dy17Dihl/x SUPvbl3Nu53gUEPfQDPhpWnlh2nwi3ToiXDouYXt27n03LO1nX3bFBHjlmbaCAnroHXYCAfBs5fW qXXsxZbnwIzjYFPrw5Ddwp3pvYyUaD7On27RpnjXpXDswJTWpG/gsn3lwJHy4Lv037jiaFbdmVzc l1kDAgEEAwIAAACJJzCsAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1F B9MKFQolCwe/95QAAAXuSURBVHicrZF5XJJ3HMdVHodmZhcmCqbzRFNRSbGpCHk2tF46y6yQyiup 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 3G0AAAAASUVORK5CYII= --=_ebe428162a4a8b4ff7490431c5a80586-- --=_021b44411f0f0687fd5e4910e326b82d-- From usabolivia@usabolivia.biz Wed May 15 01:54:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.2 required=5.0 tests=FREEMAIL_REPLYTO, HTML_FONT_SIZE_LARGE,HTML_IMAGE_RATIO_06,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DBBB77F37 for ; Wed, 15 May 2013 01:54:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9E2778F8071 for ; Tue, 14 May 2013 23:54:39 -0700 (PDT) X-ASG-Debug-ID: 1368600869-04bdf042232a69b0001-w1Z2WR Received: from 156090.vs.webtropia.com (ns1.usabolivia.biz [81.30.156.90]) by cuda.sgi.com with ESMTP id 84ghcziFJ53TByiV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 May 2013 23:54:31 -0700 (PDT) X-Barracuda-Envelope-From: usabolivia@usabolivia.biz X-Barracuda-Apparent-Source-IP: 81.30.156.90 Received: from apache by 156090.vs.webtropia.com with local (Exim 4.76) (envelope-from ) id 1UcVbZ-0000Dj-08 for linux-xfs@oss.sgi.com; Wed, 15 May 2013 08:54:29 +0200 To: linux-xfs@oss.sgi.com Subject: =?iso-8859-1?Q?Inicio_-_Curso_Huerta_y_Horticultura_Org=E1nica?= X-PHP-Originating-Script: 502:class_mailer.php X-ASG-Orig-Subj: =?iso-8859-1?Q?Inicio_-_Curso_Huerta_y_Horticultura_Org=E1nica?= Date: Wed, 15 May 2013 06:54:28 +0000 X-Sender: rebotes@plantinesapedido.com Errors-To: rebotes@plantinesapedido.com From: Plantines a Pedido Reply-To: Plantines a Pedido Message-ID: <16d1b3a1201df5a16e4ff65ac62f4ec8@usabolivia.biz> X-Priority: 5 X-Mailer: oemPro X-Mailer-MsgId: bGludXgteGZzQG9zcy5zZ2kuY29t X-Mailer-CSID: MV8x MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/html; charset="iso-8859-1" X-Barracuda-Connect: ns1.usabolivia.biz[81.30.156.90] X-Barracuda-Start-Time: 1368600871 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.80 X-Barracuda-Spam-Status: No, SCORE=0.80 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA_HREF_WWW_MISMATCH, HTML_FONT_SIZE_LARGE, HTML_IMAGE_RATIO_06, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131004 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.80 BSF_SC7_SA_HREF_WWW_MISMATCH BODY: Custom Phishing Mismatch 0.00 HTML_IMAGE_RATIO_06 BODY: HTML has a low ratio of text to image area 0.00 HTML_FONT_SIZE_LARGE BODY: HTML font size is large 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message
PARTICIPE DEL CURSO
"HUERTA Y HORTICULTURA ORGÁNICA"


Dirigido a todas aquellas personas que quieran conocer, aprender, crear y experimentar su propia huerta orgánica.
Cultivar y cosechar sus hortalizas desde la siembra hasta la recolección.
Consumir sus propios productos sanos y frescos sin agredir al medio ambiente.



Fecha de Inicio:
Sábado 8 de Junio de 2013

Horarios:
Grupo 1: 8:30 á 12:30 a.m.

Grupo 2: 14:30 á 18:30

Duración: 8 horas (2 sábados)

Tipo de curso: Presencial teórico 40% - práctico 60%

Lugar:
"Vivero de Plantines a Pedido" Av. Palmar Viruez, Ciudad de la Alegría U.V. 165

Inversión:
Bs. 450.- por participante

Su inversión incluye:
Costo del curso en dos medios días.
Manual del curso
5 plantines de hortalizas sencillas de cultivar.
Refrigerio

Forma de pago:
Las inscripciones pueden efectuarse mediante:

1) Efectivo o cheque, solicitando un funcionario autorizado para realizar el pago e inscripción en su oficina.
2) Mediante Transferencia o depósito bancario.

 
Para mayor información e inscripción:
(3) 328-0469  /  755-43970
E-mail: plantinesapedido@gmail.com
info@plantinesapedido.com
Santa Cruz de la Sierra - Bolivia

Este es un anuncio de PLANTINES A PEDIDO
NOTA: Esta publicidad no puede ser considerada como SPAM, mientras presenta una forma de ser removida, si no desea recibir más información por favor, responda con la palabra REMOVER a: bajas.mktg@hotmail.com
---------------------------------------------------------------------------------------------------------------------
Curso Huerta y Horticultura Orgánica
Para desuscribirse o invitar a un amigo por favor hacer clic en los siguientes enlaces:

Desuscribirse: http://usabolivia.biz/boletin/unsubscribe.php?CampaignID=1&CampaignStatisticsID=1&Demo=0&EncryptedMemberID=Nzc3MzY%3D&Email=linux-xfs@oss.sgi.com

Invitar a un amigo: http://usabolivia.biz/boletin/forward_campaign.php?CampaignID=1&CampaignStatisticsID=1&Demo=0&EncryptedMemberID=Nzc3MzY%3D&Email=linux-xfs@oss.sgi.com

--- From justlooks@gmail.com Wed May 15 02:09:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 64BD67F37 for ; Wed, 15 May 2013 02:09:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 41F6F304066 for ; Wed, 15 May 2013 00:09:02 -0700 (PDT) X-ASG-Debug-ID: 1368601737-04cbb05fe32aa4b0001-NocioJ Received: from mail-la0-f44.google.com (mail-la0-f44.google.com [209.85.215.44]) by cuda.sgi.com with ESMTP id nz0BpAXgSFgZFkEb (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 00:08:58 -0700 (PDT) X-Barracuda-Envelope-From: justlooks@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.44] Received: by mail-la0-f44.google.com with SMTP id fr10so1431129lab.3 for ; Wed, 15 May 2013 00:08:56 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=Y3OTeNdbJyATl1D+SUvnETgh9lz1cASQyiA+POjSKeI=; b=HjwitswLnzkcIAEezAsuwL3X49QZtmoHOUPGoPlq1HqDRxnRKde3FbdQhPetbRYgyL 4cTXeACLhtNpO8jKZWSiwnJn20RB2OkDmjljavNgqrPVnhlGgZWcG5C4y391F3atPn6b VwGVFu0F5O/8DPooaJEg1anvksqv4JoO+Cxzmmx4a77LsUjk6XQUA6fN8Qvi742chX0T rSb+jf/1mZ3pOl7bdKJMEwA2SovRPpK2Yua3csJ4D+NE3yBsEXv4rkL1pgOFgsOAiIr0 0Ex7nx4OXO+PUoh7lSCB5TFCH7BXm8WMkpS/2K6eT9KKJV/Pc3Omzn9eT8sL2qVcpRL+ oEdw== MIME-Version: 1.0 X-Received: by 10.112.149.35 with SMTP id tx3mr16892307lbb.95.1368601736734; Wed, 15 May 2013 00:08:56 -0700 (PDT) Received: by 10.112.209.71 with HTTP; Wed, 15 May 2013 00:08:56 -0700 (PDT) Date: Wed, 15 May 2013 15:08:56 +0800 Message-ID: Subject: Why xfs can not mount use barrier option? From: ch huang X-ASG-Orig-Subj: Why xfs can not mount use barrier option? To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7b342f385b6dd404dcbc6cbc X-Barracuda-Connect: mail-la0-f44.google.com[209.85.215.44] X-Barracuda-Start-Time: 1368601737 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131004 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b342f385b6dd404dcbc6cbc Content-Type: text/plain; charset=ISO-8859-1 i use lvm on raid 1,/dev/CHVG01/conxfs is a logical volume,if i mount with barrier,the /proc/mounts still show nobarrier option ,why? # mount -t xfs -o barrier,attr2,noikeep,inode64 /dev/CHVG01/conxfs /opt/contest/ # cat /proc/mounts /dev/CHVG01/conxfs /opt/contest xfs rw,attr2,nobarrier,inode64,noquota 0 0 --047d7b342f385b6dd404dcbc6cbc Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
i use lvm on raid 1,/dev/CHVG01/conxfs is a logical volume= ,if i =A0mount with barrier,the /proc/mounts still show nobarrier option ,w= hy?=A0

# =A0mount -t xfs -o barrier,attr2,noikeep,inode6= 4 /dev/CHVG01/conxfs =A0/opt/contest/
# cat /proc/mounts
/dev/CHVG01/conxfs /opt/= contest xfs rw,attr2,nobarrier,inode64,noquota 0 0
--047d7b342f385b6dd404dcbc6cbc-- From mlsemon35@gmail.com Wed May 15 02:13:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 66DF67F37 for ; Wed, 15 May 2013 02:13:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 01AD2AC002 for ; Wed, 15 May 2013 00:13:39 -0700 (PDT) X-ASG-Debug-ID: 1368602018-04bdf042232a7860001-NocioJ Received: from mail-ie0-f179.google.com (mail-ie0-f179.google.com [209.85.223.179]) by cuda.sgi.com with ESMTP id RWm53vS7pgP9vHRn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 00:13:39 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] Received: by mail-ie0-f179.google.com with SMTP id c13so2884728ieb.24 for ; Wed, 15 May 2013 00:13:38 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=lg9uFIf+YoI5/kc78gOvLKFPltPbuwFcpeWGPqS4hn0=; b=hz4RN5s+y7yo1Hc3QJgsjPMydxO2bNJ1JmnQgs0Z5QJjMX44FaAG3KzUATLlQmfuB1 1SpRiG0v2MZUBXNGLo5NeVFx59fQ5dFYFZWykke3KfNirQ2pNWAJSqCkCY8E3BKQD4Zm 8T4cFDUchaQNwTCkbl7OPN1CgXy3rX+H1TYYL3GPc5tu+A2NMOzDDk4PoeoAwLgbV5HD rt79hDhRgeS1Zu/OuuVzK3o56ZdlPFZW4c66Zq3gAlSf+jFwJsyrSWlo8AL2gn50oM8c /xO1wUX44f18lQsKHJlRikQDAtWODcA3wZc6FCODdrgpU4bSDU5XDwxybGE05wAGL8Zg c9uw== X-Received: by 10.50.128.227 with SMTP id nr3mr4599691igb.0.1368602018529; Wed, 15 May 2013 00:13:38 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id 9sm28448329igy.7.2013.05.15.00.13.30 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 15 May 2013 00:13:37 -0700 (PDT) Message-ID: <51933585.80400@gmail.com> Date: Wed, 15 May 2013 03:13:09 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jeff Liu CC: xfs@oss.sgi.com Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset References: <5191FB46.2080300@gmail.com> <519241A1.9050704@oracle.com> X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset In-Reply-To: <519241A1.9050704@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f179.google.com[209.85.223.179] X-Barracuda-Start-Time: 1368602018 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131004 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/14/2013 09:52 AM, Jeff Liu wrote: > Hi Michael, > > Have you tried this patch set with the v2 user space changes? > > Looks this is the latest update from Chandra that I can searched from > the mailing list: > http://oss.sgi.com/archives/xfs/2012-07/msg00293.html > > Thanks, > -Jeff It looks like it's not patching very well in light of Dave's CRC userspace changes, and I botched the mkfs part of the merge. For xfsprogs include/xfs_sb.h, Patch #1 has this: +#define XFS_SB_VERSION2_NO_OQUOTA 0x00000100 /* sep prj quota inode */ However, in the current xfsprogs include/xfs_sb.h, there is this line: #define XFS_SB_VERSION2_CRCBIT 0x00000100 /* metadata CRCs */ This overloaded meaning of 0x00000100 did not seem right, so after my failure with the finished mkfs.xfs, it was time to go back to the current git xfsprogs. I'm sure that the userspace will be reworked before the kernel code is final. I'll show some patience, and Dave's upcoming CRC code activation will probably force me to back Chandra's patchset out anyway. Despite my bumbling through it all, the kernel gquota/pquota patchset shows promise. Thanks! Michael P.S. - I applied your xfs_growfs_data_private patch, and all seems well so far. In particular, there was no change in the test results from `./check -xfs -g growfs`. From david@fromorbit.com Wed May 15 02:30:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B2FBA7F37 for ; Wed, 15 May 2013 02:30:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 37505AC009 for ; Wed, 15 May 2013 00:30:08 -0700 (PDT) X-ASG-Debug-ID: 1368603006-04cbb05fe22ab290001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id vzeXPhJRvwWqwwqa for ; Wed, 15 May 2013 00:30:06 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuIPANI4k1F5LKxY/2dsb2JhbABagweDCrhOhRwEAXoXdIIfAQEFJxMcIxAIAw4KCSUPBSUDIROIC70IFo1rgR0Hg1UDlzORPoMhKg Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail06.adl6.internode.on.net with ESMTP; 15 May 2013 17:00:05 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcWA0-0002ij-RX; Wed, 15 May 2013 17:30:04 +1000 Date: Wed, 15 May 2013 17:30:04 +1000 From: Dave Chinner To: Lukas Czerner Cc: linux-mm@kvack.org, hughd@google.com, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, akpm@linux-foundation.org, linux-ext4@vger.kernel.org Subject: Re: [PATCH v4 05/20] xfs: use ->invalidatepage() length argument Message-ID: <20130515073004.GQ29466@dastard> X-ASG-Orig-Subj: Re: [PATCH v4 05/20] xfs: use ->invalidatepage() length argument References: <1368549454-8930-1-git-send-email-lczerner@redhat.com> <1368549454-8930-6-git-send-email-lczerner@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368549454-8930-6-git-send-email-lczerner@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1368603006 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 14, 2013 at 06:37:19PM +0200, Lukas Czerner wrote: > ->invalidatepage() aop now accepts range to invalidate so we can make > use of it in xfs_vm_invalidatepage() > > Signed-off-by: Lukas Czerner > Reviewed-by: Ben Myers > Cc: xfs@oss.sgi.com Acked-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 15 02:33:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2053D7F37 for ; Wed, 15 May 2013 02:33:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id EC1AC304066 for ; Wed, 15 May 2013 00:33:07 -0700 (PDT) X-ASG-Debug-ID: 1368603185-04cb6c53a12ac6a0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id NCADVekEmigjAkiO for ; Wed, 15 May 2013 00:33:06 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AucPANI4k1F5LKxY/2dsb2JhbABAGoMHN4JTuE6EGoECBAF6F3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLDTO8SBaNXA+BHQeDVQOXM5E+gyEqgS4 Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail06.adl6.internode.on.net with ESMTP; 15 May 2013 17:03:05 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcWCu-0002jI-OU; Wed, 15 May 2013 17:33:04 +1000 Date: Wed, 15 May 2013 17:33:04 +1000 From: Dave Chinner To: ch huang Cc: xfs@oss.sgi.com Subject: Re: Why xfs can not mount use barrier option? Message-ID: <20130515073304.GR29466@dastard> X-ASG-Orig-Subj: Re: Why xfs can not mount use barrier option? References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1368603185 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Wed, May 15, 2013 at 03:08:56PM +0800, ch huang wrote: > i use lvm on raid 1,/dev/CHVG01/conxfs is a logical volume,if i mount with > barrier,the /proc/mounts still show nobarrier option ,why? http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > # mount -t xfs -o barrier,attr2,noikeep,inode64 /dev/CHVG01/conxfs /opt/contest/ > # cat /proc/mounts > /dev/CHVG01/conxfs /opt/contest xfs rw,attr2,nobarrier,inode64,noquota 0 0 Check dmesg - most likely something in your storage stack doesn't support barriers so they got turned off.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sbwmqyKu@px800802.vicp.net Wed May 15 02:39:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.3 required=5.0 tests=MIME_HEADER_CTYPE_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8EBF37F37 for ; Wed, 15 May 2013 02:39:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 749E530405F for ; Wed, 15 May 2013 00:39:57 -0700 (PDT) X-ASG-Debug-ID: 1368603586-04cb6c53a32acb30001-w1Z2WR Received: from px800802.vicp.net ([14.29.223.137]) by cuda.sgi.com with SMTP id SSp1BDRQtQojHp3A for ; Wed, 15 May 2013 00:39:47 -0700 (PDT) X-Barracuda-Envelope-From: sbwmqyKu@px800802.vicp.net X-Barracuda-Apparent-Source-IP: 14.29.223.137 Message-ID: <20130515074033171.FAefcUhlrIqoN07ufhiR@cuda-allmx.sgi.com> Date: Wed, 15 May 2013 15:40:33 +0800 (CST) From: "=?GB2312?B?xrfFxtOqz/o=?=" To: linux-xfs@oss.sgi.com Subject: =?GB2312?B?067U2srQs6EtLca3xcbTqs/60+vJzNK1xKPKvbS00MI=?= Content-Type: multipart/mixed; boundary="----_=_NextPart_000_0000A1C1.03E4A484" X-ASG-Orig-Subj: =?GB2312?B?067U2srQs6EtLca3xcbTqs/60+vJzNK1xKPKvbS00MI=?= X-Barracuda-Connect: UNKNOWN[14.29.223.137] X-Barracuda-Start-Time: 1368603587 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.46 X-Barracuda-Spam-Status: No, SCORE=1.46 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, MIME_HEADER_CTYPE_ONLY, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.86 MIME_HEADER_CTYPE_ONLY 'Content-Type' found without required MIME headers 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a multi-part message in MIME format. ------_=_NextPart_000_0000A1C1.03E4A484 Content-Type: text/plain;charset="GB2312" Content-Transfer-Encoding: base64 DQo8PNOu1NrK0LOhLS3Gt8XG06rP+tPryczStcSjyr20tNDCPj4NCg0Kw/fQx7T60dSjrM6qyrLD tDk5JbXEuN/L2cK3sd+547jmxcaxu8/7t9HV37zH16HWu9PQw/fQx8O709Cy+sa3o78NCrnjuObU 0seuo6zOqsqyw7Q5OSW1xNHrytO547jmserN9ba8wuS1w6GwstLLwKGxtcS94b7Wo78NCsvc1OzG t8XGo6zOqsqyw7Q5OSW1xNDQ0rW2vMrkuPjR88a3xcajrLP9wcu5+rL60cy+xqO/DQrStbyowPvI 86OszqrKssO0OTkltcTG89K1srvE3M/yzfXAz7yq0rvR+bjfy9nU9rOko78NCs/7t9HX5ci6o6zO qsqyw7Q5OSW1xM/7t9HV39Gh1PHBy8T6tcS+utX5ttTK1qO/DQoNCg0Kv84ts8wttPMtuNktx+st suktytUtuL0tvP4= ------_=_NextPart_000_0000A1C1.03E4A484 Content-Type: application/vnd.ms-excel; name="Æ·ÅÆÓªÏúÓëÉÌҵģʽ´´ÐÂ.xls" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Æ·ÅÆÓªÏúÓëÉÌҵģʽ´´ÐÂ.xls" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA EAAALQAAAAEAAAD+////AAAAAAAAAAD///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////9 ////MAAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8A AAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAA AB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAA LAAAAP7////+////LwAAADEAAAD+/////v////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////1IA bwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAWAAUA//////////8CAAAAIAgCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAJCFAFonTc4B LgAAAMAFAAAAAAAAVwBvAHIAawBiAG8AbwBrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAABIAAgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAACAAAARVUAAAAAAABFAFQARQB4AHQARABhAHQAYQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAACAQEAAAADAAAA/////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAQAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJ AG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIB/////wQA AAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAANABAAAAAAAACQgQ AAAGBQC7Dc0HwUAAAAYBAADhAAIAsATBAAIAAADiAAAAXABwAAQAAFVzZXJtAGkAbgBpAHMAdABy AGEAdABvAHIAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCAAIAsARhAQIAAADAAQAAPQECAAEA GQACAAAAEgACAAAAEwACAAAArwECAAAAvAECAAAAPQASAAAAAACwT6QfOAAAAAAAAQBYAkAAAgAA AI0AAgAAACIAAgAAAA4AAgABALcBAgAAANoAAgAAADEAFADwAAAA/3+QAQAAAAeGAAIBi1tTTzEA FADwACAA/3+QAQAAAAeGAAIBi1tTTzEAFADwACAA/3+QAQAAAAeGAAIBi1tTTzEAFADwACAA/3+Q AQAAAAeGAAIBi1tTTzEAFADcAAAA/3+QAQAAAAeGAAIBi1tTTzEAFADcAAAA/3+8AgAAAAeGAAIB i1tTTzEAFAC4AQAACQC8AgAAAAeGAAIBi1tTTzEAFADcAAAACQCQAQAAAAeGAAIBi1tTTzEAFAAY AQAACQC8AgAAAAeGAAIBi1tTTzEAFAAIAgAACQC8AgAAAAeGAAIBi1tTTx4EKwAFABMAASIA5f8i ACMALAAjACMAMAA7ACIA5f8iAFwALQAjACwAIwAjADAAHgQ1AAYAGAABIgDl/yIAIwAsACMAIwAw ADsAWwBSAGUAZABdACIA5f8iAFwALQAjACwAIwAjADAAHgQ3AAcAGQABIgDl/yIAIwAsACMAIwAw AC4AMAAwADsAIgDl/yIAXAAtACMALAAjACMAMAAuADAAMAAeBEEACAAeAAEiAOX/IgAjACwAIwAj ADAALgAwADAAOwBbAFIAZQBkAF0AIgDl/yIAXAAtACMALAAjACMAMAAuADAAMAAeBGkAKgAyAAFf ACAAIgDl/yIAKgAgACMALAAjACMAMABfACAAOwBfACAAIgDl/yIAKgAgAFwALQAjACwAIwAjADAA XwAgADsAXwAgACIA5f8iACoAIAAiAC0AIgBfACAAOwBfACAAQABfACAAHgRXACkAKQABXwAgACoA IAAjACwAIwAjADAAXwAgADsAXwAgACoAIABcAC0AIwAsACMAIwAwAF8AIAA7AF8AIAAqACAAIgAt ACIAXwAgADsAXwAgAEAAXwAgAB4EeQAsADoAAV8AIAAiAOX/IgAqACAAIwAsACMAIwAwAC4AMAAw AF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAjACMAMAAuADAAMABfACAAOwBfACAAIgDl/yIA KgAgACIALQAiAD8APwBfACAAOwBfACAAQABfACAAHgRnACsAMQABXwAgACoAIAAjACwAIwAjADAA LgAwADAAXwAgADsAXwAgACoAIABcAC0AIwAsACMAIwAwAC4AMAAwAF8AIAA7AF8AIAAqACAAIgAt ACIAPwA/AF8AIAA7AF8AIABAAF8AIAAeBC8AFwAVAAFcACQAIwAsACMAIwAwAF8AKQA7AFwAKABc ACQAIwAsACMAIwAwAFwAKQAeBDkAGAAaAAFcACQAIwAsACMAIwAwAF8AKQA7AFsAUgBlAGQAXQBc ACgAXAAkACMALAAjACMAMABcACkAHgQ7ABkAGwABXAAkACMALAAjACMAMAAuADAAMABfACkAOwBc ACgAXAAkACMALAAjACMAMAAuADAAMABcACkAHgRFABoAIAABXAAkACMALAAjACMAMAAuADAAMABf ACkAOwBbAFIAZQBkAF0AXAAoAFwAJAAjACwAIwAjADAALgAwADAAXAApAB4EdwCwADkAAV8AIAAi AOX/IgAqACAAIwAsACMAIwAwAC4AMAAwAF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAjACMA MAAuADAAMABfACAAOwBfACAAIgDl/yIAKgAgAFwALQA/AD8AXwAgADsAXwAgAEAAXwAgAB4EZwCx ADEAAV8AIAAiAOX/IgAqACAAIwAsACMAIwAwAF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAj ACMAMABfACAAOwBfACAAIgDl/yIAKgAgAFwALQBfACAAOwBfACAAQABfACAA4AAUAAAAAAD1/yAA AAAAAAAAAAAAAMAg4AAUAAEAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAEAAAD1/xAAAPQAAAAAAAAA AMAg4AAUAAIAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAIAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAA AAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQA AAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQAAAAAAAAAAMAg 4AAUAAAAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1 /xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQAAAAAAAAAAMAg4AAUAAAAAAD1/xAAAPQAAAAA AAAAAMAg4AAUAAAAAAABACAAAAAAAAAAAAAAAMAg4AAUAAAAKwD1/yAAAPgAAAAAAAAAAMAg4AAU AAAAsAD1/yAAAPgAAAAAAAAAAMAg4AAUAAAAKQD1/yAAAPgAAAAAAAAAAMAg4AAUAAAACQD1/yAA APgAAAAAAAAAAMAg4AAUAAAAsQD1/yAAAPgAAAAAAAAAAMAg4AAUAAUAAAABACgAABgAAAAAAAAA AMAg4AAUAAUAAAABACgAABwAAAAAAAAAAMAg4AAUAAYAAAABACgAABgAAAAAAAAAAMAg4AAUAAUA AAABACgAADgAAAAAAAAAAMAg4AAUAAAAAAABACgAADgAAAAAAAAAAMAg4AAUAAUAAAABACgAAHgA AEAgAAAAAMAg4AAUAAUAAAABACgAAHgAAEAgQCAAAMAg4AAUAAUAAAABACgAAHgAAEAgQCAAAMAg 4AAUAAUAAAABACgAAHgREEAgQCAAAMAg4AAUAAUAAAABACgAAHgRAEAgQCAAAMAg4AAUAAUAAAAB ACgAAHgRAEAgQCAAAMAg4AAUAAUAAAABACgAAHwRAEAgQCAAAMAg4AAUAAUAMQABACgAAHwRAEAg QCAAAMAg4AAUAAUAAAABACoAAHgRAEAgQCAABBQg4AAUAAcAAAABACoAAHgRAEAgQCAABBQg4AAU AAUAAAABACoAAHgRAUAgQCAABBQg4AAUAAgAAAABACoAAHgRAEAgQCAABBQg4AAUAAkAAAABACoA AHgRAEAgQCAABBQg4AAUAAoAAAABACoAAHgRAEAgQCAABBQg4AAUAAUAAAABACgAAHgREEAgQCAA AMAg4AAUAAUAAAABACgAAHgRAEAgAAAAAMAgkwIEAACAAP+TAgQAEIAD/5MCBAARgAT/kwIEABKA Bv+TAgQAE4AF/5MCBAAUgAf/YAECAAAAhQAkADIrAAAAAA4BdwB3AHcALgAzADcAMgAxAHAAeAAu AGMAbwBtAJoIGACaCAAAAAAAAAAAAAABAAAAAAAAAAQAAACMAAQAVgBWAMEBCADBAQAAjTQCACIA AgAAAK4BBAABAAEErgEGAAAAAQAAABcACAABAAEA/v/+//wADiCVAAAAhgAAABEAAWKNKFcCXjpX LQAtAMFUTHIlhACVDk5GVRpOIWoPXxtSsGUOAAElhACVz34GdDIAMAAxADMAxV/uT4R2AE4CWP6L FwAB9mX0lTBXuXAa/zIAMAAxADMAdF4wADUACGcyADUALQAyADYA5WUAMApOd20AMBwAAflXrYv5 W2GMGv8BTxpOtlsBMGOEi05/lQEwO2DPfgZ0ATAlhACVO2DRdspTJYQAlc5OGk66TlhURQABZltg TjmNKHUa/zEAMAAwADAAMABDUS8AZWcATmCNAE4sAA1OjVFTYphiDP8AlyhXDFQATipOCGeEdgxU AE7+iwt6TWKrTglnZGsYT+BgDP9VU+xyAE66TjZlOY01ADYAMAAwAENRAjAI/wVT7GJEjZllOY0B MEhTEJkBMDaDuXABMNFTaHlJewn/UAABLQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAt AC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0A LQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAt AC0ALQAtAC0ALQAtAAUAAf6LC3pNUgCKGv8KAAHZetiaAE65cAt3HCAlhACVHSAa/yIAAQ5mH2bj TgCKDP86TsBOSE45ADkAJQCEdtiaH5DvjbmPf15KVExyq4iIbTmNBYCwi09P6lMJZw5mH2ahbAln p07BVB//HQABf15KVDh4sZQM/zpOwE5ITjkAOQAlAIR2LlnGiX9eSlQHaItz/ZA9hJdfHCDoYHtr HSCEdtN+QFwf/xwAAVFYIJDBVExyDP86TsBOSE45ADkAJQCEdkyIGk79kJOP2X4LbcFUTHIM/2SW hk79VqdO33BSkR//GwABGk7pfilSpm0M/zpOwE5ITjkAOQAlAIR2AU8aTg1O/YARVItzAYAJVABO N2jYmh+Qnlh/lR//GQABiG05jc9lpH8M/zpOwE5ITjkAOQAlAIR2iG05jQWACZDpYoZOqGCEdt56 iU75W0tiH/8iAAHTfpxnDP9gT0BiWlCEdv2QL2YcIBmVHSCEdh//qYtgT5OPiWMNTi9mAl46V6J+ d20M/wyAL2aIbTmNBYCEdhGBd20CMBwAAepTCWcM/1NfJYQAlUeQCk6GTp5bGGI+bQz/TWIvZhwg Yo0dIACVDP8RYuxOJ1nwWPlbYE/0iwz/EQABHCAgAPlXrYtMdaFsCWcnWQheDP/qUwlnnlsYYj5t Af8dIAUAAUaWpk4mdFpT61ggAAEyADAAMQAxAHReCk53bSx7AE4ijc9+CjDjiQF4Io1GVQswhHaC gu52LU7WTq1lAIrvZ76PBlxilzRONHinTgIwIAABMgAwADEAMgB0Xu9nvo8oV71+pn6dT25jjn/9 VgowNHinTtVsCzAse0FTAE7getBj+lE0eKdO3U+kYjN194sCMCsAATIAMAAwADcAdF5rAGkAbgBk AGwAZQDRUwNeDP+nTsFUAE6iYgyAenoM/9ZOrWUAijV1UFtmTqdOwVTqUy9mx48hbidgp07BVAz/ AE6aWxpPPYRVXgIwLgABMgAwADEAMAB0XkkAcABhAGQA7pUWTtZOrWUAijV1UFtmTqdOwVSriNZT 406EdvZl405lZzROAjBTXylZjn/9VppObJoKkGsAaQBuAGQAbABlAEpT906bYi5VAjAbAAHKTilZ IADWTo1RrWUAihr/HCCgUhpZnVsdIAlOKk5XWzFcDU4CkAhUXE/JUTaDhHYNVFdbAf8qAAHWTo1R rWUAihr/MgAwADEAMwA3jExr0VMDXoR2HCDTYlVcsHOeWx0gPHdclQj/RwBvAG8AZwBsAGUAIABH AGwAYQBzAHMACf8NTu9T/YAQYp9SAf9DAAGeWxhiDVQBTxQgFCCwc81OS1kYYiWEAJUATr9+DP84 XnRe+05MgDUAMAAwADpfFlkBT2hRA3Q7YOiQDk46U99XAl46V+iQ2JpCXAz/iW3KUxZT5V19bGaP ATANZ3CZATCIbTmNwVQBMDV1UFtGVaFSATAfdWlyO1OXdUl7GlkqToaY31cCMCsAAQhe+lENVOiV FCAUIGhRA3QCXjpXJYQAlSx7AE6Edo5//VZ/iRdTJ1lmW+9RG208aKF7BnRmW2KWDP8IXs5OJYQA lUtONnLygylSbma3ANF5eXLSUgIwQQABGk5MdQ1Uuk4UIBQgIH0JZ2hRA3R/XkpUTHUcIGVZr2Vh UydZVlkdIIR2Gk5Mddia73onWVZZhHYnWS1OTlM6U8h+oVvEi9RZG/8KTndtLHsATiKNz34KMOOJ AXgijUZVCzCCgu52wVRMciWEAJV7fBNOkY95coCQO04BYwlWvlsCMAUAAf6LC3ohag9fGv8fAAEx AAEwD1zEfqiLuouMVBGBm1LAb2GDDP+pi2ZbWFQGdOOJuWXVbAz/zWRcT9CPKHXlXXdRDP+wczpX w35gThsAATIAATBmW1hU0GPulQz/AYAIXgln7pXFX1R7DP8gAPaW3Y27eaVj5okM/+BlnJaNeJ9s GpAgAB0AATMAATDOTgFPGk6RddFgjFRIaItPBlKQZ/pR0VMM/ztg037CiblwIADZfohO5V13USAA t4PWUzZlynYFAAH+iwt6hVG5Wxr/GwABLHsATiFqV1ca/yWEAJWuX8aJTHVNAGEAcgBrAGUAdABp AG4AZwAgAEkAbgBzAGkAZwBoAHQABAABZltgTjZlt4MOAAExAAEwhk7jiQJeOlclhACVDk7BVExy hHbuXQJfEgABMgABMAVuWmkCXjpXJYQAlTBSlV4vZuOJs1HATkhO7pWYmB//EQABMwABMKSLxovA TkhOL2ZxX81UiG05jQWAhHYfd2NrqFLgVhIAATQAATCki8aLAJeBiQ5OAJdCbIR2OlMrUspTJl5l Z4R2RlU6ZwsAATUAATCMY+Fj4W6zjQCXQmyEdrllD18FAAFIaItPBlKrThr/DAABzk6LcwGACVQw UqBSGlmdW/2QL2aTj7ZbDgABzk41dXFfCjAnWVWBCzAGUpBniG05jQWAAJdCbA4AAXNRLpXlXXdR Gv9smq9lG22EdgCXgYnRkVdbVFgeAAEse4xOIWpXVxr/JYQAlQ5OwVRMck0AYQByAGsAZQB0AGkA bgBnACAAJgAgAEIAcgBhAG4AZABpAG4AZwANAAExAAEwBnTjiQJeOlclhACVhHbIfoFn7naEdiAA ATIAATCMY+Fj71EbbTxo+3yEdvpXLGcCXjpXJYQAlRhiZXUI/9F5eXLSUoR2Al46VyWEAJWEdjho w18dYPNgCf8RAAEzAAEwpIvGi8FUTHKnTsFUDk5el8FUTHKnTsFUhHY6UytSCwABNAABMAZ044nB VExy9048UA5Omlv3Tg0AATUAATBTYiCQEGKfUsFUTHKEdgNOimLYeRlTCwABUwBVAFYAi1d9bGaP hHbeeolOenr0lQkAAQ9cc3xLYjpnhHYxWSWNn1PgVgsAAX52pl4OTjMANgAwACpnZWcBjPRmOl8T AAGPeXlymYTqjydr9IHcgA5Og2wUXINsUwA4ADAASXsojQ1OSXs8UBIAAXNRLpXlXXdRGv8YYmV1 JYQAlQlOgYkgfRr/UwABMFQAATBQAC0AASx7CU4haldXGv90ZQhUJYQAlSBPrWRJAG4AdABlAGcA cgBhAHQAZQBkACAATQBhAHIAawBlAHQAaQBuAGcAIABDAG8AbQBtAHUAbgBpAGMAYQB0AGkAbwBu AA4AATEAATCMY+FjdGUIVCWEAJUgT61khHaCafVfIAAOAAEyAAEwjGPhY39eSlSEdtF5ZltiXw9f Dk65ZQ9fDgABMwABMGZbGk9ja254hHbQjyh1bFFzUQ5OklpTTxMAATQAATB/Tyh1Yl9hjONOAIoo ALpOKQCEdp9TGVLKU86YaZahewZ0CAABoFIaWZ1bhHYQYp9SSGiLTwgAAcxb61i3XoR2cVM6Z2xR c1EKAAE5ADkAJQAOZh9m404AioR2MVkljQ0AAXNRLpXlXXdRGv9Xf3+JeXItABVef4npdzWWKAAB LHvbViFqV1ca/yWEAJUOTsFUTHJTT4yaTQBhAHIAawBlAHQAaQBuAGcAIAAmACAAQgByAGEAbgBk ACAARQB4AHAAZQByAGkAZQBuAGMAZQAMAAExAAEwwVRMcoR2MgDNeX2PU0/KUwdoOnkOAAEyAAEw aFG5ZU1PwVRMclNPjJqEdjYAKk65ZWKXDwABMwABMIxj4WPBVExy9048UA5Omlv3ToR2c1Eulblw DAABzWuyTkxyW3KJgHJehHYNVFdb1lMZlYZOEgABi3MBgAlUdgBzAIxUdlFja3YAcwCgUhpZnVuj kCpODVRXW31ZDAABc1EuleVdd1Ea/1NPjJoPXyWEAJWBiSB9FgABLHuUTiFqV1ca/8FUTHJ/YvqL QgByAGEAbgBkACAAUAByAG8AbQBpAHMAZQAOAAExAAEwBnTjicFUTHKEdn9i+ouEdnNRLpWBiSB9 GAABMgABMAZ044mIbTmNBYDhbg9hpl4OTnZR9048UFNP+3yEdjQAKk42lkJchHZzUft8DQABMwAB MAZ044lzUft8JYQAlYR2H3dja7VtSU4MAAEXU45/fWxmjwCVLlVYVIR2EGKfUth5wIsJAAGOf/1W S1x2mIR23U/uT39i+osFAAFzUS6V5V13URr/CwABGln0foR29048UFNP+3wGUpBn5V13UQoAAaJb N2JzUft8+3zffkMAUgBNACAAIgABLHttUSFqV1ca/xtSsGWEdvR+pl5EAGkAbQBlAG4AcwBpAG8A bgBzACAAbwBmACAASQBuAG4AbwB2AGEAdABpAG8AbgALAAExAAEwG1KwZYR221bNeQ1ODFS5ZQ9f EAABMgABMBtSsGXGURlSDk6IbTmNBYDDXwZ0hHZzUVSAJ2ASAAFIaItPBlKrThr/NXVQWygAuH4p AGZOv1LFXwCQ+lFfbFZuIAAMAAFzUS6V5V13URr/jE70fhtSsGXEiRJS/lYoAAEsewNOIWpXVxr/ d20WWcFUTHIlhACVIWoPX0cAbABvAGIAYQBsACAATQBhAHIAawBlAHQAaQBuAGcAIAAmACAAQgBy AGEAbgBkAGkAbgBnABEAATEAATBVU8FUTHIOThpZwVRMcoR2DU4MVM9+JYS5ZQ9fIAAOAAEyAAEw d20WWQJeOleEdhtSsGVGVRpOIWoPXyAADAAB5WVEjcFUTHKEdhpZ9H4CXjpXGGJldSAADQABjn9E jcFUTHIOTn+JuWUCXjpXOG4PYsSJGVIOAAFzUS6V5V13URr/d20WWcFUTHLEiRJShHYdYPR+CgAB sosIXstOzX4a/0aWpk4mdFpT61gIAAEYYmV1wVRMciWEAJUTTrZbTwABZluGU3aYp34tAC0ALQCO f/1WkmMNVE1SNQCEdg1UIWiOf/1Wf4kXUydZZlvvURttPGihewZ0Zltilk0AQgBBAMpTjn/9VgOD t1/UaxRceXInWWZbWlPrWBv/CF7OThwgsHPjTiWEAJVmW0tONnIdIPKDKVJuZrcA0Xl5ctJSCP9Q AGgAaQBsAGkAcAAgAEsAbwB0AGwAZQByAAn/AjBmAAGeWxhiJ2A6Xy0ALQAtAM1OS1kYYiWEAJUA Tr9+DP93g3BRh3a2W96YKVJmbTtTl3XdT2VQCP9QAGgAaQBsAGkAcABzACAASABlAGEAbAB0AGgA YwBhAHIAZQAJ/ydZLU5OUzpTGGJldQJeOlfokDtg0XYb/3eDcFGHdrZb3pgpUmZtL1UATgBOTU+3 g5dfx48lhACV+3zffkMARQBPAFZZhHYAZ3NPz34GdLpOG//lYgln0Y8yADAAGll0XoR2JYQAlZ5b GGLPfoyaAjBAAAHldw1Upl7Ymi0ALQAtAC1O/VZ/XkpUTHVlWa9lYVNWWQj/foLyg1ZZCf/Ei9RZ G/8KTndtLHsATiKNz34KMOOJAXgijUZVCzB5coCQO04BYwlWvlsM/3FRMwAyAB9nG//6UUhyZk5N fAowRpZaU+tY9Iu3ACWEAJX2ZeNOCzACMAsAAQow44kBeCKNRlULMIKC7nYNVPB5Gv9QAQHvU1BO hHZ+dnReGGKJTjEALQA0AAEwKmcYYkhRL2CEdrBl/YCQbn1sZo8BMJtRa3DoXTRZhHYfdQ9hz34B MClZf0+EdvGL0WABMA9cc3wgABr/HCD3lgNer2UdIIR2S2I6Zx91D2EBMEYAYQBjAGUAYgBvAG8A awAgABr/d1BlZ4R2HV79Vg5gSE6eUh//ATDFlk6GAYDjdwz/Glz9gG2ZJlQBMH52404a/352dF4x VUdy6F0fZoR2aJY9hAEw741Ohhr/ZVFYjXBTpl6Edhwg7pTulMGUSWwBMCJ9PFwa/3BlV1v2ZeNO hHZxUzpnATAQVbN+t1+3AHlyF2duZoR23pjEnn6Bvo9LTu+NATBTAHcAYQB0AGMAaAAtAFNf9mX0 lUeQMFL2ZRpcATDvZ76PGv/Sb3trhHZwZQF4+HY6Z0tONnIBMHNZi3MOTtpWkl8BMA9cFGw8m4xU J1kijcxbATDIVDlovo+vZS0AHHUch4R2YlmIT8FUATC7lPN3DP/lTjFyS04NVAEwQwBvAGEAYwBo AC0A5olLYu9TylOEdmJZiE8BMN1+twD5Wy0ALQAPT3lyoFIBMOFRolsM/+FRuk79kC9molsBMI1g bJotAI5/m1HjTgCKhHY3dSdgd4MUXJmEATBUgKaQ618SkC0AqYsFU/mI3pgBMM9rKk66TsNfLU79 kAlnAE4qTr6PrIJHWQEwMwA2ADAAhHZNUTmNSFMQmQEwTQBPAFQATwAgAEgARQBMAEwATwAf/wEw jVFaWiAAoWyjkEhOgHtVUwEwJE4qTm6PUFsKToR2EGIOTiWNATD3jzFZhHZOZ4FbATDIVPeWIADk UfBRhW3DaQEw+YKcZyIANJYLjCIAuosBMBFiL2b0fs1zDP8RYhVgAYwFAAH+iwt6U0/7fBr/MgAB RpamTiZ0WlPrWDIAMAAwADQAdF5JWQOM3lb9Vg5UDP+lY+aJMFKIXxpZAU8aTrZbATAbUhpOBYAB MCWEAJVMdQxUTIgBMEZVZltilhNOGk5ZZbKABYABMGZbYE4FgEl7SXsCMBsAAdFTsHOGTg1OEVwc IAlno40dILBzYYwM/7BzdGUGdPpR5U4LTndRCWfjTmiIJ2CEduBRuXAa/wkAASWEAJVLTi1O/Vaw c2GMS04ATiMAAcKJuXAa/xFi7E4tTv1WL2Z5coprhHYuAC4ALgAuAC4ALgDgVjpOLU79VoR2AE4H Uv2QBlwJY2dxLU79VoR2xImLX9FTVVwQAAHTfpxnGv8RYuxO71PlTg1Ou1MDgFGG/VYWWYR2z36M mgkAASWEAJVLTi1O/Vawc2GMS06MThkAAcKJuXAa/6SLOk4RYuxODU7CYSWEAJUM/wyA+Vt/ibll BnS6iw5OJ1kIXsePpl73j+FPHgAB036cZxr/LFSGTidZCF7sTvh2kk7bd/52hHbPfnhRDlQM/wBO NFn+ljRsDP/gZUBiApDOTi4ALgAuAC4ACQABJYQAlUtOLU79VrBzYYxLTglOIAABwom5cBr/JYQA leBlxImLXwz/YJfNYhGBi4gvZhBin1KEdnNRLpUM/yWEAJUOTn9eSlSEdp9S/YD3bcZtDU4FbhsA AdN+nGca/xdPGlkBTxpO4GUCXjpX6JAM/xZiBYACXjpX6JDqU3dRB1kvZQFjAJUuVYR2n1L9gAkA ASWEAJVLTi1O/Vawc2GMS07bVhQAAcKJuXAa//lbJYQAlYR2pIvGiw5Onlv1jdiPL2Y0AFAAHWD0 fjxoQFwqAAHTfpxnGv/5WyWEAJWEdqSLxouEdiVOzZHebg5UJ2AM/39Pl1/OThpOuk5YVDp/T075 WwJeOlclhACVZlvReShX0Y9BU3RehHbNkYGJ0VNVXKSLxoumAAFGlqZOJnRaU+tYpIs6Tgz/Al46 VyWEAJUsZ6uOL2YATuiVnlv1jSdgiF86Xwz/dl4UTg1OrWXRU1VchHbReWZbDP9GT1JfOWgwUpVe DP8CXjpXJYQAlcViH41AdwFPGk6EdhhiZXU4aMNfn1L9gAIwzk7udk1SDk79VoVRDFRMiKROQW0t Tpdf+lEM//1WhVEWWTxPTk4oV/lbAl46VyWEAJWEdgZ044kKThpcCWfuXd2NAjCCWVVPBlz5W55b RZbNZFxPd1EJZwdj/FsPYUlOhHYCXjpXJYQAlbBlHWD0fuVOApAIVC1O/Va6ToR2BnTjibllD1/b j0yIIE+tZB//RpZaU+tYeXIrUhR40VOEdgowwVRMciWEAJUOTkZVGk4hag9fG1KwZQsw/osLes2R gYnudoR2Y2svZptSQmzjibNR5U4KTu6VmJgCMD4AAcJToFIsZyFr/osLegz/71MJY2dx5U4LTjxo D19rWJlRpWINVN5WZ2II/w1ZNlIJZ0hlCf/eViBPMFIa/zAAMgAwAC0AMwAyADkAMQA1ADYAOQA5 ABZiRQAtAG0AYQBpAGwA84FjAHgAcAB4AHcAQABxAHEALgBjAG8AbQArAAEgACAAIAAgACAAIAAg ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAClYiAAIAAgACAADVQgACAA IAAgAGiIIAAgACAAIAA8aCoAAcJToFL+i5iYOgAgACAAIABijShXAl46Vy0ALQDBVExyJYQAlQ5O RlUaTiFqD18bUrBlIAAgACAAIAAgACAAIAAwV7lwGv8gACAAIAChJQpOd20gAAMAASAAIAAgAEkA AVVTTU8NVPB5CP/RU2h5rGI0WQn/Gv9fAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8A XwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AIABFAG0AYQBpAGwAGv9fAF8AXwBf AF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwAgAAAwAQABIABFAAFUgPt8uk4a/18AXwBfAF8A XwBfAF8AXwBfAF8AXwBfAF8AXwBfACAANXXdixr/XwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBf AF8AXwBfAF8AXwBfAF8AIAAgTx93Gv9fAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8A XwBfAF8AXwACAAEgAAAwSgABwlOgUmZbWFQa/18AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBf AEyAoVIa/18AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAEtiOmca/18AXwBfAF8AXwBfAF8A XwBfAF8AXwBfAF8AXwBfAEUAbQBhAGkAbAAa/18AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAEsAAcJT oFJmW1hUGv9fAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBMgKFSOgBfAF8AXwBfAF8AXwBf AF8AXwBfAF8AXwBfAF8AXwAgAEtiOmca/18AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAEUA bQBhAGkAbAAa/18AXwBfAF8AXwBfAF8AXwBfAF8AXwBfAAYAASAAIAAgACAAIAAgABkAAdhOPmu5 ZQ9fGv8gAKElsHM6V7Bz0ZEgACAAoSX+i01SbI8QXiAACP9TYhwgGiIdIAn/KAABT08gACAAIAAg AL9bGv8gAKElIAAvZiAAIAAgAKElIAAmVAj/T1OpUoSYoosM/zmNKHXqgQZ0Cf8gACAAIAAgACAA IAAgACAAIAAgACAAIAAdAAG6TnBlGv9fAF8AXwBfAF8AXwC6TiAAIAAgAMJTGk85jSh1Gv9xUaGL Gv9fAF8AXwBfAF8AXwBDUSAAfQABwlMaT7llD18a//eLqGCKYqViDVRoiDxoa1iZUX1ZIE8fdxZi RQAtAG0AYQBpAGwA84ERYrllDP86Tm543U+oYKViDVTgZe+LLAD3i6hgjVEhazV13YtueKSLIQAi a86PoFJRAFEACP8zADIAMQA4ADcANwA5AAn/249MiKhU4osWYqViDVQB//6LTVIATh9mH2eoYAZc Gk82ZTBSIE8fd/1RDP8FU+xi+Veti+hsD2GLTnmYLAB3UVNP742/fkl7LgAI/+WCNmUwUixnIWv+ iwt68l3Hjx9nDP/3i0UALQBtAGEAaQBsACJ91lMLTh9nAF/+i+VlH2cJ/z0AASoAKgAqACoAKgAq ACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoA KgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAGwAB KFe/fqhU4osa/1EAUQA6ADMAMgAxADgANwA3ADkACP+MmsGLGv/5V62LqFTiiwn/IAAgACAAEQAB aFH9Vu1wv34a/zQAMAAwAC0ANgA2ADkAOQAtADIAMAA2ABwAAahU4os1dd2LGv8wADIAMAAtADgA MgA2ADkAMgA2ADcANgAI/39e3l0J/yAAIACflEhRH3UgACAAHwABIAAgACAAIAAgACAAIAAgACAA IAAwADIAMQAtADUAMQAwADgAMgA4ADcAMgAI/wpOd20J/yAAIACXZ0hRH3USAAGlYg1UIE8fdxr/ MAAyADAALQAzADIAOQAxADUANgA5ADkAADAgAAGlYg1UrpCxexr/YwB4AHAAeAB3AEAAcQBxAC4A YwBvAG0AG/96AGwAeABAADMANwAyADEAcAB4AC4AYwBvAG0A/wAKAIYAGgsAAAwAAAAKAAAACQgQ AAAGEAC7Dc0HwUAAAAAGAAALAjQAAAAAAAAAAAAdAQAAJQcAAMYwAABCNQAAwjkAAEQ+AADGRAAA +kgAAAJNAAAKUQAAuFQAAA0AAgABAAwAAgBkAA8AAgABABEAAgAAABAACAD8qfHSTWJQP18AAgAB ACoAAgAAACsAAgAAAIIAAgABAIAACAAAAAAAAAAAACUCBAAAAA4BgQACAMEEFAAAABUAAACDAAIA AACEAAIAAAAmAAgAAAAAAAAA6D8nAAgAAAAAAAAA6D8oAAgAAAAAAAAA8D8pAAgAAAAAAAAA8D+h ACIAAQBkAPfvAQABAAIA/v8sAQAAAAAAAOA/AAAAAAAA4D8BAFUAAgAIAH0ADAAAAAAAgAoVAAIA BAB9AAwAAQABAABsGgACAAQAfQAMAAIAAAEACRUABgAEAAACDgAAAAAAHQEAAAAAAAEAAAgCEAAA AAEAAgAOAQAAAAAAAQ8ACAIQAAEAAQACAA4BAAAAAAABDwAIAhAAAgABAAIAowIAAAAAAAEPAAgC EAADAAEAAgB3AQAAAAAAAQ8ACAIQAAQAAQACAAQBAAAAAEABDwAIAhAABQAAAAIADgEAAAAAAAEP AAgCEAAGAAAAAgAdAQAAAAAAAQ8ACAIQAAcAAQACAA4BAAAAAAABDwAIAhAACAABAAIAHAIAAAAA AAEPAAgCEAAJAAEAAgAOAQAAAAAAAQ8ACAIQAAoAAQACAA4BAAAAAAABDwAIAhAACwABAAIADgEA AAAAAAEPAAgCEAAMAAEAAgAOAQAAAAAAAQ8ACAIQAA0AAQACAA4BAAAAAAABDwAIAhAADgABAAIA DgEAAAAAAAEPAAgCEAAPAAEAAgAOAQAAAAAAAQ8ACAIQABAAAQACAA4BAAAAAAABDwAIAhAAEQAB AAIADgEAAAAAAAEPAAgCEAASAAEAAgAOAQAAAAAAAQ8ACAIQABMAAQACAA4BAAAAAAABDwAIAhAA FAABAAIADgEAAAAAAAEPAAgCEAAVAAEAAgAOAQAAAAAAAQ8ACAIQABYAAQACAEABAAAAAEABDwAI AhAAFwABAAIADgEAAAAAAAEPAAgCEAAYAAEAAgAOAQAAAAAAAQ8ACAIQABkAAQACAA4BAAAAAAAB DwAIAhAAGgABAAIADgEAAAAAAAEPAAgCEAAbAAEAAgAcAgAAAAAAAQ8ACAIQABwAAQACAA4BAAAA AAABDwAIAhAAHQABAAIAHAIAAAAAAAEPAAgCEAAeAAEAAgAOAQAAAAAAAQ8ACAIQAB8AAQACAA4B AAAAAAABDwABAgYAAAABACQAAQIGAAEAAQAlAP0ACgACAAEAJwAAAAAA/QAKAAMAAQAmAAEAAAAB AgYABAABACMAAQIGAAUAAAAYAAECBgAFAAEAIgABAgYABgAAABkA/QAKAAYAAQAfAAIAAAD9AAoA BwABAB8AAwAAAP0ACgAIAAEAHwAEAAAA/QAKAAkAAQAhAAUAAAD9AAoACgABAB8ABgAAAP0ACgAL AAEAHwAHAAAA/QAKAAwAAQAfAAgAAAD9AAoADQABAB8ACQAAAP0ACgAOAAEAHwAKAAAA/QAKAA8A AQAfAAsAAAD9AAoAEAABAB8ADAAAAP0ACgARAAEAHwANAAAA/QAKABIAAQAfAA4AAAD9AAoAEwAB AB8ADwAAAP0ACgAUAAEAHwAQAAAA/QAKABUAAQAfABEAAAD9AAoAFgABAB8AEgAAAP0ACgAXAAEA HwATAAAA/QAKABgAAQAfABQAAAD9AAoAGQABAB8AFQAAAP0ACgAaAAEAHwAWAAAA/QAKABsAAQAf ABcAAAD9AAoAHAABAB8AGAAAAP0ACgAdAAEAHwAZAAAAAQIGAB4AAQAfAP0ACgAfAAEAHwAaAAAA 1wBEAEAEAABsAgoACgAOAA4ACgAUABgADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAO AA4ADgAOAA4ADgAOAAoACAIQACAAAQACAA4BAAAAAAABDwAIAhAAIQABAAIADgEAAAAAAAEPAAgC EAAiAAEAAgAOAQAAAAAAAQ8ACAIQACMAAQACAA4BAAAAAAABDwAIAhAAJAABAAIADgEAAAAAAAEP AAgCEAAlAAEAAgAOAQAAAAAAAQ8ACAIQACYAAQACAA4BAAAAAAABDwAIAhAAJwABAAIADgEAAAAA AAEPAAgCEAAoAAEAAgAOAQAAAAAAAQ8ACAIQACkAAQACAA4BAAAAAAABDwAIAhAAKgABAAIADgEA AAAAAAEPAAgCEAArAAEAAgAOAQAAAAAAAQ8ACAIQACwAAQACAA4BAAAAAAABDwAIAhAALQABAAIA DgEAAAAAAAEPAAgCEAAuAAEAAgAOAQAAAAAAAQ8ACAIQAC8AAQACAA4BAAAAAAABDwAIAhAAMAAB AAIADgEAAAAAAAEPAAgCEAAxAAEAAgAOAQAAAAAAAQ8ACAIQADIAAQACAA4BAAAAAAABDwAIAhAA MwABAAIADgEAAAAAAAEPAAgCEAA0AAEAAgAOAQAAAAAAAQ8ACAIQADUAAQACAA4BAAAAAAABDwAI AhAANgABAAIADgEAAAAAAAEPAAgCEAA3AAEAAgAOAQAAAAAAAQ8ACAIQADgAAQACAA4BAAAAAAAB DwAIAhAAOQABAAIADgEAAAAAAAEPAAgCEAA6AAEAAgAOAQAAAAAAAQ8ACAIQADsAAQACAA4BAAAA AAABDwAIAhAAPAABAAIADgEAAAAAAAEPAAgCEAA9AAEAAgAOAQAAAAAAAQ8ACAIQAD4AAQACAA4B AAAAAAABDwAIAhAAPwABAAIADgEAAAAAAAEPAP0ACgAgAAEAHwAbAAAA/QAKACEAAQAfABwAAAD9 AAoAIgABAB8AHQAAAP0ACgAjAAEAIQAFAAAA/QAKACQAAQAfAB4AAAABAgYAJQABAB8A/QAKACYA AQAfAB8AAAD9AAoAJwABAB8AIAAAAP0ACgAoAAEAHwAhAAAA/QAKACkAAQAfACIAAAD9AAoAKgAB AB8AIwAAAP0ACgArAAEAHwAkAAAA/QAKACwAAQAfACUAAAD9AAoALQABAB8AJgAAAP0ACgAuAAEA HwAnAAAA/QAKAC8AAQAfACgAAAD9AAoAMAABAB8AKQAAAAECBgAxAAEAHwD9AAoAMgABAB8AKgAA AP0ACgAzAAEAHwAgAAAA/QAKADQAAQAfACsAAAD9AAoANQABAB8ALAAAAP0ACgA2AAEAHwAtAAAA /QAKADcAAQAfAC4AAAD9AAoAOAABAB8ALwAAAP0ACgA5AAEAHwAmAAAA/QAKADoAAQAfADAAAAD9 AAoAOwABAB8AMQAAAP0ACgA8AAEAHwAyAAAA/QAKAD0AAQAfADMAAAD9AAoAPgABAB8ANAAAAAEC BgA/AAEAHwDXAEQANAQAAGwCDgAOAA4ADgAOAAoADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAoADgAO AA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAIAhAAQAABAAIADgEAAAAAAAEPAAgCEABBAAEAAgAOAQAA AAAAAQ8ACAIQAEIAAQACAA4BAAAAAAABDwAIAhAAQwABAAIADgEAAAAAAAEPAAgCEABEAAEAAgAO AQAAAAAAAQ8ACAIQAEUAAQACAA4BAAAAAAABDwAIAhAARgABAAIADgEAAAAAAAEPAAgCEABHAAEA AgAOAQAAAAAAAQ8ACAIQAEgAAQACAA4BAAAAAAABDwAIAhAASQABAAIADgEAAAAAAAEPAAgCEABK AAEAAgAOAQAAAAAAAQ8ACAIQAEsAAQACAA4BAAAAAAABDwAIAhAATAABAAIADgEAAAAAAAEPAAgC EABNAAEAAgAOAQAAAAAAAQ8ACAIQAE4AAQACAA4BAAAAAAABDwAIAhAATwABAAIADgEAAAAAAAEP AAgCEABQAAEAAgAOAQAAAAAAAQ8ACAIQAFEAAQACAA4BAAAAAAABDwAIAhAAUgABAAIADgEAAAAA AAEPAAgCEABTAAEAAgAOAQAAAAAAAQ8ACAIQAFQAAQACAA4BAAAAAAABDwAIAhAAVQABAAIADgEA AAAAAAEPAAgCEABWAAEAAgAOAQAAAAAAAQ8ACAIQAFcAAQACAA4BAAAAAAABDwAIAhAAWAABAAIA DgEAAAAAAAEPAAgCEABZAAEAAgAOAQAAAAAAAQ8ACAIQAFoAAQACAA4BAAAAAAABDwAIAhAAWwAB AAIADgEAAAAAAAEPAAgCEABcAAEAAgAOAQAAAAAAAQ8ACAIQAF0AAQACAA4BAAAAAAABDwAIAhAA XgABAAIADgEAAAAAAAEPAAgCEABfAAEAAgAOAQAAAAAAAQ8A/QAKAEAAAQAfADUAAAD9AAoAQQAB AB8AIAAAAP0ACgBCAAEAHwA2AAAA/QAKAEMAAQAfADcAAAD9AAoARAABAB8AOAAAAP0ACgBFAAEA HwA5AAAA/QAKAEYAAQAfACYAAAD9AAoARwABAB8AOgAAAP0ACgBIAAEAHwA7AAAA/QAKAEkAAQAf ADwAAAD9AAoASgABAB8APQAAAAECBgBLAAEAHwD9AAoATAABAB8APgAAAP0ACgBNAAEAHwAgAAAA /QAKAE4AAQAfAD8AAAD9AAoATwABAB8AQAAAAP0ACgBQAAEAHwBBAAAA/QAKAFEAAQAfACYAAAD9 AAoAUgABAB8AQgAAAP0ACgBTAAEAHwBDAAAA/QAKAFQAAQAfAEQAAAABAgYAVQABAB8A/QAKAFYA AQAfAEUAAAD9AAoAVwABAB8AIAAAAP0ACgBYAAEAHwBGAAAA/QAKAFkAAQAfAEcAAAD9AAoAWgAB AB8ASAAAAP0ACgBbAAEAHwAmAAAA/QAKAFwAAQAfAEkAAAD9AAoAXQABAB8ASgAAAP0ACgBeAAEA HwBLAAAA/QAKAF8AAQAfAEwAAADXAEQAOAQAAGwCDgAOAA4ADgAOAA4ADgAOAA4ADgAOAAoADgAO AA4ADgAOAA4ADgAOAA4ACgAOAA4ADgAOAA4ADgAOAA4ADgAIAhAAYAABAAIADgEAAAAAAAEPAAgC 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 aAAAAP0ACgCEAAEAHwBpAAAA/QAKAIUAAQAfAGoAAAD9AAoAhgABAB8AawAAAP0ACgCHAAEAHwBs AAAA/QAKAIgAAQAfAG0AAAD9AAoAiQABAB8AbgAAAAECBgCKAAEAHwD9AAoAiwABAB8AbwAAAAEC BgCMAAEAKAABAgYAjQAAABUAAQIGAI0AAQApAL4AAgKNAAIAFQAVABUAFQAVABUAFQAVABUAFQAV ABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUA FQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAV ABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUA FQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAV ABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUA FQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAV ABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUA FQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAV ABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVAP8A/QAKAI4AAQAfAHAAAAABAgYAjwABAB8A /QAKAJAAAQAfAHEAAAABAgYAkQABAB8A/QAKAJIAAQAfAHIAAAD9AAoAkwABAB8AcwAAAP0ACgCU AAEAHwB0AAAA/QAKAJUAAQAfAHUAAAD9AAoAlgABAB4AdgAAAP0ACgCXAAEAHgB3AAAA/QAKAJgA AQAeAHgAAAABAgYAmQAAABYAAQIGAJkAAQAeAP0ACgCaAAEAHgB5AAAAAQIGAJsAAQAeAP0ACgCc AAEAHgB4AAAA/QAKAJ0AAQAeAHoAAAD9AAoAngABAB4AewAAAAECBgCfAAEAHgDXAEQAOgYAAGwC DgAOAA4ADgAOAA4ADgAOAA4ADgAKAA4ACgAaAg4ACgAOAAoADgAOAA4ADgAOAA4ADgAUAA4ACgAO AA4ADgAIAhAAoAABAAIADgEAAAAAAAEPAAgCEAChAAEAAgAOAQAAAAAAAQ8ACAIQAKIAAQACAA4B AAAAAAABDwAIAhAAowABAAIADgEAAAAAAAEPAAgCEACkAAEAAgAcAgAAAAAAAQ8ACAIQAKUAAQAC AA4BAAAAAAABDwAIAhAApgABAAIADgEAAAAAAAEPAAgCEACnAAEAAgAOAQAAAAAAAQ8ACAIQAKgA AQACAA4BAAAAAAABDwAIAhAAqQABAAIADgEAAAAAAAEPAAgCEACqAAEAAgAOAQAAAAAAAQ8ACAIQ AKsAAQACAA4BAAAAAAABDwAIAhAArAABAAIADgEAAAAAAAEPAAgCEACtAAEAAgAOAQAAAAAAAQ8A CAIQAK4AAQACAA4BAAAAAAABDwAIAhAArwABAAIADgEAAAAAAAEPAAgCEACwAAEAAgAOAQAAAAAA AQ8ACAIQALEAAQACAA4BAAAAAAABDwAIAhAAsgABAAIADgEAAAAAAAEPAAgCEACzAAEAAgAOAQAA AAAAAQ8ACAIQALQAAQACAA4BAAAAAAABDwAIAhAAtQABAAIADgEAAAAAAAEPAAgCEAC2AAEAAgAO AQAAAAAAAQ8ACAIQALcAAQACAA4BAAAAAAABDwAIAhAAuAABAAIADgEAAAAAAAEPAAgCEAC5AAEA AgAOAQAAAAAAAQ8ACAIQALoAAQACAA4BAAAAAAABDwAIAhAAuwABAAIADgEAAAAAAAEPAAgCEAC8 AAEAAgAOAQAAAAAAAQ8ACAIQAL0AAQACAA4BAAAAAAABDwAIAhAAvgABAAIADgEAAAAAAAEPAAgC EAC/AAEAAgAOAQAAAAAAAQ8A/QAKAKAAAQAeAHwAAAABAgYAoQABAB4A/QAKAKIAAQAeAH0AAAAB AgYAowABAB4A/QAKAKQAAQAeAH4AAAD9AAoApQABAB4AfwAAAP0ACgCmAAEAHgCAAAAA/QAKAKcA AQAeAIEAAAD9AAoAqAABAB4AggAAAP0ACgCpAAEAHgCDAAAA/QAKAKoAAQAeAIQAAAD9AAoAqwAB AB4AhQAAAP0ACgCsAAEAHQB/AAAAAQIGAK0AAQAcAAECBgCuAAEAHAABAgYArwABABwAAQIGALAA AQAcAAECBgCxAAEAHAABAgYAsgABABwAAQIGALMAAQAcAAECBgC0AAEAHAABAgYAtQABABwAAQIG ALYAAQAcAAECBgC3AAEAHAABAgYAuAABABwAAQIGALkAAQAcAAECBgC6AAEAHAABAgYAuwABABwA AQIGALwAAQAcAAECBgC9AAEAHAABAgYAvgABABwAAQIGAL8AAQAcANcARADsAwAAbAIOAAoADgAK AA4ADgAOAA4ADgAOAA4ADgAOAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAgC EADAAAEAAgAOAQAAAAAAAQ8ACAIQAMEAAQACAA4BAAAAAAABDwAIAhAAwgABAAIADgEAAAAAAAEP AAgCEADDAAEAAgAOAQAAAAAAAQ8ACAIQAMQAAQACAA4BAAAAAAABDwAIAhAAxQABAAIADgEAAAAA AAEPAAgCEADGAAEAAgAOAQAAAAAAAQ8ACAIQAMcAAQACAA4BAAAAAAABDwAIAhAAyAABAAIADgEA AAAAAAEPAAgCEADJAAEAAgAOAQAAAAAAAQ8ACAIQAMoAAQACAA4BAAAAAAABDwAIAhAAywABAAIA DgEAAAAAAAEPAAgCEADMAAEAAgAOAQAAAAAAAQ8ACAIQAM0AAQACAA4BAAAAAAABDwAIAhAAzgAB AAIADgEAAAAAAAEPAAgCEADPAAEAAgAOAQAAAAAAAQ8ACAIQANAAAQACAA4BAAAAAAABDwAIAhAA 0QABAAIADgEAAAAAAAEPAAgCEADSAAEAAgAOAQAAAAAAAQ8ACAIQANMAAQACAA4BAAAAAAABDwAI AhAA1AABAAIADgEAAAAAAAEPAAgCEADVAAEAAgAOAQAAAAAAAQ8ACAIQANYAAQACAA4BAAAAAAAB DwAIAhAA1wABAAIADgEAAAAAAAEPAAgCEADYAAEAAgAOAQAAAAAAAQ8ACAIQANkAAQACAA4BAAAA AAABDwAIAhAA2gABAAIADgEAAAAAAAEPAAgCEADbAAEAAgAOAQAAAAAAAQ8ACAIQANwAAQACAA4B AAAAAAABDwAIAhAA3QABAAIADgEAAAAAAAEPAAgCEADeAAEAAgAOAQAAAAAAAQ8ACAIQAN8AAQAC AA4BAAAAAAABDwABAgYAwAABABwAAQIGAMEAAQAbAAECBgDCAAEAHAABAgYAwwABABwAAQIGAMQA AQAcAAECBgDFAAEAHAABAgYAxgABABwAAQIGAMcAAQAcAAECBgDIAAEAHAABAgYAyQABABwAAQIG AMoAAQAcAAECBgDLAAEAHAABAgYAzAABABwAAQIGAM0AAQAcAAECBgDOAAEAHAABAgYAzwABABwA AQIGANAAAQAcAAECBgDRAAEAHAABAgYA0gABABwAAQIGANMAAQAcAAECBgDUAAEAHAABAgYA1QAB ABwAAQIGANYAAQAbAAECBgDXAAEAHAABAgYA2AABABwAAQIGANkAAQAcAAECBgDaAAEAHAABAgYA 2wABABwAAQIGANwAAQAcAAECBgDdAAEAHAABAgYA3gABABwAAQIGAN8AAQAcANcARADAAwAAbAIK AAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoA CgAKAAgCEADgAAEAAgAOAQAAAAAAAQ8ACAIQAOEAAQACAA4BAAAAAAABDwAIAhAA4gABAAIADgEA AAAAAAEPAAgCEADjAAEAAgAOAQAAAAAAAQ8ACAIQAOQAAQACAA4BAAAAAAABDwAIAhAA5QABAAIA DgEAAAAAAAEPAAgCEADmAAEAAgAOAQAAAAAAAQ8ACAIQAOcAAQACAA4BAAAAAAABDwAIAhAA6AAB AAIADgEAAAAAAAEPAAgCEADpAAEAAgAOAQAAAAAAAQ8ACAIQAOoAAQACAA4BAAAAAAABDwAIAhAA 6wABAAIADgEAAAAAAAEPAAgCEADsAAEAAgAOAQAAAAAAAQ8ACAIQAO0AAQACAA4BAAAAAAABDwAI AhAA7gABAAIADgEAAAAAAAEPAAgCEADvAAEAAgAOAQAAAAAAAQ8ACAIQAPAAAQACAA4BAAAAAAAB DwAIAhAA8QABAAIADgEAAAAAAAEPAAgCEADyAAEAAgAOAQAAAAAAAQ8ACAIQAPMAAQACAA4BAAAA AAABDwAIAhAA9AABAAIADgEAAAAAAAEPAAgCEAD1AAEAAgAOAQAAAAAAAQ8ACAIQAPYAAQACAA4B AAAAAAABDwAIAhAA9wABAAIADgEAAAAAAAEPAAgCEAD4AAEAAgAOAQAAAAAAAQ8ACAIQAPkAAQAC AA4BAAAAAAABDwAIAhAA+gABAAIADgEAAAAAAAEPAAgCEAD7AAEAAgAOAQAAAAAAAQ8ACAIQAPwA AQACAA4BAAAAAAABDwAIAhAA/QABAAIADgEAAAAAAAEPAAgCEAD+AAEAAgAOAQAAAAAAAQ8ACAIQ AP8AAQACAA4BAAAAAAABDwABAgYA4AABABwAAQIGAOEAAQAcAAECBgDiAAEAHAABAgYA4wABABwA AQIGAOQAAQAcAAECBgDlAAEAHAABAgYA5gABABsAAQIGAOcAAQAcAAECBgDoAAEAHAABAgYA6QAB ABwAAQIGAOoAAQAcAAECBgDrAAEAHAABAgYA7AABABwAAQIGAO0AAQAcAAECBgDuAAEAHAABAgYA 7wABABwAAQIGAPAAAQAcAAECBgDxAAEAHAABAgYA8gABABwAAQIGAPMAAQAcAAECBgD0AAEAHAAB AgYA9QABABwAAQIGAPYAAQAbAAECBgD3AAEAHAABAgYA+AABABwAAQIGAPkAAQAcAAECBgD6AAEA HAABAgYA+wABABwAAQIGAPwAAQAbAAECBgD9AAEAHAABAgYA/gABABwAAQIGAP8AAQAcANcARADA AwAAbAIKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoA CgAKAAoACgAKAAgCEAAAAQEAAgAOAQAAAAAAAQ8ACAIQAAEBAQACAA4BAAAAAAABDwAIAhAAAgEB AAIADgEAAAAAAAEPAAgCEAADAQEAAgAOAQAAAAAAAQ8ACAIQAAQBAQACAA4BAAAAAAABDwAIAhAA BQEBAAIADgEAAAAAAAEPAAgCEAAGAQEAAgAOAQAAAAAAAQ8ACAIQAAcBAQACAA4BAAAAAAABDwAI AhAACAEBAAIADgEAAAAAAAEPAAgCEAAJAQEAAgAOAQAAAAAAAQ8ACAIQAAoBAQACAA4BAAAAAAAB DwAIAhAACwEBAAIADgEAAAAAAAEPAAgCEAAMAQEAAgAOAQAAAAAAAQ8ACAIQAA0BAQACAA4BAAAA AAABDwAIAhAADgEBAAIADgEAAAAAAAEPAAgCEAAPAQEAAgAOAQAAAAAAAQ8ACAIQABABAQACAA4B AAAAAAABDwAIAhAAEQEBAAIADgEAAAAAAAEPAAgCEAASAQEAAgAOAQAAAAAAAQ8ACAIQABMBAQAC AA4BAAAAAAABDwAIAhAAFAEBAAIADgEAAAAAAAEPAAgCEAAVAQEAAgAOAQAAAAAAAQ8ACAIQABYB AQACAA4BAAAAAAABDwAIAhAAFwEBAAIADgEAAAAAAAEPAAgCEAAYAQEAAgAOAQAAAAAAAQ8ACAIQ ABkBAQACAA4BAAAAAAABDwAIAhAAGgEBAAIADgEAAAAAAAEPAAgCEAAbAQEAAgAOAQAAAAAAAQ8A CAIQABwBAQACAA4BAAAAAAABDwABAgYAAAEBABwAAQIGAAEBAQAcAAECBgACAQEAHAABAgYAAwEB ABwAAQIGAAQBAQAcAAECBgAFAQEAHAABAgYABgEBABwAAQIGAAcBAQAcAAECBgAIAQEAHAABAgYA CQEBABwAAQIGAAoBAQAcAAECBgALAQEAHAABAgYADAEBABwAAQIGAA0BAQAcAAECBgAOAQEAHAAB AgYADwEBABwAAQIGABABAQAcAAECBgARAQEAHAABAgYAEgEBABwAAQIGABMBAQAcAAECBgAUAQEA HAABAgYAFQEBABwAAQIGABYBAQAcAAECBgAXAQEAHAABAgYAGAEBABwAAQIGABkBAQAcAAECBgAa AQEAHAABAgYAGwEBABwAAQIGABwBAQAbANcAPgBmAwAAMAIKAAoACgAKAAoACgAKAAoACgAKAAoA CgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAD4CEgC0BgAAAABAAAAAPAAAAAAAAAAd AA8AAwIAAQAAAAEAAgACAAEBmQACAAAJYggUAGIIAAAAAAAAAAAAABQAAABBAAAACgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAD+////CAAAAAkAAAAKAAAACwAAAAwA AAANAAAADgAAAP7///8QAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAA/v////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////wkIEAABBgAPmgLVBwAAAAAIAAAA+w9WARoSNMgqAP///wEAAMD/AAAAAAAAwP8A AAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAA AAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAAAAAAAA AQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAPwBAAAAAMD//AEAAQAAwP/8AQAA AADA//z/HwAAAMD//P8fAAAAwP/85/kAAADA//z3/QAAAMD//Of5AAAAwP/89/0AAADA//zn+QAA AMD//P//AAAAwP/8//8BAADA//z//wEAAMD//P//AAAAwP/8//8AAADA//z//wAAAMD//P//AAAA wP/8//8AAADA//z//wAAAMD//P//AAAAwP/85/sAAADA//cPDAAAAAEA4D0AAM8vAAAKAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAD+/wAABQECAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAACgAQAAEwAA AAEAAACgAAAAAAAAgKgAAAACAAAAsAAAAAMAAAC8AAAABAAAAMgAAAAFAAAA5AAAAAYAAADwAAAA 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 AAAAAAAA ------_=_NextPart_000_0000A1C1.03E4A484-- From korn-xfs=oss.sgi.com@elan.rulez.org Wed May 15 03:04:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C27B47F37 for ; Wed, 15 May 2013 03:04:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 913848F806F for ; Wed, 15 May 2013 01:04:02 -0700 (PDT) X-ASG-Debug-ID: 1368605036-04bdf042242a9e00001-NocioJ Received: from chinook.cae-engineering.hu (chinook.cae-engineering.hu [213.165.74.136]) by cuda.sgi.com with ESMTP id MFIKtrioqBy1ocNd for ; Wed, 15 May 2013 01:03:57 -0700 (PDT) X-Barracuda-Envelope-From: korn-xfs=oss.sgi.com@elan.rulez.org X-Barracuda-Apparent-Source-IP: 213.165.74.136 Received: (qmail 32059 invoked from network); 15 May 2013 10:03:55 +0200 Received: from korn-home.user.vpn.cae-engineering.hu (HELO hellgate.av.hu) (172.18.32.249) by chinook.vpn.cae-engineering.hu with ESMTP; 15 May 2013 10:03:55 +0200 Received: (qmail 23508 invoked by uid 1000); 15 May 2013 10:03:55 +0200 Date: Wed, 15 May 2013 10:03:55 +0200 From: Andras Korn To: xfs@oss.sgi.com Subject: Re: wishlist: xfs_repair should detect files with too small sizes Message-ID: <20130515080355.GL17260@hellgate> X-ASG-Orig-Subj: Re: wishlist: xfs_repair should detect files with too small sizes References: <20130514215550.GK17260@hellgate> <20130515004736.GM29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130515004736.GM29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: chinook.cae-engineering.hu[213.165.74.136] X-Barracuda-Start-Time: 1368605036 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131008 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 15, 2013 at 10:47:36AM +1000, Dave Chinner wrote: > > I have thousands of files on xfs whose inode claims their size is zero, but > > they have blocks allocated to them; du(1) reports a nonzero size. xfs_repair > > 3.1.9 ignores this. xfs_db can be used to recover the contents of the files > > (using commands like inode 1234; write core.size 4567). > > > > David Chinner explained to me that xfs_repair ignores these files because > > it's legitimate to have blocks beyond eof (e.g. due to fallocate()), and > > Actually due to speculative preallocation done by delayed > allocation. But if the space is preallocated speculatively and then remains unused, shouldn't it get freed up somehow, eventually? > > that unwritten extent flagging doesn't help because such extents don't need > > to be flagged as it's impossible to read them. > > fallocate will leave unwritten extents beyond EOF, in which case we > can detect it, but we know there's nothing to be done as there's no > data.... OK, so we have the following cases: 1. fallocate. The file has more space allocated to it than the size field in its inode says, and the extra extents are flagged as unwritten. 2. speculative preallocation. Same as above, but the extents are not flagged as unwritten. 3. corruption. The file's inode reports an incorrect size for whatever reason. If it's too much, that's easy to detect; the problem is telling if it's too little. Distinguishing between #1 and #2 is possible based on the unwritten flags. In case #2, I think the extra space should be possible to free up (perhaps by xfs_repair?). Of course, I suppose you could just run truncate(1) on all files... The problem is recognising #3. Do I have that right? > > I think it would be useful to have the ability to distinguish between files > > that legitimately have extents beyond EOF and files whose inode incorrectly > > reports a too-small size. > > How? Add a transaction to track the data that has been written? > > Well, we already do that - with the inode size. Ah, yes, that's true. OK, thinking about it I realise there doesn't appear to be a good way of preventing the problem, but I'm still not sure some heuristic couldn't be invented to detect and partially remedy it after the fact. -- Andras Korn C++ is like an onion. It's got so many layers that you can't help but cry. From rjohnston@sgi.com Wed May 15 07:29:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2DE0D7F37 for ; Wed, 15 May 2013 07:29:53 -0500 (CDT) Received: from xmail.sgi.com (unknown [137.38.106.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5209DAC036; Wed, 15 May 2013 05:29:49 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 15 May 2013 07:29:48 -0500 Message-ID: <51937FDB.2090906@sgi.com> Date: Wed, 15 May 2013 07:30:19 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , Liu Bo , linux-btrfs Subject: Re: [PATCH] xfstests btrfs/284: shorten duration, fix output References: <517ACB41.2030002@redhat.com> In-Reply-To: <517ACB41.2030002@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 04/26/2013 01:45 PM, Eric Sandeen wrote: > test 284 had... some issues. > > diff --git a/tests/btrfs/284 b/tests/btrfs/284 > old mode 100644 > new mode 100755 > index d952977..67161a3 > --- a/tests/btrfs/284 > +++ b/tests/btrfs/284 > This patch has been committed: commit 91f87e3b89c0f7350a56d397ba7255d0e3d6b486 Author: Eric Sandeen Date: Wed May 15 07:18:07 2013 -0500 xfstests btrfs/284: shorten duration, fix output Signed-off-by: Eric Sandeen Reviewed-by: Josef Bacik Reviewed-by: Liu Bo Thanks --Rich From rjohnston@sgi.com Wed May 15 08:13:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9ED057F37 for ; Wed, 15 May 2013 08:13:59 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21.corp.sgi.com [137.38.106.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7EB9D30405F; Wed, 15 May 2013 06:13:56 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 15 May 2013 08:13:56 -0500 Message-ID: <51938A33.50202@sgi.com> Date: Wed, 15 May 2013 08:14:27 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eryu Guan CC: Subject: Re: [PATCH v3] xfstests generic 312: test fallocate(2) ENOSPC when file size is greater than 4G References: <1367833355-14473-1-git-send-email-eguan@redhat.com> In-Reply-To: <1367833355-14473-1-git-send-email-eguan@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/06/2013 04:42 AM, Eryu Guan wrote: > ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G > > Regression test for commit > 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() > > Signed-off-by: Eryu Guan Tested fine for xfs and ext4, Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Wed May 15 08:15:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 84C3F7F37 for ; Wed, 15 May 2013 08:15:45 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21.corp.sgi.com [137.38.106.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5E4FD304039; Wed, 15 May 2013 06:15:45 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 15 May 2013 08:15:44 -0500 Message-ID: <51938A9F.9050206@sgi.com> Date: Wed, 15 May 2013 08:16:15 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eryu Guan CC: Subject: Re: [PATCH v3] xfstests generic 312: test fallocate(2) ENOSPC when file size is greater than 4G References: <1367833355-14473-1-git-send-email-eguan@redhat.com> In-Reply-To: <1367833355-14473-1-git-send-email-eguan@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/06/2013 04:42 AM, Eryu Guan wrote: > ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G > > Regression test for commit > 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() > > Signed-off-by: Eryu Guan > --- > This patch has been committed: commit 355beacfaf705294b119a3da372512589ff893e9 Author: Eryu Guan Date: Wed May 15 07:48:41 2013 -0500 ENOSPC in fallocate(2) could corrupt ext4 when file size > 4G Regression test for commit 29ae07b ext4: Fix overflow caused by missing cast in ext4_fallocate() Signed-off-by: Eryu Guan Reviewed-by: Rich Johnston Signed-off-by: Rich Johnston Thanks --Rich From jeff.liu@oracle.com Wed May 15 08:16:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5005B7F37 for ; Wed, 15 May 2013 08:16:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id DDD33AC008 for ; Wed, 15 May 2013 06:16:27 -0700 (PDT) X-ASG-Debug-ID: 1368623786-04bdf042252bb960001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id Hyd5AP5DOxPL5YCU (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 06:16:26 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4FDGOs9015756 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 15 May 2013 13:16:25 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4FDGOvA014843 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 15 May 2013 13:16:24 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4FDGNng014804; Wed, 15 May 2013 13:16:24 GMT Received: from [192.168.1.103] (/221.223.102.37) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 15 May 2013 06:16:23 -0700 Message-ID: <51938AA4.4090008@oracle.com> Date: Wed, 15 May 2013 21:16:20 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: xfs@oss.sgi.com Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset References: <5191FB46.2080300@gmail.com> <519241A1.9050704@oracle.com> <51933585.80400@gmail.com> X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset In-Reply-To: <51933585.80400@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368623786 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131028 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 05/15/2013 03:13 PM, Michael L. Semon wrote: > On 05/14/2013 09:52 AM, Jeff Liu wrote: >> Hi Michael, >> >> Have you tried this patch set with the v2 user space changes? >> >> Looks this is the latest update from Chandra that I can searched from >> the mailing list: >> http://oss.sgi.com/archives/xfs/2012-07/msg00293.html >> >> Thanks, >> -Jeff > > It looks like it's not patching very well in light of Dave's CRC > userspace changes, and I botched the mkfs part of the merge. Yes, that is based on the older version of xfsprogs with out CRC changes applied. So we have to wait until an updated version is delivered. :) Thanks, -Jeff > > For xfsprogs include/xfs_sb.h, Patch #1 has this: > > +#define XFS_SB_VERSION2_NO_OQUOTA 0x00000100 /* sep prj quota > inode */ > > However, in the current xfsprogs include/xfs_sb.h, there is this line: > > #define XFS_SB_VERSION2_CRCBIT 0x00000100 /* metadata CRCs */ > > This overloaded meaning of 0x00000100 did not seem right, so after my > failure with the finished mkfs.xfs, it was time to go back to the > current git xfsprogs. I'm sure that the userspace will be reworked > before the kernel code is final. I'll show some patience, and Dave's > upcoming CRC code activation will probably force me to back Chandra's > patchset out anyway. > > Despite my bumbling through it all, the kernel gquota/pquota patchset > shows promise. > > Thanks! > > Michael > > P.S. - I applied your xfs_growfs_data_private patch, and all seems well > so far. In particular, there was no change in the test results from > `./check -xfs -g growfs`. > From rjohnston@sgi.com Wed May 15 08:22:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4A1977F4E for ; Wed, 15 May 2013 08:22:23 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21.corp.sgi.com [137.38.106.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 271CD8F8071; Wed, 15 May 2013 06:22:19 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 15 May 2013 08:22:17 -0500 Message-ID: <51938C29.4010904@sgi.com> Date: Wed, 15 May 2013 08:22:49 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Zheng Liu Subject: Re: [PATCH] xfstests: change file mode References: <1368347826-32152-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368347826-32152-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/12/2013 03:37 AM, Zheng Liu wrote: > Now in tests/ there are some test cases whose mode is 0644. But they > should be 0755. So fix it. > > Signed-off-by: Zheng Liu > This patch has been committed: commit fbf6e863ccb628ff5dd7407d58a065e5f264a7ab Author: Zheng Liu Date: Wed May 15 08:17:51 2013 -0500 xfstests: change test case file mode to 0755 Now in tests/ there are some test cases whose mode is 0644. But they should be 0755. So fix it. Signed-off-by: Zheng Liu Reviewed-by: Dave Chinner Signed-off-by: Rich Johnston Thanks --Rich From iinfo@web.com Wed May 15 08:30:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 83D207F37 for ; Wed, 15 May 2013 08:30:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1BD36AC00A for ; Wed, 15 May 2013 06:30:58 -0700 (PDT) X-ASG-Debug-ID: 1368624655-04cbb05fe22bdec0001-w1Z2WR Received: from cronus2.prowebsector.gr (cronus2.prowebsector.gr [188.40.84.81]) by cuda.sgi.com with ESMTP id gJdCutWDKfYjFNjX (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 06:30:56 -0700 (PDT) X-Barracuda-Envelope-From: iinfo@web.com X-Barracuda-Apparent-Source-IP: 188.40.84.81 Received: (qmail 11875 invoked by uid 48); 15 May 2013 06:50:55 +0300 Received: from 250.211.29.196.client250.directonpc.net (250.211.29.196.client250.directonpc.net [196.29.211.250]) by webmail.tsaknis.gr (Horde Framework) with HTTP; Wed, 15 May 2013 05:50:55 +0200 Message-ID: <20130515055055.118945gqo9b4ovmn@webmail.tsaknis.gr> Date: Wed, 15 May 2013 05:50:55 +0200 From: iinfo@web.com Reply-To: iinfo@noreply.com To: undisclosed-recipients: ; Subject: MIME-Version: 1.0 X-ASG-Orig-Subj: Content-Type: text/plain; charset=ISO-8859-1; DelSp="Yes"; format="flowed" Content-Disposition: inline Content-Transfer-Encoding: 7bit User-Agent: Internet Messaging Program (IMP) H3 (4.3.6) X-Barracuda-Connect: cronus2.prowebsector.gr[188.40.84.81] X-Barracuda-Start-Time: 1368624656 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.55 X-Barracuda-Spam-Status: No, SCORE=2.55 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_SUBJECT, MISSING_SUBJECT_2, NO_REAL_NAME, RCVD_NUMERIC_HELO, RCVD_NUMERIC_HELO_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131030 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO 0.01 MISSING_SUBJECT Missing Subject: header 1.25 RCVD_NUMERIC_HELO_2 Received: contains an IP address used for HELO 1.28 MISSING_SUBJECT_2 Missing Subject: header -- Hi, Important message from ADMIN- Please confirm your email address by clicking this link: http://feedbacck.jimdo.com/ Best, Webmaster From rjohnston@sgi.com Wed May 15 08:59:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 01C1D7F3F for ; Wed, 15 May 2013 08:59:23 -0500 (CDT) Received: from xmail.sgi.com (pv-excas3-dc21.corp.sgi.com [137.38.106.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id AF6BEAC00A; Wed, 15 May 2013 06:59:22 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 15 May 2013 08:59:21 -0500 Message-ID: <519394D8.2050005@sgi.com> Date: Wed, 15 May 2013 08:59:52 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Zheng Liu , Eric Sandeen , Dave Chinner Subject: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file References: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/13/2013 11:40 AM, Zheng Liu wrote: > From: Zheng Liu > > After applied this commit (864688d3), xfstests #255 will not test a > file system that cannot support fallocate(2), such as a indirect-based > file in ext4. So we need to add a new generic test case to test it. > > The difference between #255 and this test case is only to use pwrite to > allocate blocks. Other filesystems should survive in this test case. > In the mean time, a new argument '-u' is added into _test_generic_punch > not to run unwritten tests. > > Meanwhile this commit fixes a minor problem in #255 that testfile should > use $seq.$$ as testfile. > > Signed-off-by: Zheng Liu > Cc: Eric Sandeen > Cc: Dave Chinner > Cc: Rich Johnston > --- > changelog: > * rebase against Eric's patch > * remove 'prealloc" from group > > Hi Eric, > > I take a close look at your patch, and 'xfs_io_opt' has been removed in your > patch. I am not sure whether I need to adjust my patch or not. Please let me > know if I need to change it. Currently I only remove '-F' argument from test > case. > > Thanks, > - Zheng > > common/punch | 164 ++++++++++++++++++++++++++----------------------- > tests/generic/255 | 2 +- > tests/generic/314 | 67 ++++++++++++++++++++ > tests/generic/314.out | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/generic/group | 1 + > 5 files changed, 323 insertions(+), 76 deletions(-) > create mode 100755 tests/generic/314 > create mode 100644 tests/generic/314.out > > diff --git a/common/punch b/common/punch > index b9f9acd..f1fc92d 100644 > --- a/common/punch > +++ b/common/punch > @@ -285,19 +285,25 @@ die_now() > # Use the -d flag to not sync the file between tests. > # This will test the handling of delayed extents > # > +# Use the -u flag to not run unwritten tests. > +# This will eliminate some unnecessary information. > +# > _test_generic_punch() > { > > remove_testfile=1 > sync_cmd="-c fsync" > + unwritten_tests=1 > OPTIND=1 > - while getopts 'dk' OPTION > + while getopts 'dku' OPTION > do > case $OPTION in > k) remove_testfile= > ;; > d) sync_cmd= > ;; > + u) unwritten_tests= > + ;; > ?) echo Invalid flag > exit 1 > ;; > @@ -334,16 +340,18 @@ _test_generic_punch() > [ $? -ne 0 ] && die_now > _md5_checksum $testfile > > - echo " 3. into unwritten space" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > + if [ "$unwritten_tests" ]; then > + echo " 3. into unwritten space" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "$alloc_cmd 0 20k" \ > + -c "$zero_cmd 4k 8k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "$alloc_cmd 0 20k" \ > - -c "$zero_cmd 4k 8k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > > echo " 4. hole -> data" > if [ "$remove_testfile" ]; then > @@ -356,16 +364,18 @@ _test_generic_punch() > [ $? -ne 0 ] && die_now > _md5_checksum $testfile > > - echo " 5. hole -> unwritten" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > + if [ "$unwritten_tests" ]; then > + echo " 5. hole -> unwritten" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "$alloc_cmd 8k 8k" \ > + -c "$zero_cmd 4k 8k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "$alloc_cmd 8k 8k" \ > - -c "$zero_cmd 4k 8k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > > echo " 6. data -> hole" > if [ "$remove_testfile" ]; then > @@ -378,40 +388,42 @@ _test_generic_punch() > [ $? -ne 0 ] && die_now > _md5_checksum $testfile > > - echo " 7. data -> unwritten" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > - fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "pwrite 0 8k" $sync_cmd \ > - -c "$alloc_cmd 8k 8k" \ > - -c "$zero_cmd 4k 8k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > - > - echo " 8. unwritten -> hole" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > - fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "$alloc_cmd 0 8k" \ > - -c "$zero_cmd 4k 8k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > - > - echo " 9. unwritten -> data" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > + if [ "$unwritten_tests" ]; then > + echo " 7. data -> unwritten" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "pwrite 0 8k" $sync_cmd \ > + -c "$alloc_cmd 8k 8k" \ > + -c "$zero_cmd 4k 8k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > + > + echo " 8. unwritten -> hole" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "$alloc_cmd 0 8k" \ > + -c "$zero_cmd 4k 8k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > + > + echo " 9. unwritten -> data" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "$alloc_cmd 0 8k" \ > + -c "pwrite 8k 8k" $sync_cmd \ > + -c "$zero_cmd 4k 8k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "$alloc_cmd 0 8k" \ > - -c "pwrite 8k 8k" $sync_cmd \ > - -c "$zero_cmd 4k 8k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > > echo " 10. hole -> data -> hole" > if [ "$remove_testfile" ]; then > @@ -438,30 +450,32 @@ _test_generic_punch() > [ $? -ne 0 ] && die_now > _md5_checksum $testfile > > - echo " 12. unwritten -> data -> unwritten" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > - fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "$alloc_cmd 0 20k" \ > - -c "pwrite 8k 4k" $sync_cmd \ > - -c "$zero_cmd 4k 12k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > - > - echo " 13. data -> unwritten -> data" > - if [ "$remove_testfile" ]; then > - rm -f $testfile > + if [ "$unwritten_tests" ]; then > + echo " 12. unwritten -> data -> unwritten" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "$alloc_cmd 0 20k" \ > + -c "pwrite 8k 4k" $sync_cmd \ > + -c "$zero_cmd 4k 12k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > + > + echo " 13. data -> unwritten -> data" > + if [ "$remove_testfile" ]; then > + rm -f $testfile > + fi > + $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > + -c "$alloc_cmd 0 20k" \ > + -c "pwrite 0k 8k" $sync_cmd \ > + -c "pwrite 12k 8k" -c "fsync" \ > + -c "$zero_cmd 4k 12k" \ > + -c "$map_cmd -v" $testfile | $filter_cmd > + [ $? -ne 0 ] && die_now > + _md5_checksum $testfile > fi > - $XFS_IO_PROG $xfs_io_opt -f -c "truncate 20k" \ > - -c "$alloc_cmd 0 20k" \ > - -c "pwrite 0k 8k" $sync_cmd \ > - -c "pwrite 12k 8k" -c "fsync" \ > - -c "$zero_cmd 4k 12k" \ > - -c "$map_cmd -v" $testfile | $filter_cmd > - [ $? -ne 0 ] && die_now > - _md5_checksum $testfile > > echo " 14. data -> hole @ EOF" > rm -f $testfile Hey Zheng, Thanks for submitting this patch. Looks like this patch does not apply cleanly. --Rich Applying patch..v5-xfstests-add-a-new-test-case-for-ext4-indirect-based-file.patch error: patch failed: common/punch:334 error: common/punch: patch does not apply Context reduced to (2/2) to apply fragment at 51 To force apply this patch, use 'guilt push -f' From gnehzuil.liu@gmail.com Wed May 15 10:14:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0EFB07F37 for ; Wed, 15 May 2013 10:14:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id AF7EDAC00A for ; Wed, 15 May 2013 08:14:06 -0700 (PDT) X-ASG-Debug-ID: 1368630842-04bdf042252c5200001-NocioJ Received: from mail-pd0-f173.google.com (mail-pd0-f173.google.com [209.85.192.173]) by cuda.sgi.com with ESMTP id lhyGKECJPMX0TUMk (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 08:14:02 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.173 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.173] Received: by mail-pd0-f173.google.com with SMTP id v10so1455875pde.18 for ; Wed, 15 May 2013 08:14:02 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.173] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.173] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=memwxLbieQgEyGfAgqIAGSw9N9b6Ud2eQdbnA0n8+jo=; b=pSfIs2HGeTQ5sXERVKJqIzBRTRDuapyHAJmUCXdJQgrHFOyGryhG0e9aVo2DwztyTl qXpTgLBfOwCn6ZW8M0qPBZrbqoEkExesoIy3uWw9L+jfI+mK9GP+O4pCwQh/d3UNBebC lWNZjvOsVF3wyK/1mmLbX+rFIHJMQm4TDCgBEvZX1EapsH3dmLPfFruu63FEonyYRdND pH4VRUGCA/LFzp0XDlM2GcuqYrPvI1HesXzrMnNxgAesDNs7VSVje0QSbEZozlOwVGaY Ou4rYFiN+AD00+bnD+q9ZET8tgN3dg/8CWtQIevdq4eMLFrnzoxs76DBGPVWE9UZSXAd SXBw== X-Received: by 10.68.89.36 with SMTP id bl4mr38832190pbb.59.1368630842297; Wed, 15 May 2013 08:14:02 -0700 (PDT) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPSA id b7sm3140973pba.39.2013.05.15.08.13.59 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 15 May 2013 08:14:01 -0700 (PDT) Date: Wed, 15 May 2013 23:31:46 +0800 From: Zheng Liu To: Rich Johnston Cc: xfs@oss.sgi.com, Zheng Liu , Eric Sandeen , Dave Chinner Subject: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file Message-ID: <20130515153146.GA17148@gmail.com> X-ASG-Orig-Subj: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file References: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> <519394D8.2050005@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519394D8.2050005@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-pd0-f173.google.com[209.85.192.173] X-Barracuda-Start-Time: 1368630842 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131036 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Wed, May 15, 2013 at 08:59:52AM -0500, Rich Johnston wrote: [...] > Hey Zheng, > > Thanks for submitting this patch. Looks like this patch does not > apply cleanly. Hi Rich, Yes, this patch bases against Eric's patch: [PATCH] xfstests: automatically add -F to xfs_io on non-xfs But his patch hasn't been applied. So that is why this patch doesn't apply cleanly. Do I need to resend a cleanly version? Thanks, - Zheng From JBacik@fusionio.com Wed May 15 10:20:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C31D87F37 for ; Wed, 15 May 2013 10:20:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 540F0AC00A for ; Wed, 15 May 2013 08:20:23 -0700 (PDT) X-ASG-Debug-ID: 1368631221-04cbb05fe42c5db0001-NocioJ Received: from dkim1.fusionio.com (dkim1.fusionio.com [66.114.96.53]) by cuda.sgi.com with ESMTP id 1lHfkSvtV7C6aqCt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 08:20:21 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.53 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim1.fusionio.com (Postfix) with ESMTP id 2D3927C0689 for ; Wed, 15 May 2013 09:20:21 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1368631221; bh=1cncM6sbzTjcTM/re/eax/imZR2jRsEHBj9SrkC4/UI=; h=From:To:Subject:Date; b=YKsHreYdPGoshAwv9NoUBz3NmhkZadE2Au8dpKrIksWZl1IMLw2+pN4OUge27EkG0 U9jRi8hhpf0aA8FWPlfIN6k/R9wdzlWvb3b2IIZOazTTHwSkDLfVSVMllWBt9OsxRd iBPzi6mplNzu336wXgo5gJ9tmQ2sql4UOQbyUEfQ= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id P6NfUD45f6XY73YS (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 09:20:20 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Wed, 15 May 2013 09:20:19 -0600 From: Josef Bacik To: Subject: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 Date: Wed, 15 May 2013 11:20:17 -0400 X-ASG-Orig-Subj: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 Message-ID: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> X-Mailer: git-send-email 1.7.7.6 MIME-Version: 1.0 Content-Type: text/plain X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim1.fusionio.com[66.114.96.53] X-Barracuda-Start-Time: 1368631221 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131038 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Dave pointed out that xfs was having issues with 311 because of caching issues. He suggested that I fsck the dm-flakey device to make sure we don't have this problem. Make _check_scratch_fs take an optional argument to use as the device to fsck. Thanks, Signed-off-by: Josef Bacik --- V1->V2: make _check_scratch_fs() take the optional argument of the device to check common/rc | 11 +++++++---- tests/generic/311 | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/common/rc b/common/rc index 7adf8b8..fe6bbfc 100644 --- a/common/rc +++ b/common/rc @@ -1678,6 +1678,9 @@ _check_test_fs() _check_scratch_fs() { + device=$SCRATCH_DEV + [ $# -eq 1 ] && device=$1 + case $FSTYP in xfs) SCRATCH_LOG="none" @@ -1688,19 +1691,19 @@ _check_scratch_fs() [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \ SCRATCH_RT="$SCRATCH_RTDEV" - _check_xfs_filesystem $SCRATCH_DEV $SCRATCH_LOG $SCRATCH_RT + _check_xfs_filesystem $device $SCRATCH_LOG $SCRATCH_RT ;; udf) - _check_udf_filesystem $SCRATCH_DEV $udf_fsize + _check_udf_filesystem $device $udf_fsize ;; nfs*) # Don't know how to check an NFS filesystem, yet. ;; btrfs) - _check_btrfs_filesystem $SCRATCH_DEV + _check_btrfs_filesystem $device ;; *) - _check_generic_filesystem $SCRATCH_DEV + _check_generic_filesystem $device ;; esac } diff --git a/tests/generic/311 b/tests/generic/311 index 2b3b569..675d927 100644 --- a/tests/generic/311 +++ b/tests/generic/311 @@ -125,7 +125,7 @@ _run_test() #Unmount and fsck to make sure we got a valid fs after replay _unmount_flakey - _check_scratch_fs + _check_scratch_fs $FLAKEY_DEV [ $? -ne 0 ] && _fatal "fsck failed" _mount_flakey -- 1.7.7.6 From sandeen@sandeen.net Wed May 15 10:22:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D5B1C7F37 for ; Wed, 15 May 2013 10:22:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B54BF304067 for ; Wed, 15 May 2013 08:22:11 -0700 (PDT) X-ASG-Debug-ID: 1368631330-04cbb05fe52c5f90001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id CS5eSi5PymrpZElZ for ; Wed, 15 May 2013 08:22:10 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6524F63C5FF1; Wed, 15 May 2013 10:22:10 -0500 (CDT) Message-ID: <5193A823.1000303@sandeen.net> Date: Wed, 15 May 2013 10:22:11 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: Rich Johnston , xfs@oss.sgi.com, Zheng Liu , Dave Chinner Subject: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file References: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> <519394D8.2050005@sgi.com> <20130515153146.GA17148@gmail.com> X-ASG-Orig-Subj: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file In-Reply-To: <20130515153146.GA17148@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368631330 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131038 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/15/13 10:31 AM, Zheng Liu wrote: > On Wed, May 15, 2013 at 08:59:52AM -0500, Rich Johnston wrote: > [...] >> Hey Zheng, >> >> Thanks for submitting this patch. Looks like this patch does not >> apply cleanly. > > Hi Rich, > > Yes, this patch bases against Eric's patch: > [PATCH] xfstests: automatically add -F to xfs_io on non-xfs > > But his patch hasn't been applied. So that is why this patch doesn't > apply cleanly. Do I need to resend a cleanly version? My patch is now applied... The joys of distributed development ;) -Eric > Thanks, > - Zheng > From sandeen@sandeen.net Wed May 15 10:31:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DA0317F4C for ; Wed, 15 May 2013 10:31:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B4669304066 for ; Wed, 15 May 2013 08:31:55 -0700 (PDT) X-ASG-Debug-ID: 1368631914-04bdf042252c6920001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ftmtCzGr7e8wEXhn for ; Wed, 15 May 2013 08:31:54 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3D65161AEC41; Wed, 15 May 2013 10:31:54 -0500 (CDT) Message-ID: <5193AA69.7050507@sandeen.net> Date: Wed, 15 May 2013 10:31:53 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: xfs@oss.sgi.com, Zheng Liu , Dave Chinner , Rich Johnston Subject: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file References: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> X-ASG-Orig-Subj: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file In-Reply-To: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368631914 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131038 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/13/13 11:40 AM, Zheng Liu wrote: > From: Zheng Liu > > After applied this commit (864688d3), xfstests #255 will not test a > file system that cannot support fallocate(2), such as a indirect-based > file in ext4. So we need to add a new generic test case to test it. > > The difference between #255 and this test case is only to use pwrite to > allocate blocks. Other filesystems should survive in this test case. > In the mean time, a new argument '-u' is added into _test_generic_punch > not to run unwritten tests. > > Meanwhile this commit fixes a minor problem in #255 that testfile should > use $seq.$$ as testfile. > > Signed-off-by: Zheng Liu > Cc: Eric Sandeen > Cc: Dave Chinner > Cc: Rich Johnston > --- > changelog: > * rebase against Eric's patch > * remove 'prealloc" from group > > Hi Eric, > > I take a close look at your patch, and 'xfs_io_opt' has been removed in your > patch. I am not sure whether I need to adjust my patch or not. Please let me > know if I need to change it. Currently I only remove '-F' argument from test > case. xfs_io_opt was an option passed to _test_generic_punch used for "-F", as in: _test_generic_punch -k falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F -F is no longer needed, so I just dropped the whole thing. I'm sorry this patch has required so much work. :( If you simply replace "$xfs_io_opt " with "" in this patch, it applies again with some fuzz. i.e. in vim I just did: :%s/$xfs_io_opt //g to fix up the patch itself. There is also still one instance of "-F" in the context of the hunk in tests/generic/255 as well which causes a little fuzz.] Thank you for your perseverance on this patch. :) -Eric From flyfayer@netcamch.com Wed May 15 12:05:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE,WEIRD_PORT autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1027D7F37 for ; Wed, 15 May 2013 12:05:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id F19828F8070 for ; Wed, 15 May 2013 10:05:08 -0700 (PDT) X-ASG-Debug-ID: 1368637500-04cbb05fe32cc9e0001-w1Z2WR Received: from hdnetcam.com (mail.hdnetcam.com [27.154.242.138]) by cuda.sgi.com with ESMTP id JYRCXdbLz5pRk2Ot for ; Wed, 15 May 2013 10:05:01 -0700 (PDT) X-Barracuda-Envelope-From: flyfayer@netcamch.com X-Barracuda-Apparent-Source-IP: 27.154.242.138 Received: from Cnmailserver [218.85.143.218] by hdnetcam.com with ESMTP (SMTPD32-8.05) id A03C4230492; Thu, 16 May 2013 01:05:00 +0800 Reply-To: "Flyfayer" Date: Thu, 16 May 2013 01:04:51 +0800 From: "Flyfayer" To: linux-xfs@oss.sgi.com Subject: RE:Looking for IP cameras partner X-Priority: 3 X-ASG-Orig-Subj: RE:Looking for IP cameras partner X-Has-Attach: no X-Mailer: Foxmail 7.0.1.92[cn] Mime-Version: 1.0 Message-ID: <2013051317534496837912@hdnetcam.com> Content-Type: multipart/related; boundary="----=_001_NextPart487436706730_=----" X-Barracuda-Connect: mail.hdnetcam.com[27.154.242.138] X-Barracuda-Start-Time: 1368637500 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.11 X-Barracuda-Spam-Status: No, SCORE=1.11 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE, WEIRD_PORT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131044 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 WEIRD_PORT URI: Uses non-standard port number for HTTP 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word This is a multi-part message in MIME format. ------=_001_NextPart487436706730_=---- Content-Type: multipart/alternative; boundary="----=_002_NextPart826001033641_=----" ------=_002_NextPart826001033641_=---- Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 RGVhciBQcm9kdWN0IE1hbmFnZXIsDQoNCkdvb2QgRGF5LkdsYWQgdG8ga25vdyB0aGF0IHlvdSBh cmUgaW4gc3VydmVpbGxhbmNlIGZpZWxkLkRvIHlvdSBuZWVkIElQIGNhbWVyYXMgcmVjZW50bHk/ DQoNClRoaXMgaXMgRmx5LldlIGFyZSBhIHByb2Zlc3Npb25hbCBIRCBJUCBjYW1lcmFzIG1hbnVm YWN0dXJlciBpbiBDaGluYS4NCg0KQXMgd2UgcHJvdmlkZSBPTlZJRiBJUCBjYW1lcmFzIGFuZCB3 aXRoIG91ciBvd24gc29mdHdhcmUgZm9yIHlvdXIgcmVjb3JkaW5nIGFuZCBtYW5hZ2VtZW50LHlv dSBjb3VsZCBjaG9zZSBpbiBkaWZmZXJlbnQgY29sbG9jYXRpb246DQoxLk91ciBJUCBjYW1lcmFz K091ciBzb2Z0d2FyZSBiYXNlZCBOVlIgZm9yIHNvbWUgcHJvamVjdHMNCjIuT3VyIElQIGNhbWVy YXMrb3RoZXIgaGFyZHdhcmUgTlZSDQozLk90aGVyIGJyYW5kcyBPTlZJRiBJUCBjYW1lcmFzK291 ciBzb2Z0d2FyZSBiYXNlZCBOVlIgYnkgZnJlZQ0KDQpOb3csd2UgYXJlIGxvb2tpbmcgZm9yIHBh cnRuZXJzIHRoZXJlIHdpdGggc3BlY2lhbCBwcmljZXMgYW5kIHJlZ3VsYXRpb24gc3VjaCBhcyBu byBzdHJpY3QgbGltaXRhdGlvbiBmb3IgT0VNLkFuZCBhbHNvIHdlIGNvdWxkIHN1cHBvcnQgbG9j YWwgbGFuZ3VhZ2VzIGFuZCBpbi10aW1lIHRlY2guIHN1cHBvcnQgZm9yIHlvdSBvbmNlIG5lY2Vz c2FyeS4NCg0KWW91IGNvdWxkIHJlcGx5IG1lIGRpcmVjdGx5IHRvIGtub3cgbW9yZSBpbmNsdWRp bmcgcHJpY2VzIGFuZCBwcm9tb3Rpb24gZ29vZHMuDQpCUiwNCkZseQ0KLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgIA0KSWYgeW91IHdvdWxk IGxpa2UgdG8gcmVjZWl2ZSBvdXIgbmV3c2xldHRlcnMgdG8gZ2V0IG1vcmUgaWRlYSBvZiBvdXIg cHJvZHVjdHMsIHBsZWFzZSBjbGljayBoZXJlIHRvIHN1YnNjcmliZTsNCkRvbid0IHdhbnQgdG8g cmVjZWl2ZSB0aGVzZSBuZXdzbGV0dGVycyBhbnltb3JlPyB1bnN1YnNjcmliZQ== ------=_002_NextPart826001033641_=---- Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable
Dear=20 Product Manager,
 
Good=20 Day.Glad to know that you are in surveillance field.Do you need IP cameras= =20 recently?
 
This=20 is Fly.We are a professional HD IP camer= as=20 manufacturer in China.
 
As=20 we provide ONVIF IP cameras and with our own software for your recording a= nd=20 management,you could chose in different collocation:
1.Our=20 IP cameras+Our software based NVR for some projects
2.Our=20 IP cameras+other hardware NVR
3.Other=20 brands ONVIF IP cameras+our software based NVR by free
=
Now,we=20 are looking for partners there with spec= ial=20 prices and regulation such as no strict limitation for OEM.And also we could support local lan= guages=20 and in-time tech. support for you once necessary.
 
You=20 could reply me directly to know more including prices and promotion=20 goods.
BR,
Fly
-----------------------------------------           =      =20
If you would like to receive our newsletters to get more idea= of our=20 products, please= =20 click here=20 to=20 subscribe;

= Don't want to receive these newsletters=20 anymore? unsubscribe

<= /SPAN>
=
------=_002_NextPart826001033641_=------ ------=_001_NextPart487436706730_=---- Content-Type: image/jpeg; name="=?gb2312?B?v6q3otDFsuXNvDA1MTMwMi5qcGc=?=" Content-Transfer-Encoding: base64 Content-ID: <_Foxmail.0@9C489FCE-C75A-4387-BBEB-606023FEAFF8> /9j/4AAQSkZJRgABAgEASABIAAD/4QEYRXhpZgAATU0AKgAAAAgABgEaAAUAAAABAAAAVgEbAAUA AAABAAAAXgEoAAMAAAABAAIAAAExAAIAAAAOAAAAZgEyAAIAAAAUAAAAdIdpAAQAAAABAAAAiAAA ALIACvyAAAAnEAAK/IAAACcQd3d3Lm1laXR1LmNvbQAyMDEzOjAzOjIxIDEyOjAzOjA5AAADoAEA AwAAAAEAAQAAoAIABAAAAAEAAARgoAMABAAAAAEAAAIwAAAAAAAGAQMAAwAAAAEABgAAARoABQAA AAEAAAEAARsABQAAAAEAAAEIASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAZ8AAAA AAAAAEgAAAABAAAASAAAAAH/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsN DhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQU FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCADHAScDAREAAhEB AxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9 AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEB AQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJB UQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RV VldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6 wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6ACgAoA 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 U2sp7Dc2G9mz2r7aeVUsTlMK1CK9pFXdt2td/wBPQ/J6fEWIwPElXC4ubdCcuVX2i7Lb77P1uz0L Rvi7b+DdO+Iur+KdRmk07TPEMtpapjfJgqpWKMd+c4HYZPSvDlgJ4qvRoYaOsoRb/G7Z9bSzinl+ ExWLx03ywqziurtpaK/E0NL/AGgNN8S6B4mk0zS9Qg1/R7E3p0i+jRJnjKbkkGG2svIJwc/mKiWW SpzpOc06c3ZSV7aOzW17/I3hn8K9LEKnTlGrSjzOErX1V097W763PNPhp+1VqFr8PNS8S+MtOvdS iXUVgSfTLeNYowy5CDLjoR35+Yc17WMyOEscsJhJJe7ezv8AnbqfLZVxbVhlLzLMYSkudxvFRtto krp6efc9Wi/aD8LTeLbXQQ1yJbnSBrEd0UXyjFsMm085D7FJxjHHWvC/srEew+saW5uW3W97fdfQ +u/1hwf1v6o735PaX0ta1++9tStrP7RXh7Sh4cgisdSv9W123W6ttMt4lEyRkHBfcwUZwQOecelO lllSpCpVckoQdnLWzd7aWVwxGf0KFWjh4wlKrVjzKKtdK19btJbCn9o7wrN8LrnxzZrd3mnWsqQX FpGii4ikZgNrKWA/iBznGOla/wBjYlYxYKVlJ6p9Gjm/1owLyt5rC7gnZqy5k9NHrbqupwnjD9pW w8bfDLxePDZ1TQ9bsNOhvY5pVEZ2u6AlGBPTOOcZzkZFelhsneGxlFYhxlGUpK2+q7ng47iaOPyz EywanTnCEZXemkmrWaf+V+h0XwJ+K51Dwd4K0nVbm81nxFqkE00koHmNFEjsBJM2cgEgKDyTj2rz Mzwip4ivUilGEZWS7u2y9N2e/kGYutgsJRm3OrOHNJ72V2ryb7vRdX8jt/jTHqrfCzxJJol5c2Gq 29o1xbz2jbZA0eHwD7hSD7GuXLHS+uU1WinFuzvtroehn6rvLK7w0nGaV01vpr+NrHh/g34v6/4m /Z+0hI9WmbxRea5Foq32796cuJNxPr5QIzXvY3BUsLmFZ8vuRi5JdNVZf+THx+VZriMwyXCx9o/a zqKm5ddHzN36e4tzqfD/AMQoov2j/FOny+IdYays9PZrmwvFX7HE0aoS8eGOBjJzgHkjniuOvhKi y2hNQj7zsmr8zvfc9PCZlReeYum6s/cjdxduSNrarW/4dzzb40ftMT+LbTw5c+C7nXNCtl1CSKW4 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 ------=_001_NextPart487436706730_=------ From kesa@kosobj.com Wed May 15 15:15:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 90DE57F37 for ; Wed, 15 May 2013 15:15:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 365098F8070 for ; Wed, 15 May 2013 13:15:01 -0700 (PDT) X-ASG-Debug-ID: 1368648893-04bdf042262db2b0001-NocioJ Received: from kesastb1.kosobj.com ([118.192.4.219]) by cuda.sgi.com with ESMTP id 8U1sIF2BS55lnUKv (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 13:14:56 -0700 (PDT) X-Barracuda-Envelope-From: kesa@kosobj.com X-Barracuda-Apparent-Source-IP: 118.192.4.219 Received: from fmcie (219.138.238.248) by mail.kosobj.com (118.192.4.219) with Microsoft SMTP Server id 14.3.123.3; Thu, 16 May 2013 04:09:20 +0800 From: 9 Subject: =?GB2312?B?1f3KvbGovNvHsNDo0qrIt8jPxMQ0uPbOyszi?= To: X-ASG-Orig-Subj: =?GB2312?B?1f3KvbGovNvHsNDo0qrIt8jPxMQ0uPbOyszi?= MIME-Version: 1.0 Date: Thu, 16 May 2013 04:14:53 +0800 Content-Type: application/octet-stream; name="Ujtfex4196.xls" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Ujtfex4196.xls" Message-ID: X-Originating-IP: [219.138.238.248] X-Barracuda-Connect: UNKNOWN[118.192.4.219] X-Barracuda-Start-Time: 1368648895 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131056 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAANQAAAAAAAAAA EAAA/v///wAAAAD+////AAAAADQAAAD///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////8J CBAAAAYFABcZzQfJQAAABgEAAOEAAgCwBMEAAgAAAOIAAABcAHAABQAAYWRtaW4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIAAgCwBGEBAgAAAMABAAA9AQIA AQCcAAIADgAZAAIAAAASAAIAAAATAAIAAACvAQIAAAC8AQIAAAA9ABIAeABpAGs6oCM4AAAAAAAB AFgCQAACAAAAjQACAAAAIgACAAAADgACAAEAtwECAAAA2gACAAAAMQAUAPAAAAD/f5ABAAAAAIYA AgGLW1NPMQAUAPAAAAD/f5ABAAAAAIYAAgGLW1NPMQAUAPAAAAD/f5ABAAAAAIYAAgGLW1NPMQAU APAAAAD/f5ABAAAAAIYAAgGLW1NPMQAUAPAAAAD/f5ABAAAAAIYAAgGLW1NPMQAUANIAAAD/f5AB AAAAAIYAAgGLW1NPMQAUALQAAAD/f5ABAAAAAIYAAgGLW1NPMQAUANIAAAASAJABAAAAAIYAAgGL W1NPMQAUANIAAQA8ALwCAAAAAIYAAgGLW1NPMQAUANwAAAD/f5ABAAAAAIYAAgGLW1NPMQAUAMgA AAD/f5ABAAAAAIYAAgGLW1NPMQAUAMgAAAAIAJABAAAAAIYAAgGLW1NPMQAuAMgAAAD/f5ABAAAA AQAADwFUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgAxABQAyAAAABIAkAEAAAAAhgACAYtb U08xABQA0gAAAAgAkAEAAAAAhgACAYtbU08xABQAyAAAADgAkAEAAAAAhgACAYtbU08xABQAyAAB AP9/vAIAAAAAhgACAYtbU08xABgAaAEAAAoAkAEAAAAAhgAEAU5Th2UtTotbHgQrAAUAEwABIgDl /yIAIwAsACMAIwAwADsAIgDl/yIAXAAtACMALAAjACMAMAAeBDUABgAYAAEiAOX/IgAjACwAIwAj ADAAOwBbAFIAZQBkAF0AIgDl/yIAXAAtACMALAAjACMAMAAeBDcABwAZAAEiAOX/IgAjACwAIwAj ADAALgAwADAAOwAiAOX/IgBcAC0AIwAsACMAIwAwAC4AMAAwAB4EQQAIAB4AASIA5f8iACMALAAj ACMAMAAuADAAMAA7AFsAUgBlAGQAXQAiAOX/IgBcAC0AIwAsACMAIwAwAC4AMAAwAB4EaQAqADIA AV8AIAAiAOX/IgAqACAAIwAsACMAIwAwAF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAjACMA MABfACAAOwBfACAAIgDl/yIAKgAgACIALQAiAF8AIAA7AF8AIABAAF8AIAAeBC4AKQApAABfICog IywjIzBfIDtfICogXC0jLCMjMF8gO18gKiAiLSJfIDtfIEBfIB4EeQAsADoAAV8AIAAiAOX/IgAq ACAAIwAsACMAIwAwAC4AMAAwAF8AIAA7AF8AIAAiAOX/IgAqACAAXAAtACMALAAjACMAMAAuADAA MABfACAAOwBfACAAIgDl/yIAKgAgACIALQAiAD8APwBfACAAOwBfACAAQABfACAAHgQ2ACsAMQAA XyAqICMsIyMwLjAwXyA7XyAqIFwtIywjIzAuMDBfIDtfICogIi0iPz9fIDtfIEBfIB4EGgAXABUA AFwkIywjIzBfKTtcKFwkIywjIzBcKR4EHwAYABoAAFwkIywjIzBfKTtbUmVkXVwoXCQjLCMjMFwp HgQgABkAGwAAXCQjLCMjMC4wMF8pO1woXCQjLCMjMC4wMFwpHgQlABoAIAAAXCQjLCMjMC4wMF8p O1tSZWRdXChcJCMsIyMwLjAwXCngABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAQAAAPX/IAAA 9AAAAAAAAAAAwCDgABQAAQAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAgAAAPX/IAAA9AAAAAAAAAAA wCDgABQAAgAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAA APX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/IAAA9AAA AAAAAAAAwCDgABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDg ABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/ IAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/IAAA9AAAAAAAAAAAwCDgABQAAAAAAAEAIAAAAAAAAAAA AAAAwCDgABQABQAJAPX/IAAA+AAAAAAAAAAAwCDgABQABQAsAPX/IAAA+AAAAAAAAAAAwCDgABQA BQAqAPX/IAAA+AAAAAAAAAAAwCDgABQABQArAPX/IAAA+AAAAAAAAAAAwCDgABQABQApAPX/IAAA +AAAAAAAAAAAwCDgABQAAAAAAAEAIAAAQAAAAAAAAAAECSDgABQAAAAAAAEAIAAAYCICQCBAAAAE CSDgABQABgAAAAEAIgAAeCIAQCAAAAAECSDgABQACQAAAAEAIgAAeAACAABAAAAECSDgABQABgAA AAEAJQAAeAAAAAAAAAAECSDgABQACAAAAAEAJQAAeAAAAAAAAAAECSDgABQABgAAAAEAIAAAaAAA AAAAAAAECSDgABQACgAAAAEAIgAAeCIAQCAAAAAECSDgABQADAAAAAEAJQAAeCIAQCAAAAAECSDg ABQACwAAAAEAJQAAeCIAQCAAAAAECSDgABQADQAAAAEAJQAAeCIAQCAAAAAECSDgABQADgAAAAEA JQAAeCIAQCAAAAAECSDgABQADwAAAAEAJQAAeCIAQCAAAAAECSDgABQACAAAAAEAJQAAeCIAQCAA AAAECSDgABQAEAAAAAEAJQAAeCIAQCAAAAAECSDgABQAEQAAAAEAJQAAeCIAQCAAAAAECSDgABQA EgAAAAEAIgAAeCIAQCAAAAAECSCTAgQAEIAF/5MCBAAAgAD/kwIEABGABP+TAgQAEoAH/5MCBAAT gAP/kwIEABSABv9gAQIAAACFABEAYyQAAAAACQBqdWJ5NmhnN3qMAAQAVgBWAMEBCADBAQAAYGkB APwAIBqfAAAAmgAAACwAAQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUB JQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUMAAEAlS5Vvnzx gjIAKVkAThxZr3XCcq2Lw34tAAEBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUB JQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUBJQElASUcAAHH Jf6LC3rMgG9mYwB1AHIAcgBpAGMAdQBsAHUAbQAgAGIAYQBjAGsAZwByAG8AdQBuAGQAIAAgADkA ASAAIABKAHUAZABnAGUACP/Ei/dOCf8ATipOuk4sAABOKk5sUfhTL2YNTi9mGE/AeSwADU6BiQt3 1k4vZg1OL2ZIAGEAcgB2AGEAcgBkAAj/yFRbTydZZlsJ/ywAL2YNTi9mUwB0AGEAbgBmAG8AcgBk ADMAAQj/r2VmV495J1lmWwn/LgANToGJagB1AGQAZwBlAAj/xIv3Tgn/zJFilwlnGlkRXA1UTHIn WWZb1WsaTh91LAAMgIGJagB1AGQAZwBlAAj/xIv3Tgn/2Y8uXrpOcl47bS9mDU4vZhYAAdFTr3UA Tjdocl4M/wt31k7PaylZC07tcy9mDU4vZhF7L3cvd95WtlsB/yAADwABFSAVIBUgFSAVIBUgIAA/ lsyR9F30XWxR+FNsmpFOFgABOk7ATkhO+HYMVIR2p07BVAz/Gk6hUrpOWFSEdhpO6X74du5d4FFB Uw1QH/8cAAE6TsBOSE4AlS5Vuk5YVM9+OF4RVGxR+FMzdfeLP2VWey9lAWMM/0ZPGk7pfnRTiF8N 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 ols3YqVj5omEdix7AE4qTptPlF5GVfZlG/8TAAFTXxFi7E4vZqJbN2KlY+aJhHYse4xOKk7lTgpO m0+UXkZV9mUb/wsAAYJZVU+UXthOHCBjY3FOBYAdIB//IAAXAAHHJbKLCF5EjYZTbABlAGMAdAB1 AHIAZQByACAAcwB5AG4AbwBwAHMAaQBzACAABwABsosIXstOzX4a/4tzio0OAAEtTv1WAJUuVb58 8YKvdcJyrYvDfhtSy1m6Thv/EQABAJUuVeJWH5ahewZ0qFTiiwheATAAlS5V+Veti7KLCF4b/xEA Af5m+07vU+NT71NQTgj/LU79Vgn/bFH4UxpOoVLPfgZ0G/8UAAE/lsyR9F30XQj/LU79Vgn/UX/c foBiL2cJZ1CWbFH4UxpOoVLPfgZ0GQABBW5OUydZZlsuAC1OcVwnWWZbLgBXU6xOJ1lmW0UATQBC AEEAeXKAkPlXrYuyiwheG/8vAAEyADAAMAAwAHRe84HKTgBO9HbOTotOAJUuVQ5OAJUuVbpOWFTA b7FSDk6ti8N+5V1cTwz//mb7Tu9T41PvU1BOhHYaTqFSz34GdAz/aFEDdOV3DVQBTxpOP5bMkfRd DgABDP8oV2xR+FP+ZreDHCCNYAZcb2cdIJxpPHcuAAUAATtOsov+iwt6Gv8LAAEKMACVLlW+fPGC r3XCcq2Lw34lhAswCgABCjAAlS5VO06he8Vd8Fyti8N+CzAMAAEKMDV13YsAlS5VvnzxgtBjR1Ot i8N+CzAIAAEKMJdeYpcAlS5VgGLnXQswCQABCjA8eepODk5MgBpOIH17UQswDAABCjAAlS5VLU6E dgOAOGgOTtiai1O/fgswBwABCjAAlS5Vw18GdGZbCzALAAH+Zs9++Veti8ePhHbokP1Ools3Yhr/ MQABy3qmkAZvGk4vAD+WzJH0XfRdxpbiVi8AKllzXt1PaZYvACdrbmZncQ5mLwDvU+NT71NQTi8A bGJQW/N3FlMvAN6YKVJmbS8AfnamXi8ALU79Vvt5qFIvABdTrE4cTuFPF1MxAAGukC8ALU79VlSA GpAvABBi/ZAakNFTxpbiVi8AOmQLelF/3H4vAH9e3l25ZQZXP2KnTi8A8W0zV1dTd21SkZdeLwBC aJdnCU7RkW+DGk4vABBi/ZDTYm5mt14vAPFtM1edWzEAAbdfxpbiVi8ASU5MTq6QP2VAXC8Af15/ iTRsNXXlXQt6QFwvAM2Rhl5kcdF5YpYvAPFtM1d5ctFToYD9Ti8AF1OsTvJmjn+2W8F5LwBdTjOW NXVoVi8A4HMvbjpnOlcvAOJdLwABVm6ukD9lLwBObVdTrpA/ZS8AV1OsTjtTb4M7YGxR+FMvAP1W jn81dWhWLwDolqZtxpbiVi8ALU79VgBO1mLGluJW/YCQbgZSbFH4Uy8AzZGGXtF5G1JmW2KWSXsg AA0AAc8l+VctAK2LLQClYi0ADVQtAC1OLQDDXzoAIwAB8W0gADNXIAClYiAADVQgADV1IADdixr/ EP8X/xX/Ff8tAC0AEv8R/xP/Ev8X/xP/FP8Y/wEwEv8R/xP/Ev8X/xf/FP8W/yIAAQpOIAB3bSAA pWIgAA1UIAA1dSAA3Ysa/xD/Ev8R/y0ALQAV/xH/EP8Z/xn/F/8S/xn/ATAV/xH/EP8Z/xn/GP8V /xb/GAABAjAI/ytUJE4pWS1OEJmMVABOKk5aZhCZATAHY5pbWWVQZwEwwYtmTgEwNoO5cAn/EQAF EAAAAFSAIAD7fCAAuk4a/0iWD1zQWQEwl2dIUR91ATAHTg9c0FkBAAwABwA3AAAAAAAAABn/FAAB MgAwADEAMwB0XjAANQAIZzEAOAAtAC0AMQA5AOVlADAI/xdTrE4J/xQAATIAMAAxADMAdF4wADUA CGcyADUALQAtADIANgDlZQAwCP9bT3FcCf8UAAEyADAAMQAzAHReMAA2AAhnMAAxAC0ALQAwADIA 5WUAMAj/f17eXQn/FAABMgAwADEAMwB0XjAANgAIZzEANQAtAC0AMQA2AOVlADAI/wpOd20J/yIA DQEAEAAAACAALQAtAC0ALQAtAC0ALQAtAC9m4FY6TmBPoWwJZ8JToFIAlS5VvnzxgjIAKVkAThxZ r3XCcq2Lw34uAC4ALgAuAC4AAQALAAEADAAHADcAAAAAAAAAL2YvAAUQAAAA9F1sUfhThHYaTqFS z34GdAz//mbPawhnr3XCcgpO6JXcYr+LMQAwADAAtlvlTgpOhHaiWzdiLABKU5tRi04WU4R2AJUu VUyAGk4fda9tDP/Ymjpfpl6EduVdXE+LUwEADAAHADcAAAAAAAAAABEtAAUQAAAAm1IM/2hRYpf7 fN9+hHbXU62Lz36GUwz/73kvfYZOME7MW4R2ols3YjZlxpYBMACVLlUIjCRSATCiWzdi343bjwEw ols3Yg1noVIBMOqBEWLAb7FShHbPfoyaAQAMAAcANwAAAAAAAACABRQAATIAMAAxADMAdF4wADYA CGcyADIALQAtADIAMwDlZQAwCP/xbTNXCf8UAAEyADAAMQAzAHReMAA2AAhnMgA5AC0ALQAzADAA 5WUAMAj/ZmtJbAn/FgAFEAAAAAlOATCfbBqQLU4JZ+pUm07gViB9cV/NVKJbN2IvZiZUDk4RYuxO fntVUz8AAQAMAAcANwAAAAAAAAAAABQAATIAMAAxADMAdF4wADcACGcwADYALQAtADAANwDlZQAw CP8XU6xOCf8RAA0BABAAAAAQMH9inlJVU01PETAa/7BlIADReSAA+VcgABOKIACyfSAABwALAAEA DAAHADcAAAAAAAAADAAnAA0BABAAAAAQMGZbWFT5W2GMETAa/ztgz34GdAEwAJUuVTtg0XYBMDpT 31fPfgZ0ATAAlS5Vz34GdAEwGk6hUuNOaIgBMACVLlX5V62LE05YVEl7AjAHAAsAAQAMAAcANwAA AAAAAAAMADMADQEAEAAAABAw+VetizmNKHURMBr/NAA2ADAAMABDUS8AJE66TiwADU6NUVNimGIg ACAAAJcoVwxUAE4qTghnhHYMVABO/osLek1iq04JZ2RrGE/gYAz/VVPscgBOuk42ZTmNMgA4ADAA MABDUQcACwABAAwABwA3AAAAAAAAAAwA/wCiAAgAoQkAAAwAAADdCwAASAIAAHUNAADgAwAA4w4A AE4FAAAHEAAAcgYAACURAACQBwAATRIAALgIAABvEwAA2gkAAHcUAADiCgAAnxUAAAoMAACRFgAA /AwAAI0XAAD4DQAAvRgAACgPAADTGQAAPhAAAMMaAAAuEQAA5xsAAFISAADnHAAAUhMAANkeAABE FQAAgSAAAOwWAADLIgAANhkAAAoAAAAJCBAAAAYQABcZzQfJQAAABgEAAAsCLAAAAAAAAAAAAMYA AAC1KwAAIzAAAJ80AAAfOQAAnz0AAB9CAABXRgAAU0cAAA0AAgABAAwAAgBkAA8AAgABABEAAgAA ABAACAD8qfHSTWJQP18AAgABACoAAgAAACsAAgAAAIIAAgABAIAACAAAAAAAAAAAACUCBAABADgB gQACAMEEFAAAABUAAACDAAIAAACEAAIAAABNAHoGAABDAGEAbgBvAG4AIABpAFAAMQAxADAAMAAg AHMAZQByAGkAZQBzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQCDNwAnAUD34EDAQAJAJoL NAhkAAEABwD9/wIAAQAAAAEAAABBADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAA AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAnAUAAEJKRE0CDAAAAAAAADACAACjAAAAowAAAAAAAAAA AAAAAQAAAAhSAAAEdAAALAEAAFQBAABgTwAA5HAAACwBAABUAQAAYE8AAORwAAAIUgAABHQAACwB AABUAQAAVAEAAPQBAABgTwAA5HAAACwBAABUAQAAVAEAAPQBAAAsAQAAVAEAAFQBAAD0AQAAYE8A AORwAABYAlgCGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAECcAAAIAAAADAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgADAAkA CQADAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAADAAAABwAAAAMAAAAAAAAAAQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAABAAAAAAAAAAEAAAAAAAAAAAAAAGQAAAAJAAAA CFIAAAR0AAAAAAAACQAAAAhSAAAEdAAAAAAAAAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAJMAAAAAAAAAAAAAAEAOAAABAAAAAQAAAFYAAAAAAAAAAAAAAAAA AAABAAAAAQAAAAEAAAD//wAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAP//AAAAAAAA AAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI UgAABHQAAAAAAAABAAAAfwAAAH8AAAB/AAAAfwAAAAAAAAAAAAAAAAAAAAAAAADnAwAA/wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAKAAAA AAAAAAAAAAAAAAAAAAAAAOcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAA AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwBhAG4AbwBuACAAaQBQADEA MQAwADAAIABzAGUAcgBpAGUAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAgzcAJwFA9+B AwEACQCaCzQIZAABAAcA/f8CAAEAAAABAAAAQQA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAALou5uihACIACQBkAAEAAQABAAIA/f8AAAAA AAAAAOA/AAAAAAAA4D8BAFUAAgAIAH0ADAAAAAAAQAoVAAIAAgB9AAwAAQABAMBKFQACAAIAfQAM AAIAAAEACRUAAAACAAACDgAAAAAAxgAAAAEAAgAAAAgCEAAAAAEAAgA4AQAAAABAAQ8gCAIQAAEA AQACADgBAAAAAEABDwAIAhAAAgABAAIA0QEAAAAAQAEPAAgCEAADAAEAAgA4AQAAAABAAQ8ACAIQ AAQAAQACADgBAAAAAEABDwAIAhAABQABAAIAOAEAAAAAQAEPAAgCEAAGAAEAAgA4AQAAAABAAQ8A CAIQAAcAAQACADgBAAAAAEABDwAIAhAACAABAAIAOAEAAAAAQAEPAAgCEAAJAAEAAgA4AQAAAABA AQ8ACAIQAAoAAQACADgBAAAAAEABDwAIAhAACwABAAIAOAEAAAAAQAEPAAgCEAAMAAEAAgA4AQAA AABAAQ8ACAIQAA0AAQACADgBAAAAAEABDwAIAhAADgABAAIAOAEAAAAAQAEPAAgCEAAPAAEAAgA4 AQAAAABAAQ8ACAIQABAAAQACADgBAAAAAEABDwAIAhAAEQABAAIAOAEAAAAAQAEPAAgCEAASAAEA AgA4AQAAAABAAQ8ACAIQABMAAQACADgBAAAAAEABDwAIAhAAFAABAAIAOAEAAAAAQAEPAAgCEAAV AAEAAgA4AQAAAABAAQ8ACAIQABYAAQACADgBAAAAAEABDwAIAhAAFwABAAIAOAEAAAAAQAEPAAgC EAAYAAEAAgA4AQAAAABAAQ8ACAIQABkAAQACADgBAAAAAEABDwAIAhAAGgABAAIAOAEAAAAAQAEP AAgCEAAbAAEAAgA4AQAAAABAAQ8ACAIQABwAAQACADgBAAAAAEABDwAIAhAAHQABAAIAOAEAAAAA QAEPAAgCEAAeAAEAAgA4AQAAAABAAQ8ACAIQAB8AAQACADgBAAAAAEABDwABAgYAAQABABYA/QAK AAIAAQAlAAEAAAABAgYAAwABABcA/QAKAAQAAQAcAIwAAAD9AAoABQABABwAjQAAAP0ACgAGAAEA HACOAAAA/QAKAAcAAQAcAI8AAAD9AAoACAABABwAkwAAAP0ACgAJAAEAHACUAAAA/QAKAAoAAQAc AJYAAAD9AAoACwABAB4AAgAAAP0ACgAMAAEAIwCXAAAA/QAKAA0AAQAjAJgAAAD9AAoADgABACMA mQAAAP0ACgAPAAEAHQCKAAAA/QAKABAAAQAeAAIAAAD9AAoAEQABACAAAwAAAAECBgASAAEAHgD9 AAoAEwABAB4ABAAAAP0ACgAUAAEAHgAFAAAA/QAKABUAAQAeAAYAAAD9AAoAFgABAB4ABwAAAP0A CgAXAAEAHgAIAAAA/QAKABgAAQAeAAkAAAD9AAoAGQABAB4ACgAAAP0ACgAaAAEAHgALAAAA/QAK ABsAAQAeAAwAAAD9AAoAHAABAB4ADQAAAP0ACgAdAAEAHgAOAAAA/QAKAB4AAQAeAA8AAAD9AAoA HwABAB8AkAAAANcARAAmBAAAbAIAAAoADgAKAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAK AA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAgCEAAgAAEAAgA4AQAAAABAAQ8ACAIQACEAAQACADgB AAAAAEABDwAIAhAAIgABAAIAOAEAAAAAQAEPAAgCEAAjAAEAAgA4AQAAAABAAQ8ACAIQACQAAQAC ADgBAAAAAEABDwAIAhAAJQABAAIAOAEAAAAAQAEPAAgCEAAmAAEAAgA4AQAAAABAAQ8ACAIQACcA AQACADgBAAAAAEABDwAIAhAAKAABAAIAOAEAAAAAQAEPAAgCEAApAAEAAgA4AQAAAABAAQ8ACAIQ ACoAAQACADgBAAAAAEABDwAIAhAAKwABAAIAOAEAAAAAQAEPAAgCEAAsAAEAAgA4AQAAAABAAQ8A CAIQAC0AAQACADgBAAAAAEABDwAIAhAALgABAAIAOAEAAAAAQAEPAAgCEAAvAAEAAgA4AQAAAABA AQ8ACAIQADAAAQACADgBAAAAAEABDwAIAhAAMQABAAIAOAEAAAAAQAEPAAgCEAAyAAEAAgA4AQAA AABAAQ8ACAIQADMAAQACADgBAAAAAEABDwAIAhAANAABAAIAOAEAAAAAQAEPAAgCEAA1AAEAAgA4 AQAAAABAAQ8ACAIQADYAAQACADgBAAAAAEABDwAIAhAANwABAAIAOAEAAAAAQAEPAAgCEAA4AAEA AgA4AQAAAABAAQ8ACAIQADkAAQACADgBAAAAAEABDwAIAhAAOgABAAIAOAEAAAAAQAEPAAgCEAA7 AAEAAgA4AQAAAABAAQ8ACAIQADwAAQACADgBAAAAAEABDwAIAhAAPQABAAIAOAEAAAAAQAEPAAgC EAA+AAEAAgA4AQAAAABAAQ8ACAIQAD8AAQACADgBAAAAAEABDwD9AAoAIAABAB4AAgAAAP0ACgAh AAEAIAAQAAAAAQIGACIAAQAeAP0ACgAjAAEAHgARAAAA/QAKACQAAQAeABIAAAD9AAoAJQABAB4A EwAAAP0ACgAmAAEAHgAUAAAA/QAKACcAAQAeABUAAAD9AAoAKAABAB4AFgAAAP0ACgApAAEAHgAX AAAA/QAKACoAAQAeAAIAAAD9AAoAKwABACAAGAAAAAECBgAsAAEAHgD9AAoALQABACQAGQAAAP0A CgAuAAEAHgAaAAAA/QAKAC8AAQAeABsAAAD9AAoAMAABAB4AHAAAAP0ACgAxAAEAHgAdAAAA/QAK ADIAAQAeAB4AAAD9AAoAMwABAB4AHwAAAP0ACgA0AAEAHgAgAAAA/QAKADUAAQAeACEAAAD9AAoA NgABAB4AIgAAAP0ACgA3AAEAHgAjAAAAAQIGADgAAQAeAP0ACgA5AAEAJAAkAAAA/QAKADoAAQAe ACUAAAD9AAoAOwABAB4AJgAAAP0ACgA8AAEAHgAnAAAA/QAKAD0AAQAeACgAAAD9AAoAPgABAB4A KQAAAP0ACgA/AAEAHgAqAAAA1wBEADQEAABsAg4ADgAKAA4ADgAOAA4ADgAOAA4ADgAOAAoADgAO AA4ADgAOAA4ADgAOAA4ADgAOAAoADgAOAA4ADgAOAA4ACAIQAEAAAQACADgBAAAAAEABDwAIAhAA QQABAAIAOAEAAAAAQAEPAAgCEABCAAEAAgA4AQAAAABAAQ8ACAIQAEMAAQACADgBAAAAAEABDwAI AhAARAABAAIAOAEAAAAAQAEPAAgCEABFAAEAAgA4AQAAAABAAQ8ACAIQAEYAAQACADgBAAAAAEAB DwAIAhAARwABAAIAOAEAAAAAQAEPAAgCEABIAAEAAgA4AQAAAABAAQ8ACAIQAEkAAQACADgBAAAA AEABDwAIAhAASgABAAIAOAEAAAAAQAEPAAgCEABLAAEAAgA4AQAAAABAAQ8ACAIQAEwAAQACADgB AAAAAEABDwAIAhAATQABAAIAOAEAAAAAQAEPAAgCEABOAAEAAgA4AQAAAABAAQ8ACAIQAE8AAQAC ADgBAAAAAEABDwAIAhAAUAABAAIAOAEAAAAAQAEPAAgCEABRAAEAAgA4AQAAAABAAQ8ACAIQAFIA AQACADgBAAAAAEABDwAIAhAAUwABAAIAOAEAAAAAQAEPAAgCEABUAAEAAgA4AQAAAABAAQ8ACAIQ AFUAAQACADgBAAAAAEABDwAIAhAAVgABAAIAOAEAAAAAQAEPAAgCEABXAAEAAgA4AQAAAABAAQ8A CAIQAFgAAQACADgBAAAAAEABDwAIAhAAWQABAAIAOAEAAAAAQAEPAAgCEABaAAEAAgA4AQAAAABA AQ8ACAIQAFsAAQACADgBAAAAAEABDwAIAhAAXAABAAIAOAEAAAAAQAEPAAgCEABdAAEAAgA4AQAA AABAAQ8ACAIQAF4AAQACADgBAAAAAEABDwAIAhAAXwABAAIAOAEAAAAAQAEPAP0ACgBAAAEAHgAr AAAA/QAKAEEAAQAeACwAAAD9AAoAQgABAB4ALQAAAP0ACgBDAAEAHgAuAAAA/QAKAEQAAQAeAC8A AAD9AAoARQABAB4AMAAAAP0ACgBGAAEAHgAxAAAA/QAKAEcAAQAeADIAAAD9AAoASAABAB4AMwAA AP0ACgBJAAEAHgA0AAAA/QAKAEoAAQAeADUAAAD9AAoASwABAB4ANgAAAP0ACgBMAAEAHgA3AAAA /QAKAE0AAQAeADgAAAABAgYATgABAB4A/QAKAE8AAQAkAJUAAAD9AAoAUAABAB4AOQAAAP0ACgBR AAEAHgA6AAAA/QAKAFIAAQAeADsAAAD9AAoAUwABAB4APAAAAP0ACgBUAAEAHgA9AAAA/QAKAFUA AQAeAD4AAAD9AAoAVgABAB4APwAAAP0ACgBXAAEAHgBAAAAA/QAKAFgAAQAeAEEAAAD9AAoAWQAB AB4AQgAAAP0ACgBaAAEAHgBDAAAA/QAKAFsAAQAeAEQAAAD9AAoAXAABAB4ARQAAAAECBgBdAAEA HgD9AAoAXgABACQARgAAAP0ACgBfAAEAHgBHAAAA1wBEADgEAABsAg4ADgAOAA4ADgAOAA4ADgAO AA4ADgAOAA4ADgAKAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAKAA4ACAIQAGAAAQACADgB AAAAAEABDwAIAhAAYQABAAIAOAEAAAAAQAEPAAgCEABiAAEAAgA4AQAAAABAAQ8ACAIQAGMAAQAC ADgBAAAAAEABDwAIAhAAZAABAAIAOAEAAAAAQAEPAAgCEABlAAEAAgA4AQAAAABAAQ8ACAIQAGYA AQACADgBAAAAAEABDwAIAhAAZwABAAIAOAEAAAAAQAEPAAgCEABoAAEAAgA4AQAAAABAAQ8ACAIQ AGkAAQACADgBAAAAAEABDwAIAhAAagABAAIAOAEAAAAAQAEPAAgCEABrAAEAAgA4AQAAAABAAQ8A CAIQAGwAAQACADgBAAAAAEABDwAIAhAAbQABAAIAOAEAAAAAQAEPAAgCEABuAAEAAgA4AQAAAABA AQ8ACAIQAG8AAQACADgBAAAAAEABDwAIAhAAcAABAAIAOAEAAAAAQAEPAAgCEABxAAEAAgA4AQAA AABAAQ8ACAIQAHIAAQACADgBAAAAAEABDwAIAhAAcwABAAIAOAEAAAAAQAEPAAgCEAB0AAEAAgA4 AQAAAABAAQ8ACAIQAHUAAQACADgBAAAAAEABDwAIAhAAdgABAAIAOAEAAAAAQAEPAAgCEAB3AAEA AgA4AQAAAABAAQ8ACAIQAHgAAQACADgBAAAAAEABDwAIAhAAeQABAAIAOAEAAAAAQAEPAAgCEAB6 AAEAAgA4AQAAAABAAQ8ACAIQAHsAAQACADgBAAAAAEABDwAIAhAAfAABAAIAOAEAAAAAQAEPAAgC EAB9AAEAAgA4AQAAAABAAQ8ACAIQAH4AAQACADgBAAAAAEABDwAIAhAAfwABAAIAOAEAAAAAQAEP AP0ACgBgAAEAHgBIAAAA/QAKAGEAAQAeAEkAAAD9AAoAYgABAB4ASgAAAP0ACgBjAAEAHgBLAAAA /QAKAGQAAQAeAEwAAAD9AAoAZQABAB4ATQAAAP0ACgBmAAEAHgBOAAAA/QAKAGcAAQAeAE8AAAD9 AAoAaAABAB4AUAAAAP0ACgBpAAEAHgBRAAAA/QAKAGoAAQAeAFIAAAD9AAoAawABAB4AUwAAAP0A CgBsAAEAHgBUAAAA/QAKAG0AAQAeAFUAAAD9AAoAbgABAB4AVgAAAP0ACgBvAAEAHgBXAAAA/QAK AHAAAQAeAFgAAAABAgYAcQABAB4A/QAKAHIAAQAkAFkAAAD9AAoAcwABAB4AWgAAAP0ACgB0AAEA HgBbAAAA/QAKAHUAAQAeAFwAAAD9AAoAdgABAB4AXQAAAP0ACgB3AAEAHgBeAAAAAQIGAHgAAQAe AP0ACgB5AAEAJABfAAAA/QAKAHoAAQAeAGAAAAD9AAoAewABAB4AYQAAAP0ACgB8AAEAHgBiAAAA /QAKAH0AAQAeAGMAAAD9AAoAfgABAB4AZAAAAP0ACgB/AAEAHgBlAAAA1wBEADgEAABsAg4ADgAO AA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAKAA4ADgAOAA4ADgAOAAoADgAOAA4ADgAOAA4A CAIQAIAAAQACADgBAAAAAEABDwAIAhAAgQABAAIAOAEAAAAAQAEPAAgCEACCAAEAAgA4AQAAAABA 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 AAEAHgACAAAA/QAKAKcAAQAiAIcAAAD9AAoAqAABACEAiAAAAP0ACgCpAAEAIQCJAAAA/QAKAKoA AQAhAIsAAAD9AAoAqwABAB4AAAAAAAECBgCsAAEAGAABAgYArQABABkAAQIGAK4AAQAaAAECBgCv AAEAGQABAgYAsAABABkAAQIGALEAAQAZAAECBgCyAAEAGQABAgYAswABABkAAQIGALQAAQAZAAEC BgC1AAEAGQABAgYAtgABABkAAQIGALcAAQAZAAECBgC4AAEAGQABAgYAuQABABkAAQIGALoAAQAZ AAECBgC7AAEAGQABAgYAvAABABkAAQIGAL0AAQAZAAECBgC+AAEAGQABAgYAvwABABkA1wBEAPAD AABsAg4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAK AAoACgAKAAoACAIQAMAAAQACADgBAAAAAEABDwAIAhAAwQABAAIAOAEAAAAAQAEPAAgCEADCAAEA AgA4AQAAAABAAQ8ACAIQAMMAAQACADgBAAAAAEABDwAIAhAAxAABAAIAOAEAAAAAQAEPAAgCEADF AAEAAgA4AQAAAABAAQ8AAQIGAMAAAQAZAAECBgDBAAEAGQABAgYAwgABABkAAQIGAMMAAQAZAAEC BgDEAAEAGQABAgYAxQABABsA1wAQALQAAABkAAoACgAKAAoACgA+AhIAtgYAAAAAQAAAAAAAAAAA AAAAHQAPAAMQAAAAAAABABAAEAAAAO8ABgAHADcAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAABQECAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCr kQgAKyez2TAAAACkAAAABwAAAAEAAABAAAAABAAAAEgAAAAIAAAAXAAAABIAAABsAAAADAAAAIQA AAANAAAAkAAAABMAAACcAAAAAgAAAKgDAAAeAAAACwAAAGppYW5lY2hhbmcAAB4AAAAGAAAAYWRt aW4AaGEeAAAAEAAAAE1pY3Jvc29mdCBFeGNlbABAAAAAgK8bC6LOzQFAAAAAAJ2uNb1QzgEDAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA/v8AAAUBAgAAAAAAAAAAAAAAAAAAAAAAAQAAAALVzdWcLhsQk5cIACss+a4w AAAAzAAAAAkAAAABAAAAUAAAAA8AAABYAAAAFwAAAGwAAAALAAAAdAAAABAAAAB8AAAAEwAAAIQA AAAWAAAAjAAAAA0AAACUAAAADAAAAKoAAAACAAAAqAMAAB4AAAAKAAAATWljcm9zb2Z0AAAAAwAA APwKCQALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAB4QAAABAAAACgAAAGp1Ynk2aGc3 egAMEAAAAgAAAB4AAAAHAAAAuaTX97HtAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAO AAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwA AAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAA/v///yUAAAAmAAAAJwAAACgAAAApAAAAKgAA ACsAAAD+////LQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAAP7////9/////v////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////UgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAABYABQH//////////wIAAAAgCAIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAAAAAA AAAAAAD+////AAAAAAAAAABXAG8AcgBrAGIAbwBvAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAf///////////////wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeRwAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIA bQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIBAQAAAAMAAAD/////AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAQAAAAAAAABQBEAG8AYwB1AG0A ZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAADgAAgH/ //////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAABAAAAAA AAA= From sekharan@us.ibm.com Wed May 15 15:41:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 11CEF7F37 for ; Wed, 15 May 2013 15:41:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 87995AC009 for ; Wed, 15 May 2013 13:41:35 -0700 (PDT) X-ASG-Debug-ID: 1368650494-04cbb05fe22d8de0001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id tt0hJHnluEtdoLUY (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 13:41:34 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 15 May 2013 16:41:33 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 15 May 2013 16:41:31 -0400 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 620756E803F for ; Wed, 15 May 2013 16:41:27 -0400 (EDT) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4FKfUoG208502 for ; Wed, 15 May 2013 16:41:30 -0400 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4FKfTdf031047 for ; Wed, 15 May 2013 16:41:30 -0400 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4FKfTNP031006; Wed, 15 May 2013 16:41:29 -0400 Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset From: Chandra Seetharaman X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset Reply-To: sekharan@us.ibm.com To: "Michael L. Semon" Cc: xfs@oss.sgi.com In-Reply-To: <5191FB46.2080300@gmail.com> References: <5191FB46.2080300@gmail.com> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Wed, 15 May 2013 15:41:29 -0500 Message-ID: <1368650489.10223.5.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051520-7182-0000-0000-000006BB830B X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1368650494 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, 2013-05-14 at 04:52 -0400, Michael L. Semon wrote: > Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset > working and have it pass xfstests with flying colors. Is v8 of the > pquota/gquota patchset sufficient to make the new separate pquota/gquota > bits work? Or is it an incremental patchset? Hi Michael, I will post the user level changes that accompanies these changes. With those changes you can do a new mkfs and use pquota and gquota together. Regards, Chandra > > The basic functionality works, in my opinion, and I hope nobody wastes > time with a nice, educated reply. It would be mostly wasted on me and > is better saved for somebody else. A reply of "do this...and > this...btw, how did this test come out?" would be welcomed, though ;-) > > Anyway, some vague observations as I grasp for straws... > > 1) The xfstests quota group tests seem to fail in different ways than > the way they did before applying the patches. > > 2) Nothing has oopsed. > > 3) In testing using the `xfs_quota -x` command, the patches seem to > work. On `mount -t xfs -o gquota` mounts, using the quota command from > within the xfs_quota shell, the group quotas show but not the projid > quotas. On `mount -t xfs -o pquota` mounts, the projid quotas show but > not the gquota mounts. This is different than the old behavior, where > the gquota numbers might be recycled into projid numbers. > > 4) The results of `xfsquota -c print` are confusing. Maybe they're > showing the XFS view when they show things like > 'uqnoenforce,gquota,pquota' for a mount that is gquota only. They're > doubly confusing once /etc/projid and /etc/projects have been set up. > The 'gqnoenforce' and 'pqnoenforce' flags show up at times for reasons > that are unknown to me. > > 5) `mount -t xfs -o gquota,pquota` is not possible at this time. > > 6) The patches applied cleanly to a git Linux 3.10-rc1 kernel + xfs-oss, > with only whitespace errors reported. > > 7) I question whether 'bsoft=' has a visible effect on projid quotas, > whether using your patches or not. Did it ever work? > > 8) I had no feel on whether the filesystem had to be mounted once as > gquota, then once as pquota, for the full dual functionality to work. > > 9) It looks like xfs_repair doesn't ruin anything, but the `xfsquota -c > print` output looks a little different on the next mount. > > That's about all that could be put together in a coherent manner. Sleep > awaits. > > The PC is a 32-bit Pentium 4. In addition to the kernel mentioned in > (6), there are a few J. Liu and Dave Chinner patches applied as well. > > Best of luck! > > Michael > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sekharan@us.ibm.com Wed May 15 16:01:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3793B7F37 for ; Wed, 15 May 2013 16:01:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BC2B7AC009 for ; Wed, 15 May 2013 14:01:46 -0700 (PDT) X-ASG-Debug-ID: 1368651705-04cb6c53a42dc1e0001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id jbmvK0PDRnD0BGim (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 14:01:45 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 15 May 2013 17:01:44 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from d01dlp01.pok.ibm.com (9.56.250.166) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 15 May 2013 17:01:43 -0400 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 069F038C8051 for ; Wed, 15 May 2013 17:01:42 -0400 (EDT) Received: from d01av05.pok.ibm.com (d01av05.pok.ibm.com [9.56.224.195]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4FL1gWJ309324 for ; Wed, 15 May 2013 17:01:42 -0400 Received: from d01av05.pok.ibm.com (loopback [127.0.0.1]) by d01av05.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4FL1fNq008807 for ; Wed, 15 May 2013 17:01:42 -0400 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av05.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4FL1fFF008793; Wed, 15 May 2013 17:01:41 -0400 Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset From: Chandra Seetharaman X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset Reply-To: sekharan@us.ibm.com To: "Michael L. Semon" Cc: xfs@oss.sgi.com In-Reply-To: <5191FB46.2080300@gmail.com> References: <5191FB46.2080300@gmail.com> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Wed, 15 May 2013 16:01:40 -0500 Message-ID: <1368651700.10223.21.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051521-7182-0000-0000-000006BBB214 X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1368651705 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, 2013-05-14 at 04:52 -0400, Michael L. Semon wrote: Hi Michael, Thanks for testing the code and providing feedback. > Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset > working and have it pass xfstests with flying colors. Is v8 of the > pquota/gquota patchset sufficient to make the new separate pquota/gquota > bits work? Or is it an incremental patchset? > > The basic functionality works, in my opinion, and I hope nobody wastes > time with a nice, educated reply. It would be mostly wasted on me and > is better saved for somebody else. A reply of "do this...and > this...btw, how did this test come out?" would be welcomed, though ;-) > > Anyway, some vague observations as I grasp for straws... > > 1) The xfstests quota group tests seem to fail in different ways than > the way they did before applying the patches. I ran the xfstests before and after these changes with the old tool chain and did not see any differences. Can you please tell me which tests failed. > > 2) Nothing has oopsed. > > 3) In testing using the `xfs_quota -x` command, the patches seem to > work. On `mount -t xfs -o gquota` mounts, using the quota command from > within the xfs_quota shell, the group quotas show but not the projid > quotas. On `mount -t xfs -o pquota` mounts, the projid quotas show but > not the gquota mounts. This is different than the old behavior, where > the gquota numbers might be recycled into projid numbers. Since we use different fields in superblock now, this should be expected. > > 4) The results of `xfsquota -c print` are confusing. Maybe they're > showing the XFS view when they show things like > 'uqnoenforce,gquota,pquota' for a mount that is gquota only. They're > doubly confusing once /etc/projid and /etc/projects have been set up. > The 'gqnoenforce' and 'pqnoenforce' flags show up at times for reasons > that are unknown to me. Can you please send me the exact commands you used. It will be good for me to test and add it to xfstests. > > 5) `mount -t xfs -o gquota,pquota` is not possible at this time. yes. you need new xfstools to make it work. > > 6) The patches applied cleanly to a git Linux 3.10-rc1 kernel + xfs-oss, > with only whitespace errors reported. > > 7) I question whether 'bsoft=' has a visible effect on projid quotas, > whether using your patches or not. Did it ever work? There are some xfstests that do test bsoft. Let me know if you think they are incorrect, we can revisit them. > > 8) I had no feel on whether the filesystem had to be mounted once as > gquota, then once as pquota, for the full dual functionality to work. No, you will be mounting filesystem as you did in (5) and it is supposed to work (wait for the new tools). > > 9) It looks like xfs_repair doesn't ruin anything, but the `xfsquota -c > print` output looks a little different on the next mount. Lets retest with tool changes. > > That's about all that could be put together in a coherent manner. Sleep > awaits. > > The PC is a 32-bit Pentium 4. In addition to the kernel mentioned in > (6), there are a few J. Liu and Dave Chinner patches applied as well. > > Best of luck! > > Michael > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From david@fromorbit.com Wed May 15 16:32:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DE56F7F37 for ; Wed, 15 May 2013 16:32:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id CCDD230405F for ; Wed, 15 May 2013 14:32:32 -0700 (PDT) X-ASG-Debug-ID: 1368653550-04cb6c53a42dde90001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id h6ewOIEqWGDssEcd for ; Wed, 15 May 2013 14:32:31 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnUPAHH+k1F5LKxY/2dsb2JhbABbgweDCrhhhSAEAXwXdIIfAQEFJxMcIxAIAw4KCSUPBSUDIROIC70OFo1rgR0Hg1UDlzORPoFYgUoq Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 16 May 2013 07:02:27 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcjJB-0004Qb-F8; Thu, 16 May 2013 07:32:25 +1000 Date: Thu, 16 May 2013 07:32:25 +1000 From: Dave Chinner To: Josef Bacik Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 Message-ID: <20130515213225.GY24635@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 References: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368653550 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131062 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 15, 2013 at 11:20:17AM -0400, Josef Bacik wrote: > Dave pointed out that xfs was having issues with 311 because of caching issues. > He suggested that I fsck the dm-flakey device to make sure we don't have this > problem. Make _check_scratch_fs take an optional argument to use as the device > to fsck. Thanks, > > Signed-off-by: Josef Bacik > --- > V1->V2: make _check_scratch_fs() take the optional argument of the device to > check Looks fine from here... Acked-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 15 16:41:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A9C1E7F37 for ; Wed, 15 May 2013 16:41:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 407F0AC002 for ; Wed, 15 May 2013 14:41:13 -0700 (PDT) X-ASG-Debug-ID: 1368654071-04bdf042252e08e0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id G01le30gqXJXdDij for ; Wed, 15 May 2013 14:41:11 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnUPANH/k1F5LKxY/2dsb2JhbABbgweDCrhhhSAEAXwXdIIfAQEEATocIxAIAxgJJQ8FJQMhE4gGBb0IFo1rgR0Hg1UDlzOKGYclgyIq Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 16 May 2013 07:11:10 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcjRZ-0004V6-Bh; Thu, 16 May 2013 07:41:05 +1000 Date: Thu, 16 May 2013 07:41:05 +1000 From: Dave Chinner To: Andras Korn Cc: xfs@oss.sgi.com Subject: Re: wishlist: xfs_repair should detect files with too small sizes Message-ID: <20130515214105.GZ24635@dastard> X-ASG-Orig-Subj: Re: wishlist: xfs_repair should detect files with too small sizes References: <20130514215550.GK17260@hellgate> <20130515004736.GM29466@dastard> <20130515080355.GL17260@hellgate> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130515080355.GL17260@hellgate> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368654071 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131062 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 15, 2013 at 10:03:55AM +0200, Andras Korn wrote: > On Wed, May 15, 2013 at 10:47:36AM +1000, Dave Chinner wrote: > > > > I have thousands of files on xfs whose inode claims their size is zero, but > > > they have blocks allocated to them; du(1) reports a nonzero size. xfs_repair > > > 3.1.9 ignores this. xfs_db can be used to recover the contents of the files > > > (using commands like inode 1234; write core.size 4567). > > > > > > David Chinner explained to me that xfs_repair ignores these files because > > > it's legitimate to have blocks beyond eof (e.g. due to fallocate()), and > > > > Actually due to speculative preallocation done by delayed > > allocation. > > But if the space is preallocated speculatively and then remains unused, > shouldn't it get freed up somehow, eventually? It does, whichever happens first: - the file is closed if the "keep on close" heuristic hasn't been triggered - the file has been clean for 5 minutes (background sweeper) - the inode is reclaimed from cache. If the system crashes, it is not cleaned up on reboot until the file is read into cache again and the above can happen... > > > that unwritten extent flagging doesn't help because such extents don't need > > > to be flagged as it's impossible to read them. > > > > fallocate will leave unwritten extents beyond EOF, in which case we > > can detect it, but we know there's nothing to be done as there's no > > data.... > > OK, so we have the following cases: > > 1. fallocate. The file has more space allocated to it than the size field in > its inode says, and the extra extents are flagged as unwritten. > > 2. speculative preallocation. Same as above, but the extents are not flagged > as unwritten. > > 3. corruption. The file's inode reports an incorrect size for whatever > reason. If it's too much, that's easy to detect; the problem is telling if > it's too little. > > Distinguishing between #1 and #2 is possible based on the unwritten flags. > In case #2, I think the extra space should be possible to free up (perhaps > by xfs_repair?). Of course, I suppose you could just run truncate(1) on all > files... > > The problem is recognising #3. > > Do I have that right? Yes. But iin case #2 it is not xfs_repair's place to remove blocks that are legitimately attached to an inode and correctly referenced. If it does that, then you lose any hope of recovering from a missing file size update on a crash as you lose all references to the data that is on disk. i.e. you can't find the data to recover it. > > > I think it would be useful to have the ability to distinguish between files > > > that legitimately have extents beyond EOF and files whose inode incorrectly > > > reports a too-small size. > > > > How? Add a transaction to track the data that has been written? > > > > Well, we already do that - with the inode size. > > Ah, yes, that's true. > > OK, thinking about it I realise there doesn't appear to be a good way of > preventing the problem, but I'm still not sure some heuristic couldn't be > invented to detect and partially remedy it after the fact. Trying to remedy it in xfs_repair does more harm than good. What happens now allows recovery of data if the inode size was wrong. If we remove the blocks beyond EOF, we lose that ability and hence make unrecoverable data loss more likely in common failure scenarios. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 15 16:43:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BACC07F37 for ; Wed, 15 May 2013 16:43:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9AA798F8059 for ; Wed, 15 May 2013 14:43:49 -0700 (PDT) X-ASG-Debug-ID: 1368654227-04cbb05fe22dc540001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id Jv4evf4COyFp9Rjl for ; Wed, 15 May 2013 14:43:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap8PANwAlFF5LKxY/2dsb2JhbABbgwc3glO4YYQegQIEAXwXdIIfAQEFOhwXAQsQCAMYCSUPBSUDIROICw29AhaNa4EdB4J0YQOXM5E+gyIq Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 16 May 2013 07:13:46 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcjUA-0004Vl-C1; Thu, 16 May 2013 07:43:46 +1000 Date: Thu, 16 May 2013 07:43:46 +1000 From: Dave Chinner To: Jeff Liu Cc: "Michael L. Semon" , xfs@oss.sgi.com Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset Message-ID: <20130515214346.GA24635@dastard> X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset References: <5191FB46.2080300@gmail.com> <519241A1.9050704@oracle.com> <51933585.80400@gmail.com> <51938AA4.4090008@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51938AA4.4090008@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368654227 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131062 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 15, 2013 at 09:16:20PM +0800, Jeff Liu wrote: > On 05/15/2013 03:13 PM, Michael L. Semon wrote: > > On 05/14/2013 09:52 AM, Jeff Liu wrote: > >> Hi Michael, > >> > >> Have you tried this patch set with the v2 user space changes? > >> > >> Looks this is the latest update from Chandra that I can searched from > >> the mailing list: > >> http://oss.sgi.com/archives/xfs/2012-07/msg00293.html > >> > >> Thanks, > >> -Jeff > > > > It looks like it's not patching very well in light of Dave's CRC > > userspace changes, and I botched the mkfs part of the merge. > Yes, that is based on the older version of xfsprogs with out CRC changes > applied. > > So we have to wait until an updated version is delivered. :) There's a tarball that currently applies the CRC changes to the libxfs code in userspace. I'll post a new series out later today and you can rebase userspace on top of that. Cheers, Dave. -- Dave Chinner david@fromorbit.com From bpm@sgi.com Wed May 15 16:51:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BFDB77F3F for ; Wed, 15 May 2013 16:51:38 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 58049AC002; Wed, 15 May 2013 14:51:38 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id F0C7F500B50; Wed, 15 May 2013 16:51:37 -0500 (CDT) Date: Wed, 15 May 2013 16:51:37 -0500 From: Ben Myers To: xfs@oss.sgi.com Cc: David Kaylor , Rich Johnston Subject: Re: [ANNOUNCE] xfsdump v3.1.3 Message-ID: <20130515215137.GV29359@sgi.com> References: <518AA3CE.9000702@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518AA3CE.9000702@sgi.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hey, On Wed, May 08, 2013 at 02:13:18PM -0500, Rich Johnston wrote: > Version 3.1.3 of xfsdump has been released. > > The source code can be accessed via git using this URL: > > git://oss.sgi.com/xfs/cmds/xfsdump.git > > A gzipped-tar archive of the source code is available here: > > ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsdump-3.1.3.tar.gz David Kaylor pointed out that the posted signature for this tarball fails verification. I tracked this down to the fact that I ran 'make deb' after running the release script but before posting the tarball. 'make deb' regenerated the tar.gz and gzip put an updated timestamp in the header so the tarball no longer matched the signature. However the contents of the tarballs are otherwise identical, so I've moved the old .sig out of the way, signed the tarball that was posted, and uploaded the new .sig. It might be nice for 'make dist' to create an identical .tar.gz for identical inputs. gzip can be told not to update it's timestamp with the -n option, but our current method of generating the tarball relies upon .gitcensus being created on each run and this is currently $(_FORCE) and required for the 'make deb' target. I don't have a solution at this time, so for the time being 'make dist' is creating non-identical tarballs for identical inputs at each invocation. Suggestions are welcome. Thanks to David for his attention to detail. Regards, Ben From mlsemon35@gmail.com Wed May 15 16:57:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B420929DF8 for ; Wed, 15 May 2013 16:57:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9D2608F8037 for ; Wed, 15 May 2013 14:57:13 -0700 (PDT) X-ASG-Debug-ID: 1368655032-04cbb05fe52dcf20001-NocioJ Received: from mail-ob0-f172.google.com (mail-ob0-f172.google.com [209.85.214.172]) by cuda.sgi.com with ESMTP id 4VWMHXEFi3r21C2q (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 14:57:12 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.214.172 X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.172] Received: by mail-ob0-f172.google.com with SMTP id tb18so2648570obb.31 for ; Wed, 15 May 2013 14:57:12 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.172] X-Barracuda-IPDD: Level1 [gmail.com/209.85.214.172] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=fhrLXR2ZleuEfG93FnnO/JsdILufQapzSr/+rhUJQu8=; b=PxewKoCcbU8jnaQZfrEhODmM9O18MlBgQ1nLTHhLsSLfUHZpHO5DtF5qBynPWRsivg edVuEMv5mLXtAlt7e/zcAqabOp70z/j/BHuXdajMpKl6jzmX6zWdzE8UfdtSlpqKmyRF hqb/RENBkMnggD9e5siv6jeOJvU0FSd4kSl3coFisdoADniFo7uhdO3ts6XNEI6ERUyg DA14H8vze/+Bo9AphriORLxRmPQzoqYdfEpBLzYjGinuUBiIctoRqlxtOxJfQP6ji27F 2cpb2W8WPKEFAal0Jcj7Ko6ZoFYbBJdjbASa5suqWKVhJWM29mdqtGQrrWtucFvCaFKN JudQ== X-Received: by 10.182.248.227 with SMTP id yp3mr18166455obc.102.1368655032319; Wed, 15 May 2013 14:57:12 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id b5sm2282711oby.12.2013.05.15.14.57.03 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 15 May 2013 14:57:11 -0700 (PDT) Message-ID: <519404A0.3030401@gmail.com> Date: Wed, 15 May 2013 17:56:48 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: sekharan@us.ibm.com CC: xfs@oss.sgi.com Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset References: <5191FB46.2080300@gmail.com> <1368650489.10223.5.camel@chandra-dt.ibm.com> X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset In-Reply-To: <1368650489.10223.5.camel@chandra-dt.ibm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ob0-f172.google.com[209.85.214.172] X-Barracuda-Start-Time: 1368655032 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131064 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/15/2013 04:41 PM, Chandra Seetharaman wrote: > On Tue, 2013-05-14 at 04:52 -0400, Michael L. Semon wrote: >> Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset >> working and have it pass xfstests with flying colors. Is v8 of the >> pquota/gquota patchset sufficient to make the new separate pquota/gquota >> bits work? Or is it an incremental patchset? > > Hi Michael, > > I will post the user level changes that accompanies these changes. > > With those changes you can do a new mkfs and use pquota and gquota > together. > > Regards, > > Chandra Excellent! As for the rest of your issues, I'll have to retest very slowly using your new userspace patches, documenting every step in order. It will also require before/after runs of xfstests. I do not know what your patches do for filesystems that already had quota on them, so I ask you to check one thing. It looked like the result of the normal `quota` command was having issues. On my root filesystem that was mounted uquota only, the following is the normal behavior (as an ordinary user): mls:~$ quota Disk quotas for user mls (uid 3001): Filesystem blocks quota limit grace files quota limit grace /dev/sda1 165955 262144 327680 2345 8194 16384 However, before I switched out kernels here, such a command just left a blank, as if there was no quota there. If you would at that to your list of spot-check tests, that would be great. It might work fine for you. [For the same situation, `xfs_quota -c quota /` worked just fine.] You're leading a blind man in the dark, so I thank you for your patience. Michael From chris.friesen@genband.com Wed May 15 16:58:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4311C29E06 for ; Wed, 15 May 2013 16:58:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1FFBB8F8037 for ; Wed, 15 May 2013 14:58:07 -0700 (PDT) X-ASG-Debug-ID: 1368655086-04cb6c53a32df300001-NocioJ Received: from exprod7og125.obsmtp.com (exprod7og125.obsmtp.com [64.18.2.28]) by cuda.sgi.com with SMTP id cpnFrhEGtPvpLhoM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 14:58:06 -0700 (PDT) X-Barracuda-Envelope-From: chris.friesen@genband.com X-Barracuda-RBL-Trusted-Forwarder: 64.18.2.28 Received: from mail.genband.com ([63.149.188.88]) (using TLSv1) by exprod7ob125.postini.com ([64.18.6.12]) with SMTP ID DSNKUZQE7cbQHGcAEkLMrfYd5LxzvqW0TT6U@postini.com; Wed, 15 May 2013 14:58:07 PDT Received: from gbausmail.genband.com ([172.16.21.62]) by mail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 15 May 2013 16:57:59 -0500 X-Barracuda-Apparent-Source-IP: 63.149.188.88 X-Barracuda-BBL-IP: 63.149.188.88 X-Barracuda-RBL-IP: 63.149.188.88 Received: from [1.220.6.131] ([1.220.6.131]) by gbausmail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 15 May 2013 16:57:59 -0500 Message-ID: <519404E6.5010502@genband.com> Date: Wed, 15 May 2013 15:57:58 -0600 From: Chris Friesen User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.16 MIME-Version: 1.0 To: Ben Myers , Alex Elder , xfs@oss.sgi.com Subject: Re: 2.6.27-based kernel failing xfstests xfs/182 -- resolved, I think References: <519176E7.8070204@genband.com> X-ASG-Orig-Subj: Re: 2.6.27-based kernel failing xfstests xfs/182 -- resolved, I think In-Reply-To: <519176E7.8070204@genband.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 15 May 2013 21:57:59.0403 (UTC) FILETIME=[4385CBB0:01CE51B7] X-TM-AS-Product-Ver: SMEX-8.0.0.4160-6.500.1024-19868.002 X-TM-AS-Result: No--19.820000-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: exprod7og125.obsmtp.com[64.18.2.28] X-Barracuda-Start-Time: 1368655086 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131064 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/13/2013 05:27 PM, Chris Friesen wrote: > > Hi, > > I'm working on an embedded system running a 2.6.27-based kernel. > > I'm digging into some intermittent xfs corruption issues. Yes, I realize > the right answer is probably to upgrade, but for the usual embedded > reasons that's tricky. > > I'm seeing test xfs/182 fail with 40 or so files showing messages like: > > file /opt/xfstest2/960 has incorrect size - sync failed > > In our case the xfs filesystems used for testing are on top of lvm, > which is in turn on top of two SAS drives in RAID1. > > Any suggestions on where I should start looking? I'm looking at the > "do_sync() and XFSQA test 182 failures...." thread on the mailing list > from 2008, can someone point me to the commit that eventually resulted > from that? I think I may have figured it out. I assume this was part of the impetus for the patch series from Jan Kara starting with "[PATCH 0/8] Sync fixes and cleanups (version 4)" that went into 2.6.31. Thanks, Chris From chris.friesen@genband.com Wed May 15 16:58:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8521B29E06 for ; Wed, 15 May 2013 16:58:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 61CDC304059 for ; Wed, 15 May 2013 14:58:43 -0700 (PDT) X-ASG-Debug-ID: 1368655121-04cb6c53a32df3e0001-NocioJ Received: from exprod7og125.obsmtp.com (exprod7og125.obsmtp.com [64.18.2.28]) by cuda.sgi.com with SMTP id 0lVhZ05bWlDF4hUB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 14:58:41 -0700 (PDT) X-Barracuda-Envelope-From: chris.friesen@genband.com X-Barracuda-RBL-Trusted-Forwarder: 64.18.2.28 Received: from mail.genband.com ([63.149.188.88]) (using TLSv1) by exprod7ob125.postini.com ([64.18.6.12]) with SMTP ID DSNKUZQFEXGESM39OL7GEVAeYrg11oScdlLk@postini.com; Wed, 15 May 2013 14:58:42 PDT Received: from gbausmail.genband.com ([172.16.21.62]) by mail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 15 May 2013 16:58:36 -0500 X-Barracuda-Apparent-Source-IP: 63.149.188.88 X-Barracuda-BBL-IP: 63.149.188.88 X-Barracuda-RBL-IP: 63.149.188.88 Received: from [1.220.6.131] ([1.220.6.131]) by gbausmail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 15 May 2013 16:58:36 -0500 Message-ID: <5194050B.7010401@genband.com> Date: Wed, 15 May 2013 15:58:35 -0600 From: Chris Friesen User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.16 MIME-Version: 1.0 To: Ben Myers , Alex Elder , xfs@oss.sgi.com Subject: any way to work backwards from xfs_inode_t to a filename? Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: any way to work backwards from xfs_inode_t to a filename? Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 15 May 2013 21:58:36.0097 (UTC) FILETIME=[5964DB10:01CE51B7] X-TM-AS-Product-Ver: SMEX-8.0.0.4160-6.500.1024-19868.002 X-TM-AS-Result: No--19.436500-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: exprod7og125.obsmtp.com[64.18.2.28] X-Barracuda-Start-Time: 1368655121 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131064 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi all, As I mentioned before I'm digging into some intermittent xfs corruption issues on an embedded system running a 2.6.27-based kernel. In one case I've hit XFS_WANT_CORRUPTED_GOTO in xfs_free_ag_extent(). In this particular case the call chain was xfs_free_ag_extent+0x55d/0x6e0 xfs_free_extent+0xac/0xd0 xfs_bmap_finish+0x156/0x1a0 xfs_itruncate_finish+0x137/0x340 xfs_inactive+0x386/0x4b0 xfs_fs_clear_inode+0xc6/0x120 clear_inode+0x58/0x110 generic_delete_inode+0xff/0x110 generic_drop_inode+0x16d/0x190 iput+0x5d/0x70 do_unlinkat+0x147/0x280 sys_unlinkat+0x1d/0x40 I have two questions: 1) do_unlinkat() has the filesystem path, but iput() returns void. Is there any way for me to add instrumentation to xfs_inactive() to work backwards from the xfs_inode_t pointer to print out a path to the file being deleted? 2) If this sort of corruption happens again, what's my best bet for figuring out the source of the problem? This is an embedded system, so I need to be able to automate any data gathering (after which we'll run xfs_repair so we can return to service--any manual analysis will need to happen later based on stored data). Thanks, Chris -- Chris Friesen Software Designer www.genband.com office:+1.343.883.2717 From bpm@oss.sgi.com Wed May 15 16:59:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 28C7B29E06; Wed, 15 May 2013 16:59:23 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. for-linus-v3.10-rc1-2-14680-gf722406 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 X-Git-Newrev: f722406faae2d073cc1d01063d1123c35425939e Message-Id: <20130515215923.28C7B29E06@oss.sgi.com> Date: Wed, 15 May 2013 16:59:22 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 8769e07 Merge tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs a27bb33 aio: don't include aio.h in sched.h c8d8566 Merge tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs 8d71db4 lift sb_start_write/sb_end_write out of ->aio_write() 10b3866 Merge tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs e001873 xfs: ensure we capture IO errors correctly 3325bee xfs: fix xfs_iomap_eof_prealloc_initial_size type 83cdadd xfs: fix potential infinite loop in xfs_iomap_prealloc_size() 7f78e03 fs: Limit sys_mount to only request filesystem modules. from 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8769e078a9a2bce13d39c08e0e5a513f5320e1de Merge: 8cbc95e 7dfbcbe Author: Linus Torvalds Date: Thu May 9 13:06:20 2013 -0700 Merge tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs Pull xfs update (#2) from Ben Myers: - add CONFIG_XFS_WARN, a step between zero debugging and CONFIG_XFS_DEBUG. - fix attrmulti and attrlist to fall back to vmalloc when kmalloc fails. * tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs: xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle xfs: introduce CONFIG_XFS_WARN commit a27bb332c04cec8c4afd7912df0dc7890db27560 Author: Kent Overstreet Date: Tue May 7 16:19:08 2013 -0700 aio: don't include aio.h in sched.h Faster kernel compiles by way of fewer unnecessary includes. [akpm@linux-foundation.org: fix fallout] [akpm@linux-foundation.org: fix build] Signed-off-by: Kent Overstreet Cc: Zach Brown Cc: Felipe Balbi Cc: Greg Kroah-Hartman Cc: Mark Fasheh Cc: Joel Becker Cc: Rusty Russell Cc: Jens Axboe Cc: Asai Thambi S P Cc: Selvan Mani Cc: Sam Bradshaw Cc: Jeff Moyer Cc: Al Viro Cc: Benjamin LaHaise Reviewed-by: "Theodore Ts'o" Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit c8d8566952fda026966784a62f324c8352f77430 Merge: a9586d9 cab09a8 Author: Linus Torvalds Date: Thu May 2 14:49:33 2013 -0700 Merge tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs Pull xfs update from Ben Myers: "For 3.10-rc1 we have a number of bug fixes and cleanups and a currently experimental feature from David Chinner, CRCs protection for metadata. CRCs are enabled by using mkfs.xfs to create a filesystem with the feature bits set. - numerous fixes for speculative preallocation - don't verify buffers on IO errors - rename of random32 to prandom32 - refactoring/rearrangement in xfs_bmap.c - removal of unused m_inode_shrink in struct xfs_mount - fix error handling of xfs_bufs and readahead - quota driven preallocation throttling - fix WARN_ON in xfs_vm_releasepage - add ratelimited printk for different alert levels - fix spurious forced shutdowns due to freed Extent Free Intents - remove some obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros - remove some obsoleted comments - (experimental) CRC support for metadata" * tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs: (46 commits) xfs: fix da node magic number mismatches xfs: Remote attr validation fixes and optimisations xfs: Teach dquot recovery about CONFIG_XFS_QUOTA xfs: add metadata CRC documentation xfs: implement extended feature masks xfs: add CRC checks to the superblock xfs: buffer type overruns blf_flags field xfs: add buffer types to directory and attribute buffers xfs: add CRC protection to remote attributes xfs: split remote attribute code out xfs: add CRCs to attr leaf blocks xfs: add CRCs to dir2/da node blocks xfs: shortform directory offsets change for dir3 format xfs: add CRC checking to dir2 leaf blocks xfs: add CRC checking to dir2 data blocks xfs: add CRC checking to dir2 free blocks xfs: add CRC checks to block format directory blocks xfs: add CRC checks to remote symlinks xfs: split out symlink code into it's own file. xfs: add version 3 inode format with CRCs ... commit 8d71db4f0890605d44815a2b2da4ca003f1bb142 Author: Al Viro Date: Tue Mar 19 21:01:03 2013 -0400 lift sb_start_write/sb_end_write out of ->aio_write() Signed-off-by: Al Viro commit 10b38669d64c757cfd927e3820292c580ed70aae Merge: 547b524 e001873 Author: Linus Torvalds Date: Tue Mar 19 15:17:40 2013 -0700 Merge tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs Pull XFS fixes from Ben Myers: - Fix for a potential infinite loop which was introduced in commit 4d559a3bcb73 ("xfs: limit speculative prealloc near ENOSPC thresholds") - Fix for the return type of xfs_iomap_eof_prealloc_initial_size from commit a1e16c26660b ("xfs: limit speculative prealloc size on sparse files") - Fix for a failed buffer readahead causing subsequent callers to fail incorrectly * tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs: xfs: ensure we capture IO errors correctly xfs: fix xfs_iomap_eof_prealloc_initial_size type xfs: fix potential infinite loop in xfs_iomap_prealloc_size() commit e001873853d87674dd5b3cfa2851885023616695 Author: Dave Chinner Date: Tue Mar 12 23:30:34 2013 +1100 xfs: ensure we capture IO errors correctly Failed buffer readahead can leave the buffer in the cache marked with an error. Most callers that then issue a subsequent read on the buffer do not zero the b_error field out, and so we may incorectly detect an error during IO completion due to the stale error value left on the buffer. Avoid this problem by zeroing the error before IO submission. This ensures that the only IO errors that are detected those captured from are those captured from bio submission or completion. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers (cherry picked from commit c163f9a1760229a95d04e37b332de7d5c1c225cd) commit 3325beed46d8d14d873e94d89ea57ee900dec942 Author: Mark Tinguely Date: Sun Feb 24 13:04:37 2013 -0600 xfs: fix xfs_iomap_eof_prealloc_initial_size type Fix the return type of xfs_iomap_eof_prealloc_initial_size() to xfs_fsblock_t to reflect the fact that the return value may be an unsigned 64 bits if XFS_BIG_BLKNOS is defined. Signed-off-by: Mark Tinguely Reviewed-by: Dave Chinner Signed-off-by: Ben Myers (cherry picked from commit e8108cedb1c5d1dc359690d18ca997e97a0061d2) commit 83cdadd8b0559c93728d065d23ca3485fa567e54 Author: Brian Foster Date: Fri Feb 22 13:32:56 2013 -0500 xfs: fix potential infinite loop in xfs_iomap_prealloc_size() If freesp == 0, we could end up in an infinite loop while squashing the preallocation. Break the loop when we've killed the prealloc entirely. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Ben Myers (cherry picked from commit e78c420bfc2608bb5f9a0b9165b1071c1e31166a) commit 7f78e0351394052e1a6293e175825eb5c7869507 Author: Eric W. Biederman Date: Sat Mar 2 19:39:14 2013 -0800 fs: Limit sys_mount to only request filesystem modules. Modify the request_module to prefix the file system type with "fs-" and add aliases to all of the filesystems that can be built as modules to match. A common practice is to build all of the kernel code and leave code that is not commonly needed as modules, with the result that many users are exposed to any bug anywhere in the kernel. Looking for filesystems with a fs- prefix limits the pool of possible modules that can be loaded by mount to just filesystems trivially making things safer with no real cost. Using aliases means user space can control the policy of which filesystem modules are auto-loaded by editing /etc/modprobe.d/*.conf with blacklist and alias directives. Allowing simple, safe, well understood work-arounds to known problematic software. This also addresses a rare but unfortunate problem where the filesystem name is not the same as it's module name and module auto-loading would not work. While writing this patch I saw a handful of such cases. The most significant being autofs that lives in the module autofs4. This is relevant to user namespaces because we can reach the request module in get_fs_type() without having any special permissions, and people get uncomfortable when a user specified string (in this case the filesystem type) goes all of the way to request_module. After having looked at this issue I don't think there is any particular reason to perform any filtering or permission checks beyond making it clear in the module request that we want a filesystem module. The common pattern in the kernel is to call request_module() without regards to the users permissions. In general all a filesystem module does once loaded is call register_filesystem() and go to sleep. Which means there is not much attack surface exposed by loading a filesytem module unless the filesystem is mounted. In a user namespace filesystems are not mounted unless .fs_flags = FS_USERNS_MOUNT, which most filesystems do not set today. Acked-by: Serge Hallyn Acked-by: Kees Cook Reported-by: Kees Cook Signed-off-by: "Eric W. Biederman" ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 1 + fs/xfs/xfs_file.c | 4 +--- fs/xfs/xfs_super.c | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Wed May 15 17:01:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 8148929E06; Wed, 15 May 2013 17:01:02 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. for-linus-v3.10-rc1-2-14680-gf722406 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 X-Git-Newrev: f722406faae2d073cc1d01063d1123c35425939e Message-Id: <20130515220102.8148929E06@oss.sgi.com> Date: Wed, 15 May 2013 17:01:01 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 8769e07 Merge tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs a27bb33 aio: don't include aio.h in sched.h c8d8566 Merge tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs 8d71db4 lift sb_start_write/sb_end_write out of ->aio_write() 10b3866 Merge tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs e001873 xfs: ensure we capture IO errors correctly 3325bee xfs: fix xfs_iomap_eof_prealloc_initial_size type 83cdadd xfs: fix potential infinite loop in xfs_iomap_prealloc_size() 7f78e03 fs: Limit sys_mount to only request filesystem modules. from 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8769e078a9a2bce13d39c08e0e5a513f5320e1de Merge: 8cbc95e 7dfbcbe Author: Linus Torvalds Date: Thu May 9 13:06:20 2013 -0700 Merge tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs Pull xfs update (#2) from Ben Myers: - add CONFIG_XFS_WARN, a step between zero debugging and CONFIG_XFS_DEBUG. - fix attrmulti and attrlist to fall back to vmalloc when kmalloc fails. * tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs: xfs: fallback to vmalloc for large buffers in xfs_compat_attrlist_by_handle xfs: fallback to vmalloc for large buffers in xfs_attrlist_by_handle xfs: introduce CONFIG_XFS_WARN commit a27bb332c04cec8c4afd7912df0dc7890db27560 Author: Kent Overstreet Date: Tue May 7 16:19:08 2013 -0700 aio: don't include aio.h in sched.h Faster kernel compiles by way of fewer unnecessary includes. [akpm@linux-foundation.org: fix fallout] [akpm@linux-foundation.org: fix build] Signed-off-by: Kent Overstreet Cc: Zach Brown Cc: Felipe Balbi Cc: Greg Kroah-Hartman Cc: Mark Fasheh Cc: Joel Becker Cc: Rusty Russell Cc: Jens Axboe Cc: Asai Thambi S P Cc: Selvan Mani Cc: Sam Bradshaw Cc: Jeff Moyer Cc: Al Viro Cc: Benjamin LaHaise Reviewed-by: "Theodore Ts'o" Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit c8d8566952fda026966784a62f324c8352f77430 Merge: a9586d9 cab09a8 Author: Linus Torvalds Date: Thu May 2 14:49:33 2013 -0700 Merge tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs Pull xfs update from Ben Myers: "For 3.10-rc1 we have a number of bug fixes and cleanups and a currently experimental feature from David Chinner, CRCs protection for metadata. CRCs are enabled by using mkfs.xfs to create a filesystem with the feature bits set. - numerous fixes for speculative preallocation - don't verify buffers on IO errors - rename of random32 to prandom32 - refactoring/rearrangement in xfs_bmap.c - removal of unused m_inode_shrink in struct xfs_mount - fix error handling of xfs_bufs and readahead - quota driven preallocation throttling - fix WARN_ON in xfs_vm_releasepage - add ratelimited printk for different alert levels - fix spurious forced shutdowns due to freed Extent Free Intents - remove some obsolete XLOG_CIL_HARD_SPACE_LIMIT() macros - remove some obsoleted comments - (experimental) CRC support for metadata" * tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs: (46 commits) xfs: fix da node magic number mismatches xfs: Remote attr validation fixes and optimisations xfs: Teach dquot recovery about CONFIG_XFS_QUOTA xfs: add metadata CRC documentation xfs: implement extended feature masks xfs: add CRC checks to the superblock xfs: buffer type overruns blf_flags field xfs: add buffer types to directory and attribute buffers xfs: add CRC protection to remote attributes xfs: split remote attribute code out xfs: add CRCs to attr leaf blocks xfs: add CRCs to dir2/da node blocks xfs: shortform directory offsets change for dir3 format xfs: add CRC checking to dir2 leaf blocks xfs: add CRC checking to dir2 data blocks xfs: add CRC checking to dir2 free blocks xfs: add CRC checks to block format directory blocks xfs: add CRC checks to remote symlinks xfs: split out symlink code into it's own file. xfs: add version 3 inode format with CRCs ... commit 8d71db4f0890605d44815a2b2da4ca003f1bb142 Author: Al Viro Date: Tue Mar 19 21:01:03 2013 -0400 lift sb_start_write/sb_end_write out of ->aio_write() Signed-off-by: Al Viro commit 10b38669d64c757cfd927e3820292c580ed70aae Merge: 547b524 e001873 Author: Linus Torvalds Date: Tue Mar 19 15:17:40 2013 -0700 Merge tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs Pull XFS fixes from Ben Myers: - Fix for a potential infinite loop which was introduced in commit 4d559a3bcb73 ("xfs: limit speculative prealloc near ENOSPC thresholds") - Fix for the return type of xfs_iomap_eof_prealloc_initial_size from commit a1e16c26660b ("xfs: limit speculative prealloc size on sparse files") - Fix for a failed buffer readahead causing subsequent callers to fail incorrectly * tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs: xfs: ensure we capture IO errors correctly xfs: fix xfs_iomap_eof_prealloc_initial_size type xfs: fix potential infinite loop in xfs_iomap_prealloc_size() commit e001873853d87674dd5b3cfa2851885023616695 Author: Dave Chinner Date: Tue Mar 12 23:30:34 2013 +1100 xfs: ensure we capture IO errors correctly Failed buffer readahead can leave the buffer in the cache marked with an error. Most callers that then issue a subsequent read on the buffer do not zero the b_error field out, and so we may incorectly detect an error during IO completion due to the stale error value left on the buffer. Avoid this problem by zeroing the error before IO submission. This ensures that the only IO errors that are detected those captured from are those captured from bio submission or completion. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers (cherry picked from commit c163f9a1760229a95d04e37b332de7d5c1c225cd) commit 3325beed46d8d14d873e94d89ea57ee900dec942 Author: Mark Tinguely Date: Sun Feb 24 13:04:37 2013 -0600 xfs: fix xfs_iomap_eof_prealloc_initial_size type Fix the return type of xfs_iomap_eof_prealloc_initial_size() to xfs_fsblock_t to reflect the fact that the return value may be an unsigned 64 bits if XFS_BIG_BLKNOS is defined. Signed-off-by: Mark Tinguely Reviewed-by: Dave Chinner Signed-off-by: Ben Myers (cherry picked from commit e8108cedb1c5d1dc359690d18ca997e97a0061d2) commit 83cdadd8b0559c93728d065d23ca3485fa567e54 Author: Brian Foster Date: Fri Feb 22 13:32:56 2013 -0500 xfs: fix potential infinite loop in xfs_iomap_prealloc_size() If freesp == 0, we could end up in an infinite loop while squashing the preallocation. Break the loop when we've killed the prealloc entirely. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Ben Myers (cherry picked from commit e78c420bfc2608bb5f9a0b9165b1071c1e31166a) commit 7f78e0351394052e1a6293e175825eb5c7869507 Author: Eric W. Biederman Date: Sat Mar 2 19:39:14 2013 -0800 fs: Limit sys_mount to only request filesystem modules. Modify the request_module to prefix the file system type with "fs-" and add aliases to all of the filesystems that can be built as modules to match. A common practice is to build all of the kernel code and leave code that is not commonly needed as modules, with the result that many users are exposed to any bug anywhere in the kernel. Looking for filesystems with a fs- prefix limits the pool of possible modules that can be loaded by mount to just filesystems trivially making things safer with no real cost. Using aliases means user space can control the policy of which filesystem modules are auto-loaded by editing /etc/modprobe.d/*.conf with blacklist and alias directives. Allowing simple, safe, well understood work-arounds to known problematic software. This also addresses a rare but unfortunate problem where the filesystem name is not the same as it's module name and module auto-loading would not work. While writing this patch I saw a handful of such cases. The most significant being autofs that lives in the module autofs4. This is relevant to user namespaces because we can reach the request module in get_fs_type() without having any special permissions, and people get uncomfortable when a user specified string (in this case the filesystem type) goes all of the way to request_module. After having looked at this issue I don't think there is any particular reason to perform any filtering or permission checks beyond making it clear in the module request that we want a filesystem module. The common pattern in the kernel is to call request_module() without regards to the users permissions. In general all a filesystem module does once loaded is call register_filesystem() and go to sleep. Which means there is not much attack surface exposed by loading a filesytem module unless the filesystem is mounted. In a user namespace filesystems are not mounted unless .fs_flags = FS_USERNS_MOUNT, which most filesystems do not set today. Acked-by: Serge Hallyn Acked-by: Kees Cook Reported-by: Kees Cook Signed-off-by: "Eric W. Biederman" ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 1 + fs/xfs/xfs_file.c | 4 +--- fs/xfs/xfs_super.c | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Wed May 15 17:10:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3A50F7F37 for ; Wed, 15 May 2013 17:10:04 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 12F838F8068; Wed, 15 May 2013 15:10:01 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id D57A0500B50; Wed, 15 May 2013 17:10:00 -0500 (CDT) Date: Wed, 15 May 2013 17:10:00 -0500 From: Ben Myers To: Chris Friesen Cc: Alex Elder , xfs@oss.sgi.com Subject: Re: any way to work backwards from xfs_inode_t to a filename? Message-ID: <20130515221000.GX812@sgi.com> References: <5194050B.7010401@genband.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5194050B.7010401@genband.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hey Chris, On Wed, May 15, 2013 at 03:58:35PM -0600, Chris Friesen wrote: > As I mentioned before I'm digging into some intermittent xfs > corruption issues on an embedded system running a 2.6.27-based > kernel. > > In one case I've hit XFS_WANT_CORRUPTED_GOTO in > xfs_free_ag_extent(). In this particular case the call chain was > > xfs_free_ag_extent+0x55d/0x6e0 > xfs_free_extent+0xac/0xd0 > xfs_bmap_finish+0x156/0x1a0 > xfs_itruncate_finish+0x137/0x340 > xfs_inactive+0x386/0x4b0 > xfs_fs_clear_inode+0xc6/0x120 > clear_inode+0x58/0x110 > generic_delete_inode+0xff/0x110 > generic_drop_inode+0x16d/0x190 > iput+0x5d/0x70 > do_unlinkat+0x147/0x280 > sys_unlinkat+0x1d/0x40 > > I have two questions: > > 1) do_unlinkat() has the filesystem path, but iput() returns void. > Is there any way for me to add instrumentation to xfs_inactive() to > work backwards from the xfs_inode_t pointer to print out a path to > the file being deleted? Use VFS_I to get to a 'struct inode' and from there you can look at the dentries on i_dentry list and traverse back through the path by looking at d_parent. Might be easier to just print the path in do_unlinkat? > 2) If this sort of corruption happens again, what's my best bet for > figuring out the source of the problem? This is an embedded system, > so I need to be able to automate any data gathering (after which > we'll run xfs_repair so we can return to service--any manual > analysis will need to happen later based on stored data). Can you grab a metadump before you repair the filesystem? Thanks, Ben From sandeen@sandeen.net Wed May 15 17:19:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 453D77F37 for ; Wed, 15 May 2013 17:19:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0FFFC8F8059 for ; Wed, 15 May 2013 15:19:54 -0700 (PDT) X-ASG-Debug-ID: 1368656393-04bdf042242e2dd0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id J1uX7sl5eGGdJEc3 for ; Wed, 15 May 2013 15:19:53 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 279EF63C5FF2; Wed, 15 May 2013 17:19:53 -0500 (CDT) Message-ID: <51940A08.2040306@sandeen.net> Date: Wed, 15 May 2013 17:19:52 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Ben Myers CC: Chris Friesen , Alex Elder , xfs@oss.sgi.com Subject: Re: any way to work backwards from xfs_inode_t to a filename? References: <5194050B.7010401@genband.com> <20130515221000.GX812@sgi.com> X-ASG-Orig-Subj: Re: any way to work backwards from xfs_inode_t to a filename? In-Reply-To: <20130515221000.GX812@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368656393 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131064 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/15/13 5:10 PM, Ben Myers wrote: > Hey Chris, > > On Wed, May 15, 2013 at 03:58:35PM -0600, Chris Friesen wrote: >> As I mentioned before I'm digging into some intermittent xfs >> corruption issues on an embedded system running a 2.6.27-based >> kernel. >> >> In one case I've hit XFS_WANT_CORRUPTED_GOTO in >> xfs_free_ag_extent(). In this particular case the call chain was >> >> xfs_free_ag_extent+0x55d/0x6e0 >> xfs_free_extent+0xac/0xd0 >> xfs_bmap_finish+0x156/0x1a0 >> xfs_itruncate_finish+0x137/0x340 >> xfs_inactive+0x386/0x4b0 >> xfs_fs_clear_inode+0xc6/0x120 >> clear_inode+0x58/0x110 >> generic_delete_inode+0xff/0x110 >> generic_drop_inode+0x16d/0x190 >> iput+0x5d/0x70 >> do_unlinkat+0x147/0x280 >> sys_unlinkat+0x1d/0x40 >> >> I have two questions: >> >> 1) do_unlinkat() has the filesystem path, but iput() returns void. >> Is there any way for me to add instrumentation to xfs_inactive() to >> work backwards from the xfs_inode_t pointer to print out a path to >> the file being deleted? > > Use VFS_I to get to a 'struct inode' and from there you can look at the > dentries on i_dentry list and traverse back through the path by looking at > d_parent. Might be easier to just print the path in do_unlinkat? or just print out the inode nr (i_ino) and do a find -inum after the fact. :) -Eric From david@fromorbit.com Wed May 15 17:20:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 45F6E29E03 for ; Wed, 15 May 2013 17:20:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 19B1B8F8059 for ; Wed, 15 May 2013 15:20:21 -0700 (PDT) X-ASG-Debug-ID: 1368656419-04cb6c53a12e04e0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id eIUr4OnwEA63Gxi3 for ; Wed, 15 May 2013 15:20:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnUPABsJlFF5LKxY/2dsb2JhbABbgweDCrhhhSAEAXwXdIIfAQEEATocIwULCAMYCSUPBSUDIROIBgW9DhaNa4EdB4NVA5czihmHJYMiKg Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 16 May 2013 07:50:18 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uck3V-0004b6-QM; Thu, 16 May 2013 08:20:17 +1000 Date: Thu, 16 May 2013 08:20:17 +1000 From: Dave Chinner To: Chris Friesen Cc: Ben Myers , Alex Elder , xfs@oss.sgi.com Subject: Re: any way to work backwards from xfs_inode_t to a filename? Message-ID: <20130515222017.GS29466@dastard> X-ASG-Orig-Subj: Re: any way to work backwards from xfs_inode_t to a filename? References: <5194050B.7010401@genband.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5194050B.7010401@genband.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368656419 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131066 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 15, 2013 at 03:58:35PM -0600, Chris Friesen wrote: > > Hi all, > > As I mentioned before I'm digging into some intermittent xfs > corruption issues on an embedded system running a 2.6.27-based > kernel. > > In one case I've hit XFS_WANT_CORRUPTED_GOTO in > xfs_free_ag_extent(). In this particular case the call chain was > > xfs_free_ag_extent+0x55d/0x6e0 > xfs_free_extent+0xac/0xd0 > xfs_bmap_finish+0x156/0x1a0 > xfs_itruncate_finish+0x137/0x340 > xfs_inactive+0x386/0x4b0 > xfs_fs_clear_inode+0xc6/0x120 > clear_inode+0x58/0x110 > generic_delete_inode+0xff/0x110 > generic_drop_inode+0x16d/0x190 > iput+0x5d/0x70 > do_unlinkat+0x147/0x280 > sys_unlinkat+0x1d/0x40 > > I have two questions: > > 1) do_unlinkat() has the filesystem path, but iput() returns void. > Is there any way for me to add instrumentation to xfs_inactive() to > work backwards from the xfs_inode_t pointer to print out a path to > the file being deleted? You can't from there - the inode is being cycled out of cache, which means it does not have a dentry attached anymore and so no path can be found from there. The best you can do is print out the inode number, and then use something like "find -inum " or the xfs_db equivalent (man xfs_ncheck). > 2) If this sort of corruption happens again, what's my best bet for > figuring out the source of the problem? This is an embedded system, > so I need to be able to automate any data gathering (after which > we'll run xfs_repair so we can return to service--any manual > analysis will need to happen later based on stored data). Forensic analsys of the filesystem and clear information about what the state of the filesystem was in memory whenteh problem was tripped over is generally the only way to get to the bottom of these problems. i.e. kernel crash dumps triggered by setting the panic mask appropriately, and then taking an xfs_metadump of the filesystem before the filesystem is remounted, and then again after the filesystem is mounted and log recovery has run.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From bpm@sgi.com Wed May 15 18:05:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1F5BD7F37 for ; Wed, 15 May 2013 18:05:06 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9165C8F8049; Wed, 15 May 2013 16:04:59 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 73B50500B50; Wed, 15 May 2013 18:04:59 -0500 (CDT) Date: Wed, 15 May 2013 18:04:59 -0500 From: Ben Myers To: Eric Sandeen Cc: Chris Friesen , Alex Elder , xfs@oss.sgi.com Subject: Re: any way to work backwards from xfs_inode_t to a filename? Message-ID: <20130515230459.GY812@sgi.com> References: <5194050B.7010401@genband.com> <20130515221000.GX812@sgi.com> <51940A08.2040306@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51940A08.2040306@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) Chris, On Wed, May 15, 2013 at 05:19:52PM -0500, Eric Sandeen wrote: > On 5/15/13 5:10 PM, Ben Myers wrote: > >> 1) do_unlinkat() has the filesystem path, but iput() returns void. > >> Is there any way for me to add instrumentation to xfs_inactive() to > >> work backwards from the xfs_inode_t pointer to print out a path to > >> the file being deleted? > > > > Use VFS_I to get to a 'struct inode' and from there you can look at the > > dentries on i_dentry list and traverse back through the path by looking at > > d_parent. Might be easier to just print the path in do_unlinkat? > > or just print out the inode nr (i_ino) and do a find -inum after the fact. :) +1 Dave pointed out that you might not be able to get to the inode at this point in the lifecycle. Apologies if I posted misinformation. ;) Regards, Ben From sekharan@us.ibm.com Wed May 15 18:28:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8AECD7F37 for ; Wed, 15 May 2013 18:28:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 76C9F304066 for ; Wed, 15 May 2013 16:28:36 -0700 (PDT) X-ASG-Debug-ID: 1368660505-04cbb05fe32e13f0001-NocioJ Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by cuda.sgi.com with ESMTP id dFGIkXmnSJY21Qop (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 May 2013 16:28:25 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.153 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from /spool/local by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 15 May 2013 17:28:12 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 15 May 2013 17:28:05 -0600 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id B9B5219D8036 for ; Wed, 15 May 2013 17:27:56 -0600 (MDT) Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4FNS3dk218622 for ; Wed, 15 May 2013 17:28:03 -0600 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4FNRTJ4016677 for ; Wed, 15 May 2013 17:28:02 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4FMDaRU009503; Wed, 15 May 2013 16:13:36 -0600 Subject: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset From: Chandra Seetharaman X-ASG-Orig-Subj: Re: Rambling noise #2: Learning to use the v8 pquota/uquota patchset Reply-To: sekharan@us.ibm.com To: "Michael L. Semon" Cc: xfs@oss.sgi.com In-Reply-To: <519404A0.3030401@gmail.com> References: <5191FB46.2080300@gmail.com> <1368650489.10223.5.camel@chandra-dt.ibm.com> <519404A0.3030401@gmail.com> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Wed, 15 May 2013 17:12:48 -0500 Message-ID: <1368655968.10223.24.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051523-4834-0000-0000-000007011AE1 X-Barracuda-Connect: e35.co.us.ibm.com[32.97.110.153] X-Barracuda-Start-Time: 1368660505 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On Wed, 2013-05-15 at 17:56 -0400, Michael L. Semon wrote: Hi Michael, Irrespective of the user space changes, this patchset should work properly with the current tools and existing filesystems providing current behavior. Let me know of the anomalies as the ones below. Thanks Chandra > On 05/15/2013 04:41 PM, Chandra Seetharaman wrote: > > On Tue, 2013-05-14 at 04:52 -0400, Michael L. Semon wrote: > >> Hi! I seem to have no luck in getting v8 of the pquota/uquota patchset > >> working and have it pass xfstests with flying colors. Is v8 of the > >> pquota/gquota patchset sufficient to make the new separate pquota/gquota > >> bits work? Or is it an incremental patchset? > > > > Hi Michael, > > > > I will post the user level changes that accompanies these changes. > > > > With those changes you can do a new mkfs and use pquota and gquota > > together. > > > > Regards, > > > > Chandra > > Excellent! > > As for the rest of your issues, I'll have to retest very slowly using > your new userspace patches, documenting every step in order. It will > also require before/after runs of xfstests. > > I do not know what your patches do for filesystems that already had > quota on them, so I ask you to check one thing. It looked like the > result of the normal `quota` command was having issues. On my root > filesystem that was mounted uquota only, the following is the normal > behavior (as an ordinary user): > > mls:~$ quota > Disk quotas for user mls (uid 3001): > Filesystem blocks quota limit grace files quota limit > grace > /dev/sda1 165955 262144 327680 2345 8194 16384 > > However, before I switched out kernels here, such a command just left a > blank, as if there was no quota there. If you would at that to your > list of spot-check tests, that would be great. It might work fine for > you. [For the same situation, `xfs_quota -c quota /` worked just fine.] > > You're leading a blind man in the dark, so I thank you for your patience. > > Michael > From david@fromorbit.com Wed May 15 19:59:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8B60F7F3F for ; Wed, 15 May 2013 19:59:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7AE0A30404E for ; Wed, 15 May 2013 17:59:21 -0700 (PDT) X-ASG-Debug-ID: 1368665959-04cbb05fe22e5550001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id qzk1GUaVpaKH9Usj for ; Wed, 15 May 2013 17:59:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnYPAOkulFF5LKxY/2dsb2JhbABbDoJ5gwq4ZYUgBAGBABd0gh8BAQQBOhwjBQsIAw4KCSUPBSUDIROIBgW9GBaNUAwPgR0HgnRhA5czkT6CUVEqgS0BHw Received: from ppp121-44-172-88.lns20.syd7.internode.on.net (HELO dastard) ([121.44.172.88]) by ipmail05.adl6.internode.on.net with ESMTP; 16 May 2013 10:29:18 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UcmXO-0004qh-4C; Thu, 16 May 2013 10:59:18 +1000 Date: Thu, 16 May 2013 10:59:13 +1000 From: Dave Chinner To: David Oostdyk Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: high-speed disk I/O is CPU-bound? Message-ID: <20130516005913.GE24635@dastard> X-ASG-Orig-Subj: Re: high-speed disk I/O is CPU-bound? References: <518CFE7C.9080708@ll.mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518CFE7C.9080708@ll.mit.edu> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1368665959 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131076 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [cc xfs list, seeing as that's where all the people who use XFS in these sorts of configurations hang out. ] On Fri, May 10, 2013 at 10:04:44AM -0400, David Oostdyk wrote: > Hello, > > I have a few relatively high-end systems with hardware RAIDs which > are being used for recording systems, and I'm trying to get a better > understanding of contiguous write performance. > > The hardware that I've tested with includes two high-end Intel > E5-2600 and E5-4600 (~3GHz) series systems, as well as a slightly > older Xeon 5600 system. The JBODs include a 45x3.5" JBOD, a 28x3.5" > JBOD (with either 7200RPM or 10kRPM SAS drives), and a 24x2.5" JBOD > with 10kRPM drives. I've tried LSI controllers (9285-8e, 9266-8i, > as well as the integrated Intel LSI controllers) as well as Adaptec > Series 7 RAID controllers (72405 and 71685). > > Normally I'll setup the RAIDs as RAID60 and format them as XFS, but > the exact RAID level, filesystem type, and even RAID hardware don't > seem to matter very much from my observations (but I'm willing to > try any suggestions). Document them. There's many ways to screw them up and get bad performance. > As a basic benchmark, I have an application > that simply writes the same buffer (say, 128MB) to disk repeatedly. > Alternatively you could use the "dd" utility. (For these > benchmarks, I set /proc/sys/vm/dirty_bytes to 512M or lower, since > these systems have a lot of RAM.) > > The basic observations are: > > 1. "single-threaded" writes, either a file on the mounted > filesystem or with a "dd" to the raw RAID device, seem to be limited > to 1200-1400MB/sec. These numbers vary slightly based on whether > TurboBoost is affecting the writing process or not. "top" will show > this process running at 100% CPU. Expected. You are using buffered IO. Write speed is limited by the rate at which your user process can memcpy data into the page cache. > 2. With two benchmarks running on the same device, I see aggregate > write speeds of up to ~2.4GB/sec, which is closer to what I'd expect > the drives of being able to deliver. This can either be with two > applications writing to separate files on the same mounted file > system, or two separate "dd" applications writing to distinct > locations on the raw device. (Increasing the number of writers > beyond two does not seem to increase aggregate performance; "top" > will show both processes running at perhaps 80% CPU). Still using buffered IO, which means you are typically limited by the rate at which the flusher thread can do writeback. > 3. I haven't been able to find any tricks (lio_listio, multiple > threads writing to distinct file offsets, etc) that seem to deliver > higher write speeds when writing to a single file. (This might be > xfs-specific, though) How about using direct IO? Single threaded direct IO will beslower than buffered IO, but throughput should scale linearly with the number of threads if the IO size is large enough (e.g. 32MB). > 4. Cheap tricks like making a software RAID0 of two hardware RAID > devices does not deliver any improved performance for > single-threaded writes. (Have not thoroughly tested this > configuration fully with multiple writers, though.) Of course not - you are CPU bound and nothing you do to the storage will change that. Cheers, Dave. -- Dave Chinner david@fromorbit.com From gnehzuil.liu@gmail.com Wed May 15 22:35:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 40EF37F37 for ; Wed, 15 May 2013 22:35:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2945F8F8054 for ; Wed, 15 May 2013 20:34:58 -0700 (PDT) X-ASG-Debug-ID: 1368675295-04cb6c53a42ef9a0001-NocioJ Received: from mail-pd0-f170.google.com (mail-pd0-f170.google.com [209.85.192.170]) by cuda.sgi.com with ESMTP id ue3uOfT6aoR0gArG (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 20:34:56 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.170 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.170] Received: by mail-pd0-f170.google.com with SMTP id r10so59141pdi.29 for ; Wed, 15 May 2013 20:34:55 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.170] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.170] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=DI+Lttkih/xALcwj/3hl3rqH8uybgY39Tv+JeePYYXg=; b=SqY4LQO5mbJpddhF8yN+48bHOF9wH1kfhOFtkcLSDJy4QEnrS2h7cyVDtDy9FPgdhi 8sv9wxZfPdegvvRF56MfTEKglMNULuIVFKr0NnDB6Th1vgENe0Ug/rm9QyCR8DjCN23d AkQTOXqxsunOAuWpkjs8m9wCJMM2tMFXhIR8iFuA15szA3Ph06aADBf4D6o5njDayGh1 SdEzPVMHsYf74cva6k1+H9SyxOD0DrVtvg2swIRSPe1zgFMrvvsDfH9iGFFpcIrRIxXW KGZ0PWl5pmqsidiO7lkcmERnNtshAgY1e2a2F2YcFx0NmgWJQZe4LtZD125YeTN7K9Gp s1IQ== X-Received: by 10.66.118.201 with SMTP id ko9mr40858900pab.81.1368675295625; Wed, 15 May 2013 20:34:55 -0700 (PDT) Received: from lz-desktop.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id l4sm5030890pbo.6.2013.05.15.20.34.52 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 15 May 2013 20:34:54 -0700 (PDT) From: Zheng Liu To: xfs@oss.sgi.com Cc: Zheng Liu , Eric Sandeen , Dave Chinner , Rich Johnston Subject: [PATCH v6] xfstests: add a new test case for ext4 indirect-based file Date: Thu, 16 May 2013 11:52:39 +0800 X-ASG-Orig-Subj: [PATCH v6] xfstests: add a new test case for ext4 indirect-based file Message-Id: <1368676359-2404-1-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.12.rc2.18.g61b472e X-Barracuda-Connect: mail-pd0-f170.google.com[209.85.192.170] X-Barracuda-Start-Time: 1368675296 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131086 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature From: Zheng Liu After applied this commit (864688d3), xfstests #255 will not test a file system that cannot support fallocate(2), such as a indirect-based file in ext4. So we need to add a new generic test case to test it. The difference between #255 and this test case is only to use pwrite to allocate blocks. Other filesystems should survive in this test case. In the mean time, a new argument '-u' is added into _test_generic_punch not to run unwritten tests. Meanwhile this commit fixes a minor problem in #255 that testfile should use $seq.$$ as testfile. Signed-off-by: Zheng Liu Cc: Eric Sandeen Cc: Dave Chinner Cc: Rich Johnston --- changelog: * rebase against the latest master of xfstests tree (Based-on Eric's patch). common/punch | 164 ++++++++++++++++++++++++++----------------------- tests/generic/255 | 2 +- tests/generic/314 | 67 ++++++++++++++++++++ tests/generic/314.out | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/generic/group | 1 + 5 files changed, 323 insertions(+), 76 deletions(-) create mode 100755 tests/generic/314 create mode 100644 tests/generic/314.out diff --git a/common/punch b/common/punch index d8f73d0..7b3c009 100644 --- a/common/punch +++ b/common/punch @@ -285,19 +285,25 @@ die_now() # Use the -d flag to not sync the file between tests. # This will test the handling of delayed extents # +# Use the -u flag to not run unwritten tests. +# This will eliminate some unnecessary information. +# _test_generic_punch() { remove_testfile=1 sync_cmd="-c fsync" + unwritten_tests=1 OPTIND=1 - while getopts 'dk' OPTION + while getopts 'dku' OPTION do case $OPTION in k) remove_testfile= ;; d) sync_cmd= ;; + u) unwritten_tests= + ;; ?) echo Invalid flag exit 1 ;; @@ -333,16 +339,18 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 3. into unwritten space" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 3. into unwritten space" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 4. hole -> data" if [ "$remove_testfile" ]; then @@ -355,16 +363,18 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 5. hole -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 5. hole -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "$alloc_cmd 8k 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "$alloc_cmd 8k 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 6. data -> hole" if [ "$remove_testfile" ]; then @@ -377,40 +387,42 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 7. data -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "pwrite 0 8k" $sync_cmd \ - -c "$alloc_cmd 8k 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 8. unwritten -> hole" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "$alloc_cmd 0 8k" \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 9. unwritten -> data" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 7. data -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "pwrite 0 8k" $sync_cmd \ + -c "$alloc_cmd 8k 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 8. unwritten -> hole" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "$alloc_cmd 0 8k" \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 9. unwritten -> data" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "$alloc_cmd 0 8k" \ + -c "pwrite 8k 8k" $sync_cmd \ + -c "$zero_cmd 4k 8k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "$alloc_cmd 0 8k" \ - -c "pwrite 8k 8k" $sync_cmd \ - -c "$zero_cmd 4k 8k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 10. hole -> data -> hole" if [ "$remove_testfile" ]; then @@ -437,30 +449,32 @@ _test_generic_punch() [ $? -ne 0 ] && die_now _md5_checksum $testfile - echo " 12. unwritten -> data -> unwritten" - if [ "$remove_testfile" ]; then - rm -f $testfile - fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "pwrite 8k 4k" $sync_cmd \ - -c "$zero_cmd 4k 12k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile - - echo " 13. data -> unwritten -> data" - if [ "$remove_testfile" ]; then - rm -f $testfile + if [ "$unwritten_tests" ]; then + echo " 12. unwritten -> data -> unwritten" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "pwrite 8k 4k" $sync_cmd \ + -c "$zero_cmd 4k 12k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile + + echo " 13. data -> unwritten -> data" + if [ "$remove_testfile" ]; then + rm -f $testfile + fi + $XFS_IO_PROG -f -c "truncate 20k" \ + -c "$alloc_cmd 0 20k" \ + -c "pwrite 0k 8k" $sync_cmd \ + -c "pwrite 12k 8k" -c "fsync" \ + -c "$zero_cmd 4k 12k" \ + -c "$map_cmd -v" $testfile | $filter_cmd + [ $? -ne 0 ] && die_now + _md5_checksum $testfile fi - $XFS_IO_PROG -f -c "truncate 20k" \ - -c "$alloc_cmd 0 20k" \ - -c "pwrite 0k 8k" $sync_cmd \ - -c "pwrite 12k 8k" -c "fsync" \ - -c "$zero_cmd 4k 12k" \ - -c "$map_cmd -v" $testfile | $filter_cmd - [ $? -ne 0 ] && die_now - _md5_checksum $testfile echo " 14. data -> hole @ EOF" rm -f $testfile diff --git a/tests/generic/255 b/tests/generic/255 index dd329b4..4275c51 100755 --- a/tests/generic/255 +++ b/tests/generic/255 @@ -50,7 +50,7 @@ _require_xfs_io_falloc_punch _require_xfs_io_falloc _require_xfs_io_fiemap -testfile=$TEST_DIR/255.$$ +testfile=$TEST_DIR/$seq.$$ # Standard punch hole tests _test_generic_punch falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile diff --git a/tests/generic/314 b/tests/generic/314 new file mode 100755 index 0000000..4cd7462 --- /dev/null +++ b/tests/generic/314 @@ -0,0 +1,67 @@ +#! /bin/bash +# FS QA Test No. 314 +# +# Test Generic fallocate hole punching w/o unwritten extent +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Alibaba Group. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/punch + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_xfs_io_falloc_punch +_require_xfs_io_fiemap + +testfile=$TEST_DIR/$seq.$$ + +# Standard punch hole tests +_test_generic_punch -u pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# Delayed allocation punch hole tests +_test_generic_punch -u -d pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# Multi hole punch tests +_test_generic_punch -u -k pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# Delayed allocation multi punch hole tests +_test_generic_punch -u -d -k pwrite fpunch fpunch fiemap _filter_hole_fiemap $testfile + +# success, all done +status=0 +exit diff --git a/tests/generic/314.out b/tests/generic/314.out new file mode 100644 index 0000000..06aa705 --- /dev/null +++ b/tests/generic/314.out @@ -0,0 +1,165 @@ +QA output created by 314 + 1. into a hole +daa100df6e6711906b61c9ab5aa16032 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..23]: hole +1: [24..31]: extent +2: [32..39]: hole +cc63069677939f69a6e8f68cae6a6dac + 6. data -> hole +0: [0..7]: extent +1: [8..39]: hole +1b3779878366498b28c702ef88c4a773 + 10. hole -> data -> hole +daa100df6e6711906b61c9ab5aa16032 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +daa100df6e6711906b61c9ab5aa16032 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..23]: hole +1: [24..31]: extent +2: [32..39]: hole +cc63069677939f69a6e8f68cae6a6dac + 6. data -> hole +0: [0..7]: extent +1: [8..39]: hole +1b3779878366498b28c702ef88c4a773 + 10. hole -> data -> hole +daa100df6e6711906b61c9ab5aa16032 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +0: [0..7]: extent +1: [8..39]: hole +5a58e46082be047d0f13bee7974015b9 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 6. data -> hole +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 10. hole -> data -> hole +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 + 1. into a hole +0: [0..7]: extent +1: [8..39]: hole +5a58e46082be047d0f13bee7974015b9 + 2. into allocated space +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 4. hole -> data +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 6. data -> hole +0: [0..7]: extent +1: [8..23]: hole +2: [24..39]: extent +cc58a7417c2d7763adc45b6fcd3fa024 + 10. hole -> data -> hole +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 11. data -> hole -> data +0: [0..7]: extent +1: [8..31]: hole +2: [32..39]: extent +f6aeca13ec49e5b266cd1c913cd726e3 + 14. data -> hole @ EOF +0: [0..23]: extent +1: [24..39]: hole +e1f024eedd27ea6b1c3e9b841c850404 + 15. data -> hole @ 0 +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 16. data -> cache cold ->hole +0: [0..15]: hole +1: [16..39]: extent +eecb7aa303d121835de05028751d301c + 17. data -> hole in single block file +0: [0..7]: extent +13535fd4d496bf0b74bb2335aa4d1b31 diff --git a/tests/generic/group b/tests/generic/group index e2ef70e..c8b0b9f 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -115,3 +115,4 @@ 310 auto 311 auto metadata log 312 auto quick prealloc enospc +314 auto quick -- 1.7.12.rc2.18.g61b472e From gnehzuil.liu@gmail.com Wed May 15 22:40:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 119827F37 for ; Wed, 15 May 2013 22:40:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id EE1C18F8054 for ; Wed, 15 May 2013 20:40:14 -0700 (PDT) X-ASG-Debug-ID: 1368675610-04cbb05fe42ec9e0001-NocioJ Received: from mail-pa0-f50.google.com (mail-pa0-f50.google.com [209.85.220.50]) by cuda.sgi.com with ESMTP id Nud8i06jySDMUGRR (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 15 May 2013 20:40:10 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.50 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.50] Received: by mail-pa0-f50.google.com with SMTP id fb10so2089126pad.9 for ; Wed, 15 May 2013 20:40:10 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.50] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.50] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=wA4xVpcl862Ocr9XwqR26I7y2/8McZPQ7RgjMLc63Z8=; b=T6SBUU95yTgcLkh7NBJnCubvDXTnXdRxCAhmJD1Bgi5Rag3KZhZMBLkg6o/8YITrTX RCqGolHrgo3VDtS+f+vhG5nIQCeyV+Ftg0dc0IT6dK46FZaR2mwrWwtLdNQlgOcKuA9l tvS5FAd0kyFj0COyVDCoalG6aO0o07TB6odPd/BuAt8TMcOwcmTFzILHXPuODH7pOfee 3n7dAJEHCkcWcuDZ0a4g0P7+YdHrqJi374ONhzfwueE/sgeg48qhH1jCiFslC9kJH33R gDoaI61VR4cUV48fcGvp0hsp7IdKb2XN4DCxpH2f41lHMEkmHHNSW45U+U8l78e0m5Uq f/bw== X-Received: by 10.68.190.104 with SMTP id gp8mr41514013pbc.120.1368675610095; Wed, 15 May 2013 20:40:10 -0700 (PDT) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPSA id al2sm5021236pbc.25.2013.05.15.20.40.06 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 15 May 2013 20:40:09 -0700 (PDT) Date: Thu, 16 May 2013 11:57:58 +0800 From: Zheng Liu To: Eric Sandeen Cc: xfs@oss.sgi.com, Zheng Liu , Dave Chinner , Rich Johnston Subject: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file Message-ID: <20130516035758.GA6823@gmail.com> X-ASG-Orig-Subj: Re: [PATCH v5] xfstests: add a new test case for ext4 indirect-based file References: <1368463235-14478-1-git-send-email-wenqing.lz@taobao.com> <5193AA69.7050507@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5193AA69.7050507@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-pa0-f50.google.com[209.85.220.50] X-Barracuda-Start-Time: 1368675610 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131086 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Wed, May 15, 2013 at 10:31:53AM -0500, Eric Sandeen wrote: > On 5/13/13 11:40 AM, Zheng Liu wrote: > > From: Zheng Liu > > > > After applied this commit (864688d3), xfstests #255 will not test a > > file system that cannot support fallocate(2), such as a indirect-based > > file in ext4. So we need to add a new generic test case to test it. > > > > The difference between #255 and this test case is only to use pwrite to > > allocate blocks. Other filesystems should survive in this test case. > > In the mean time, a new argument '-u' is added into _test_generic_punch > > not to run unwritten tests. > > > > Meanwhile this commit fixes a minor problem in #255 that testfile should > > use $seq.$$ as testfile. > > > > Signed-off-by: Zheng Liu > > Cc: Eric Sandeen > > Cc: Dave Chinner > > Cc: Rich Johnston > > --- > > changelog: > > * rebase against Eric's patch > > * remove 'prealloc" from group > > > > Hi Eric, > > > > I take a close look at your patch, and 'xfs_io_opt' has been removed in your > > patch. I am not sure whether I need to adjust my patch or not. Please let me > > know if I need to change it. Currently I only remove '-F' argument from test > > case. > > xfs_io_opt was an option passed to _test_generic_punch used for "-F", as in: > > _test_generic_punch -k falloc fpunch fpunch fiemap _filter_hole_fiemap $testfile -F > > -F is no longer needed, so I just dropped the whole thing. > > I'm sorry this patch has required so much work. :( > > If you simply replace "$xfs_io_opt " with "" in this patch, it applies > again with some fuzz. i.e. in vim I just did: > > :%s/$xfs_io_opt //g > > to fix up the patch itself. > > There is also still one instance of "-F" in the context of the hunk > in tests/generic/255 as well which causes a little fuzz.] Hi Eric, Thanks for pointing it out. I have sent a newer version to the mailing list. Could you please review this patch? Thanks, - Zheng From korn-xfs=oss.sgi.com@elan.rulez.org Wed May 15 22:56:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F34157F37 for ; Wed, 15 May 2013 22:56:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B941D8F8064 for ; Wed, 15 May 2013 20:56:55 -0700 (PDT) X-ASG-Debug-ID: 1368676612-04bdf042242f4f90001-NocioJ Received: from chinook.cae-engineering.hu (chinook.cae-engineering.hu [213.165.74.136]) by cuda.sgi.com with ESMTP id Fnn4Wt3JiKOnxLpy for ; Wed, 15 May 2013 20:56:53 -0700 (PDT) X-Barracuda-Envelope-From: korn-xfs=oss.sgi.com@elan.rulez.org X-Barracuda-Apparent-Source-IP: 213.165.74.136 Received: (qmail 345 invoked from network); 16 May 2013 05:56:52 +0200 Received: from korn-home.user.vpn.cae-engineering.hu (HELO hellgate.av.hu) (172.18.32.249) by chinook.vpn.cae-engineering.hu with ESMTP; 16 May 2013 05:56:52 +0200 Received: (qmail 20351 invoked by uid 1000); 16 May 2013 05:56:52 +0200 Date: Thu, 16 May 2013 05:56:51 +0200 From: Andras Korn To: xfs@oss.sgi.com Subject: Re: wishlist: xfs_repair should detect files with too small sizes Message-ID: <20130516035651.GH17261@hellgate> X-ASG-Orig-Subj: Re: wishlist: xfs_repair should detect files with too small sizes References: <20130514215550.GK17260@hellgate> <20130515004736.GM29466@dastard> <20130515080355.GL17260@hellgate> <20130515214105.GZ24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130515214105.GZ24635@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: chinook.cae-engineering.hu[213.165.74.136] X-Barracuda-Start-Time: 1368676613 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131088 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 16, 2013 at 07:41:05AM +1000, Dave Chinner wrote: > > OK, thinking about it I realise there doesn't appear to be a good way of > > preventing the problem, but I'm still not sure some heuristic couldn't be > > invented to detect and partially remedy it after the fact. > > Trying to remedy it in xfs_repair does more harm than good. What > happens now allows recovery of data if the inode size was wrong. If > we remove the blocks beyond EOF, we lose that ability and hence make > unrecoverable data loss more likely in common failure scenarios. That's clear (xfs_repair not freeing up the space is what allowed me to recover the data). I meant "remedy" as in _either_ increase the inode size OR free up the extra space. Perhaps xfs_db could be extended to do this? Of course, increasing the size as stored in the inode can add garbage (at the very least, binary zeroes) to the end of files, but if the data would otherwise have been lost, this is probably still preferable. I can even imagine an xfs_db command that increases file size up to the last non-zero data byte in the allocated space. -- Andras Korn No wanna work. Wanna bang on keyboard. From return-t1-default130516-xfs=oss.sgi.com@xtenzio.com Thu May 16 02:11:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE, HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7D19B7F37 for ; Thu, 16 May 2013 02:11:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0A294AC002 for ; Thu, 16 May 2013 00:11:56 -0700 (PDT) X-ASG-Debug-ID: 1368688303-04bdf042232fefb0001-NocioJ Received: from smtp1-2.xtenzio.com (smtp1-2.xtenzio.com [213.133.111.18]) by cuda.sgi.com with SMTP id jtzVK8sBUBGojJb6 for ; Thu, 16 May 2013 00:11:43 -0700 (PDT) X-Barracuda-Envelope-From: return-t1-default130516-xfs=oss.sgi.com@xtenzio.com X-Barracuda-Apparent-Source-IP: 213.133.111.18 Received: (qmail 16007 invoked from network); 16 May 2013 07:11:42 -0000 X-Mailer-Info: AwR1ZQZkM3yboaAlpFk6LaNhqaEzYzMzLxOzp2ffZJp To: "xfs@oss.sgi.com" Subject: Novosti.com.cy Daily news X-PHP-Originating-Script: 10000:class.phpmailer.php X-ASG-Orig-Subj: Novosti.com.cy Daily news Date: Thu, 16 May 2013 10:11:42 +0300 From: "Novosti.com.cy" Reply-To: "Novosti.com.cy" Message-ID: <6c1440afcf761e10c2dd28a77d575067@localhost.localdomain> X-Priority: 3 X-Mailer: xtenzio-mailer X-Complaints-To: abuse@dotpanel.com List-Unsubscribe: X-MessageID: MTg0Mnx8fHw3MTExfHx8fHhmc0Bvc3Muc2dpLmNvbXx8fHwxMjR8fHx8MTF8fHx8MA%3D%3D X-Report-Abuse: MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="b1_6c1440afcf761e10c2dd28a77d575067" X-Barracuda-Connect: smtp1-2.xtenzio.com[213.133.111.18] X-Barracuda-Start-Time: 1368688303 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.05 X-Barracuda-Spam-Status: No, SCORE=1.05 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=EXTRA_MPART_TYPE, HTML_MESSAGE, HTML_MIME_NO_HTML_TAG, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131100 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 1.05 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: text/html; charset = "utf-8" Content-Transfer-Encoding: quoted-printable


  =D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1=88=D0=B8=D1=81= =D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1= =82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82=D0=BD=D0=BE!= <= img src=3Dcid:2760b5ab212784c88646a03344b042dd border=3D"0">  
 

ISSN 2301-2447
=D0=9D=D0=BE=D0=B2=D0=BE=D1=81= =D1=82=D0=B8 =D0=94=D0=B0=D1=82=D0=B0:16-05-2013
<= /td>
 
  
  Part of the Cymedia Group =
=D0=A2=D0=BE=D0= =BF =D0=BD=D0=BE=D0=B2=D0=BE=D1=81=D1=82=D0=B8
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=90=D0=BD=D0=B8=D0=BC=D0=B0=D1=82=D0=BE=D1=80 =D0=BD=D0=B0=D0=BF=D0=B0= =D0=BB =D0=BD=D0=B0 =D1=80=D0=B5=D0=B1=D0=B5=D0=BD=D0=BA=D0=B0 =D1=81 =D0= =BD=D0=BE=D0=B6=D0=BE=D0=BC <= i> - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=93=D0=BE=D0=BB=D0=BB=D0=B0=D0=BD=D0= =B4=D1=81=D0=BA=D0=B8=D0=B9 =D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=82=D0=BE=D1= =80 =D0=B2 =D0=BA=D1=80=D0=B8=D1=82=D1=81=D0=BA=D0=BE=D0=BC =D0=BE=D1=82=D0= =B5=D0=BB=D0=B5 =D0=BD=D0=B0=D0=BD=D0=B5=D1=81 11-=D0=BB=D0=B5=D1=82=D0=BD= =D0=B5=D0=BC=D1=83 =D0=BC=D0=B0=D0=BB=D1=8C=D1=87=D0=B8=D0=BA=D1=83 =D0=B8= =D0=B7 =D0=A0=D0=BE=D1=81=D1=81=D0=B8=D0=B8 =D0=BE=D0=BA=D0=BE=D0=BB=D0=BE = 20 =D0=BD=D0=BE=D0=B6=D0=B5=D0=B2=D1=8B=D1=85 =D1=80=D0=B0=D0=BD=D0=B5=D0= =BD=D0=B8=D0=B9, =D0=BF=D0=BE=D1=81=D0=BB=D0=B5 =D1=82=D0=BE=D0=B3=D0=BE = =D0=BA=D0=B0=D0=BA =D1=80=D0=B5=D0=B1=D0=B5=D0=BD=D0=BE=D0=BA =D0=B7=D0=B0= =D0=BF=D0=BE=D0=B4=D0=BE=D0=B7=D1=80=D0=B8=D0=BB =D0=B5=D0=B3=D0=BE =D0=B2.= =2E. =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =C2=AB=D0=A2=D1=83=D0=BF=D0=BE=D0=B9 =D0=B8 =D0=B5=D1=89=D1=91 =D1=82=D1=83= =D0=BF=D0=B5=D0=B5=C2=BB: =D0=B7=D0=B0=D0=BF=D0=B0=D0=B4=D0=BD=D0=B0=D1=8F = =D0=BF=D1=80=D0=B5=D1=81=D1=81=D0=B0 =D0=B2=D1=8B=D1=81=D0=BC=D0=B5=D0=B8= =D0=B2=D0=B0=D0=B5=D1=82 =D0=BF=D0=BE=D0=B9=D0=BC=D0=B0=D0=BD=D0=BD=D0=BE= =D0=B3=D0=BE =D0=B2 =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B5 =D0=B0=D0=BC=D0=B5= =D1=80=D0=B8=D0=BA=D0=B0=D0=BD=D1=81=D0=BA=D0=BE=D0=B3=D0=BE =D1=88=D0=BF= =D0=B8=D0=BE=D0=BD=D0=B0 - = rt.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=97=D0=B0=D0=B4=D0=B5=D1=80=D0=B6=D0= =B0=D0=BD=D0=B8=D0=B5 =D0=B2 =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B5 =D0=BF=D1= =80=D0=B5=D0=B4=D0=BF=D0=BE=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC=D0=BE=D0=B3= =D0=BE =D0=B0=D0=BC=D0=B5=D1=80=D0=B8=D0=BA=D0=B0=D0=BD=D1=81=D0=BA=D0=BE= =D0=B3=D0=BE =D1=88=D0=BF=D0=B8=D0=BE=D0=BD=D0=B0, =D0=BA=D0=BE=D1=82=D0=BE= =D1=80=D0=BE=D0=B3=D0=BE =D1=83=D0=B6=D0=B5 =D0=BE=D0=B1=D1=8A=D1=8F=D0=B2= =D0=B8=D0=BB=D0=B8 =D0=BF=D0=B5=D1=80=D1=81=D0=BE=D0=BD=D0=BE=D0=B9 =D0=BD= =D0=BE=D0=BD =D0=B3=D1=80=D0=B0=D1=82=D0=B0, =D1=81=D1=82=D0=B0=D0=BB=D0=BE= =D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B9 =D1=82=D0=B5=D0=BC=D0=BE=D0=B9 = =D0=BA=D0=B0=D0=BA =D1=80=D0=BE=D1=81=D1=81=D0=B8=D0=B9=D1=81=D0=BA=D0=B8= =D1=85,... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9C=D0=92=D0=A4 =D1=81=D0=BE=D0=B3=D0=BB=D0=B0=D1=81=D0=BE=D0=B2=D0=B0= =D0=BB =D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5 =D0=9A=D0=B8= =D0=BF=D1=80=D1=83 =D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B3=D0=BE =D1=82=D1=80= =D0=B0=D0=BD=D1=88=D0=B0 =D1=84=D0=B8=D0=BD=D0=B0=D0=BD=D1=81=D0=BE=D0=B2= =D0=BE=D0=B9 =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D0=B8 - ria.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9C=D0=B5=D0=B6=D0=B4=D1=83=D0=BD=D0= =B0=D1=80=D0=BE=D0=B4=D0=BD=D1=8B=D0=B9 =D0=B2=D0=B0=D0=BB=D1=8E=D1=82=D0= =BD=D1=8B=D0=B9 =D1=84=D0=BE=D0=BD=D0=B4 =D1=83=D1=82=D0=B2=D0=B5=D1=80=D0= =B4=D0=B8=D0=BB =D0=BF=D0=BB=D0=B0=D0=BD =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D0= =B8 =D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=BA=D0=B5 =D0=9A=D0=B8=D0= =BF=D1=80=D0=B0 =D0=B2 =D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=B5 =D0=BE=D0= =B4=D0=BD=D0=BE=D0=B3=D0=BE =D0=BC=D0=B8=D0=BB=D0=BB=D0=B8=D0=B0=D1=80=D0= =B4=D0=B0 =D0=B5=D0=B2=D1=80=D0=BE (1,33 =D0=BC=D0=B8=D0=BB=D0=BB=D0=B8=D0= =B0=D1=80=D0=B4=D0=B0 =D0=B4=D0=BE=D0=BB=D0=BB=D0=B0=D1=80=D0=BE=D0=B2) =D0= =B8 =D1=81=D0=BE=D0=B3=D0=BB=D0=B0=D1=81=D0=BE=D0=B2=D0=B0=D0=BB =D0=B2=D1= =8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9C=D0=B8=D0=BD=D1=84=D0=B8=D0=BD: =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=B0= =D0=B3=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9 =D0=A1=D1=87=D0=B5=D1=82=D0=BD=D0=BE= =D0=B9 =D0=BF=D0=B0=D0=BB=D0=B0=D1=82=D0=BE=D0=B9 =D0=BD=D0=B0=D0=BB=D0=BE= =D0=B3 =D0=BD=D0=B0 =D0=B4=D0=B5=D0=BD=D1=8C=D0=B3=D0=B8 =D0=B2 =D0=BE=D1= =84=D1=88=D0=BE=D1=80=D0=B0=D1=85 =D0=BC=D0=BE=D0=B6=D0=BD=D0=BE =D0=B1=D1= =83=D0=B4=D0=B5=D1=82 =D0=BB=D0=B5=D0=B3=D0=BA=D0=BE =D0=BE=D0=B1=D0=BE=D0= =B9=D1=82=D0=B8 - newsru.ru= =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=92 =D0=9C=D0=B8=D0=BD=D1=84=D0=B8= =D0=BD=D0=B5 =D0=A0=D0=A4 =D1=81=D1=87=D0=B8=D1=82=D0=B0=D1=8E=D1=82, =D1= =87=D1=82=D0=BE =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3 =D0=BD=D0=B0 =D0=BE=D1=84=D1= =88=D0=BE=D1=80=D0=BD=D1=8B=D0=B5 =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0= =B8=D0=B8, =D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9 =D0=BF=D1=80=D0=B5=D0= =B4=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D1=82 =D0=B2=D0=B2=D0=B5=D1=81=D1=82=D0= =B8 =D0=A1=D1=87=D0=B5=D1=82=D0=BD=D0=B0=D1=8F =D0=BF=D0=B0=D0=BB=D0=B0=D1= =82=D0=B0, =D0=BC=D0=BE=D0=B6=D0=BD=D0=BE =D0=B1=D1=83=D0=B4=D0=B5=D1=82 = =D0=BB=D0=B5=D0=B3=D0=BA=D0=BE =D0=BE=D0=B1=D0=BE=D0=B9=D1=82=D0=B8 =D1=87= =D0=B5=D1=80=D0=B5=D0=B7 =D0=BD=D0=B5=D0=BE=D1=84=D1=88=D0=BE=D1=80=D0=BD= =D1=8B=D0=B5... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09
=D0=98=D0=BD=D1= =82=D0=B5=D1=80=D0=BD=D0=B0=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD= =D1=8B=D0=B5 =D0=BD=D0=BE=D0=B2=D0=BE=D1=81=D1=82=D0=B8
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=93=D0=B5=D0=BD=D0=B0=D1=81=D1=81=D0=B0=D0=BC=D0=B1=D0=BB=D0=B5=D1=8F = =D0=9E=D0=9E=D0=9D =D0=BE=D0=B4=D0=BE=D0=B1=D1=80=D0=B8=D0=BB=D0=B0 =D1=80= =D0=B5=D0=B7=D0=BE=D0=BB=D1=8E=D1=86=D0=B8=D1=8E =D0=BF=D0=BE =D0=A1=D0=B8= =D1=80=D0=B8=D0=B8, =D0=BE=D1=81=D1=83=D0=B6=D0=B4=D0=B0=D1=8E=D1=89=D1=83= =D1=8E =D1=80=D0=B5=D0=B6=D0=B8=D0=BC =D0=91=D0=B0=D1=88=D0=B0=D1=80=D0=B0 = =D0=90=D1=81=D0=B0=D0=B4=D0=B0= - itar-tass.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=93=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D0= =BB=D1=8C=D0=BD=D0=B0=D1=8F =D0=90=D1=81=D1=81=D0=B0=D0=BC=D0=B1=D0=BB=D0= =B5=D1=8F =D0=9E=D0=9E=D0=9D =D1=81=D0=B5=D0=B3=D0=BE=D0=B4=D0=BD=D1=8F =D0= =B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=BD=D1=81=D1=82=D0=B2=D0=BE=D0=BC =D0= =B3=D0=BE=D0=BB=D0=BE=D1=81=D0=BE=D0=B2 =D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1= =80=D0=B6=D0=B0=D0=BB=D0=B0 =D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82 =D1=80=D0= =B5=D0=B7=D0=BE=D0=BB=D1=8E=D1=86=D0=B8=D0=B8 =D0=BF=D0=BE =D0=A1=D0=B8=D1= =80=D0=B8=D0=B8, =D1=80=D0=B5=D0=B7=D0=BA=D0=BE =D0=BE=D1=81=D1=83=D0=B6=D0= =B4=D0=B0=D1=8E=D1=89=D1=83=D1=8E =D1=80=D0=B5=D0=B6=D0=B8=D0=BC =D0=BF=D1= =80=D0=B5=D0=B7=D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D0=B0 =D0=91=D0=B0=D1=88=D0= =B0=D1=80=D0=B0... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D1=81 =D0=9C=D0=B0=D0=B4=D1=83=D1=80= =D0=BE =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=B8=D1=82 50 =D0=BC=D0=BB=D0=BD =D1= =80=D1=83=D0=BB=D0=BE=D0=BD=D0=BE=D0=B2 =D1=82=D1=83=D0=B0=D0=BB=D0=B5=D1= =82=D0=BD=D0=BE=D0=B9 =D0=B1=D1=83=D0=BC=D0=B0=D0=B3=D0=B8, =D1=87=D1=82=D0= =BE=D0=B1=D1=8B =D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=D0=BE=D1=81=D1=82=D0= =BE=D1=8F=D1=82=D1=8C =D0=BE=D0=BF=D0=BF=D0=BE=D0=B7=D0=B8=D1=86=D0=B8=D0= =B8 - rt.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=92 =D0=92=D0=B5=D0=BD=D0=B5=D1=81= =D1=83=D1=8D=D0=BB=D0=B5 =D0=BD=D0=B5 =D1=85=D0=B2=D0=B0=D1=82=D0=B0=D0=B5= =D1=82 =D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2 =D0=BF=D0=B5=D1=80=D0=B2= =D0=BE=D0=B9 =D0=BD=D0=B5=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=D0=B8=D0=BC=D0=BE= =D1=81=D1=82=D0=B8. =D0=9F=D1=80=D0=B5=D0=B7=D0=B8=D0=B4=D0=B5=D0=BD=D1=82 = =D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D1=81 =D0=9C=D0=B0=D0=B4=D1=83=D1=80= =D0=BE =D0=B7=D0=B0=D1=8F=D0=B2=D0=B8=D0=BB, =D1=87=D1=82=D0=BE =D1=82=D0= =B0=D0=BA=D0=B8=D0=B5 =D0=BD=D0=BE=D0=B2=D0=BE=D1=81=D1=82=D0=B8 =D1=81=D0= =BF=D0=B5=D1=86=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE =D1=80=D0=B0=D1=81=D0= =BF=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=8F=D1=8E=D1=82 =D0=B5=D0= =B3=D0=BE =D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=D0=BD=D0=B8=D0=BA=D0=B8,... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9D=D0=BE=D0=B2=D1=8B=D0=B9 =D1=81=D0=BA=D0=B0=D0=BD=D0=B4=D0=B0=D0=BB = =D0=B2 =D0=A1=D0=A8=D0=90: =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=B0= =D1=8F =D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=D0=BB=D0=B0 =D0=9E=D0=B1=D0=B0=D0=BC= =D0=B5 =D0=BC=D0=B5=D0=B4=D0=B2=D0=B5=D0=B6=D1=8C=D1=8E =D1=83=D1=81=D0=BB= =D1=83=D0=B3=D1=83 - vesti.= ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=90=D0=BC=D0=B5=D1=80=D0=B8=D0=BA=D0= =B0=D0=BD=D1=81=D0=BA=D0=B8=D0=B5 =D0=B2=D0=BB=D0=B0=D1=81=D1=82=D0=B8, =D0= =BD=D0=B5 =D1=83=D1=81=D0=BF=D0=B5=D0=B2 =D0=B5=D1=89=D0=B5 =D1=80=D0=B0=D0= =B7=D0=BE=D0=B1=D1=80=D0=B0=D1=82=D1=8C=D1=81=D1=8F =D1=81 =D0=BE=D0=B1=D0= =B2=D0=B8=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=D0=B8 =D0=A6=D0=A0=D0=A3 =D0= =B2 =D0=BF=D1=80=D0=BE=D1=81=D0=BB=D1=83=D1=88=D0=BA=D0=B5 =D0=B6=D1=83=D1= =80=D0=BD=D0=B0=D0=BB=D0=B8=D1=81=D1=82=D0=BE=D0=B2 Associated Press, =D0= =BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D0=BB=D0=B8 =D0=BD=D0=BE=D0=B2=D1=8B=D0= =B9 =D1=81=D0=BA=D0=B0=D0=BD=D0=B4=D0=B0=D0=BB. =D0=A0=D1=83=D0=BA=D0=BE=D0= =B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=BE =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0= =BE=D0=B2=D0=BE=D0=B9... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09"= =D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F =D0=B6=D0=B8=D0=B7=D0=BD=D1=8C =D0=90= =D0=BD=D0=B3=D0=B5=D0=BB=D1=8B =D0=9C.": =D0=BA=D0=B0=D0=BD=D1=86=D0=BB=D0= =B5=D1=80=D0=B0 =D0=93=D0=B5=D1=80=D0=BC=D0=B0=D0=BD=D0=B8=D0=B8 =D0=B2=D1= =8B=D0=B2=D0=B5=D0=BB=D0=B8 =D0=BD=D0=B0 =D1=87=D0=B8=D1=81=D1=82=D1=83=D1= =8E =D0=B2=D0=BE=D0=B4=D1=83 - vesti.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9D=D0=B0 =D0=BF=D0=BE=D0=BB=D0=BA= =D0=B0=D1=85 =D0=BA=D0=BD=D0=B8=D0=B6=D0=BD=D1=8B=D1=85 =D0=BC=D0=B0=D0=B3= =D0=B0=D0=B7=D0=B8=D0=BD=D0=BE=D0=B2 =D0=93=D0=B5=D1=80=D0=BC=D0=B0=D0=BD= =D0=B8=D0=B8 =D0=BF=D0=BE=D1=8F=D0=B2=D0=B8=D0=BB=D0=B0=D1=81=D1=8C =D0=BA= =D0=BD=D0=B8=D0=B3=D0=B0 "=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F =D0=B6=D0=B8= =D0=B7=D0=BD=D1=8C =D0=90=D0=BD=D0=B3=D0=B5=D0=BB=D1=8B =D0=9C." (Das erste= Leben der Angela M.), =D0=BF=D0=BE=D1=81=D0=B2=D1=8F=D1=89=D0=B5=D0=BD=D0= =BD=D0=B0=D1=8F =D0=BC=D0=BE=D0=BB=D0=BE=D0=B4=D0=BE=D1=81=D1=82=D0=B8 =D0= =BA=D0=B0=D0=BD=D1=86=D0=BB=D0=B5=D1=80=D0=B0 =D0=93=D0=B5=D1=80=D0=BC=D0= =B0=D0=BD=D0=B8=D0=B8.... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=91=D1=80=D0=B0=D0=B7=D0=B8=D0=BB=D1=8C=D1=81=D0=BA=D0=B8=D0=BC =D0=B3= =D0=B5=D1=8F=D0=BC =D1=80=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B8=D0=BB=D0=B8 = =D0=B6=D0=B5=D0=BD=D0=B8=D1=82=D1=8C=D1=81=D1=8F - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=A1=D0=BE=D0=B2=D0=B5=D1=82 =D1=8E= =D1=81=D1=82=D0=B8=D1=86=D0=B8=D0=B8 =D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=8B = =D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=D0=B8=D0=BB =D0=B3=D0=BE=D1=81=D1=83= =D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC =D1=83= =D1=87=D1=80=D0=B5=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC =D0=BE=D1=82= =D0=BA=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0=D1=82=D1=8C =D0=BE=D0=B4=D0=BD=D0=BE= =D0=BF=D0=BE=D0=BB=D1=8B=D0=BC =D0=BF=D0=B0=D1=80=D0=B0=D0=BC =D0=B2 =D0=BE= =D1=84=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9 =D1=80=D0=B5= =D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D0=BE=D1=82=D0=BD= =D0=BE=D1=88=D0=B5=D0=BD=D0=B8=D0=B9 =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09
=D0=9F=D0=BE=D0= =BB=D0=B8=D1=82=D0=B8=D0=BA=D0=B0
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9F=D0=BE=D0=BC=D0=BE=D1=89=D0=BD=D0=B8=D0=BA =D0=BF=D1=80=D0=B5=D0=B7= =D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D0=B0 =D0=A0=D0=BE=D1=81=D1=81=D0=B8=D0=B8 = =D0=BE =D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5 =D0=A6=D0=A0=D0=A3: "=D0=93=D1= =80=D1=83=D0=B1=D0=B0=D1=8F, =D0=BD=D0=B5=D1=83=D0=BA=D0=BB=D1=8E=D0=B6=D0= =B0=D1=8F =D0=B2=D0=B5=D1=80=D0=B1=D0=BE=D0=B2=D0=BA=D0=B0" - ria.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=92 =D0=9C=D0=BE=D1=81=D0=BA=D0=B2= =D0=B5 =D1=83=D0=B4=D0=B8=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B "=D0=B3=D1=80=D1=83= =D0=B1=D0=BE=D0=B9, =D0=BD=D0=B5=D1=83=D0=BA=D0=BB=D1=8E=D0=B6=D0=B5=D0=B9 = =D0=B2=D0=B5=D1=80=D0=B1=D0=BE=D0=B2=D0=BA=D0=BE=D0=B9" =D1=81=D0=BE=D1=82= =D1=80=D1=83=D0=B4=D0=BD=D0=B8=D0=BA=D0=B0 =D1=80=D0=BE=D1=81=D1=81=D0=B8= =D0=B9=D1=81=D0=BA=D0=B8=D1=85 =D1=81=D0=BF=D0=B5=D1=86=D1=81=D0=BB=D1=83= =D0=B6=D0=B1 =D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=BE=D0=BC =D0=A6=D0=A0=D0=A3,= =D0=BD=D0=BE =D1=80=D0=B0=D1=81=D1=81=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0= =D1=8E=D1=82, =D1=87=D1=82=D0=BE =D1=8D=D1=82=D0=BE =D0=BD=D0=B5 =D0=BF=D0= =BE=D0=B2=D0=BB=D0=B8=D1=8F=D0=B5=D1=82 =D0=BD=D0=B0 =D1=81=D0=BE=D1=82=D1= =80=D1=83=D0=B4=D0=BD=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=BE... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=92 =D0=A0=D0=BE=D1=81=D0=B1=D0=B0=D0=BD=D0=BA=D0=B5 =D0=BD=D0=B0=D1=88= =D0=BB=D0=B8 =D0=B2=D0=B7=D1=8F=D1=82=D0=BA=D1=83 - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=94=D0=B2=D0=B0 =D1=82=D0=BE=D0=BF-= =D0=BC=D0=B5=D0=BD=D0=B5=D0=B4=D0=B6=D0=B5=D1=80=D0=B0 =D0=A0=D0=BE=D1=81= =D0=B1=D0=B0=D0=BD=D0=BA=D0=B0 =E2=80=93 =D0=BF=D1=80=D0=B5=D0=B4=D1=81=D0= =B5=D0=B4=D0=B0=D1=82=D0=B5=D0=BB=D1=8C =D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0= =B5=D0=BD=D0=B8=D1=8F =D0=B8 =D0=B2=D0=B8=D1=86=D0=B5-=D0=BF=D1=80=D0=B5=D0= =B7=D0=B8=D0=B4=D0=B5=D0=BD=D1=82 =E2=80=93 =D0=B7=D0=B0=D0=B4=D0=B5=D1=80= =D0=B6=D0=B0=D0=BD=D1=8B =D0=BF=D1=80=D0=B8 =D0=BF=D0=BE=D0=BB=D1=83=D1=87= =D0=B5=D0=BD=D0=B8=D0=B8 =D0=B2=D0=B7=D1=8F=D1=82=D0=BA=D0=B8 =D0=B2 5 =D0= =BC=D0=BB=D0=BD =D1=80=D1=83=D0=B1=D0=BB=D0=B5=D0=B9. =D0=92 =D0=BF=D0=BE= =D0=BB=D0=B8=D1=86=D0=B8=D0=B8 =D0=BF=D0=BE=D0=BA=D0=B0 =D0=BD=D0=B8=D0=BA= =D0=B0=D0=BA... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=A1=D0=B2=D0=B8=D0=B4=D0=B5=D1=82=D0=B5=D0=BB=D1=8C =D0=BF=D0=BE =D0=B4= =D0=B5=D0=BB=D1=83 =D0=BE=D0=B1 =D1=83=D0=B1=D0=B8=D0=B9=D1=81=D1=82=D0=B2= =D0=B5 =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D1=8F =D0=A9=D0=B5=D1=80=D0=B1= =D0=B0=D0=BD=D1=8F =D0=B7=D0=B0=D1=8F=D0=B2=D0=B8=D0=BB, =D1=87=D1=82=D0=BE= =D0=BB=D0=B8=D1=87=D0=BD=D0=BE =D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D0=BB = =D0=B4=D0=B5=D0=BD=D1=8C=D0=B3=D0=B8 =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD= =D0=B8=D1=82=D0=B5=D0=BB=D1=8E =D0=BF=D1=80=D0=B5=D1=81=D1=82=D1=83=D0=BF= =D0=BB=D0=B5=D0=BD=D0=B8=D1=8F= - itar-tass.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=A1=D0=B2=D0=B8=D0=B4=D0=B5=D1=82=D0= =B5=D0=BB=D1=8C =D0=BF=D0=BE =D0=B4=D0=B5=D0=BB=D1=83 =D0=BE=D0=B1 =D1=83= =D0=B1=D0=B8=D0=B9=D1=81=D1=82=D0=B2=D0=B5 =D0=BA=D1=80=D1=83=D0=BF=D0=BD= =D0=BE=D0=B3=D0=BE =D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=D0=BC=D0=B5=D0=BD= =D0=B0 =D0=B8 =D0=B4=D0=B5=D0=BF=D1=83=D1=82=D0=B0=D1=82=D0=B0 =D0=BF=D0=B0= =D1=80=D0=BB=D0=B0=D0=BC=D0=B5=D0=BD=D1=82=D0=B0 =D0=A3=D0=BA=D1=80=D0=B0= =D0=B8=D0=BD=D1=8B =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D1=8F =D0=A9=D0=B5= =D1=80=D0=B1=D0=B0=D0=BD=D1=8F =D0=B2 1996 =D0=B3=D0=BE=D0=B4=D1=83 =D0=9F= =D0=B5=D1=82=D1=80 =D0=9A=D0=B8=D1=80=D0=B8=D1=87=D0=B5=D0=BD=D0=BA=D0=BE = =D0=B7=D0=B0=D1=8F=D0=B2=D0=B8=D0=BB, =D1=87=D1=82=D0=BE =D0=BB=D0=B8=D1=87= =D0=BD=D0=BE... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=91=D0=BE=D0=BB=D0=B5=D0=B5 =D0=BF=D0=BE=D0=BB=D0=BE=D0=B2=D0=B8=D0=BD= =D1=8B =D0=BC=D0=BE=D1=81=D0=BA=D0=B2=D0=B8=D1=87=D0=B5=D0=B9 =D0=B3=D0=BE= =D1=82=D0=BE=D0=B2=D1=8B =D0=B2=D0=BD=D0=BE=D0=B2=D1=8C =D0=B2=D1=8B=D0=B1= =D1=80=D0=B0=D1=82=D1=8C =D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80= =D0=B0 =D0=9F=D1=83=D1=82=D0=B8=D0=BD=D0=B0 =D0=BF=D1=80=D0=B5=D0=B7=D0=B8= =D0=B4=D0=B5=D0=BD=D1=82=D0=BE=D0=BC - itar-tass.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9F=D0=BE =D0=B4=D0=B0=D0=BD=D0=BD= =D1=8B=D0=BC =D0=BE=D0=BF=D1=80=D0=BE=D1=81=D0=B0 =D0=A4=D0=BE=D0=BD=D0=B4= =D0=B0 "=D0=9E=D0=B1=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE= =D0=B5 =D0=BC=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5", =D0=B2 =D1=81=D0=BB=D1=83=D1= =87=D0=B0=D0=B5 =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1= =8F =D0=BF=D1=80=D0=B5=D0=B7=D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D1=81=D0=BA=D0= =B8=D1=85 =D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=BE=D0=B2 =D0=B2 =D0=B1=D0=BB=D0= =B8=D0=B6=D0=B0=D0=B9=D1=88=D0=B5=D0=B5 =D0=B2=D0=BE=D1=81=D0=BA=D1=80=D0= =B5=D1=81=D0=B5=D0=BD=D1=8C=D0=B5, =D0=B7=D0=B0 =D0=B4=D0=B5=D0=B9=D1=81=D1= =82=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=B3=D0=BE =D0=B3=D0=BB=D0=B0=D0=B2=D1= =83 =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=93=D0=B5=D0=B5=D0=B2 =D0=BD=D0=B5 =D0=BF=D1=83=D1=81=D1=82=D0=B8=D0=BB= =D0=B8 =D0=B2 "=D0=A1=D0=BE=D0=BA=D0=BE=D0=BB=D1=8C=D0=BD=D0=B8=D0=BA=D0=B8= " - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9C=D0=BE=D1=81=D0=BA=D0=BE=D0=B2=D1= =81=D0=BA=D0=B0=D1=8F =D0=BC=D1=8D=D1=80=D0=B8=D1=8F =D0=B8 =D0=B0=D0=B4=D0= =BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F =D0=BF=D0= =B0=D1=80=D0=BA=D0=B0 "=D0=A1=D0=BE=D0=BA=D0=BE=D0=BB=D1=8C=D0=BD=D0=B8=D0= =BA=D0=B8" =D0=BE=D1=82=D0=BA=D0=B0=D0=B7=D0=B0=D0=BB=D0=B8 =D0=BF=D1=80=D0= =B5=D0=B4=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D1=82=D0=B5=D0=BB=D1=8F=D0=BC =D0= =9B=D0=93=D0=91=D0=A2-=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D1=81=D1=82=D0= =B2=D0=B0 =D0=B2 =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0= =B8 =D0=B0=D0=BA=D1=86=D0=B8=D0=B9 25 =D0=B8 26 =D0=BC=D0=B0=D1=8F. =D0=92 = =D0=BF=D0=B0=D1=80=D0=BA=D0=B5 =D0=BF=D0=BE=D1=8F=D1=81=D0=BD=D0=B8=D0=BB= =D0=B8,... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09
=D0=AD=D0=BA=D0= =BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=BA=D0=B0
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9D=D0=BE=D0=B2=D1=8B=D0=B9 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3 =D0=B1=D0=B5= =D1=81=D0=BF=D0=BE=D1=89=D0=B0=D0=B4=D0=B5=D0=BD =D0=BA =D0=9F=D0=BE=D0=B4= =D0=BC=D0=BE=D1=81=D0=BA=D0=BE=D0=B2=D1=8C=D1=8E - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9C=D0=B8=D0=BD=D1=84=D0=B8=D0=BD = =D1=80=D0=B5=D1=88=D0=B8=D0=BB, =D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE = =D0=BD=D0=B5=D0=B4=D0=B2=D0=B8=D0=B6=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8 = =D0=B4=D0=BE=D0=BB=D0=B6=D0=BD=D0=BE =D0=B1=D1=8B=D1=82=D1=8C =D1=83 =D0=B3= =D1=80=D0=B0=D0=B6=D0=B4=D0=B0=D0=BD=D0=B8=D0=BD=D0=B0, =D1=87=D1=82=D0=BE= =D0=B1=D1=8B =D1=8D=D1=82=D0=BE =D1=81=D1=87=D0=B8=D1=82=D0=B0=D0=BB=D0=BE= =D1=81=D1=8C "=D0=B2=D0=BB=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC =D1=80= =D0=BE=D1=81=D0=BA=D0=BE=D1=88=D1=8C=D1=8E" =D0=B8, =D1=81=D0=BB=D0=B5=D0= =B4=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE, =D0=BB=D0=B8=D1= =88=D0=B0=D0=BB=D0=BE =D0=B5=D0=B3=D0=BE =D0=BF=D1=80=D0=B0=D0=B2=D0=B0 =D0= =BD=D0=B0... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=A0=D1=83=D1=81=D1=81=D0=BA=D0=B8=D0=B5 =D0=B4=D0=BE=D0=B2=D0=BE=D0=BB= =D1=8C=D0=BD=D1=8B =D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BE=D0=B9 =D0=B8 =D0=B7= =D0=B0=D1=80=D0=BF=D0=BB=D0=B0=D1=82=D0=BE=D0=B9 - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=A0=D0=BE=D1=81=D1=81=D0=B8=D1=8F=D0= =BD=D0=B5 =D0=B2 =D1=86=D0=B5=D0=BB=D0=BE=D0=BC =D0=B4=D0=BE=D0=B2=D0=BE=D0= =BB=D1=8C=D0=BD=D1=8B =D1=81=D0=B2=D0=BE=D0=B5=D0=B9 =D1=80=D0=B0=D0=B1=D0= =BE=D1=82=D0=BE=D0=B9, =D1=81=D0=B2=D0=B8=D0=B4=D0=B5=D1=82=D0=B5=D0=BB=D1= =8C=D1=81=D1=82=D0=B2=D1=83=D0=B5=D1=82 =D0=BE=D0=BF=D1=80=D0=BE=D1=81 =D0= =92=D0=A6=D0=98=D0=9E=D0=9C. =D0=AD=D1=82=D0=BE =D0=BD=D0=B5=D1=83=D0=B4=D0= =B8=D0=B2=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE - =D0=B7=D0=B0=D1=80=D0= =BF=D0=BB=D0=B0=D1=82=D1=8B =D1=80=D0=B0=D1=81=D1=82=D1=83=D1=82, =D0=BD=D0= =B5=D1=81=D0=BC=D0=BE=D1=82=D1=80=D1=8F =D0=BD=D0=B0 =D0=B7=D0=B0=D0=BC=D0= =B5=D0=B4=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5 =D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0= =BC=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0=BE... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=92=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5 =D0=B3= =D1=80=D1=83=D0=B7=D0=B8=D0=BD=D1=81=D0=BA=D0=BE=D0=B9 =D0=BF=D1=80=D0=BE= =D0=B4=D1=83=D0=BA=D1=86=D0=B8=D0=B8 =D0=BD=D0=B0 =D1=80=D0=BE=D1=81=D1=81= =D0=B8=D0=B9=D1=81=D0=BA=D0=B8=D0=B9 =D1=80=D1=8B=D0=BD=D0=BE=D0=BA<= /a> - mail.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=A1=D0=B0=D0=BD=D0=B8=D1=82=D0=B0=D1= =80=D0=BD=D0=B0=D1=8F =D1=81=D0=BB=D1=83=D0=B6=D0=B1=D0=B0 =D0=BE=D1=82=D0= =BA=D0=B0=D0=B7=D0=B0=D0=BB=D0=B0 =D0=B2 =D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1= =82=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D0=BF=D1=8F=D1=82=D0=B8 =D0=B2=D0=B8=D0= =B4=D0=BE=D0=B2 =D0=BA=D0=BE=D0=BD=D1=8C=D1=8F=D0=BA=D0=B0, =D0=BA=D0=BE=D1= =82=D0=BE=D1=80=D1=8B=D0=B5 =D0=BE=D0=B4=D0=BD=D0=B0 =D0=B8=D0=B7 =D0=B3=D1= =80=D1=83=D0=B7=D0=B8=D0=BD=D1=81=D0=BA=D0=B8=D1=85 =D0=BA=D0=BE=D0=BC=D0= =BF=D0=B0=D0=BD=D0=B8=D0=B9 =D1=81=D0=BE=D0=B1=D0=B8=D1=80=D0=B0=D0=BB=D0= =B0=D1=81=D1=8C =D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D1=8F=D1=82=D1= =8C =D0=BD=D0=B0 =D1=80=D0=BE=D1=81=D1=81=D0=B8=D0=B9=D1=81=D0=BA=D0=B8=D0= =B9 =D1=80=D1=8B=D0=BD=D0=BE=D0=BA =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9C=D0=BB=D0=B0=D0=B4=D1=88=D0=B8=D0=B9 =D0=B1=D1=80=D0=B0=D1=82 "=D1=82= =D0=BE=D0=B2=D0=B0=D1=80=D0=B8=D1=89=D0=B0 =D0=91=D0=B8=D0=BB=D0=B0=D0=BB= =D0=BE=D0=B2=D0=B0" =D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=BB =D1=81=D0=B2=D0=BE= =D0=B9 =D0=BF=D0=B0=D0=BA=D0=B5=D1=82 =D0=B0=D0=BA=D1=86=D0=B8=D0=B9 =D0=B2= "=D0=9D=D0=B0=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC = =D0=B1=D0=B0=D0=BD=D0=BA=D0=B5 =D1=80=D0=B0=D0=B7=D0=B2=D0=B8=D1=82=D0=B8= =D1=8F =D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=D0=B0" - newsru.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9C=D0=BB=D0=B0=D0=B4=D1=88=D0=B8=D0= =B9 =D0=B1=D1=80=D0=B0=D1=82 "=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=B8=D1=89=D0= =B0 =D0=91=D0=B8=D0=BB=D0=B0=D0=BB=D0=BE=D0=B2=D0=B0" (=D0=90=D1=85=D0=BC= =D0=B5=D0=B4=D0=B0) =D0=9C=D0=B0=D0=B3=D0=BE=D0=BC=D0=B5=D0=B4 =D0=91=D0=B8= =D0=BB=D0=B0=D0=BB=D0=BE=D0=B2 =D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D0=BB =D1=80= =D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5 =D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D1=82= =D1=8C =D1=81=D0=B2=D0=BE=D1=8E =D0=B4=D0=BE=D0=BB=D1=8E =D0=B2 "=D0=9D=D0= =B0=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC =D0=B1=D0= =B0=D0=BD=D0=BA=D0=B5 =D1=80=D0=B0=D0=B7=D0=B2=D0=B8=D1=82=D0=B8=D1=8F =D0= =B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=D0=B0" (=D0=9D=D0=91=D0=91) =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09
=D0=9B=D0=BE=D0= =BA=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5 =D0=BD=D0=BE=D0=B2=D0=BE=D1=81=D1= =82=D0=B8
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=97=D0=B0=D0=B1=D0=B0=D1=81=D1=82=D0=BE=D0=B2=D0=BA=D0=B0 =D0=B3=D1=80= =D0=B5=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85 =D0=B0=D0=B2=D0=B8=D0=B0=D0=B4= =D0=B8=D1=81=D0=BF=D0=B5=D1=82=D1=87=D0=B5=D1=80=D0=BE=D0=B2 =D0=BF=D0=BE= =D0=B2=D0=BB=D0=B8=D1=8F=D0=B5=D1=82 =D0=BD=D0=B0 =D0=BA=D0=B8=D0=BF=D1=80= =D1=81=D0=BA=D0=B8=D0=B5 =D1=80=D0=B5=D0=B9=D1=81=D1=8B - isg-tour.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=A1=D0=B5=D0=B3=D0=BE=D0=B4=D0=BD=D1= =8F (=D1=87=D0=B5=D1=82=D0=B2=D0=B5=D1=80=D0=B3, 16 =D0=BC=D0=B0=D1=8F) =D0= =B2=D0=BE=D1=81=D0=B5=D0=BC=D1=8C =D1=80=D0=B5=D0=B9=D1=81=D0=BE=D0=B2 =D0= =B2/=D0=B8=D0=B7 =D0=9B=D0=B0=D1=80=D0=BD=D0=B0=D0=BA=D1=83 =D0=B8 =D0=9F= =D0=B0=D1=84=D0=BE=D1=81 =D0=B1=D1=83=D0=B4=D1=83=D1=82 =D0=B7=D0=B0=D0=B2= =D0=B8=D1=81=D0=B5=D1=82=D1=8C =D0=BE=D1=82 =D0=B3=D1=80=D0=B5=D1=87=D0=B5= =D1=81=D0=BA=D0=B8=D1=85 =D0=B0=D0=B2=D0=B8=D0=B0=D0=B4=D0=B8=D1=81=D0=BF= =D0=B5=D1=82=D1=87=D0=B5=D1=80=D0=BE=D0=B2. =D0=92 =D0=93=D1=80=D0=B5=D1=86= =D0=B8=D0=B8 =D0=B2 =D0=BF=D0=BE=D0=BB=D0=B4=D0=B5=D0=BD=D1=8C =D0=B4=D0=BE= =D0=BB=D0=B6=D0=BD=D0=B0 =D0=BD=D0=B0=D1=87=D0=B0=D1=82=D1=8C=D1=81=D1=8F..= =2E =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9A=D0=B8=D0=BF=D1=80=D1=81=D0=BA=D0=B8=D0=B9 =D0=BF=D0=BE=D0=BB=D0=B8= =D1=86=D0=B5=D0=B9=D1=81=D0=BA=D0=B8=D0=B9 =D0=B7=D0=B0=D1=81=D1=82=D1=80= =D0=B5=D0=BB=D0=B8=D0=BB =D0=B1=D1=8B=D0=B2=D1=88=D0=B5=D0=B3=D0=BE =D1=84= =D1=83=D1=82=D0=B1=D0=BE=D0=BB=D0=B8=D1=81=D1=82=D0=B0 - isg-tour.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9C=D1=83=D0=B6=D1=87=D0=B8=D0=BD=D0= =B0, =D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D1=8B=D0=B9 =D0=BF=D0=BE=D0=BB=D0=B8=D1= =86=D0=B5=D0=B9=D1=81=D0=BA=D0=B8=D0=BC =D0=B2=D0=BE =D0=B2=D1=80=D0=B5=D0= =BC=D1=8F =D0=BF=D1=80=D0=B5=D0=B4=D0=BF=D0=BE=D0=BB=D0=B0=D0=B3=D0=B0=D0= =B5=D0=BC=D0=BE=D0=B3=D0=BE =D0=BE=D0=B3=D1=80=D0=B0=D0=B1=D0=BB=D0=B5=D0= =BD=D0=B8=D1=8F =D0=B1=D1=83=D0=BB=D0=BE=D1=87=D0=BD=D0=BE=D0=B9 =D0=9D=D0= =B8=D0=BA=D0=BE=D1=81=D0=B8=D0=B8 (=D1=81=D0=BC. http://isg-tour.ru/news/vi= ew/2890.html), =D0=BD=D0=B0=D1=85=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F =D0= =B2 =D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D0=B8 =D0=BA=D0=BB=D0= =B8=D0=BD=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B9... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9A=D0=BE=D0=BC=D0=BC=D1=83=D0=BD=D0=B8=D1=81=D1=82=D0=B8=D1=87=D0=B5=D1= =81=D0=BA=D0=B0=D1=8F =D0=BF=D0=B0=D1=80=D1=82=D0=B8=D1=8F =D0=9A=D0=B8=D0= =BF=D1=80=D0=B0 =D0=BF=D1=80=D0=B8=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82 =D0= =BE=D1=82=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D1=8C=D1=81=D1=8F =D0=BE=D1=82 =D0= =B5=D0=B2=D1=80=D0=BE - isg= -tour.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9A=D0=B8=D0=BF=D1=80=D1=81=D0=BA=D0= =B0=D1=8F =D0=BA=D0=BE=D0=BC=D0=BC=D1=83=D0=BD=D0=B8=D1=81=D1=82=D0=B8=D1= =87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F =D0=BF=D0=B0=D1=80=D1=82=D0=B8=D1=8F =D0= =90=D0=BA=D0=B5=D0=BB =D0=B2=D0=BE =D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=B8=D0= =BA =D0=BE=D1=84=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE =D0=B2=D0= =BD=D0=B5=D1=81=D0=BB=D0=B0 =D1=81=D0=B2=D0=BE=D0=B8 =D0=BF=D1=80=D0=B5=D0= =B4=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F =D0=B4=D0=BB=D1=8F =D1=83=D0= =BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D1=87=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE= =D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0 =D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=8B = =D0=B8=D0=B7 =D0=B7=D0=BE=D0=BD=D1=8B =D0=B5=D0=B2=D1=80=D0=BE =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=9A=D0=B8=D0=BF=D1=80=D1=81=D0=BA=D0=B8=D0=B5 =D0=BF=D0=BE=D0=BB=D0=B8= =D1=82=D0=B8=D0=BA=D0=B8 =D0=B7=D0=B0 =D0=BE=D1=82=D0=BC=D0=B5=D0=BD=D1=83 = =D0=9C=D0=B5=D0=BC=D0=BE=D1=80=D0=B0=D0=BD=D0=B4=D1=83=D0=BC=D0=B0 =D1=81 = =D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=BE=D0=B9 - isg-tour.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9A=D0=B8=D0=BF=D1=80 =D0=B4=D0=BE= =D0=BB=D0=B6=D0=B5=D0=BD =D0=B1=D0=BE=D1=80=D0=BE=D1=82=D1=8C=D1=81=D1=8F = =D0=B7=D0=B0 =D0=B2=D1=8B=D1=85=D0=BE=D0=B4 =D0=B8=D0=B7 =D0=9C=D0=B5=D0=BC= =D0=BE=D1=80=D0=B0=D0=BD=D0=B4=D1=83=D0=BC=D0=B0 =D0=B8 =D0=BA=D1=80=D0=B5= =D0=B4=D0=B8=D1=82=D0=BD=D0=BE=D0=B3=D0=BE =D1=81=D0=BE=D0=B3=D0=BB=D0=B0= =D1=88=D0=B5=D0=BD=D0=B8=D1=8F =D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8 =D0=B5= =D0=B2=D1=80=D0=BE=D0=B7=D0=BE=D0=BD=D1=8B, =D1=80=D0=B5=D1=88=D0=B8=D0=BB= =D0=BE =D0=B2=D1=87=D0=B5=D1=80=D0=B0 =D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8= =D0=BD=D1=81=D1=82=D0=B2=D0=BE =D0=BF=D0=BE=D0=BB=D0=B8=D1=82=D0=B8=D1=87= =D0=B5=D1=81=D0=BA=D0=B8=D1=85 =D1=81=D0=B8=D0=BB =D0=BE=D1=81=D1=82=D1=80= =D0=BE=D0=B2=D0=B0 =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=92 =D0=9F=D0=BE=D0=B4=D0=BC=D0=BE=D1=81=D0=BA=D0=BE=D0=B2=D1=8C=D0=B5 = =D0=B1=D0=BE=D0=BB=D0=B5=D0=B5 3 =D1=82=D1=8B=D1=81=D1=8F=D1=87 =D1=87=D0= =B5=D0=BB=D0=BE=D0=B2=D0=B5=D0=BA =D0=BE=D1=81=D1=82=D0=B0=D0=BB=D0=B8=D1= =81=D1=8C =D0=B1=D0=B5=D0=B7 =D1=81=D0=B2=D0=B5=D1=82=D0=B0 =D0=B8=D0=B7-= =D0=B7=D0=B0 =D1=81=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE =D0=B2=D0=B5= =D1=82=D1=80=D0=B0 - itar-t= ass.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09 =D0=92 =D0=9D=D0=B0=D1=80=D0=BE-=D0=A4= =D0=BE=D0=BC=D0=B8=D0=BD=D1=81=D0=BA=D0=BE=D0=BC =D1=80=D0=B0=D0=B9=D0=BE= =D0=BD=D0=B5 =D0=9F=D0=BE=D0=B4=D0=BC=D0=BE=D1=81=D0=BA=D0=BE=D0=B2=D1=8C= =D1=8F =D0=B1=D0=BE=D0=BB=D0=B5=D0=B5 3 =D1=82=D1=8B=D1=81=D1=8F=D1=87 =D1= =87=D0=B5=D0=BB=D0=BE=D0=B2=D0=B5=D0=BA =D0=BE=D1=81=D1=82=D0=B0=D0=BB=D0= =B8=D1=81=D1=8C =D0=B1=D0=B5=D0=B7 =D1=81=D0=B2=D0=B5=D1=82=D0=B0 =D0=B8=D0= =B7-=D0=B7=D0=B0 =D1=81=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE =D0=B2=D0= =B5=D1=82=D1=80=D0=B0. =D0=9E=D0=B1 =D1=8D=D1=82=D0=BE=D0=BC =D0=98=D0=A2= =D0=90=D0=A0-=D0=A2=D0=90=D0=A1=D0=A1 =D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B8= =D0=BB=D0=B8 =D0=B2 =D0=BF=D1=80=D0=B5=D1=81=D1=81-=D1=81=D0=BB=D1=83=D0=B6= =D0=B1=D0=B5... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09
=D0=A8=D0=BE=D1= =83-=D0=B1=D0=B8=D0=B7
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=A1=D0=B5=D0=B3=D0=BE=D0=B4=D0=BD=D1=8F =D0=BE=D1=82=D0=BA=D1=80=D1=8B= =D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F 66-=D0=B9 =D0=9A=D0=B0=D0=BD=D0=BD=D1= =81=D0=BA=D0=B8=D0=B9 =D0=BA=D0=B8=D0=BD=D0=BE=D1=84=D0=B5=D1=81=D1=82=D0= =B8=D0=B2=D0=B0=D0=BB=D1=8C <= i> - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=90=D0=BA=D1=82=D0=B5=D1=80=D1=8B = =D0=9B=D0=B5=D0=BE=D0=BD=D0=B0=D1=80=D0=B4=D0=BE =D0=94=D0=B8=D0=9A=D0=B0= =D0=BF=D1=80=D0=B8=D0=BE, =D0=9A=D1=8D=D1=80=D1=80=D0=B8 =D0=9C=D0=B0=D0=BB= =D0=BB=D0=B8=D0=B3=D0=B0=D0=BD =D0=B8 =D1=80=D0=B5=D0=B6=D0=B8=D1=81=D1=81= =D0=B5=D1=80 =D0=91=D0=B0=D0=B7 =D0=9B=D1=83=D1=80=D0=BC=D0=B0=D0=BD =D0=BF= =D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D0=BB=D0=B8 =D0=B2 =D0=9A= =D0=B0=D0=BD=D0=BD=D0=B0=D1=85 =D1=84=D0=B8=D0=BB=D1=8C=D0=BC "=D0=92=D0=B5= =D0=BB=D0=B8=D0=BA=D0=B8=D0=B9 =D0=93=D1=8D=D1=82=D1=81=D0=B1=D0=B8 =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=90=D0=BD=D0=B4=D0=B6=D0=B5=D0=BB=D0=B8=D0=BD=D0=B0 =D0=94=D0=B6=D0=BE= =D0=BB=D0=B8 =D0=BF=D0=BE=D1=81=D0=BB=D0=B5 =D0=BE=D0=BF=D0=B5=D1=80=D0=B0= =D1=86=D0=B8=D0=B8 =D0=BD=D0=B0 =D0=B3=D1=80=D1=83=D0=B4=D0=B8 =E2=80=93 = =D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B5 =D0=BA=D0=B0=D0=B4=D1=80=D1=8B<= /a> - rt.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9A=D0=B8=D0=BD=D0=BE=D0=B7=D0=B2=D0= =B5=D0=B7=D0=B4=D0=B0 =D0=90=D0=BD=D0=B4=D0=B6=D0=B5=D0=BB=D0=B8=D0=BD=D0= =B0 =D0=94=D0=B6=D0=BE=D0=BB=D0=B8 =D0=B4=D0=BE=D0=B1=D1=80=D0=BE=D0=B2=D0= =BE=D0=BB=D1=8C=D0=BD=D0=BE =D0=BB=D0=B5=D0=B3=D0=BB=D0=B0 =D0=BD=D0=B0 =D0= =BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8E =D0=BF=D0=BE =D1=83=D0=B4=D0= =B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8E =D0=BC=D0=BE=D0=BB=D0=BE=D1=87=D0=BD=D1= =8B=D1=85 =D0=B6=D0=B5=D0=BB=D0=B5=D0=B7, =D1=87=D1=82=D0=BE=D0=B1=D1=8B = =D1=81=D0=BD=D0=B8=D0=B7=D0=B8=D1=82=D1=8C =D1=80=D0=B8=D1=81=D0=BA =D0=B2= =D0=BE=D0=B7=D0=BD=D0=B8=D0=BA=D0=BD=D0=BE=D0=B2=D0=B5=D0=BD=D0=B8=D1=8F = =D1=80=D0=B0=D0=BA=D0=B0 =D0=B3=D1=80=D1=83=D0=B4=D0=B8. 37-=D0=BB=D0=B5=D1= =82=D0=BD=D1=8F=D1=8F... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=97=D0=B2=D0=B5=D0=B7=D0=B4=D0=B0 "=D0=90=D0=B2=D0=B0=D1=82=D0=B0=D1=80= =D0=B0" =D0=BF=D1=80=D0=B8=D0=B7=D0=BD=D0=B0=D0=BB=D0=B0=D1=81=D1=8C, =D1= =87=D1=82=D0=BE =D0=B5=D0=B5 =D1=82=D1=8F=D0=BD=D0=B5=D1=82 =D0=BA=D0=B0=D0= =BA =D0=BA =D0=BC=D1=83=D0=B6=D1=87=D0=B8=D0=BD=D0=B0=D0=BC, =D1=82=D0=B0= =D0=BA =D0=B8 =D0=BA =D0=B6=D0=B5=D0=BD=D1=89=D0=B8=D0=BD=D0=B0=D0=BC - vesti.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=97=D0=B2=D0=B5=D0=B7=D0=B4=D0=B0 = =D1=84=D0=B8=D0=BB=D1=8C=D0=BC=D0=BE=D0=B2 "=D0=90=D0=B2=D0=B0=D1=82=D0=B0= =D1=80" =D0=B8 "=D0=A1=D1=82=D0=B0=D1=80=D1=82=D1=80=D0=B5=D0=BA: =D0=92=D0= =BE=D0=B7=D0=BC=D0=B5=D0=B7=D0=B4=D0=B8=D0=B5" =D0=97=D0=BE=D0=B8 =D0=A1=D0= =B0=D0=BB=D0=B4=D0=B0=D0=BD=D0=B0 =D0=BF=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=D0= =BB=D0=B0=D1=81=D1=8C =D1=81 =D0=B6=D1=83=D1=80=D0=BD=D0=B0=D0=BB=D0=B8=D1= =81=D1=82=D0=B0=D0=BC=D0=B8 =D0=BF=D0=B8=D0=BA=D0=B0=D0=BD=D1=82=D0=BD=D1= =8B=D0=BC=D0=B8 =D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D0=BE=D1=81=D1= =82=D1=8F=D0=BC=D0=B8 =D0=BE =D1=81=D0=B2=D0=BE=D0=B5=D0=B9 =D0=BB=D0=B8=D1= =87=D0=BD=D0=BE=D0=B9 =D0=B6=D0=B8=D0=B7=D0=BD=D0=B8. =D0=90=D0=BA=D1=82=D1= =80=D0=B8=D1=81=D0=B0... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=AD=D1=81=D1=82=D1=80=D0=BE=D0=B3=D0=B5=D0=BD=D1=8B =D0=BF=D0=BE=D0=BC= =D0=BE=D0=B3=D0=B0=D1=8E=D1=82 =D0=B6=D0=B5=D0=BD=D1=89=D0=B8=D0=BD=D0=B0= =D0=BC =D0=B6=D0=B8=D1=82=D1=8C =D0=B4=D0=BE=D0=BB=D1=8C=D1=88=D0=B5 =D0=BC= =D1=83=D0=B6=D1=87=D0=B8=D0=BD= - rt.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=9D=D0=BE=D0=B2=D0=BE=D0=B5 =D0=B8= =D1=81=D1=81=D0=BB=D0=B5=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 =D1=8F= =D0=BF=D0=BE=D0=BD=D1=81=D0=BA=D0=B8=D1=85 =D0=BC=D0=B5=D0=B4=D0=B8=D0=BA= =D0=BE=D0=B2 =D1=80=D0=B0=D1=81=D0=BA=D1=80=D1=8B=D0=BB=D0=BE =D1=81=D0=B5= =D0=BA=D1=80=D0=B5=D1=82 =D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=D0=B9 =D0=BF= =D1=80=D0=BE=D0=B4=D0=BE=D0=BB=D0=B6=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0= =BE=D1=81=D1=82=D0=B8 =D0=B6=D0=B8=D0=B7=D0=BD=D0=B8 =D0=B6=D0=B5=D0=BD=D1= =89=D0=B8=D0=BD. =D0=9F=D0=BE =D1=81=D0=BB=D0=BE=D0=B2=D0=B0=D0=BC =D1=83= =D1=87=D0=B5=D0=BD=D1=8B=D1=85, =D0=BE=D0=BD =D0=BA=D1=80=D0=BE=D0=B5=D1=82= =D1=81=D1=8F =D0=B2 =D0=B8=D1=85 =D0=B8=D0=BC=D0=BC=D1=83=D0=BD=D0=B8=D1=82= =D0=B5=D1=82=D0=B5,... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=92 =D0=91=D0=B5=D0=BB=D0=B0=D1=80=D1=83=D1=81=D0=B8 =D0=B5=D1=81=D1=82= =D1=8C =D0=B2=D1=81=D0=B5 =D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F, =D1= =87=D1=82=D0=BE=D0=B1=D1=8B =D0=B4=D0=BE=D1=81=D1=82=D0=BE=D0=B9=D0=BD=D0= =BE =D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D1=8C =D1=81=D0=BB=D0=B5=D0=B4=D1= =83=D1=8E=D1=89=D0=B5=D0=B5 =C2=AB=D0=95=D0=B2=D1=80=D0=BE=D0=B2=D0=B8=D0= =B4=D0=B5=D0=BD=D0=B8=D0=B5=C2=BB =E2=80=94 =D0=9B=D0=B0=D0=BD=D1=81=D0=BA= =D0=B0=D1=8F - mail.ru<= /font> =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=90=D0=BB=D0=B5=D0=BD=D0=B0 =D0=9B= =D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F =D1=83=D0=B2=D0=B5=D1=80=D1=8F=D0=B5= =D1=82 =D0=B5=D0=B2=D1=80=D0=BE=D0=BF=D0=B5=D0=B9=D1=81=D0=BA=D1=83=D1=8E = =D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D1=83, =D1=87=D1=82=D0=BE =D0=B2 =D0= =91=D0=B5=D0=BB=D0=B0=D1=80=D1=83=D1=81=D0=B8 =D0=B5=D1=81=D1=82=D1=8C =D0= =B2=D1=81=D0=B5 =D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F, =D1=87=D1=82=D0= =BE=D0=B1=D1=8B =D0=B2 =D1=81=D0=BB=D1=83=D1=87=D0=B0=D0=B5 =D0=BF=D0=BE=D0= =B1=D0=B5=D0=B4=D1=8B =D0=BD=D0=B0=D1=88=D0=B5=D0=B9 =D1=81=D1=82=D1=80=D0= =B0=D0=BD=D1=8B =D0=BD=D0=B0 =C2=AB=D0=95=D0=B2=D1=80=D0=BE=D0=B2=D0=B8=D0= =B4=D0=B5=D0=BD=D0=B8=D0=B8-2013=C2=BB =D0=BE=D0=B1=D0=B5=D1=81=D0=BF=D0=B5= =D1=87=D0=B8=D1=82=D1=8C... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09
=D0=A1=D0=BF=D0= =BE=D1=80=D1=82
=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09"= =D0=A7=D0=B5=D0=BB=D1=81=D0=B8" =D0=B2=D1=8B=D0=B8=D0=B3=D1=80=D0=B0=D0=BB = =D0=9B=D0=B8=D0=B3=D1=83 =D0=95=D0=B2=D1=80=D0=BE=D0=BF=D1=8B - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=92 =D1=84=D0=B8=D0=BD=D0=B0=D0=BB= =D1=8C=D0=BD=D0=BE=D0=BC =D0=BC=D0=B0=D1=82=D1=87=D0=B5, =D0=BF=D1=80=D0=BE= =D1=88=D0=B5=D0=B4=D1=88=D0=B5=D0=BC =D0=B2 =D0=BD=D0=BE=D1=87=D1=8C =D0=BD= =D0=B0 =D1=87=D0=B5=D1=82=D0=B2=D0=B5=D1=80=D0=B3 =D0=BF=D0=BE =D0=BC=D0=BE= =D1=81=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=BE=D0=BC=D1=83 =D0=B2=D1=80=D0=B5= =D0=BC=D0=B5=D0=BD=D0=B8 =D0=B2 =D0=90=D0=BC=D1=81=D1=82=D0=B5=D1=80=D0=B4= =D0=B0=D0=BC=D0=B5, =D0=BE=D0=BD =D0=BD=D0=B0=D0=BD=D0=B5=D1=81 =D0=BF=D0= =BE=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5 =D0=BF=D0=BE=D1=80=D1=82=D1= =83=D0=B3=D0=B0=D0=BB=D1=8C=D1=81=D0=BA=D0=BE=D0=B9 "=D0=91=D0=B5=D0=BD=D1= =84=D0=B8=D0=BA=D0=B5 =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=A8=D0=B5=D1=81=D1=82=D1=8C =D1=80=D0=BE=D1=81=D1=81=D0=B8=D0=B9=D1=81= =D0=BA=D0=B8=D1=85 =D1=84=D1=83=D1=82=D0=B1=D0=BE=D0=BB=D1=8C=D0=BD=D1=8B= =D1=85 =D0=BA=D0=BB=D1=83=D0=B1=D0=BE=D0=B2 =D0=BD=D0=B5 =D0=BF=D1=80=D0=BE= =D1=88=D0=BB=D0=B8 =D0=BB=D0=B8=D1=86=D0=B5=D0=BD=D0=B7=D0=B8=D1=80=D0=BE= =D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 =D0=A0=D0=A4=D0=A1 - interfax.ru =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=A8=D0=B5=D1=81=D1=82=D1=8C =D1=84= =D1=83=D1=82=D0=B1=D0=BE=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 =D0=BA=D0=BB=D1=83= =D0=B1=D0=BE=D0=B2, =D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=8F "=D0=A0=D0= =BE=D1=81=D1=82=D0=BE=D0=B2" (=D0=A0=D0=BE=D1=81=D1=82=D0=BE=D0=B2-=D0=BD= =D0=B0-=D0=94=D0=BE=D0=BD=D1=83) =D0=B8 "=D0=92=D0=BE=D0=BB=D0=B3=D1=83" (= =D0=9D=D0=B8=D0=B6=D0=BD=D0=B8=D0=B9 =D0=9D=D0=BE=D0=B2=D0=B3=D0=BE=D1=80= =D0=BE=D0=B4), =D0=BD=D0=B5 =D0=BF=D1=80=D0=BE=D1=88=D0=BB=D0=B8 =D0=BB=D0= =B8=D1=86=D0=B5=D0=BD=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5= =D0=A0=D0=BE=D1=81=D1=81=D0=B8=D0=B9=D1=81=D0=BA=D0=BE=D0=B3=D0=BE =D1=84= =D1=83=D1=82=D0=B1=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE =D1=81=D0=BE= =D1=8E=D0=B7=D0=B0,... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09 =09 =09=09=09=09=09=09=09=09
=09= =D0=A4=D1=83=D1=82=D0=B1=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE =D0=B1= =D0=BE=D0=BB=D0=B5=D0=BB=D1=8C=D1=89=D0=B8=D0=BA=D0=B0, =D0=BD=D0=B0=D0=BC= =D0=B5=D1=80=D0=B5=D0=B2=D0=B0=D0=B2=D1=88=D0=B5=D0=B3=D0=BE=D1=81=D1=8F = =D0=BF=D1=80=D0=BE=D0=B9=D1=82=D0=B8 =D0=BE=D1=82 =D0=A1=D0=B8=D1=8D=D1=82= =D0=BB=D0=B0 =D0=B4=D0=BE =D0=A1=D0=B0=D0=BD-=D0=9F=D0=B0=D1=83=D0=BB=D1=83= , =D1=87=D0=B5=D0=BA=D0=B0=D0=BD=D1=8F =D0=BC=D1=8F=D1=87, =D1=81=D0=B1=D0= =B8=D0=BB =D0=B3=D1=80=D1=83=D0=B7=D0=BE=D0=B2=D0=B8=D0=BA - itar-tass.com =09=09=09=09=09=09=09=09=09=09=09
=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09=09=09=D0=90=D0=BC=D0=B5=D1=80=D0=B8=D0=BA=D0= =B0=D0=BD=D1=81=D0=BA=D0=BE=D0=B3=D0=BE =D1=84=D1=83=D1=82=D0=B1=D0=BE=D0= =BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE =D0=B1=D0=BE=D0=BB=D0=B5=D0=BB=D1=8C=D1= =89=D0=B8=D0=BA=D0=B0 =D0=A0=D0=B8=D1=87=D0=B0=D1=80=D0=B4=D0=B0 =D0=A1=D0= =B2=D0=B5=D0=BD=D1=81=D0=BE=D0=BD=D0=B0, =D0=BD=D0=B0=D0=BC=D0=B5=D1=80=D0= =B5=D0=B2=D0=B0=D0=B2=D1=88=D0=B5=D0=B3=D0=BE=D1=81=D1=8F =D0=BF=D1=80=D0= =BE=D0=B9=D1=82=D0=B8 =D0=BE=D1=82 =D0=A1=D0=B8=D1=8D=D1=82=D0=BB=D0=B0 /= =D0=A1=D0=A8=D0=90, =D1=88=D1=82=D0=B0=D1=82 =D0=92=D0=B0=D1=88=D0=B8=D0=BD= =D0=B3=D1=82=D0=BE=D0=BD/ =D0=B4=D0=BE =D0=B1=D1=80=D0=B0=D0=B7=D0=B8=D0=BB= =D1=8C=D1=81=D0=BA=D0=BE=D0=B3=D0=BE =D0=A1=D0=B0=D0=BD- =D0=9F=D0=B0=D1=83= =D0=BB=D1=83,... =09=09=09=09=09=09=09=09=09=09=09 =09=09=09=09=09=09=09=09=09=09

=09=09=20 =09=09=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1= =88=D0=B8=D1=81=D1=8C =D0=BD=D0=B0 Novosti.com.cy =D0=B0=D0=B1=D1=81=D0=BE= =D0=BB=D1=8E=D1=82=D0=BD=D0=BE =D0=B1=D0=B5=D1=81=D0=BF=D0=BB=D0=B0=D1=82= =D0=BD=D0=BE! =09 =09=09=09=09
=09=09=09=09=09=09=09=09
=09=09=09=09 =09=09=09=09 =09=09=09=09=09 =09=09=09=09 =09=09=09=09
=09=09=09=09=09No= vosti.com.cy =D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D1=83=D0=B5=D1=82=D1=81= =D1=8F CYMEDIA Ltd. Novosti.com.cy =D0=B8 CYMEDIA =D0=BD=D0=B5 =D0=BD=D0= =B5=D1=81=D1=83=D1=82 =D0=BE=D1=82=D0=B2=D0=B5=D1=81=D1=82=D0=B2=D0=B5=D0= =BD=D0=BD=D0=BE=D1=81=D1=82=D1=8C =D0=B7=D0=B0 =D1=81=D0=BE=D0=B4=D0=B5=D1= =80=D0=B6=D0=B0=D0=BD=D0=B8=D0=B5 =D0=BE=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D0= =BA=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D1=85 =D0=BC=D0=B0=D1=82=D0=B5=D1= =80=D0=B8=D0=B0=D0=BB=D0=BE=D0=B2 =D0=B8=D0=B7 =D0=B4=D1=80=D1=83=D0=B3=D0= =B8=D1=85 =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2, =D0= =BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5 =D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0= =BD=D1=8B =D0=BF=D0=BE=D1=81=D0=BB=D0=B5 =D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0= =B9 =D1=81=D1=82=D0=B0=D1=82=D1=8C=D0=B8. =D0=AD=D1=82=D0=BE =D1=8D=D0=BB= =D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B5 =D1=81=D0=BE=D0=BE= =D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5 =D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5= =D1=81=D1=82=D0=B2=D1=83=D0=B5=D1=82 =D0=95=D0=B2=D1=80=D0=BE=D0=BF=D0=B5= =D0=B9=D1=81=D0=BA=D0=BE=D0=B9 =D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=B8= =D0=B2=D0=B5 =D0=BE =D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B4=D0=B5=D0=BD=D1=86= =D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8 =D0=B8 =D1=8D=D0=BB= =D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D1=8B=D1=85 =D1=81=D1=80=D0=B5= =D0=B4=D1=81=D1=82=D0=B2=D0=B0=D1=85 =D1=81=D0=B2=D1=8F=D0=B7=D0=B8 (=D0= =94=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0=B0 2002/58/EC =D0=95=D0= =B2=D1=80=D0=BE=D0=BF=D0=B5=D0=B9=D1=81=D0=BA=D0=BE=D0=B3=D0=BE =D0=BF=D0= =B0=D1=80=D0=BB=D0=B0=D0=BC=D0=B5=D0=BD=D1=82=D0=B0, =D1=81 =D0=B8=D0=B7=D0= =BC. =D0=B8 =D0=B4=D0=BE=D0=BF. =D0=BE=D1=82 A5-270/2001), =D0=92=D1=8B =D0= =BC=D0=BE=D0=B6=D0=B5=D1=82=D0=B5 =D0=BE=D1=82=D0=BF=D0=B8=D1=81=D0=B0=D1= =82=D1=8C=D1=81=D1=8F, =D0=BA=D0=BB=D0=B8=D0=BA=D0=BD=D1=83=D0=B2 =D0=B7=D0=B4=D0=B5=D1=81=D1=8C. =09=09=09=09=09

--b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="2760b5ab212784c88646a03344b042dd" Content-Transfer-Encoding: base64 Content-ID: <2760b5ab212784c88646a03344b042dd> Content-Disposition: inline; filename="2760b5ab212784c88646a03344b042dd" /9j/4AAQSkZJRgABAgEASABIAAD/4QUyRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dz ADIwMTM6MDI6MTEgMTE6MzE6NDEAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAPKADAAQAAAAB AAAAHgAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAP8AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAHgA8AwEiAAIRAQMRAf/dAAQABP/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A9J+l7nak6lLa3wCaYrLv3Wk/cJWP0/qvVM+6qplePUbqnXNe fUft2lrYLJZu+n+8pBEkE9ltt6rM9XMdQKgKhvay2dXOq2i39Ht+hudt371b2t8EH9jhtFDa8iyq 3Ha8G1m2Xmz32ue2xljffZ71Ub1G2rotWfYBbaWs3D6MlzxVu0/zkqB+XvStt/N0drfAJbW+AVfO y/sgB9pJFhDXEgn02OthkB37qb9pYYrL3WfRLWODQ5x9Rw3+izY0+rZ/IrSoqsNna3wCUn6P5vMd lCm6q+pttLt9buCPLQgg+5rmqX53yQ12S//Q9Iiay3xaR94hYfTOldYxr6HufTQKKXVb2zaXSW/4 Nwp2/Q/fW7xoNR2I/wBqUnwP4KWJIBoea0gaNcZXWmjY6jHuI09QWOrB8/SdXbs/7ceq93Tr39FG AxzPWa1nuMhm5rhaePdtWhJ8D+CUnwP4IA9gNxt3UR3c3Jw+oZuw3+jU6v1QPTc9wIsrdSPptb9F 7kD9h2101UUuaacawXY9bnPZ9JuzIpddX+ka3f8ApabFsyfA/glJ8D+CcDOtBoih1a3TsU4mKKnb Q8uc9wZuLZcZ+laXWP8A67lY/O+SeT4H8EvPv+73hN14r62nSvB//9n/7Qn+UGhvdG9zaG9wIDMu MAA4QklNBCUAAAAAABAAAAAAAAAAAAAAAAAAAAAAOEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEA AjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAA AB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAA SAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1 AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAA AP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA /////////////////////////////wPoAAA4QklNBAAAAAAAAAIAADhCSU0EAgAAAAAAAgAAOEJJ TQQwAAAAAAABAQA4QklNBC0AAAAAAAYAAQAAAAI4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAA OEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADSQAAAAYAAAAAAAAAAAAAAB4AAAA8AAAACgBVAG4A dABpAHQAbABlAGQALQAxAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA8AAAAHgAA AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAG Ym91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcA AAAAAAAAAEJ0b21sb25nAAAAHgAAAABSZ2h0bG9uZwAAADwAAAAGc2xpY2VzVmxMcwAAAAFPYmpj AAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAA AAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVu dW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQA AAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAB4AAAAAUmdodGxv bmcAAAA8AAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAAB AAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0 VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0 AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xv clR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAA AAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0 T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAzhC SU0EDAAAAAAEGAAAAAEAAAA8AAAAHgAAALQAABUYAAAD/AAYAAH/2P/gABBKRklGAAECAABIAEgA AP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8V GBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4O DhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgA HgA8AwEiAAIRAQMRAf/dAAQABP/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUB AQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJx gTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePz RieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYF NQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNU oxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//a AAwDAQACEQMRAD8A9J+l7nak6lLa3wCaYrLv3Wk/cJWP0/qvVM+6qplePUbqnXNefUft2lrYLJZu +n+8pBEkE9ltt6rM9XMdQKgKhvay2dXOq2i39Ht+hudt371b2t8EH9jhtFDa8iyq3Ha8G1m2Xmz3 2ue2xljffZ71Ub1G2rotWfYBbaWs3D6MlzxVu0/zkqB+XvStt/N0drfAJbW+AVfOy/sgB9pJFhDX Egn02OthkB37qb9pYYrL3WfRLWODQ5x9Rw3+izY0+rZ/IrSoqsNna3wCUn6P5vMdlCm6q+pttLt9 buCPLQgg+5rmqX53yQ12S//Q9Iiay3xaR94hYfTOldYxr6HufTQKKXVb2zaXSW/4Nwp2/Q/fW7xo NR2I/wBqUnwP4KWJIBoea0gaNcZXWmjY6jHuI09QWOrB8/SdXbs/7ceq93Tr39FGAxzPWa1nuMhm 5rhaePdtWhJ8D+CUnwP4IA9gNxt3UR3c3Jw+oZuw3+jU6v1QPTc9wIsrdSPptb9F7kD9h2101UUu aacawXY9bnPZ9JuzIpddX+ka3f8ApabFsyfA/glJ8D+CcDOtBoih1a3TsU4mKKnbQ8uc9wZuLZcZ +laXWP8A67lY/O+SeT4H8EvPv+73hN14r62nSvB//9k4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBk AG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgA bwBwACAAQwBTADQAAAABADhCSU0EBgAAAAAABwAGAAAAAQEA/+ERK2h0dHA6Ly9ucy5hZG9iZS5j b20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRj emtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRv YmUgWE1QIENvcmUgNC4yLjItYzA2MyA1My4zNTI2MjQsIDIwMDgvMDcvMzAtMTg6MTI6MTggICAg ICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1y ZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9i ZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x LjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxl bWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hv cC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6 ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRv YmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDEzLTAyLTExVDEx OjMxOjQxKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxMy0wMi0xMVQxMTozMTo0MSswMjowMCIg eG1wOkNyZWF0ZURhdGU9IjIwMTMtMDItMTFUMTE6MzE6NDErMDI6MDAiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6QjhDMTA5M0UyRDc0RTIxMTkwQjRCMDQ1QzgxRjRBODYiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6QjdDMTA5M0UyRDc0RTIxMTkwQjRCMDQ1QzgxRjRBODYiIHhtcE1NOk9y aWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCN0MxMDkzRTJENzRFMjExOTBCNEIwNDVDODFGNEE4 NiIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3No b3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHRpZmY6T3JpZW50YXRpb249IjEiIHRp ZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEw MDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiB0aWZmOk5hdGl2ZURpZ2VzdD0iMjU2LDI1Nywy NTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUy OSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7OUFCMDgxNzE3RDY2QTJDNkU5MTVD MjM5NDdBMUVBMjkiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSI2MCIgZXhpZjpQaXhlbFlEaW1lbnNp b249IjMwIiBleGlmOkNvbG9yU3BhY2U9IjEiIGV4aWY6TmF0aXZlRGlnZXN0PSIzNjg2NCw0MDk2 MCw0MDk2MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2NywzNjg2OCwz MzQzNCwzMzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4 MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0MTQ4NCw0 MTQ4Niw0MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTczMCw0MTk4 NSw0MTk4Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0MTk5NCw0 MTk5NSw0MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcs MTgsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7QjFENUQ0OTE4ODRDMUNDNjRFNjI0MkVFNzE1 NjQ3QUIiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJj cmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkI3QzEwOTNFMkQ3NEUyMTE5MEI0QjA0 NUM4MUY0QTg2IiBzdEV2dDp3aGVuPSIyMDEzLTAyLTExVDExOjMxOjQxKzAyOjAwIiBzdEV2dDpz b2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3MiLz4gPHJkZjpsaSBzdEV2 dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkI4QzEwOTNFMkQ3NEUy MTE5MEI0QjA0NUM4MUY0QTg2IiBzdEV2dDp3aGVuPSIyMDEzLTAyLTExVDExOjMxOjQxKzAyOjAw IiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3MiIHN0RXZ0 OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0 aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUNDX1BST0ZJ TEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMg c1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAA ABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAAC VAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFz AAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0 ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAA AAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNR AAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAA AGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3 LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERl ZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERl ZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAA AAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA AAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAA AAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAA AABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkA XgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDr APAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEB qQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKi AqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD 7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3 BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08H YQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmP CaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIM KgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8J DyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUS ZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYD FiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQa KhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6U Hr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2Yj lCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijU KQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIu ty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTY NRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7 qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1 QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdK fUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8 UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVb RVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RA ZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbblu Em5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gR eG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC 9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/ jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ /JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYa poum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKz OLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBw wOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbO ts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q 3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vs hu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH /Jj9Kf26/kv+3P9t////7gAOQWRvYmUAZEAAAAAB/9sAhAACAgICAgICAgICAwICAgMEAwICAwQF BAQEBAQFBgUFBQUFBQYGBwcIBwcGCQkKCgkJDAwMDAwMDAwMDAwMDAwMAQMDAwUEBQkGBgkNCgkK DQ8ODg4ODw8MDAwMDA8PDAwMDAwMDwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAe ADwDAREAAhEBAxEB/90ABAAI/8QBogAAAAcBAQEBAQAAAAAAAAAABAUDAgYBAAcICQoLAQACAgMB AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFBUQYTYSJx gRQykaEHFbFCI8FS0eEzFmLwJHKC8SVDNFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkKGBmElEVG pLRW01UoGvLj88TU5PRldYWVpbXF1eX1ZnaGlqa2xtbm9jdHV2d3h5ent8fX5/c4SFhoeIiYqLjI 2Oj4KTlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+hEAAgIBAgMFBQQFBgQIAwNtAQACEQMEIRIx QQVRE2EiBnGBkTKhsfAUwdHhI0IVUmJy8TMkNEOCFpJTJaJjssIHc9I14kSDF1STCAkKGBkmNkUa J2R0VTfyo7PDKCnT4/OElKS0xNTk9GV1hZWltcXV5fVGVmZ2hpamtsbW5vZHV2d3h5ent8fX5/c4 SFhoeIiYqLjI2Oj4OUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6/9oADAMBAAIRAxEAPwD7aClw BPOollmAd3bc1bfv2HYZl8tg1VbvQh/3yn3Y2VoMA0nzidW84Xfl+PQIo9EQ6hb6b5h9eslzd6S0 SXqm29MBY1eXgj+oSzK1VAoTkzwcOMS4t9rHlLlv3/BqjkuVVtvv7ubP/Qh/30n3ZjWW2g70Yf8A fKfdjZWg70Yf98p92NlaDvRh/wB8p92NlaDub1+q82+q8fV+r1PHlWlaeHt0rvh8+qv/0PtcZPQ0 +SenI21pJMF8TFEXp9NMzKuVebV0fOH5e/mt+aX5havoGkWmleT9Ck8x6Fc65ZahIdRvPq628kMY R4OcAkYmYH7YGxza6rRYNPEyJkaIHQd/v7nEx5skyBsLF9XuX/KnY7XRPKlrp3nPWdE1jyraX0cu v6eln6t9LqTCa8kmjube4QerNWSigUO1aZrvz1ykTEESI2N7Vy5Echs5H5egKJBH6ebAYPzD1XSv yV0L8wdSto9Z1iS004X0RP1ZZpLq8SzaQ8FIU0bnQCldthmSdLGWpOIbCz58hbV4xGITO5Zl5582 f4OjgdUtLiSaDVZorS4llilnOm2Ut3wg9ON1JPp/FzK0WpFTtlGnw+L39PtNNmXJwfb9gUF/Mjyi mnTX1xqoLWc1nY39tawXF241G8gWdbG3WGN2uJgrbpEGZf2gMP5XJdAc7PQbDaz3D3r40au/7e5k +ja1pXmHTbbWNFvUv9Nu+Xo3CBlPJGKOjo4V0dGBVlYBlIoRlOTHLHLhkKLOMhIWEd/x8/8APL/j bB0T1f/R+1zRmbTpoFIDXFnJChPQNJEyCv0nMy6l8Wro+Wvy1/Kv83vLGueWLu41Ly/5Wh8r+X7r RxqVo0mtPdtNJAyhraWOzEa/uqkiQntm51et0+WEgBKXFIGj6a59d/ucPFhyRI5ChXf+p76vmn86 LSJrOfyp5R8wSx8kGtQavd6ZHOCKK5s5LK7aI+K+s/sxzV+DpjuJSHlQP22L+QcjjyjagfjX6GG6 1+XWt3n5MW35d2V/YN5gtbaw43s4ljsmuLW8jvHHwq0gQlSoNK0oSMyIaqI1PikGt/fuKa5YScXA OaH8y+UPzB89rp0vmJfLmiXWlDWo4E0u5vLlJE1XSp7FGZpoIirJLKCaD7PTfbDhz4cF8HEQeHmA PpkD3rPHPJzoVf2imKN+Rup6Zo2ieX9DvLOfQPJesQ675P0S4vb+zYNc2rQanZS31qfXRDKxmglB ZgWZHUrTLv5RjKRlIHikKJoHkfSaO3LYj5Nf5YgADkDY5/EX9z2D8u/Ks3k7yzHpN0lnHe3F7d6j fR2D3MsCy3cnMqJbySSaUgABpHILHfivTMHVZvFnxC6oDeunu2+DkYYcEaZl/wAfP/PL/jbKejZ1 f//S+2gIjASJTPEoAimSgDL2NG4kGnXbMvm1O9Rv+WeT70/5qxrzW3eo3/LPJ96f81Y15rbvUb/l nk+9P+asa81t3qN/yzyfen/NWNea271G/wCWeT70/wCasa81t3qN/wAs8n3p/wA1Y15rbqfF63Ie px4/VN+fCv2uX2evauHyV//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/png; name="4a5f17d3fe473387fe84ce834f9d16b7" Content-Transfer-Encoding: base64 Content-ID: <4a5f17d3fe473387fe84ce834f9d16b7> Content-Disposition: inline; filename="4a5f17d3fe473387fe84ce834f9d16b7" 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 /3cAe9/8EG0OnhEAAAAASUVORK5CYII= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="b3dd75954b38a962eb9f3b0769f84415" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="b3dd75954b38a962eb9f3b0769f84415" /9j/4AAQSkZJRgABAgEASABIAAD/4QWERXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dz ADIwMTM6MDI6MTEgMTY6MjM6NTQAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQaADAAQAAAAB AAAAEQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAROAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAEQBBAwEiAAIRAQMRAf/dAAQABf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A76/M25OLg0N3ZOS02Oe9ztrGN+k/aD7nfutSzP2rRRfbVTXa aYcwbnzY2P0nt3eyxijk4ZtvxOoYt1bMrGaWlrz7Xsd9Kt0e5q0K7n7XOtsrLz9BjXaDT99HVGjm X5NedgWXYtm3F9Am233lwe4fQZ7h9Bv84uVzsWw9UyaMTMsZRjB1lxc6yKmNDfF7nWuc53sXTDHd gfV7Notsqe4C2xpYdDuJs2+5cpZ1jAdm5V7BYaeo1lmQx20OYTtLXVa+/ZYz85XOUEqkQCfpfZgz mOlrV4fUsj7O7EyrLqsp7q2vc97CxzBvsbc3c7btr/SIwyHt6Dmejm237cikSS9sfSlzC5x9liDi 9bpwG4tOODbTTY+28vhpsNjfRcxjfdsayv8A6aGMzpVODkYdJusF1ldrC8NbHpz+ifDv5X84rRjI kXHQEGOg/f8A0v8ABYQYjY9D/wBHoktxstlF9zOoPt+yen6+xzy2LNP0Nu/bb6f57ErsTJpyG1O6 hYan0faW5A9TaWRu+jv3fyf+MRL+rdOvbmU1es1maxjKagGhtRY4OZSxjT7mOd/hEDOvto6VT0/J r9LKrc9vu0cKJD/TcP3XX/RSjx6AiiTVVG64fm/wJKPD01+vi+h7h+8fxSTJLMpuW//Q9APJ+J/K mXzWkpAsfpN/82/+qVTHC+eEk+PVZLo/Q/ZJfPCSch+iG/Tb8R+VWuo/0p/wH5F82pIH5h5FI2L9 SpL5aSUDK//Z/+0KIlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAHHAIAAAK5vgA4QklNBCUAAAAA ABAmukHUxrxOz7kGQr7aOL+qOEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EJgAAAAAA DgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAA AAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYA BgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAA AAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////// //////////////8D6AAAAAD/////////////////////////////A+gAAAAA//////////////// /////////////wPoAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAA ADhCSU0EGgAAAAADQwAAAAYAAAAAAAAAAAAAABEAAABBAAAABwBjAHkAdABvAGQAYQB5AAAAAQAA AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABBAAAAEQAAAAAAAAAAAAAAAAAAAAABAAAAAAAA AAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABS Y3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAEQAA AABSZ2h0bG9uZwAAAEEAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAA AAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNs aWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJ bWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExl ZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAABEAAAAAUmdodGxvbmcAAABBAAAAA3VybFRFWFQAAAAB AAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEA AAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxp Z25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAP RVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJH Q29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcA AAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQo AAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAzhCSU0EDAAAAAAEagAAAAEAAABBAAAA EQAAAMQAAA0EAAAETgAYAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFk b2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwM DBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAEQBBAwEiAAIRAQMRAf/dAAQABf/E AT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcI CQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMH JZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaG lqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEU obFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSF tJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A76/M25OLg0N3 ZOS02Oe9ztrGN+k/aD7nfutSzP2rRRfbVTXaaYcwbnzY2P0nt3eyxijk4ZtvxOoYt1bMrGaWlrz7 Xsd9Kt0e5q0K7n7XOtsrLz9BjXaDT99HVGjmX5NedgWXYtm3F9Am233lwe4fQZ7h9Bv84uVzsWw9 UyaMTMsZRjB1lxc6yKmNDfF7nWuc53sXTDHdgfV7Notsqe4C2xpYdDuJs2+5cpZ1jAdm5V7BYaeo 1lmQx20OYTtLXVa+/ZYz85XOUEqkQCfpfZgzmOlrV4fUsj7O7EyrLqsp7q2vc97CxzBvsbc3c7bt r/SIwyHt6Dmejm237cikSS9sfSlzC5x9liDi9bpwG4tOODbTTY+28vhpsNjfRcxjfdsayv8A6aGM zpVODkYdJusF1ldrC8NbHpz+ifDv5X84rRjIkXHQEGOg/f8A0v8ABYQYjY9D/wBHoktxstlF9zOo Pt+yen6+xzy2LNP0Nu/bb6f57ErsTJpyG1O6hYan0faW5A9TaWRu+jv3fyf+MRL+rdOvbmU1es1m axjKagGhtRY4OZSxjT7mOd/hEDOvto6VT0/Jr9LKrc9vu0cKJD/TcP3XX/RSjx6AiiTVVG64fm/w JKPD01+vi+h7h+8fxSTJLMpuW//Q9APJ+J/KmXzWkpAsfpN/82/+qVTHC+eEk+PVZLo/Q/ZJfPCS ch+iG/Tb8R+VWuo/0p/wH5F82pIH5h5FI2L9SpL5aSUDK//ZOEJJTQQhAAAAAABVAAAAAQEAAAAP AEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwAAAAEwBBAGQAbwBiAGUAIABQAGgAbwB0AG8A cwBoAG8AcAAgAEMAUwA0AAAAAQA4QklNBAYAAAAAAAcABgAAAAEBAP/hErdodHRwOi8vbnMuYWRv YmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVT ek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9 IkFkb2JlIFhNUCBDb3JlIDQuMi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjEyOjE4 ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIv MjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4 bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMu YWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94 YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2Rj L2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90 b3Nob3AvMS4wLyIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iIHht bG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9 IkFkb2JlIFBob3Rvc2hvcCBDUzQgV2luZG93cyIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxMy0wMi0x MVQxNjoyMzo1NCswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTMtMDItMTFUMTY6MjM6NTQrMDI6 MDAiIHhtcDpDcmVhdGVEYXRlPSIyMDEzLTAyLTExVDEyOjUwOjE0KzAyOjAwIiB4bXBNTTpJbnN0 YW5jZUlEPSJ4bXAuaWlkOkFCN0YwRjlDNTY3NEUyMTFBNzIxQjA1QjYxOTU2M0NBIiB4bXBNTTpE b2N1bWVudElEPSJ4bXAuZGlkOjRFMUUxMDlBMzc3NEUyMTE4RjFGOUJCMTMzNzczNUI1IiB4bXBN TTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NEUxRTEwOUEzNzc0RTIxMThGMUY5QkIxMzM3 NzM1QjUiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhv dG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB0aWZmOk9yaWVudGF0aW9uPSIx IiB0aWZmOlhSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjcyMDAw MC8xMDAwMCIgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIgdGlmZjpOYXRpdmVEaWdlc3Q9IjI1Niwy NTcsMjU4LDI1OSwyNjIsMjc0LDI3NywyODQsNTMwLDUzMSwyODIsMjgzLDI5NiwzMDEsMzE4LDMx OSw1MjksNTMyLDMwNiwyNzAsMjcxLDI3MiwzMDUsMzE1LDMzNDMyO0RCREVBMTUwM0I4RDFCRDAw ODlEQjU4ODY2MjAxNEM0IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iNjUiIGV4aWY6UGl4ZWxZRGlt ZW5zaW9uPSIxNyIgZXhpZjpDb2xvclNwYWNlPSIxIiBleGlmOk5hdGl2ZURpZ2VzdD0iMzY4NjQs NDA5NjAsNDA5NjEsMzcxMjEsMzcxMjIsNDA5NjIsNDA5NjMsMzc1MTAsNDA5NjQsMzY4NjcsMzY4 NjgsMzM0MzQsMzM0MzcsMzQ4NTAsMzQ4NTIsMzQ4NTUsMzQ4NTYsMzczNzcsMzczNzgsMzczNzks MzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczOTYsNDE0ODMsNDE0 ODQsNDE0ODYsNDE0ODcsNDE0ODgsNDE0OTIsNDE0OTMsNDE0OTUsNDE3MjgsNDE3MjksNDE3MzAs NDE5ODUsNDE5ODYsNDE5ODcsNDE5ODgsNDE5ODksNDE5OTAsNDE5OTEsNDE5OTIsNDE5OTMsNDE5 OTQsNDE5OTUsNDE5OTYsNDIwMTYsMCwyLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2 LDE3LDE4LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwOzY4RTA5Rjg4N0YyQjQ4NTJBMzJGNjU1 MDk1MUQyRDY2Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlv bj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0RTFFMTA5QTM3NzRFMjExOEYx RjlCQjEzMzc3MzVCNSIgc3RFdnQ6d2hlbj0iMjAxMy0wMi0xMVQxMjo1MDoxNCswMjowMCIgc3RF dnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIi8+IDxyZGY6bGkg c3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0RjFFMTA5QTM3 NzRFMjExOEYxRjlCQjEzMzc3MzVCNSIgc3RFdnQ6d2hlbj0iMjAxMy0wMi0xMVQxMjo1MDoxNCsw MjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIiBz dEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5z dGFuY2VJRD0ieG1wLmlpZDpBQTdGMEY5QzU2NzRFMjExQTcyMUIwNUI2MTk1NjNDQSIgc3RFdnQ6 d2hlbj0iMjAxMy0wMi0xMVQxNjoyMzo1NCswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRv YmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RF dnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQjdGMEY5QzU2NzRF MjExQTcyMUIwNUI2MTk1NjNDQSIgc3RFdnQ6d2hlbj0iMjAxMy0wMi0xMVQxNjoyMzo1NCswMjow MCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIiBzdEV2 dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlw dGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IMWElDQ19QUk9G SUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVD IHNSR0IAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAA AAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAA AlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVh cwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgM dGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MA AAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADz UQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAA AABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3 dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBE ZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBE ZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MA AAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAA AAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVog AAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAA AAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZ AF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA 6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGh AakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgC ogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPg A+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcF dwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdP B2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJ jwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwS DCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4P CQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJF EmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAW AxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoE GioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoe lB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNm I5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo 1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6C Lrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ40 2DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtr O6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJC tUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3 Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFS fFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1 W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tk QGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25 bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4 EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKS gvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN /45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQ mfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pamm GqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LC szizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XA cMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42 zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3Ird EN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv7 7IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8 B/yY/Sn9uv5L/tz/bf///+4ADkFkb2JlAGRAAAAAAf/bAIQAAgICAgICAgICAgMCAgIDBAMCAgME BQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwMDAwMDAwMDAEDAwMFBAUJBgYJDQoJ Cg0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgA EQBBAwERAAIRAQMRAf/dAAQACf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgID AQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2Ei cYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRF RqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4 yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCES MUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZF GidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3 OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A+umv eb2tvM3kP8vtAsluvNvnOzn1O81K+ubn6tY2FuCZJ2jSQNI7NsiVAr1NMtlMiRA6eQYQiDG2vOB/ NXy/oXmnVNJ8vaRrc/l30bnTYVub1X1Oz4crnjGJqxTREGi1Kt2OR8Q/ik8A/FpHrnmbTvPvkPW9 b8p6sLPyW/lmWbXdeVr2S7hvLhFK28CLMlGhSplBPJSVA3LUytDkkM8CBZsVyaNTCPhSvlXeXwJ5 58q6i/5n+efL3k78x9YsPLXk6K61PzJNcXOpLFotjbJFsrPcO9y8jvxQAirHPTNBqccdFiyZsETK ZEY1VzO/l6QOrx+owSOecITIjGySb9PJi+n+TvzI8yjybc+TPP8Aq/mDRvO+oXWk2l/c317ZvY3d jH69zHfRmd+Cxw/vQysQV98y563S6fxBmwxjPGBKgIniEthwmt99mmOHPkETCZkJGtyb233ZMmv3 1t+RP5lro35oa55nFr5v0CBZ5pLy0aHks4eSB5J3YxTlQaVHSrLXMMaeM+0sIlgjC4TNbG9trFcw 3jKRpclZOL1jne3PqxjVPLXmyw0PzZrVj+buo66fIX6NbzUbC8vprP09SZU5WN4s5S4aBmCyJ8Jr 0zLwarBLLCEtNGPicXDYjfp7xVxvo0ZMGaMJyGUngqzZ6/zV2s+VfMWi+YLPR7j849VfRtS8q/4t tPN0LaibV7JkMiBY/rIep48K12k+E+ORw6nFkwmcdPHijPgMTV38vj7lyafJjyCPimjHivfcP1/+ sJ/y2z/8C/8AXPKb8vtD2t+f3v8A/9D61+ZfJzarrf5f/mR5T8y6Vp3nPyday2clhqMym0v7G4B9 W3laMl0YH7LCtD1GWzhIyNAtUJjhG4etabq94Le+utW1nRnvZlB0/S7e4X0IeKfZaZvicsx3PEAD oMHhT7j8mfHHvfPEPl+5/Lr/AJx9/Mvy9rGsaLfXMcGtatayadOODrdu90YyslDVWYrXvmZ2dhkd TjBB3kPvcXWTicM9+hfn9qP5w+RLjzp588wWEWsSaD+bujT6d5z0+4W2juNPknWJ45bJlcib0pog xD8eSmmeo4ux9THBjgeETwyEoHoee0vgXjcmuh4s5C6yRo309yG8rfnVpH5dweRdE8uW8uuaF5d1 bUdY803N7wtZdTfVLX6hLDBGrP6SRW5PEsal99hktV2Lk1hyZMpEZSAEQNxHhPEPfZ+xGHtEYBGM LMQSTfXi2P2JNH5u/KrRvJHnPyVok3mDVIPMOraVq+nXF9FaQKi6YZONlOElZiHVyrSr8wMvOj1u XPjzT4AYxlE0T/FXq+DD8zgjinjjxESIO9dOjM9d/Nn8vNftvzK0PS28xWth+YunadZeWNDSGzSz 0SezuI5YbCC3jkCvHI44mUAHoSCScwsPZGpwSwzmYXiJMpWfWCPqJ5gju5OTPWYZ+JEcVZAABX01 09zFvPGvat5e/Kzy7+W3mrRv0L5z0u+1C2drpgl3B5f9WO4W0kSuyPeqzJXqi7fCRXL0WHHm1s9R ilxYiAduRybi/hH7XEz5JxwRxyHrBI/zeb9iK/5SfhnlG3c9vcX/0fr9L/ezf8Z3/wCJtmxxuCOQ 9zsmgc0Pef8AHN1T/mEk/VkZfVD+sEZPol7i83T+6HyzbT5n3utHIOH2V+nAEtn9n5j9WBW4f967 L/jPF/xNclL6D7ikc2d/mJ/ykup/8Ybf/iAzC0X9yPf+tztX9R9we6ZqXPf/2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="799ff41a9a5710d75fd5316bf88e444f" Content-Transfer-Encoding: base64 Content-ID: <799ff41a9a5710d75fd5316bf88e444f> Content-Disposition: inline; filename="799ff41a9a5710d75fd5316bf88e444f" /9j/4AAQSkZJRgABAgEASABIAAD/4QaqRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dz ADIwMTM6MDI6MTEgMTY6Mjc6MDAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAAB AAAAEQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAV0AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAEQBQAwEiAAIRAQMRAf/dAAQABf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A0Mn9qOdmdQyutZOFifbL6aWVMsuAFbyPf6RHot/NYg4pzbsf Gut+smRSM66yjDGx7t+x4qa521/6PfvY5FxckdO6pnWvs6nU52Zc91GPSH0WMD3bd3qf6RqBkfWL qtWIyvpOHdivORk3Pa7H3BrbX+pR6LnMdtcz37tirabknyuX/fPRRjM1GEYa8NTlHDCEY8EvT68M /wBLh9f6z/AZ00daYW19S6/diXX5FmLiNG+wPfU/0H2PcHN9Kr1fYnxsfrLm0V5nX8jGzMm+3Gqp DX2D1KX/AGd261jva31FWwcqi3Gwv2viZ7snpt1l9Tqqi4Xeo/7S5txftcx3rD6St4v1mz6hSx2J lNqvty357a6juaMh/qUvxbdu71Mfc5IcPUn7Zf8AOTkjl9QjHGSCeL0YIw9PucHtHgn6Zx9vi/ro sZ2Y/EyL8n6yZFD8Jwry2BljwxznvpZteHt9Xc6v81J56ljYGPlZ/wBYMqh2VULqmsrssbtd/NtN 7XbPUd+cz8xZGO3Io6Z1TC+zZNj8x9Bpeanaip77Hut/dc5rlsdI6gzpmA2t46nkzUW2dPspBxi5 zSC1rn7nsra87vagDdXpp3lv/jMmXHw8Rjwz/WDhiMeAcWP24y9MvalwfrJy/nHLrf8AW/N6XXn4 HUsq2x119dlHrNadtTans9CtxbZc/wDSWb2sQKrPr7ayqwZ17WXV+u1z8ljNtUN/TX73/oKn72bH W/TRumWU41OC7Lxc8ZPSsu3Lprqxy5lpeKNlbrnbfR9+P7/Ynx+oPHU77r+n5RxsvBx8R7ji+qWW UMx/0v2e79HdX62P+c7+WulwE+1H9XjNQErnAcX93+v6PW8pzQH3jLRIHuTHpPp+ZCH/AF9JtYOo W+rTM1famb3jYMjdj1792Qx1LvUY+panR8j6y0fWzGouz8rK6czKbjvssdDHvdScj0tk+72qGJ1S qi9+Q/Gzn3tsc43nBZvvr9NlVGPu/wC8+vG2PYxmN/gkXp+df1T6y9HecLKx/smS/a59bm1mp9f0 7fzW5Db2u9/+Ep9P/RpTkSJg48Yj7cvUIxj6uHp/3LGK01O7/9D1VJfKqSSn6qSXyqkkp+qkl8qp JKfqpJfKqSSn6qSXyqkkp//Z/+0LUlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAHHAIAAAK5vgA4 QklNBCUAAAAAABAmukHUxrxOz7kGQr7aOL+qOEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhC SU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44 QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAv ZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAA AQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP// //////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA//// /////////////////////////wPoAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQe AAAAAAAEAAAAADhCSU0EGgAAAAADTQAAAAYAAAAAAAAAAAAAABEAAABQAAAADABzAHAAbwByAHQA cwBfAGIAcgBlAGEAawAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAUAAAABEAAAAA AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJv dW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAA AAAAAABCdG9tbG9uZwAAABEAAAAAUmdodGxvbmcAAABQAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAA AAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAA AAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVt AAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAARAAAAAFJnaHRsb25n AAAAUAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAA AAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRF WFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAA AAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JU eXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAA AAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91 dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAI/8AAAAAAAADhCSU0EFAAAAAAABAAAAAM4QklN BAwAAAAABZAAAAABAAAAUAAAABEAAADwAAAP8AAABXQAGAAB/9j/4AAQSkZJRgABAgAASABIAAD/ 7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgT ExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4U FA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIABEA UAMBIgACEQEDEQH/3QAEAAX/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEB AQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEy BhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80Yn lKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUB AAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMX ZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAM AwEAAhEDEQA/ANDJ/ajnZnUMrrWThYn2y+mllTLLgBW8j3+kR6LfzWIOKc27HxrrfrJkUjOusowx se7fseKmudtf+j372ORcXJHTuqZ1r7Op1OdmXPdRj0h9FjA923d6n+kagZH1i6rViMr6Th3YrzkZ Nz2ux9wa21/qUei5zHbXM9+7Yq2m5J8rl/3z0UYzNRhGGvDU5RwwhGPBL0+vDP8AS4fX+s/wGdNH WmFtfUuv3Yl1+RZi4jRvsD31P9B9j3BzfSq9X2J8bH6y5tFeZ1/IxszJvtxqqQ19g9Sl/wBndutY 72t9RVsHKotxsL9r4me7J6bdZfU6qouF3qP+0ubcX7XMd6w+kreL9Zs+oUsdiZTar7ct+e2uo7mj If6lL8W3bu9TH3OSHD1J+2X/ADk5I5fUIxxkgni9GCMPT7nB7R4J+mcfb4v66LGdmPxMi/J+smRQ /CcK8tgZY8Mc576WbXh7fV3Or/NSeepY2Bj5Wf8AWDKodlVC6prK7LG7XfzbTe12z1HfnM/MWRjt yKOmdUwvs2TY/MfQaXmp2oqe+x7rf3XOa5bHSOoM6ZgNreOp5M1FtnT7KQcYuc0gta5+57K2vO72 oA3V6ad5b/4zJlx8PEY8M/1g4YjHgHFj9uMvTL2pcH6ycv5xy63/AFvzel15+B1LKtsddfXZR6zW nbU2p7PQrcW2XP8A0lm9rECqz6+2sqsGde1l1frtc/JYzbVDf01+9/6Cp+9mx1v00bpllONTguy8 XPGT0rLty6a6scuZaXijZW65230ffj+/2J8fqDx1O+6/p+UcbLwcfEe44vqlllDMf9L9nu/R3V+t j/nO/lrpcBPtR/V4zUBK5wHF/d/r+j1vKc0B94y0SB7kx6T6fmQh/wBfSbWDqFvq0zNX2pm942DI 3Y9e/dkMdS71GPqWp0fI+stH1sxqLs/KyunMym477LHQx73UnI9LZPu9qhidUqovfkPxs597bHON 5wWb76/TZVRj7v8AvPrxtj2MZjf4JF6fnX9U+svR3nCysf7Jkv2ufW5tZqfX9O381uQ29rvf/hKf T/0aU5EiYOPGI+3L1CMY+rh6f9yxitNTu//Q9VSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qk l8qpJKf/2ThCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8A cAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMANAAAAAEAOEJJTQQGAAAA AAAHAAYAAAABAQD/4RKraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVn aW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5z Ong9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA0LjIuMi1jMDYzIDUz LjM1MjYyNCwgMjAwOC8wNy8zMC0xODoxMjoxOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRm PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNj cmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x LjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6 c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIg eG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3No b3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6 Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29t L2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3Mi IHhtcDpNZXRhZGF0YURhdGU9IjIwMTMtMDItMTFUMTY6MjcrMDI6MDAiIHhtcDpNb2RpZnlEYXRl PSIyMDEzLTAyLTExVDE2OjI3KzAyOjAwIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxMy0wMi0xMVQxMjo1 MDo0NCswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBRTdGMEY5QzU2NzRFMjExQTcy MUIwNUI2MTk1NjNDQSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1MDFFMTA5QTM3NzRFMjEx OEYxRjlCQjEzMzc3MzVCNSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMUUx MDlBMzc3NEUyMTE4RjFGOUJCMTMzNzczNUI1IiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rv c2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIu MSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0 aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRp ZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEs MjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwz MzQzMjtBMEMzNThFNjAzNUFDNjA5MkE5OUUyRTA2MzU4QkFBOSIgZXhpZjpQaXhlbFhEaW1lbnNp b249IjgwIiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTciIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhp ZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYz LDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0 ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1 LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQx NDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkw LDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtE RUVGNjYzNTkwOEJGRTk4MDc4NENFOTZFOTVBRTg1NyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNl cT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p aWQ6NTAxRTEwOUEzNzc0RTIxMThGMUY5QkIxMzM3NzM1QjUiIHN0RXZ0OndoZW49IjIwMTMtMDIt MTFUMTI6NTA6NDQrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBD UzQgV2luZG93cyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNl SUQ9InhtcC5paWQ6NTExRTEwOUEzNzc0RTIxMThGMUY5QkIxMzM3NzM1QjUiIHN0RXZ0OndoZW49 IjIwMTMtMDItMTFUMTI6NTA6NDQrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBo b3Rvc2hvcCBDUzQgV2luZG93cyIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFj dGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QUQ3RjBGOUM1Njc0RTIxMUE3 MjFCMDVCNjE5NTYzQ0EiIHN0RXZ0OndoZW49IjIwMTMtMDItMTFUMTY6MjcrMDI6MDAiIHN0RXZ0 OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzQgV2luZG93cyIgc3RFdnQ6Y2hhbmdl ZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9Inht cC5paWQ6QUU3RjBGOUM1Njc0RTIxMUE3MjFCMDVCNjE5NTYzQ0EiIHN0RXZ0OndoZW49IjIwMTMt MDItMTFUMTY6MjcrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBD UzQgV2luZG93cyIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9y eT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0i dyI/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEA AGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD21gABAAAAANMtSFAgIAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MA AAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJY WVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAA JGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8 AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0Ig SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+i AAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAA AAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAA LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA AAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVD NjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYx OTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3M AAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAA AAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAy ADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwA wQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFn AW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksC VAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE /gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII 5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtR C2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMO Lg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFP EW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U 8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjV GPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4d Rx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7 IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgn SSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizX LQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQz DTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/ Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRA pkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgF SEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9 WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3 a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1 KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+E f+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSK yoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0 lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiai lqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8 m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4 yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY 6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep 6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3 ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkQAAAAAH/2wCEAAICAgIC AgICAgIDAgICAwQDAgIDBAUEBAQEBAUGBQUFBQUFBgYHBwgHBwYJCQoKCQkMDAwMDAwMDAwMDAwM DAwBAwMDBQQFCQYGCQ0KCQoNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDP/AABEIABEAUAMBEQACEQEDEQH/3QAEAAr/xAGiAAAABwEBAQEBAAAAAAAAAAAE BQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJz AQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYX VGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eH l6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUF BAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz 0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2 xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/ 2gAMAwEAAhEDEQA/AOxeYx+Z09x+ZP5jea/+cn/OP5c+Sv8AlYvmby/5b0/SNP1LW0gi0y+kQ+v9 TdFtUFQkYbqFzmsninjnLNKMeIgAC6A+Gz9D6D+S4w0ujwdmYtRnOnxZJmc44+Izjfp4vq/pUxjy u3nXW/L/AJL13Vf+c1fOGgx/mb5k1Xy7+XMTafqFyNQbT71LKKaYx3FYPV9WJyGHw8up4nKsZnKM ZHUyqciI7c6NOw7QhoNNqM2CHYuKZ0+KGTL64jh44cRAserho8ufxVtJ0T86LCW10z8z/wDnLrzD 5B13zT5s1byb+XlhCb7UotRvdGvhp1xczypJGLa3a5IjVmBJryIAxhj1EdsuolEmRjHrZ5c0arP2 Lkicmg7IhnhiwwzZiSIcEckeMRiKPFIQ3IRHlvQfzjurbypp3nf/AJy483eS/PXnTzPrXlLQfLEV rqGpwtqWi6gNMlEt3BMqxo0zL8TKBxNegOShj1FATzyBJMQKvcGufRq12r7FjLLPSdkYsuHFix5Z TMowIhkjx7RI9R2PJLvLU/nC+8peb/MPmn/nNrzb5avvy2vYdN/MXS4NP1G+TTrq6vZ7G3SKZLhP rCyPATyRdgd8jDiMZSlqZDh+rawN6+9yddh0UNVhw4Ow8eQakcWImcYmcRATNijwkA9Vl4/5jeVf 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 --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="7cb3cabb5cb0e0b45cb2f23c5dca2bd0" Content-Transfer-Encoding: base64 Content-ID: <7cb3cabb5cb0e0b45cb2f23c5dca2bd0> Content-Disposition: inline; filename="7cb3cabb5cb0e0b45cb2f23c5dca2bd0" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7GwUN4huiPuxRBR+OOfzBrjfik5Etpj+6D/5EWt/SRrEpurmBrMebLyz7vm6ngY/2gOvam6t4Xl8 QzQnVLkRx28BMr2653HdkBQfYVnWqRpQcpvQcU2z5kxzRivouD4PeFImG99QkIQMQCMMPTheT7da 07n4W+FNUlijFtJDsG/9zCkQIIHBIUH/ACfeuL+1KHn9xXs5HzBRXvXjb4Q6LpmgXt9pn2nz4VEw jaQbdq434GOu0E145eWVlKqfYJclflYueHbqMHAx6YPoa6qOJp1leAnFrcyKXmtLSrGC/vbazcuk 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 --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="df74ccd26f4abef2609ed7079634afe3" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="df74ccd26f4abef2609ed7079634afe3" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A y4r2+mKmPSWVf9uQf0rodN0/X9dYWMNjZW4ZSwaaVgCB16A1vatpWnh4EuIi2FLAB9orV8KjytZt 4YrcRQLFJjkn0qp11zct9SrXV1EyLD4UXBuDJqVzp7RlcGOKBm5/3iRXR2fw/wBOsFJilkBA/wCW SqufzzXVSXVvD/rZ4k/3nAqE6rpw639r/wB/l/xpczJepwkmnW9hLq+onSw8+lxGR3kv3JP7veAA qge1bQ1PS7fXbzTrmzh229it35jLu3YzvHOegKH/AIFTL+NbuDxLDFcQMdSi8uAqxf8A5ZbMnaD3 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 /9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="35c5b8cac33f33e782b81db0f0591332" Content-Transfer-Encoding: base64 Content-ID: <35c5b8cac33f33e782b81db0f0591332> Content-Disposition: inline; filename="35c5b8cac33f33e782b81db0f0591332" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAMQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A XFGKGYKVB6scfpT8V28yPO5RuKXbTwpJwBknoBXR6N4UmvJQ14rxRYztHDH/AAocrDjTcnZHNLGz sFUEk9ABW5Y+EdUvAHaL7PHjO6Xg4+nWvRdO0jT9LAS3hRZMZ9WI9SatzSpFGzuQFUZx2FYut0Rv HDr7RxK+DbW2iUzSPLIem75R9cDnH41xt0iLdSiMYTedoHYelem3Mjy6dcXUmd848qNf7qE4P6ZP 4V5veri9nH/TQ/zqoN31CtBKOiKeKMVJimsGwdi7m7CtLo5lG+gzFN2OV3RxvIFbDBELEZzjpU77 EQA2t6zgEsVjG3g8Y561JJrE+gwXMdpYSXG4tIsjdAcHH17VlKsre6dEMO7+8MjspJQTwpBwQwOf 5UV2Q1WxiRFuLqJZSgLDPQ4oqPa1Hqov7ivY01o5fieY6TqiaxJHCkiLMrZAdtufx6V0cenX5uhF LaPHGM7ptyso/Ikn8BWXo02n2sM9h9slSbzGVJIQM9OGDLkH8c16FoUDiBFkMkhwMySPyf8A69YY edWpJ30SOmVKCWpmwQLpv+kWun3Nw0aljNKuwD3weR+WauxeJL1o8gRxDsVGSfzrpnsoZ7RoGLKj /eOeSPSqNx4dsXtliiLRupz5nUn61z4yGJm7Upafcb0nSirOJgwaxc2141ykm+Rl2sX5yKfFrd/e X8FlJJvSaQbyV+6M84x7VNL4bkjSTZdK7AEquzBY+nXirGl6NBp9zFcXDtLcFhtXGAnr9a4cNQxU Jq90l5nROdFRb3Nq/VR5aj7oPT6Dj9cV5feMPtchYgEseten3ZDXIG4nYDgDuTjn8s14N4w1V4dY aJMK0DKwOeckV7qlY8ypDmVjoyQASe1YGpapbahGllZuZZpZFXhSNvPXJ4zS/wBry3enMtsUW5Zd u9m+VT6mq1npcFlGJp5YnuQ4YGPIA/X3/QVvGjVqr3Fp3Zz81Km7zevY3hqeqwSxRefcRvaQpEER yoBwMksMgnBP51ZuvEmoyw+Q1wzkjnDDJ+p61mwWphkgu7i3uBYzElR5p3SAdcdcVTutTj05J4Yr aFmmUgB/mMY9c+tdFDCUqS50udrrpa97NLzXmY1cTUqvlXur8fmVbq+iWb99I24jPA4orlbiS8up me0iMyD5Wb/a9PyxRXQ8S76ISoRtqz1X4d+ErO48LW+vRI1zdzO4y8mFh2kjgevHX+VdhFa3cEmH mJP92MHA/H/GuR+CP9p6dba3pd6F8lTFNCokVhuOQxGCeuF/KvRxPDcOU58xTyg5P5CvJpv3T0yW 3V/s/wA8pLEdFPSs+71G8sEKsvnknCN3JPc47D6U/UNS+xR5cxQIB1kkC4/CuLuPG2lxzySXWsRb ACoSGHzWPqBzj8SRUS7sdjpxqE1wh8tJN46kjGT6ZrZ0+D5RPcSbpMAhSc7fxry66+KdpBZsml6S 9yVBKvfXqr/5CQ/1rgNV+JXiXVrkJLffZ4v+eVsNij+ZP4k1N0Te571rmvWWkXEwudRhtmIyC7gP +Ck5Irw7xA0N/wCM7j/WTROsbqEJUYMakHJ7c1zn2+4uPNWWZ5Hzku7E49ev+eK6TVlsvs8cv2mN Z3hhDJv+Yjy1wcflTjJTmlLYJX5W0PItbSBUlAwB3PU/1qGPVYEYJFC0h7DoKzobAGQCac47Fj/K r4iRFWCAAMxGT3Ir2ozl9lWPMcYrd3Ni81LyUQQMjqyDB5yrHkj8P51zeoTTuPLhRnuZjtRRySTW 9NPBJDb21tYg3UeUMoJO/PQbema5lQ9zqbTiba1s2AvQ7umf8+lYzqSVPlb121/PTuVSgnLmtoal i8NjaJbFwGT73GcnuaKzSjzOz7iecdaKpVZJWSG6UW7tnVfBX/kZdS/68j/MV7H4f/487r/c/qaK K8uOx6J5L8Tf9Yn1/wAK82l+5H/v/wBKKKxq/EEjet/+RcT/AK7n+Vc0n/ITh+v+NFFTDcUtjSPS 6+h/rRqP/IXs/wDrytf/AEWlFFaLdkrYv63/AKuL6n+lWNI+/H9P6UUV7EP4n3HFL+Gbmg/8he3/ AOuorkdP/wCX3/rsP5miisJ/72/8K/OQ6f8AC+f+Qlr92T/fP8hRRRWi2Ke5/9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="7c4db61c2962baccd5c1333ec101c4e0" Content-Transfer-Encoding: base64 Content-ID: <7c4db61c2962baccd5c1333ec101c4e0> Content-Disposition: inline; filename="7c4db61c2962baccd5c1333ec101c4e0" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 27AE6fDj5RtGQe59KbrJB0mQlSDhenQfMKsW22CyiXb82zgZ+lVdYl36VOQMjAJP4jP4VhD4kay2 Zy25x0zip7KCd7pFQAFmAU9BmlwOnFSxXAheNhxtYH8q9e+hwpK+prpLPbHy50YEDg9//r1DeqJL WbDLyDwfeujaS3uEO9UdMdOqn0I9K828WefFpMk0ErpNbShgynBxnB/nXFyxqJtKzR3VacqLXVM6 SaYTWdvOD85jVwffAP8APNdJaTieFJAeHUH6V5n4Z12fVNONvOq+ZbDCkDG4EkjI/Ou38P3BkszG T80bEfgeRSouzszGep0JlBXPpxXk/wAVtMMVxaaxGnyyfuJT6EcqfyyPwr1OPkn0NZXinSE1zw5e 2BHzvGWi9nHK/qK3krxJjozwEmKJFeU7nI4Uf1qrPeGR8u+cDAGegqszPG5WTPynBB6gjtSbRP8A MMKBXLY0JPtK9iaKEChcKBj6UUAfSCnEUeBkKvOTWdr0gXTLgxn5fKx0wTitWLBRT0A4bnj8P0qh 4jXbol2HdeYjtyRz3rBbo1exzthf2CxyRX6P8xykqHleDwfbmrk2iSSgzabcR3sGeNhwwySAMfh+ tc9HHn5j0rUs9P1KO1GoWAcqH25ibLA9sgc9q9O/U4rDoZ7mykKqWjbupH9DUOpA31ndxsBumRuA OMkf41aGvyzPjUYfNCoU+ZcEeh+uasPBYTgy2VzjknyZAcgZ45+nWq07DcpNWvoed+DbowaysTY/ fIUwfXrXpuly+TqDpwA47e3+TXlNzb3GieJ5PNiaPyrksuRwV3Hoa9LifFxDMmSq4YfSuJu0jbdH ZwuOp9O1Pc/yqjbuCODmrWdy10pkHgfxJ0M6V4smliXEN4PPXHQEn5h+Y/WuVRWG0spAbnnvXuHx K0X+0vDn2pFzNZt5mf8AYPDD+R/CvNLK1ivNN2S4DQnaxx/Ce/4HBrGorM0gr6FK0sd8AYqeTRWv bQmKHy2yGQlSKKzuM9paUqd7nAUgAIckk+lUNXjY6PfPPsaQ27hQP4Rjt/U1o20I8xLi4CmZRhPR c+h/rVfXFRtGuAFRj5T/ADZJx8vSuZs2seerKzr8o4rV26xoUgJWaD5lfI5RiOmexriLPxXsGy4g DY4zGcH8jXTab45YzK7sryFuIrpdwJIA/UAD8BXp8yZx2Nr+2o79Uj1G1V8H/Wx8N/F+f3s/UVAx 0qfUXtbXUQJcbhFKu0rweM9+gxj1oiutOuiq3aNAoD+ZMOWJx8vt7cj39a5PWfC0cqR31lq0d0rs I2+YFg5x3HbJ/wA5qZS5WIk8aDUtM1T7Hc5KTwq6h8Ng5wSD+Fdl4aeG88OQTtJtnVNhyMjI4x/K uA1+5mkt9PguEuTc2qEOXjIQL0OD9RXU+Ap0m0+7tmOdjBx+PHT6iuepa+hrA7mzcSxqxPzkcn1N XQWVum9SM8dRWXZBYSY+m3mtWFl645Hp0ram7xuKWjGSJHd28kL/ADRyKUcex4rxLyU0bXriymJG xzGyvxuXsQe+RzXuUsCO29cox/iXg15V8TNGu4r231SACZJV8qVSvUjoceuOOMdKVRNoqm0mU2sQ 7HMqqy/K2e/ofyxRXIrqxhURmW5jIH3NgYD6E0VgdPNE+h1YGIoWwcfe7E/SqmrM7WE6jBPlMGI9 ccfj0/OiisSD52ZWEjDg4OMGtbS5tMFndJqCSLOVzDICxxyOAB369f0oorqa0OfqbH2N7uaeGxvp GtUYCIynzFcEgEbhz3Hao5TeR2aBLVsSj91JA+QefbkdOlFFZ87vYJU47lJtcv4JD54EyyDY4mGS QT6/n+dbnw8vPJ8QG2Y/LPEy4+nzf0ooqrK1wXY9JKPHdJN5m5WyCvTBq+pbkg9qKKui9BzWpbR9 0YHVutZHiXSjrWgXNojMswG6NhwQ68j/AA/Giitt0StNTxJ01BWxuikx/EflJ+o9aKKK5WkdN2f/ 2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="d6c1b010b5980e0780ed3fabd42282cd" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="d6c1b010b5980e0780ed3fabd42282cd" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8R81fRv++TQZVKng/kab5q+tDSKVIB5NQWdD4XH+myf7MX9RXV5rkfDzbLids9UAroxNnvXj4r+I zupfCia9zJYOoGdrB+PbIP6Gn2V0v2bzRFvKKQQDgr6Go0Yk+9M/s12kL2tx5DHqDnafy6UUasY6 MqUWy+921xYrDGZlmZ90jY4PH6VjO32nVYUQ5WMgsw9BzVkaZfjcrXkMat94xs7Ej6H/AOtUsFkl nGVjBLH7zt1NbVK8LExgyTd0zVTUPn0+4X1jb+VSyMVqrNJujdfVSK44vW5ozi2kAcMc/MD0Ge9H nL6N/wB8mmsQrR5PQYNHnJ617kdjz5biidf7r/8AfNFN85P736UVRJF5if3l/OgyKQAGBOexo3D1 H50BWl4QFue1IDa0N9qyH6D+dbqTqMAkVz2msYI5QykEtxmrD3OO9ebWp802dUJWR1lltfB61twW ium4EHFcBbX838BNaEeoXsKhvmVW6EggGuKeHlc6o1Y2O4FoHUnIzjvUUliAh5GfTNceut3n3Qc7 umDU41q7tZ3SVfnXIIzkfmKzeHmi1Uiy9qEaw5HH0rFkkBJx61BeavJcOSxxVdJwx5NdEKUorU56 k1fQ5+YhJznAw5/Q0pljP8a/nU13CxuJGCnaCSPzzUOV9RXswd4nFJaiebH6r+dFL8vtRVkg6wTD fEu1cAEehwM/rmrNgAkG3/aJoj0q7UypHBIVQn+HGR9KdHZ3KDlSoBOcg5FTVtKPKgimndlzyWB3 Eqv1omkQLhkUn1xipUjVLdfM3g45wuT/AJ/GsvU7hWwiwyKFP3m7n6YrkjSk3qbe0SWhq6fcILpQ dpHPGARXWQzxXWnRLK0bwquVBjA4Hp3rzewci5HUcH2rUa4uFZI0uZVUp03nFdCoxRk6jPQbe1tb nEgtrdvLC4UKowMZGcdeuao+JZbcWtzdRpEZ5JBvZUHByAe3WuPlv7pboPFM0QbAIhcgYAx61Ve/ u2iuYDNJJHIwyHJPQ5z+gpuCasxczvoWHmU/fCke9TnY6ZACfhXPyA78kH6YNb1qBcgfJIhP+zx/ 9b9a550GvhNFUT3GvE2wseg71lXCr9tJI6gVtSwORiLJK9flYD+VZM1lN5gaT5Pl64PXsPrV4dOM ryJqaqyHBYiM4FFPt9Mvp4t6QtjOOeKK7OePcw9nLsWRbSi+aeS6uOeAWlcblOONwBOPYkV0Npoc kyq88iwxyjcsk5IDnOPlYh8/pRRXMn7iOl/E/UpyaRMEJ+0iIrxsdos/+hCmpoUj8fbYmYcnJiH5 HzeaKKjnZXs4kV1pUNrw84bPLsio2wdySHNQ6hbQ6eYCAJhKmQTIuQPcIxx+OKKK1TehlKKSZNpG mR60JyNkCwAFjuycHPOCegxyasr4ZMErZMxYjOCiHjsfv9PeiipnJp2KhBON2S/2c8KHaw2Dgt+7 2/mJcU5babywwuIgmcDJj6/TzaKKzU2y/ZRJLu5l0ySIJc27ebjdsiRiPUA88gGq2tGK8ikHnLnH DKq5JHqUYj/x2iitktDN6PQxvthgASyvrjZj5x5pGH79hRRRUWRsf//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="8056227a45cf543f352275959533936a" Content-Transfer-Encoding: base64 Content-ID: <8056227a45cf543f352275959533936a> Content-Disposition: inline; filename="8056227a45cf543f352275959533936a" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 53V7Jbm2eMtsLYCv/dPY/gcVxuqnUYrfyNRX/SVZl/AY5rtLS4TU9N3KdxK4IrG1Zre4vy9yNzRw ruXP3j0z+gP41ywdlY76yd7rqcbbxTtIBGGJPbGa63QtGvoblZEVljK7mX6dcVVXW7SzlWG0tkyP uyNyTmuo0W/ubfUfNunby45digD7xOflA/EUTk3oTTjFatmY0Op6J4hivbGZJTlZFSVxlj6Ke/H0 617HYaymoaZbXahkaZAxQ8FT3B+lc1/YtjHLHPHD8qnfhicxeo/3c81m+JdevfC7xJawQPDISTuB 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 --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="4698f4c450b5c3f52efea69c827551dd" Content-Transfer-Encoding: base64 Content-ID: <4698f4c450b5c3f52efea69c827551dd> Content-Disposition: inline; filename="4698f4c450b5c3f52efea69c827551dd" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8zhUJCPn3+uRVoW0cp8zOAF5ArPt2MkSnKhBnOKuW9yyz70BwO3rXJJMxROZop1xGxLuCBjjBprX 5tnVNrNnBOB045qO70yVZZLmDcgZchBkEDHPFZpNxEASpVfUqaFGLBux091NavYoGIk3LtUjAIz3 qPwtrVtoPiINeo09lLE0E4Q4YKwxkfn/ADqpp+h32pwgQ28ijqZHXaAP8K0otD0ewy1/e/apM58q 35H4t0/Ws41oUXvqdVHC1q79yJ7LLqiWnhd5dKtPJsY7UtBM7KWfPO1eTkk/TFeIW3g/ULgi71CS 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 fc4f7Qqn/9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="074ac0b6ea91d422af09d6c644a8c3e8" Content-Transfer-Encoding: base64 Content-ID: <074ac0b6ea91d422af09d6c644a8c3e8> Content-Disposition: inline; filename="074ac0b6ea91d422af09d6c644a8c3e8" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A y9eOdcvf+uppPEDbbHSwO9oP5mk1w/8AE7vf+uzfzpviL/j20r/rzX+ZqFtH+ugPqa/gwZ0m6P8A 03H/AKDWzHq8MV0yF4lEZwxfk59AP8a57QJ2tfCGq3CHDRF3U+hCZrhtEVpWS91C5lJmJECBvmY5 wW9+9Z15SUfdN8NCMpe8etuZLydmhuYgsfLoADj1yR0pmop9ispbr70caF8juBWfp0th4f1VtMlV o53Xh2bhiece9cpqviu78Na1caZdwtJatMzjn+BsEY/8erkp1KnqdNWjBbFuy8Q6vqN1GYdORLQt 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 H//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="ac0cc8ef3dcfa9d852c1df519f1d2bae" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="ac0cc8ef3dcfa9d852c1df519f1d2bae" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A j0HQJbq9Ez38pSI5+UBQD2HvXRSeGVuCfNuJHU+rkf1qfT7SaxsYoQYwcZbr949e9Y3jLVp9P0ba t15MsrfK0ZO4Y54/HH4Gvzl1K2IrqNOVuh9ViqsUnPohZPh7pzsXmcsvXbuJrmbzw9o9xdG006Dz ZFfaZHkxHnsOCaz7rX9U1izwzP5SAK6xg4+rHv8AjS2WoyW1okCYA6njkk17FDD4ind1al32PkcZ nai0qdPTz6+n+ZQ8Q+GW0aS3+1m2jEh5jt9xYL3PNc5JFY25kZLeaYbmblfupnjJ7V61baUPFSxC 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 --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="8afc62c49d8e95680f4e27e49ae641a0" Content-Transfer-Encoding: base64 Content-ID: <8afc62c49d8e95680f4e27e49ae641a0> Content-Disposition: inline; filename="8afc62c49d8e95680f4e27e49ae641a0" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A zf8AhK7mGQhrWBjn3FXrbxpM2V+xRk8YAc/4VUuPCOoKDIXt9qrlmL4Ax6kiq2nw2q30dtA0Vzcv kCSU7YgfQDqx+uB7GqdgLmqeOZLa08w2YiDHb5pJYL+nWqvhfxw2o3k8U7TXGBlEjiX+lc54wnkl nfTtQ3ZiwMKQfLP+yBgD6U7w1bWum2onsLyKaY5DHZhwD2IPas3B7mkZK1mekPrMjxzbdOhjaOLz tszZLp6gBf68YOehpIl1C+vFt7axsJmaJpQ0dsWBAXcBnPfgfU1xbXF1NgTzSOEGF3OTgHsKs6fc 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 AG459aKKKmyGf//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="98e9a43592dcc790874623e4c4869b73" Content-Transfer-Encoding: base64 Content-ID: <98e9a43592dcc790874623e4c4869b73> Content-Disposition: inline; filename="98e9a43592dcc790874623e4c4869b73" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7f7MX4x16UktoXVcjIHUVbSRon2HB9DT0dSHyehyK+fkoyWp2q6KcennZ5iIB6gnpU6khVhcHcoz nt9KmEhC7W4J5xUXLyYWpSS+Eptvczdb1aHQ9Ke5l+Zi2yJM43sRwPp3PsK861LxxdrtV7p/n5CQ KAD/AFrS+IgubvWtKsbWPzD5cjEMeOoyf5U7wZ4AhivjqOsHzWB3JEOmfeuuEacYpy3Eoyl8KOcl 1DXYYY7+WSW3jfmGQllI/Ic16Poniu1u/DH9p3siRyQfJcAf3u2B79v/AK1aGsWtvfWcttJAvksC ACOnpXlT+H7q3kmstwjAXzCCTtbHToDnrxTShUVnpYqdOUGrajfEfiO48QahvbKWyHEUWeg9T71n wQyTR4jBfYeSOg+p6CqM7PDIYgv73OCPSpbW1PkPvG9twY10Siow0MabblYuCO3U5lukLf3YR5h/ McD86sRywr9y3JGPvTNn/wAdGB+prMYiJhvdEHoTSm8Hm7be3mlfuCu0Z/GsHGT2OhSiviZqfb7g ABJti/3UCqB+GKKhTRPFFwgkttJLRHoVQt+tFP2PoL29Pse2SHiN+4BpkZLMSFK855FSCMsQxOSP 0pk11bwOEklAc9I1+Zj9FHJrjtzdDO9idWbHzHcfcUEsRgcfSiC11O85t7LyUP8Ay0ujt/JRz+eK 0IfDCud2oXk1we8cf7qP8hyfxJrohhqkvIh1Io4zxDHC11ZzpIjTw70dAckIwBJPpyq/nVO08X2U mox6Vbs3nMQokZTtBPTPfmvVodMsobV7WK1hjgdSrIiAAg9c4ryTUrGx8KXk1uLfNx5o2E90Jzv9 zjP41pVw/s4pvU3w1XmbiOjg8WXmsTxzMsUAYqjBCyjkc9RxjPJJPtWheafBHPAJ33lNuZc7Twc9 u1YE3iybV7horKOe1kjU4deWdzjCkD5QPrTJdWvUj8m8O65IAYAYwaXK27G7cYq5xd8sEGoXcisG VpnYN6jccVlfbJLidYIC/luwDbOrDPat/wAW+Gb6z1u3ty6eTdxiWMZxg/xKfofzGKv6fokNpFth TfM3BYDk+wrqm1TVpbnm3cn7uxF4k0Kx0a2s76xiaN9xBdWyc4yDTdM8XtA5ku7K2uZC2WuAu2T8 R0P6V0Ot2c154XeLyyZ4ijbSOcjg/pXnksPltskUqR2IqKdpx94JaPQ9Hj+JJCALKYx/dJx/SivN DFk8McUU/Yx7i5mfTEHhx5Ob++lk/wCmcH7pfzHzfrWvZ6bZWClbW2iiz1Kryfqepou723sIfOup VijzjLdz6VDBrFpcWiXMTs0bkhTtOTg4NaRUIvliDhNx52tO5ojinVnm8lkDCFMMBxxuyfqOKekV 1KwaSXYvHyjrx3z781smZ2LocEkAgkda5nxl4TTxHZrJCUS+hUiNn+64/ut7e/at+3tUtgdhY5xn J61wfj74n2vhxJNO0to7nVejHqlv/verf7P5+hGlJWkOMnF3R5u2oN4dvnE2meXeQkph2+VD0OBn H41teFdOute1IapdKTHu3BscMewHsKz5IL++8A20qxm4vJUaWWZsbxHkkkZ78qPoTWv4KuZ9K0nX dR+3Siz06LbFAwUpI4B6jnGTgZUgHPtTo0Y05cxVWvKorM5Xx9qX9p+KpgrZitB9nTHqpO7/AMeJ /IVzyanewkpHeXCrnO0Stj8s00iW5m2ruklck+pJ6mqcKqGfBLNn5mPc4pStJ6kLRG2niTV44Xi+ 1s0bAht6gk/iRmqL6ozMFmRWB6k1Ukkx8vrVac7QD1HpUqnHsPmZqFrcnIDAegNFZyXWEAXIAGMH mip5GPmPqfxPp17qejtBp7wpdCRWRplyo55yMHsTTfDulXGi6WIdRvVu5/MZ/NCbQM44A/Ctmlos tyuZ2tfQasjYxHFx78CpAsjD53A/3RUM0rIOMVXluJFXhu2apE2PLfHnxOcvLpPh2Z40BKT3oJDM RwQh7D/a/L1PkEuS5LNuJOSTUpJYtk9f8KrsSQCevFWQe6aUluvwfN1KuQLGZOOvG5eK4PWbiaz0 i6WMgJqDxLNjgHYAdq+yEYJ7kmuqs55E+A0jq2GQPtP/AG3z/n615/rjs0VpGSdkIaJF7AAL+p5J PvVt6CMWV8KT1Pb69qag8tMZyepPqaQ8yLn3P+fzoY/NUDK8r/6Qo7HNNkP7sgHJBzUFyxEqkdRR H95qYDxIuPun8KKaOlFAH//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="f01dc493ac3297697136cb47aada035d" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="f01dc493ac3297697136cb47aada035d" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9lzxTc0UlYGtxTRSUhpiuMmnjtoZJpnCRxqWZm6ADqa8g8X/ABjw8lj4eV0ZHwbtgpDAf3Qc8H1q p8YfGFy2oN4etJmjt4lU3IXgyMRkKfUYI/GvN9O0xbgBnZdrHnB5H4VO5qlbVly81nWdXBm1LUru ReSA8hP5DpUtt4h1m0TZa6pqCLGM5844X6DtXTaR4aGoO00oVrO1B2IP4j6c+prntYs5IoJJniKs 7nYpxkj8KWg7tI9J+GXxFudXvP7F1mYS3JGYJiMF8c4PqcV6qa+Q7Jr7TtQgvrfMc0TiSNgOhByK +p/DWsr4g8OWWqBNhuI8sgP3WBIYfTINUjOa6mrSikoFMgXNFFFAhaKKKBhSGlzSGgDwLWvDM3iD 4tapDfN5cBPmIw+bcoCgYrsLX4aaQXjR7ifYp5CkDP6VV16S40rxtJqlxZztZZETSoBhc4PP5VvN 4lT7JJdadbSXAVQdzqVVeOp4z+Qrn523qd0afuqxuzaDZ2OiS21jEqBYzjPOSB3rx7WLZ9RuEtvK KnPIx1+lekaX4murq2jlu4yEZS28Qsi4zj+Lkf1q/qmmJqdlGwVYP4wdvJ+tVzLoQ6b6nj76C5Jg toPtBiG51B4Hb6c+nevUvhdKreDUgUjEFxKmB2BbcP8A0KpbG2jhsTAX/wBWDkhQO/BNV/hjZR2v h25lTGbm7kkIHUDOBn8v1pwldk1YKMLnbUopKWtTlHYooGO9FADaKKKAFpO9HalUDNAHNeJLzTdM huGvJUH2uPy8SAsAcHHAyQPwrI8MRD+x5rmdy8bupVmbaQoUADntinfETwpPqSR6jYxtLPGNrRDu K47Q9ZktHjt7hdklufLaJmKnk8HHt0+lcs5NTs1oejQjF07p3Z39hZB1dLZQkLDkM3QH09a152JP zcZFY9teTtGtxGI9oAwgJ3Ed+cCrb3SzI+HB9PWqWiFLcw9Smlt/MVMhXOD7itPwXHFZaYIXlUTT yO6xk4JAPOB3xkdPWp7fQZNXlTd8lunLv/SvH/iJ8QHfxlYr4ekEdporkQuvIlfo591OMe/J71VK k78xnXrJxUUfQNKK5Xwl490bxZbxrBcLFf7AZLVzhge+3P3h9K6sda2OMcBxRSjp1ooAjozRRQAU ucUUUAY2veK9E8PRbtV1GCA4yIy2Xb6KOT+VfPXi7xlp9/4ilvtGjlKMQd0yhfmHfAPSiilyRn8R opyp6xPUvBOpaz4i8Nx6gtkiwAtGTG25ht68cH+ddloGlPe/vngeK3/vyDDOfYdh9aKKapx5gdWT Rz/xg8ar4Z0FdB0xwl/exkMVPMMPQn6tyB+Jr5sYdTRRWxiyOKR4nDoxVgcgg4INd14f+K/iXQ1W J7kX9uOPLu8sR9Gzn9SKKKTSYHpenfHDQJrNWv7S7trjo0caiRfqDkfyoooqOVDuf//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="e5cc591c235e64fed6dc6497e7cd954d" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="e5cc591c235e64fed6dc6497e7cd954d" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 6CNKtxpV2Oa19Eq1HNa+iViUUUWplStFJbT+6lTpLaf3UoEZqpUgXFaYms/7qU8S2f8AdSjUDFuL mK1j3SNgnoO5rCkvLyZs/aGQZ4CcVFqeoxXup3EiyL5aNsRQegH+c1Sh1Oykm8lLlTJnAFcdSrKT 02PRpYeMY3luazS3pXMF4yuOm4BgfrUNl4oK3n2PU1iSTOPMjbj8QelPUlVPtXCa+nlap5x/iOTT pTnfcitThbRHrhXIqNkrJ8I3b3Wk+VKxYxY2sTztPT+RrcdcGu2LurnC1Z2KZTmipyvNFUIx47Fa tJYrTI54f+e9Wknh/wCe9Z6D1HJYLU62K0sbo/CTZNXSFgtFmkbjoTT0DUqrYrTbuxH2G4w2z923 zenHWrIvbfIG7k+9SajD5uhXjoTkQucevBpO1tBrdHj+j6Zcpc3QZYxCY/lAJOWP1/Glg0Sd5hul EZUnOEBz6c9qsf2leo3lQQQsCc5diOO/TvV2CSYHc2Mk+tcKva57XKtjVs4XhtlSWXzCO9c/rOnG a7ZmO2GP5i7dBW1BMzsVKkD1p1+sbw+U5Xa/3txxwKpOzMJRUtCx4QDJPKm3CeSrDnPpj+tdUxWu c8GeXNaXE8P+qVhCh9do5P610Tiu2knyK559dx9o+XYiJGaKQjmitDI5WJBgdKuxQJkMcHFa8a23 /TOrUa23/TOvP+r26nR7XyM6yQC9yvTbV7Xzjw22M53DGKt/6OF4ZAenFWV8h7cRSMjL1wa2hGy5 TOUru5wtk268h+YnnmvQ7ZA1kVYZUjBB9KrrbWOQQkWR7VbR4UjIEigfWqhHlJlK54Xd6ddW+oz2 7zY8uRlOWI6Htg1LDb/Y5BJ57FT1VnJrsvHnhuxubSXVYdQis71Rkq8oVZwO3P8AF6V5lAkzFhI7 FRxyeawcHHRs9OFZVI6bnUjVI4iPn69a0FuEurV8gBSDzWJpugz3m11j2R/89ZOn4DvWZ4z1+DTE Oiaa+6Yj/SZ+6j+4vp7/AJVtHDSlHm2RhUxEYu27PVPDdhHp+hwxxOro5MoZTkYbnrWi1eI+EfiN N4ctzZXkT3NkMlFU4aM+2e3tXaWXxX8P3bbZ1ubU/wB503L+nP6V0pWVjherudoetFY0fivQJkDp rFng/wB6UKfyPNFMRyKS6l/z2P5VIbjVFHE5/KtSNR6U6RRjpXNKLtuapoxJLzVmG37Qacuo6rFG TLeEBRkk8ACrUgHmiuI8cXs8cUFsj7YpWJcDvjoPpWELyny3NHZK5tXvjo2IwuoNPJ/di5H59K5v UfiHr14pjhumt4zx8h+b865Ik0ldsaaiYN3LsMn2vVIJ9RuJZUVw8ruxY7ByevtXb2HijTjrYuL+ z8myJwG3Z2E/xMO/4dPeua0Wwt7rT53lUkgO3XrtAIB9snP4D0qfSdKttV1mO1ud/kiMvtVu/Faq Ce4uZx2Z6v4o12HRvDr3sUiOXUCDach2PTHt3/CvB5ZnmmeWRy0jsWZj1JPWuo8cBrS8tdNidvsk UPmRxnopJIOAPoK5MgE81U5uRMY2GuSW+ZifajcfWmg559aQ9KgoeHb1oplFAH//2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="8d6704f8935e5ae2c028cf8b4f33619e" Content-Transfer-Encoding: base64 Content-ID: <8d6704f8935e5ae2c028cf8b4f33619e> Content-Disposition: inline; filename="8d6704f8935e5ae2c028cf8b4f33619e" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A iSOrCL7UiJVqKOvoGeELHHnGKI4Ql/BM7ANcJIkS+oXYf/r/AI1K4YeVFFjzp3EaEnAGepPsBk0y /vI7nxRpVvagfZbQvbq2PvHy2JP4kflivJxU51MVTpU9o+9L9EelR/c4aUmveqaL0Wsn+SNWKHPa rsVqW7VR1K+Ol28UiwCVpH2gF9oHGTzg1v6BPb6rZi4j+UKSJFY/cI65reWIhzunfUzjhp+zVS2j MLXruLRdKe5kdUY/LHu9fX8P8K841LXLrVrBNF03cunx8yZ4NzKerN/sg9B7DPPTW8eXv/CReIvs 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 qf/Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="2c6d0c6a4ce8e04e9b2671c02e8e4a7d" Content-Transfer-Encoding: base64 Content-ID: <2c6d0c6a4ce8e04e9b2671c02e8e4a7d> Content-Disposition: inline; filename="2c6d0c6a4ce8e04e9b2671c02e8e4a7d" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAMwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A xo4eOlWo0YEYODUqQ4qdYq9hq5w8xeS2kmtvmb73cen61niFY9Shsy0jyTMMZAAUE4zn06+tTT3k 9lYTNbsPMx0PapPDWnq+t73bc0MKLvwWIYpk9MnqcV59Wq4StE6oQUldkbwoksixvu8tyjDupBxz /jSqtTackbW2qXJAPmsu0nGQS5J/z9aEXcM4I+orpw9Rzh725jVioy0EVanjQsQFBJPQDvSKlShD g8A+x71s9EZIyJdciju/s6RliHKMSQBkcHGa2hghfugsobaG3EA+v5VyYtDFqKMwVD5jL1yeuccD 29/pXVRRCEQAGRiwZSXYnkH3+vauGnVlKfvHTOEVHQcVpjLxVjYaQx12HOUGQ56UVbMYzRRcRFHp xl5iwR7nFK1lLGcPGw/Cr0JdDnGanbdJy3T0qedodkzl9WDMLe3VOJmCjIIOc4/r1rZ8OxJ9n1W7 lAY7n2ZyPu4IAA6/daqmreXHqVmjOCEYynIwPlU4A9+RWroVpcS+FHSOB/mJD71KAk7twOWCn7/c 44+leZUd5tndFWjYykP2LRCxUuJbtUIzjjb6DjuOO3r1qS3eG5XdE4OOo7jnHT6g1JqVjdQada4t Zdm92kcJlV2lduSPlHtj0PJrk7pIn0990fZOB05keiliJUna2g50FUV+p1E11aWhIuLiKM5AwzYO T0qG41nToInIukkIO392C+Dz1x9DXERTJHbXTpGCFmVgp5xgNiqdhvNrMg7ODxj1x/7NW0sXJ7Iy WHit2egi8Fvq06rFEwdw67o92BgdOav4CwkqAEjnVsgdmGPQeornJp9ps7hsnfAjHBxzjnp+Fben y/aLWZVGcQBgo5yw5Hf2HapTtZg1q0anl0hSrkcZeNTgkkDNI0JBwQR9a7uZHPZlApzRVtoQGxkH 8aKXMg5WcPD4p8RRJtuPD8pdRlm8l0447YP51asvG8s5eKbR50kRSzBSecdgCOTT1VCAEkQp0PII Ix35rTs4kcfM0mehbK8/rXhPGzPVWDjvc6bSYbO5sob+W0RLidQ7CUAsPQH6DFdhYmNdKAV1G8ng HpzXkr+HtNlJZ4C7sxPzTHkn2BxVf/hE9PeViqRKpXBBkfg569eOPzqvrcXuH1WXQ9g1SGCSyVgq tIMZZcZA9c9a8n8WWUMmr3iQB1jIhUbUyNwUMTk9clv51PFpvkxokVxCkOAqKCTgeoHPPenyWzxv vMnmoV2lBg7gRjOCPr3rKWJvsjSGHtuzhf7La2s9U+0StGp53mFtvtzjn6jOKox2kFuEjXUoRJeq JIcqQNuQ2cntgHrivSQmLcyLBPJDwQ/kllAA/vDPA6+36VBJp6CZreWFFkWESIrQAhl9jg9hnsKc a76oJUV0ZzENrci3t4pbviNRF5pSIgKcZPMnPQn8Kl8+8sGaF7jzXjdkUxKqgDpnI65/Gt9LO3tk CmNDvYD5UC9vboKyL1rdJFBmO3fgAMuDyTgk+wGc/wBaPrHNshKhbqbFl4vtooBDPFMpQhfMABU+ /HaqureM4rdmFjZPdyY+V2cRr1xjnn1P5VkXMWZ2MHmJE2NwMm5SexHOB1xwKyYEvrQ4jivGYE/u 2ELAnrySSf0NdCxUmjF4aKJ5fGmu+c4efTIDn/VtIuQPzoqwL+9jUK3hxLg4/wBY1ysZP1AGPyoo 9vL+mT7CJvRyNnqOTzxVqJiJCAcD0FFFeaz0UTPIwIAPBA7UnmuBgMeGXH40UUhlSK9uTKoMpxhT j15rZvXZY1C4AYKDx1oooBnd6jGhsVh2DymDRlAOCp4xj6V5fcwxx6PozKvzQ2riMk5KgMCOvpgY 9MUUV0y2Zy090ZmsO0bQhDgEAnjOfm7+vSq10BGbYoAC29j7kMV/kP69aKKzibszrVixZSSQq4A9 qkPEbnqcdTz2NFFX1Jew6MZXJLdf7xooopmZ/9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="f1632990701c299a5035a11715c64cfd" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="f1632990701c299a5035a11715c64cfd" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A tahpgjtZpHRjJEn3m6Z9F/AgVntfWWlaELzUZvKiD7R8pJYnsAPbJ/CnHVH1HFvCg8x8xxl26nnJ P1bFc14uuYpoLHw1GGl1KK9WSbj5MFCcAnr96scOuSDN8RD30j1Dw5Y6VqekDUreMq8jHa8qlG25 HzEfTHNW4W0mXVDZxanaziNyJSkw3Jzjlao+E3TTtGk0+4uQL9kM/lhMFVPAI/vcjn3NZ3hnQ3/t S2uGtkgjs4ZI8ArmUsV5wOeNp6+v1qI4hq3mEsOtbPY6uDS0ub2HzZlEatyVYEn/AArpmjs5rwRR zRlljyQDz1rNtUVWBwM+taVvHFHI0iRqHb7zAcmtFWkncydNNWGyaPpMybnRHl2kBt1c/q1pf6mV gtYns0i6ssyAvxjHBY9D6CunAjD5CKCOAcdKz/s0y66sqxRm3eNtzYGQ+Rjn3H8hUyqOXxDjSS0R x13oFzNr1vFFlSVHD4Ytgc5bqfu9a5TSLyTQPEepxXDS/wBothY1S48sHqTkrnpgcHrxXqnmRx6z DOJAFYOnP3s4JH4V5lawx33jaa5eX9wZCX3jJ6jgjJ7HGD2rC7voZ1I2VkeiahJJPrlpMmwyRWKy /O3DffJGQPbritjSo5r+xW58+3ZHJKFFJ49DnuK43xXNMviLT7GKOYLPbxxK0LAZyzgc9h716NYs wto0kP7wDkbt2Px716XO1FJGChzSd9jlSGtb6+iJVj5+SQrd1U+hopLxLqTVb5oym3zsDLEHhQPS ioai9WzdOSVkjw3RrpU1eOXLOFYMz4+6o5P15zXGXS6pq3iO61XTLe7n8y6eSGSJCWwGyuMcjAx+ VdPp+oxCaG3iXO4LHu+pFcpqrXGjaikNvcukkI+YxjYA2T2H4c1jFytY6a3JzLW56Bp3iu/1mGe6 1B7SzurWD7M0KQbHf5gSxyeCSccD8K9C0vxNCNkosZ1vJtqZ2Bt77ePcjjr9a+dbLVru2Ep3CUSN kpJnGT3+tdh4X8Z3s+v6Rp8Wm2yublEMg3FyCwyevYE9c1nUpN6oIVUlZn0RGZG2tNM8kn8THjP4 dqlhaRXbdKWUkkDHSqRdw3BGP1FOincybWQ4/vZqRGksrxgvJIpRQSxxis+18QJdyFUOzHqaratd sdHuUiLpK6EKSvTnBNcBZXM8bI8bjhhu3scgZ6jA6/lWNRyulE3pU1NNnpsltJOxLEshVmEnAOec DAHGOK5u3gtl1uAoyRyoSxYts3PkZUf5NdHpKzw6RH9pZTKw3kKSQM9ua4w6fdjxnDJGCYTMCVkw RgAEsDjIOf5Vuk7XscdZWehb16Waw8Xtqeu3i2Oj25hW1lAB3/xHgHOc7h07+1SJ8SLaa5uJNKv7 e4ijUBVeJsk47dD3xz6VB8RdK8W6tGIdJsLK70wxAul0YyQ4J+YbyCOMd64b4U6LrWjePPKnt5Qo ibzo0kBQ8fKSQcHGfWuyOjM3ax6tb3b30f2v/UtKdzqBxu6EjPOCRRVmfSLu4uJJQtwoZiQCM4/P mip0LV7HiFt4XkSRZI5xDtYMdwLLwfSqXjLwJqEdpDq1oDqCnCzvbLvwAOGIHI6Y/KuxjbfEVJ4I rM0zVr3TZgYJ3Urx1rnpyb1LkkjhfCegwarF4gS5T/j3sGkjY9UcEMD+hH4mtX4TWTXfi836qhFn bljuH8TfKP0Jr0qLUNC1oSrq+mok88Zje6tj5MpB45ZeG/GneGPh5H4duru58N6nFfxXKqPst3+6 lUAk8MOD19KtydmhWOlluiHA2n6jmoNR1qLStJub5lMnkrnywcFjkAD8yKy9R1Q6UZG1S1ubERqW YyxkqQBk4YZBrndPtPFnjyznu1tkstHcg2qyYUzj1LdfT2/LNYNSs2jooKEqkVN2Qan8QLq9jCx2 4ii4O0Nkg+p45+nFMtr02um6bqs9mJbdpCsx3AkEA7ePfH4VZsvhf4hmmJmexgj6YMxc4+ig1r23 wcuGulluNacRhcGGKAlc5zn5mHPbpWcaNR7o9qvPAQS9nLrrbsavhPxVba9FKsjNHeqWBjY8MgJ2 kDpkDGcVoedEmqhQS0pUEDnAGetGh/DvSvDl6179rmkmOcGeVFVc9cAL/Wtvy9IgkMgeNnIxlQzn +eK6qUJpWZ4mMlQlUvR2PK/iBoNzrmmXl3FNI0drdKJIFyS4ZgoIHtz+deoaOp0vR7HTLZ2RLaJI wEQHIUAenfFOF5YwlvItZCWOSQiJk+uRzUU2pyuCFtkHvI5eujXscmxptfzhsbwvsyZP8xRWCb67 zw8a+yxjFFFmF0eR2172P86qyYF3MvpIw/U1mQE56nrWhN/x/T/9dW/ma5aatc2kXoWrUs76e2YG KQjHbtWRD0q6natbEHbWPjCR7c2uoxR3Vu42tHMu9SPTn/69dRo19oa2KW2nxw2IUYjTb8i+wx2/ KvKkq7ZOy3KbWIyecGltsG56ncR6wuXSdWQjrCo/rms2R53JE08zHuGc/wAqXwvLJ9rMfmPsx93c cflW9rEaG1LlF3euOa0hK/QmSsc4EjHO0Z+lOLAVHTD0rUgkLgVC8tMY1C54pgK0vPWiqjE7utFK 4H//2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="c9982fd7911f1cf1cb767c042751d438" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="c9982fd7911f1cf1cb767c042751d438" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 5zxHof8AZXiO3uLB1EPErBGPDYwfwro/D+i6d4l0q4OoKLgksh8yYjymHTv3p1t4YuNVs4JpbxUk mXIywJwema5HTZdS0HUtStnkk3vP5TKuCNw/iFScvvU5KrUjo9kTWvh6TQtd1DTtPWWRZZQIghJO 3bnt15yK7HRNE06WC4/tOxja5WTawuF+dFwMYBHfk9KfpmhXn2G51AXbrf3UAjhcr0ZgCD+Arl5L zWpbe1j1J5Ir+KAxynfjIUkgk+4NA3z0ZqvJb7DpdDh0/XNTi04IliX8w7iAqjaOpJwoznvXUQ+E 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 --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="7aae6fbb40016f384e7f9bdaef474f04" Content-Transfer-Encoding: base64 Content-ID: <7aae6fbb40016f384e7f9bdaef474f04> Content-Disposition: inline; filename="7aae6fbb40016f384e7f9bdaef474f04" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A S16iti36isi16iti36iuo5j0CP8A1afQU+kj/wBWv0FOqBhXi/jv4m6i+ozab4emMFvCSkl0qgtI 3faT0HbPWvWtblkt9A1KaE4ljtZXQ+4QkV4B8PvDkWtzzX+qgvaIdqrnaHb6+grOpPlRrRp87sct cavrUk3mzanetITuy07E5/Ouw8H/ABU1jSbqG01SU3lgzhXaX78YPGQ3fHoa7zU/AXhu8iTyLUQk DgxSZyfxJrgPFvgu10mwe5tZGJTlg3cVgqyvY6ZYdpXPoaNlkjWRCCjAMpHQg96krB8FvJL4J0R5 WLObOPJPX7oxW92rqOFlZRx+NZkjY8QgesA/lJWov3fxrEuZNviiJfWAf+1KQGko+UUUq/dFFAHm Vr2rYt+orIteorXg61oI9BQ/Iv0FPpifcX6Cn1IzO12A3WiXcI3YePDBTglc8jPuMiuF0PQrWLST pj7okjlfY0ZztyxOM/Q9a9KIBBBGQRyK4qcx6f4hubbkRMQ6ZOew4/P+dcuIT0kd+DnHWLMh9Ag0 mxvzBczNIYzhjIfl6dMnrXPapoEv2NoUuXm+0LtjV2JYs3A+o5roNcijuFZ57W3eQjCsrMrYHTkC rPhy1S91y1Z5EVLKESsMg85wo59z19q54JuSR11uWMLs7zTrQWGmWlmuMW8KRcDA+VQP6VbPSqtz c+QFjjVXuJA3lRsSA2OvODjimzahZpb3MklxGqW4PnnP+r4yc/hXonijYrmFomdZVKqxBIPQg4I/ OsK+b/isLYetuP8A2pSaZ4iine1ihWSeKWLzN6odwBAwcDPB56muavdWnutRW5uY8OYwVjU7Cqgs dpI5BAPOfWpbHY6bUdXWyuREb+1h+UHbIhJ/9CFFUYNPhvoVuNQ8prlhlmIBB75XnpRSFY5u17Vr wdax7XtWxb9a3EegR/cX6Vk6n4s0DRlY32q2sbD/AJZiQO//AHyuTXB/GXV57XTNL063meI3DtLI UcqSqgAA47EsfyrxsIBmpSuWonqPiD40XkjtFoNmkEPQT3K7nb3C9B+Oa2PDlteeL/BSat9oabU4 5ZPPbgHcDkEDp90jj0rxUgseRxXo3w5jn1TRda0GK8ktydt0oQ48zAIKn/ZztzUzgpRsa03yyTRr zanrErrpwswZ/u+Zg7VHqTjiuI8W6k+j+ILe30y5cXVomZ5xzukbBIx0wABxXUR3V4t0b2OZ40so vMlZs/MqjJU+oxx9SMV5jOXurma7mYtJM5kcnuSc1jSppK50Yq8Z8l72PSNB+Lt0g8rWbNHUuH86 2Gw7h1LLnnPHcVsTeKtL1eO5YS27bnW4jhd2Qh9h38gDOOg9a8eUcdCPTNKcgZBrfl0OTlR6rpOt 3VkZ3jmmXzGSIRuMqQf4vbA3HP506Zy15J553SiN/mn56lhx7cg8VwvhvUbmO4ZXuZVhAHyKN24H II59ia2p7v7VLEpV/wByD5fZhnsSPxrGTs7BY3bySx1GYXB0yN8qF+TkDHGPbp096KqxQqkalLG7 mDDdvjTcPzoqediNW16iti361j23UVs233lrqMzzD4k6pHqfji8aFi0dsq2wyepUfNj/AIFn8q5e ORWTP51LqbNJrd6zkszTyEljkn5jWdD96T60rmy2LykHj8a2fDetz6LqM7wMQ11bPakg9A2Of0rE 706H/j4i/wB8fzol8LNKS99X7nXa/qZtNJmsY/vXgQM3oiknH4nH5VyBO0A9q1vEh/4mEX/XJf5m sWT78f1qaWkEbY13ryHqD/F1qN5QWKKMmpT90/SqCdD7mrbOU2dEN1JqUdtaKkk852qrMFBPXqeB 3r0G28OXVreIHWIRBQGke5iOfUgAmvMrT5b22K8EOpBHbmuumu7ktzcS/wDfZrCaTYM9msNPt4LK KJo0fauA23kj1NFW1+4v0op2Rlc//9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="9e9f154c6dcb503c45b8a67d344f5d34" Content-Transfer-Encoding: base64 Content-ID: <9e9f154c6dcb503c45b8a67d344f5d34> Content-Disposition: inline; filename="9e9f154c6dcb503c45b8a67d344f5d34" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A qgxOOXQEdccA1XvdK+3afKqhElY4QtnA9asCGCdlaCQLk/ck45/rVxzMkpAjcp2BHWosO5xE2j39 kN0luSuMb4uR/n61VLIrAkbT6qMH8QeK9IjYNyvDehqvc6RY3oImgAY/xLw1MRwCyLyuMe4HB/Ct bTPEOoWQwriaMEAQy8/keoq/d+DmGWs5g3+w3+NZen6Vdpr1pBPbuhEqk7l4wDk81cWk9VcUk3se ivAWXzAAD6UsTb43jblx86j6f/Wq4JUkGGwreo6VHLA4ZZYgN6nOM8N7VNhjO3UAegp0TeTIsmxT tOcPyDRbW15cyNFaWsjhWwGxitmz8GaheAPcTJEh9DTAw57uIzPJIqDf1CjGPpUQS6mk8u3iaRSM q/QEV6DZeCtMtMNKGmf34H+P61uRW9rax7YYY0B4OB1osDZ5pF4S1qaMP5ZXPbAH8zRXo3ntGSka 7kB4Jainyk8yPn9g6ybZLZ/Lz8rqOfrV2OeaPLBjJGeSCMj8R2qiN+fKjdsHgjsTnjir8bLBKGlj 2qP4h0/KpHctxSwzY2u0TegORV5IVaMfMC3ciq0WmSagjS2ULvjksFO38+ldFpngq+uGD3uoRW44 bEXzN+fSnYXMjEb90Pn4A79qs2kF7esI7W0lmX1C4Artk8MWcPlvDOZChBPnAEMR9K04LyOzkMEm I8pujUfdPrg+vtTsLmOTtPBGo3Hz3k6wpnhF5bH8q6C18J6bBbNGrylj/GW6H6VfbUgRwfyqob8A ZB7mnyhzmH4ogm0TwRrK/K8f2aQJIvBBYEc/n715n4f8T6roNvF9iuWEQVcxN8yH6jt+GDXq+ry2 WqabPYX2JLeYbXTeVyM56j3Fec3vgyONWbTr5zj7sco3YH+8KGgR22k/E2wvVWLUU+xzHjeDmM/1 H8veuke73qGVgUIyGHORXz7fabqenkG4tZFBPDAZU/lXq1rq5uLWOGAxkogUqXwwwO4xmmmrCaZu JrEKvKlx8pWQhcNnK+tFc5JatLIXcRFj1+Qn+tFLmYcqOBj13TbWRHnim2dQQRkgcZx9a63R/FXg uSHbMG848gynPP415FqDlp40yDsiUfn8x/8AQqgVM/w5+lZpstpM+jIPFVuw8u1lVouoK4x9ABVO fWZldXgXnowxgMPevBYnaFsxSSRn/ZOK1LfxBq1tjy75mA7Pz/OtFNmbpLue2Q6rchAcqEYEkE98 9arSXMkkpdphjcSox0z6c1xEF9fajZQTNepE7fL5e4L9D+VXV0XV7iLet6hRs4/fEcUc1w5bHWG5 wvzXDEd+QKha6iCDdKG4/iOa4afS9QBUmSR1cKwPmE8GoptHv1QkwyMPZs96LjO++126cCWJR9QK hbVLNCd13EPq1cMbC7Q5NtJ0/umrVloF3qkTPF5abW2/OSDkY9vekNWOrOu6cp/4/Iz9DWQ97pc2 oXk1yS0UoQRsuQcgdQRyOtVR4M1DvNb/AJn/AApV8MXkgEQkiUx5yTnB5I4/75pFWJDfvBhLbW7p YcZUTRCRgP8AeIyfxooXwhf7R+/g/M0UBY8rnl8+6llCjDsSBntmlHTJRhVUjDEDpT1JzUFFpXH9 5hUgceq/lVZXb+8fzqWE7p41IBBYA8e9MRbvJCHnUn5U2xAfTA/9lqpbF3u4I06u4XkZ6nFaOvwx wTSeWu3c+TyTk81m6cc6lbnuGyKlO5TRBdahK95PIshAaRmGGI6mrGmahdebMyzSBlj4O85HzAcf nWU5OTV3S+TP/ugfrTEdDb+KNctRhNQlZfSUBh+tdDofxDnhuQmqxwC0wS8sMXzj8PriuMZAoyBg 1Vuz/oU30H/oQqibJnsUPxA8NtMrfbC0K/63zLZgQOx498VND4o0OWeVnvEjjkO6Fmyo2ZPPI45J 614Tbf8AHhdn/cH61s3JPk2A7fZE/wDQmouHKj21LywlXfFdQyIejLKMfzorxBPu0Uxcp//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="a9d156c9e5e061df5a4b75e27e759a16" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="a9d156c9e5e061df5a4b75e27e759a16" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAMwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7xrEZY5wO1V5YTECzHj1Jqvr0zCCEhiDluh9q4N7hpfKyzMwHJOSe9U3Ym1zuGv7aM/PcRD23imj WdPQ5M+T/sqTXEhnPQN+WKUb/Q/ianmHynef8JfYwJhY5pMdwoH9aqT+NIWz5dgx92kA/pXG5NHP qPyp3FY6OTxddMSI7eFfrk1e0TVrnUJ/37LgMRtUYHTNcgi7i3zY/wAa3vCx23qqf+enP5Uh2Opl fb06VCCrH5qv3lopTMRwfSskxyg4waYiz5K5+UjFSJAqHOagiimY9KvRWTsfmfFIYoIxRVsacMf6 z8xRQBzniJ0NnBtGD5h5H0rz8XIYLEqgN97jritj+3rTU7hbO3YsyMCTg4x07jrz+lVIvD0SyOyX EPmKSjFV79x160m+4ehWy+DkdPVqXDHuv51pDRY1ID3GCeny0+LRUBcyykr/AA7SBxz14+lSmMyg OcF1pT0+/n6Cr91a6fYQRy3Fycv0VTkn8h0qpaTWN3PJskUQqF+adinJJ45AzwKd2LQiVmVjhj+l bPhyTbfrkk/vFqSHSrdt4dIwwJGQ7YA7ZqWIW8N9bGCNUJYbtrEg88Hn2p3Gd0XUj7uaaVTGcV5/ q+valGsBtIfO3A7v3n3cdP6/lXL3Hiq/hjXzk2OXZXBkdiuMYxhvei4Hse8BhyuCMjJp/n26IXad RgZxuFeGnxdKST5gyePuMc/m9RzeJ7sRRSwkK4Y7y0IGBxj196Lgevy+J7pZWFvFF5QPyl2OT9cU V5ponizzbNzf3EbTCQgZwvGB2/OilqMzvDbXUOrFZ0CqeVz16j866x7vS7e6uFZFRvtrFtxB+f8A v9eB715/4ZuHOrqCSRt7/gai8UTmPxTqQ3nAlzjPsDUOTauaKkk+Vs9CvNb0eR0iluYpNrK4wxwC CCOR9Kp3Gqafc2n2a386RmcsVhkw2SSc/TkmvMhM0n3Nzc8Y5q1bCeCYSPJ5eP7p5xUOdtwnGEep 2Oopf35Ty4YIwqeXmSUsSP8Avniora21GOOSF1spQ20ssu4jgkg8e9Y39uyhlUMxOMYH9aT+05nn PzvjPbGCPSh1DJK51DXevEORNYxhzmTbH97jHPHpU/h9JortnuZI2ZpFwYx6Z/xrlxqEpcHLBT95 S3Arb0C6Mtw2T0Zf50o1FzJIbstByzR6PLMs17vV3wsbcBDk5wPxzVi1j0yctdRCKVnPzNuz9Rz0 rn9bcT31wJEUlJmAIAB+97Vc0TUbTTFeI27HeQWbdnp7VKrJ6MLxLelaJpNrayQ3tvBMzTMwYAnC 9h+lTS+HdAmkOI/LXjaUkOa2oTBcxLLEFZWGRxQ0KY/1ace1aWT1KTMhdAtohtght5U67pUGf5c0 Vq/Z4/8Ankn/AHzRRYq55f4cO3xFGq8D5uK0fE9tC/ie+dowWLLyf90UUUqjtEituU40UcAADHSp kVWUkqOvpRRXJIwQ+b5dgAAz14oQAlqKKjoU9yBmIYjsD3re8O8XUmMDheg96KK2pfGgjuZOtOy6 7dgE4+0N/wChGqtpK7q+5icdKKKJLQk7LwrK8lrIGYkBhj8a6EAeZ+FFFb0/hRtHYjkOxsLwKKKK 0KP/2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="523c98f95bfb1efa636299a4b6e2e8fa" Content-Transfer-Encoding: base64 Content-ID: <523c98f95bfb1efa636299a4b6e2e8fa> Content-Disposition: inline; filename="523c98f95bfb1efa636299a4b6e2e8fa" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 6DxP4iMCsqSkH2NeValrV3cz7VuJAWOB85FWdf1R7iZvmzWjpHhO1l09LnUVaSWddyoCR5YIyDx1 OOfxArysTiYw1kz6aMKeEpc092N0vS7rStSP9qkzRyqBb3AkZ4lc9mH5da6Jg5uQ1tMrl5U+2wxy EcLyWX9AfX8Ky991Z3dzaRiS6tFizcKeqBiRtz3YDvVxLcataw/2fGU8v/VzDgIe/Pf3FeXJyk/a VJWX4HmtOq3Ob0JLm/8AsOvx3ihoVmjMIkDZG7OfnBGCfQ1nBby38SHU7ZbyZLlPLlI3HYR0YfXp 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 2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="df66c0c912f55778217d41046ef1e3a6" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="df66c0c912f55778217d41046ef1e3a6" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 2PMymScVmabrf2nWbm2RV+xwKB9o5IaTGSoPTgVgyeMWuNIuogkXlKjbTx9Bz3571zWl+LJdOt57 RdNW4kkmMvzSEKm4YIwB6cZ9K8yFC92ehObjbzOs8TvpniHyZYdZsljgQ7t0g456+v5ZrC0Xw+2t LK+l3ttKICA27cv07VzOpaq0s4N1aWqKW5WCNVyvGVJAya7TwfqFqgvdL0xfLupJCLYKBl0AypJ6 Zxnk10yUqdO0DCPLKbcj1FrqDTbJHuJFSNEAyT1wO3rVm0vIru3WeIkxtnB/Gvn+a/1OfxVDFc3j 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 --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="02a05f161a0874678e5b15f4ba566e33" Content-Transfer-Encoding: base64 Content-ID: <02a05f161a0874678e5b15f4ba566e33> Content-Disposition: inline; filename="02a05f161a0874678e5b15f4ba566e33" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A salbgWJcgnYwPy9T2/rTbD/VssnDxHGM9B2q/JCTaylwCdpwOwrLt5z/AGhEsce9NgE38IUj+L37 D9a9m9mcG6L/AJZc7iPoKeLdj2q5G8fKlfm96RiwIwMsegrS5FihKvlj7uWPAHrRHDsU7uT3NWxC zSFm5I4z7/5/rSuqqQGIA68mn5iKUkO2Jty5GDkDvXN6VIRrbLg+XLvQHHUjn+hrsG2OhAcEgEnB /hHWuWjsnh1JZljwI5g27ORgnn9Dj8Kxqt80WjSC0ZV8U2bCaG6RVLCMjDDjIOR/OscWM11eRQ7h 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 DO77n//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="1b5761325af31f74c634c87c9ff67744" Content-Transfer-Encoding: base64 Content-ID: <1b5761325af31f74c634c87c9ff67744> Content-Disposition: inline; filename="1b5761325af31f74c634c87c9ff67744" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7hrWw8kwNaoFaX5CV5UYyBn25A9qzteeWx0GW5srpjdkRx242DaGLAA/qfyresrnT3eV5C24sdin dkDpzgVhalC13aurMI41HmDByQVOf6USVkTBe8kzhLjwvfz3Czy63PLKBlpZGYtn25qex1C9tfEE Ok6jeSPazjZDMCCyt1GM5PXjH5VbaSXZ9mGooZS/Ujnb6U220Vb7X7GWSQyvakuzAYHqD+BrljJu VmenVoxUG0iXX9CSJSEmZmLHZGRuyAPb3PWqnh/Qxbo89/YtdTF/khY/dX1PODk+ueldgNLiWQmd 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 K6BiOcetFFFAH//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="c446c76a41d68586fb0f16d3bf8073a1" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="c446c76a41d68586fb0f16d3bf8073a1" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8hSXyZY5f7jhqntb/N7FHHEnlgeWuRyBn8aroEaVFkz5efmx6VrRwacmoAwYZhGCBno24f0zUAT2 wzqK/wC/W6D89YlmM6gv+8a21HzU0OJnLqsmjeK7fUIycwsC4B+8ncf59K2viXokVpq0GtWWGsNW TzlK9BJ/EPxyD+J9Kwrmz024vXa7lAkA6FsV0nhUf8JHoOseEi/mrFH9t052PKSL95R7Ef1qHLUb pvluefqODSheQCR9aUIyFkYEMpIIPY0BWY4XrTMy1YXsul6lDd25VniOcEZVx0KkdwRkEehpL2KH 7S8lsCtvId8ak5Kg/wAJPt0/CnQWJlcIJkJ6lec4/LmrF8sSRxQRj5h0xSunsDdnZmUVNMYYFSM1 M60yiHBPNFTUUAQWkyxyJI/3cMrcdiCP61fs7lrnUEQKNq4we+1QQKoWCRSXCJO22Mnk1v2psrDV 5o7VUnSS3K5bnYT3HvTAXThm+B+tbadax9LGbrPoDWyvWmiomfOIZJ9ojQybiSSOasaN4iHh/wAT R6jHEGityokVR94Hhh+VUdNmSXU7+KUBtjhkz2z1/pWDcyFdVvIt2FL5GTWLjeTRtKVoJnXePtMg sfERu7IhrG/QXMDjoVYZrI0S38/UokWMSPnIT1rUs7hta8GNp0vzXelt5kB7tCx5H/AWP5N7Vl6A JE8QRBF3MxK45GMg80SeljOnH3rnZeJlD6IZYrQxmKMMJgRw3ccVw185a2t5MbWJJP1rtvFfnWGi JAjMGuCq/MegHJ6cc1jf8IjqGo6E2owz2wgt4nkZHYhzt69sVNMvFJHJv84Djv1+tMroNI8I6rq2 ly6hapE1srbGBfDZ9cVgSRtFI0bghlOCDWyOdMTdRTKKBkCja4PY1t2NxBPfzyPCUYxOV8s4G44x n261jtyDhcYrS0wBhI/G5UI/OqA1NI5nf/drXFZWkLiSQ/7Nao700XE4S7vZ7HW554G2vkjkZyKq RtJcSNKzEuxySe9GpknUJz/tGktuIRQ0rk3ex2Wh3/8AZmgTPEo+1TuUVz1CgCuh8JaZAYlu/ma7 JPmMT0Oc/wCFc1bW6DwzaTlfmNwRn8/8BWrZXctmyy27lGx26H61w1p2ke1gcF7em5X16HZaxZQ6 pD5V6CwXkEHG33rEvdMuLbww9zY6hMIUUgrn7yE+o+lUbnVLu8iZJpzsPJVRgH64rW3+R4AlMhJV 9yj6bsVEJ3dkPF4B0qTlN6nM6Jql3p9pJHbTukbnJFVbyK3vJJXlB85zu3jj61PaxqkBU+vUVVuT 5YLgfdGa9FWsfOO9zKk09lchXBHvRVx+XJHSin7pV5GZptq+oX8Nqhw0hxwPataDT4rWKSSC5WYO vQfQH+RB/GiivPr1ZxrKKemn6nNXqTVZRTstP1LWl8LKfarwfAP0oorvjsejHY87vW3Xkx/2jSxN stwT6UUU2Sd86CHw1pVv/GWMjD6j/wCvRHwooory63xH1uVK1EdIwCE+lausTND4I01OnnHP8zRR VUFqc+dSail5P9Dnrab9xt7r0+n/ANb/AAply2+E9zkA+4zRRXefLNGBqCF7skDjAooop87R61Gl F00z/9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="820d46f2e3bdd7ea2c45949feccf347f" Content-Transfer-Encoding: base64 Content-ID: <820d46f2e3bdd7ea2c45949feccf347f> Content-Disposition: inline; filename="820d46f2e3bdd7ea2c45949feccf347f" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A uKmKlVKULTwB+FaAcV4/1n7FYLZRvh5h85B/h9Pxry/JYg4H0rq/iUT/AMJFEuTs8kHHvk1ygVpG CqOtZy3GXLURy5hfG1u3vU7+G7srvgwy+lb/AIb0dFQTyx5Yj5a662gDHYoHPpXLOvZ2R1U6HMrs 8thtbiGcJNCynPRhxXdeGNXGianDHK+2zuiFfd/A3Zv6GrmraMsyFkTEi8g1wutSMsSEEgHhlPYj uK1pVef1MqtLk9D6GjWrca1x/wAO9dOveGYmlfdcWx8mXPU46H8Rj9a7WNa6DEeqVOsfFCLU6rTA h8uirQWimB5/0o56dqKUGkB5X8TYwNYtHA5aIgn6GuSsInnvEQDkkDmvS/HcFnNPpiXLbTJOE3DH yqep/lVL/hDBpGp29wJC0IbkNjI4rmrVFHRmtOm5ao17O3MNsiNjgdegq7Z3FnHcKHu4UOerNgfn ViSCY2pe1CM4GQG6GuXlvtVuPtEV55cXl42xspPmH0GBXBFOTueg3ZWOsuQJMlSpBHUV5b4xtGs7 7aSNsvzr7HvXoUUNxbaK0qrtYY2oe2a4PXbOa4jnkm3icSDapXO4c5Oew9q0oX57mVdXhY6D4L3R XUdStSfldEf8QSP617XHXhPwhbbrd2R3RR+pr3mLtXpx2PPJl6VOg4FRoOlWV6UwECjFFSDFFMDz nNANEsckLlJEKsOx4p0kE0Co0qFQ4yue4pCOH+ItrI+n29zEcCGTLfQjH+frVqxupbnw9YyXN/b3 Luh+WLl4wDgB/fpW9rOmy3OkvK0O6A/KSelcvZWkdtZ+VGu0EtxXJikuW7OnD35tDe027aJ1GcgH vW3cPaOBMVBbsoHeuOimIG08SL1HrVldV+zqZJA7Ko/hUtXAm09D0LJmxOwureUMVTcMgbhxXPa5 cwLoc0zANK0ZVR6t0pL/AFtJLYtHZSlADySo5P41wviHVJ5XhjDFEHJGe9bU6Tb1M6z5I3Z1Xwlt fLvZ3b7xxXt8ZGBXinwrnzrk1sXDKYPMBHqCB/WvaYEMhIBxgZr047HlltCOKnRqqIcCp0YYpgTh qKhzRTA4zVjuu0cKqlo1JCjAzTbwk29l/wBcf/ZjRRSEi23zeFXQgEbien+0K4aRQIhjuM0UVx4v 4UdWE3ZWuv8AkHCXo65IPpipbT97AN3cc4oorhWx3Lco31ooiLeZJg8FcjH8q8/1m4ea8QsF4jQY A46UUV3UNjlxcm7XZqeB7ya08Xae0LbTJII3HZlJAINfR8LlBkdcUUV1R2ONk6HNTKTgUUVQiTOa KKKYH//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="9e72c23bebbfd289ecf742b9dfb4fe60" Content-Transfer-Encoding: base64 Content-ID: <9e72c23bebbfd289ecf742b9dfb4fe60> Content-Disposition: inline; filename="9e72c23bebbfd289ecf742b9dfb4fe60" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A yZRE8DD5Tu4A9KzYdOBuA4A2dc+lWlkVn8sYAJxitaG1H2fhST0CgjJ/M1wq8j62VqUdepyPiCCX U7COCK5RFRsuMH5j/hXFX+nXunSiG7hMeRuTJyCD3B7161d6Zc/Y/MtIYjOx5hn7j6qTz0rzLxPq NxfXqRTx+ULcGNYs52nPPP1rePNfU8atClFXg3fzMlYyRkgY966fw/rWqaWjw2d26JJ820Hg+vHr XJgmtC21BoFBGMgYGe1VJMim4PdHY3Ok6p4nHm6fapJIgCyZICkjjAz3x/SsbXtP1CyhSyvrcxTJ iRF6gjocGul+HHiKK2RrGVgCJPMBbvnvz9K2/iZe2moafp+GieZJ8FlILBT1/DpUycYpMzoVJSru k1ozzeya4WPyQQueCW6dzSw372shOAQB2JrYmSD7PGAAqYLAgc5qjPZG++WGNSV5+RcE1lzJvU9r 2cqcLo1dH1Nb1JIJ+EYYTI+63rVrU9PnexjPBkif5iOmOxrV8L+DLeHbcalMAEXf5Abk+mfQU/Wp VmhnjWNSZHySw4/z7e9KW46ae6OclLMw2naMDjNFWGs9PmVGQbTtw65HDf5xRUNs2iopG5Z2rXV9 vxtBGQSOBXTQWZhTDYzXA2+sTwhdpOT1rpF8QGXT4cnG5irHPp/+unB2THiKcpSjfbY6q1tlkZnb kKuePQV4B4nlju/El7NEAI2lYqAMcZr6E0VnvdPm8kZdoyFP+P8AKuAk+E9xqUlxOL+CKVmyi4JV vqe3610002tDxcZUjCaUjyhIgxANL5BLFVBJ9BzWhqui6hpGoz2V3AySwttY9j7g9wa6/wCGKWsN 3eXEgVrgbUUE87SecDv0p9TOpKMKfPY8/EU0Thl3K6nIxwRV6ykkaTfKzOe5c5rv/iQbA6hZtbpG LpUPmEDBIyMZ/WuDnZRcO0YCqxyADwKzclJOx14WCXLVsWp7wsNqj2zXY+BdKa5le7kbakYy2fSu S0nTpb69ijUE7mA4Fe3aRpVvp9tDYrGDJP8AewP8+9Qo8p6Mqjm7MoSzi5tryG3QFYgAz45JPv8A TFcnfECJgQxZTz716klta6XDKlumzzJC7seSzVxmry2kt44CqASdxXue5qZK27FGbm7RWhzCWKyo G2jkdjmiurhtkEEYt7eF1xyWk2nP0opcnmJ15rRJnHTQOtuY5YgDztcHrU1wht4IIj8oK5Ix3q9c wJBp0UwZDNFyQeSuenHrWUWa7uo1y7FgCCanlaZrGadj0rwTc4TaONygA+9a+naPd6Xqai4nae2k Z2DZ27evyn1rA8ORLZhVdwCo3Y9K1V8U2d9fz2TyCIQOVPmHBJHQj/PNdVOXKtTxsdRjWTsT+OfD 9hq/hu+lWxSS8SItEwHzZHQcc+1eAQLc6YS4zDMT0ztK+1ew6x4tv01u10i2QKs4Db8Z3gnt6Yp+ r/D+y8TziWRVSUHLzREKTn1HQniql7z9058PNYely4i2u3kedaF4Vv8AxaL6eMPLIoX97IcAseev fgfqK19J+GimZIdcn+zuXwqg8+mK9AWGLwRp9pp9sk7QA7YzGNxkbJJzjoeh/CszVkvLzVY7ua8t 7WKFcrhd0nX0H4Ad6mXLG1i8NUq1XJJWg9mdHD4V0TTbAQ21pGpiXIk/iz6k/hT7RLa2haRZFkl5 +buB0/pVFb3W7uJibVLWxkcBhcth3QjkhR0+hNclrl5d2WpJd2ZASJSCpHyuPSlVlFPQ2yvDYmUZ e2ept6xqa7tivhiMAf1rlLi3PmiQc/WstteGpXbyAMkxzmJ+igd8+laVpfpKilsH3znP0rkneT1P eo8tOOm5qQKBEvNFQ/ZhcASLNtB7UVV32IdOLe5g5N7Gm4sVJwwz3rX0fR2aW3cghUYrkjr3oore mlKSuefj6ssPRk6fS5vatpN/puo3OpMVNnPtRTG3MfAHI9+a85TUpm8RPkqkjNh93c/4UUVVeKhL Q5curzrw989HsNBW8ntr24u4BNFkRKAzFNwwR2P4V2Flol7bWzxi8RkJ3I2MHp0P6c0UVrSdlzI8 /M6MJ+7LqY2p2uoTyDTVGbn/AF0ZY/I2OCfXHzCrEPhKC2WB57vzpFPmTAr/AKx8/oO2KKKhpNt2 OjBw9lSjTjsR6tcgbnuZika84WuM1jVUv28m3I8pR1xjn6UUVyyep9DQgpQu+hw+oacpMiouJM5D ZOfwqPT5zBIEu0aNDwZUGB+I/wAKKKVzXkUtWdva2sr2yNFMHQjgryKKKKo5z//Z --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="9f3622884fd6f79e89e59c0598dfdfa2" Content-Transfer-Encoding: base64 Content-ID: <9f3622884fd6f79e89e59c0598dfdfa2> Content-Disposition: inline; filename="9f3622884fd6f79e89e59c0598dfdfa2" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAMgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7lXyrYzVdyeciuig0tFOcZq21hAY8GNSfcVx1cTGCuy4x1OCnBd8KKuWVqc/Ma1r3R0gcuufYAVT aRoRlcA9OmTXPUxqUbo9DDYRT94ZcWyLJkkE46Z5rn7/AFyCzuVt/Kk8w8L3BP1FS6/rF1YWTTsS EPG1erH0rF8D3J1fU7q8a2aVrOIyKhK7i5PCjPHIB/Kqo4hyXNJaDq0uSVkXrjXL2xkjeeKPyz/A wKNj2JP866mLU4W0/wC0od0e3d156dKyvEd7NeaWsJ0qYyTJlo8j92DkAn8RXn3hvWBaoPOkeS0a QrsDDG4d8HqKh1JSTsW4xi0n1PU0umZcvx3xnOKasm9+BWTa6zaX7FIXbeoyQRjirUdwysT/AA1t CtyrUwnh7/Ay3OrY6VnTQ57VfFxvOGpGiDdOKpYhSJeGlEyCmPWirstuwfrxRS9oivZs9DhOQKkd wq1DDjbROMITmuWpFT3OeMfesY2pXfzH0zxWBLcYYuRk1qXyncxIxgcVyWsaj9iZVC7nfoP89q8q u5OSjA+jw0YRhdmT4mnmvLiOEEEdlx90dya5vwheuvjeG2syRAd8UjjgkkdQfqBVfU5tVvbiVYhI vmAo0nQBc84FN8PNHpmsLywkXiNl6bjwc/hXr4ShNxcd3Y83GVoc3MtFc7TxrrEmnq8Vq9zNdSRe Ske0jqRgk9PyrkdP0mWytktVc/aIWEh3crn+LFd1q2tNBpwnmXn+D5TyT2rmpZgbNpmy0m7BycVT pzjT5raN7kSkpTs3sjSgt1uNtzZosd5CM7QcBgf5g1t2kzXNtHM67Gbhl/ukcEVzfhy5ka8WDO5O SD3AIPH04rqQm1SAuMsc49e9R5GlOy1LEZA96vJyKp20ZYDIzirohZcECs0tS5VIkDht3FFTFGzR Wpg5HVRTADmnPOGGBWfJIBUaSndUU3zHG3rdFiezWcc5Brjtf0mSPVLe62b7Zfkkz2ypA/XH513k TK8YA/GoZ7fzLSbKhwVOM9PasqkYxle2p1wrvls3oeKG0kVbiSUsNqnejHnf71yqarZJdQzNFIVQ 55PX3r0XXYRDCyvvZnYZ4yxxj+mK8vuLBTf3YUuUil24HQZzn9a9DAO6l5oyxUVJJHaa94o0LUtO hcQMLhAMkfr3/pXMWepJqN/PBDIUhMe5VJ4BGf8AP41j6jBCsYaFyR0GBitHwHpn27Ub/JcFLUlc DqSQP61Tp+wwzgm7eZjTlzVUjpvD8zwapDgj+6QfTn/GvRhH5kQbGDn5q8vtrCeF5OWRo2AH07HP 6flXpuiTtPYRCQ7m2jJrh9omzvirKxo2cWOe1ayQI6YI61WtUVOCM1fWRWPy1zVZtS0M5J7lU2AB 6n8qK0c/Sio+sMyMmU1GD0oorvw+xzPc2bL/AFYq8gBRwQCCpoorKt8ZqvhPJ/GXEiY4zu/9BFeY 7Ve/1LcoOFJ5HfAoortyz4zWv8KMWcnyl5ruPhgAbq+4HQD+VFFd2c/wV6I48D/GZu2vzX97nn5W 6/7xFb/h0nzZBk4D4A9OtFFfMrc9h7HVr/rB9KnHDcUUU6u5nL4S4n3RRRRXKzA//9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="176e1430ea3c14a19d1c0e2d645bfdf4" Content-Transfer-Encoding: base64 Content-ID: <176e1430ea3c14a19d1c0e2d645bfdf4> Content-Disposition: inline; filename="176e1430ea3c14a19d1c0e2d645bfdf4" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A s3kQkKlSRMG+Qr1/z/nvUFtM8rs0mUmT5WjP8P0+vrVi1dxk3ACuWxuPHTt/Wm3VuXcSxcSL91sZ B9j7V4WJuo2a+f8AXQ4lbdEclv5rCRH2TL0cfyPqKkhkMmUddsi/eX+o9RQzCIIXyjMM42scfiBU jTRqglSEyyoDt3HaDkfj/KuSCk1yVtLf19w7rdET2/mngkOPulRyKs6dpV1qN0traCOScjdIgk2i MZxk9SPpiqtuovnCs5PBLCRyQoHU49sGsy68XxrNFaWsL2vku6xPGADIMkZ3DqDxkf8A1q7MFhed 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 fePNFFFTYdz/2Q== --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="97327dd26fc033750c2cf33928aaa100" Content-Transfer-Encoding: base64 Content-ID: <97327dd26fc033750c2cf33928aaa100> Content-Disposition: inline; filename="97327dd26fc033750c2cf33928aaa100" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7Nte8MaVaY+1rHLLGSVLckiuIvkfW9Bku5ZScfM+1egqnL4dg1S1hvJ7eVZ3cmJW4AWuk8HxWNhC 9pLexyNKTugPbFXCktJp7hKbtKNr2MDSdbv9MvLW4s51uLNSEMBbDKPb1/n7V7Donia31RH2SozI vzoM70PoQRmuEktfDukaiGS033TMXRe31rnNW8Vadaa1FdW93L/aQcDgApjgbT3Nc9nTvZ6nTUcJ 2a2aNXxBqS3uo3GCbpvNwqg/w1CNehjL2lqPIkVeAo6GsnVdba+uDqMUVrDPIPM8y3BCt2O4Hv0+ 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 o6evl2ECeiAUVJDxCg9qK9BLQ+WnK8mz/9k= --b1_6c1440afcf761e10c2dd28a77d575067 Content-Type: image/jpeg; name="31ecb3383f1e032e9c5330eee25dddcd" Content-Transfer-Encoding: base64 Content-ID: <31ecb3383f1e032e9c5330eee25dddcd> Content-Disposition: inline; filename="31ecb3383f1e032e9c5330eee25dddcd" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9yMqK4RnUMRnBNSRlXGVYEVzXiddSSyt9QsUmjmhcb4lALOp42nqOuPXrmuDuPF3i+xluLebw28k sSea+wZOw5IJCn8OPQ1TYrHsgMfPzg7evPSuc1fx74d0adoLi9VpREZCickYOMH3z29q+fbj4k6t qcrzfaXiEbj91GCuMnGBg8isW3ivPFWrymBiz4bzOdo9zzwDwKjmKse0aj8VDPaI+laU6MwJ/exs 75HdVXJ/EiqWhfGZ7Ro4tetZDAxYGZF/eRnPAZcAYx6V5zokEmhw6jBHcXX2yMYuFJPyHOM7M/N1 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 --b1_6c1440afcf761e10c2dd28a77d575067-- From dan.carpenter@oracle.com Thu May 16 02:53:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 895797F37 for ; Thu, 16 May 2013 02:53:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 736318F8049 for ; Thu, 16 May 2013 00:53:46 -0700 (PDT) X-ASG-Debug-ID: 1368690825-04cbb05fe32f8a00001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id tyRKh8pJi2l0jaCL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 16 May 2013 00:53:45 -0700 (PDT) X-Barracuda-Envelope-From: dan.carpenter@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4G7rcMK002670 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 16 May 2013 07:53:39 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4G7rbWD005297 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 16 May 2013 07:53:38 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4G7rbUM027508; Thu, 16 May 2013 07:53:37 GMT Received: from elgon.mountain (/197.237.137.111) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 00:53:36 -0700 Date: Thu, 16 May 2013 10:53:30 +0300 From: Dan Carpenter To: Ben Myers Cc: Alex Elder , xfs@oss.sgi.com, kernel-janitors@vger.kernel.org Subject: [patch] xfs: bug widening binary "not" operation Message-ID: <20130516075330.GB7494@elgon.mountain> X-ASG-Orig-Subj: [patch] xfs: bug widening binary "not" operation MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368690825 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131104 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines The problem here is: ioffset = offset & ~(rounding - 1); "offset" and "ioffset" are type xfs_off_t (__s64) and "rounding" is unsigned int. The "offset & ~(rounding - 1)" clears the high 32 bits and which is unintentional. This is a static checker fix so I'm not sure how much difference this makes in real life. Signed-off-by: Dan Carpenter diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..9f557c6 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -1453,7 +1453,7 @@ xfs_free_file_space( xfs_mount_t *mp; int nimap; uint resblks; - uint rounding; + xfs_off_t rounding; int rt; xfs_fileoff_t startoffset_fsb; xfs_trans_t *tp; From stan@hardwarefreak.com Thu May 16 06:36:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 155E57F37 for ; Thu, 16 May 2013 06:36:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A3102AC002 for ; Thu, 16 May 2013 04:36:26 -0700 (PDT) X-ASG-Debug-ID: 1368704185-04bdf0422530b240001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id VXErs9qMEn2kA1gq for ; Thu, 16 May 2013 04:36:25 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id CE38A6C0A7; Thu, 16 May 2013 06:36:24 -0500 (CDT) Message-ID: <5194C4BB.9080406@hardwarefreak.com> Date: Thu, 16 May 2013 06:36:27 -0500 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: David Oostdyk , linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: high-speed disk I/O is CPU-bound? References: <518CFE7C.9080708@ll.mit.edu> <20130516005913.GE24635@dastard> X-ASG-Orig-Subj: Re: high-speed disk I/O is CPU-bound? In-Reply-To: <20130516005913.GE24635@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1368704185 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/15/2013 7:59 PM, Dave Chinner wrote: > [cc xfs list, seeing as that's where all the people who use XFS in > these sorts of configurations hang out. ] > > On Fri, May 10, 2013 at 10:04:44AM -0400, David Oostdyk wrote: >> Hello, >> >> I have a few relatively high-end systems with hardware RAIDs which >> are being used for recording systems, and I'm trying to get a better >> understanding of contiguous write performance. >> >> The hardware that I've tested with includes two high-end Intel >> E5-2600 and E5-4600 (~3GHz) series systems, as well as a slightly >> older Xeon 5600 system. The JBODs include a 45x3.5" JBOD, a 28x3.5" >> JBOD (with either 7200RPM or 10kRPM SAS drives), and a 24x2.5" JBOD >> with 10kRPM drives. I've tried LSI controllers (9285-8e, 9266-8i, >> as well as the integrated Intel LSI controllers) as well as Adaptec >> Series 7 RAID controllers (72405 and 71685). So, you have something like the following raw aggregate drive b/w, assuming average outer-inner track 120MB/s streaming write throughput per drive: 45 drives ~5.4 GB/s 28 drives ~3.4 GB/s 24 drives ~2.8 GB/s The two LSI HBAs you mention are PCIe 2.0 devices. Note that PCIe 2.0 x8 is limited to ~4GB/s each way. If those 45 drives are connected to the 9285-8e via all 8 SAS lanes, you are still losing about 1/3rd of the aggregate drive b/w. If they're connected to the 71685 via 8 lanes and this HBA is in a PCIe 3.0 slot then you're only losing about 600MB/s. >> Normally I'll setup the RAIDs as RAID60 and format them as XFS, but >> the exact RAID level, filesystem type, and even RAID hardware don't >> seem to matter very much from my observations (but I'm willing to >> try any suggestions). Lack of performance variability here tends to suggest your workloads are all streaming in nature, and/or your application profile isn't taking full advantage of the software stack and the hardware, i.e. insufficient parallelism, overlapping IOs, etc. Or, see down below for another possibility. These are all current generation HBAs with fast multi-core ASICs and big write cache. RAID6 parity writes even with high drive counts shouldn't significantly degrade large streaming write performance. RMW workloads will still suffer substantially as usual due to rotational latencies. Fast ASICs can't solve this problem. > Document them. There's many ways to screw them up and get bad > performance. More detailed info always helps. >> As a basic benchmark, I have an application >> that simply writes the same buffer (say, 128MB) to disk repeatedly. >> Alternatively you could use the "dd" utility. (For these >> benchmarks, I set /proc/sys/vm/dirty_bytes to 512M or lower, since >> these systems have a lot of RAM.) >> >> The basic observations are: >> >> 1. "single-threaded" writes, either a file on the mounted >> filesystem or with a "dd" to the raw RAID device, seem to be limited >> to 1200-1400MB/sec. These numbers vary slightly based on whether >> TurboBoost is affecting the writing process or not. "top" will show >> this process running at 100% CPU. > > Expected. You are using buffered IO. Write speed is limited by the > rate at which your user process can memcpy data into the page cache. > >> 2. With two benchmarks running on the same device, I see aggregate >> write speeds of up to ~2.4GB/sec, which is closer to what I'd expect >> the drives of being able to deliver. This can either be with two >> applications writing to separate files on the same mounted file >> system, or two separate "dd" applications writing to distinct >> locations on the raw device. 2.4GB/s is the interface limit of quad lane 6G SAS. Coincidence? If you've daisy chained the SAS expander backplanes within a server chassis (9266-8i/72405), or between external enclosures (9285-8e/71685), and have a single 4 lane cable (SFF-8087/8088/8643/8644) connected to your RAID card, this would fully explain the 2.4GB/s wall, regardless of how many parallel processes are writing, or any other software factor. But surely you already know this, and you're using more than one 4 lane cable. Just covering all the bases here, due to seeing 2.4 GB/s as the stated wall. This number is just too coincidental to ignore. >> (Increasing the number of writers >> beyond two does not seem to increase aggregate performance; "top" >> will show both processes running at perhaps 80% CPU). So you're not referring to dd processes when you say "writers beyond two". Otherwise you'd say "four" or "eight" instead of "both" processes. > Still using buffered IO, which means you are typically limited by > the rate at which the flusher thread can do writeback. > >> 3. I haven't been able to find any tricks (lio_listio, multiple >> threads writing to distinct file offsets, etc) that seem to deliver >> higher write speeds when writing to a single file. (This might be >> xfs-specific, though) > > How about using direct IO? Single threaded direct IO will beslower > than buffered IO, but throughput should scale linearly with the > number of threads if the IO size is large enough (e.g. 32MB). Try this quick/dirty parallel write test using dd with O_DIRECT file based output using 1MB IOs. It fires up 16 dd processes writing 16 files in parallel, 4GB each. This test should give a fairly accurate representation of real hardware throughput. Sum the MB/s figures from all dd processes for the aggregate b/w. #!/bin/sh for i in {1..16} do dd if=/dev/zero of=/XFS_dir/file.$i oflag=direct bs=1M count=4k & done wait >> 4. Cheap tricks like making a software RAID0 of two hardware RAID >> devices does not deliver any improved performance for >> single-threaded writes. As Dave C points out, you'll never reach peak throughput with single threaded buffered IO. You'd think it would be easy to hit peak write speed with a single 7.2k SATA drive using a single write thread. Here's a salient demonstration of why this may not be the case. $ dd if=/dev/zero of=/XFS-mount/one-thread bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 17.8513 s, 58.7 MB/s Now a 4 thread variant of the script mentioned above: #!/bin/sh for i in {1..4} do dd if=/dev/zero of=/XFS-mount/file.$i oflag=direct bs=1M count=512 & done wait $ test.sh 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 20.3012 s, 26.4 MB/s 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 20.3006 s, 26.4 MB/s 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 20.3204 s, 26.4 MB/s 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 20.324 s, 26.4 MB/s Single thread buffered write: 59 MB/s Quad thread O_DIRECT write: 105 MB/s Again both targeting a single SATA disk. I just ran these tests on a 13 year old machine with dual 550MHz Celeron CPUs and 384MB of PC100 DRAM, vanilla kernel 3.2.6, deadline elevator. The WD SATA disk is attached via a $20 USD Silicon Image 3512 SATA 150 32 bit PCI card lacking NCQ support. The system bus is 33MHz/32 bit PCI only, 132MB/s peak, tested at 115MB/s net after PCI 2.1 protocol overhead. I keep this system around for such demonstrations. Note that the SATA card and drive are 10 years newer than the core system, acquired in 2009. On this machine the single thread buffered IO dd run reaches only some 51% of the net PCI throughput and eats 98% of one of the two 550MHz CPUs. This is due to a number of factors including, but not limited to, memcpy as Dave C points out, tiny 128KB L2 cache, no L3, the fact that this platform performs snooping on the P6 bus, and other inefficiencies of the 440BX chipset. Now for the kicker. Quad parallel dd direct IO reaches 92% of net PCI throughput with each dd process eating only 14% CPU, or 28% of each CPU total. Its aggregate file write throughput into XFS is some 78% higher than single thread dd using buffered IO. > (Have not thoroughly tested this >> configuration fully with multiple writers, though.) You may not see a 78% bump with parallel O_DIRECT, but it should be substantial nonetheless. > Of course not - you are CPU bound and nothing you do to the storage > will change that. I'd agree 100% with Chinner if not for that pesky coincidental 2.4GB/s number reported as the "brick wall". A little more info should clear this up. -- Stan From dmonakhov@openvz.org Thu May 16 07:07:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_FRT_STOCK2 autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 88FE57F37 for ; Thu, 16 May 2013 07:07:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id CB9CAAC003 for ; Thu, 16 May 2013 05:07:53 -0700 (PDT) X-ASG-Debug-ID: 1368706065-04cb6c53a33087b0001-NocioJ Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) by cuda.sgi.com with ESMTP id eAOb9nf09tITIqrK (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 05:07:47 -0700 (PDT) X-Barracuda-Envelope-From: dmonakhov@openvz.org X-Barracuda-Apparent-Source-IP: 195.214.232.25 Received: from mct-mail.qa.sw.ru ([10.29.1.112]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id r4GC7XCV010938; Thu, 16 May 2013 16:07:35 +0400 (MSK) From: Dmitry Monakhov To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, Dmitry Monakhov Subject: [PATCH] xfstests: test data integrity under disk failure Date: Thu, 16 May 2013 16:07:32 +0400 X-ASG-Orig-Subj: [PATCH] xfstests: test data integrity under disk failure Message-Id: <1368706052-24391-1-git-send-email-dmonakhov@openvz.org> X-Mailer: git-send-email 1.7.7.6 X-Barracuda-Connect: mailhub.sw.ru[195.214.232.25] X-Barracuda-Start-Time: 1368706067 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131120 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Parallels team have old good tool called hwflush-check which is server/client application for testing data integrity under system/disk failure conditions. Usually we run hwflush-check on two different hosts and use PMU to trigger real power failure of the client as a whole unit. This tests may be used for SSD checking (some of them are known to have probelms with hwflush). I hope it will be good to share it with community. This tests simulate just one disk failure while client system should survive this failure. This test extend idea of shared/305. 1) Run hwflush-check server and client on same host as usual 2) Simulare disk failure via blkdev failt injection API aka 'make-it-fail' 3) Umount failed device 4) Makes disk operatable again 5) Mount filesystem 3) Check data integrity Surprasingly this 'single disk failure test' uncover data loss on reccent kernel (3.10-rc1) for EXT4 and XFS. Signed-off-by: Dmitry Monakhov --- aclocal.m4 | 1 + configure.ac | 2 + include/builddefs.in | 1 + src/Makefile | 4 +- src/hwflush-check.c | 775 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/shared/313 | 154 ++++++++++ tests/shared/313.out | 64 ++++ tests/shared/group | 1 + 8 files changed, 1000 insertions(+), 2 deletions(-) create mode 100644 src/hwflush-check.c mode change 100644 => 100755 tests/generic/311 create mode 100755 tests/shared/313 create mode 100644 tests/shared/313.out diff --git a/aclocal.m4 b/aclocal.m4 index 5739004..9ae574b 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -44,6 +44,7 @@ m4_include([m4/package_attrdev.m4]) m4_include([m4/package_dmapidev.m4]) m4_include([m4/package_gdbmdev.m4]) m4_include([m4/package_globals.m4]) +m4_include([m4/package_pthread.m4]) m4_include([m4/package_utilies.m4]) m4_include([m4/package_uuiddev.m4]) m4_include([m4/package_xfslibs.m4]) diff --git a/configure.ac b/configure.ac index bfae106..484fa43 100644 --- a/configure.ac +++ b/configure.ac @@ -70,6 +70,8 @@ in AC_PACKAGE_WANT_FALLOCATE AC_PACKAGE_WANT_LINUX_PRCTL_H AC_PACKAGE_WANT_LINUX_FS_H + AC_PACKAGE_NEED_PTHREAD_H + AC_PACKAGE_NEED_PTHREADMUTEXINIT ;; esac diff --git a/include/builddefs.in b/include/builddefs.in index 6519c13..f7a9a14 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -23,6 +23,7 @@ LIBGDBM = @libgdbm@ LIBUUID = @libuuid@ LIBHANDLE = @libhdl@ LIBDM = @libdm@ +LIBPTHREAD = @libpthread@ LIBTEST = $(TOPDIR)/lib/libtest.la PKG_NAME = @pkg_name@ diff --git a/src/Makefile b/src/Makefile index c18ffc9..cb0ca76 100644 --- a/src/Makefile +++ b/src/Makefile @@ -18,11 +18,11 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \ locktest unwritten_mmap bulkstat_unlink_test t_stripealign \ bulkstat_unlink_test_modified t_dir_offset t_futimens t_immutable \ stale_handle pwrite_mmap_blocked t_dir_offset2 seek_sanity_test \ - seek_copy_test t_readdir_1 t_readdir_2 fsync-tester + seek_copy_test t_readdir_1 t_readdir_2 fsync-tester hwflush-check SUBDIRS = -LLDLIBS = $(LIBATTR) $(LIBHANDLE) $(LIBACL) +LLDLIBS = $(LIBATTR) $(LIBHANDLE) $(LIBACL) $(LIBPTHREAD) ifeq ($(HAVE_XLOG_ASSIGN_LSN), true) LINUX_TARGETS += loggen diff --git a/src/hwflush-check.c b/src/hwflush-check.c new file mode 100644 index 0000000..aa2d1a5 --- /dev/null +++ b/src/hwflush-check.c @@ -0,0 +1,775 @@ +/* + * Copyright (c) 2011-2013 Parallels Inc. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Compile: + gcc hwflush-check.c -o hwflush-check -lpthread +Usage example: +------- + 1. On a server with the hostname test_server, run: hwflush-check -l + 2. On a client, run: hwflush-check -s test_server -d /mnt/test -t 100 + 3. Turn off the client, and then turn it on again. + 4. Restart the client: hwflush-check -s test_server -d /mnt/test -t 100 + 5. Check the server output for lines containing the message "cache error detected!" + +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum prealloc_type { + PA_NONE = 0, + PA_POSIX_FALLOC = 1, + PA_WRITE = 2, + PA_LAST = PA_WRITE, +}; + +static int alloc_type = PA_POSIX_FALLOC; +static int is_server = 0; +static int is_check_stage = 0; +static int is_prepare = 0; +static int use_fdatasync = 0; +static char *host = NULL; +static char *port = "32000"; +static char *dir = NULL; +/* block size should be a multiply of 8 */ +static off_t blocksize = 16 * 1024 - 104; +static off_t blocksmax = 1024 + 1; +static unsigned int threads = 32; +#define THREADS_MAX 1024 + +static int exit_flag = 0; + +/* returns 0 if ok or -errno if error */ +int swrite(int fd, void *buf, int sz) +{ + int w = sz; + + while (w) { + int n = write(fd, buf, w); + if (n < 0) { + if (errno == EINTR) + continue; + return -errno; + } + if (n == 0) + return -EIO; + buf += n; + w -= n; + } + return sz; +} + +/* returns number of bytes read */ +int sread(int fd, void *buf, int sz) +{ + int r = 0; + while (sz) { + int n = read(fd, buf, sz); + if (n < 0) { + if (errno == EINTR) + continue; + return -errno; + } + if (n == 0) + break; + buf += n; + r += n; + sz -= n; + } + return r; +} + +static int connect_to_server(void) +{ + struct addrinfo *result, *rp, hints; + int sock = -1; + int ret; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG; + + /* resolve address */ + ret = getaddrinfo(host, port, &hints, &result); + if (ret != 0) { + fprintf(stderr, "getaddrinfo() failed: %s\n", gai_strerror(ret)); + return -1; + } + + /* getaddrinfo() returns a list of address structures. + Try each address until we successfully connect(2). + If socket(2) (or connect(2)) fails, we (close the socket + and) try the next address. */ + for (rp = result; rp != NULL; rp = rp->ai_next) { + sock = socket(rp->ai_family, rp->ai_socktype, + rp->ai_protocol); + if (sock < 0) { + fprintf(stderr, "Could not create socket: %s\n", strerror(errno)); + continue; + } + + if (connect(sock, rp->ai_addr, rp->ai_addrlen) < 0) { + fprintf(stderr, "connect() failed: %s\n", strerror(errno)); + close(sock); + sock = -1; + continue; + } + + fprintf(stderr, "Connected to %s:%s\n", host, port); + break; /* Success */ + } + + if (rp == NULL) /* No address succeeded */ + fprintf(stderr, "Could not connect to server\n"); + + /* addrinfo is not needed any longer, free it */ + freeaddrinfo(result); + + return sock; +} + +static uint64_t find_last_counter(int fd, char *buf, off_t *offset) +{ + uint64_t cnt = 0; + off_t i, len; + + for (i = 0; i < blocksmax; i++) { + uint64_t t; + unsigned int c, j; + + len = sread(fd, buf, blocksize); + if (len < 0) { + fprintf(stderr, "read() failed: %s\n", strerror(-len)); + break; + } + if (len != blocksize) { + fprintf(stderr, "Failed to read block %llu\n", + (unsigned long long)i); + break; + } + + t = *(uint64_t*)buf; + if (cnt >= t) + break; + + /* validate block */ + memset(&c, t & 0xff, sizeof(c)); + for (j = sizeof(t); j < blocksize; j += sizeof(c)) + if (c != *(unsigned int*)(buf + j)) + break; + if (j < blocksize) { + fprintf(stderr, "Block %llu with number %llu is invalid " + "at %d, blocksize %llu \n", (unsigned long long)i, + (unsigned long long)t, j, + (unsigned long long)blocksize); + break; + } + + /* ok, block is good, store counter */ + cnt = t; + } + + *offset = blocksize * i; + + return cnt; +} + +/* press Ctrl-C twice on freeze */ +static void sighandler(int sig) +{ + if (exit_flag) { + signal(sig, SIG_DFL); + raise(sig); + } + exit_flag = 1; +} + +struct client { + int sock; + pthread_mutex_t mutex; +}; + +struct worker { + pthread_t thr; + uint32_t id; + struct client *cl; +}; + +enum { + REP_FL_UPDATE = 1, +}; + +struct report { + uint32_t id; + uint32_t flags; + uint64_t cnt; +} __attribute__((aligned(8))); + +static void *run_client_thread(void *arg) +{ + struct worker *w = arg; + int ret; + int fd; + off_t offset = 0; + char *buf; + char file[strlen(dir) + 6]; + struct report rp = { + .id = w->id, + .flags = 0, + .cnt = 0 + }; + + buf = malloc(blocksize); + if (!buf) { + fprintf(stderr, "malloc() failed\n"); + return NULL; + } + + snprintf(file, sizeof(file), "%s/%04u", dir, w->id); + /* first try to find last used counter */ + fd = open(file, O_RDWR, 0666); + if (fd < 0) { + if (is_check_stage) { + fprintf(stderr, "Failed to open file '%s': %s\n", file, strerror(errno)); + goto out_free; + } + if ((errno != ENOENT) || ((fd = creat(file, 0666)) < 0)) { + fprintf(stderr, "Failed to open file '%s': %s\n", file, strerror(errno)); + goto out_free; + } + switch (alloc_type) { + case PA_NONE: + break; + case PA_POSIX_FALLOC: + if (posix_fallocate(fd, 0, blocksize * blocksmax) < 0) { + fprintf(stderr, "fallocate() failed: %s\n", + strerror(errno)); + goto out_close_fd; + } + break; + case PA_WRITE: { + off_t num, count = blocksize * blocksmax; + int ret; + memset(buf, 0, blocksize); + while (count) { + num = blocksize < count ? blocksize : count; + ret = write(fd, buf, num); + if (ret < 0) { + fprintf(stderr, "write() failed: %s\n", + strerror(errno)); + goto out_close_fd; + } + count -= ret; + } + lseek(fd, 0, SEEK_SET); + break; + } + default: + fprintf(stderr, "Incorrect prealloc type "); + goto out_close_fd; + break; + } + + } else { + int r; + rp.cnt = find_last_counter(fd, buf, &offset); + if (lseek(fd, offset, SEEK_SET) < 0) { + fprintf(stderr, "lseek() failed: %s\n", strerror(errno)); + goto out_close_fd; + } + fprintf(stderr, "id %u: latest valid id %llu\n", w->id, (unsigned long long)rp.cnt); + rp.id = w->id; + pthread_mutex_lock(&w->cl->mutex); + r = swrite(w->cl->sock, &rp, sizeof(rp)); + pthread_mutex_unlock(&w->cl->mutex); + if (r < 0) { + fprintf(stderr, "Failed to write to socket: %s\n", strerror(-r)); + goto out_close_fd; + } + if (is_check_stage) + goto out_close_fd; + } + if (fsync(fd)) { + fprintf(stderr, "fsync(2) failed: %s\n", strerror(errno)); + goto out_close_fd; + } + if (is_prepare) + goto out_close_fd; + + rp.flags = REP_FL_UPDATE; + while (!exit_flag) { + int r; + + if (offset >= blocksize * blocksmax) { + offset = 0; + lseek(fd, 0, SEEK_SET); + } + + rp.cnt++; + *(uint64_t*)buf = rp.cnt; + memset(buf + sizeof(rp.cnt), rp.cnt & 0xff, blocksize - sizeof(rp.cnt)); + r = swrite(fd, buf, blocksize); + if (r != blocksize) { + fprintf(stderr, "Failed to write to file '%s': %s\n", file, strerror(-r)); + break; + } + if (use_fdatasync) + ret = fdatasync(fd); + else + ret = fsync(fd); + + if (ret < 0) { + fprintf(stderr, "%s failed: %s\n", use_fdatasync ? + "fdatasync()" : "fsync()", strerror(errno)); + break; + } + + pthread_mutex_lock(&w->cl->mutex); + r = swrite(w->cl->sock, &rp, sizeof(rp)); + pthread_mutex_unlock(&w->cl->mutex); + if (r < 0) { + fprintf(stderr, "Failed to write to socket: %s\n", strerror(-r)); + break; + } + + offset += blocksize; + } + +out_close_fd: + close(fd); +out_free: + free(buf); + + return NULL; +} + +static int run_client(void) +{ + struct stat st; + int ret = 0; + int flag = 1; + int i; + struct client clnt; + struct worker *thrs; + + if (stat(dir, &st) < 0) { + if (errno != ENOENT) { + fprintf(stderr, "stat() for '%s' failed: %s\n", dir, strerror(errno)); + return -1; + } + if (mkdir(dir, 0777) < 0) { + fprintf(stderr, "Failed to create directory '%s': %s\n", dir, strerror(errno)); + return -1; + } + } else if (!S_ISDIR(st.st_mode)) { + fprintf(stderr, "'%s' is not a directory\n", dir); + return -1; + } + + clnt.sock = connect_to_server(); + if (clnt.sock < 0) + return -1; + + if (setsockopt(clnt.sock, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(int)) < 0) { + fprintf(stderr, "setsockopt(TCP_NODELAY) failed: %s\n", strerror(errno)); + ret = -1; + goto out_close_sock; + } + + /* make things fancier for the server */ + signal(SIGINT, sighandler); + signal(SIGTERM, sighandler); + + thrs = malloc(threads * sizeof(struct worker)); + if (!thrs) { + fprintf(stderr, "malloc() failed\n"); + ret = -1; + goto out_close_sock; + } + + pthread_mutex_init(&clnt.mutex, NULL); + + for (i = 0; i < threads; i++) { + thrs[i].id = i; + thrs[i].cl = &clnt; + if (pthread_create(&thrs[i].thr, NULL, run_client_thread, (void*)&thrs[i])) { + fprintf(stderr, "Failed to start thread %u\n", i); + ret = -1; + break; + } + } + + for (i--; i >= 0; i--) + pthread_join(thrs[i].thr, NULL); + + free(thrs); +out_close_sock: + close(clnt.sock); + + return ret; +} + +static int prepare_for_listening(void) +{ + struct addrinfo *result, *rp, hints; + int sock = -1; + int ret; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; /* For wildcard IP address */ + + ret = getaddrinfo(NULL, port, &hints, &result); + if (ret != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); + return -1; + } + + /* getaddrinfo() returns a list of address structures. + Try each address until we successfully bind(2). + If socket(2) (or bind(2)) fails, we (close the socket + and) try the next address. */ + + for (rp = result; rp != NULL; rp = rp->ai_next) { + int flag = 1; + + sock = socket(rp->ai_family, rp->ai_socktype, + rp->ai_protocol); + if (sock < 0) { + fprintf(stderr, "Could not create socket: %s\n", strerror(errno)); + continue; + } + + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(int)) < 0) { + fprintf(stderr, "setsockopt(SO_REUSEADDR) failed: %s\n", strerror(errno)); + close(sock); + sock = -1; + continue; + } + + if (bind(sock, rp->ai_addr, rp->ai_addrlen) < 0) { + fprintf(stderr, "bind() failed: %s\n", strerror(errno)); + close(sock); + sock = -1; + continue; + } + + fprintf(stderr, "Listening on port %s\n", port); + break; /* Success */ + } + + if (rp == NULL) /* No address succeeded */ + fprintf(stderr, "Could not bind\n"); + + freeaddrinfo(result); /* No longer needed */ + + return sock; +} + +static int set_sock_keepalive(int sock) +{ + int val = 1; + + /* enable TCP keepalives on socket */ + if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &val, + sizeof(val)) < 0) { + fprintf(stderr, "setsockopt() failed: %s\n", strerror(errno)); + return -1; + } + /* set idle timeout to 1 second */ + if (setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &val, + sizeof(val)) < 0) { + fprintf(stderr, "setsockopt() failed: %s\n", strerror(errno)); + return -1; + } + /* set consecutive interval to 1 second */ + if (setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &val, + sizeof(val)) < 0) { + fprintf(stderr, "setsockopt() failed: %s\n", strerror(errno)); + return -1; + } + /* set number of keepalives before dropping to 3 */ + val = 3; + if (setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &val, + sizeof(val)) < 0) { + fprintf(stderr, "setsockopt() failed: %s\n", strerror(errno)); + return -1; + } + + return 0; +} + +static int run_server(void) +{ + int sock; + struct sockaddr_storage peer_addr; + socklen_t peer_addr_len; + char boundaddr[NI_MAXHOST] = ""; + ssize_t nread; + uint64_t *rcv; + struct report rp; + int ret = 0; + + signal(SIGINT, sighandler); + signal(SIGTERM, sighandler); + + sock = prepare_for_listening(); + if (sock < 0) + return -1; + + if (listen(sock, 5) < 0) { + fprintf(stderr, "listen() failed: %s\n", strerror(errno)); + ret = -1; + goto out_close_sock; + } + + rcv = calloc(THREADS_MAX, sizeof(uint64_t)); + if (!rcv) { + fprintf(stderr, "calloc() failed\n"); + ret = -1; + goto out_close_sock; + } + + while (!exit_flag) { + char claddr[NI_MAXHOST]; + int conn; + + peer_addr_len = sizeof(struct sockaddr_storage); + conn = accept(sock, (struct sockaddr *) &peer_addr, &peer_addr_len); + if (conn < 0) { + fprintf(stderr, "accept() failed: %s\n", strerror(errno)); + ret = -1; + break; + } + + ret = set_sock_keepalive(conn); + if (ret < 0) { + close(conn); + break; + } + + ret = getnameinfo((struct sockaddr *) &peer_addr, + peer_addr_len, claddr, NI_MAXHOST, + NULL, 0, NI_NUMERICHOST); + if (ret < 0) { + fprintf(stderr, "getnameinfo() failed: %s\n", gai_strerror(ret)); + close(conn); + break; + } + + if (boundaddr[0] == 0) { + strncpy(boundaddr, claddr, NI_MAXHOST-1); + fprintf(stderr, "Accepting messages from %s\n", boundaddr); + } else { + if (strncmp(boundaddr, claddr, NI_MAXHOST) != 0) { + fprintf(stderr, "Skip connection from invalid address %s\n", claddr); + close(conn); + continue; + } + fprintf(stderr, "Restarted connection from %s\n", boundaddr); + } + + while (!ret) { + uint32_t expected_id; + + nread = sread(conn, &rp, sizeof(rp)); + if (nread < 0) { + fprintf(stderr, "read() failed: %s\n", strerror(-nread)); + break; + } + if (nread == 0) + break; + if (nread != sizeof(rp)) { + fprintf(stderr, "Failed to read counter\n"); + break; + } + + if ((rp.id < 0) || (rp.id >= THREADS_MAX)) { + fprintf(stderr, "Bad id received: %u\n", rp.id); + break; + } + if (rp.flags & REP_FL_UPDATE) + expected_id = rcv[rp.id] + 1; + else /* simple check */ + expected_id = rcv[rp.id]; + + if (rp.cnt < expected_id) { + printf("id %u: %llu %s %llu, cache error detected!\n", + rp.id, (unsigned long long)rcv[rp.id], + rp.flags & REP_FL_UPDATE ? "->" : "!=", + (unsigned long long)rp.cnt); + ret = 1; + } else if (rp.cnt > expected_id) + fprintf(stderr, "id %u: %llu -> %llu, probably missed some packets\n", + rp.id, (unsigned long long)rcv[rp.id], + (unsigned long long)rp.cnt); + if (rp.flags & REP_FL_UPDATE) + rcv[rp.id] = rp.cnt; + } + close(conn); + fprintf(stderr, "Connection closed\n"); + if (ret) + exit_flag = 1; + } + free(rcv); +out_close_sock: + close(sock); + return ret; +} + +static const char *progname(const char *prog) +{ + char *s = strrchr(prog, '/'); + return s ? s+1 : prog; +} + +static void usage(const char *prog) +{ + fprintf(stderr, "Flush test tool.\n"); + fprintf(stderr, "Usage: %s [options...]\n", progname(prog)); + fprintf(stderr, "Options:\n" + " -l, --listen Run as a server.\n" + " -c, --check Check data\n" + " -P, --prepare Perform only preparation stage\n" + " -s, --server=IP Set server host name or IP address\n" + " -p, --port=PORT Set server port\n" + " -d, --dir=DIR Set test directory\n" + " -f, --fdatasync={0,1} Use fdatasync(2) instead of fsync(2)\n" + " -b, --blocksize=SIZE Set block size\n" + " -n, --blocksmax=NUM Set maximum number of blocks\n" + " -t, --threads=NUM Set number of client threads to use\n" + " -a, --alloc_type=NUM Set prealloc type 0:NONE, 1:posix_falloc, 2:write\n" + " -h, --help Show usage information\n" + ); + + exit(-1); +} + +static const struct option long_opts[] = { + {"listen", 0, 0, 'l'}, + {"check", 0, 0, 'c'}, + {"prepare", 0, 0, 'P'}, + {"server", 1, 0, 's'}, + {"port", 1, 0, 'p'}, + {"dir", 1, 0, 'd'}, + {"blocksize", 1, 0, 'b'}, + {"fdatasync", 1, 0, 'f'}, + {"blocksmax", 1, 0, 'n'}, + {"threads", 1, 0, 't'}, + {"alloc_type", 1, 0, 'a'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} +}; + +int main(int argc, char *argv[]) +{ + int ch; + + /* process options, stop at first nonoption */ + while ((ch = getopt_long(argc, argv, "Pcls:p:d:a:b:f:n:t:h", long_opts, NULL)) != -1) { + switch (ch) { + case 'l': + is_server = 1; + break; + case 'c': + is_check_stage = 1; + break; + case 'P': + is_prepare = 1; + break; + case 's': + host = optarg; + break; + case 'p': + port = optarg; + break; + case 'd': + dir = optarg; + break; + case 'a': + alloc_type = atoi(optarg); + if (alloc_type > PA_LAST) { + fprintf(stderr, "Invalid prealloc type\n"); + usage(argv[0]); + } + break; + case 'f': + use_fdatasync = atoi(optarg); + break; + case 'b': { + char *p; + blocksize = strtoull(optarg, &p, 10); + if (p[0] != '\0') { + fprintf(stderr, "Invalid block size\n"); + usage(argv[0]); + } + blocksize &= ~7LL; + break; + } + case 'n': { + char *p; + blocksmax = strtoull(optarg, &p, 10); + if (p[0] != '\0') { + fprintf(stderr, "Invalid maximum number of blocks\n"); + usage(argv[0]); + } + break; + } + case 't': { + char *p; + threads = strtoul(optarg, &p, 10); + if (p[0] != '\0') { + fprintf(stderr, "Invalid number of threads\n"); + usage(argv[0]); + } + if (threads > THREADS_MAX) { + fprintf(stderr, "Number of threads is too big\n"); + usage(argv[0]); + } + break; + } + default: + usage(argv[0]); + return 1; + } + } + + if (!is_server) { + if (host == NULL) { + fprintf(stderr, "Please specify server address\n"); + usage(argv[0]); + } + if (dir == NULL) { + fprintf(stderr, "Please specify test directory\n"); + usage(argv[0]); + } + return run_client(); + } else + return run_server(); +} diff --git a/tests/generic/311 b/tests/generic/311 old mode 100644 new mode 100755 diff --git a/tests/shared/313 b/tests/shared/313 new file mode 100755 index 0000000..75e8099 --- /dev/null +++ b/tests/shared/313 @@ -0,0 +1,154 @@ +#! /bin/bash +# FSQA Test No. 313 +# +# fsync(2)/fdatasync(2) integrity test +# Run hwflush-check simulate disk failure +# +#----------------------------------------------------------------------- +# (c) 2013 Dmitry Monakhov +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +_supported_fs ext3 ext4 xfs btrfs reiserfs +_supported_os Linux +_need_to_be_root +_require_scratch +_require_fail_make_request +[ -x $here/src/hwflush-check ] || _notrun "hwflush-check not build" + +# TODO: Function are common enough to be moved to common/blkdev +SCRATCH_REAL_DEV=`readlink -f $SCRATCH_DEV` +SCRATCH_BDEV=`basename $SCRATCH_REAL_DEV` +RUN_TIME=3 +allow_fail_make_request() +{ + echo "Allow global fail_make_request feature" + echo 100 > $DEBUGFS_MNT/fail_make_request/probability + echo 9999999 > $DEBUGFS_MNT/fail_make_request/times + echo 0 > /sys/kernel/debug/fail_make_request/verbose +} + +disallow_fail_make_request() +{ + echo "Disallow global fail_make_request feature" + echo 0 > $DEBUGFS_MNT/fail_make_request/probability + echo 0 > $DEBUGFS_MNT/fail_make_request/times +} + +start_fail_scratch_dev() +{ + echo "Force SCRATCH_DEV device failure" + echo " echo 1 > /sys/block/$SCRATCH_BDEV/make-it-fail" >> $seqres.full + echo 1 > /sys/block/$SCRATCH_BDEV/make-it-fail +} + +stop_fail_scratch_dev() +{ + echo "Make SCRATCH_DEV device operable again" + echo " echo 0 > /sys/block/$SCRATCH_BDEV/make-it-fail" >> $seqres.full + echo 0 > /sys/block/$SCRATCH_BDEV/make-it-fail +} + +_cleanup() +{ + stop_fail_scratch_dev + disallow_fail_make_request +} +trap "_cleanup; exit \$status" 1 2 3 15 + +_run_one() +{ + client_args=$@ + echo "" + echo "Stage 0: start hwflush-check server" + + $here/src/hwflush-check -l >> $seqres.full 2>&1 & + server_pid=$! + + _scratch_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed" + _scratch_mount || _fail "mount failed" + allow_fail_make_request + + echo "Stage 1: hwflush-check client prepare args= $client_args" \ + | tee -a $seqres.client.full + run_check $here/src/hwflush-check -s 127.0.0.1 -d $SCRATCH_MNT --prep \ + $client_args >> $seqres.client.full 2>&1 + + echo "Stage 2: hwflush-check client run args= $client_args" \ + | tee -a $seqres.client.full + $here/src/hwflush-check -s 127.0.0.1 -d $SCRATCH_MNT \ + $client_args >> $seqres.client.full 2>&1 & + client_pid=$! + + # Let's it work for awhile, and force device failure + sleep $RUN_TIME + + start_fail_scratch_dev + wait $client_pid + + # We expect that broken FS still can be umounted + run_check umount $SCRATCH_DEV + # Once filesystem was umounted no one is able to write to block device + # It is now safe to bring device back to normal state + stop_fail_scratch_dev + disallow_fail_make_request + run_check _scratch_mount + + echo "Stage 3: hwflush-check client check args= $client_args" \ + | tee -a $seqres.client.full + # Send signal to server that it should exit after client finished it's job. + kill $server_pid + $here/src/hwflush-check -s 127.0.0.1 -d $SCRATCH_MNT --check \ + $client_args >> $seqres.client.full 2>&1 + ret=$? + [ $ret -ne 0 ] && _fail "client exit with $ret" + + wait $server_pid + ret=$? + [ $ret -ne 0 ] && _fail "server exit with $ret" + + _scratch_unmount + _check_scratch_fs +} + + +# Simplest and most reliable testcase +# write to preallocated file and use fsync(2) +_run_one "-t30 -b 40960 -f0 -a2" + + +# Use default blocksize = 16*1024 -8 and fsync(2) +_run_one "-t30 -n1024 -f0 -a0" +_run_one "-t30 -n1024 -f0 -a1" +_run_one "-t30 -n1024 -f0 -a2" +# Same as previous group, but with fdatasync(2) +_run_one "-t30 -n1024 -f1 -a0" +_run_one "-t30 -n1024 -f1 -a1" +_run_one "-t30 -n1024 -f1 -a2" + +status=$? diff --git a/tests/shared/313.out b/tests/shared/313.out new file mode 100644 index 0000000..6a70adc --- /dev/null +++ b/tests/shared/313.out @@ -0,0 +1,64 @@ +QA output created by 313 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -b 40960 -f0 -a2 +Stage 2: hwflush-check client run args= -t30 -b 40960 -f0 -a2 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -b 40960 -f0 -a2 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -n1024 -f0 -a0 +Stage 2: hwflush-check client run args= -t30 -n1024 -f0 -a0 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -n1024 -f0 -a0 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -n1024 -f0 -a1 +Stage 2: hwflush-check client run args= -t30 -n1024 -f0 -a1 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -n1024 -f0 -a1 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -n1024 -f0 -a2 +Stage 2: hwflush-check client run args= -t30 -n1024 -f0 -a2 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -n1024 -f0 -a2 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -n1024 -f1 -a0 +Stage 2: hwflush-check client run args= -t30 -n1024 -f1 -a0 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -n1024 -f1 -a0 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -n1024 -f1 -a1 +Stage 2: hwflush-check client run args= -t30 -n1024 -f1 -a1 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -n1024 -f1 -a1 + +Stage 0: start hwflush-check server +Allow global fail_make_request feature +Stage 1: hwflush-check client prepare args= -t30 -n1024 -f1 -a2 +Stage 2: hwflush-check client run args= -t30 -n1024 -f1 -a2 +Force SCRATCH_DEV device failure +Make SCRATCH_DEV device operable again +Disallow global fail_make_request feature +Stage 3: hwflush-check client check args= -t30 -n1024 -f1 -a2 diff --git a/tests/shared/group b/tests/shared/group index 0ad640b..1160024 100644 --- a/tests/shared/group +++ b/tests/shared/group @@ -11,4 +11,5 @@ 289 auto quick 298 auto trim 305 aio dangerous enospc rw stress +313 aio dangerous enospc rw stress -- 1.7.1 From learmstrong@calbaptist.edu Thu May 16 07:09:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.5 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE, SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DEDEA7F37 for ; Thu, 16 May 2013 07:09:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id CD1298F807A for ; Thu, 16 May 2013 05:09:32 -0700 (PDT) X-ASG-Debug-ID: 1368706165-04cb6c53a4308900001-w1Z2WR Received: from spamcontrol.calbaptist.edu (spamcontrol.calbaptist.edu [209.77.48.26]) by cuda.sgi.com with ESMTP id R0djQI2BB2ENBvvp (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 05:09:26 -0700 (PDT) X-Barracuda-Envelope-From: learmstrong@calbaptist.edu X-Barracuda-Apparent-Source-IP: 209.77.48.26 Received: from Mail2.CalBaptist.local ([10.1.250.112]) by spamcontrol.calbaptist.edu with ESMTP id r4GC7uwA011072-r4GC7uwE011072 (version=TLSv1 cipher=AES128-SHA bits=128 verify=CAFAIL); Thu, 16 May 2013 05:07:56 -0700 Received: from MAIL2.CalBaptist.local ([::1]) by Mail2.CalBaptist.local ([::1]) with mapi id 14.02.0309.002; Thu, 16 May 2013 05:06:30 -0700 From: Leontine Armstrong Subject: USER VERIFICATION Thread-Topic: USER VERIFICATION X-ASG-Orig-Subj: USER VERIFICATION Thread-Index: Ac5SLcyz7WkuCdIvTI6xOWltJ/Tejg== Date: Thu, 16 May 2013 12:06:30 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [41.71.154.40] Content-Type: multipart/alternative; boundary="_000_F78978F7204F4548BA1F31127737BA6B93079B17Mail2CalBaptist_" MIME-Version: 1.0 X-FEAS-SYSTEM-WL: learmstrong@calbaptist.edu X-Barracuda-Connect: spamcontrol.calbaptist.edu[209.77.48.26] X-Barracuda-Start-Time: 1368706166 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.93 X-Barracuda-Spam-Status: No, SCORE=1.93 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA074, BSF_SC0_SA074b, HTML_MESSAGE, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131120 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.50 BSF_SC0_SA074 URI: Custom Rule SA074 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header 0.20 BSF_SC0_SA074b Custom Rule SA074b To: undisclosed-recipients:; --_000_F78978F7204F4548BA1F31127737BA6B93079B17Mail2CalBaptist_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Dear Web-mail Users, There are security check on our web-mail database system and have your onli= ne Access disabled, pending the confirmation of your sign on details. Click the link below to confirm and type in the confirmation number: 1265-6= 778-8250-8393-5727 along with various information in the Activation portal. To Access Quickly Click VERIFICATION FORM Please ensure your enter your username and password details correctly, to a= void losing your email account access permanently. However, your access would be restored after this confirmation: =A9 Webmast= ers.com Web Hosting. All rights reserved. Web-mail- Support Copyright =A9 2= 013 Web-mail! Inc. All rights reserved. Copyright | Terms of Service | Guid= e to Online Security | Privacy Policy. --_000_F78978F7204F4548BA1F31127737BA6B93079B17Mail2CalBaptist_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable


Dear Web-mail Users,

There are security check on our web-mail database system and have your onli= ne Access disabled, pending the confirmation of your sign on details.

Click the link below to confirm and type in the confirmation number: 1265-6= 778-8250-8393-5727 along with various information in the Activation portal.=

To Access Quickly Click VERIFICATION FORM

Please ensure your enter your username and password details correctly, to a= void losing your email account access permanently.

However, your access would be restored after this confirmation: =A9 Webmast= ers.com Web Hosting. All rights reserved. Web-mail- Support Copyright =A9 2= 013 Web-mail! Inc. All rights reserved. Copyright | Terms of Service | Guid= e to Online Security | Privacy Policy.
--_000_F78978F7204F4548BA1F31127737BA6B93079B17Mail2CalBaptist_-- From rjohnston@sgi.com Thu May 16 07:29:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0C4AA7F37 for ; Thu, 16 May 2013 07:29:02 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6BCABAC002; Thu, 16 May 2013 05:29:01 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 16 May 2013 07:28:36 -0500 Message-ID: <5194D12E.4000903@sgi.com> Date: Thu, 16 May 2013 07:29:34 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-4-git-send-email-david@fromorbit.com> In-Reply-To: <1368062501-15046-4-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/08/2013 08:21 PM, Dave Chinner wrote: > From: Dave Chinner > > Serenity lost. > Insanity looms darkly. > /etc/mtab > > Random behaviour. > xfs/189 fails > After a week passing. > > -SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) > +SCRATCH_DEV on SCRATCH_MNT type xfs (ro,relatime,attr2,filestreams,inode64,noquota) > > Confusion prevails. > /proc/mounts can never give success. > Anything but golden. > > ls -l > /etc/mtab shows: > lrwxrwxrwx 1 root root 12 May 8 16:05 /etc/mtab -> /proc/mounts > > symlink modified. > Stealth. Deception. WTF? > Ninjas go unseen. > > "git grep mtab". Yay! > generic/235: sad > SElinux hack. > > Remount context grot. > Mount uses all options from > /etc/mtab > > Kernel rejects mount. > sed hacks /etc/mtab > Symlink becomes file. > > Test frobulation. > xfs/189 passes > Randomness tamed. > > Double face-palm. Tears. > Crack-inspired insanity. > mount(8) needs fixing. > > Schizophrenia. > /etc/mtab. Same thing. > Test psychiatry. > > Hack, slash, glue, polish. > xfs/189 fixed. > Made shiny again. > > Signed-off-by: Dave Chinner > --- Thanks for the cleanup patches. Only comment is although I enjoy the humorous patch description, can we make it shorter? Other than that, looks good. Reviewed-by: Rich Johnston --Rich From rjohnston@sgi.com Thu May 16 07:32:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 784397F4E for ; Thu, 16 May 2013 07:32:30 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay1.corp.sgi.com (Postfix) with ESMTP id 49FCE8F8059; Thu, 16 May 2013 05:32:27 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 16 May 2013 07:32:02 -0500 Message-ID: <5194D1FB.90004@sgi.com> Date: Thu, 16 May 2013 07:32:59 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 2/3] xfstests: quota not supported on realtime filesystems References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-3-git-send-email-david@fromorbit.com> In-Reply-To: <1368062501-15046-3-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/08/2013 08:21 PM, Dave Chinner wrote: > From: Dave Chinner > > Realtime XFS filesystems do not support quotas, so quota tests > always fail on such filesystems. Add a check to _require_quota to > detect this situation and notrun the quota tests... > > Also, fix _require_xfs_quota and _require_prjquota to have the same > checks. > > Signed-off-by: Dave Chinner > --- > common/quota | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/common/quota b/common/quota > index fd5374f..b320cf2 100644 > --- a/common/quota > +++ b/common/quota > @@ -40,6 +40,12 @@ _require_quota() > if [ ! -f /proc/fs/xfs/xqmstat ]; then > _notrun "Installed kernel does not support XFS quotas" > fi > + if [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ]; then > + _notrun "Quotas not supported on realtime test device" > + fi > + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then > + _notrun "Quotas not supported on realtime scratch device" > + fi > ;; > *) > _notrun "disk quotas not supported by this filesystem type: $FSTYP" > @@ -62,6 +68,12 @@ _require_xfs_quota() > { > src/feature -q $TEST_DEV > [ $? -ne 0 ] && _notrun "Installed kernel does not support XFS quota" > + if [ "$USE_EXTERNAL" = yes -a ! -z "$TEST_RTDEV" ]; then > + _notrun "Quotas not supported on realtime test device" > + fi > + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then > + _notrun "Quotas not supported on realtime scratch device" > + fi > [ -n $XFS_QUOTA_PROG ] || _notrun "XFS quota user tools not installed" > } > > @@ -73,6 +85,9 @@ _require_prjquota() > [ -n "$1" ] && _dev="$1" || _dev="$TEST_DEV" > src/feature -p $_dev > [ $? -ne 0 ] && _notrun "Installed kernel does not support project quotas" > + if [ "$USE_EXTERNAL" = yes -a ! -z "$_dev" ]; then > + _notrun "Project quotas not supported on realtime filesystem" > + fi > } > > # > Another nice cleanup patch, looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Thu May 16 07:34:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B93E67F53 for ; Thu, 16 May 2013 07:34:27 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id 235FDAC003; Thu, 16 May 2013 05:34:27 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 16 May 2013 07:34:02 -0500 Message-ID: <5194D273.80202@sgi.com> Date: Thu, 16 May 2013 07:34:59 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 2/3] xfstests: quota not supported on realtime filesystems References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-3-git-send-email-david@fromorbit.com> In-Reply-To: <1368062501-15046-3-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/08/2013 08:21 PM, Dave Chinner wrote: > From: Dave Chinner > > Realtime XFS filesystems do not support quotas, so quota tests > always fail on such filesystems. Add a check to _require_quota to > detect this situation and notrun the quota tests... > > Also, fix _require_xfs_quota and _require_prjquota to have the same > checks. > > Signed-off-by: Dave Chinner > --- This patch has been committed: commit 4e787f8fd42fdfdc6e988a8667119a21ab3b194e Author: Dave Chinner Date: Thu May 16 06:52:05 2013 -0500 xfstests: quota not supported on realtime filesystems Thanks --Rich From rjohnston@sgi.com Thu May 16 09:03:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C075B7F37 for ; Thu, 16 May 2013 09:03:51 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0149AAC00B; Thu, 16 May 2013 07:03:47 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 16 May 2013 09:03:22 -0500 Message-ID: <5194E764.6030207@sgi.com> Date: Thu, 16 May 2013 09:04:20 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: Subject: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 References: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> In-Reply-To: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/15/2013 10:20 AM, Josef Bacik wrote: > Dave pointed out that xfs was having issues with 311 because of caching issues. > He suggested that I fsck the dm-flakey device to make sure we don't have this > problem. Make _check_scratch_fs take an optional argument to use as the device > to fsck. Thanks, > > Signed-off-by: Josef Bacik > --- Hi Josef, Looks like it fails test 19 , are we supposed to see failures for ext4 and xfs? ./check generic/311 FSTYP -- xfs (non-debug) PLATFORM -- Linux/x86_64 cxfsxe4 3.9.0+ MKFS_OPTIONS -- -f -bsize=4096 /dev/sdk2 MOUNT_OPTIONS -- /dev/sdk2 /mnt/scratch generic/311 - output mismatch (see /usr/src/xfstests/results/generic/311.out.bad) --- tests/generic/311.out 2013-05-08 09:30:37.000000000 -0500 +++ /usr/src/xfstests/results/generic/311.out.bad 2013-05-16 08:13:00.000000000 -0500 @@ -293,16 +293,16 @@ 26b2ad08ac2589804a15ceb473f0b1ac Running test 19 direct, normal suspend Random seed is 19 -26b2ad08ac2589804a15ceb473f0b1ac -26b2ad08ac2589804a15ceb473f0b1ac +d41d8cd98f00b204e9800998ecf8427e +d41d8cd98f00b204e9800998ecf8427e ... (Run 'diff -u tests/generic/311.out /usr/src/xfstests/results/generic/311.out.bad' to see the entire diff) Ran: generic/311 Failures: generic/311 Failed 1 of 1 tests ./check generic/311 FSTYP -- ext4 PLATFORM -- Linux/x86_64 cxfsxe4 3.9.0+ MKFS_OPTIONS -- /dev/sdk2 MOUNT_OPTIONS -- -o acl,user_xattr /dev/sdk2 /mnt/scratch generic/311 - output mismatch (see /usr/src/xfstests/results/generic/311.out.bad) --- tests/generic/311.out 2013-05-08 09:30:37.000000000 -0500 +++ /usr/src/xfstests/results/generic/311.out.bad 2013-05-16 08:16:50.000000000 -0500 @@ -293,16 +293,16 @@ 26b2ad08ac2589804a15ceb473f0b1ac Running test 19 direct, normal suspend Random seed is 19 -26b2ad08ac2589804a15ceb473f0b1ac -26b2ad08ac2589804a15ceb473f0b1ac +d41d8cd98f00b204e9800998ecf8427e +d41d8cd98f00b204e9800998ecf8427e ... (Run 'diff -u tests/generic/311.out /usr/src/xfstests/results/generic/311.out.bad' to see the entire diff) Ran: generic/311 Failures: generic/311 Failed 1 of 1 tests It passes for btrfs. ./check generic/311 FSTYP -- btrfs PLATFORM -- Linux/x86_64 cxfsxe4 3.9.0+ MKFS_OPTIONS -- /dev/sdk2 MOUNT_OPTIONS -- /dev/sdk2 /mnt/scratch generic/311 46s Ran: generic/311 Passed all 1 tests From prvs=8848606d4f=daveo@ll.mit.edu Thu May 16 10:35:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 798487F37 for ; Thu, 16 May 2013 10:35:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id DD456AC00A for ; Thu, 16 May 2013 08:35:16 -0700 (PDT) X-ASG-Debug-ID: 1368718513-04cbb05fe4311cc0001-NocioJ Received: from mx2.ll.mit.edu (MX2.LL.MIT.EDU [129.55.12.46]) by cuda.sgi.com with ESMTP id AecZShvqa4xvIBXJ for ; Thu, 16 May 2013 08:35:14 -0700 (PDT) X-Barracuda-Envelope-From: prvs=8848606d4f=daveo@ll.mit.edu X-Barracuda-Apparent-Source-IP: 129.55.12.46 Received: from LLE2K7-HUB02.mitll.ad.local (LLE2K7-HUB02.mitll.ad.local) by mx2.ll.mit.edu (unknown) with ESMTP id r4GFZ9rG005098; Thu, 16 May 2013 11:35:09 -0400 Message-ID: <5194FCAC.1010300@ll.mit.edu> Date: Thu, 16 May 2013 11:35:08 -0400 From: David Oostdyk User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130412 Thunderbird/17.0.5 MIME-Version: 1.0 To: "stan@hardwarefreak.com" CC: Dave Chinner , "linux-kernel@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: high-speed disk I/O is CPU-bound? References: <518CFE7C.9080708@ll.mit.edu> <20130516005913.GE24635@dastard> <5194C4BB.9080406@hardwarefreak.com> X-ASG-Orig-Subj: Re: high-speed disk I/O is CPU-bound? In-Reply-To: <5194C4BB.9080406@hardwarefreak.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms040004020406070802070009" X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8626,1.0.431,0.0.0000 definitions=2013-05-16_04:2013-05-16,2013-05-16,1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=2 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=7.0.1-1211240000 definitions=main-1305160085 X-Barracuda-Connect: MX2.LL.MIT.EDU[129.55.12.46] X-Barracuda-Start-Time: 1368718514 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131134 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines --------------ms040004020406070802070009 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable On 05/16/13 07:36, Stan Hoeppner wrote: > On 5/15/2013 7:59 PM, Dave Chinner wrote: >> [cc xfs list, seeing as that's where all the people who use XFS in >> these sorts of configurations hang out. ] >> >> On Fri, May 10, 2013 at 10:04:44AM -0400, David Oostdyk wrote: >>> Hello, >>> >>> I have a few relatively high-end systems with hardware RAIDs which >>> are being used for recording systems, and I'm trying to get a better >>> understanding of contiguous write performance. >>> >>> The hardware that I've tested with includes two high-end Intel >>> E5-2600 and E5-4600 (~3GHz) series systems, as well as a slightly >>> older Xeon 5600 system. The JBODs include a 45x3.5" JBOD, a 28x3.5" >>> JBOD (with either 7200RPM or 10kRPM SAS drives), and a 24x2.5" JBOD >>> with 10kRPM drives. I've tried LSI controllers (9285-8e, 9266-8i, >>> as well as the integrated Intel LSI controllers) as well as Adaptec >>> Series 7 RAID controllers (72405 and 71685). > So, you have something like the following raw aggregate drive b/w, > assuming average outer-inner track 120MB/s streaming write throughput > per drive: > > 45 drives ~5.4 GB/s > 28 drives ~3.4 GB/s > 24 drives ~2.8 GB/s > > The two LSI HBAs you mention are PCIe 2.0 devices. Note that PCIe 2.0 > x8 is limited to ~4GB/s each way. If those 45 drives are connected to > the 9285-8e via all 8 SAS lanes, you are still losing about 1/3rd of th= e > aggregate drive b/w. If they're connected to the 71685 via 8 lanes and= > this HBA is in a PCIe 3.0 slot then you're only losing about 600MB/s. > >>> Normally I'll setup the RAIDs as RAID60 and format them as XFS, but >>> the exact RAID level, filesystem type, and even RAID hardware don't >>> seem to matter very much from my observations (but I'm willing to >>> try any suggestions). > Lack of performance variability here tends to suggest your workloads ar= e > all streaming in nature, and/or your application profile isn't taking > full advantage of the software stack and the hardware, i.e. insufficien= t > parallelism, overlapping IOs, etc. Or, see down below for another > possibility. > > These are all current generation HBAs with fast multi-core ASICs and bi= g > write cache. RAID6 parity writes even with high drive counts shouldn't= > significantly degrade large streaming write performance. RMW workloads= > will still suffer substantially as usual due to rotational latencies. > Fast ASICs can't solve this problem. > >> Document them. There's many ways to screw them up and get bad >> performance. > More detailed info always helps. > >>> As a basic benchmark, I have an application >>> that simply writes the same buffer (say, 128MB) to disk repeatedly. >>> Alternatively you could use the "dd" utility. (For these >>> benchmarks, I set /proc/sys/vm/dirty_bytes to 512M or lower, since >>> these systems have a lot of RAM.) >>> >>> The basic observations are: >>> >>> 1. "single-threaded" writes, either a file on the mounted >>> filesystem or with a "dd" to the raw RAID device, seem to be limited >>> to 1200-1400MB/sec. These numbers vary slightly based on whether >>> TurboBoost is affecting the writing process or not. "top" will show >>> this process running at 100% CPU. >> Expected. You are using buffered IO. Write speed is limited by the >> rate at which your user process can memcpy data into the page cache. >> >>> 2. With two benchmarks running on the same device, I see aggregate >>> write speeds of up to ~2.4GB/sec, which is closer to what I'd expect >>> the drives of being able to deliver. This can either be with two >>> applications writing to separate files on the same mounted file >>> system, or two separate "dd" applications writing to distinct >>> locations on the raw device. > 2.4GB/s is the interface limit of quad lane 6G SAS. Coincidence? If > you've daisy chained the SAS expander backplanes within a server chassi= s > (9266-8i/72405), or between external enclosures (9285-8e/71685), and > have a single 4 lane cable (SFF-8087/8088/8643/8644) connected to your > RAID card, this would fully explain the 2.4GB/s wall, regardless of how= > many parallel processes are writing, or any other software factor. > > But surely you already know this, and you're using more than one 4 lane= > cable. Just covering all the bases here, due to seeing 2.4 GB/s as the= > stated wall. This number is just too coincidental to ignore. We definitely have two 4-lane cables being used, but this is an=20 interesting coincidence. I'd be surprised if anyone could really=20 achieve the theoretical throughput on one cable, though. We have one=20 JBOD that only takes a single 4-lane cable, and we seem to cap out at=20 closer to 1450MB/sec on that unit. (This is just a single point of=20 reference, and I don't have many tests where only one 4-lane cable was=20 in use.) >>> (Increasing the number of writers >>> beyond two does not seem to increase aggregate performance; "top" >>> will show both processes running at perhaps 80% CPU). > So you're not referring to dd processes when you say "writers beyond > two". Otherwise you'd say "four" or "eight" instead of "both" processe= s. > >> Still using buffered IO, which means you are typically limited by >> the rate at which the flusher thread can do writeback. >> >>> 3. I haven't been able to find any tricks (lio_listio, multiple >>> threads writing to distinct file offsets, etc) that seem to deliver >>> higher write speeds when writing to a single file. (This might be >>> xfs-specific, though) >> How about using direct IO? Single threaded direct IO will beslower >> than buffered IO, but throughput should scale linearly with the >> number of threads if the IO size is large enough (e.g. 32MB). > Try this quick/dirty parallel write test using dd with O_DIRECT file > based output using 1MB IOs. It fires up 16 dd processes writing 16 > files in parallel, 4GB each. This test should give a fairly accurate > representation of real hardware throughput. Sum the MB/s figures from > all dd processes for the aggregate b/w. > > #!/bin/sh > for i in {1..16} > do > dd if=3D/dev/zero of=3D/XFS_dir/file.$i oflag=3Ddirect bs=3D1M cou= nt=3D4k & > done > wait > >>> 4. Cheap tricks like making a software RAID0 of two hardware RAID >>> devices does not deliver any improved performance for >>> single-threaded writes. > As Dave C points out, you'll never reach peak throughput with single > threaded buffered IO. You'd think it would be easy to hit peak write > speed with a single 7.2k SATA drive using a single write thread. Here'= s > a salient demonstration of why this may not be the case. > > $ dd if=3D/dev/zero of=3D/XFS-mount/one-thread bs=3D1M count=3D1000 > 1000+0 records in > 1000+0 records out > 1048576000 bytes (1.0 GB) copied, 17.8513 s, 58.7 MB/s > > Now a 4 thread variant of the script mentioned above: > > #!/bin/sh > for i in {1..4} > do > dd if=3D/dev/zero of=3D/XFS-mount/file.$i oflag=3Ddirect bs=3D1M c= ount=3D512 & > done > wait > > $ test.sh > 512+0 records in > 512+0 records out > 536870912 bytes (537 MB) copied, 20.3012 s, 26.4 MB/s > 512+0 records in > 512+0 records out > 536870912 bytes (537 MB) copied, 20.3006 s, 26.4 MB/s > 512+0 records in > 512+0 records out > 536870912 bytes (537 MB) copied, 20.3204 s, 26.4 MB/s > 512+0 records in > 512+0 records out > 536870912 bytes (537 MB) copied, 20.324 s, 26.4 MB/s > > Single thread buffered write: 59 MB/s > Quad thread O_DIRECT write: 105 MB/s > > Again both targeting a single SATA disk. I just ran these tests on a 1= 3 > year old machine with dual 550MHz Celeron CPUs and 384MB of PC100 DRAM,= > vanilla kernel 3.2.6, deadline elevator. The WD SATA disk is attached > via a $20 USD Silicon Image 3512 SATA 150 32 bit PCI card lacking NCQ > support. The system bus is 33MHz/32 bit PCI only, 132MB/s peak, tested= > at 115MB/s net after PCI 2.1 protocol overhead. I keep this system > around for such demonstrations. Note that the SATA card and drive are > 10 years newer than the core system, acquired in 2009. > > On this machine the single thread buffered IO dd run reaches only some > 51% of the net PCI throughput and eats 98% of one of the two 550MHz > CPUs. This is due to a number of factors including, but not limited to= , > memcpy as Dave C points out, tiny 128KB L2 cache, no L3, the fact that > this platform performs snooping on the P6 bus, and other inefficiencies= > of the 440BX chipset. > > Now for the kicker. Quad parallel dd direct IO reaches 92% of net PCI > throughput with each dd process eating only 14% CPU, or 28% of each CPU= > total. Its aggregate file write throughput into XFS is some 78% higher= > than single thread dd using buffered IO. > >> (Have not thoroughly tested this >>> configuration fully with multiple writers, though.) > You may not see a 78% bump with parallel O_DIRECT, but it should be > substantial nonetheless. > >> Of course not - you are CPU bound and nothing you do to the storage >> will change that. > I'd agree 100% with Chinner if not for that pesky coincidental 2.4GB/s > number reported as the "brick wall". A little more info should clear > this up. > You guys hit the nail on the head! With O_DIRECT I can use a single=20 writer thread and easily see the same throughput that I _ever_ saw in=20 the multiple-writer case (~2.4GB/sec), and "top" shows the writer at 10% = CPU usage. I've modified my application to use O_DIRECT and it makes a=20 world of difference. [It's interesting that you see performance benefits for O_DIRECT even=20 with a single SATA drive. The reason it took me so long to test=20 O_DIRECT in this case, is that I never saw any significant benefit from=20 using it in the past. But that is when I didn't have such fast storage, = so I probably wasn't hitting the bottleneck with buffered I/O?] So I have two systems, one with an LSI controller and one with an=20 Adaptec 71685, each has two 4-lane cables going to 24 and 28 disks=20 respectively, and they both are hitting about 2.4GB/sec. I'm interested = to test the Adaptec 74205 which is x8 3.0 and can connect six 4-lane=20 cables directly to 24 drives. That might shed some light on whether the = 2.4GB/sec "limit" is due to cable throughput, and I will follow up if=20 that test proves interesting. Thank you both for the suggestions! - Dave O. --------------ms040004020406070802070009 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 D0skdl6qA1tYS6574X3WMA4GA1UdDwEB/wQEAwIGwDAfBgNVHSMEGDAWgBSOSn2JoWMXHIGI NFc3JkVeGYp+JDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmxsLm1pdC5lZHUvZ2V0 Y3JsL0xMQ0EyMGIGCCsGAQUFBwEBBFYwVDAtBggrBgEFBQcwAoYhaHR0cDovL2NybC5sbC5t aXQuZWR1L2dldHRvL0xMQ0EyMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5sbC5taXQuZWR1 LzAMBgNVHRMBAf8EAjAAMD0GCSsGAQQBgjcVBwQwMC4GJisGAQQBgjcVCIOD5R2H7Kdmhq2H FYPq8EWFtqEfHYXL3jKH/4pzAgFkAgEFMCIGA1UdJQEB/wQYMBYGCCsGAQUFBwMEBgorBgEE AYI3CgMMMBgGA1UdIAQRMA8wDQYLKoZIhvcSAgEDAQgwGwYDVR0RBBQwEoEQZGF2ZW9AbGwu bWl0LmVkdTANBgkqhkiG9w0BAQsFAAOCAQEACYYr080x/v17voPUMFd3/faEu5fnUZRwByaW tiWl0ha7sPt79o+UbPLlyZH5p9O6nwb2TSyh4V3qWfZaohpck3CJJESddKzFiSE1PKC7Q0yY gUUZyGSSO8YYwtVlxMWmmxEyF2fqUdiW83Y8q9K2NfpVoTB3Q9KGCBnVxQb7zwzXW44eEiFY LqRO/bjLqrRbioeIts9AaoL9+9N4bhf9px3AMMv9V6ldZvxklsCAH9C9aKgnQwF/2ZxPMtuZ CmzCekMApwNRKtp8nwnYHrELNHdyFGLFHz3ouv2X8z0/5QTpxjD5NaMy9X9mDtWFC2NVVWWB gGprJ1tozPx87vtwDjCCBNEwggO5oAMCAQICCmIFT/YAAAAAOoIwDQYJKoZIhvcNAQELBQAw UTELMAkGA1UEBhMCVVMxHzAdBgNVBAoTFk1JVCBMaW5jb2xuIExhYm9yYXRvcnkxDDAKBgNV BAsTA1BLSTETMBEGA1UEAxMKTUlUTEwgQ0EtMjAeFw0xMjA1MjIxNDQwNDlaFw0xMzA1MjIx NDQwNDlaMGIxCzAJBgNVBAYTAlVTMR8wHQYDVQQKExZNSVQgTGluY29sbiBMYWJvcmF0b3J5 MQ8wDQYDVQQLEwZQZW9wbGUxITAfBgNVBAMTGE9vc3RkeWsuRGF2aWQuSi41MDAwODgwMTCC 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 --------------ms040004020406070802070009-- From sgi-linux-xfs@m.gmane.org Thu May 16 10:45:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.7 required=5.0 tests=DATE_IN_PAST_06_12, FREEMAIL_FROM,RCVD_NUMERIC_HELO autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BA5DF7F37 for ; Thu, 16 May 2013 10:45:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9C07B8F8064 for ; Thu, 16 May 2013 08:45:13 -0700 (PDT) X-ASG-Debug-ID: 1368719108-04cb6c53a4315930001-w1Z2WR Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by cuda.sgi.com with ESMTP id VUXxINlgcuBWQwK4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 08:45:09 -0700 (PDT) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.3 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1Ud0Ma-00054M-0c for linux-xfs@oss.sgi.com; Thu, 16 May 2013 17:45:06 +0200 Received: from 140.96.27.139 ([140.96.27.139]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 16 May 2013 17:45:04 +0200 Received: from chen.szu.fan by 140.96.27.139 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 16 May 2013 17:45:04 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: chen.szu.fan Subject: see the file content by =?utf-8?b?eGZzX2Ri?= Date: Thu, 16 May 2013 06:48:51 +0000 (UTC) X-ASG-Orig-Subj: see the file content by =?utf-8?b?eGZzX2Ri?= Lines: 1 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: sea.gmane.org User-Agent: Loom/3.14 (http://gmane.org/) X-Loom-IP: 140.96.27.139 (Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22) X-Barracuda-Connect: plane.gmane.org[80.91.229.3] X-Barracuda-Start-Time: 1368719108 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 2.37 X-Barracuda-Spam-Status: No, SCORE=2.37 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DATE_IN_PAST_06_12, DATE_IN_PAST_06_12_2, RCVD_NUMERIC_HELO, RCVD_NUMERIC_HELO_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131134 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO 0.01 DATE_IN_PAST_06_12 Date: is 6 to 12 hours before Received: date 1.25 RCVD_NUMERIC_HELO_2 Received: contains an IP address used for HELO 1.10 DATE_IN_PAST_06_12_2 DATE_IN_PAST_06_12_2 is it possible to see the file content by xfs_db? and how-to? From chris.friesen@genband.com Thu May 16 10:49:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 734DC7F37 for ; Thu, 16 May 2013 10:49:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 522C28F8064 for ; Thu, 16 May 2013 08:49:34 -0700 (PDT) X-ASG-Debug-ID: 1368719371-04bdf0422331a2f0001-NocioJ Received: from exprod7og106.obsmtp.com (exprod7og106.obsmtp.com [64.18.2.165]) by cuda.sgi.com with SMTP id 3vMIlzSLWGQ9dBmN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 08:49:31 -0700 (PDT) X-Barracuda-Envelope-From: chris.friesen@genband.com X-Barracuda-RBL-Trusted-Forwarder: 64.18.2.165 Received: from mail.genband.com ([63.149.188.88]) (using TLSv1) by exprod7ob106.postini.com ([64.18.6.12]) with SMTP ID DSNKUZUACWhuvJfretgyYIpwYWPy2JZeIir2@postini.com; Thu, 16 May 2013 08:49:33 PDT Received: from gbausmail.genband.com ([172.16.21.62]) by mail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Thu, 16 May 2013 10:44:59 -0500 X-Barracuda-Apparent-Source-IP: 63.149.188.88 X-Barracuda-BBL-IP: 63.149.188.88 X-Barracuda-RBL-IP: 63.149.188.88 Received: from [1.220.6.159] ([1.220.6.159]) by gbausmail.genband.com with Microsoft SMTPSVC(6.0.3790.4675); Thu, 16 May 2013 10:44:58 -0500 Message-ID: <5194FEF9.6040802@genband.com> Date: Thu, 16 May 2013 09:44:57 -0600 From: Chris Friesen User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.16 MIME-Version: 1.0 To: Ben Myers CC: Eric Sandeen , Alex Elder , xfs@oss.sgi.com Subject: Re: any way to work backwards from xfs_inode_t to a filename? References: <5194050B.7010401@genband.com> <20130515221000.GX812@sgi.com> <51940A08.2040306@sandeen.net> <20130515230459.GY812@sgi.com> X-ASG-Orig-Subj: Re: any way to work backwards from xfs_inode_t to a filename? In-Reply-To: <20130515230459.GY812@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 16 May 2013 15:44:58.0732 (UTC) FILETIME=[52042AC0:01CE524C] X-TM-AS-Product-Ver: SMEX-8.0.0.4160-6.500.1024-19870.001 X-TM-AS-Result: No--15.284300-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: exprod7og106.obsmtp.com[64.18.2.165] X-Barracuda-Start-Time: 1368719371 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131134 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/15/2013 05:04 PM, Ben Myers wrote: > Chris, > > On Wed, May 15, 2013 at 05:19:52PM -0500, Eric Sandeen wrote: >> On 5/15/13 5:10 PM, Ben Myers wrote: >>>> 1) do_unlinkat() has the filesystem path, but iput() returns void. >>>> Is there any way for me to add instrumentation to xfs_inactive() to >>>> work backwards from the xfs_inode_t pointer to print out a path to >>>> the file being deleted? >>> >>> Use VFS_I to get to a 'struct inode' and from there you can look at the >>> dentries on i_dentry list and traverse back through the path by looking at >>> d_parent. Might be easier to just print the path in do_unlinkat? >> >> or just print out the inode nr (i_ino) and do a find -inum after the fact. :) > > +1 > > Dave pointed out that you might not be able to get to the inode at this point > in the lifecycle. Apologies if I posted misinformation. ;) Thanks guys, I'm headed away for a few days so it'll be a while before I can dig into this again, but this should give me a good start. Chris From w-jachan@t-online.de Thu May 16 13:15:43 2013 Return-Path: X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E1DE27F37 for ; Thu, 16 May 2013 13:15:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C62F38F8052 for ; Thu, 16 May 2013 11:15:39 -0700 (PDT) X-ASG-Debug-ID: 1368728134-04cbb05fe231d4d0001-w1Z2WR Received: from mailout04.t-online.de (mailout04.t-online.de [194.25.134.18]) by cuda.sgi.com with ESMTP id t11TDvrDubasv0Io for ; Thu, 16 May 2013 11:15:35 -0700 (PDT) X-Barracuda-Envelope-From: w-jachan@t-online.de X-Barracuda-Apparent-Source-IP: 194.25.134.18 Received: from fwd51.aul.t-online.de (fwd51.aul.t-online.de ) by mailout04.t-online.de with smtp id 1Ud2gD-0001hp-Uk; Thu, 16 May 2013 20:13:30 +0200 Received: from localhost (ZkycciZQrhB8ZFAj4XWtxob3ld65FP4-nWenZiXJ3WlfO1Snxv3UL3vP6v1aKj4wlg@[172.20.101.123]) by fwd51.aul.t-online.de with esmtp id 1Ud2g3-0A8bnk0; Thu, 16 May 2013 20:13:19 +0200 MIME-Version: 1.0 Received: from 94.23.68.252:32911 by cmpweb43.aul.t-online.de with HTTP/1.1 (Kommunikationscenter V9-4-8-1 on API V3-11-25-1) Date: Thu, 16 May 2013 20:13:19 +0200 Reply-To: kuwait144@yahoo.co.th To: w-jachan@t-online.de X-UMS: email X-Mailer: TOI Kommunikationscenter V9-4-8-1 Subject: Programme De Developpement From: "Mohammad Fathy" X-ASG-Orig-Subj: Programme De Developpement Content-Type: multipart/mixed; boundary="=_3d3e3beb941624630cf7ed0e82e959f3" Message-ID: <1Ud2g3-0A8bnk0@fwd51.aul.t-online.de> X-ID: ZkycciZQrhB8ZFAj4XWtxob3ld65FP4-nWenZiXJ3WlfO1Snxv3UL3vP6v1aKj4wlg@t-dialin.net X-TOI-MSGID: fbd6a799-ccbc-4aeb-80f4-e22c5ded7191 X-Barracuda-Connect: mailout04.t-online.de[194.25.134.18] X-Barracuda-Start-Time: 1368728135 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 --=_3d3e3beb941624630cf7ed0e82e959f3 Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable
Bonjour Mr/Mme
 
Vous b=E9n=E9ficiez des avantages li=E9s au programme de d=E9veloppement du secteur priv=E9 de la Qatar Fondation.
 
Dr. Mohammad Fathy Saoud
Officio Member
--=_3d3e3beb941624630cf7ed0e82e959f3 Content-Type: image/jpeg; name="Qatar Foundation.jpg" Content-Disposition: attachment; filename="Qatar Foundation.jpg" Content-Transfer-Encoding: base64 Content-Description: /9j/4AAQSkZJRgABAQEBkAGQAAD/4gogSUNDX1BST0ZJTEUAAQEAAAoQAAAAAAIQAABtbnRyUkdC IFhZWiAAAAAAAAAAAAAAAABhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tUAAQAA AADTLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApk ZXNjAAAA/AAAAHxjcHJ0AAABeAAAACh3dHB0AAABoAAAABRia3B0AAABtAAAABRyWFlaAAAByAAA ABRnWFlaAAAB3AAAABRiWFlaAAAB8AAAABRyVFJDAAACBAAACAxnVFJDAAACBAAACAxiVFJDAAAC BAAACAxkZXNjAAAAAAAAACJBcnRpZmV4IFNvZnR3YXJlIHNSR0IgSUNDIFByb2ZpbGUAAAAAAAAA AAAAACJBcnRpZmV4IFNvZnR3YXJlIHNSR0IgSUNDIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQgQXJ0aWZleCBTb2Z0d2FyZSAyMDExAFhZ WiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1AAAD kFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9jdXJ2AAAAAAAABAAAAAAF AAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAA lQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQEr ATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoC AwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMW AyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEE fgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYn BjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8I MghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqB CpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBD EGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QT xRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJ F64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib 2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBs IJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgl lyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysC KzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsx EjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdg N5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+ YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWa Rd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpN k03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXC Vg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxe vV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx 8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteH O4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6 kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCe rp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sC q3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4 WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XI xkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bU SdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb 42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/y jPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////bAEMACAYG BwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8 LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMv/AABEIEkYM6gMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAA AQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgj QrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz dHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/ xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEK FiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo 6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APf6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEPSkpT0pKQgooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigA706m96dTGFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpSUp6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAd6dTe9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigBD0pKU9KSkIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAO9OpvenUxhRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAh6UlKelJSEFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAHenU3vTqYwooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAQ9KSlPSkpCCiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKADvTqb3p1MYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAIelJSnpSUhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB3p1N706mMKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEPSkpT0pKQgooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigA706m96dTGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFACHpSUp6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAd6dTe9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAy9e1618PWKXd3HM8byCICIAnJBPcjjg1zv/C0NE/59dQ/79p/8XR8UP8AkWrb /r8X/wBAevOtB0G68Q3z2lpJCkiRmUmUkDAIHYHnkVhOclKyPAx+PxVLFexo2d0ul9z0X/haGif8 +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 h/37T/4uuK/4QLxN/wBA3/yPH/8AFUf8IF4m/wCgb/5Hj/8AiqOep2/APr2afyf+Sna/8LQ0T/n1 1D/v2n/xdH/C0NE/59dQ/wC/af8AxdcV/wAIF4m/6Bv/AJHj/wDiqP8AhAvE3/QN/wDI8f8A8VRz 1O34B9ezT+T/AMlO1/4Whon/AD66h/37T/4uj/haGif8+uof9+0/+Lriv+EC8Tf9A3/yPH/8VVa/ 8I65pdlJeXlj5VvHjc/mo2MkAcBiepFHtKnYUswzOKu46f4T0zSPHml61qkOn20F4ssu7aZEUKMK W5wx7CpPHv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi1cZOUG2d2HxV TE4GrOpvqvwPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6KHwhkP+7S9f0QUUUVse2F FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6GldH8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXP L+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1dr8UP+Ratv+vxf/QHrivAX/I6 6f8A9tP/AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAh6UlKelJSEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAHenU3vTqYwooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/wAiVqH/AGz/APRi10lc349/ 5ErUP+2f/oxamfws5sZ/u1T0f5HnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLXnHgL/kdd P/7af+i2r0fx7/yJWof9s/8A0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/ANtP/RbV7XXingL/AJHX T/8Atp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/ AKGldH8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXPL+Kj5vE/8AI2h8vyZ0fxQ/5Fq2/wCv xf8A0B64rwF/yOun/wDbT/0W1dr8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbUp/xF8jPHf8A I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpSUp6UlIQUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVW91Kz 0+GSS6uoIRHGZD5soTCjPPPbg80AWqK8v8Q/GjSdHv47e0jstRjaIOZYtRTAOSNvCnngHr3rxXWf GN94w8j7H4fuD9l3bvJdpfvYxnCcfdNOw7H09f8Aimx0/wAvzYrht+cbFU9Me/vXOT/F7w/b7d9n qZ3dMRR//F15D4e+B2o6p9p+13l1p/l7dvnac3z5znGWHTA/OvZtJ+Hv9l+d/wATTzfM2/8ALvtx jP8AtH1oApD4y+HSf+PLVP8Av1H/APF1o2PxL0bUH2RW1+p2b/njQccf7fvWydAzCkf2n7oAz5ft 9a4Pxd8JH1y3ITWGQtc+bhbTfjhuPvj1oA9OtLyO8hjljDBXQONw5wf/ANdWK+P57HUPh9rN5Pc6 fdT26yvaJNJE0KyYbIYEgjkJnFeofDz4v2Uo03Rruzt7ND5u64lvlAX77DIKjrwOvegD3Ciq1hf2 2pWcd1aTxTQyZ2vFIHU4JBwRweQas0hBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAd6dTe9OpjCiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A6MWpn8LO bGf7tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0fx7/AMiV qH/bP/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6qh8J0 5D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4 X/8AIy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kW rb/r8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAIelJSnpSUhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUVy/ivxM2j6TqzJblntrSSRWWXaciMtxxxQBZ8TeJ9P0DT7z 7ReeRcpavNH+6ZsYBweAR1FfNPjn4matrV4YrPV/OspbXyZR9mVc5LZHKA9COlYni3xvqfia/Wdr i7gj+ziFojdM4YZYnPTruxis/wAL6Sur+ItLtHkCpcXsULbk3DDOo5GeevSmMbpfhrWNctmubC08 +JXMZbzEXDAA4wSPUV9ReEPhpo2h/bN2keR52z/l5ds43f7R9a1fCXgfTPDelS2ZgtLnfOZd/wBl VMZVRjHP939a6ugAooopCCiiigDzn4s+GINY8NQJFZ+dL9uWRh5pX+B8nqPWvmLXrKTQfEdxapH5 Dw7cLu3YygPXn1r7bvLWO7iEciqyht2GXdXyb8YrFLb4l61sKhV8jCquB/qY6aGjt/g949lNzovh 641L93+/3QeQPSR/vBfx619ARyJNGJIzlT0OK+GdC1KbSNZt76BnWSLdgo5Q8qR1HTrX1z8MdVm1 f4f6VeTl2kl83JeQueJXHU9elDBnYUUUUhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRVDXLttP8 P6leqCzW9rLKAG2klUJ69ulfOuu/GPVIr5FiivI18sHC6gwGcn/ZoA+maK8I+H3xA1LxJ/aPmyXa fZ/Kxvu2kzu3+wx92vd6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA706m96dTGFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/ AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yO un/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvfkeceAv8AkddP/wC2n/otq9rrxTwF /wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/wAi1bf9fi/+gPXOfC//AJGW5/68 2/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/ AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1xXgL/kddP/7af+i2pT/iL5GeO/5G kP8At09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEPSkpT0pKQgooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqG7uUs7Z55AxVcZC9 eTj+tAHOeOPFlv4Z8N394JY/tFv5fyyRsy/M6jnHs3rXyl4y8TSeJPE99qZEJFwEGY1ZRwirwCc9 q7b4weNLm88Razokcsos28jEbRpjhI369eoryWqKLOnWbahqlpZICXuJkiUAgElmA6njvX1F8JvB H9haBKt2s8c635lVTIjAjYmOg9Qa8g+FXg8a1e2GrMsJW21SMHdIwbClG4A4719U29tDaxlIU2qT kjJPP40mJktFFFIQUUUUAFFFFABXzD8a4x/wmOuPzn/R/wD0XHX09XzF8a2H/CX64vf/AEf/ANFx 00NHkVfQPwU1j9zoemZT/l4/hOf+WjdelfP1eu/BS4b/AITDQ4cnb/pHGP8ApnIaGDPp2iiikIKK KKACiiigAooooAKKKKACiiigAoopksghheVs4RSxx7UAedfFTxImm6Rqmllow1zpUuAyMT8yuvBH Havk2vY/jt4gkk8W28Fu7pDJpiqysi85klB/SvJrawluoy6MgAOPmJqij6Q+B/hp9C/t3zVkXzvs +Nzq3TzPT617BWVo2jRaR5/lIq+btztYnpn1+tatSSFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF MkkWPGQefSlVwxwM0AOooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigA706m96dTGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOu n/8AbT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8 i6r/ANvfkeceAv8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2w ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigDifih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8A rzb/ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3 /X4v/oD1xXgL/kddP/7af+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKAEPSkpT0pKQgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigArz/AOLetwWPgDWI8xvMnk/u/NAY5lj7fQ16BXzl8a/EA/tfXNGzH/yw42tu +7G3XpTGeN6hd/br6S42bN+PlznGAB1/Cl022a81WztUzumnSMYGTksB079aq11HgfSZ7rxd4flE Z8ptRgywYdPNUGmM+kvhBokug+Erq1mLlnvnkG+MocGOMdD9K9AqtY2aWULRoWILbvmI9B/hVmpJ CiiigAooooAKKKKAEZlQZYgD3NfKHxpuFb4k65GMH/Ucg/8ATGOvpzXr6PT7FJZGCgyBckE9ie30 r5M+Kl4t58RtWmQgo/k4IBHSFB3+lNDRxlet/BSF/wDhMtDl2tt/0jnHH+rkHWvJK98+CmlSZ0PU drbP9I53DH/LRenWhgz36iiikIKazqmNzBc+pxVbUdRt9Msbm7uZNkcELTOxUnCqCScDntXjnjX4 2wWn2H+wJrK73eZ53n28w2427ccr1+b16UAdx4i+J2haH9m8i+06+87dny79Bsxj0z1z+leOal8V r3xN5X2LwrcSfZ87/JnMuN2MZxHx9015xa6fq/iff9jtEl+z437XVcbun3j/ALJr6N8FfCKy0D7d 5z36ed5eN00bZxu9F96YzzWy8Ca9fTGKbS9StlC7t72T4J445x6/pWnb67qfw5kN3eeHruWED7Gs k26BWPUEEoRyEPH+FfRVeY/HCyjuvBlmrlgP7RRvlI/55yUAcT4x+MNrqnhiyji06HzvNR2jW9DM vyNkEbexNcj4Z8VPrHiW2s49OYPMXI2ybjwjHpt56V57doIryeMZwsjKM+xr0n4R+HJ2+IGiXUsb rA6SvuDr0ML44696Yz6Q8II8fhezWRGRxvyrDBHztWpeXDWtq8yRGVlxhB1POKdbwLbQLEhJVc4z 165p8iCRChzg+lSSeLeLvG+vWvia8gtfBGpXkK7Ns8XmFWyik4xGRweOvauX1Lx/r39n3KXHgbUr eMwtvkkLgIuDljmIcCvoOTSLeRy5eXJ9CP8ACvL/AIrX1ppFrfad5p3z6ZIyhlJJ3B16gY7Uxnzt rGp/2veJOIfK2oE27t2eSfQeta/h5NZGnyfYdAv76LzTmWCJ2UHA44U89D+NYOmWxvNVs7UAkzTp HwcHlgO/1r6l+FfhOPTfDFzDMZkZr1mALqeNiDsPagDgh488TD/mnurflJ/8aru/h9rGq63/AGj9 v8OXuk+T5Wz7Qrfvc7s4yi9MD1613f8AYlt/fl/Mf4VbgtUt92wsd2M5oAnooqG5u4LOMSTvsUna Dgnn8PpSEPlmihUNLIkak4y7ADNcT4o+KGi+HoC0Nzp99Os/kvAl+isnDZJABIwRjp3rhfiH8ZIb WKWx0aWzuLu3vjHJHLbyjCrvBOcgE5x0NeNWWm6x44128NnaJLdSl7uRI3VAMtzjeemWHGc0xnpP iD4t3HiK8udP0/w1LcPPt2G3uTKW2gMcAR89DVLT/CWu640d/LpGo2nnZyjWjttxkdcDrj9a7T4b fCWPTYdM1jUheQajH5vmRCaNoxneo6A/wkHr1r2O2t0tbdYULFVzgt15OaAPnuz1vUfAOrJ9q0G6 ktbLO65l3Qod68ZJUgcuB15q9rHxttb7Sr2FdLhVpLd4xi/BPKkdNnvXYfGvTYf+Fba5fbpPN/0f jI2/66MelfKFAHonhzxdJf8AiXSrZNNYedeQx7hLuxlwOm33r6i0GCS3sXSRGVjKThlx2FfMnwo8 NvqWp6bqgWQi21WLJV1A+VkbkHnvX1fQwYVxfir4iWXh/wCyfZI7fUvP37vKu1Hl7duM4Ddcn06V o+KvF1l4W+yfa50i+079u6N3zt25+7/vCvOPC/gC91/7X/wklvLZ+Rs8j7NNH827duz97phfTqaA PIfGT6xJ9i/tDQL7T8b9n2iN13/dzjKjpx+daXwy8Ux6N4kuLiS3Vg1myYabb/Gh649q739oK5gh /wCEd2vnP2nqD/0yrw7R5Gju3KgE+WRz9RQB9vaVdLe6NY3YAVZ7eOQDdkDcoPXv1rh/HfxJ0/w9 Y/6OtrqFyl35ElvHeKrpgNkkAEjBGOneob3xtD4U+GHhy98yEO9vbQsJY3YDMJP8P+7XC6B4Cl8d eIry/wBXjng0+9V76GW1lRSxdwV4bcQCrE4Iz0oA8z1zxd/al/fzfYfK+0TvJjzd23LZx90Zr0T4 PeMhJr+i6F9h258/9/53+zI/3dv4da2dX/Z+0xLKeTTZdVmu8gxo9xCFPzDP8A7Z71N4B+E994c8 Wafqdxb3MaQeZuLTxMBujZei8/xUAe2K25QaWkRQihR0FLSEFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAHenU3vTqYwooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAK5vx7/wAiVqH/AGz/APRi10lc349/5ErUP+2f/oxamfws5sZ/u1T0 f5HnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLXnHgL/kddP/7af+i2r0fx7/yJWof9s/8A 0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/ANtP/RbV7XXingL/AJHXT/8Atp/6Lava6qh8J05D/u0v X9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFAHE/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGldH8UP+Ratv8Ar8X/ANAe uc+F/wDyMtz/ANebf+hpXPL+Kj5vE/8AI2h8vyZ0fxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W 1dr8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbUp/xF8jPHf8AI0h/26e10UUV0n1AUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpSUp6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBXvZfJtHk54x069RXyL8XrhpvifrLb32nyOCf+mMdfV/ iDP9h3OBk/L/AOhCvkP4lZ/4WBqmRg/uv/RSU0NHKV7d8LdH86x8P3uyA4ug2SPm4mPt7V4kAScA Zr6n+DlmD8ONClIfIeU+3E70MGepUUUUhBRRRQAUUUUAFFFFAHnnxj1MaX4RtJy0q7r9EzEcH/Vy H1HpXy1r95/aGt3F1lzv28ydeFA/pXqPxm8Rf2jFc6Z5tq32bVW+WNsuNvmLzz7+leOUxk9nbNd3 aQIVDNnG7pwM19Y/CDSvsnw90Z3SEyL5+WUc8yyd8V4R8JdClv8Ax5o8kkFyLZ/OzKiHbxE/fGOo xX1fp1mlhYx20ZcomcF+vJJ/rQwZaqG8uUsrG4u5AxjgjaRgvUhRk49+KlZgilmICgZJJ4ArxT4y eNJNPuZ9HtpLGSG70tgxZsvlzIpxhsdB6UhHMfFv4gNe6uLfTrrU7e2l0/y3i8zYrEtIDkK2DkEC vIIoprzP7zO3++x70WNub3ULa1VXYzSrGFQZY5IGB7819D/B7wOtj/bX2uG/t9/kbfNXZux5mcZX 3FMZ1PgD4fxeHf7R+3WemS+f5ezyog2Nu7OcqPUV6FRRSEFeVfHi+W38E2Z+cH+0kHy/9c5a9Vr5 m+MuufbkutP8y3Pkaq/yofmG3zF5596aGjyOUma5lcH7zFufrX1l8O/Dq22ieHdR8m1BOnwvuVfn +aEd8e9fPPw10j+2fEdxb7Jm22jSYhGTw6D0PHNfXWiW/wBk0DTrbDDyrWKPDdeFA596GDL9FFFI RFcyiC1mlOcIjMcdeBmvmD446wbzxha+TJOsZ01FKs2M/vJOwPvX0P4wvYrXwdrr+bEJY9PuGCsw 6iNiOK+Nda1CTVb6OVxHuEYQCPp1J9T600NGt4B0qS98X6FMDEYl1O3DK+ef3ik8Y96+yrS1jtIj HHHHGC2cIuBXhfwK0MXPh9r2RLhXh1Q4wMLwkR54r3uhgwooopCDOK+fvi58RVltptJ02fU7W7tN SZJJFfYpCiRSAVbOM47dq0fjP42Nh/Yn9mzWFzv8/wAz5t+3Hl4+63HU/lXz7dTS39/cXJTMk0jS MEBwCTk49uaYyzZ2V1ruoz7Zg0zbpneZiSxJ5JPJJya+pfhv4Jh0bTtP1CW007zJtNjVnijG9iQj HJ2jPSuc+DfgxNLuINYMd8jXelrkyrhPmMbcfKPT16V7MBtUAdhihgxERY1CooVR0AGBTqKRmVF3 MQAO5NIR5Z8a78f8IHrlnmTP+j8fw/62M+tfLsEZmuI4lxl2CjPTk16z8adaL+LNc01XgKHyOh+b /Vxt6/0rz7whZvd+L9EQRyMj6hAjMi5xmRaYz6E+BGjrbeDbozxQPKNSdlcLkj93F3Ir0zWZza6F qFwCymK2kfKHBGFJ496g0DTU0uxeBPMw0pf9516Aeg9K1aQjxq1s7j4gb9sgl+xY/wCP5i2N/wDd +9/c56dq9ijhjiz5caJnrtUDNPxioZ50g273Rc9NxxTGfLfxh1Uan/YuGmPl+f8A6w+vl9OfauC0 NlW9cuuR5Z7e4pmqX733lbvL+TP3PfH+FUo4pJm2xRs7YzhRk0xnqPh6S48cXJ8PpO8i2cPmiO8c mJQhCfKOcH5uOOma+kvD2mxaZoOm24hhWWG0iiZolABwoBwcdOK4n4VeF4tK07TtUAuhLcaXEGEo G0bgjHHA9PWvSqQgooopCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigA706m96dTGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0 W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvf keceAv8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih /wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDS ueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1 xXgL/kddP/7af+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKAEPSkpT0pKQgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigCpqcXn6fLHxzjr9RXyJ8WIfI+Jerx8ceT0/64pX2KyhhggEe9fNHxp8OyL4m1zWRE4i/ cfMIDt+5Gv3qaGjyK2ANwoPv/Kvrv4PIo+Fmi8f89/8A0fJXyFE/lyBvSvq74O6jH/wrTQ4jIgct MNpcZ5nftQwZ6TRRRSEFFFFABRRRQAVy3j3xN/wiuhw3wMo8y5WH92iseVY9G4/hroby+ttPhEt1 cQwRltoaWQICeuMn6GvmD4p+PpdcnvNIhkcRWupuySJdl1YKXUYAHA59aaGjgfEepPqniLU7tmYr cXksw3KAfmcnnH1qDSNMl1jVIbCBo1kl3YMhIXhSecA+lRWlld6lO0drbz3EuC7LEhdsZ6nH1r3T 4S/DNkfR/EN+hUjzt9rPZY/voMsT9D0pjO5+FnhC30fwnpNxPFG1/F52ZY5HI5dxwDgdDjpXolRw QRW0KwwxpHGucKihQOc9BUlSSYnizUv7M8LaxcLuEkNhNKpUA4IRiOv0r488U+IZvEmpx3k8juyQ iIF0VTgMx6Lx/FX0H8YdfawS804OQLjSnyBNtzu8xfu9+lfNWm2xvNUtLUZzNMkfTPVgOnfrTGej /CbwYut3NjrDLCRa6pGDukcNhSjcAcd6+o4LWG23eSm3djPJP864D4Q+Hk0XwtcwywqZDfNIrNDs I+SMf0r0WgAoopCyr95gPqaQjG8T60NB02O6PmfPMI/kUE8hj3+lfHXi3UZdQ8VaxKzkpJfzyKCo B5dvT616v8VviPFrnhe2ttPmSKVb1ZC1vehm2hHGMADjJFeL29vPqd1JtEkkpzIxClyeeSfz60xn ufwN8NrZ66dRdYyLjS8/K7Z+Zo25HSvfAAqgDoBgVyfw/wBEi07wrotyFRZn0yBX/dBWyUUnJ+or raQgoorO13UV0nRri9cgLFtyWfYOWA69utAHjnxV8XS2mq+INGDyhGtvLwI1I+eEd+v8VeEaHbC9 1/TbUgET3UUZBJA+ZwO31roviZrD6p4/1W5jmbypREMLLuXiJAee/SrXw18PSal4g0i+CO0UOqQh v3JYcOhOT260xn0d8N9DTQPDtxaoqKHu2kwjFhyiDv8ASuxqOCCO3QpGiqCc4VcUrSxocPIqn0Jx SEPrL1jWItJ8nzFkPm7sbAD0x6n3qvoHiiz8Q/aPsbwSeRt3eTOJMbs4zjp0NeefG7xA+j/2F5Mj fvftGdk2zp5fp160xnzrqus3er+V9qmMnlZ25RVxnGeg9hXW/CrwrH4n8S3FpOkTotk0wDuy8h0H Vf8Aerga+pPhH4Vj0y2sdWEShrrSo8t9n2k7hG33u/SgD0nSLFNN0eyskUBbe3jhABJACqB1PPar tFFIQVz3jjVzofhC/wBRBcGHy+UUE8yKvQ8d635JEiQvI6og6sxwBXgPxl8dhzrfhuBwVPkYkS64 /wCWcn3AP6+9NDR5H4z1Y654svtRJcmby+XUA8RqvQcdq9E+DXhldSjttVKxk22qrgs7A/L5bcAc d68v0Sxk1jW4LQb3kl3fwlycKT079K+n/g54f/sfwpcxTRYkN+0gLw7D9yMd/pQB6TRRQCD0NIQV 5/8AE3xC+g/2XsaRfO83OxFbps9frXoFfOPx08SDUP7A+yzAbPtG7yp93Xy8Zx9DTGeJ16R8JvCa a74qurW6SKSNLJ5AC7LyHQdvqa87it5p8+TDJJjrsUnH5V9f+D/BEHhzV5byNYwXgMXy2wj6sp65 /wBnpQwZ1um2i2GlWdmgAS3gSJQCSAFUDqee1WqKKQgooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKADvTqb3p1MYUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s//Ri1M/hZzYz/ AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDRbV6P49/5ErUP +2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8AbT/0W1e11VD4 TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+KH/ItW3/AF+L /wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9cV4C/wCR10// ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2uiiiuk+oCiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAQ9KSlPSkpCCiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACuD+KPhk614L1VbZZZLqXydqB1UHEiZ6+w9a7ymyR pKhSRFdD1VhkGgD4W1rS59F1afT7mMxzRbdylgxGVDDkcdDXqPwy8axWKeH9FaSEMbxY8GNy3zzE 9Rx/FXVfFr4eS3KaxrttFpsaN5O07Ssg+4h6L/XpXgqifRNahLSssttKkm+FiCCMMCDxzTGfdEci SruQ5GcU6vF/hZ8TLabThYX7anc3dxf+XHLIQ4UMEABJfIGcn8a9mRxIuRnrjmkIdRRRQAVHLPHB jzG256cE1Xv9Sh07y/OWRvMzjYAemPU+9fN/j74sjWv7P/sS61my8nzPNzJ5e/O3b91znGD19aYz o/ix8TraSxfS9Nmt5ru11EpJG8Mg2hQ6nk4B5x0rw2G1vdd1GdreEPPIWmdVYKBk84yfU1saP4Y1 Xxlq06wXcJmdWuWe6kbLZYZJIBJOW/nX0R4C+GsGhx21xqNjpM7NYrGzJCGLP8pJO5R6HmgDmPhj 8KJLC4i1TUI7qFLnTwcieIjcxRsAAE9jXtOn2MWm2MdpCztHHnBcgnkk9vrU8caQxJFEipGihVRR gKB0AHYU6kIKKKKAPnf4/TsniyCMAYbSlzn/AK6S15N4Qj83xpoSf3tRtxx7yLXsvx2097jxAtyv l7Y9K5z14eU+leOeDnCeN9AY5wNStzx/10WmM+zdEtRaWTxjPMhPJ9hWlVHSp1uLVnUEAORz9BV6 kIK81+IHxMtPDX9nfZZ7d/tHm7vOhkONu3GMY/vVc8cfEPT/AAx9g8+O/wD9I8zb9nC/w7euWH96 vG7XwVrup7/7Uv7e98vHl/aJnk2Z643LxnA/KmM8reZpFwQOueK7v4TaE2t+KLm3KvhbFpBsZQfv oO/1rgK+h/ghpS2+qrdGOH97pQ5VfmOWjPPFDBntGl232PSLK15/cwJHycnhQP6Vh+JfFsOlaTeP YyRy38LBViljbaTvAbPTtnvVXxx40svC2lR3E6Xm03Ig/wBHC5ztY92HHy1574W0XWNa8bwavc3y 3Gj3zy3K2lxM7/I6MyBkIK5GV7kAjigD1nwrqt1rXh201C7jiSWbfuEQIUYdlGMk9gK5r4uavHZf D3WEVlMyeR8rKT1lj/oa7eytI7Gzjt4Yo4o0zhI1CqMkngD614z8a5n/ALJ1yLe+z/R/lzx96OgD 59vLh9Qv2lwu+QgYXgdAO9fQPwI0HzPC813MJFeLVCQAy44SI18+6cA2qWgIBBmQEH/eFfVfwlaK z8E382wBI7yR2CAc4jQ/0oA9CnmjtreSeVtscal3OM4AGTXkHj74qLo+uwW+mvaTQtbK7NNDJkNu YY6jjAFR/Ej4l2kEs2i2x1KG4vbBkiZCFRWfegJIbI59Aawvh34FvfEfh+e81FrK9mS6aISXZMjh QiHALKeMsePc0AeifDLwhL4U/tTzUlX7T5WPMkRs7d/Tb/vV5p+0HKx/4R3gf8vP/tKvooKq/dUD 6Cvn/wDaGsJB/wAI5gp/y8/+0qAPFNOs1u/M3Fhtx90jvmvs7wVCIfA/h9Rn5dMtxz/1zWvjTS51 g83du5x0/GvszwZIJPBGgEZ5023PP/XNaGDN2iivOfiF4/tNE04Kn2+OVLzyWaDAzgPnncOOKQif 4k+N7LQfDupwQzxHUYfKxDJE5HLoeSMD7pz1r5Y8RavJr2u3OpzCMSTbciMELwoXgEk9q9F1XRtY 8VxTeKlvw+lXO39xdTOZDtxHyuCv3lz16YrzXWrX7Fq09vhBs28J05UH+tMZ2Xwi0Wa9+IOjSujC 3fz8urLniKT+or6t02wTTrdoYy5Bct8xBPQDt9K8d+Cmkr/ZOh6j5cG7/SPn2/P96ReuP616V4s8 T22hadepKtz5otHlVoQOOGxzkc8UASeIfFFroztZecn9oSQF7eJ42IdjkKCRwAWGOop/hPUtS1TS pZ9Ut4YJ1nKKsXQrtU56nnJNeU+HYL/x7rWn+IILpms7O7jhljvJGLtsYOwAG4EYfueua9vhgigQ rFGkak5wigDNACTXMVvt819u7pwTXxJr+tvrP2fcI/3W7GxSOuPX6V9O/FHXxof9lZe5XzvO/wBS cZxs68j1r5IoQI9H+FfhR/En9rYSU/Z/J/1bqv3t/XP+7X1nXmXwk8Pf2J/bG+O2HneTjyV9N/Xg etem0hBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFAB3p1N706mMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub 8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8 iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf /QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yN ofL8mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ ANFtSn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIe lJSnpSUhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAVyfiLwHpniBr6e5nvFkuYijCJ1A+5t4yp7CusrP1HV7fTbe4mmSVlt42kYIASQBnjJoA+fPE3w bj0u4zpNrrd2Fg8wHy/My4J4+VB6Dj3rn7K48Z+DgBB4auvKjf7SzXVjNwRjqRjj5f516l4m+Oel WHmW9pBqcdw9uWibyIiFc5AJy/qB2rzi48f+K/Ft5FHFqoFpNi1ljmt4lLAnnlVOBhvXNMZeh+O3 i23QpJpmkoSc4eCUH/0ZWpB49+Iet7t3hUN5P/PHTrg9fX5j6VPofg7w4bJ/+Eh043d35h2SRTSK AmBgcMvOd3bvXr2jXekQef8AYLWaLO3fuOc9cdWPvQB41H8Lm1/P9p2er2/kf6vZHs3buv3kOegr 0TRfhBoGjef5F3qbebt3eZJGememEHrXoKsG6UtIRBZ2kdlaw28ZYpFGsaljyQBjn8qnoooAKKKK ACiiigDA8WaHFrOg6nE3nl5bKWELFjJyrdBg8818seIvAmsaBq0P2DRtWmiSNZi8lq7AMGPUhRxg Cvsaqt3p1pfBhcxbwybD8xHHpwfemM+ZfC3jzxt4c097Gy8PRyLLOZP3tlMWLEKMDDD0Fbs3iz4g eIdv2nwrIvkfd8nTpx97rnJPpXtcfg/QYpFkSxwykMD5z8Ef8CrVt7O3td3kx7d2M8k5x9aAPO/C fwp0nRvtm2bUx5uz/Wsnbd0+Qeteiz2yXG3eWG3OMVNRSEfHuu/DnVdNsUmttH1mR2kCENasRjBP ZfarXh1fGllMI7fwxevsh2DNhMTgY9PpX1lc2kF3GI503qDuAyRz+FR22nWlpIZIItjEbSdxPH4m ncdzyrwV8Nrc351e/TU7e7vLbzJ43ARUkcqzKAVyMHPBOa9atoFtbWG3QkpEiopbqQBjmpaKQgrz /wCK3h5tV8E6v9nhup7mTydsUC7icSJ0ABPQZr0CkdFdSrDINAHw9feGtXsr2SA6TqClMcPbOD0B 54q5pejeIbnbaxaHfyQzSBHdLSQkZwDg4xnFfXl54S0O/uXuLmy8yV8bm81xnAx0B9BUtj4b0nTc fZLTy8PvH7xz83HPJ9hTuO55L8N/hVbwxQ6jqMerWt3a34kjilUIGC7GBIZM4zkde1e2RxiNcDPX PNPopCCsbX/D9rrv2f7S86+Tu2+UQOuOuQfStmigD4u1fwLrmneTs0PV/wB5uzvtH7Y/2feum8L+ NfGnht0itfD6v5NuLcCaymJwNvXDDn5RX1DeabaX+z7TF5mzO35iMZ69D7VmjwfoIlaT7B87Eknz n5z/AMCpjPFG8SePPGH+ial4Xlhtl/fpJBp86lm6DliRjDGu/wDBnw20/S7hdXZ9RS8urUedHKVC ozFWYAbQRgjHJr0G2s7e0RVgj2KqhAMk4A+tT0hGdd6XDNoz6fuk8s45BG77270r5l+J3gjVU8Za rcWOkarcWw8rZKtszq37tAeQuDzkV9V1BcWkF1G0cyblbGRkjP5Uxnyh4dXxlDbW2kp4avTajdhz YTbupbr06+1ekeE/h2dYu7XWdattTsry0u08uPy/LUqhVgSGUnqSM57V7Hb6baWrK0MW0rnHzE4/ M1bouFyC1tY7OIxxliC275jS3hdbKdo13SCNiq4zk44FTUUhHgfxa0HXPEv9j7NGv5fs/nZ+zWrt jds68H+7/OuB0z4Z6xN5v2nQ9bjxjb/ojrnrnqlfXVFO47kcUCw52knPrUlFFIQUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAd6dTe9Opj CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/ACJWof8AbP8A9GLX SVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0Ytec eAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/7e/I848Bf8jrp/8A20/9FtXtdeKe Av8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X/wBAeuc+F/8AyMtz /wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T/wAjaHy/JnR/FD/k Wrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtSn/EX yM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIelJSnpSUhB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABVPVNQi0vTpby YoI48ZLuFHJA6n61crP1vR7fXtIn026eVIZtu5oiAwwwYYyCOoHagDzHxJ8StYu7m60nRfDt9OG2 eVfWU7tuwAx27U+qnB9fpXMr4S8b+KJluLjW/EOmxXhEcltIkzLGv3DnLLkEDPQda9h0XwXp2hPA 1rNdOYd23zXU5znOcKPWuiAwMUxniln8Aej33iP7W6vnM9huO305kPHX863rX4OWdomIb+BG3bgy WIUg+vDda9OopCPMrj4UXssgaPxXcRDGNq27fn/rK5TUPhX4u07y/snjnW5vMzu8mKUYxjGcSn1N e8UU7jufLJ1j4i6H/wAfMXimfzvu+a9wuMdcZB9a3NL+P91Y+b9q0Oabfjb5uokYxnOMxn1Fe8ar oltrHk/aHlXyt23yyB1x1yD6V4x4k+A0I+y/2N/aNz9/zfMuIRt6YxlR7/lQB1ug/GXR9VKC7Nhp +YRITLqKcNx8vIHPJ/Ku4svEmiagiG21fT5WZA+2K6RyBxzwenNfH3iLwNrvhySZ7yxMVsLhoY3a aNiTzjO0+gPanaJ441Tw7KDbW9o7LF5OJUY8DHow54oA+0lZXUMrBlIyCDkEUtfPegfHy7Ajh1Rd NghSAAMlvMTuGBjhj2zXeaP8Z/Cl6kKXWrRpcPu3IlpPgYzj+E9hQB6RRWHZeMNB1FI3tL/zFkzt PkuM4znqvsa1I723mUNHJkHp8ppCLFFQSXkESlnkwAMng9KyL/xn4f0wMbu/8vahkP7mQ/Lzzwvs aAN6qt1qVjY7Ptd7bW+/O3zpVTdjrjJ56ivMvEXxu0CzSVdJ1C3uJPs5aMS2s/MnOB0HHA/xryPx N8XtZ8QfZfMttOHkb8eXFIPvY65f2p2HY9su/ixb/J/ZWnxar18z7LeB/L9M7VOM8/ka9Hrw34S/ Dq4sP7Y/tWKeDf5Pl7Zo23Y356Z9RXuVABRRRSEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAHenU3vTqYwooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCjFqZ/Czmxn+7VPR/keceA v+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0YtY0 /wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq9rqqHwnTkP8Au0vX 9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F/ /Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1dr8UP+Ra tv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAh6UlKelJSEFFFFABRRRQAUUUUAFFVrvUbGw2fbLy3tt+dvnSqm7HX GTz1FeZ+IPjdpekfZ/scFnqPm7t3k6iv7vGMZwp65P5UAeq0jMFGTXyzf/EPUPEXl/ZfC9y3kZ3e VK0n3sYziPjpWH/wjnifWriRh4Y1eJJCZg32ORgcnp90etOw7H1099EhOVfg44Apn9pQ/wB2T8h/ jXy1b/CPW7sKZINQgyu4htOfg+nUVpQfArUZcb766j4zzpzfl96gD6T/ALSh/uyfkP8AGj+0of7s n5D/ABr51T4AXjYzq86/XTj/APF1MP2e7kjP9uTD/uHH/wCOUAfQn9pQ/wB2T8h/jR/aUP8Adk/I f418/j9necpn/hIJAfT+zT/8cpkv7Ppt4ZJp/ExijjUuzPYbQoAySSZOBQB9B/2lD/dk/If40f2l D/dk/If418k+IPBOlaEJEh8VWd6wgMoCKqljz8vDn0/WuIYAHg5osFj7t/tKH+7J+Q/xprarAmMp Jz7D/GvhmCzubrd9nt5ptuN3loWx9cVv2fgHxRd78+H9YTbj/lwlOc/hRYLH2H/bdsf4JfyH+NH9 t239yX8h/jXzFbfBnWZ928X8WMY3ac/P61rR/AS+dsHU7heOp05v/i6APof+27b+5L+Q/wAaP7bt v7kv5D/GvAP+GfLraD/bc2T2/s4//HKkj/Z4uHPOvSrx304//HKAPoiKdZVRlBAYZGalrlfDHhRt BtNMhN2ZvslukJJi2bsJtz1OK6qkIKKKKACiiigAooooAKKKKAOe13wXoXiKDytRsRMvm+dgzSL8 2Dz8pHqa8Y8X/Ay4iEs+kHTrdHuj5Ye4lJEZ3EA5U89K+iKKAPhfVtFudGuZ4Lh4maGZoWMZJBYE g4yBxxVKC5ltpVkhfa65wcA/zr7k1nSv7WtEg87ytsgfdt3diMdR615f4q+CbazLd3aa8UaXZiMW W4jG0f3/AGp3Hc8IsvHXiTTkjS01Ly1jztHkRnGc56r7mtWP4u+OoVCx65gDp/okH/xFbOq/BXVt PklW3e9uwmNrR6c/zZx0wx6Z/Sufm+GvieKVkXRNXcD+IadJz+lAFiT4v+O5VKvruQRg/wCiQdP+ +Kx7/wAceItTDC71HzNyGM/uIx8vPHC+5rTt/hj4lmZQ+katGC2CW06TgetdTonwN1G9eJ7m8urP EwUiTTm6cfNyw45/SgDyyFJtSvoLfevmTOsSluACTgZx9a9V8C/CCXWft/8AaH2KbyvL2fv5Vxnd noB6CvYfB3w5/wCETtRD/av2rFz5+fs+zsox94/3evvXd0XC5XtbG3s9/wBnj2b8bvmJzj6/WrFF FIQUUUUAFFFFABRRRQAUUUUAFFFFABRWbda/pdps83UbNd2cbrhR0/Gubv8A4maPYeXvuLE784zf IvTHt70AdtRXher/ALQFvH5Pk6FFNndnZqI46ekdVPhvrk3izxtqT/2fJaLLby3IO4uOZE46DP3u vtTGe/0VFbIYrWGM9VQL09BUtIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXnvx J8bReHbe805rVJnm055ATOEPIdcYwc9KAPQqK+KL/wAVfbp1l+xbMLtx5ue59vevYvhh8SY7j+1f M05Idvk43XI5+/8A7NOw7HutFFFIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ Ad6dTe9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2 z/8ARi10lc349/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s// AEYteceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDR bV7XXingL/kddP8A+2n/AKLava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8 jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6 /F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH /bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIelJSnpSUhBRRRQAUUUUA FZmo+INL0q4WC9uvKlZN4Xy2bjJGeAfQ1cvp/sthc3AXd5UTPjOM4BPWvmD4weKtQuvFtq9vPc2q CxQFI7hsE+ZJzxj/ACKAM3xh8S9X1z7F5er+f5O/P+jIuM7f9kelQ+Dfh5qniH7bjS/tHkeX/wAv Cpt3bv8AaGelc/4d0Ea39pzcCHydv/LPdnOfcelfZ2maLYaT5v2O0toPNxu8mFUzjOM469TTGYWk fDnwxpHnfZdK8rzdu7/SJWzjOOrH1NdPb2kFrGiQptVFCKMk4A+tTUUhBRRRQAUUVHPL5MLSYzjt mgCvqmp2ukadLfXs3lW8WN77S2MkAcAE9SK8J+KXxRlN89joesf6FPp5SRPsw+ZmLg8umRxiqHxg 8e339s6z4ei+0RRfuMOt0wUfLG/3cevv7141NPNcOHmleRgMAuxJx+NMY+4up72ZXmfe+NoOAOPw +tdh4H8A6n4mubW6TTPtOnLepDcN56p8uVLDG4H7rdvWk+H3hSPXtW065muEES6jFG8Lw7w43ISD k9DnGMV9X6J4fsNBtGt7O1tokaQyYhgWMZwBnA78DmgDlNA+FXhnTPtG7RfL8zb/AMvUhzjP+371 3kUEcGfLXbnryTUlFIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBhXfg3QL7Z9psN+zO399IMZ+je1eRfGHwp4c0X +xvs1l5Pnefu/eyNnHl+pPrXvVfMXxq8QT6r/YeBJF5f2j/lqWzny/p6U0NHkVfUPwf8PjT4rLUv svl/aNKT955md27y26Z46elfP/hfRU1f7VvkVPK2YzHuznd7+1fX/hKzitPCWixoqZSwgTcFAziN aANqiiikIKKKKACiiigAooooAKKKKACiiigAoorI8Ra5/YGnx3X2fz98oj279uMgnOcH0oA16K84 f4rbHZf7Fzg4/wCPr/7Cut0DxB/blhb3X2XyPO3fL5m7GCR1wPSgDaooooAK8t+Kvg6719rm+tbD z2i01o1fzguGG84wWHrXqVNdEkRkdVZGBDKwyCPQ0AfEk/g7XrZwk1htYjOPOjPH4NXqXws+H2sQ f2t/ael7c+T5f+kIf7+fut9K96k0DRpW3SaRYOcYy1sh/pVyG2gt93kQRxbuuxAufyp3HclooopC CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKADvTqb3p1MYUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s//AEYt TP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P4 9/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV 7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of 8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/k ddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorp PqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEPSkpT0pKQgooooAKKKKAMrxQdvhLWS OosZz/5DavjjxY5k1WIsAD5AHH+81faGr2v23Rb+0GMz28kfzHA+ZSOcfWvkz4peH30HxNbWp8r5 7NZPkZiOXcd/pTQ0dj+z9aLc/wDCRbiw2/Zuh/6619HV8s/BvxND4d/trzlmPn+RjylU/d8zrkj1 r6moYMKKq3uoRWOzzVc7842gdvx964u/8Zz6xczaX4fkltL63kYySXEabCikqQPvc5K9u1IRq6p4 rLyy2WhGG61GCUrNDKjKFVchjklQcNgcHvXQ2Mk8thbyXKKk7xK0ir0DEDIHJ71z+g+GI7af+0rp I3u7mLM0iO3zOxDMccAZPoK6dVCKFUYAGBTGLXlfxd8Zwaf4b1jSopYmvU8jEbxuerxt16dDnrXo muakmkaPPfOHKxbc7ACeWA7/AFr5O+J/iS41fxrquyRxay+ThHRQeI09PcetAHHX15JqF5JdSqqu +MhBgcAD+lTaJYnU9e06wAYm5uo4QFIB+ZgOCeO9Ua9R+EvhNNXvLDV2SIm11WPlnYN8pRuAOO/e mM9z+GvhI+FPD89m6zKz3bTASOrHlEHVeP4a7akVFQYUYFLUkhRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBS 1DU4NO8vz5AnmZxlSc4x6fWviDUdSk1Dy/MVBszjaCOuPX6V9M/GPxM3h7+xdrSDz/P+4it93y/X 618sYzTGe8/Afw27/wDCQfbFkjx9n27XXn/W59favfYIhBbxxLnCIFGevAxXK+B/Dkfh/wC3+Wka +f5edjs33d3r9a66kIKKKKACiiigAooooAKKKKACiiigAooooAK+dfjd4kTUdMfS1aMtbaqcgIwP yrIvJPHevoC/vUsIFlkDEFtvygE9D/hXxv471ae/8Xa5E8hMI1OdkUqBj942OnsaaGjI0HTm1bWr exQMWl3YCkA8KT1PHavrr4ZaWdJ+H+l2jhg8Xm5DMCeZXPUfWvnX4TaG138RNG87y2hkWViu4g/6 lyOlfWFhaR2FlHbRKFRM4AJPUk9/rQwZZooopCCiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKADvTqb3p1MYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A9GLUz+FnNjP92qej/I848Bf8 jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6P49/5ErUP+2f/oxaxp/w2eJl 3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7XVUPhOnIf92l6/ogooorY9sKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK 55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2rtfih/yLVt/1+L/6A9cV4C/5 HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK 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 Z3fezZycYzgkUAXO9OpvenUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0 W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvf keceAv8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih /wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDS ueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1 xXgL/kddP/7af+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA 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 tvlSxr97f1zn+7QBv/D3wM2ta/PbapqhvYFtWkWO6h81QwZBkBmIzgnn3NfQWl6TaaVZW9vb28Ce TCsO6OIJkAAdug46VaSFY2yCemOakpCCvlj4leIZri98RaaUcIL6RMmUkfLN6Y9q+hvGWtroOkRX TMgDziP51LDlWPb6V8deJbkXnirWLoEETXs0nAwOXJ7/AFpoaOg+E8AuPiXpERIAbzuoz/yxevrv TIRb6fFECCFz0GO5rwX4KeGm+2aHru2Tb/pHO9dvSROnWvoWhgw706m96dQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A 9GLUz+FnNjP92qej/I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6 P49/5ErUP+2f/oxaxp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7X VUPhOnIf92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v /oD1znwv/wCRluf+vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2 rtfih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKAEPSkpT0pKQgooooAKKKKACiiigAooooAKKKKAOT+IWvt4 d0CC8VpAXuli+RVY8q57/SvkLX7s33iLU7skkz3csvIAPzOT2+tez/Gvxct7pbaXBMBLbaoQwS5y 3yrIvKjp1rwhmLuzMSSTkk00NCV7b8FfCiHVdD8QFYs/v+d7bvuyJ06V5JoOlyazrVvp8QYvLuwF TeeFLdO/SvrT4Z6AmjeB9LglhUXEXm5Zodj8yOfqODQwZ2YAAwOlLRRSEU9WuTZaNfXYyDBbyScD J+VSe/0r5O+K3iCTXvE1tcF3IWyWP50UH77nt9a+mvHF59m8F68APm/sy4YENgj921fGV/dveTrJ IzMQu3LNu7n/ABpoaH2GnvfeZsKDZjO4kdc/4V9v6fpkGneZ5KBfMxnDE5xn1+tfL3wk0Jda/tjd EJPK8nrDvxnf+XSvq+hgwooopCM3XNR/s2ySbLfNIE+UA9ie/wBK+M/GF2914x1x2YlX1G4cZAHW Rq+lPjNry6T4StZYZh5n9oJGwSbaR+7k64+lfLF5K99qNzOAzNLK8h53Hk569+tNDR23wg09pvib ou7aUYTHGT/zwevrW1hFvbJEAAFz0PvXj3ww8EmxuPD+tmIjNoshJtdv34SPvf8AAvxr2egAry74 k+LDaWXiHSQ0ozYyR8IpX5ofXr3r0m9uksrR7iQqETGSzbRyQOv418qfFnxFLcfEHWo4ZXMEixKA kxK4MKA9OPWgDh9JhN/run2z4PnXEcfPA5YDt9a+tfhfoi6F4ZubVVQBrxpPkYsOUQd/pXzb8PNC l1HxNo10Edoo9TgVyIiy8OhOT9DX2DaWsdnEY4lVVLbsKu0UMGT0UVHJPFDjzZUTPTcwGaQjl/Gv i2Pwt9h3if8A0nzMeUit93b13H/ar43nuprnb5z7tuccAfyr0T4n+PX8Uf2V9mlaL7P527yrvzM7 tmM4Ax92vNgrN91SfoKoo9V+CGgLqHi65FwI3jOnO4G5hg+ZH6fWvp+1hW2tIYEGFiRUABzgAYrz T4TeFxpdjp+q+WFNzpUeT5G37wRvvd+leoUhBRRRSEcr8SNTbR/AWp3ylg0XlcqATzKg6HjvXyJ4 j1JtY1+5v2LEy7eWAB4UDoOO1e6/GrxSBp2uaAJQG/cfKLjnrG/3P8+teA6ZYTatqUVnEHaWXONq FzwCenfpTGdB4E8Ny6z4h0mYmE2w1GGOVHZgWG9ScYHofWvrzRNFtNCs3tbOIRRvIZCodm5IA7/Q V5n8GPByWPhuWW9t1NzHqJkRprba4ASPGCeRyDXr1ABRRUNxdQ223zZI03ZxvYDNIR85fHLxG2pf 2D5LSL5f2jO9FHXy/T6V554T8O/2/wDbOI/3Oz77MOu70+lU9d12bWvs/mmQ+VuxvlL9cfl0r2P4 FeF939v/AGyLH/Hvt86D/rrnGfwqij3tIY42yi4OMdakooqSTnvGPiAeHNIivD5nzziL92qseVY9 /wDdr5B8T6tPqPiTV5jITHPezSYZQDguSM4r2746+IzJ4ajs7eQxyQ6oAxjm5wEkHIHSvn63hl1C 9Ea73lkJPALEnkn60xnpHwg8LG+8XaNqE4he1fz8pvYMcRyL29x619R2dpDY2qW8CbIkzhck4yc9 /rXnnwf8OxWfgbRrySNBcr5+S0ID8yyDr16GvSqQgooqG8uUs7Ke6kKhIY2kYs2BgDPJ7dKAOK+J XiJdM8P6vYfvRJNpcxUqqkAlHAzn6V8iT3Ety4eVtzAYzgDivV/jL4x/tLxJCllN/o76csbiG53I SXkznHHQivLrbT57uMyRRyMoOMqhIzTGfRHwO8Npp39veesbeZ9nxsdj08z6ete0VkaHokOjef5K xr5u3OyIJ0z6deta9IQV558V/Fj+HPDcFxbtKkhvliJVFbjY5/i+lehkgdTXyx8W/Ez6ld3+l+cz LbarJhfP3Y2mRfu9utNDR5vql42oave3rklrid5SSACSzE9Bx3r3j4N+BY7a+j1W6SB4rrTAyhJH 3ZYxtyOBXj3g3QH8R6xNaIGJSBpeIvM6Mo6fj1r6/wDC+mQ6Z4a0qBYUSWKyhiZhGFY4RQc/l0oY M1Le3itYFhhXbGucDJOOc96loopCCvOvil4kGmaRqmm5lDXGlykbUUj5ldeSee1dpruqxaLo9xqE 7IscO3JeQIOWC9T0618zfF/xf/bXiSBrOf8AcGwWJxDc71J3yZzjjoRxTGeeafG2oaxZW7kEzTJF zwOWA7fWvq34SaEmieFrm32oC180nyMxH3Ix3+lfOPgDRZtR8V6JcCN2hTU4FfERZcB1JyenQ19i 2VlFYwmKFERS24hECjP4fShgyzRRRSEFfI/jvxfJr+hw2rvKwS5WTDxqo4Vh2+tfSfi3xHH4f+x+ Y6L5+/G6YR/d2/n1r4teaWQYeR2HXDMTTQ0db8N9DTX/ABFcWrqjBLRpMOxUcOg7fWvrvQ7YWXh/ TbUAAQWsUYAJI+VAO/0rw74GeGWtdfbUJ4i0VxpZK74MD5mjbgnrXv6qFUKoAAGAB2oYMWio5Z4Y IzJNKkaL1Z2AA/E0sU0U8QkhkSSNujIwIP4ikIfVbUbj7Jpl3c8/uoXk4GTwpNWa5TxvrkNl4W1+ EOgmTT5yB5oVs+USOOtAHzr8YtbbWPFlrMGfAsEjO9QD/rJD2+tP+Ffhz+0tV0zUiIyLfVYvvOwP ysjcAcd64i7u59b1KDeZGkbbEu5i55Pb8+lfRfwO8OLa+E7iS5iHnJqTOpkgwwASPGM+9MZ66qKg wowKWiikI8U+OPimbS/7B+ySSR+Z9o3fIpzjy8dfqa+cK9F+Keryar/ZO92by/Oxuk34zs/LpXGa Tpb6l52zd+725wm7rn/CqKPor4OeG49O+yaoqRh7nSkyQ7End5bdDx2r16uf8FWMdp4N0LEaCQab bqxCAE/u1610FSSFFFZniDUV0nQ7m+cgLFtyS+wcsB17daAPn741a2f+Eh1zSsvj9xxtGPuRt161 5r4PtPt3iqytuPn39SQOEY9vpWl8StVOrePdUu0kJjl8rAEm8cRIOvfpW78H/Dc93430a/kikNq3 n5ZoCU4jkHXp1qij3z4Z6d/Zvhu4hwvzXbP8pJ/gQd/pXZ1WsbKOwhaKJUClt3yqFGcD/CrNSSZ+ u3JsvD2p3YyDBaSycDJ+VCe/0r5T+JfiZvEX9l7mkPkeb99FX72z0+le/fE3xJHpmg6tpxZVkn0u YqfO2kbldRgd+lfI0k0s2PNld8dNzE4poaJ7LT5b7f5TINmM7ie/4e1fZnhPwla+Fvtn2aGOP7Ts 3bJHbO3dj73+9Xi3wb8D/b/7a/tG127PI8v7RaZ6+ZnG76Cvo2hgwooprOqDLsFHqTikI8f+Omvm HwnbxW5kSRNTVSSqkYCSV862cD6rq4jypeZmYluBnBPau5+KfiRtS1bVNN8wslvqkuB5+4fKzr93 t1rP+F+iSaj8QNJhlhbyZRKSzxbl/wBS5Hsaoo+hvhNo0dh8P9ILIvnJ53zKxI5lf19jXe1R0ewT S9Khs4woWPdgKm0csT0/Gr1SSHenU3vTqYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAK5vx7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2f/oxamfws5sZ/u1T0f5HnHgL/kdd P/7af+i2r0fx7/yJWof9s/8A0YteceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLWNP+GzxMu/5 F1X/ALe/I848Bf8AI66f/wBtP/RbV7XXingL/kddP/7af+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ BxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8A oaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtXa/FD/kWrb/r8X/0B 64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB 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 5UEjqM0xnL2ttdeI9dSCCIPcT5wikLnauerH0FfUfwq8JDSPCGkz3QmjvYvO3Rl1ZRmRwOnsfWuH +D/gKQNo2v3EWnyQfv8AcCuZD/rE7rjr79K95iijgjEcUaxoOioMAfhQwY+mSyLDC8rnCopYn0Ap 9ZPie4+y+E9ZuMsPKsZ3yvUYRjx70hHgPx08Rb/FUFvbGN4pNMVWYowIJeQV5Fa2Nxe7/Ij37Mbv mAxn6/StbxZqp1nVorjfM+2ER5mOT95j6njmu5+DHhz+2/7bzHav5Pkf69c4z5nTg+lMZ9C+HPD8 ehfafLMp87bnzGB6Z6YHvW7RRSEFc3421tdB0aG6ZkAe4WP51LDlWPb6V0leMfHrWP8AikLeGF54 5E1RQSDjpHKOxoA+f/EdyLzxRq10CCJr2aTgYHLk9/rXv/wu8IPaXHh7WSku1rRZMmRSvzwnt1/i rwfw7p0mtarNEDGzeW0hM3OfmHseea+x/Clolr4R0SLy4w8VhAhKjuI1HFNjZs0VynifxAkcd1pd u1xFejZtlQ7QOjdQc9OOlanhh5pPDtq9xK8sp37ndixPznuaQjX706m96dTGFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiVqH/bP/0Y tTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1e j+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvfkeceAv8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/ 9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigDifih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/ yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFe Av8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1xXgL/kddP/7af+i2pT/iL5GeO/5GkP8At09rooor pPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEPSkpT0pKQgooooAKKKKACiiigAooq hqer2+leV56St5mcbAD0x6ketAHOeOfF0fhv7Bi4sU+0eZ/x8PjO3b0+Yf3q+T/E2pNqXiPVbgmM rNezSho/unLk8c9Oa1vGnji78X/YftE0sn2XzNvmRImN23pt6/d71yJOTmmMfFDLOxWGJ5GAzhFJ OPwr6Z+D3gxNFkttY8u+SS60tQ3nLhMt5bHHyj09a4/4VfDP7XfJf6mtrPaXOniWNFmkDAsUIJwB 2z3r6HsrWOxsLe0hXbFBEsSKCTgKMAZPPagCeiiikIKKKKAGTRLPBJCxIWRSpI64IxXgXxg8BSXG r/brK11K4WDTs74496BlaQ4JC/SvoCorm2hu7eWCdN8UqFHXJGVIwRxQB8k+BfEuq+B/t/8AokUP 2zy/+P2Nlzs3fd5H97n8K+h4viRoDZ3+INDGOn+mR/8AxVO1P4W+EdV8r7TpAk8vO3NzMMZxno3t WB/wo7wn/wBAmL/wLn/+KpjOZ8T/ABb1lvsv9jwaXfff83ykeXZ0xna/GeevpXn/AIb8A6vr+oyW ur6Nq9rbpEZFdLV0JYEADLKR0J/KvoTT/hX4O03zPs+jhPMxu/0qY5xn1f3rroraGFi0aYJGOpoA 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 RuHy4PXvXfUUUhB3p1N706mMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACub8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H 8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPO PAX/ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv +vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8 T/yNofL8mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/ /bT/ANFtSn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAIelJSnpSUhBRRRQAUUUUAFFQXV5BZQSTXD7I40MjnBOFAyTx9K4TW/i94X0m8SA6pGN0Yf5rWY 9yOy+1AHX6p4g0zSPK+239nb+bnZ51wse7GM4yeeor5k8ffFO+8S/wBn/YXuNP8As/mb/Ivmbfu2 4zgDptP51leL/iTqfiz7H9qgsk+zb9vkxuud23Ocsf7orA0fwrrWv+d/Zll5/kbfM/eou3dnH3iP Q0xmbb2d1d7vs1tNNtxu8tC2M9M4r174cfCafUL1bjVIZI7aay81PtWnkpuJQgAscE4J/Wu18GfB i10z7b/aDX8PmeXsxPE2cbs9FPqK9asrSOxsbe0iLGOCJYlLHkhRgZ9+KLhcr6VpNrpNhbW1vBCp ghWHfHEEyFAHbp06VfoopCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKADvTqb3p1MYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A9GLUz+FnNjP92qej /I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6P49/5ErUP+2f/oxa xp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7XVUPhOnIf92l6/ogo oorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v/oD1znwv/wCRluf+ vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2rtfih/yLVt/1+L/6 A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKAEPSqGsarBomlTajcpI8MO3csYBY5YKMZI7mr56VHLEs0RjYkA+lIRx0fxO0WQ Ai11Dn1jT/4uiT4naLGpJtb/AI9I0/8Ai6uar4E0vWHma4nvFMu3d5bqOmOmVPpXN3XwN8M3bO0l 9q4LYztmj7f9s6AJbr40eHbUyK9lqpKDJ2xR+mf79cnrvx20WZJI7OLW4XaAqpCouGOcHiT6Vuf8 M++FM5/tDWv+/wBF/wDG6t2vwO8M2jq0d9q5KuHG6aPr/wB+6YzwXXviFrGqz4tda1mOFofLaN7p wGJJzkBiCMGsa20fU9djN012shQ+XmeRi3HPoeOa+udN8D6ZpRQwT3bbZBIN7qeRj0UeldIiCNcD PXPNFwufO3hj4IaxH9q+2yaNPnZs3M7Y656x/SvdNN8M6Npnm/ZdI0638zG7yLZE3YzjOAM9TWvR SEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAd6dTe9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x4C/5HXT/ APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/4bPEy7/k XVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6qh8J05D/u0vX9EFFFFbHthRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA HE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaVzy/i o+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kWrb/r8X/0B64rwF/yOun/ APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAIelJSnpSUhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB3p1N706mMKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8AIlah/wBs/wD0YtdJXN+Pf+RK 1D/tn/6MWpn8LObGf7tU9H+R5x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi15x4C/5HXT/+ 2n/otq9H8e/8iVqH/bP/ANGLWNP+GzxMu/5F1X/t78jzjwF/yOun/wDbT/0W1e114p4C/wCR10// ALaf+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wCh pXR/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaVzy/io+bxP/ACNofL8mdH8UP+Ratv8Ar8X/ ANAeuK8Bf8jrp/8A20/9FtXa/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1Kf8RfIzx3/ACNI f9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAh6UlKelJSEFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAHenU3vTqYwooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/ke ceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWN P+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBR RRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15 t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9Aeu K8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFACHpSUp6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAd6dTe9Opj CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/ACJWof8AbP8A9GLX SVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0Ytec eAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/7e/I848Bf8jrp/8A20/9FtXtdeKe Av8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X/wBAeuc+F/8AyMtz /wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T/wAjaHy/JnR/FD/k Wrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtSn/EX yM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIelJSnpSUhB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB3p1N706mMKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/wBGLXSVzfj3/kStQ/7Z/wDoxamfws5s Z/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT/wDtp/6LavR/Hv8AyJWo f9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8jrp//bT/ANFtXtdeKeAv+R10/wD7af8Aotq9rqqHwnTk P+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6GldH8UP+Ratv+vxf/QHrnPhf /wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1dr8UP+Rat v+vxf/QHrivAX/I66f8A9tP/AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAh6UlKelJSEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUVn65rNn4e0O91e/fba2kTSvggFsdFXJALE4AGeSQK808K2uv/FPS5fEm reINZ0SwluHXTbHR7lYQsS4VmdwC0hLKR8wGCrEABgAAet0V886XH8TPBfxZ07SrrUNV1rT7mVVM srS3EMlqzqryYJPlsm5STn5TjJKt830NQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFAB3p1N706mMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/wDI lah/2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDIlah/ 2z/9GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPAX/I6 6f8A9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/wCv xf8A0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8v4qPm8T/AMja Hy/JnR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP /RbUp/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIelJ SnpSUhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUVj+JvDOl+LtDm0jV4PNt5OVZeHicdHQ9mGT+ZBBBIIBsUV8c6J4b07SvjBB4Z8R2s93YrqDWLJ taFpd2UikwGBCksj8H7vTPf6y1Lw5our6MukX+l2k+nogSO3aIBYgFKjZj7hCkgFcEdsUAalFfGu veFLTwZ8UY9G1sSHRUvYnaR9/wC8s2cHOVAJO3KkqPvKwHSvrrRtD0vw9pyWGkWEFnarg7IUxuIA G5j1ZsAZY5JxyaANCivFPjV4U0jWfEHhq0tbCSPX9bvVhe9hjL4t4xh2dAwDFQ6NnGdqEFgAK9H1 LwJ4d1PwevhaTTo4tLjQCBIuGgYZw6McnfkkknOcndnJyAdJRXxzonhvTtK+MEHhnxHaz3diuoNY sm1oWl3ZSKTAYEKSyPwfu9M9/rLUvDmi6voy6Rf6XaT6eiBI7dogFiAUqNmPuEKSAVwR2xQBqUV8 a694UtPBnxRj0bWxIdFS9idpH3/vLNnBzlQCTtypKj7ysB0r660bQ9L8PaclhpFhBZ2q4OyFMbiA BuY9WbAGWOSccmgDQorxT41eFNI1nxB4atLWwkj1/W71YXvYYy+LeMYdnQMAxUOjZxnahBYACvR9 S8CeHdT8Hr4Wk06OLS40AgSLhoGGcOjHJ35JJJznJ3ZycgHSUV8c6J4b07SvjBB4Z8R2s93YrqDW LJtaFpd2UikwGBCksj8H7vTPf6y1Lw5our6MukX+l2k+nogSO3aIBYgFKjZj7hCkgFcEdsUAalFf GuveFLTwZ8UY9G1sSHRUvYnaR9/7yzZwc5UAk7cqSo+8rAdK+utG0PS/D2nJYaRYQWdquDshTG4g AbmPVmwBljknHJoA0KK8U+NXhTSNZ8QeGrS1sJI9f1u9WF72GMvi3jGHZ0DAMVDo2cZ2oQWAAr1/ StKsdE0u30zTLaO2s7dNkUSdFH8ySckk8kkk8mgC5RRRQAVHJPDC8SSyxo8z7IlZgC7bS2F9TtVj gdgT2rxzxZ401jxt44X4f+DrufT1hlYalqqK4ePyz84XbgqoI25yNzELkKct2GmfCHwNpenS2a6D Bc+dEIpZromWRsAjcGP+rY5Jym3nHTAwAdvRXyz8VbDWPh5qLeHtG1jVYvDOoxefFatK/lx5Lh4V bPzL85JHcOu7cQGPv3hOxt9T+Fmh2F5H5lrdaLBDMm4jcjQKGGRyMgnpQByH7Qt9cWnw2jhgk2x3 eoRQzjaDvQK8gHPT5kU8enpmtj4J/wDJIdD/AO3j/wBHyV5x8avh34V8JeDbO/0PS/sl1JqCQs/2 iWTKGOQkYdiOqj8q1/hd8LvBviP4c6Vquq6P9ovp/O8yX7VMm7bM6jhXAHAA6UAe30Vn6JomneHN Ig0rSrf7PYwbvLi3s+3cxY8sSTySetaFABRRXinivxnr3jX4gnwD4Pv5NPton26hqUcTrLE0ZbzM MDkIDtXou5+N21skA9rorgLb4K+AYNOWzfQ/P+4XmluJPMdlBGdwYYzuJIXCk444GPJPFltr/wAD PEloPDWr3b6LfIZUguyro7qVEiMowM4CfOApw20HgmgD6aorl/DPin/hOfBcOsaJJBZ3UvyOlwn2 gW8in5lZVdSeORypwytjnFfPPxin8Y6R4hGia54qn1S1ntI5VES/Z45E3tjfCny7g6nnngKc9gAf V1FeEf8ACAeIPiZ8PdBlbW/7NsLTT4ksNNltGAldIgnmytu/iYNtIDYjKkDLMK6D4H+DPEvg/TtY j1+L7NHcyxm3tftCybSobe+FJUbsoOuTs5GAMgHq9FeIfFvx7rE3i2x8A+Gb37DdXEsEdzeI7xus kjDZGGAyq4KMWXJO7HGGB7D/AIUv4G/4R7+yP7I/2vtnmH7Tv2bd+/8AXZjZnnbQB39FfJNpqXi3 4e+PT4Ri8Uz6daxXa2nmzFJIIoZHDCbynJRcqwc8gjJBI5r6W8M6T4h0v7V/b3if+3PM2eT/AKBH beTjO77hO7OV69NvvQB0FFFFABUc08NsgeeWOJC6oGdgoLMwVRz3LEADuSBXlHxK+IGpP4gh+H/h HzF1y8dIri82sPsquAflIBOdp3M4B2LyPm5XoNA+EfhTSEWe+sI9Z1SRD9qvtRBmM7s25n2OSoOe hxnHUnJJAO7or5x+Kmh3/wALvs8vg7VNV07RtU3Rz2sM0nlwSrsIKuSSGcL67sIwyVJUen/BP/kk Oh/9vH/o+SgDv6K8o+OfjrVPCWh2NhpB8i41XzVa7VsPCibMhPRjvHzdsHHJBFz4d+A/Clz4P0/W LvSI9S1DU7dLm8utVhM0kkrZZiBIOBuY4IHzAKctwSAel0V8w+Mi/wAG/irbyeGp54NMnigu5NPS ZgkiAsjRsWLbs7XIYj5d/A4Br6eoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAO9OpvenUxhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yOun/9tP8A 0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf8i6r/wBv fkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yL Vt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rnl/FR83if +RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/ AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAQ9 KSlPSkpCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooA+cf2jfDv2bXNM8QwxYjvIjbTlIcASJyrM46sytgA84i7gcezfDzxMni3wPpmqef510YhF dk7QwnUYfKrwuT8wHHyspwM0z4k+F28X+A9S0qCONrzYJrTcik+ah3AKSQFLAFN2RgOe2RXzx8Ov ia3grwf4l04SSfa50WbTFCLtSdvkdicHkLsYBhtPlkcE8gFj4vvqXivxJrevwWUi6ToVxHo5k8pg SwLlmJGVwHyM5HEkXGWr3P4S+Jn8VfDvT7q5n86+ts2l0x3ZLp0LFs7mKFGJyclj06CPQPh9bWvw iXwlPBHBPeWR+1tLGkpS5dclzjAYo2NpznCLzwDXgHhLxnqXw+sPGHh+6eSGeW3khiiWZg0N4HER ZGXKqQrOxP8AF5SgMOKYz1/wgIfG/wAZNe8XeZJNp+iounaY+wbGYhhIyOpw4GZCM7uJlPGAK9br l/h54ZTwl4H0zS/I8m6EQluwdpYzsMvll4bB+UHn5VUZOK6ikI+cf2jfDv2bXNM8QwxYjvIjbTlI cASJyrM46sytgA84i7gcezfDzxMni3wPpmqef510YhFdk7QwnUYfKrwuT8wHHyspwM0z4k+F28X+ A9S0qCONrzYJrTcik+ah3AKSQFLAFN2RgOe2RXzx8Ovia3grwf4l04SSfa50WbTFCLtSdvkdicHk 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 bB8bWba39hW6bTwUjst5SOPzptqlmwXbHVtqjnG3jJ+rq+Yf2jf+ShWH/YKj/wDRstfT1ABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB3p1N706mMKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/ANGLXSVzfj3/AJEr UP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/ AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4C/5HXT/+ 2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/ AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8AkWrb/r8X/wBAeuK8 Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8d/yNIf8Abp7XRRRX SfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB 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 CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK5vx7/wAiVqH/AGz/APRi10lc349/5ErUP+2f/oxamfws5sZ/u1T0f5HnHgL/AJHX T/8Atp/6LavR/Hv/ACJWof8AbP8A9GLXnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YtY0/4bPEy7 /kXVf+3vyPOPAX/I66f/ANtP/RbV7XXingL/AJHXT/8Atp/6Lava6qh8J05D/u0vX9EFFFFbHthR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FAHE/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGldH8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ ANebf+hpXPL+Kj5vE/8AI2h8vyZ0fxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1dr8UP8AkWrb /r8X/wBAeuK8Bf8AI66f/wBtP/RbUp/xF8jPHf8AI0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFACHpSUp6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAVXvkvJLORbCeCC6ONkk8JlQcjOVDKTxn+IevPSrFFAHkHjH4L6p441z+1tW8XQLMsSw xxwaVtSNBk4GZiTyWPJPX0wB2/gvw5rHhXSLXSLzW4NSsbWIxwk2bxzD5srlzKwKqMqFCjAC88c9 RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB454o/Z60XWNUe+0fUpNHEzs8tuLcSxAnH+rG5Sgz uOMkc4G0DFU7X4B6xY6dPp9n8Q763sZ93nW0Nq6RybhtbcomwcgAHPUV7fRQB5x4Q+CvhfwpeW+o OJ9S1GHY6TXRGyOQA5ZEHAyTkbtxXAwcjNej0UUAFFFFABUc4ma3lW3kjjnKERvIhdVbHBKggkZ7 ZGfUVJRQB5Z44+FOteP7izl1bxXaRJZoywxWuklVBYjcx3TEknCjrj5RgDnO54B8E6x4G05NK/4S GDUNMWV5fLlsXWRdw+6jecVVdw3Y2nkt65Hb0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAd6dTe9OpjCiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9 H+R5x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/ APRi1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ /wC7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0 B65z4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2 vxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFACHpSUp6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAd6dTe9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv /Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10//tp/6LavR/Hv/Ila h/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kXVf8At78jzjwF/wAj rp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B 65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wChpXPL+Kj5vE/8jaHy /JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr8UP+Ratv+vxf/QHrivAX/I66f/20/wDR bUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpSU p6UlIQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAd6dTe9OpjCiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMW pn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7 /wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+ i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/F D/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp /wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACGkp1FADaKdRQA2inUUANop1FADaKdRQA2i nUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2i nUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2i nUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2i nUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADaKdRQA2inUUANop1FADadRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5v x7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8A I66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFP AX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5 /wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1b f9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO /wCRpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACub8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4 C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs 8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVs e2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8A Xm3/AKGlc8v4qPm8T/yNofL8mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6 /F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUV538RrL4g21vcax4O1+QpGis2kmyh diADuaNypLHodhyT82D91aAPRKK+UNC+LXxD1vxDpmk/8JP5P267itvN+wW7bN7hd2NgzjOcZFfS /h7S9W0yzK6x4gn1m6brI9tFAi4J+6qLkZBGdzN0yMZxQBsUUV5f8UpfGXhzR9W8T6T4w+z2MHk+ Xpv9mQvt3MkZ/etknkluR7UAeoUV438MJviT4usLXxDqniyO30s3AMdsNPgdruNHIkBKgGMEgqDy epwMAn2SgAooooAKKKKACiiigAoorh/ixdeKbTwNMfCVvPLfSyrFM1sheaOFgQzRgc7s7RkAkAkj GNwAO4oryP4Dz+L7rRtTuPEkupTWcrwvYSX7MzPlSXKlvmKEeWQfu9cc7q9A8SnxV9ngXwtHoxnL kzPqjyhQuOAqxjJJPckYx0OeADcor5gj+Ivjm8+Ken6Bqut7YYfEEcE0FioijOJ9jIGADtHgkYYn IxnJr6T1U6kul3B0eO0fUNmIBduyxbvVioJwOuB1xjIzkAFyivmz4n+PviX4a1lNJv8AVtNszcWQ crpEZ27WZ1zvkXer/KeVIxgEYOa938FzzXXgXw9cXEsk08umWzySSMWZ2MSkkk8kk85oA3KKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACisPxKfFX2eBf C0ejGcuTM+qPKFC44CrGMkk9yRjHQ548E+GfxF8XeKviloNnrGtzz2o+0ZhRUiR/3Dn5lQANgqCN 2cdsUAfS9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRWXr514aWw8OR6a2oFwAdRd1iVe5wgJY9gOOuc8YPzpH8RfHN58U9P0DVdb2ww+II4JoLFRFGc T7GQMAHaPBIwxORjOTQB9P0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXlfxy1Lxfp/hq0PhpbuO0Z3bULqzDebCqAMvz Kcohw5ZgP4QCQDhgD1SivP8A4O/8JT/wgx/4Sz7d9r+1yeR9vz53k4XG7d8339+N3OMY+XFegUAF FeV634u1PxZ8SP8AhAvDd7JY2lqjvq+p27RtKEC4aOIknaQzKhYfMrnoAh3cv8TPBfjLwtpY1jw5 4w8T31hAhN5FPqMjSxD/AJ6DbgFMdRjK4zyM7QD3yivB/GviL4ky/CPQb2O0vrO7l846xNb27wzw iJjsYgYaNWVSzMABwOVVtp7j4O/8JT/wgx/4Sz7d9r+1yeR9vz53k4XG7d8339+N3OMY+XFAHoFF FFABRRRQAUUUUAFFFFABRRRQAUV5X8ctS8X6f4atD4aW7jtGd21C6sw3mwqgDL8ynKIcOWYD+EAk A4bU+Dv/AAlP/CDH/hLPt32v7XJ5H2/PneThcbt3zff343c4xj5cUAegUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFRzzw2tvLcXEscMESF5JJGCqigZJJPAAHOaAJKK8f8OalrPxivNUvxq2q 6B4ZtJVgsotNmSKeaUAlmkkGWGFZcoPl+ZcElCTyHimw+Jnw98aWU2laxrmu2E0pNkssstyJcAlo ZYweWChjkAZALLgghQD6Porn/Gniyz8FeF7rWrxPN8rCQwBwjTSMcKoJ/EnGSFDHBxiuH0Twt4l8 c+F4PEOteMdc0vUr+JpbW20ydYLa3iYkxZReZOCGyWDYIUnK5oA9YorwP4bz/EbQfipJ4c1+XUr+ xZD9qmuGkuIkXY7RSpIfuhmQrzjPII3L8uRoOpfFe/8Ai9ai/XWYNt6jXtqAy2kVuWKthSTHs2pI FbksVyCW5oA+k6KKKACiiigAoor5s0HUvivf/F61F+uswbb1GvbUBltIrcsVbCkmPZtSQK3JYrkE tzQB9J0UUUAFFFFABRWH4lPir7PAvhaPRjOXJmfVHlChccBVjGSSe5Ixjoc8fPkfxF8c3nxT0/QN V1vbDD4gjgmgsVEUZxPsZAwAdo8EjDE5GM5NAH0/RUc5mW3la3jjknCExpI5RWbHALAEgZ74OPQ1 4H8TfG3xR8Hf2X9t1DQ7P7V5uz+yoWk3bdmd/nqcY3DG31Oe1AH0BRXD/CC/vNT+FujXl/dz3d1J 5++aeQyO2J5AMseTgAD8K7igAooooAKKKKACiiigAoqnquq2Oh6XcanqdzHbWdum+WV+ij+ZJOAA OSSAMk14JD4n8e/Fjxzby+F577Q9AtJSFuBkRqFKktLj5ZZDlcRZIAIHTc5APoeiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK4v4h3/jLTdGv L7w0dGitLWymnuZrxpGnBVSf3SBdmQBkbiQScEADkA7Sivn/AOCnjjxL4u+Id4Nc1ee7jj0pysOF jjBEseG2IAu75iN2M4OM4r6AoAKKKKACiiigAooooAKK8z+JnxfsfArjTLGCPUNadCzRF8JbAr8r SY5JJwdgwSOSVyueI+H+n+P/AIm3H9ta74q1nT9FjQxRvYy/ZmuWBP3FQBcAk5cqc42jODtAPoOi vJ1+AXh+x8u40bWtc03UoYnSK7huV3bzu+dsKD0baQpXKj1JJ88ufHnjr4S+MbnRNU1GTXbNHEi/ bt58+Jtp3xyN8ynClcZZFbdwxGaAPpuiuX8C+OtL8eaGL+wPlXEeFurR2y9u57H1U4OG747EEDqK ACiiigAooooAKKK5Pwr48sfF/iDxBp+mrHLaaS8KJexy7luC4bdgYGArIRkEhuo4oA6yiiigAooo oAKKKKACiiigAooooAKKx/Emgf8ACR6dHZ/2vqul7JRL52mXPkSNgEbS2Dlec49QPSvmj4lSeMPA Xi1tKj8a65c2ssQubZ21CYOI2ZlCvzjcCpGRweDxnAAPq+ivkDwTqnjDxj4vsdA/4TbXLP7V5n7/ AO2TSbdsbP8Ad3jOduOvevX/APhUHjD/AKKzrn5Tf/H6APYKK+ZPiB4b+JXgS3/tAeMdZ1LSd4Q3 MV7OrREgY8xNx2gsSAQSOBnBIB9H+AWralrPgW+uNU1C7vp11ORFkupmlYL5URwCxJxkk49zQB6p RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUV5v8AEbwjeSaTr3iSw8X+I9PuoLRrlLWC+K2y +VHkqIxgjcFPO7q2eelAHpFFfEH/AAnfjD/oa9c/8GM3/wAVX2/QAUUUUAFFFFABRRXJ2Hjyx1P4 jXnhGxWOc2Vkbi4uklyElEioYduMEgMCSG4OVIyDgA6yiivjz4reLta8QeNdXsL69k+wWN7Jb29o jFYlEbMgbbnBcjOWPPJAwMAAH2HRXmfwL8Q6l4h+HzvqlzJcz2l7LbrPK7PJIuFky7MSSQZCB7AD tXplABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiV qH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9 tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvfkeceAv8AkddP/wC2n/otq9rrxTwF/wAj rp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/wAi1bf9fi/+gPXOfC//AJGW5/682/8A Q0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L /wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1xXgL/kddP/7af+i2pT/iL5GeO/5GkP8A t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKAPjz4v+FIfCXxBu7e0Ea2d6gvbeNMDylcsCmAAAAyuABnC7ec5r6n8Ha+vinwdpWtK0 Ze6t1aXy1ZVWUfLIoDc4Dhh36dT1ri/jp4R/4SPwM+pW65vtG3XKc/ehIHmrywA4AfOCf3eB96uA /Z28XfY9Yu/Cly37m+zc2nHSZV+deF/iRc5JAHl4HLUAfR9eP/HrWZZdH0vwbpr+ZqetXcYMClPm jDYUMWOV3SbMHgHY3PBB9grwvwFKvxC+OGt+MY7iQ6fpCCGyQyMdwZWjUhWXhGUSuV4IZx15oA9k 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 KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig Arm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/ Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t7 8jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8U P+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+K j5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/ yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXxx4nsb/4YfFWZ7CP7P9ju/tVgA0mx4GOVXccM y7SY255wwya+x68f+P3g3+2vC8fiGzh3X2lf67YuWktyfmzhSTsOG5ICqZDQBqfEP4iQ2fwhXxBo skm/WES3tJFYboGkVixYq3yuiq44Jw4Hoa1PhJ4Yfwr8OtPtbmDyb65zd3SndkO/QMGxtYIEUjAw VPXqfnD4e6ZeeOfFGg+GL6aefRrOWW5aLaWWKMgNIuQQUVyirnOAz5HJOfsegAr5o/aRvriTxlpN g0mbWHT/ADo02j5XeRwxz15Eafl7mvpevmj9pGxuI/GWk37R4tZtP8mN9w+Z0kcsMdeBIn5+xoA9 X/4RL4h/9FP/APKBb/41j+JPhT4q8XadHYa58Q/tdrHKJlT+xYo8OAQDlHB6MfzrsPh/4xt/HHhK 21aL5bhcQ3kYQqI5woLhck5XkEcngjPOQOooA4P4Z/Dmb4d2+o27a7JqMF28bpGYDEsTKGDEDewy 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 /wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT/wDtp/6L avR/Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8jrp//bT/ANFtXtdeKeAv+R10/wD7af8A otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6GldH8UP+Ratv +vxf/QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/9tP8A 0W1dr8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWfqcOsS+V/Z N9Y2uM+Z9rs3uN3TGNsqY79c5yOmOdCigDw//hQGo/8ACQ/2/wD8Jv8A8TP7X9t8/wDspf8AXb9+ 7b5m373OMY9q9g0yHWIvN/ta+sbrOPL+yWb2+3rnO6V89umMYPXPGhRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFAEc8EN1by29xFHNBKhSSORQyupGCCDwQRxiuT1P4V+BtX8r7T4ZsY/Kzt+yKbb OcZz5RXd075xzjqa7CigDD0rwb4Z0N7eXTNA022nt02RTpbL5qjbt/1mNxJGQSTk5Oc5rcoooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACub8e/wDIlah/2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnH gL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLW NP8Ahs8TLv8AkXVf+3vyPOPAX/I66f8A9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL 1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQBxPxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPh f/yMtz/15t/6Glc8v4qPm8T/AMjaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/k Wrb/AK/F/wDQHrivAX/I66f/ANtP/RbUp/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWu krm/Hv8AyJWof9s//Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWv OPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r 2uvFPAX/ACOun/8AbT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8A kZbn/rzb/wBDSuj+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4o f8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+Iv kZ47/kaQ/wC3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/ke ceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWN P+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBR RRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15 t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9Aeu K8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVq H/bP/wBGLUz+FnNjP92qej/I848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8A bT/0W1ej+Pf+RK1D/tn/AOjFrGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun /wDbT/0W1e11VD4TpyH/AHaXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ ANDSuj+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A 6A9cV4C/5HXT/wDtp/6Lau1+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/ 7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigArm/Hv/Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10/ /tp/6LavR/Hv/Ilah/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kX Vf8At78jzjwF/wAjrp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH E/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wCh pXPL+Kj5vE/8jaHy/JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr8UP+Ratv+vxf/QHr ivAX/I66f/20/wDRbUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFef+ONL8fRxapq/hrxb5ccUXm2+kjS45C21R uVZCGZmbDEDb1IHA5oA9Aor5Q0P4qfE/xDrllpFhr2+6u5ViTNjCQuerNiMkKBkk44AJr6P8MaR4 i0v7V/b/AIo/tzzNnk/6BHbeTjO77hO7OV69NvvQB0FFFFABRRRQAUUUUAFFFFABRRXkdt4k1P4p eNdU0XRtUu9K8L6UhS5vdPljE93KWwmyTkohKMQVzlVO774CgHrlFfPHxD8N/EDwRqNpqXh/xP4j 1TTHljRBJdyTyRTEgKsifddWbAHy4JO0jkbvd9Cury+8PaZeajb/AGe+ntIpbiHYU8uRkBZdp5GC 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 OCWmkMu98EAktOx4Bbpj7xznjB4I+HXiDwFp1zYaZ4qsZ7WeXzil3pDNsfABIKzqeQF65+6MY5z6 RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFY+s2fiC73ppGsWOnxv EU3Tae1xIjnPzqfNVeOMAqeRzkHFbFFAHifhz4CX3hbxBZ61pvjCMXdq5ZPM0rcrAgqykeb0Kkjj B54IPNewabHqUVuy6pd2lzPvJV7W2aBQuBwVaRyTnPOe4445uUUAFU9Sj1KW3VdLu7S2n3gs91bN OpXB4CrIhBzjnPY8c8XKKAPE/EfwEvvFPiC81rUvGEZu7pwz+XpW1VAAVVA83oFAHOTxySea9U0a z8QWmxNX1ix1CNIgm6HT2t5HcY+dj5rLzzkBRyeMAYrYooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM/U9C0fW/K/t bSrG/wDJz5f2u3SXZnGcbgcZwOnoK5e++D/gHULyS6m8OQJI+MiCWSFBgAcIjBR07Dnr1ruKKAM/ RNE07w5o8Gk6Tb/Z7GDd5cW9n27mLHliSeSTya0KKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1 D/tn/wCjFqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2 n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/k ddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDX m3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QH rivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9unt dFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF/wAjrp// AG0/9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2eJl3/Iuq /wDb35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogooorY9sKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo A4n4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDkZbn/AK82 /wDQ0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ACLVt/1+ L/6A9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvmzxtqXxXuPilPbacus24W4I06GzD LbyQo67XbnYw+dC5fIBbDYACj6TooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAqnq0l9Do19LpcMc+oJbyNaxSHCvKFOxTyOC2B1H1FXKKAPnj4UX3xJvviZ5msya 42nr5w1FL1XWGMlN6qEfCo25oiFUAhTwNua+h6KKACiiigAooooAKx/E/ifS/COhzavq8/lW8fCq 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 fj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kd dP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4 C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+ hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8AkWrb/r8X /wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8d/yNIf8A bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBy/xF8Q3HhX4f6xrFmubqGIJ Ccj5HdljV+QQdpYNgjnGO9eb/s865pcmk6ra3d/AfEN5qDTOJn/f3KGMEHceZMESk4Jxkk43c+2T wQ3VvLb3EUc0EqFJI5FDK6kYIIPBBHGK8T1n9m7S7vUXm0jXZ9PtXyfs81v9o2EknCtuU7QMAA5P HJOaAPcKx/EPifS/DNmJtQn/AH0vFtaRfPPdPkAJFH1diWUcdMjJA5ryf/hQWsf2P/ZH/CxL7+zP +fL7K/k/e3fc87b97np15ruPB3wn8LeCbz7dYQT3N+NwS7vJA7xqwAIUABR0PON3zMM4OKALnw68 OTeG/Caw3ljaWWoXlxLe3lvaE+VHJI2QijJChUCJhePl4J6nrKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvkD4Jf8le0L/t4/wDSeSvqfWbPxBd700jW LHT43iKbptPa4kRzn51PmqvHGAVPI5yDivK/DnwEvvC3iCz1rTfGEYu7VyyeZpW5WBBVlI83oVJH GDzwQeaAPbKKp6bHqUVuy6pd2lzPvJV7W2aBQuBwVaRyTnPOe4445uUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcX8R vhzY/EPS7aCe6ks7y0ctbXKrvCBsb1ZMgMCFHcEEDnGQfmTVvDHjH4Ya5BfzQT2U0Ev+jahB88Ln 5gMN0+YK3yNgleq4NfZ9FAHlfgn45+HPENvBba1NHo+qbAJPOO23kbDElJCcKMLnD45YAFuteqVy 998OPBWoWclrN4X0pI3xkwWywuMEHh0AYdOx56dKr6J8LfBvhzWINW0nRvs99Bu8uX7VM+3cpU8M 5B4JHIoA7CiiigAooooAKKKKACiiigAooooAKKKKACuHSwvPHOuWuo6naT2OgaTdifT7SeMxT3dw mQLiQHDRxrk7E4LfebjC13FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQB5/wDG3/kkOu/9u/8A6UR15/8Asy/8zT/26f8AtavSPGng3xB4z0e6 0aXxJY2emzyhykOlM0hRW3KjO02DghSSFXJXsCRWH4H+FGteALi8l0nxZaSpeIqzRXWkllJUnaw2 zAgjcw64+Y5B4wAeqUVHAJlt4luJI5JwgEjxoUVmxyQpJIGe2Tj1NSUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF/wAjrp//AG0/ 9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2eJl3/Iuq/wDb 35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogooorY9sKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4 of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ 0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ACLVt/1+L/6A 9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+ 2f8A6MWpn8LObGf7tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+ i2r0fx7/AMiVqH/bP/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/ AKLava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWr b/r8X/0B65z4X/8AIy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ ANFtXa/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFeX/ABG+ M2l+Dv8AQNKEGq6ud6uiy/u7UjI/eEdWDD/VjBwDkrxnD02w+MHjy3a51HWo/C2mXLlTbxW5juIw gGGQY8wBmHO6QHGeNpAIB7ZRXk8Pw8+Iui2dy2j/ABNnu7qTbiPUrXzEOD/edpCnBP3V5wAfUcR4 i+KnxR8FeZout2lj9o/eRxam1o377vvjYERtgMv8HHAYZyKAPo+iuP8AA+s3mv8Awq0vUbB/M1Jt P8pJL8kh7iMGMtIQSSpdCSepB9a8U+KPjz4l6LrJ0TVNRtNOEluki/2NlVkXcTvEjfvVOVKkZX7v TByQD6booooAKKKKACiiigAoor58+MmpfEYeN47PSF1mDS9irYnSxIPtDFNz7jGcs4KP8p6KmQOS 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 +Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvfkece Av8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/wAi 1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSueX8 VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1xXgL /kddP/7af+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKp6lpOm 6zbrb6pp9pfQK4dY7qFZVDYIyAwIzgkZ9zVyigDi9S+EvgPVbhZ7jw1aI6oEAtWe3XGSeVjZQTz1 xnp6Ctzw34W0bwjp0lhodn9ktZJTMyea8mXIAJy5J6KPyrYooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAx9Zs/EF3vTSNYsdPjeIpum09riRHOfnU+aq8cYBU8jnIOK8r8OfAS+8LeILPWtN8YR i7tXLJ5mlblYEFWUjzehUkcYPPBB5r2yigCnpsepRW7Lql3aXM+8lXtbZoFC4HBVpHJOc857jjjm 5RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXL+KtA8QeIdO1HS7XXrGwsL2Iwn/ AIljSzKjDDjeZgpz8w+4MA8cjNdRRQB4/wCDvgtqngfXP7W0nxdA0zRNDJHPpW5JEODg4mBHIU8E dPTIPrFil5HZxrfzwT3QzvkghMSNycYUsxHGP4j68dKsUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQBT1KPUpbdV0u7tLafeCz3Vs06lcHgKsiEHOOc9jxzx4/wCI/gJfeKfEF5rWpeMI zd3Thn8vStqqAAqqB5vQKAOcnjkk817ZRQBj6NZ+ILTYmr6xY6hGkQTdDp7W8juMfOx81l55yAo5 PGAMVsUUUAFFFFABRRRQAUUUUAFFFFAEc4ma3lW3kjjnKERvIhdVbHBKggkZ7ZGfUV5f44+FGteP 7izl1bxZaRJZoywxWuklVBYjcx3TEknao64+UYA5z6pRQBw/gDwRrHgXTk0r/hIYNQ0xZXl8uWxd ZF3D7qN5xVV3Ddjackt65HcUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBHOJmt5 Vt5I45yhEbyIXVWxwSoIJGe2Rn1FeX+OPhRrXj+4s5dW8WWkSWaMsMVrpJVQWI3Md0xJJ2qOuPlG AOc+qUUAcP4L8G+IPBmj2ujReJLG802CUuEm0plkCM25kV1mwMksQSrYLdwAK7iiigAooooAKKKK ACiiigAooooAKKKKACiiigArzv4gfCDRfHdx/aAnk03VtgQ3MSBllAIx5icbiFBAIIPIzkAAeiUU AeF6b+z3qWjXDXGl+PruxnZCjSWtm0TFcg4JWYHGQDj2Famj/s+aFFePe+I9VvtcunleSTcTCku4 fx4JctuJbcHGeMjrn2CigCOCCG1t4re3ijhgiQJHHGoVUUDAAA4AA4xUlFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVqH/bP/wBG LUz+FnNjP92qej/I848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8AbT/0W1ej +Pf+RK1D/tn/AOjFrGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W 1e11VD4TpyH/AHaXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+K H/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/ 5HXT/wDtp/6Lau1+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK 6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igArm/Hv/Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10//tp/6Lav R/Hv/Ilah/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kXVf8At78j zjwF/wAjrp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWr b/r8X/0B65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wChpXPL+Kj5 vE/8jaHy/JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr8UP+Ratv+vxf/QHrivAX/I66 f/20/wDRbUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARzmZbeVreOOScITGkjlFZscAsA SBnvg49DXzh8T/H3xL8Naymk3+rabZm4sg5XSIzt2szrnfIu9X+U8qRjAIwc19J18/8A7TX/ADK3 /b3/AO0aAPZPBc8114F8PXFxLJNPLpls8kkjFmdjEpJJPJJPOa8Q+LHxG8X+GviokNlcyWtjp6Rv bW5RhFdq6AuZBn94N25M/wAO35cNk17X4E/5J54a/wCwVa/+ilrzf4i+G7zUPjv4EvIpIFjl27Q7 EEfZpDPJnjurAD1PXA5oA9oooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA 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 wcZxXsHjv/knniX/ALBV1/6KavAP2cf+Sh6h/wBgqT/0bFQB9P0UUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/AJErUP8Atn/6MWukrm/Hv/Ilah/2 z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/+jFrzjwF/wAjrp//AG0/ 9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5x4C/5HXT/wDtp/6Lava68U8Bf8jrp/8A 20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ 0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8VHzeJ/wCRtD5fkzo/ih/yLVt/1+L/AOgP XFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6LalP+IvkZ47/AJGkP+3T 2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAryP4wx+N9N8MX+tWHiyO20+F41eztLQwSBDJhWE25nL5ZAcbAQDwOh9crz/42/wDJIdd/7d// AEojoA8g+DX/AAkGvf8ACUaZpmpz2N5qXky3ervE0zRIPN3YbcP3zs64JP3RIwO5RWpo3wT8V+F/ ibo91p9zHcaXbXEU8morIICEB/eRsm4tkgMuBkEMMkZOLf7Mv/M0/wDbp/7Wr6AoA8z8deOdTHjH S/AnhWWOLWL10e5viI5fscXLNhGOC+xSxDY+XGMlgVuf8KY8G3H73Vra+1e+b/WX1/fzNNL6birK OBhRgDgCvGLVtZ179pC+Sz1j+z9SOoXcMN79mSXykijkRRsOAfkQLz9eTXs//CJfEP8A6Kf/AOUC 3/xoA8UudV1r4IfEi503Trm7utHRxKLW6ykdzE6qSR23jG3zFHVDxjK19R2F9b6np1tf2cnmWt1E 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 FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAVzfj3/kStQ/7Z/+jFrpK5vx7/yJWof9s/8A0YtTP4Wc2M/3ap6P8jzjwF/yOun/ APbT/wBFtXo/j3/kStQ/7Z/+jFrzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxaxp/w2eJl3/I uq/9vfkeceAv+R10/wD7af8Aotq9rrxTwF/yOun/APbT/wBFtXtdVQ+E6ch/3aXr+iCiiitj2woo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gDifih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSuj+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSue X8VHzeJ/5G0Pl+TOj+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLau1+KH/ItW3/X4v8A6A9cV4C/ 5HXT/wDtp/6LalP+IvkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvn/APaa/wCZW/7e /wD2jXvk4ma3lW3kjjnKERvIhdVbHBKggkZ7ZGfUV5f44+FGteP7izl1bxZaRJZoywxWuklVBYjc x3TEknao64+UYA5yAanwS/5JDoX/AG8f+lElegVw/gvwb4g8GaPa6NF4ksbzTYJS4SbSmWQIzbmR XWbAySxBKtgt3AAruKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooqnqUepS26rpd3aW0+8FnurZp1K4PAVZEIOcc57HjngA+TPjb/AMle13/t3/8ASeOvr+vE/Efw EvvFPiC81rUvGEZu7pwz+XpW1VAAVVA83oFAHOTxySea9U0az8QWmxNX1ix1CNIgm6HT2t5HcY+d j5rLzzkBRyeMAYoA2KKKKACiiigAooooAKKKKACiiqepR6lLbqul3dpbT7wWe6tmnUrg8BVkQg5x znseOeAD5M+Nv/JXtd/7d/8A0njr6/rxPxH8BL7xT4gvNa1LxhGbu6cM/l6VtVQAFVQPN6BQBzk8 cknmvVNGs/EFpsTV9YsdQjSIJuh09reR3GPnY+ay885AUcnjAGKANiiiigAooooAKKKKACiiigDD 8S6tqWnW8FtoumSX2qXrmK33owt4OMmSeQDCoo5x95jwo6kHhXw1D4Y0uW3W4kuru6uHvL66cBTc XD43vtHCA4ACjgADqck7lFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAV4P8TvgZcanqN74g8LSeZdXUvmz6dKwG52JLukjHAySDtP+1g9Fr3ii gD5E8A+Pda+FviCSw1K0uxp8jqb3TpkKSRkgYkRWxtfbjg4DDAP8LL9L+FPHnhzxnbh9G1GOScJu ktJPknj4XOUPJALAbhlc8AmtjUtJ03WbdbfVNPtL6BXDrHdQrKobBGQGBGcEjPua5fUvhL4D1W4W e48NWiOqBALVnt1xknlY2UE89cZ6egoA7Sisfw34W0bwjp0lhodn9ktZJTMyea8mXIAJy5J6KPyr YoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CvkD42/8le13/t3/APSeOvrPUo9Slt1XS7u0tp94LPdWzTqVweAqyIQc45z2PHPHj/iP4CX3inxB ea1qXjCM3d04Z/L0raqgAKqgeb0CgDnJ45JPNAHtlFY+jWfiC02Jq+sWOoRpEE3Q6e1vI7jHzsfN ZeecgKOTxgDFbFABXz/+01/zK3/b3/7Rr3ycTNbyrbyRxzlCI3kQuqtjglQQSM9sjPqK8v8AHHwo 1rx/cWcureLLSJLNGWGK10kqoLEbmO6Ykk7VHXHyjAHOQDU+CX/JIdC/7eP/AEokr0CuH8F+DfEH gzR7XRovEljeabBKXCTaUyyBGbcyK6zYGSWIJVsFu4AFdxQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yOun/9 tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf8i6r /wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifi h/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rnl/FR 83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kddP8A +2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCjFqZ/ Czmxn+7VPR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8A Ilah/wBs/wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq 9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5 Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A 9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU 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 i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCR dV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF AHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oa Vzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAe uK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAU9Sj1KW3VdLu 7S2n3gs91bNOpXB4CrIhBzjnPY8c8eP+I/gJfeKfEF5rWpeMIzd3Thn8vStqqAAqqB5vQKAOcnjk k817ZRQBj6NZ+ILTYmr6xY6hGkQTdDp7W8juMfOx81l55yAo5PGAMVsUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUARziZreVbeSOOcoRG8iF1VscEqCCRntkZ9RXl/jj4Ua14/uLOXVvFlpElmjLDFa6SVUFiN zHdMSSdqjrj5RgDnPqlFAHD+C/BviDwZo9ro0XiSxvNNglLhJtKZZAjNuZFdZsDJLEEq2C3cACu4 oooAKKKKACiiigAooooAKKKKAOL8ffDPRfH9vG14ZLXUIEZYL2EDcAQcK4P30DHOOD1wRk587sf2 dLzTLyO8sPHM9pdR52TQWJjdcgg4YTZGQSPxr3iigDxuy/Z+sbjVJNQ8UeJNS1ydnjbJHlGQLwVk ZmdmBAUcFSAOvTHrGlaVY6HpdvpmmW0dtZ26bIok6KP5kk5JJ5JJJyTVyigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjF qZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e /wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2u qofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9 Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2v xQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2 f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNjP92qej/I848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6 MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n /otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaXr+iCiiitj2wooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/wBfi/8AoD1z nwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+T Oj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/ot qU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK4P4j6l460fS77UfDK6MdPtrJpJj cBzdIw3bnQZ8shVw2Gzkg8HgHvK5/wAd/wDJPPEv/YKuv/RTUAeb/AbxVrviu88T3WuanPeyL9l2 ByAkeRKDtQYVc7RnAGcZPNe0V8//ALMv/M0/9un/ALWr6AoAKKKKACiiigAooooAKKKKACiiigAr P1v+2P7Hn/sD7D/afy+T9v3+T94bt2z5vu7sY74rQooA+bL7x54/Pxe0zw5rmox2iRaxaLLa6d8k TKWT+L77I6tuKsT97kDGB9J18weMv+Tobb/sK6b/AOgw19P0AFFFFABRRRQAUUUUAFFFFABRRRQA UUVn65rNn4e0O91e/fZa2kTSvggFsdFXJALE4AGeSQKANCivH/gz4svPGvijxlrV4nleb9jSGAOX WGNRMFUE/iTjALFjgZxXsFABRRRQAVHOZlt5Wt445JwhMaSOUVmxwCwBIGe+Dj0NSUUAfNnxP8ff Evw1rKaTf6tptmbiyDldIjO3azOud8i71f5TypGMAjBzXu/guea68C+Hri4lkmnl0y2eSSRizOxi UkknkknnNeN/tNf8yt/29/8AtGvYPAn/ACTzw1/2CrX/ANFLQB0FFFFABRRRQAUUUUAeR/FTxP8A Ebwtpd5qNgmjQaSbhIoprdJJ7qFT0d96+WAxGOhwXABJw1XPgVrmqeIfBupX+r3897dNqso3zPna DHEdqjoq5JwowBngVofG3/kkOu/9u/8A6UR1z/7OP/JPNQ/7Csn/AKKioA9gooooAp6tJfQ6NfS6 XDHPqCW8jWsUhwryhTsU8jgtgdR9RXgnwovviTffEzzNZk1xtPXzhqKXqusMZKb1UI+FRtzREKoB Cngbc19D0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUVHOJmt5Vt5I45yhEbyIXVWxwSoIJGe2Rn1FA Hk/xf+IGpac8PhHwl5lxr14jG4+yK0k9tHtyAqqOHZcnPVVGcDcrDD+HPjjxB4R8Uf8ACFePo743 V9Kj2l1czNO6u4Cqm7LBo2IwCp+VtwPUlfRPAXw5sfBCXV091JqetXrs11qU64dwWztAJJAzyeSW PJPAA1PFngvQvGunLZ61aeb5W4wTIxSSFmGCVYfgcHKkgZBwKAOgorH8Mafqmk6HDp2r6j/adxbf u1vmG1506guvZhkr1bO0MTliBw/xm+I3/CHaGNKsOdX1OJ1R1l2m1j+6ZODuDHJCHgZUnPy4IB6h RXP+BP8Aknnhr/sFWv8A6KWugoAKKKKACiiigAooooAKKKKACiiigDxv4ueKviH4TsjqFnc6NY6X JerBbtbq010RsYjf5ibADtJ4GQcDJ5J1PgVrmqeIfBupX+r3897dNqso3zPnaDHEdqjoq5JwowBn gVofG3/kkOu/9u//AKUR1z/7OP8AyTzUP+wrJ/6KioA9gooooAKKKKACo5zMtvK1vHHJOEJjSRyi s2OAWAJAz3wcehqSigD5/wDib42+KPg7+y/tuoaHZ/avN2f2VC0m7bszv89TjG4Y2+pz2r0j4QX9 5qfwt0a8v7ue7upPP3zTyGR2xPIBljycAAfhXm/7TX/Mrf8Ab3/7Rr0D4Jf8kh0L/t4/9KJKAPQK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKK8v+M3xG/4Q7QxpVhzq+pxOqOsu02sf3TJwdwY5 IQ8DKk5+XBAPUKK5/wACf8k88Nf9gq1/9FLXQUAFeB/ED4ma14s1n/hEvhyLufY4+039iSGkIYDC OPuRBiMyZAPqF5b1Txj4c1TxZZ/2RFq/9l6TLt+2NAm+e5Qk74gTgRrjHPzbs4IABD3PC/hHRfB2 lpYaPZRwgIqyzlQZZyMndI+Mscs3sM4AA4oAk8K6fqmleF9Osda1H+0dShiCz3WPvnPAyeWwMLuP LYyeSa2KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCjFqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0 fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7 e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/ FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/ io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8B f8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXkfxhj8b6b4Yv9asPFkdtp8Lxq9naWhgkCGTCsJtzO XyyA42AgHgdD65Xn/wAbf+SQ67/27/8ApRHQB5B8Gv8AhINe/wCEo0zTNTnsbzUvJlu9XeJpmiQe buw24fvnZ1wSfuiRgdyitTRvgn4r8L/E3R7rT7mO40u2uIp5NRWQQEID+8jZNxbJAZcDIIYZIycW /wBmX/maf+3T/wBrV9AUAeZ+OvHOpjxjpfgTwrLHFrF66Pc3xEcv2OLlmwjHBfYpYhsfLjGSwK3P +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 FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAj zjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxax p/w2eJl3/Iuq/wDb35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooA4n4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L /wDkZbn/AK82/wDQ0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1 +KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvP/jb/wAkh13/ALd//SiO vQK8v+KsXi/xP4cuPDmg+FJ3hnlAuLu5urdAURwymMCXPzFQcsBgcYyflAOP/Zl/5mn/ALdP/a1f QFeD/CTw543+Ht5qK3/g6e5tdQ8vfJBqFtvi8sPjCmQBslx/EMYzz0r3SCRpreKV4ZIHdAzRSFSy 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 /tGvUPh/oHinw7odtp/iDWrG+jgiEUUUFqVMKrhUUS5G5Qq903Zb7xA55/41+ANR8baHp8+jR+dq WnyttgMqoJI5MB8FuNwKoRkgY3dTgUAdh4E/5J54a/7BVr/6KWvCP2kbG4j8ZaTftHi1m0/yY33D 5nSRywx14Eifn7Gtf4Zr8WrbQ4PD9rpUGm6SsskYv9TtSs1oG+ZikZZS+CxK5UgscE4HHqnirwFY +LPBUXhy+u7tjboht72V98olRSokfoHJBO4HGdxxg4IAJPh/4xt/HHhK21aL5bhcQ3kYQqI5woLh ck5XkEcngjPOQOor5Mm+HPxL+H2qDUNKtrt3R1RbrSHMwk6PgxgbymVwQ6bSR3yM9nY+HPjJ46ij sPEurz6To08RkklKQo7AqQI2ji2uchuUfAHOeQAQD1zS/Es2teMdV02yt4zpekoIbm8JJ826bB8u Mj5cIuQ+TuDMowMZPQTzw2tvLcXEscMESF5JJGCqigZJJPAAHOaz/DmgWPhbw/Z6LpqyC0tUKp5j bmYklmYn1LEnjA54AHFeZ/H7wx4g8QaHpU2jQT3lvZyubm0g3M7FtoRxGPvbfmHHI39MbiAD2Civ P/g74Z13wp4GOna+PLuDdySxQecJPIjIUbcglRlgzYUkfNnqSK9AoAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/wDIlah/2z/9GLXSVzfj3/kStQ/7Z/8A oxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLXnHgL/AJHXT/8Atp/6LavR /Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPAX/I66f8A9tP/AEW1e114p4C/5HXT/wDt p/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Gld H8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8v4qPm8T/AMjaHy/JnR/FD/kWrb/r8X/0B64rwF/y Oun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbUp/xF8jPHf8jSH/bp7XRRRXSf UBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA Fc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s//Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/Rb V6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R 5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8AbT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK5 5fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXF eAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/ AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq 9H8e/wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi 2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6 /F/9Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDR bV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ /wC2f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNjP92qej/I848Bf8jrp/8A20/9FtXo/j3/AJErUP8A tn/6MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrGn/AA2eJl3/ACLqv/b35HnHgL/kddP/ AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaXr+iCiiitj2wooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/wBfi/8A oD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK55fxUfN4n/AJG0 Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2 n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Cz mxn+7VPR/keceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof 9s//AEYtY0/4bPEy7/kXVf8At78jzjwF/wAjrp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05 D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB6 5z4X/wDIy3P/AF5t/wChpXPL+Kj5vE/8jaHy/JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0 W1dr8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/t n/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzYz/dqno/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6M WvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/+jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp/wCi 2r2uvFPAX/I66f8A9tP/AEW1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c58L/ APkZbn/rzb/0NK6P4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8i1bf 9fi/+gPXFeAv+R10/wD7af8Aotq7X4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnjv+Rp D/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACub8e/8AIlah/wBs/wD0YtdJXN+Pf+RK1D/tn/6MWpn8LObGf7tU9H+R5x4C/wCR 10//ALaf+i2r0fx7/wAiVqH/AGz/APRi15x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLWNP+GzxM u/5F1X/t78jzjwF/yOun/wDbT/0W1e114p4C/wCR10//ALaf+i2r2uqofCdOQ/7tL1/RBRRRWx7Y UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQBxPxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wChpXR/FD/kWrb/AK/F/wDQHrnPhf8A8jLc /wDXm3/oaVzy/io+bxP/ACNofL8mdH8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtXa/FD/AJFq 2/6/F/8AQHrivAX/ACOun/8AbT/0W1Kf8RfIzx3/ACNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXD+NNG8dzfar/AMJeKvs7LEDH pc1lAyu46hZWXK5HQNn5u4B+XuKKAPlzwj8d/FFr4ltD4j1GO90mRxFcBrdEMSkjMimNMkr1xzkZ GMkEfT8E8N1bxXFvLHNBKgeOSNgyupGQQRwQRzmvjjTvAM2r/C2/8XWUsjz6devFc22wtuhCRneu BkFS5LZ4285G35u4+BnxMXRriHwhqoka0vLjFjOCzeTK5A8sjsjNyCOjMSchiVAPpOvH/iFH8Q/B /hy+1+y8efarW3lXNtNpdujrG7hV+cKQzAsuflUHk8dD7BXN/EGCG5+HPiRJ4o5UGmXDhXUMAyxl lPPcMAQexANAHnfw3b4meNNHi1zUfGf2DTZJcRJFp9tJJOisQ5ztxHyCASG5BOMY3e0V5/8ABL/k kOhf9vH/AKUSV6BQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXlfxy1Lxfp/hq0PhpbuO0Z3bULqz DebCqAMvzKcohw5ZgP4QCQDhvVKKAPP/AIO/8JT/AMIMf+Es+3fa/tcnkfb8+d5OFxu3fN9/fjdz jGPlxXoFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFPVTqS6XcHR47R9Q2 YgF27LFu9WKgnA64HXGMjOR88fE/x98S/DWsppN/q2m2ZuLIOV0iM7drM653yLvV/lPKkYwCMHNf SdfMH7R3/JQ9P/7BUf8A6NloA+g/Bc8114F8PXFxLJNPLpls8kkjFmdjEpJJPJJPOa3K5/wJ/wAk 88Nf9gq1/wDRS10FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFeN/FzxV8Q/CdkdQs7nRrHS5L1YLdrdWmuiNjEb/ ADE2AHaTwMg4GTyT7JXn/wAbf+SQ67/27/8ApRHQBn/ArXNU8Q+DdSv9Xv5726bVZRvmfO0GOI7V HRVyThRgDPAr1CvH/wBnH/knmof9hWT/ANFRV7BQAUUUUAFFFFABRRRQAV438XPFXxD8J2R1Czud GsdLkvVgt2t1aa6I2MRv8xNgB2k8DIOBk8k+yV5/8bf+SQ67/wBu/wD6UR0AZ/wK1zVPEPg3Ur/V 7+e9um1WUb5nztBjiO1R0Vck4UYAzwK9Qrx/9nH/AJJ5qH/YVk/9FRV7BQAV4H8QPiZrXizWf+ES +HIu59jj7Tf2JIaQhgMI4+5EGIzJkA+oXlvVPGPhzVPFln/ZEWr/ANl6TLt+2NAm+e5Qk74gTgRr jHPzbs4IABD3PC/hHRfB2lpYaPZRwgIqyzlQZZyMndI+Mscs3sM4AA4oAk8K6fqmleF9Osda1H+0 dShiCz3WPvnPAyeWwMLuPLYyeSa2KKKACiiigAooooAKKKKAKeqnUl0u4Ojx2j6hsxALt2WLd6sV BOB1wOuMZGcj54+J/j74l+GtZTSb/VtNszcWQcrpEZ27WZ1zvkXer/KeVIxgEYOa+k6+YP2jv+Sh 6f8A9gqP/wBGy0AfQfguea68C+Hri4lkmnl0y2eSSRizOxiUkknkknnNblc/4E/5J54a/wCwVa/+ ilroKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACivD4fiN/wmPx70HSrDjSNMlu1R1l3C6k8iRTJwdpUYIQ8nDE5+bA9woAKKKKACiii gDxv4ueKviH4TsjqFnc6NY6XJerBbtbq010RsYjf5ibADtJ4GQcDJ5J1PgVrmqeIfBupX+r3897d Nqso3zPnaDHEdqjoq5JwowBngVofG3/kkOu/9u//AKUR1z/7OP8AyTzUP+wrJ/6KioA9gooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiivL/jN8Rv8AhDtDGlWHOr6nE6o6y7Tax/dMnB3B jkhDwMqTn5cEA9Qorn/An/JPPDX/AGCrX/0UtdBQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAV5X8ctS8X6f4atD4aW7jtGd21C6sw3mwqgDL8ynKIcOWYD+EAkA4b1SigDz/wCD v/CU/wDCDH/hLPt32v7XJ5H2/PneThcbt3zff343c4xj5cV6BRRQAUUUUAFFFFABXl/xS+KX/CL7 fD/h9ftnia62oiRp5n2bd90led0hyNqe4J4wG9A1mHVLjTnt9IuoLO6lyn2uaPzPIGD86x8B2zgA EgDOTnG1ub8GfDPRfCDvfEyanrUz+bNqd6A8u8qQxQ9UBLMTySd2CzYFAGf8INJ8X6d4amuPFup3 dxLeOstva3btJLbLjnczHILcHZ/DjsWYD0SiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAorn/Gniyz8FeF7rWrxPN8rCQwBwjTSMcKoJ/EnGSFDHBxiuP+ Bus3niHwzrmr3777q71uaV8EkLmKLCrkkhQMADPAAFAHqFFRzzw2tvLcXEscMESF5JJGCqigZJJP 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 fG+s2N3onhi78+1SS3nuZrq3VZowwMZQeaTjJkPIU/MM+gAPdKK8v+GMnjvQNHsvD3iPwrO9rb/u 4dQiv4JGRCw2q6GTO1QW5U8KqqFPWvUKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/ANGLXSVz fj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kd dP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4 C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+ hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8AkWrb/r8X /wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8d/yNIf8A bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAV8gfBL/AJK9oX/bx/6TyV9T6zZ+ILvemkaxY6fG8RTdNp7X EiOc/Op81V44wCp5HOQcV5X4c+Al94W8QWetab4wjF3auWTzNK3KwIKspHm9CpI4weeCDzQB7ZRV PTY9Sit2XVLu0uZ95Kva2zQKFwOCrSOSc55z3HHHNygAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAK+QP+bhf+5r/wDbuvq/U4dYl8r+yb6xtcZ8z7XZ vcbumMbZUx365zkdMc+P/wDCgNR/4SH+3/8AhN/+Jn9r+2+f/ZS/67fv3bfM2/e5xjHtQB7hRWfp kOsReb/a19Y3WceX9ks3t9vXOd0r57dMYweueNCgAooooAKKKKACiiigArP13U/7E8Panq3k+d9h tJbnyt23fsQttzg4zjGcGtCigD54+BPiqzu/FviG88RanAdd1PyBbzXRCvL8zBo0Y8DJMQCDGdow MLx9D1434o/Z50XWdUe+0fUpNHEzs8tuLcSxAnH+rG5SgzuOMkc4G0DFU7X4BaxY6dPp1n8RL63s Z93nW0Nq6RybhtbcomwcgAHPUUAewazrml+HtOe/1e/gsrVcjfM+NxAJ2qOrNgHCjJOOBXN/D/R5 oH13xFeaVHpt3rt79oW3ClHS3VQIhKmSFlOXdsc5c554GX4P+CnhbwpeW+ouJ9S1KHY6TXRGyOQA 5ZIxwMk5G7cVwMHIzXpFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAV5/8AG3/kkOu/9u//AKUR16BXD+NPBviDxno91o0viSxs9NnlDlIdKZpC ituVGdpsHBCkkKuSvYEigDzf9mX/AJmn/t0/9rV9AV5X4H+FGteALi8l0nxZaSpeIqzRXWkllJUn aw2zAgjcw64+Y5B4x6hAJlt4luJI5JwgEjxoUVmxyQpJIGe2Tj1NAElFFY+s2fiC73ppGsWOnxvE U3Tae1xIjnPzqfNVeOMAqeRzkHFAHyx8Ev8Akr2hf9vH/pPJX1/Xifhz4CX3hbxBZ61pvjCMXdq5 ZPM0rcrAgqykeb0KkjjB54IPNewabHqUVuy6pd2lzPvJV7W2aBQuBwVaRyTnPOe4445ALlFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AeP/ALR3/JPNP/7Csf8A6Klo/Zx/5J5qH/YVk/8ARUVbHjf4deIPHunW1hqfiqxgtYJfOCWmkMu9 8EAktOx4Bbpj7xznjB4I+HXiDwFp1zYaZ4qsZ7WeXzil3pDNsfABIKzqeQF65+6MY5yAekUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFU9V1FdJ0u4v3tru5EKbvItIGmlkPQKqLyST+A6kgAmrl FAHJ+GtAvm1mfxZ4hWNNcu7cW0drC2Y7G23bxDuH+sfd8zOeM8LhRz1lFFABRRWPrNn4gu96aRrF jp8bxFN02ntcSI5z86nzVXjjAKnkc5BxQB8sfBL/AJK9oX/bx/6TyV9f14n4c+Al94W8QWetab4w jF3auWTzNK3KwIKspHm9CpI4weeCDzXsGmx6lFbsuqXdpcz7yVe1tmgULgcFWkck5zznuOOOQC5R RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf +RK1D/tn/wCjFrpK5vx7/wAiVqH/AGz/APRi1M/hZzYz/dqno/yPOPAX/I66f/20/wDRbV6P49/5 ErUP+2f/AKMWvOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWsaf8NniZd/yLqv/AG9+R5x4C/5H XT/+2n/otq9rrxTwF/yOun/9tP8A0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v/oD 1znwv/5GW5/682/9DSuj+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSueX8VHzeJ/5G0Pl+TOj +KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otq7X4of8i1bf9fi/+gPXFeAv+R10/wD7af8AotqU/wCI vkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9H+R5 x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi 1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ/wC7 S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0B65z 4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2vxQ/ 5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRXP+OLrXbHwXqlz4at/P1eOLNugQOeo3FVP3mC7iBzkgDB6Hyv4Fz+OrnXtTfx BLrMuki3ZN2pM7AXCybcJ5nORiUMF4BADc7aAPdKKKKACiiigAooooAKKKKACiub8Snxt9ogXwtH 4fEAQmZ9UeYsWzwFWMYAA7knOegxz4Z8M/iL4u8VfFLQbPWNbnntR9ozCipEj/uHPzKgAbBUEbs4 7YoA+l6KK+fPjJqXxGHjeOz0hdZg0vYq2J0sSD7QxTc+4xnLOCj/ACnoqZA5JIB9B0Vn6F/aP/CP aZ/a/wDyE/skX2z7v+u2Df8Ad+X72enHpWhQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFfNnjbUvivcfFKe205dZtwtwRp0NmGW3khR12u3O xh86Fy+QC2GwAFAB9J0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFcX8Q7/AMZabo15feGj o0Vpa2U09zNeNI04KqT+6QLsyAMjcSCTggAcgHaUV8//AAU8ceJfF3xDvBrmrz3ccelOVhwscYIl jw2xAF3fMRuxnBxnFfQFABRRRQAUUUUAFFFeF/FHxr8T/CNvbSudGsrS6uHEU+nRPO0YAyI5HlXZ kg5BCgnYSMAEUAe6UVw/wgv7zU/hbo15f3c93dSefvmnkMjtieQDLHk4AA/Cu4oAKKKKACiivA/i B8TNa8Waz/wiXw5F3Pscfab+xJDSEMBhHH3IgxGZMgH1C8sAe+UVj+FdP1TSvC+nWOtaj/aOpQxB Z7rH3zngZPLYGF3HlsZPJNbFABRRRQAUUUUAFFRzzw2tvLcXEscMESF5JJGCqigZJJPAAHOa+fPE njrxZ8UPFEeifD831ppVvKFe+hZ4d5IP7yVxzHHgNtXq2M4LYVQD6HoqvYQ3Fvp1tDeXX2u6jiRJ rjyxH5rgAM+0cLk5OB0zVfXNZs/D2h3ur377LW0iaV8EAtjoq5IBYnAAzySBQBoUV5H4Vtdf+Kml y+JNX8QazodhLcOum2Oj3KwhYlwrM7gFpCWUj5gMFWIADADlNKi+Jngr4tadpN1qOq61p9zKqmWV pbiGW1Z1V5MEny2TcpJz8pxklW+YA+h6K+bPG2pfFe4+KU9tpy6zbhbgjTobMMtvJCjrtdudjD50 Ll8gFsNgAKPpOgAooooAKKKKACivmzxtqXxXuPilPbacus24W4I06GzDLbyQo67XbnYw+dC5fIBb DYACj6ToAKKKKACiiigAooooAKKKKACiiigAorL1868NLYeHI9NbUC4AOou6xKvc4QEsewHHXOeM H50j+Ivjm8+Ken6Bqut7YYfEEcE0FioijOJ9jIGADtHgkYYnIxnJoA+n6KKKACiiigAooooAKKK8 7+KHj678MJYaFoMUc/iTWHEVoGdMQZYKHIJ6ljhc/LkMScKQQD0SivJ/E/wz8Utoc13onjzxHPro /evFLfGKCdurLGi4EWT90ZKjheB8wPgZrHizUNH1S08TJfPHaSqLW5vonEjktIJULt9/YyY9VJIJ xgAA9YooooAKKKKACiiigAooooAKKKp6qdSXS7g6PHaPqGzEAu3ZYt3qxUE4HXA64xkZyAC5RXyx 8RPiL8RdM8R6loF/rcFo0flb00lfLRcojjZIR5ozkZ+buR04r6noAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAoor5s0HUvivf/F61F+uswbb1GvbUBltIrcsVbCkm PZtSQK3JYrkEtzQB9J0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVT1aS+h0a +l0uGOfUEt5GtYpDhXlCnYp5HBbA6j6ivBPhRffEm++JnmazJrjaevnDUUvVdYYyU3qoR8KjbmiI VQCFPA25oA+h6KKKACiiigAooooAKKKKACiiigAooooAKKKKACivmzxtqXxXuPilPbacus24W4I0 6GzDLbyQo67XbnYw+dC5fIBbDYACj6ToAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKK+fPjJqXxGHjeOz0hdZg0vYq2J0sSD7QxTc+4xnLOCj/KeipkDkk+56F/aP/CPaZ/a/wDy E/skX2z7v+u2Df8Ad+X72enHpQBoUUUUAFFFFABRRRQAUV4H8QPiZrXizWf+ES+HIu59jj7Tf2JI aQhgMI4+5EGIzJkA+oXlvZPCun6ppXhfTrHWtR/tHUoYgs91j75zwMnlsDC7jy2MnkmgDYooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/ACJW of8AbP8A9GLXSVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2n/otq9H8e/8AIlah /wBs/wD0YteceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/7e/I848Bf8jrp/8A 20/9FtXtdeKeAv8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X/wBA euc+F/8AyMtz/wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T/wAj aHy/JnR/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAjrp// AG0/9FtSn/EXyM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUV5P8aF8Y6d4cvtb0nxR9j0yHyUksYIPKlwXA3icEsW3leB tG3jnncAesUV8ufCBPF+vJ4nstCvY7WXUHt21DWLiVmlhUtJu2Dq0r7mO4kY2nkEqRua5+znqhs7 2/tfE39qamd0ointvLNw5OWzIZG+Y88nqepGcgA+h6K+ZPgv8T9S03xBZ+GdWu5LnS711gt2mZna 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 Szv7SC7tZMb4Z4xIjYIIyp4OCAfwrwD4T+AtC1jx94p1GSygvNC067lttPjkQzQSbnbDBiSH2oBw d3+sVuCASAfQ9cv4x8Oap4ss/wCyItX/ALL0mXb9saBN89yhJ3xAnAjXGOfm3ZwQACHp/Ezx9D4A 8NC8WKO41C5cxWdu7gAtjJdhnJReM47lRkbsjLsPhdb+INOtr74gXN9reryRI8kM1wYobRyBuSJI SFHRQxydxTdxmgDrPC/hHRfB2lpYaPZRwgIqyzlQZZyMndI+Mscs3sM4AA4rcr5o+KXhR/hTrmm+ IPBlzfadb3eYnSNmZInTawUuSdyvjOx852N1HC+1/Dnxmvjrwdb6u0ccV2rtBdxR7tqSrjOMjoVK t1ON2Mkg0AdZRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABXN+Pf+RK1D/tn/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzYz/dqno/yPOPAX/I66f8A9tP/ AEW1ej+Pf+RK1D/tn/6MWvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/+jFrGn/DZ4mXf8i6r/29 +R5x4C/5HXT/APtp/wCi2r2uvFPAX/I66f8A9tP/AEW1e11VD4TpyH/dpev6IKKKK2PbCiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+K H/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK6P4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK55fxUfN 4n/kbQ+X5M6P4of8i1bf9fi/+gPXFeAv+R10/wD7af8Aotq7X4of8i1bf9fi/wDoD1xXgL/kddP/ AO2n/otqU/4i+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAK8/8Ajb/ySHXf+3f/ANKI69Arz/42/wDJIdd/7d//AEojoA8/ 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 OJredOTDKAQGxnDDDEEHqCcEHBHzhN8OfiX8PtUGoaVbXbujqi3WkOZhJ0fBjA3lMrgh02kjvkZ+ s6KAPn+x8OfGTx1FHYeJdXn0nRp4jJJKUhR2BUgRtHFtc5Dco+AOc8gA+2eHNAsfC3h+z0XTVkFp aoVTzG3MxJLMxPqWJPGBzwAOK1KKAPH/AI/eGPEHiDQ9Km0aCe8t7OVzc2kG5nYttCOIx97b8w45 G/pjcR0Hwd8M674U8DHTtfHl3Bu5JYoPOEnkRkKNuQSoywZsKSPmz1JFegUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8 e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/y Oun/APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8 jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0r o/ih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rnl/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXF eAv+R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiu k+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArh/ Gng3xB4z0e60aXxJY2emzyhykOlM0hRW3KjO02DghSSFXJXsCRXcUUAeV+B/hRrXgC4vJdJ8WWkq XiKs0V1pJZSVJ2sNswII3MOuPmOQeMeoQCZbeJbiSOScIBI8aFFZsckKSSBntk49TUlFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVn6nDrEvlf2TfWNrjPmfa7N7jd0xjbKmO/XOc jpjnQooA8P8A+FAaj/wkP9v/APCb/wDEz+1/bfP/ALKX/Xb9+7b5m373OMY9q9g0yHWIvN/ta+sb rOPL+yWb2+3rnO6V89umMYPXPGhRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXm/jf4deIPHunW1hqfiqxgt YJfOCWmkMu98EAktOx4Bbpj7xznjHpFFAHm/gj4deIPAWnXNhpniqxntZ5fOKXekM2x8AEgrOp5A Xrn7oxjnPpFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQBT1KPUpbdV0u7tLafeCz3Vs06lcHgKsiEHOOc9jxzx4/4j+Al 94p8QXmtal4wjN3dOGfy9K2qoACqoHm9AoA5yeOSTzXtlFAGPo1n4gtNiavrFjqEaRBN0OntbyO4 x87HzWXnnICjk8YAxWxRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWu krm/Hv8AyJWof9s//Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWv OPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r 2uvFPAX/ACOun/8AbT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8A kZbn/rzb/wBDSuj+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4o f8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+Iv kZ47/kaQ/wC3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/ke ceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWN P+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBR RRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15 t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9Aeu K8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVq H/bP/wBGLUz+FnNjP92qej/I848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8A bT/0W1ej+Pf+RK1D/tn/AOjFrGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun /wDbT/0W1e11VD4TpyH/AHaXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ ANDSuj+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A 6A9cV4C/5HXT/wDtp/6Lau1+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/ 7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigArm/Hv/Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10/ /tp/6LavR/Hv/Ilah/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kX Vf8At78jzjwF/wAjrp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH E/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wCh pXPL+Kj5vE/8jaHy/JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr8UP+Ratv+vxf/QHr ivAX/I66f/20/wDRbUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/6MWukrm/Hv/Ilah/2z /wDRi1M/hZzYz/dqno/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWvOPAX/I66f/ANtP/RbV 6P49/wCRK1D/ALZ/+jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp/wCi2r2uvFPAX/I66f8A9tP/ AEW1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK6P4of8 i1bf9fi/+gPXOfC//kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8i1bf9fi/+gPXFeAv+R10/wD7 af8Aotq7X4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnjv+RpD/t09rooorpPqAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK8/8caX4+ji 1TV/DXi3y44ovNt9JGlxyFtqjcqyEMzM2GIG3qQOBzQB6BRXyhofxU+J/iHXLLSLDXt91dyrEmbG Ehc9WbEZIUDJJxwATX0f4Y0jxFpf2r+3/FH9ueZs8n/QI7bycZ3fcJ3ZyvXpt96AOgooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK8T+J/ir4n+E9GTUXufD9haS 3ohi+wK804BV2CsZU2EYXkhQcgYABIrc+BWuap4h8G6lf6vfz3t02qyjfM+doMcR2qOirknCjAGe BQB6hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUV5n8Vtd8deHdE1DVdFl0a10m2SIec2+S 7LM6qSqsvlgZYDB3cZOckAAHplFeL/AbxVrviu88T3WuanPeyL9l2ByAkeRKDtQYVc7RnAGcZPNe 0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRXifx01Lx1bXumW/h5dSh0lkUtcaaHDvcM+wI7IcgfMgUc Bi5+8QNoB7ZRXL/Dr+3f+Ff6P/wknn/2t5R837RjzNu5tm//AGtm3Ofmz97nNdRQAUUUUAFFRzmZ beVreOOScITGkjlFZscAsASBnvg49DXgfxN8bfFHwd/Zf23UNDs/tXm7P7KhaTdt2Z3+epxjcMbf U57UAfQFFcP8IL+81P4W6NeX93Pd3Unn75p5DI7YnkAyx5OAAPwruKACiiigAooooAKKKKACisvX zrw0th4cj01tQLgA6i7rEq9zhASx7Acdc54wfnSP4i+Obz4p6foGq63thh8QRwTQWKiKM4n2MgYA O0eCRhicjGcmgD6fooooAKKKKACiiigAooooAKKKKACivnz4yal8Rh43js9IXWYNL2KtidLEg+0M U3PuMZyzgo/ynoqZA5JPuehf2j/wj2mf2v8A8hP7JF9s+7/rtg3/AHfl+9npx6UAaFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUVHPPDa28txcSxwwRIXkkkYKqKBkkk8AAc5r588SeOvFnxQ8UR6J8Pzf WmlW8oV76Fnh3kg/vJXHMceA21erYzgthVAPoeiq9hDcW+nW0N5dfa7qOJEmuPLEfmuAAz7RwuTk 4HTNWKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiivnz4yal8Rh43js9IXW YNL2KtidLEg+0MU3PuMZyzgo/wAp6KmQOSSAfQdFZ+hf2j/wj2mf2v8A8hP7JF9s+7/rtg3/AHfl +9npx6VoUAFFU9V1Wx0PS7jU9TuY7azt03yyv0UfzJJwABySQBkmvBIfE/j34seObeXwvPfaHoFp KQtwMiNQpUlpcfLLIcriLJABA6bnIB9D0UUUAFFFFABRRRQAUUUUAFFeN/FzxV8Q/CdkdQs7nRrH S5L1YLdrdWmuiNjEb/MTYAdpPAyDgZPJOp8Ctc1TxD4N1K/1e/nvbptVlG+Z87QY4jtUdFXJOFGA M8CgD1CiiigAooooAKKKKACiiigAooooAKKKKACiisPxKfFX2eBfC0ejGcuTM+qPKFC44CrGMkk9 yRjHQ54ANyivmCP4i+Obz4p6foGq63thh8QRwTQWKiKM4n2MgYAO0eCRhicjGcmvp+gAooooAKKK KACiisPxKfFX2eBfC0ejGcuTM+qPKFC44CrGMkk9yRjHQ54ANyivnDwF8QvGPiX4x6VYa7fzxQpL diTT0j8hEPlOdjKAC20qMb9xGOuc19H0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXzZ D408f/CzxqT41e71HT792LhpvMR1DHMlueiEZz5fy8EAhcqQAfSdFU9K1Wx1zS7fU9MuY7mzuE3x Sp0YfzBByCDyCCDgirlABRRRQAUUUUAFFcX8Q7/xlpujXl94aOjRWlrZTT3M140jTgqpP7pAuzIA yNxIJOCABz5n8FPHHiXxd8Q7wa5q893HHpTlYcLHGCJY8NsQBd3zEbsZwcZxQB9AUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFU9V1Wx0PS7jU9TuY7azt03yyv0UfzJJwABySQBkmvBIfE/j34 seObeXwvPfaHoFpKQtwMiNQpUlpcfLLIcriLJABA6bnIB9D0UUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e /wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxa848Bf8 jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2eJl3/Iuq/wDb35HnHgL/AJHXT/8Atp/6Lava68U8 Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8AItW3/X4v/oD1znwv/wCRluf+ vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ0rnl/FR83if+RtD5fkzo/ih/yLVt /wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otqU/4i+Rnjv+ RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigD5A+CX/JXtC/7eP8A0nkr6/r5A+CX/JXtC/7eP/SeSvr+gAooooAKK4v4mePo fAHhoXixR3GoXLmKzt3cAFsZLsM5KLxnHcqMjdkZdh8LrfxBp1tffEC5vtb1eSJHkhmuDFDaOQNy RJCQo6KGOTuKbuM0AekUV80fFLwo/wAKdc03xB4Mub7Tre7zE6RszJE6bWClyTuV8Z2PnOxuo4X2 v4c+M18deDrfV2jjiu1doLuKPdtSVcZxkdCpVupxuxkkGgDrKKKKACivmz43S+N9AuLKK/8AF0l3 p+opOFgtIjaKoyoeNkUnem1lALMx+8D6toeCPCvi/wAcfDDSdLh1mPQPDsSXC74S0k98zSvneoKg RYZ12luSpJBBXaAfQdFfLHjn4Nap8P8AR4vEena39tjtZVMsiR/Z5LclgEdfnOfmIHBBBIOCMkej /A74kXniqzuNA1mbztSsIhJDcNkvPDnad5xjcpKjcTltw4JDEgHsFFeR/GGPxvpvhi/1qw8WR22n wvGr2dpaGCQIZMKwm3M5fLIDjYCAeB0Pnnwa/wCEg17/AISjTNM1OexvNS8mW71d4mmaJB5u7Dbh ++dnXBJ+6JGB3KKAPp+ivnTRvgn4r8L/ABN0e60+5juNLtriKeTUVkEBCA/vI2TcWyQGXAyCGGSM nHd/Fr4k3nhL7Fofh+PzvEN/gohtzJsjbcilRnmQuBtGGHynI5GQD1CivM9A+DOhx2S3PiwSeINe mQ/ary5uJWHzJs2rluQq8Bj82RkbcALxfxH+Hn/CuLMeMvAt7faa0EqJdQJPuRIyVAILHLLvC5Rt 4O/sFxQB9AUV5n8IPiY3jrS5rHUxGmtWKKZWUqouUPHmBeoIOAwAwCVIxu2jtPFXiG38KeF9R1y6 XfHaRFwmSPMcnCJkA43MVGccZyeKANiivB/hlo7/ABVvNQ8XeNX/ALSht7vyrGwMrCCBwEd8RdNu PLABJ3fNvDHBqv8AF74cW/hKzTxn4PM+lTW8u26S0lMYQSEjzEO4FOWCFV4wwwFAOQD6Aorwf4X3 3jvx14emmi+In2KSxlFubd9NguZNgRSrszEMc/MMnOSp5JzXcfEy08Yjw9qupaH4ng061tLSSU20 dliSRAgL5nLMVYAOVKKvJAJ/iAB6BRXyh8ItU8Qan4+vza3s8us6jp7QDUbpGuRbgPEWlkyecIhV c8FzGp4NbGvfAjxjY+IbO60bVP7Uknl86XUXk+zyW8u/PmNlyx67tyktkHjOMgH0vRXk/wAdPHWq eEdDsbDSD5Fxqvmq12rYeFE2ZCejHePm7YOOSCLnw68BeFLnwdp+sXekR6lqGp26XN5darCZpJJW yzECQcDcxwQPmAU5bgkA9Mor5g8Zl/g18VbeTwzPPBpk8UF3JpyTMEkQFkaNixbdna5DEfLv4HAN fSeqWt3eWDQWWoSafOzoftMcSSMqhwWADgrkqCuSDjOcHGKALlFfJnxqh8R6V4xk0zV/EV3qlnOi Xlskj7VRfmRcxqAgcbWGVAznPBYgez33g3WviVbxXXinUrvRtJmt0aLQ9OkIYEhH3XDug3OGBGzZ hcDBzuyAemUV8ofETwXcfCLxRpOp+H9WnEc26S0kcjzonQKHDYAVlO8duQSpGBlvX9DufEvxT0Oy 1JtVn8O6I8So66dtW5vJRxI6yEsYY1kXao5ZgG3YBFAHqFFfNnxO+Cem+EvCcmvaLqN3Ilq6i5hv WViyuyopQqowQzDIPUHqMYPpfwU8YXHivwME1G58/UtOlNvK7yhpJEwCjsMZGQSuTncYyck5oA9I orzv4m6R4obwrrmpaT4tu7IQJ9qW1jjSNVhjQF0Eir5oclWbduwc7CMfNXlHwQv/ABNfXviaz0cx /bNQSKa41e8ZpBbEOwLbdpEkrCRmUMyglCSSMigD6borxfW/2fLPU9Onuf8AhJNVu/ELxL/pd/KH jlkUAfMNpcKQMD5iVGPvYweE+Dfj7xHp9xJ4T0+KO/N4jf2bDcvtjt5s7mZmzkRBd7soBJKjbgsS QD6jory/U/gxB4n8q48V+LNc1S+TPzxtFBCucD5ItjBMhVzg8kZ715J4Zu774RfGU6JPqMclg1xH bXrb/KikikAKSPuBClA4Y+mGXdgkkA+q6KK8jtvEmp/FLxrqmi6Nql3pXhfSkKXN7p8sYnu5S2E2 SclEJRiCucqp3ffAUA9corzPVfgR4HvdLuLew06TT7t0xFdJcSyGJux2u5DDsR6E4IOCPNPg98SN Y0PxRb+EdfmnksbiUWkaXe8yWUwGxEAIJCkhU2HAU4Py4bIB9L0UUUAFFc/4s07xLqOnKnhnXoNI uk3OWls1m844+VMsSEXPU7WPTHQg/Lnw/wBc8Tal8T9Iu4ZpNX1gJLDbHUrpmVQYpBlmJJ2LuZyo 5OCByaAPsOivC9S+AeteI7hdR8QeOpLnUHQeZuszIsZJLFEJkGEDM2AFUc9B0rzTSfEXin4OeNJ9 Mll8yO1lxdWAmJgnVgp3r/dYrsIbG4cAjGVoA+v6Kr2F9b6np1tf2cnmWt1Ek0L7SNyMAVODyMgj rXjfivxnr3jb4gnwB4Pv5NPton26hqUcTrLE0ZbzMMDkIDtXou5+N21skA9sorz+2+CngG305bN9 D8/7heaW4k8x2UEZ3BhjO4khcKTjjgY8k8W22v8AwL8S2g8M6vdvot8hlSC7KujupUSIyDAzgJ84 CnDbQeCaAPpuiub8JeK4fG/g6LWdLMdtPMjI0cuJfs8w4w4UgkZwwGVJUg/LmvEPjdL430C4sor/ AMXSXen6ik4WC0iNoqjKh42RSd6bWUAszH7wPqwB9J0V8+eDfCOtfET4SaXo8esyaNoto8iuhsy7 XsvnO5bO9QYlDIBjq4fI+RTVv4XfCbxBoura/aeJotmiXdobV44L5lF2fMBDDy2DBdocfNtOJMYw WFAFjx98Rv7R+J3h7wbpvFraa3ZtezpLkTSCRT5YCnG1SeQ3O9eg25PuFfJHiXwto2n/AB5g8NWt n5ekNqFlCbfzXOUkWIuNxO7nc3fjPFfQ+ifC3wb4c1iDVtJ0b7PfQbvLl+1TPt3KVPDOQeCRyKAO worzPx1451MeMdL8CeFZY4tYvXR7m+Ijl+xxcs2EY4L7FLENj5cYyWBW5/wpjwbcfvdWtr7V75v9 ZfX9/M00vpuKso4GFGAOAKAPQKK+VLnVda+CHxIudN065u7rR0cSi1uspHcxOqkkdt4xt8xR1Q8Y ytfUdhfW+p6dbX9nJ5lrdRJNC+0jcjAFTg8jII60AWKKKKACivA/DupWnxe+L2o/2leSXHh/TE8/ T9Kd38qfYwRZWTaAR8zMQ2G+dV+ZQwr0TxF8MdCvtOkl0Kxg0TW4IpPsN9pxNo0chHG4xjlTjacg kKzYwTQB3FFcP8IL+81P4W6NeX93Pd3Unn75p5DI7YnkAyx5OAAPwrxz9oDwjovhzVNHv9Hso7I6 gkqzQQKEizH5YDKgGFJD844OAcZySAfTdFc/4E/5J54a/wCwVa/+ilrxz49eA/Dmh6Daa9pGnR2F 3Lerbypb/JE6mNjnZ0Ujyx93GdzZyTkAH0HRXj/7OP8AyTzUP+wrJ/6KiqT4wx+N9N8MX+tWHiyO 20+F41eztLQwSBDJhWE25nL5ZAcbAQDwOhAPXKK+YPg1/wAJBr3/AAlGmaZqc9jeal5Mt3q7xNM0 SDzd2G3D987OuCT90SMDuUVqaN8E/Ffhf4m6Pdafcx3Gl21xFPJqKyCAhAf3kbJuLZIDLgZBDDJG TgA+i6KKKAPH/wBo7/knmn/9hWP/ANFS0fs4/wDJPNQ/7Csn/oqKj9o7/knmn/8AYVj/APRUtH7O P/JPNQ/7Csn/AKKioA9gorP1zWbPw9od7q9++y1tImlfBALY6KuSAWJwAM8kgV5n4V06++Lmly6/ 4subuPQ57h1sdDtZ/LgeJcDdKyYeQh1yMlcMhIG1sAA9corwv4nfCPQ9A8JyeIvCdvd6fqGlus+L eWWUuu5ctlmJQp9/cOgDZ7FdT4HfEi88VWdxoGszedqVhEJIbhsl54c7TvOMblJUbictuHBIYkA9 gorxv46eObnRk0zw3pWpyabeXrrPc3iO6GCANtXlVLYLAk7DuAjIwQ2K7Sx+Fvgqy0OPST4esbiN YjE1xPCrTvnOWMuNwY5JyCMdsADAB2FFeT+E9Lv/AAx8a7/w+urX0+hHRPtVhZz3kkqW6ebGgUBu BtKuF6/LjknNesUAFFFZ+u6n/Ynh7U9W8nzvsNpLc+Vu279iFtucHGcYzg0AaFFfPHwv8r4s+LdX 1Pxp5+pSWXlzWVmd/wBjg3N8wCj5R9xAFY/ONxIcgkb/AMZPAWhaX4Qk8T6HZQaRqemSwOstihi3 L5m0ABCFVgzht+C3yAfQA9oorzv4K+KL7xT8Po5tSkkmu7K4eze4kfc0wUKyseBztcLzknbknJq5 8TfiJb/D7Q45RD9o1O83JZQsDsJXG53I/hXcvAOTkAY5YAHcVz/jv/knniX/ALBV1/6KauH8H/C2 LV7O38R/EBp9a1262XCxXbuEtFyXEXl8Dqx3IRtH3QuAS2X8T/BUPgvwnrXiDwfPJpSXaLb6pZI4 NvPDIxUlY2U7X3SKBgqFXdtxnkAy/wBmX/maf+3T/wBrV9AV8/8A7Mv/ADNP/bp/7WrpPjDH4303 wxf61YeLI7bT4XjV7O0tDBIEMmFYTbmcvlkBxsBAPA6EA9cor5g+DX/CQa9/wlGmaZqc9jeal5Mt 3q7xNM0SDzd2G3D987OuCT90SMDuUVqaN8E/Ffhf4m6Pdafcx3Gl21xFPJqKyCAhAf3kbJuLZIDL gZBDDJGTgA+i6K8z8deOdTHjHS/AnhWWOLWL10e5viI5fscXLNhGOC+xSxDY+XGMlgVuf8KY8G3H 73Vra+1e+b/WX1/fzNNL6birKOBhRgDgCgD0CivlS51XWvgh8SLnTdOubu60dHEotbrKR3MTqpJH beMbfMUdUPGMrX1HYX1vqenW1/ZyeZa3USTQvtI3IwBU4PIyCOtAFiivA/DupWnxe+L2o/2leSXH h/TE8/T9Kd38qfYwRZWTaAR8zMQ2G+dV+ZQwr0TxF8MdCvtOkl0Kxg0TW4IpPsN9pxNo0chHG4xj lTjacgkKzYwTQB3FFcP8IL+81P4W6NeX93Pd3Unn75p5DI7YnkAyx5OAAPwrh/in4nfW/iLovw+t tWn0+xlljj1SSF2QymbAEPCHPyHjqhMo3Y2kgA9work5vhj4In0sac/hjTRAEVN6QhJcLjH71cPn jk7snnOcmub+GEOsaZ408caHqmtX2qR2Etr9me7unnKxyCR15boxUpuwAMj0AoA9Qori/iZ4+h8A eGheLFHcahcuYrO3dwAWxkuwzkovGcdyoyN2Rl2Hwut/EGnW198QLm+1vV5IkeSGa4MUNo5A3JEk JCjooY5O4pu4zQB6RRXzR8UvCj/CnXNN8QeDLm+063u8xOkbMyROm1gpck7lfGdj5zsbqOF9r+HP jNfHXg631do44rtXaC7ij3bUlXGcZHQqVbqcbsZJBoA6yivD/in4nfW/iLovw+ttWn0+xlljj1SS F2QymbAEPCHPyHjqhMo3Y2kj0Sb4Y+CJ9LGnP4Y00QBFTekISXC4x+9XD545O7J5znJoA6yivL/h hDrGmeNPHGh6prV9qkdhLa/Znu7p5yscgkdeW6MVKbsADI9AK9QoAKKK5vxz4zsfAvhqTWL6OSYl xDbwJwZpSCQucYUYUkk9ADgE4BAOkoryPw14AXx/pdt4q8fzXeoXN+jT22nC4aO1tIn27PLVGyCV VT97kN8wLDdXN/GPwHZeD9OtPFnhCCfSbqO7ZLprF5F2iUHDghsRKCCmFAB8wDjgEA+gKK8/+Dvi 7UfGXgY3urN5t9bXcltJPhV83AVw21VAXAcLgf3c96z/AItfEm88JfYtD8Px+d4hv8FENuZNkbbk UqM8yFwNoww+U5HIyAeoUV5noHwZ0OOyW58WCTxBr0yH7VeXNxKw+ZNm1ctyFXgMfmyMjbgBeL+I /wAPP+FcWY8ZeBb2+01oJUS6gSfciRkqAQWOWXeFyjbwd/YLigD6AorzP4QfExvHWlzWOpiNNasU UyspVRcoePMC9QQcBgBgEqRjdtHH/tC+EdFstGs/EdnZR2uoS3ot52hUIswdZHLOAOX3L97qdxzn jAB75RXn/wAEv+SQ6F/28f8ApRJXN/G/wH4c/wCEM1PxPBp0drq0DxMZrf5BNvlCtvUcMT5hO7G7 IHOOKAPZKK+f/wBmX/maf+3T/wBrV0nxhj8b6b4Yv9asPFkdtp8Lxq9naWhgkCGTCsJtzOXyyA42 AgHgdCAeuUV8wfBr/hINe/4SjTNM1OexvNS8mW71d4mmaJB5u7Dbh++dnXBJ+6JGB3KK1NG+Cfiv wv8AE3R7rT7mO40u2uIp5NRWQQEID+8jZNxbJAZcDIIYZIycAH0XRXg/xok8e+HtJttU/wCEx/0G e7WI2+n25sjE/lkrhg7OykK5IZ+DjAP8OJ8KdF1rxh8OdU8N6dqcmj2DXryXt59mMhnDxxqsKHco xhHMnOcGMchmFAH0nRXz/wCAfhL4x8H/ABMe6jngTTIIpkW+L5S4DIQgaFWDHDlGKkgfIcNwpND4 3yeMdA/s+O+8Yz3lrqX2kG1tLf7HGifJlCFcmRcPj5ycAHk5NAH0fRXn/wAEv+SQ6F/28f8ApRJV z4mePofAHhoXixR3GoXLmKzt3cAFsZLsM5KLxnHcqMjdkAHaUV5vYfC638QadbX3xAub7W9XkiR5 IZrgxQ2jkDckSQkKOihjk7im7jNeYfFLwo/wp1zTfEHgy5vtOt7vMTpGzMkTptYKXJO5XxnY+c7G 6jhQD6Xr5/8A2mv+ZW/7e/8A2jXqnw58Zr468HW+rtHHFdq7QXcUe7akq4zjI6FSrdTjdjJINeV/ tNf8yt/29/8AtGgD0D4Jf8kh0L/t4/8ASiSvQK8/+CX/ACSHQv8At4/9KJKp/G3xtN4S8HLa6fcS QapqjmKCSMlWijXBkcHBGcFV6gjfkH5aAPTKK8/8E/D7wsnhLT7q706x1q8volvbjUL2ATvcSSKG Zg0i7gpzwCAe5G4knn18PT+CfjH4T07RtSvofDWoRXW3SzeyvFHJHE7PhGONpLIwySd248cUAewU UUUAFFV7++t9M065v7yTy7W1ieaZ9pO1FBLHA5OAD0rxPSJ9S+OfiW7nu5buw8Eac6p9gRmQ3zZ3 ASMvBPyqzDJ2AqF5YvQB7pXzB4y/5Ohtv+wrpv8A6DDXsd58HvBc9ha29np0mmT2j77a9sJmS4jb eGz5hyWORgFt20fdxXzxa3Or3Xxz09teuo7vVItdt7e5njUKrtFKseQAFGMIOwoA+w6KK8jtvEmp /FLxrqmi6Nql3pXhfSkKXN7p8sYnu5S2E2SclEJRiCucqp3ffAUA9corzPVfgR4HvdLuLew06TT7 t0xFdJcSyGJux2u5DDsR6E4IOCPNPg98SNY0PxRb+EdfmnksbiUWkaXe8yWUwGxEAIJCkhU2HAU4 Py4bIB9L0Vx/xO8Xf8IX4GvdSibbfS/6NZcZ/fODhvukfKAz4IwduO9cv8KvBuhav4Lt/EOtwweI NV1TMlxd6ipuSuwlFRfNXI2hcH1IPJULgA9Yorxvxh4WPgzxV4Tv/C95d6Xpeoa7DBf6db3ciQSS SOCGEY+UAqrKw6YCADrXslABRRVe+S8ks5FsJ4ILo42STwmVF5GcqGUnjP8AEPXnpQBYor5U+M8v ivRteh0XWPF13q8FxZRzMixC1iI8x8BokO1iCmdx56egr6L8Cf8AJPPDX/YKtf8A0UtAHQUV4n8b W8UeHfDVtqdr4w1JUm1NkNvAiQBFYSNGFeMB8Kq7SGZtxw3GMVznwg0/xjrngi70vQdRg0TTDqEr XWp48ydy0KL5cScbcYUltyn5l2n5SCAfR9FfNHxM+CNn4R8OT6/o2qTyWtr5YntrwAudz7dyuoA6 snylf7x3dBXofwN8c33i3w1d2OqyyXF/pbohuHHMsTg7NxzlnBRwTgZG0nJJNAHaeNPFln4K8L3W tXieb5WEhgDhGmkY4VQT+JOMkKGODjFcf8DdZvPEPhnXNXv333V3rc0r4JIXMUWFXJJCgYAGeAAK p/HHwhoc3gzV/FEtpI+sQpAkVw1xKQi+ai4VN2wDDNwB1JPU5rlPgp8O/Cvi7wbeX+uaV9ruo9Qe FX+0Sx4QRxkDCMB1Y/nQB9D0Vl6XpekeEvD62Vkkdjpdkjv+8lJWJcl2JZyTjJJyTxXmfhy/1H4z XmqXl1d32m+D7aVbeCwtZFje9bBLid1+baUYBkGFO8YOUJIB7BRXj/jb4HeFT4S1Cbw/ps9nqdtE 08HkyyzmYqpPlbGY53dBjkHHXkHD+B3xP1LUtU/4RXXruS7eVHlsrqdmeUsPmaNm53DbuYFiMbSM nKgAHvlFeR/GGPxvpvhi/wBasPFkdtp8Lxq9naWhgkCGTCsJtzOXyyA42AgHgdD558Gv+Eg17/hK NM0zU57G81LyZbvV3iaZokHm7sNuH752dcEn7okYHcooA+n6K+dNG+Cfivwv8TdHutPuY7jS7a4i nk1FZBAQgP7yNk3FskBlwMghhkjJwfHJvFHh230S3m8YalewX1vNFcRhEt1dgED5EQUMjBwArbtu DydxoA+i6K8D+Hnh3xX4x+GulaUdUj0XwqEnim+z4kur8GcswzjESYLJ1zkNlWVgBynxP+FX/CuI rPX9G1id7VrtYo1k+WeCTaXVg64B5RjkBSPl68kAH1PRXD/CfxjceNvA0N/fc39vK1rdOECLI6gE MAD3Vlz0+bdgAYqP4ueM77wR4KN/pkcZvLm4W0ilfkQllZt+3GGICHAPGSCcgYIB3lFeN/CHwjoH iLwnF4n12yk1nWrt5I7i41ZWnGFbaoQSDawCovzDJB3Lu4KjkPi/oq/DPxVpOu+D55NIe/SXzIbU sq70dXJIJIKNvUeXjaNg45wAD6TorL0m8h8S+FbG9uLSPyNTso5ZLaTEi7ZEBKHIwww2OnPpXy58 bvDGl+F/Hwh0iD7Pb3lot20C/cjdndSEH8K/IDjtk4wMAAH1vRUc8EN1by29xFHNBKhSSORQyupG CCDwQRxivmT48+C9C8K6jpF5otp9j/tH7QZ4UY+WGUoQVU/d/wBYRgfKABgDnIB9P15f8ZviN/wh 2hjSrDnV9TidUdZdptY/umTg7gxyQh4GVJz8uDofBL/kkOhf9vH/AKUSV5J8e/CGh+GLjRbjSbSS GfUHuXupJLiWZpWBjIJMjMc5djnvnmgD3vwJ/wAk88Nf9gq1/wDRS10FeT+E/hB4E1Pwbod/eaF5 l1dafbzTP9rnG52jUscB8DJJ6V3HjTxZZ+CvC91rV4nm+VhIYA4RppGOFUE/iTjJChjg4xQB0FFe V+HPBs3xC8P2ev8Aj+7u743qGe30qOYw2ltGxJiYLGcs+1j8zNna+08rmuM+LXw4svAunWXinwab 7TJIJRBOttLI2wOGAl8wsWT+4ecHeo4OdwB9D0V538IPiBN478NTDUPL/tbT3WK5KKQJVYfJJjGA WwwIHdScAEAcn8U/E7638RdF+H1tq0+n2MssceqSQuyGUzYAh4Q5+Q8dUJlG7G0kAHuFFcnN8MfB E+ljTn8MaaIAipvSEJLhcY/erh88cndk85zk1zfwwh1jTPGnjjQ9U1q+1SOwltfsz3d085WOQSOv LdGKlN2ABkegFAHqFFFFABRXn/xMtPGI8ParqWh+J4NOtbS0klNtHZYkkQIC+ZyzFWADlSiryQCf 4h4h8ItU8Qan4+vza3s8us6jp7QDUbpGuRbgPEWlkyecIhVc8FzGp4NAH1fRXzRr3wI8Y2PiGzut G1T+1JJ5fOl1F5Ps8lvLvz5jZcseu7cpLZB4zjPqfxQ8fXfhhLDQtBijn8Saw4itAzpiDLBQ5BPU scLn5chiThSCAaHjPwVfeOXSwv8AWZLDw+j7pLSyX97dnaCrPI3ChW6JtYHbknJATpNG0PS/D2nJ YaRYQWVquDshTG4gAbmPVmwBljknHJrj/wDhUHh3Uf8ASfFEt94h1NuXvLu6kTGeSkaRsqpHuLEL zjcRmvHPGtnqXwW+IMNx4Wu7uHTbxFuUgl3GB8FlaF+cSBQcjPzKJBzn5iAfUdFc3pWtTeNPAdvq uhXken3F/b5SZ4TOLaTO1xtO3eVYMATwSAcEcH5c+KF54pg8X6jofiHxBPqn2aVHGGKQnMYKMIhh UbY3OB1LcnOSAfY9FeN6/wDC/wAX/EV2vfEviSPSYmcNb6PbRtcRW6heNx3IGlG5gWAPscYA8o8W +FfEfwb8S2lxp+syBLlCba9tz5Zk2lS6PHk8Btpwcqwx7gAH13RXJ/Dnxmvjrwdb6u0ccV2rtBdx R7tqSrjOMjoVKt1ON2Mkg1z/AI68c6mPGOl+BPCsscWsXro9zfERy/Y4uWbCMcF9iliGx8uMZLAq AemUV5//AMKY8G3H73Vra+1e+b/WX1/fzNNL6birKOBhRgDgCvFLnVda+CHxIudN065u7rR0cSi1 uspHcxOqkkdt4xt8xR1Q8YytAH1XRWPdS3mveHoLnw5qsFn9siWWG8mszN+7dMqyoWTDcqRuyOMF TXyh8ULzxTB4v1HQ/EPiCfVPs0qOMMUhOYwUYRDCo2xucDqW5OckA+x6jnnhtbeW4uJY4YIkLySS MFVFAySSeAAOc14n46+GXin4h2Z8RyavtnERk0/Q5bYxCGMnIRmL/LMVxuyMb/lyFAI1PAXwqMnw +h0bx5ZyTmG9luLazF/JtgVgowRG4XOQ7DBON56FmFAGf8PPH03j/wCM9/eLFJb6fbaPLFZ27uSQ vnREuwzgO3GcdgoyduT7ZXyR8FPC2jeLvGV5Ya5Z/a7WPT3mVPNePDiSMA5Qg9GP519L+GPBPh3w d9q/sDT/ALH9q2ed++kk3bc7fvscY3N09aAOgorxPxX4z17xt8QT4A8H38mn20T7dQ1KOJ1liaMt 5mGByEB2r0Xc/G7a2T1lt8FPANvpy2b6H5/3C80txJ5jsoIzuDDGdxJC4UnHHAwAegUV8yeLbbX/ AIF+JbQeGdXu30W+QypBdlXR3UqJEZBgZwE+cBThtoPBNe7+EvFcPjfwdFrOlmO2nmRkaOXEv2eY cYcKQSM4YDKkqQflzQB0lFfNnxul8b6BcWUV/wCLpLvT9RScLBaRG0VRlQ8bIpO9NrKAWZj94H1b Q8G+Eda+Inwk0vR49Zk0bRbR5FdDZl2vZfOdy2d6gxKGQDHVw+R8imgD6Dorwv4TfDfxv4O17Wpb mW0sYHt/Ihd2NxFO4kBEnlI6kgKHALFSPMHB+YVxHxnl8V6Nr0Oi6x4uu9XguLKOZkWIWsRHmPgN Eh2sQUzuPPT0FAH1XRXP+BP+SeeGv+wVa/8Aopa5Px1451MeMdL8CeFZY4tYvXR7m+Ijl+xxcs2E Y4L7FLENj5cYyWBUA0PEvw8m8cazBN4k1WT+xbVy0GkWYKq7BuHllPLFlyCAq7d2Fbqz9pY2Fnpl nHZ2FpBaWsedkMEYjRckk4UcDJJP41w//CmPBtx+91a2vtXvm/1l9f38zTS+m4qyjgYUYA4ArxS5 1XWvgh8SLnTdOubu60dHEotbrKR3MTqpJHbeMbfMUdUPGMrQB9V0VXsL631PTra/s5PMtbqJJoX2 kbkYAqcHkZBHWvC/DupWnxe+L2o/2leSXHh/TE8/T9Kd38qfYwRZWTaAR8zMQ2G+dV+ZQwoA98or h/EXwx0K+06SXQrGDRNbgik+w32nE2jRyEcbjGOVONpyCQrNjBNHwgv7zU/hbo15f3c93dSefvmn kMjtieQDLHk4AA/CgDuKKKKACivM/it8S5vCKQaFocElx4k1FB9nAiLiFWYqGAx87lgQq88jJ4wG k8MfB/RrKKHUPFK/8JD4hb57i7vZHmQkrt2BWOGVRwCwJ78cBQCx8bf+SQ67/wBu/wD6UR1z/wCz j/yTzUP+wrJ/6KirmPjB4R/4QLwkyeGrye20DVrtIr7TJZfNQSKoeNo9yllz5TFjuyflHQYHT/s4 /wDJPNQ/7Csn/oqKgD2CiuD+LnjO+8EeCjf6ZHGby5uFtIpX5EJZWbftxhiAhwDxkgnIGDy/wh8I 6B4i8JxeJ9dspNZ1q7eSO4uNWVpxhW2qEEg2sAqL8wyQdy7uCoAPZKK+bPi/oq/DPxVpOu+D55NI e/SXzIbUsq70dXJIJIKNvUeXjaNg45wPoPQtT/tvw9pmreT5P260iufK3btm9A23OBnGcZwKANCi vnT45N4o8O2+iW83jDUr2C+t5oriMIlursAgfIiChkYOAFbdtweTuNX/AIeeHfFfjH4a6VpR1SPR fCoSeKb7PiS6vwZyzDOMRJgsnXOQ2VZWAAB75RXyx8T/AIVf8K4is9f0bWJ3tWu1ijWT5Z4JNpdW DrgHlGOQFI+XryR7f8J/GNx428DQ399zf28rWt04QIsjqAQwAPdWXPT5t2ABigDuKK8z+Nvjabwl 4OW10+4kg1TVHMUEkZKtFGuDI4OCM4Kr1BG/IPy1c8E/D7wsnhLT7q706x1q8volvbjUL2ATvcSS KGZg0i7gpzwCAe5G4kkA9Aorx9fD0/gn4x+E9O0bUr6Hw1qEV1t0s3srxRyRxOz4RjjaSyMMkndu PHFewUAFFFFAHyB/zcL/ANzX/wC3dfX9fIH/ADcL/wBzX/7d19f0AFFfPnxX8balqXxItvAwuLux 0VLiCC9NgWM90syruGFBJAWQgIAcnkhuAPU/+FV+Bv7H/sv/AIRmx+z/AN/afO+9u/12fM6/7XTj pxQB2FFfOHwi1zVPDPxVuvA0l/Pe6YJbm0jR32pE8Rd/MVDnbna+VBGd+STtFfR9ABRRRQB8weDf +Tobn/sK6l/6DNX0/XyRbahqml/H7VLrRNO/tHUxqt/HbWxOAzuZUBb/AGV3bjyOFPI6j0PUvgHr XiO4XUfEHjqS51B0HmbrMyLGSSxRCZBhAzNgBVHPQdKAPdKK+OIb7xj8G/FtzaRyfZbj5TLGV3wX kQbKsM9VOCAwwwywypyK+t9D1mz8Q6HZavYPvtbuJZUyQSueqtgkBgcgjPBBFAGhRXzprPii5+IP xpi8IatJdweG4L2Wzexs3f8A0gxFiGl2jJBeNSeyLyCCC59T1n4S+DtU8PPpcGh2NlIsRS3uoYcS RuEKq7MCGkxnJDMdxHPPNAHcUV8//s8eMNUvdRv/AA1fXM91axWguLUzS7vs4QrGUXIztIZcDOF2 cD5jXtHirxDb+FPC+o65dLvjtIi4TJHmOThEyAcbmKjOOM5PFAGxRXifwe0Kx8baXfeLPFTx+INU muHtQt8vmpaoMPsVGXapJct8uQAQBtywqT4teD4vC3he68TeDp59AuI5Yvt0en3L28c8ZIjX92ny 7lZlxjaMM5OSRQB7RRRXkdt4k1P4peNdU0XRtUu9K8L6UhS5vdPljE93KWwmyTkohKMQVzlVO774 CgHrlFeZ6r8CPA97pdxb2GnSafdumIrpLiWQxN2O13IYdiPQnBBwR5p8HviRrGh+KLfwjr808ljc Si0jS73mSymA2IgBBIUkKmw4CnB+XDZAPpeiiigAqnqulWOuaXcaZqdtHc2dwmyWJ+jD+YIOCCOQ QCMEVHrup/2J4e1PVvJ877DaS3Plbtu/YhbbnBxnGM4NeEfC/wAr4s+LdX1Pxp5+pSWXlzWVmd/2 ODc3zAKPlH3EAVj843EhyCQAen+FPh3/AMITrlxLoWszpoV1l5tJuY/NCyc4aOTcCmBtXkMSBySd pXuK8X+MngLQtL8ISeJ9DsoNI1PTJYHWWxQxbl8zaAAhCqwZw2/Bb5APp0nwV8UX3in4fRzalJJN d2Vw9m9xI+5pgoVlY8Dna4XnJO3JOTQB6JRRRQAUVzfjnxnY+BfDUmsX0ckxLiG3gTgzSkEhc4wo wpJJ6AHAJwD534O8DT/Eez/4S74hSz3y3u59P0wSSww2sZIG5VBBG4KuMHBXDEsWyAD2ivmD9nH/ AJKHqH/YKk/9GxV6f4z8BWfh3TtS8YeDD/YWt2NpJKfsxC280ahS6vEVZfuISAABvwTzyPMP2cf+ Sh6h/wBgqT/0bFQB9P0Vl+I9fsfC3h+81rUmkFpaoGfy13MxJCqoHqWIHOBzyQOa8f8ABmi6r8ZH fxL42nkOhxv5VnpFuZIYJHVSDL1yQCzDcCSW3DIVdpAPdKK8z1/4FeC9XsmSxs5NKuwgWO4tpGYf Km1dyMSGHQnGGYjJbJJPnHw/+Lev+GvFX/CM+MbqS6tBcGzkmuZVaSzlDkFmlJ+dAxIbcxwACpwM EA+k6Kx9c0vVtS8v+zPEE+k7IpB+5topd8h27GbzFPyrhsqMFt33hivlT4f654m1L4n6RdwzSavr ASWG2OpXTMqgxSDLMSTsXczlRycEDk0AfYdFeN6p8DbvxVbtqHifxdd3XiJ0RRPHAn2eFQBlBHwS M7+QUyWyVznPnnwt8T6p4C+JTeFLqfzrC41BrC5hj+dBPu8tZEzjHzBQT3XqCQuAD6noqnqlrd3l g0FlqEmnzs6H7THEkjKocFgA4K5Kgrkg4znBxivkz4u3muweO9V0TUvEF9qdrbyxyRrMwRBmJSv7 tcIGCvgsqjPJwMkUAfX9FeV3/wAOtf8AiE/2jx1rEllYBzLaaLpbKRbEqoBklKkO4G8HgjJJVgCV rxjXNN1r4I/EG2Om6rHcS/Z1nSQRlVmiYkNHImTxuQ8AnorAg9AD67oqnpOpQ6zo1jqlusiwXtvH cRrIAGCuoYA4JGcH1Nef+OvHOpjxjpfgTwrLHFrF66Pc3xEcv2OLlmwjHBfYpYhsfLjGSwKgGh4l +Hk3jjWYJvEmqyf2LauWg0izBVXYNw8sp5YsuQQFXbuwrdWftLGws9Ms47OwtILS1jzshgjEaLkk nCjgZJJ/GuH/AOFMeDbj97q1tfavfN/rL6/v5mml9NxVlHAwowBwBXilzqutfBD4kXOm6dc3d1o6 OJRa3WUjuYnVSSO28Y2+Yo6oeMZWgD6roqvYX1vqenW1/ZyeZa3USTQvtI3IwBU4PIyCOtWKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx 7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2f/oxamfws5sZ/u1T0f5HnHgL/kddP/7af+i2r0fx7/yJ Wof9s/8A0YteceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLWNP+GzxMu/5F1X/ALe/I848Bf8A I66f/wBtP/RbV7XXingL/kddP/7af+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9 Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h 8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtXa/FD/kWrb/r8X/0B64rwF/yOun/9tP8A 0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQB8gfBL/kr2hf9vH/AKTyV9f18gfBL/kr2hf9vH/pPJX1/QAU UVxfxM8Zt4Q8NAWMck+tai5tNOgh2s/msMBwhBLBSRwAckqpxuzQB45+0jfXEnjLSbBpM2sOn+dG m0fK7yOGOevIjT8vc16v/wAIl8Q/+in/APlAt/8AGvJP2itNu7XxVot3M0k0D6YtutzIU3SyRuxc kKAAcSIeAB83HTA9z+H/AIxt/HHhK21aL5bhcQ3kYQqI5woLhck5XkEcngjPOQADj/Enwp8VeLtO jsNc+If2u1jlEyp/YsUeHAIByjg9GP51ufDP4czfDu31G3bXZNRgu3jdIzAYliZQwYgb2GWBUE8f cHXt3lc3pfiWbWvGOq6bZW8Z0vSUENzeEk+bdNg+XGR8uEXIfJ3BmUYGMkA6SiiigD5//aa/5lb/ ALe//aNegfBL/kkOhf8Abx/6USV5/wDtNf8AMrf9vf8A7Rr0D4Jf8kh0L/t4/wDSiSgDuL+xt9T0 65sLyPzLW6ieGZNxG5GBDDI5GQT0r5I+CX/JXtC/7eP/AEnkr67nnhtbeW4uJY4YIkLySSMFVFAy SSeAAOc18wfs9aA2pePJdYZZPI0q3Zg6soHmyAoqsDyQV808d1GT2IB7H8bf+SQ67/27/wDpRHXn /wCzL/zNP/bp/wC1q9A+Nv8AySHXf+3f/wBKI68//Zl/5mn/ALdP/a1AH0BXyZqepTar+0glxOsa uniOC3AQEDbFMsSnknnagJ989OlfWdfIHxO0zUfBfxavb2KbbNLd/wBq2U+1T99y4O3J+64Zeeu3 OMGgD6/qnq2mw6zo19pdw0iwXtvJbyNGQGCupUkZBGcH0NGk6lDrOjWOqW6yLBe28dxGsgAYK6hg DgkZwfU1YnnhtbeW4uJY4YIkLySSMFVFAySSeAAOc0AfJnwKvri0+K+mwwSbI7uKeGcbQd6CNpAO enzIp49PTNe9/GeCa5+EmvJBFJK4SJyqKWIVZkZjx2CgknsATXjH7PWgNqXjyXWGWTyNKt2YOrKB 5sgKKrA8kFfNPHdRk9j9Pzzw2tvLcXEscMESF5JJGCqigZJJPAAHOaAPD/2bNbhfRtZ0FvLWeG4F 4mZBukV1CNheuFMa5PP3x07+kfE6Gxn+GXiJNRMYgFk7rvk2DzVG6LnI58wJgdzgc5xXl+i/DOHx T4lm8a+C9Uk8NaYLgnTnSESmZlLLJIseV8qIsCBG2cjdkKpC13E3w51zXUFn4v8AG93rGk71kayt 7GKzErKwIDumSydfl45wQQVFAHJ/s3aNeWmh61q8ybLW/liit8ggv5W/cwyMFcvgEE8qw4xXqHjv /knniX/sFXX/AKKatTStKsdD0u30zTLaO2s7dNkUSdFH8ySckk8kkk5JrL8d/wDJPPEv/YKuv/RT UAeAfs4/8lD1D/sFSf8Ao2Kvp+vmD9nH/koeof8AYKk/9GxV9P0AYfiXwfoHjC3gg17TY7xIHLxE uyMhIwcMpBweMjODgegrD/4WDo4n/sXwhps+v3FtFsWPSlRbS3wmY1eYkRopAIG3djaRjIAPmH7R PjC4bUbTwnZ3O21SIXF6sUoPmOT8iOAMjaFD4J53qccA17P4J8PaX4Z8Jafp+kNBLb+UsjXUI4un ZRmbOTndwRycDAHAFAHzh8dv7YPjezbW/sK3TaeCkdlvKRx+dNtUs2C7Y6ttUc428ZP1fXzB+0d/ yUPT/wDsFR/+jZa+n6APmD9o7/koen/9gqP/ANGy19P18wftHf8AJQ9P/wCwVH/6Nlr6foA+f/2m v+ZW/wC3v/2jXoHwS/5JDoX/AG8f+lElef8A7TX/ADK3/b3/AO0a9A+CX/JIdC/7eP8A0okoAPjb /wAkh13/ALd//SiOvP8A9mX/AJmn/t0/9rV6B8bf+SQ67/27/wDpRHXn/wCzL/zNP/bp/wC1qAPY PHf/ACTzxL/2Crr/ANFNXj/7Mv8AzNP/AG6f+1q9g8d/8k88S/8AYKuv/RTV4/8Asy/8zT/26f8A tagD6Ar5A+CX/JXtC/7eP/SeSvr+vkD4Jf8AJXtC/wC3j/0nkoA+v6+QPjb/AMle13/t3/8ASeOv r+vkD42/8le13/t3/wDSeOgD6n8WX1xpng3XL+zk8u6tdPuJoX2g7XWNipweDggda+ePgXpHiLVP 7e/sDxR/Yfl/Z/O/0CO587PmbfvkbcYbp13e1fQ/iyxuNT8G65YWcfmXV1p9xDCm4Dc7RsFGTwMk jrXzh8BfGNv4c8WzaTe/Lb6z5UKSBCxWcMRGDg8Kd7A8Hkr0GTQB7P8A8Il8Q/8Aop//AJQLf/Gu Ln/Z6vrnWZdYfxxINQkuDdNcR6bsYSlt28bZRtO7njGO1e6Vh+LfEsPhTw/LqT28l3OXWG1s4iBJ czOcJGg6kk8nAJwCQDjFAG5RVew+2f2dbf2j5H27yk+0fZ8+X5mBu2Z525zjPOKsUAFfIHwS/wCS vaF/28f+k8lfX9fIHwS/5K9oX/bx/wCk8lAH1/Xzx+0vY28eo+Hb9Y8XU0U8Mj7j8yIUKjHTgyP+ fsK+h6+fP2mZ4WuPDVussZnRLl3jDDcqsYgpI6gEqwB77T6UAdf8N9Sm0b9neLVLdY2nsrK+uI1k BKlkkmYA4IOMj1Feafs4/wDJQ9Q/7BUn/o2Kva/D3gxrL4Qw+EpZJLaefTJIJ2fbIYZZlYyfdIDB WdsYPQDnvXzx8K9Su/Bnxes7K8WSJ5bh9KvIUCOdzNsC5zjAlCElT0U4z0IB9d15n8edNhvvhXeX ErSB7C4huIgpGCxcRYbjptkY8Y5A+h9Mrzv44zww/CTV0lljR5ngSJWYAu3nI2F9TtVjgdgT2oA4 v9mi+uJNO8RWDSZtYZYJo02j5XcOGOevIjT8vc1X/aa/5lb/ALe//aNbn7OugNp/g6+1qVZFfVLg LHllKtFFlQwA5B3tKDn+6OO5w/2mv+ZW/wC3v/2jQB6B8Ev+SQ6F/wBvH/pRJXoFef8AwS/5JDoX /bx/6USV6BQB8weMv+Tobb/sK6b/AOgw19P18weMv+Tobb/sK6b/AOgw19P0AfLFq2s69+0hfJZ6 x/Z+pHULuGG9+zJL5SRRyIo2HAPyIF5+vJr2f/hEviH/ANFP/wDKBb/414RqGrXHgH4/X+rXdtny NVmmkjGHJgmLHK4YDcY5MjJ4OM9xX1fYX1vqenW1/ZyeZa3USTQvtI3IwBU4PIyCOtAHj/iT4Haz 4u1GO/1zx39ruo4hCr/2QkeEBJAwkgHVj+demeD9Am8LeE7DRJ9Rk1B7NGQXLqVLLuJUYLNgKpCg Z6KOnStieeG1t5bi4ljhgiQvJJIwVUUDJJJ4AA5zWH4O1688T6H/AGzcWX2K1u5WewhcES/ZxgK0 meNzEMw25G1l5PUgHQUUUUAfKHxG8J678M/HP/CQ6S/2exnu3nsLq0QIkDMSfJK9BgEjH3WXPH3l Hpfgb4+6RrCR2figR6XqDOVFwin7K+WAXkklDzzu+UBSdwzgd54M8T2fxB8Fx6nJZwJHc+bBc2TS icJglSj8DOVwcEdGHavJPif8DrHTdGute8K+ZElqhmubGWXcoiVRuaNm5yMFiGJzk4IwFIB7/DBD bIUgijiQuzlUUKCzMWY8dyxJJ7kk14H+01/zK3/b3/7RrU/Zy1++1Dw/qmi3DRtaaW8bWuFwyiUy Myk9xuXI7/MecYAy/wBpr/mVv+3v/wBo0AeweBP+SeeGv+wVa/8Aopa8/wD2jv8Aknmn/wDYVj/9 FS13nw+nhufhz4beCWOVBpluhZGDAMsYVhx3DAgjsQRXB/tHf8k80/8A7Csf/oqWgA/Zx/5J5qH/ AGFZP/RUVdB8bf8AkkOu/wDbv/6UR1z/AOzj/wAk81D/ALCsn/oqKug+Nv8AySHXf+3f/wBKI6AP P/2Zf+Zp/wC3T/2tX0BXz/8Asy/8zT/26f8AtavoCgAooooA8f8A2jv+Seaf/wBhWP8A9FS0fs4/ 8k81D/sKyf8AoqKj9o7/AJJ5p/8A2FY//RUtH7OP/JPNQ/7Csn/oqKgCx+0NfXFp8NY4YJNkd3qE UM42g70CvIBz0+ZFPHp6ZrH+Fvh3xlffDjSbnSfHf9l2L+d5dn/ZEM/l4mcH52OTkgnnpnHatj9o axuLv4axzQR747TUIppzuA2IVeMHnr8zqOPX0zWf+z54xt7/AMON4Ul+S+07zJoQEOJIGfJJbJ+Y O5B6cFcZw2ADoL/wJ471PTrmwvPiX5lrdRPDMn9hQDcjAhhkNkZBPSsvwJ8E5vBHiy21uLxRJcJG jpLbLaGITKykYY+YeA21sEHlR9a9crm9c8SzWfiXRvDumW8dxqF+5mnLk7LW1QjzJHC8gtyiZwpY 8njBAOH+OXw+vvFml2msaPBHNf6cjiWBI/3txEcHCnqSpDEJ33tjnhvOPhz8b77wtb2+j67FJf6P CjLFJGM3EIwNqglgGQYIwcEA8HCha9/k8XQw/EaHwhLDGjzaZ9uiuGnALt5hXylTHJ2qzZB6A8cZ rH8c/Cbw544eS8nSSy1ZkCi9tzy2FIXeh4cDI9GwoG4AUAdJoOt6F4rs4ta0a4gvY13wLOEIePJU uhDAMudqEg4zhT0wa2K+SPBn9u/Df4zWmjy+Qt1JdxafdKMSJJDKyHKnqMgo4PBGACOq19b0AFRz wQ3VvLb3EUc0EqFJI5FDK6kYIIPBBHGKkrk/iT4obwh4D1LVYJI1vNghtNzqD5rnaCoIIYqCX24O Qh7ZNAGeJPAfwmt3s7KGO1u751ZLG2L3F3dOQQiqpJcglSq5IUMTyCTnl/irqniPWfhhq90+jx6R ouyBtl+269nzLAV+RDthAJbO5mY7cbVzmsf9njRbHUX1jxRfTx3mtLceUvnHfLCGXc0pJJOZCxG4 jPyNgnLCu8+Nv/JIdd/7d/8A0ojoA5/9nH/knmof9hWT/wBFRV5Z8edSmvvipeW8qxhLC3ht4ioO SpQS5bnrukYcY4A+p9T/AGcf+Seah/2FZP8A0VFXlHx1sbi0+K+pTTx7I7uKCaA7gd6CNYyeOnzI w59PTFAH1vXP+O/+SeeJf+wVdf8AopqueG9bh8R+GtN1mDywl5bpKUSQSCNiPmTcOpVsqeByDwKz /iDPDbfDnxI88scSHTLhAzsFBZoyqjnuWIAHckCgDyP9mX/maf8At0/9rV6B8bf+SQ67/wBu/wD6 UR15/wDsy/8AM0/9un/tavQPjb/ySHXf+3f/ANKI6APP/wBmX/maf+3T/wBrV9AV8/8A7Mv/ADNP /bp/7Wr6AoA+WLVtZ179pC+Sz1j+z9SOoXcMN79mSXykijkRRsOAfkQLz9eTXs//AAiXxD/6Kf8A +UC3/wAa8I1DVrjwD8fr/Vru2z5GqzTSRjDkwTFjlcMBuMcmRk8HGe4r6vsL631PTra/s5PMtbqJ JoX2kbkYAqcHkZBHWgDx/wASfA7WfF2ox3+ueO/td1HEIVf+yEjwgJIGEkA6sfzr0zwfoE3hbwnY aJPqMmoPZoyC5dSpZdxKjBZsBVIUDPRR06VsTzw2tvLcXEscMESF5JJGCqigZJJPAAHOaw/B2vXn ifQ/7ZuLL7Fa3crPYQuCJfs4wFaTPG5iGYbcjay8nqQD5w+I3hPXfhn45/4SHSX+z2M9289hdWiB EgZiT5JXoMAkY+6y54+8o9L8DfH3SNYSOz8UCPS9QZyouEU/ZXywC8kkoeed3ygKTuGcDvPBniez +IPguPU5LOBI7nzYLmyaUThMEqUfgZyuDgjow7V5J8T/AIHWOm6Nda94V8yJLVDNc2Msu5REqjc0 bNzkYLEMTnJwRgKQD3+GCG2QpBFHEhdnKooUFmYsx47liST3JJrwf4+/D6+vbgeMNLgjlihtxHfx RR4kAUnExx98BSFPdQoPIzt0P2ctfvtQ8P6potw0bWmlvG1rhcMolMjMpPcblyO/zHnGAPSNK8XQ 6l438QeGGhjhn0lIHRjOC1wsiBmITAICkqCcn7w6ZoA8Y+H3x9msUh0vxgJLi3RFji1GJS0o+bGZ hn5wFP3lG75eQxbI970m+0vWrOLW9LkguIbyJQt1GvMiKWwpPX5Sz/KfuksMA5rz/wAe/BTQvFf2 vUdNH9m63Luk8xSfJnkOP9YvOM4PzLg5YsQx4ryz4I6lq/hr4qSeGJVjjS8eW3voWAYrJAkjAqwP UMGHBIIY9eCAC5+0jfXEnjLSbBpM2sOn+dGm0fK7yOGOevIjT8vc16v/AMIl8Q/+in/+UC3/AMa8 o/aRsbiPxlpN+0eLWbT/ACY33D5nSRywx14Eifn7Gvb/AIf+Mbfxx4SttWi+W4XEN5GEKiOcKC4X JOV5BHJ4IzzkAA4/xJ8KfFXi7To7DXPiH9rtY5RMqf2LFHhwCAco4PRj+dbnwz+HM3w7t9Rt212T UYLt43SMwGJYmUMGIG9hlgVBPH3B17d5XN6X4lm1rxjqum2VvGdL0lBDc3hJPm3TYPlxkfLhFyHy dwZlGBjJAPJ/j78Pr69uB4w0uCOWKG3Ed/FFHiQBScTHH3wFIU91Cg8jO2h8Pvj7NYpDpfjASXFu iLHFqMSlpR82MzDPzgKfvKN3y8hi2R7PpXi6HUvG/iDww0McM+kpA6MZwWuFkQMxCYBAUlQTk/eH TNcn49+CmheK/teo6aP7N1uXdJ5ik+TPIcf6xecZwfmXByxYhjxQB6BpN9petWcWt6XJBcQ3kShb qNeZEUthSevyln+U/dJYYBzWhXy58EdS1fw18VJPDEqxxpePLb30LAMVkgSRgVYHqGDDgkEMevBH 1HQAV80ftI31xJ4y0mwaTNrDp/nRptHyu8jhjnryI0/L3NfS9fNH7SNjcR+MtJv2jxazaf5Mb7h8 zpI5YY68CRPz9jQB9L1XvrCz1Ozks7+0gu7WTG+GeMSI2CCMqeDggH8K5P4YeNofG3g61unuI31S 3QRX8YI3LIMgOQAAA4G4YGBkgE7TXaUAV7Gws9Ms47OwtILS1jzshgjEaLkknCjgZJJ/GvlTU9Sm 1X9pBLidY1dPEcFuAgIG2KZYlPJPO1AT756dK+k/Dniyz8VXmqf2UnnabYSrbrfq4KTzYJkVB12q CnzdG3HGQMn5g+J2maj4L+LV7exTbZpbv+1bKfap++5cHbk/dcMvPXbnGDQB9f1T1bTYdZ0a+0u4 aRYL23kt5GjIDBXUqSMgjOD6GjSdSh1nRrHVLdZFgvbeO4jWQAMFdQwBwSM4PqasTzw2tvLcXEsc MESF5JJGCqigZJJPAAHOaAPkz4FX1xafFfTYYJNkd3FPDONoO9BG0gHPT5kU8enpmvV/2jv+Seaf /wBhWP8A9FS155+z1oDal48l1hlk8jSrdmDqygebICiqwPJBXzTx3UZPY+h/tHf8k80//sKx/wDo qWgDoPgl/wAkh0L/ALeP/SiSj42/8kh13/t3/wDSiOo/gdPDN8JNISKWN3hedJVVgSjec7Yb0O1l OD2IPepPjb/ySHXf+3f/ANKI6APP/wBmX/maf+3T/wBrV6B8bf8AkkOu/wDbv/6UR15/+zL/AMzT /wBun/tavQPjb/ySHXf+3f8A9KI6APP/ANmX/maf+3T/ANrV9AV8/wD7Mv8AzNP/AG6f+1q+gKAP H/2jv+Seaf8A9hWP/wBFS0fs4/8AJPNQ/wCwrJ/6Kio/aO/5J5p//YVj/wDRUtH7OP8AyTzUP+wr J/6KioA9gr5//aa/5lb/ALe//aNfQFfP/wC01/zK3/b3/wC0aAPQPgl/ySHQv+3j/wBKJK8o/aRv riTxlpNg0mbWHT/OjTaPld5HDHPXkRp+Xua9X+CX/JIdC/7eP/SiSvKP2kbG4j8ZaTftHi1m0/yY 33D5nSRywx14Eifn7GgD1f8A4RL4h/8ART//ACgW/wDjWP4k+FPirxdp0dhrnxD+12scomVP7Fij w4BAOUcHox/Ouw+H/jG38ceErbVovluFxDeRhCojnCguFyTleQRyeCM85A6igDg/hn8OZvh3b6jb trsmowXbxukZgMSxMoYMQN7DLAqCePuDr287/aa/5lb/ALe//aNeuaX4lm1rxjqum2VvGdL0lBDc 3hJPm3TYPlxkfLhFyHydwZlGBjJ8j/aa/wCZW/7e/wD2jQB6B8Ev+SQ6F/28f+lElHxe8C3Hjnwk kOnCD+07KXz7fzFAMg2kNEHP3d3B9CUXOOoPgl/ySHQv+3j/ANKJK3Nd8XQ6F4s8N6JPDHs1p50F y84QRNGqlRgj5i7MFAyOSOucUAfOHw/+K2tfDy4/sXUbeS40mO4IntJVIntTkhxHkjad3JRuMg/d LE19H+F/Fvhzx3ZJf6TNHcPaOrNHNHiW1kZCOQeh2s67lyD8wBPNV/Gfw58OeOkRtXtpFu4k2RXl u+yVF3A4zghh14YHG5sYJzXzJq2ma78HPiLA8U0El1a/6RazlQUnhbcnzLnK5G9SM5HOD0agD7Ho oooA8r/aC1Kax+GRt4ljKX97FbylgchQGlyvPXdGo5zwT9RT/Zx/5J5qH/YVk/8ARUVWP2hrG4u/ hrHNBHvjtNQimnO4DYhV4weevzOo49fTNYf7Nmtwvo2s6C3lrPDcC8TMg3SK6hGwvXCmNcnn746d wD3SvmDxl/ydDbf9hXTf/QYa+n6+XPFk8Nz+07bvBLHKg1iwQsjBgGUQqw47hgQR2IIoA+i/Fl9c aZ4N1y/s5PLurXT7iaF9oO11jYqcHg4IHWvnj4F6R4i1T+3v7A8Uf2H5f2fzv9AjufOz5m375G3G G6dd3tX0P4ssbjU/BuuWFnH5l1dafcQwpuA3O0bBRk8DJI6184fAXxjb+HPFs2k3vy2+s+VCkgQs VnDERg4PCnewPB5K9Bk0Aez/APCJfEP/AKKf/wCUC3/xri5/2er651mXWH8cSDUJLg3TXEem7GEp bdvG2UbTu54xjtXulYfi3xLD4U8Py6k9vJdzl1htbOIgSXMznCRoOpJPJwCcAkA4xQBT+IXhP/hN fBd9o0bwR3T7ZLaaZNwjkUgj3XIypYcgMeD0PzR4W8b+KfhJrl7pU1rmMSgXmm3ROAwxl0IPysV4 DDKkEHDALj6T8ReLpvB+jaBcazDaPPfXtvY3kkc5iggZ1JeUFgTsUqTg446kVc8WeC9C8a6ctnrV p5vlbjBMjFJIWYYJVh+BwcqSBkHAoAz/AAn4/wDC3xDgaLT5N9xDtnksbyICSPa/yvjlThlVsqTt JXOCRXYV8geP/BGo/CvxbZXVldeZatL9p0y6YKXVo2U7XUjG5SV5xtbIPqo+q/DWpTaz4V0jVLhY 1nvbKG4kWMEKGdAxAyScZPqaANSiiigD5g/aO/5KHp//AGCo/wD0bLXv/gT/AJJ54a/7BVr/AOil rwD9o7/koen/APYKj/8ARste/wDgT/knnhr/ALBVr/6KWgDz/wDaO/5J5p//AGFY/wD0VLR+zj/y TzUP+wrJ/wCioqP2jv8Aknmn/wDYVj/9FS0fs4/8k81D/sKyf+ioqAO8+IMENz8OfEiTxRyoNMuH CuoYBljLKee4YAg9iAa8j/Zl/wCZp/7dP/a1eweO/wDknniX/sFXX/opq8f/AGZf+Zp/7dP/AGtQ B6B8bf8AkkOu/wDbv/6UR1z/AOzj/wAk81D/ALCsn/oqKug+Nv8AySHXf+3f/wBKI65/9nH/AJJ5 qH/YVk/9FRUAdR8YL640/wCFGvzWsnlyNEkJO0HKSSJG459VZh7Z45rzD4KaH4q1PwbeTaH4x/sW 1XUHRrf+zIrnc/lxkvuc5GQQMe3vXp/xgsbjUPhRr8NrH5kixJMRuAwkciSOefRVY++OOa8w/Z28 Y29pPd+Ebr5JLuU3VmyoTvcJ+8Vjnj5UUjjs2TnaKAPR/wDhEviH/wBFP/8AKBb/AONcn4b+AE3h zxLpusweLpC9ncJKUSxMZkUH5k3CXgMuVPB4J4Ne2Vzfi/xLNoNvY2mnW8d1rWqXAtbC3cnaGIy0 sgX5vKQfMxUHsOM5ABh/G3/kkOu/9u//AKUR15/+zL/zNP8A26f+1q9A+Nv/ACSHXf8At3/9KI68 /wD2Zf8Amaf+3T/2tQB9AV8//tNf8yt/29/+0a+gK+f/ANpr/mVv+3v/ANo0AegfBL/kkOhf9vH/ AKUSVH8cYIZvhJq7yxRu8LwPEzKCUbzkXK+h2swyOxI71J8Ev+SQ6F/28f8ApRJR8bf+SQ67/wBu /wD6UR0Ac/8As4/8k81D/sKyf+ioq9M1/wAOaR4p0ttN1qxju7QuH2MSpVh0KspBU9RkEcEjoTXm f7OP/JPNQ/7Csn/oqKq/7QnjC40jQ7Lw9YXPlTalve6McoDiBeNhXGQrknnIz5bLyCaAOwTxd4W8 MS2vhPw7Zz6jdW+Ihp2jxCY267irNK5YKmH4Yu27LAt1zXkHx7m8QXMXhy5161sbLzPtBt7O2kaV 4Rtg3CSU4Vm3E8KoAx1bOR6v8G/D2l6J8OtNubBoJ7jUYluLq6jHLuc/ITk/6vJTHqGOASa8/wD2 mv8AmVv+3v8A9o0AeweBP+SeeGv+wVa/+ilrwD9o7/koen/9gqP/ANGy17/4E/5J54a/7BVr/wCi lrwD9o7/AJKHp/8A2Co//RstAH0/Xz/+01/zK3/b3/7Rr3yCeG6t4ri3ljmglQPHJGwZXUjIII4I I5zXgf7TX/Mrf9vf/tGgD0D4Jf8AJIdC/wC3j/0okrz/APaa/wCZW/7e/wD2jXoHwS/5JDoX/bx/ 6USV5/8AtNf8yt/29/8AtGgD2DwJ/wAk88Nf9gq1/wDRS15P+0vfXEeneHbBZMWs0s80ibR8zoEC nPXgSP8An7CvWPAn/JPPDX/YKtf/AEUteT/tL2NxJp3h2/WPNrDLPDI+4fK7hCox15Eb/l7igDoP Cfhjx3ceDdDms/iL9ktZNPt3ht/7Egk8pDGpVNxOWwMDJ64qxrfw38ZeI9Hn0nVviP8AaLGfb5kX 9hwpu2sGHKsCOQDwasfBXxjb+J/A1tYfcv8AR4o7W4QIQuwAiJgcnOVTn/aDcAYz6RQB5n8NvhNN 8PNZu71fEUl9Bc2/lPbC2MSltwKufnYEgBgOP4zz68f8ffh9fXtwPGGlwRyxQ24jv4oo8SAKTiY4 ++ApCnuoUHkZ2+sSeJZp/HkPhrTreOVLa3+1apcsSVgVgRFEu3pKzYbDY+QEjOeDSvF0OpeN/EHh hoY4Z9JSB0YzgtcLIgZiEwCApKgnJ+8OmaAPGPh98fZrFIdL8YCS4t0RY4tRiUtKPmxmYZ+cBT95 Ru+XkMWyPe9JvtL1qzi1vS5ILiG8iULdRrzIilsKT1+Us/yn7pLDAOa8/wDHvwU0LxX9r1HTR/Zu ty7pPMUnyZ5Dj/WLzjOD8y4OWLEMeK8s+COpav4a+KknhiVY40vHlt76FgGKyQJIwKsD1DBhwSCG PXggA+o6KKKAOf8AHf8AyTzxL/2Crr/0U1eAfs4/8lD1D/sFSf8Ao2Kvf/Hf/JPPEv8A2Crr/wBF NXgH7OP/ACUPUP8AsFSf+jYqAPp+vmD4k3Go6n+0Ta2UV99nmgu7G2sp/KV/s+7Y4bb/AB4eRmwe vTpX0/Xyp8X5L7w58cJNaWGPeHtL608w7lkEaooJAOcb42GODx7g0Ae1/wDCJfEP/op//lAt/wDG uf8AE/wb8ReMfsv9v+P/ALZ9l3+T/wASeOPbuxu+44znavX0r0zw5r9j4p8P2etaa0htLpCyeYu1 lIJVlI9QwI4yOOCRzWpQByfw88GzeBPDTaNLq8mpILh5YnaIxiJWC/Iq7mwNwZuD1Y8evzZ8bf8A kr2u/wDbv/6Tx19N+FfEs3ii41W7gt400W3uPstlcZJa6ZCRLKCPlMRO1VKk52sTjoPmT42/8le1 3/t3/wDSeOgD6/rzf462Nvd/CjUpp498lpLBNAdxGxzIsZPHX5XYc+vrivSK87+OM8MPwk1dJZY0 eZ4EiVmALt5yNhfU7VY4HYE9qAOD/Zl/5mn/ALdP/a1cxatrOvftIXyWesf2fqR1C7hhvfsyS+Uk UciKNhwD8iBefrya9D/Z10BtP8HX2tSrIr6pcBY8spVoosqGAHIO9pQc/wB0cdz5ZqGrXHgH4/X+ rXdtnyNVmmkjGHJgmLHK4YDcY5MjJ4OM9xQB7v8A8Il8Q/8Aop//AJQLf/GuX8SfA7WfF2ox3+ue O/td1HEIVf8AshI8ICSBhJAOrH869gsL631PTra/s5PMtbqJJoX2kbkYAqcHkZBHWpJ54bW3luLi WOGCJC8kkjBVRQMkkngADnNAGP4P0Cbwt4TsNEn1GTUHs0ZBcupUsu4lRgs2AqkKBnoo6dK+XPjb /wAle13/ALd//SeOvp/wdr154n0P+2biy+xWt3Kz2ELgiX7OMBWkzxuYhmG3I2svJ6n5g+Nv/JXt d/7d/wD0njoA+v6KKKAPmD9nH/koeof9gqT/ANGxV9F+JdSm0bwrq+qW6xtPZWU1xGsgJUsiFgDg g4yPUV86fs4/8lD1D/sFSf8Ao2Kvo/XdM/tvw9qek+d5P260ltvN27tm9Cu7GRnGc4yKAPnD9nH/ AJKHqH/YKk/9GxV9P18ifCvUrvwZ8XrOyvFkieW4fSryFAjnczbAuc4wJQhJU9FOM9D9d0AeZ/Hn TYb74V3lxK0gewuIbiIKRgsXEWG46bZGPGOQPoeT/ZovriTTvEVg0mbWGWCaNNo+V3DhjnryI0/L 3Ndp8cZ4YfhJq6Syxo8zwJErMAXbzkbC+p2qxwOwJ7Vz/wCzroDaf4OvtalWRX1S4Cx5ZSrRRZUM AOQd7Sg5/ujjuQDD/aa/5lb/ALe//aNegfBL/kkOhf8Abx/6USV5/wDtNf8AMrf9vf8A7Rr0D4Jf 8kh0L/t4/wDSiSgD0CvmD9o7/koen/8AYKj/APRstfT9fMH7R3/JQ9P/AOwVH/6NloA9/wDAn/JP PDX/AGCrX/0UtfPFq2s69+0hfJZ6x/Z+pHULuGG9+zJL5SRRyIo2HAPyIF5+vJr6H8Cf8k88Nf8A YKtf/RS180ahq1x4B+P1/q13bZ8jVZppIxhyYJixyuGA3GOTIyeDjPcUAe7/APCJfEP/AKKf/wCU C3/xrl/EnwO1nxdqMd/rnjv7XdRxCFX/ALISPCAkgYSQDqx/OvYLC+t9T062v7OTzLW6iSaF9pG5 GAKnB5GQR1qSeeG1t5bi4ljhgiQvJJIwVUUDJJJ4AA5zQBj+D9Am8LeE7DRJ9Rk1B7NGQXLqVLLu JUYLNgKpCgZ6KOnSvmz4jeE9d+Gfjn/hIdJf7PYz3bz2F1aIESBmJPklegwCRj7rLnj7yj6P8Ha9 eeJ9D/tm4svsVrdys9hC4Il+zjAVpM8bmIZhtyNrLyepr+DPE9n8QfBcepyWcCR3PmwXNk0onCYJ Uo/AzlcHBHRh2oA4PwN8fdI1hI7PxQI9L1BnKi4RT9lfLALySSh553fKApO4ZwPYIYIbZCkEUcSF 2cqihQWZizHjuWJJPckmvAPif8DrHTdGute8K+ZElqhmubGWXcoiVRuaNm5yMFiGJzk4IwFOv+zl r99qHh/VNFuGja00t42tcLhlEpkZlJ7jcuR3+Y84wAAe2UUUUAfJmp6lNqv7SCXE6xq6eI4LcBAQ NsUyxKeSedqAn3z06V9Z18ceKprjwp8a9Rv7q13yWmtm/EPmAeYhl85PmGcblK/TPIzxX2HBPDdW 8VxbyxzQSoHjkjYMrqRkEEcEEc5oA4P42/8AJIdd/wC3f/0ojrn/ANnH/knmof8AYVk/9FRVufHG eGH4SaukssaPM8CRKzAF285GwvqdqscDsCe1Yf7OP/JPNQ/7Csn/AKKioA9M1/w5pHinS203WrGO 7tC4fYxKlWHQqykFT1GQRwSOhNc2ni7wt4YltfCfh2zn1G6t8RDTtHiExt13FWaVywVMPwxdt2WB brmuP/aE8YXGkaHZeHrC58qbUt73RjlAcQLxsK4yFck85GfLZeQTXUfBvw9peifDrTbmwaCe41GJ bi6uoxy7nPyE5P8Aq8lMeoY4BJoA8o+Pc3iC5i8OXOvWtjZeZ9oNvZ20jSvCNsG4SSnCs24nhVAG OrZyPd/An/JPPDX/AGCrX/0UteP/ALTX/Mrf9vf/ALRr2DwJ/wAk88Nf9gq1/wDRS0AeP/tNf8yt /wBvf/tGvQPgl/ySHQv+3j/0okrz/wDaa/5lb/t7/wDaNegfBL/kkOhf9vH/AKUSUAR/HGCGb4Sa u8sUbvC8DxMyglG85FyvodrMMjsSO9Yf7OP/ACTzUP8AsKyf+ioq6D42/wDJIdd/7d//AEojrn/2 cf8Aknmof9hWT/0VFQB0Hxe8C3HjnwkkOnCD+07KXz7fzFAMg2kNEHP3d3B9CUXOOo8M+H/xW1r4 eXH9i6jbyXGkx3BE9pKpE9qckOI8kbTu5KNxkH7pYmvo/XfF0OheLPDeiTwx7NaedBcvOEETRqpU YI+YuzBQMjkjrnFV/Gfw58OeOkRtXtpFu4k2RXlu+yVF3A4zghh14YHG5sYJzQBY8L+LfDnjuyS/ 0maO4e0dWaOaPEtrIyEcg9DtZ13LkH5gCea6SvjjVtM134OfEWB4poJLq1/0i1nKgpPC25PmXOVy N6kZyOcHo1fY9ABRRRQB8gf83C/9zX/7d19f18gf83C/9zX/AO3dfX9AHL6x4W8HRa4njDWLOxgv rXYft9zL5aKR8qMwJCFgSAGYZGFweBjPt/Hd54nikXwXok97GeI9V1EG2seVb5lyPMkw67SqoOc5 ZRgnxTV9Wh+J3x1tNN1PUI10GK9a2tk84NE8adQjKV5mZAAwOfnUAttWvp+CCG1t4re3ijhgiQJH HGoVUUDAAA4AA4xQB8weBhMv7TMi3Ekck41PUBI8aFFZtk2SFJJAz2ycepr6jr5g8G/8nQ3P/YV1 L/0Gavp+gAooooA+YPBv/J0Nz/2FdS/9Bmr6fr5g8G/8nQ3P/YV1L/0Gavp+gDxP9pPTYZfCujao zSefb3pt0UEbSsiFmJ4znMS457nr20P2dZ5pvhzdJLLI6Q6nKkSsxIRfLjbC+g3MxwO5J71T/aRv rePwbpNg0mLqbUPOjTafmRI3DHPTgyJ+fsa6z4V6Avgv4ZWa6isdnPIj3180rMojLDOX342FYwgY cAFT9SAXL/RPA3hDWLnxpfW9jp19Jv33krkbmKktsTOPMYK33F3NluuTmO18Wa14oRW8L6JJb2bP /wAhXWUMUTpuQh4YVPmShkZipPljgc5yK8Q8ETw/FT40m/8AEssbwKklxb2FywdWVT+7gX7oIUMX Ix82xiQdzGvqOgD5g/Zx/wCSh6h/2CpP/RsVfRfiTRIfEfhrUtGn8sJeW7xB3jEgjYj5X2nqVbDD kcgcivnT9nH/AJKHqH/YKk/9GxV7/wCNvE//AAh3hC+1/wCx/bPsvl/uPN8vdukVPvYOMbs9O1AH y5Z6l4v+C3jG6tgscc5TEkMoZ7e7j52OMEEjOSCMEHIOPmWvoPwd8UvC3xCi/sor5F/PEyy6beIG Eq7RvCn7si8sMHDEKxKgV1GsaJoXjPQ0tdSt4NR02bZPGVc4PdXR1ORkHqp5BI6E18yfFb4Ut4Be DUNPuJLnRbhxCrTsvmxS7SdrYADAhWIIHYggYBYA+m/Fl9caZ4N1y/s5PLurXT7iaF9oO11jYqcH g4IHWvnj4F6R4i1T+3v7A8Uf2H5f2fzv9AjufOz5m375G3GG6dd3tXregalq/jv4FS3E6xz6tqGm XduAgEYlkHmRKeTgFsAnoMk9BwPHPgL4xt/Dni2bSb35bfWfKhSQIWKzhiIwcHhTvYHg8legyaAP Z/8AhEviH/0U/wD8oFv/AI1xc/7PV9c6zLrD+OJBqElwbpriPTdjCUtu3jbKNp3c8Yx2r3SsPxb4 lh8KeH5dSe3ku5y6w2tnEQJLmZzhI0HUknk4BOASAcYoA3KKr2H2z+zrb+0fI+3eUn2j7Pny/MwN 2zPO3OcZ5xVigCOeCG6t5be4ijmglQpJHIoZXUjBBB4II4xXDiTwH8Jrd7Oyhjtbu+dWSxti9xd3 TkEIqqSXIJUquSFDE8gk50PiT4obwh4D1LVYJI1vNghtNzqD5rnaCoIIYqCX24OQh7ZNeX/s8aLY 6i+seKL6eO81pbjyl8475YQy7mlJJJzIWI3EZ+RsE5YUAbHxV1TxHrPww1e6fR49I0XZA2y/bdez 5lgK/Ih2wgEtnczMduNq5zUn7OP/ACTzUP8AsKyf+ioq6D42/wDJIdd/7d//AEojrn/2cf8Aknmo f9hWT/0VFQB7BRRRQB82ftJ6lNL4q0bS2WPyLeyNwjAHcWkcqwPOMYiXHHc9e3ufgT/knnhr/sFW v/opa8I/aRsbiPxlpN+0eLWbT/JjfcPmdJHLDHXgSJ+fsa9j+E+tw658MtDmi8tXtrdbOWNZA5Ro hs+b0LKFfB6Bh16kA7SvmD9nH/koeof9gqT/ANGxV9Nzzw2tvLcXEscMESF5JJGCqigZJJPAAHOa +ZP2cf8Akoeof9gqT/0bFQB1f7S2pTRaNoGlqsfkXFxLcOxB3Bo1VVA5xjErZ47Dp37T4Jf8kh0L /t4/9KJK5f8AaM8PXGoeF9O1yBsx6XKyTpgcJKUAfJPZlUYAOd+eADUn7OuvtqHg6+0WVpGfS7gN HlVCrFLlgoI5J3rKTn+8OewAPZK+VP2gtNhsfiabiJpC9/ZRXEoYjAYFosLx02xqec8k/QfVdfMn x7hbWfivpmmaeY7i8eygtREsi5EryybUbJwpIdTzjhgehoA+g/Cd9can4N0O/vJPMurrT7eaZ9oG 52jUscDgZJPSvlj4Jf8AJXtC/wC3j/0nkr6z0nTYdG0ax0u3aRoLK3jt42kILFUUKCcADOB6Cvkz 4Jf8le0L/t4/9J5KAPr+vlzxZBDbftO26QRRxIdYsHKooUFmELMeO5Ykk9ySa+o6+YPGX/J0Nt/2 FdN/9BhoA+n6+QPjb/yV7Xf+3f8A9J46+v6+QPjb/wAle13/ALd//SeOgD6/r58/aZghW48NXCxR id0uUeQKNzKpiKgnqQCzEDtuPrX0HXz/APtNf8yt/wBvf/tGgD2DwJ/yTzw1/wBgq1/9FLXzxatr OvftIXyWesf2fqR1C7hhvfsyS+UkUciKNhwD8iBefrya+h/An/JPPDX/AGCrX/0UtfNGoatceAfj 9f6td22fI1WaaSMYcmCYscrhgNxjkyMng4z3FAHu/wDwiXxD/wCin/8AlAt/8a5fxJ8DtZ8XajHf 6547+13UcQhV/wCyEjwgJIGEkA6sfzr2CwvrfU9Otr+zk8y1uokmhfaRuRgCpweRkEdaknnhtbeW 4uJY4YIkLySSMFVFAySSeAAOc0AY/g/QJvC3hOw0SfUZNQezRkFy6lSy7iVGCzYCqQoGeijp0rcr n/B2vXnifQ/7ZuLL7Fa3crPYQuCJfs4wFaTPG5iGYbcjay8nqegoAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc34 9/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R1 0/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kd dP8A+2n/AKLava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpX R/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8 jrp//bT/ANFtXa/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfU BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVw/j3U vGTadd6V4U8NTzzTxNF/aTX0MKxbgPmjG8OWALDJ24YA/MK7iigD5U8OfDH4peFvEFnrWm6BGLu1 csnmXVuysCCrKR5nQqSOMHngg816X/wkPxz/AOhM0P8A7/L/APJFewUUAeNz678dZreWJPCejQO6 FVljljLISPvDdORkdeQR6g1geGfAXxB1b4qaT4h8dWEk8Fu+95muocRlEYxbUjfgCTacAYJJJzk1 9B0UAc3458GWPjrw1Jo99JJCQ4mt505MMoBAbGcMMMQQeoJwQcEfOE3w5+Jfw+1QahpVtdu6OqLd aQ5mEnR8GMDeUyuCHTaSO+Rn6zooA+f7Hw58ZPHUUdh4l1efSdGniMkkpSFHYFSBG0cW1zkNyj4A 5zyAD7Z4c0Cx8LeH7PRdNWQWlqhVPMbczEkszE+pYk8YHPAA4rUooAKKKKAPn/8Aaa/5lb/t7/8A aNHw413x74Y+HGn3tp4fg8Q6BJ5xggtJCl3bnztpBAU71LbzhVY8kkgACj9pr/mVv+3v/wBo16B8 Ev8AkkOhf9vH/pRJQBj+IV+IXxEsxo9ro/8Awi2iXPzXF5d3KvPPASMJ5SfNGxUksh642lgMhvQP DHhjS/COhw6RpEHlW8fLM3Lyuerue7HA/IAAAADYooA8v+KsXi/xP4cuPDmg+FJ3hnlAuLu5urdA URwymMCXPzFQcsBgcYyfl5f4SeHPG/w9vNRW/wDB09za6h5e+SDULbfF5YfGFMgDZLj+IYxnnpXv FFAEcEjTW8UrwyQO6BmikKlkJH3TtJGR04JHoTXH/Eb4c2PxD0u2gnupLO8tHLW1yq7wgbG9WTID AhR3BBA5xkHtKKAPG/Bh8efDLS30bWPDUmtaHavuhu9IkSSWMPliqxHDyDe3cKV+Y5KgY0PE8fjz 4hW6aPp2lyeGdBukV7m+v5kNxNEwXMflISUPLZUkbguCy5Kn1SigDH8MeGNL8I6HDpGkQeVbx8sz cvK56u57scD8gAAAAM/4i6D/AMJL8P8AWNK+2wWXmRCT7RcHEaeWyyfOf4V+TBbsDnBxiuor58/a N8UX0d7p/heCSSKze3F5c7X4nJcqisMZwpjJ64JYcZUGgDk/Dn/C2/DfhxLrw79um0iaVoYhaeVf IGV3DFEG/au4PllAVuDk5FaH/CZfHP8A59dc/wDBEv8A8Zr6L8Parour6NBP4fubSfT0RY4xa4Cx AKCEKj7hClflIBHHArUoA8H8GfGHxTZ+IdN8NeN9FnFxfSxxQ3L25tphvdlVmjICsu4quVC4Cn7x r0D4h3Pie98Panonh7wxPeTXkRtjdzXEEcIjdMOygyBywBwAVAzzyBhqfjSSx8dXtn4O0+G01QRX sVxq8hO5LKCNzuXzFOUncqyBR82C+do5r0SgD50+GHgrx74B8VPqlx4Qku4J7c2six6hbKyKzoxc ZfDEBPu5Gc9RX0HY3Et3ZxzzWU9lI2cwTlC6YJHJRmXnrwT19eKsUUAeL/G74Z6z4u1HTdZ0C3+1 3UcRtbiBp0jwgJZGXdgdWcH5u64HU1ieBn+NDeGo9CsLKOwtInMcWoavFsltlUBggV8lk/hB8tsb sAgKNv0HRQB84fFj4Sa6ktrremfbteupIj/akwQNK824YdYwc7SGChEXCLGM55Nej+Abv4hDQ4r3 xPYZhtrRIbbT4Av2y7J2fvpXlkAVgAcqSpJZ8gEKD6RRQB84fErwT8Q/Hvi1tVj8KfZrWKIW1sjX tuXMaszBn/eY3EsTgcDgc4yfb/DGra9qFnDH4g8OT6XfCLM8izwyQM4OMJtkZ+RzgrxyMnAJ6Cig Dwv4v+G/GPxBuNJXS/CV3BBYpKWe6vLVWdnK8BVlIAAQc55yeBjnpPhVF4v8MeHLfw5r3hSdIYJS Le7trq3cBHcsxkBlz8pYnKg5HGMj5vUKKAPN/ivb+J/EPhy98NaH4Wnu47nZvvnvIIkXa6SDapfc 3QqchcY4yK5P4QeG/GPw+uNWXVPCV3PBfJEVe1vLVmRkLcFWlAIIc854wODnj3SigDh/iHc+J73w 9qeieHvDE95NeRG2N3NcQRwiN0w7KDIHLAHABUDPPIGG87+E3hvx78PdUvhfeEpLjT79EExgvLbz Y2TdsKgygEfMQQcdQQeMH3yigDH1PVtStNOimsfDl9f3UsRcW6z28flPgEJIzSYGScZTfjB68Z+d PB/w3+JPg/xZYa9B4WjuHtHYmF76AB1ZSjDIk4O1jg84OOD0r6jooAy49VvH0ua7bw/qUc6PtWya S382QcfMpEpTHJ6sD8p46Z+dPG3w5+IfjHxffa//AMIn9j+1eX+4/tG3k27Y1T724Zztz0719P0U AZeialqGo2+7UdCu9JnVELJNNDKrMR8wRo3YkAjqwXORx1x4v8T/AIHX2pazda94V8uV7pzNc2Ms u1jKzDc0bNxg5LEMRjBwTkKPfKKAPmDw2PjfpnmaFpUGqxx2uQBdwxGNQuE2xyzDaVGBhVbGMkDG TXp/gP4bapaa5D4w8ZavPqPiExMIoS+Usy+7coIOG4cgKoCLubAPDD1CigAooooAK+LPhpHrUvxD 0hfD01pDqgeRoWuwTEQI2Lq2ATgqGHHPPBHUfadfIHwS/wCSvaF/28f+k8lAHudl498eO8mnXHwz u21SBI2d0vkjtZBt+dllYFc5K4QMxwWyflOY/Cfw71S88UN408ezQXmtfKbKyiO6GxGMgY6blJIA GQDlssx3D1CigAryP4nfBVfGWqSa7o99HaapIirNFcbjFOV2qG3DJQhRjgEHC8Dkn1yigDzfQ/Gf jLTbOysfF3gjVZr+TbEl3pfkzpM2cFpQHCw9V5J2n5iNoGBl3ng3xX8SvEFrc+NLePRvDdk+6PRY bsSyTuAPmd04wcsM5BABAALFz65RQBX2Jp+neXZ2eY7eLENrbhUyFHyogJCjoAMkAeoFeF/Fnw34 9+IWqWIsfCUlvp9gjiEz3lt5sjPt3lgJSAPlAAGehJPOB75RQB5n8Lk8U+GfDFj4c1nwhdxJbOVS 8hvbaRSHkdmZ18wFQu4fd3E88dj6ZRRQB88fG34Y67feKJfE2iWM+oW9zFH9qjhIeSORQIxtjA3F SoTpuIIcnAxXb+Dn+J3iP7D/AMJUkGjabb+TcM9uoS7vivIRwGIjUkAuNqk/dAALY9QooA8z+K3w pXx8kGoafcR22tW6CFWnZvKli3E7WwCVILMQQO5BByCvjmjaH8X/AALqKWGkWGq2zXWDshRLi2yx A3MfmiRvlGWOCAOSAa+r6KAPD9J+G3jbxveRXXxN1edbG1lUppcbx4uAAx3HyiETlsbgC5G4ZX5T XuFFFABRRRQB4P8AC/SviZ8P/OsLnwl9t0i5lErol9bLJC52hnU7/m+UfdOMkDBXnPYeIvEHiLxX oeq+H9C8HarbXVxmxuLnWFjgghjk3I8ikOTLgZxsyOQeeA3pFFAHF/DPwDD4A8NGzaWO41C5cS3l wiAAtjARTjJRecZ7ljgbsDP+L/w/m8d+GoTp/l/2tp7tLbB2IEqsPnjznALYUgnuoGQCSPRKKAPm zwUvxl8HXE2gadoMlxbwo0gt75VNuhYqSY5t6gnn7quRksducka/j74beNNa8K6dLql5J4h8UNei JFt9sVva2+yRmxwi5Yqm52AJIRR0+b3yigDyf4X/AA98a+B/OtrrXtK/sx5RKbOK3afzGO0O28+W yNtRQPvLySV45sfFWLxf4n8OXHhzQfCk7wzygXF3c3VugKI4ZTGBLn5ioOWAwOMZPy+oUUAeD/CT w543+Ht5qK3/AIOnubXUPL3yQahbb4vLD4wpkAbJcfxDGM89K90gkaa3ileGSB3QM0UhUshI+6dp IyOnBI9CakooAKKKKAPG/izp3jHx5o1rpGl+DLuGCK4S6a4ur+1ViwV12BFkYYw4O7d6jHeo/hLp njfwHp17pOreEJ57GaU3MctpeWxkWQhVKkNKAVIUHIOQQeufl9oooAr39jb6np1zYXkfmWt1E8My biNyMCGGRyMgnpXzJ4o+B3ivw3qj3/hrzNRs4Xae3lglCXUITDDK8EvnOPLySVzhSQK+o6KAPnDR m+PGt6clnFLfWtocWjTX0cNvIi4ALlnUTHAOd65bIOCWFev+APAFv4Gs70m/n1LU9Ql829vpsgyk FivyknGNzEkkkliSegHYUUAeN/Ejw144l+KWj+KfCOmR3JsbJY98k0SqW3y7kKuwJBV8ZHrwQRx2 C+N9YtUsotV8BeIIry6cpssTBdxIdwA3SrIAowQcuFHXqATXaUUAeR+Gvhzq+rfEifx/4vtrSznL h7XS4nE3lsq+WhkbBXKqqsCp5Yg/LjbXrlFFABXP+OPDf/CXeC9U0MSeXJdRfunLYAkUh03HB+Xc q5wM4zjmugooA+WPCPh34reAPFCppPh+dprqI+ZDJtktJVAbHmOrBFYEEjLBucdGwfQ9Y+HnjTxn 4O1KXxbqscuqbDPpWl2gVYLaThtrEbQ7kAxAszBAzHLZ49kooA+cPhbovxR0G81LQ7HTf7Ns55Qt zeajEzJasAwMkC7gsjHHUBlO1MkLzXq/xN+Hdv8AEHQ44hN9n1Oz3PZTMTsBbG5HA/hbavIGRgEZ 5U9xRQB8yaHY/Ff4S3Fzb2GhSahZ3TtiOOJruBmUgeaBGQyEjA+bbuHUEqNvf3mgeP8Ax34V1WHx fa2lgIreb7FpWnybftlxs/dNM/mMNitghdwBbluFGfXKKAPn/wCHfwl+IXh+WW8j8QweHftMRWWF I1u3JDfKGQ/u+mSGDEjOO5x1nxOtvGPiLwnJ4Y0Xw1d3SSOqXOoXtzaoZVjZWVkVZByzKCcquBxt 5+X1SigDwf4SeHPG/wAPbzUVv/B09za6h5e+SDULbfF5YfGFMgDZLj+IYxnnpXukEjTW8UrwyQO6 BmikKlkJH3TtJGR04JHoTUlFAHmfxW+FK+Pkg1DT7iO21q3QQq07N5UsW4na2ASpBZiCB3IIOQV8 c0bQ/i/4F1FLDSLDVbZrrB2QolxbZYgbmPzRI3yjLHBAHJANfV9FAHh+k/Dbxt43vIrr4m6vOtja yqU0uN48XAAY7j5RCJy2NwBcjcMr8pr3CiigDwf4X6V8TPh/51hc+EvtukXMoldEvrZZIXO0M6nf 83yj7pxkgYK857DxF4g8ReK9D1Xw/oXg7Vba6uM2Nxc6wscEEMcm5HkUhyZcDONmRyDzwG9IooA4 v4Z+AYfAHho2bSx3GoXLiW8uEQAFsYCKcZKLzjPcscDdgcPrOgfEHSPjXqPi3w5oUd9YXCRQur3M KCeIRRh1+ZtyncnBx1UcEZB9sooA4uTxvrETw2LeAvEB1SW38xUUwNah9pO1rgSbVGVIyQDjB28g Hn/hv8M77R/Euo+MvExtDrV+8kqWtuNyWplO9zuOTvySnykgDd8zbuPVKKAOb8c+DLHx14ak0e+k khIcTW86cmGUAgNjOGGGIIPUE4IOCPnCb4c/Ev4faoNQ0q2u3dHVFutIczCTo+DGBvKZXBDptJHf Iz9Z0UAfP9j4c+MnjqKOw8S6vPpOjTxGSSUpCjsCpAjaOLa5yG5R8Ac55AB9s8OaBY+FvD9noumr ILS1QqnmNuZiSWZifUsSeMDngAcVqUUAeJ6zoHxB0j416j4t8OaFHfWFwkULq9zCgniEUYdfmbcp 3JwcdVHBGQe4k8b6xE8Ni3gLxAdUlt/MVFMDWofaTta4Em1RlSMkA4wdvIB7SigDyv4b/DO+0fxL qPjLxMbQ61fvJKlrbjclqZTvc7jk78kp8pIA3fM27j1SiigArm/HPgyx8deGpNHvpJISHE1vOnJh lAIDYzhhhiCD1BOCDgjpKKAPlBvhn8TvAeoyanpFvO7W+wfadKnEnmglTt8vh3XdjKlMfKSQRzXb 6T4Z+LfjmKK28Xa1PpehSbXnRBFFPPGytlAsa5GQcFZMAbs7WK4r3iigCnpWlWOh6Xb6ZpltHbWd umyKJOij+ZJOSSeSSSck1y/xG+HNj8Q9LtoJ7qSzvLRy1tcqu8IGxvVkyAwIUdwQQOcZB7SigDxv wYfHnwy0t9G1jw1JrWh2r7obvSJEkljD5YqsRw8g3t3ClfmOSoGNDxPH48+IVumj6dpcnhnQbpFe 5vr+ZDcTRMFzH5SElDy2VJG4LgsuSp9UooAx/DHhjS/COhw6RpEHlW8fLM3Lyuerue7HA/IAAAAD L+I3gxfHXg640hZI4rtXWe0lk3bUlXOM4PQqWXocbs4JArrKKAPmDwjpfxf8AawumaVok7x3WZnt pgktox2sMtIG2xtx2dScIDkYFdf4r8EeOfEvgS/uvE119v1dpYW0vR7ABYbVpJYwxcgDeyqXXLFl Rdx3HOR7hRQB4f8ADL4X+PfB15JdDWtKsLe7iV7i1aA3RZwDtRwNmNu9jlJOoH3hXQfFWLxf4n8O XHhzQfCk7wzygXF3c3VugKI4ZTGBLn5ioOWAwOMZPy+oUUAeD/CTw543+Ht5qK3/AIOnubXUPL3y Qahbb4vLD4wpkAbJcfxDGM89K90gkaa3ileGSB3QM0UhUshI+6dpIyOnBI9CakooA8X+LWmeN/Hm nWWk6T4QngsYZRcyS3d5bCRpAGUKAspAUBick5JI6Y+aT4Tad4x8B6NdaRqngy7mgluHuluLW/tW YMVRdhRpFGMITu3egx3r2SigCOeRobeWVIZJ3RCyxRlQzkD7o3EDJ6ckD1Irwv4t+HPG/wAQrzTl sPB09ta6f5mySfULbfL5gTOVEhC4KH+I5znjpXvFFAHl/wAKovF/hjw5b+HNe8KTpDBKRb3dtdW7 gI7lmMgMuflLE5UHI4xkfN1njnwZY+OvDUmj30kkJDia3nTkwygEBsZwwwxBB6gnBBwR0lFAHyZN 8OfiX8PtUGoaVbXbujqi3WkOZhJ0fBjA3lMrgh02kjvkZ7Ox8OfGTx1FHYeJdXn0nRp4jJJKUhR2 BUgRtHFtc5Dco+AOc8gA/QFFAGPomiWfhHwvBpOk288tvZRN5cW8GSVsljyxC7mYk8lVyew6eP8A xb8OeN/iFeacth4OntrXT/M2ST6hbb5fMCZyokIXBQ/xHOc8dK94ooA8v+FUXi/wx4ct/DmveFJ0 hglIt7u2urdwEdyzGQGXPylicqDkcYyPmr/GXwt4q17UfC9/4Vs/PutLlmm3+bEvlPmIocSEA8of XpzXrFFAHBweN/Emm6NFP4k8Bayt3vEbDSDDeKx253bVk3oCQ3BBA4+Yk1zd18PdZ8ffEqDxN4os INL0iw2xW+ntIk81ykbb183BaMKxdtwyeBtxzvr2CigAooooAr39jb6np1zYXkfmWt1E8MybiNyM CGGRyMgnpXzZrfwb8aeCvEH9s+D5JL2C2d5raWGRRcRKBna6HAckFlwobcAcqN22vpuigDxvQPE3 xj8TusL+H9N0S0kcxSX9zaSI9v8ALnesUkmXIzx8pUngnGccprvwQ8U3HxAvJ9Af7LYx+VPb6nfX xMkswVC7ll3P5hk3tnaBkHGOBX0fRQBh+GtK1zS7eddd8SSa3PI4MbmzitliUDoFTkknOSSe2AOc +P8AxP8AgdfalrN1r3hXy5XunM1zYyy7WMrMNzRs3GDksQxGMHBOQo98ooA+YPDY+N+meZoWlQar HHa5AF3DEY1C4TbHLMNpUYGFVsYyQMZNen+A/htqlprkPjDxlq8+o+ITEwihL5SzL7tygg4bhyAq gIu5sA8MPUKKAPN/jX4W1nxd4Ns7DQ7P7XdR6gkzJ5qR4QRyAnLkDqw/OpNE8W+NdL8P7/F/gnUp ri3RFa40qS3uGuCTjcYVcFT93O3cPvHCgYr0SigDxvxV4P1/4t+INKmv9Nk0Dw3YpvU3Tr9tnEoB fEalhGRsVcNgjJJ3H5R7BBBDa28VvbxRwwRIEjjjUKqKBgAAcAAcYqSigAqvfXEtpZyTw2U97IuM QQFA75IHBdlXjryR09eKsUUAfOnxP8FePfH3ipNUt/CElpBBbi1jWTULZmdVd2DnD4UkP93Jxjqa 9T+Hlz4nsvD2maJ4h8MT2c1nELYXcNxBJCY0TCMwEhcMQMEBSM88A4XuKKAPI/jFpHinxro1vouj eFrtkgvTO91Nd2yK4VWRdi+YSQ28n5tpGBxzxH8H9K8X+CdOl0PV/CU4tbi7Nx9thvrd/LLCNMMm /O0BSSQSewU17BRQB5/8UF8T6z4X1Hw/4e8P30s11sjN6LuCGPy8hnxmTecgbCpVQQW5I68H8JvD fj34e6pfC+8JSXGn36IJjBeW3mxsm7YVBlAI+Ygg46gg8YPvlFAHP+OPDf8Awl3gvVNDEnlyXUX7 py2AJFIdNxwfl3KucDOM45rwDwHpHxW8C65qVno/hjzJJokNwl4q+Q23lSsodVLDeRhXPVsjK8fT 9FAGP4b0/VLDTpG1rUft2pXUpnnKDEMJIAEUKnkRqFAGeScseWNeCeOfgBq9tqkl14QjjvNPlcFb N5wksGckjc5AZBgYO7d8wBBwWP0nRQB80eHr348T2ZtbBNVEdv1OpQQo53En79wAz9+5xwOBivV/ h78Nn8JXl1resavPq/iG9iWKa6kdiETC5QFiS/Kj5mxwqgBec+gUUAeX/FWLxf4n8OXHhzQfCk7w zygXF3c3VugKI4ZTGBLn5ioOWAwOMZPy8v8ACTw543+Ht5qK3/g6e5tdQ8vfJBqFtvi8sPjCmQBs lx/EMYzz0r3iigCOCRpreKV4ZIHdAzRSFSyEj7p2kjI6cEj0Jrw/4v8Ahvxj8QbjSV0vwldwQWKS lnury1VnZyvAVZSAAEHOecngY590ooA83+FFv4n8PeHLLw1rnhae0jtt+y+S8glRtzvIdyh9y9Qo wGznnArP+L1h4v8AGGhpoOg+G74Qi78y4uJL23jSZEyFAUSkspJDfNtxtXjPT1iigDxv4O6R418E 29xous+FpP7PubgTpdQ3duzROwVG3r5nKbVB+XkYPDZ41PjX4A1Hxtoenz6NH52pafK22Ayqgkjk wHwW43AqhGSBjd1OBXqFFAHzh4Ah+MWhWd74c0vSPKtVl8sTammEs2YsGeFiwDrnLHaJF4yB83zX /iV8J/EupeHrHWnvJ9e8Sx7hqGwKqmLZkLCmVAVCpAVV3O0hbA6V9AUUAeR/CCL4hjS9Ns9ct49O 0OwRhH9pjY3d0PnVYyGbMaISCDtU4RAMqSaPjV8Mb7xklnrGhRxy6pap5EkDPtM8RbK7SxCgqSx5 xkMeeAD65RQB88eC5/jVp9nP4ctNMxb2221judUjCizGWG6JyR5qr14EgAVQBggGT4gfCnxXrtx4 eJuJNZ165SX+09QkYR29ugMQRFGAFRdznCruc72x2H0HRQB538MfB/i/wdpcem6vrmmz6fE7CKzg tmcop3NlZfkIJdySGV+FGCM8U/jX4A1Hxtoenz6NH52pafK22AyqgkjkwHwW43AqhGSBjd1OBXqF FAHz/wDDNfi1baHB4ftdKg03SVlkjF/qdqVmtA3zMUjLKXwWJXKkFjgnA49k1TwrY614ObwzqU13 dWj26QPPJLmdimCshfu+5Q2SME9QRxW5RQB8oaz8H/HvgzUXv9GWe8jgyYr3SpCswDEpjYD5gYg8 hdwAY8kA11mlWvxy8Wpb29/qF3pWmXT4luniht5YVVuTtQLKD8uAOM5GSFJNfQdFAHN+BvBlj4F8 NR6PYySTEuZrid+DNKQAWxnCjCgADoAMknJPm+s6B8QdI+Neo+LfDmhR31hcJFC6vcwoJ4hFGHX5 m3KdycHHVRwRkH2yigDi5PG+sRPDYt4C8QHVJbfzFRTA1qH2k7WuBJtUZUjJAOMHbyAef+G/wzvt H8S6j4y8TG0OtX7ySpa243JamU73O45O/JKfKSAN3zNu49UooAKKKKAOH+Idz4nvfD2p6J4e8MT3 k15EbY3c1xBHCI3TDsoMgcsAcAFQM88gYbyz4YeCvHvgHxU+qXHhCS7gntzayLHqFsrIrOjFxl8M QE+7kZz1FfRdFAFexuJbuzjnmsp7KRs5gnKF0wSOSjMvPXgnr68Vx/xN+Hdv8QdDjiE32fU7Pc9l MxOwFsbkcD+Ftq8gZGARnlT3FFAHyZD4R+Knw41Qy6TZakpkdl8zTV+0xTBcgM6KGGMOSvmKDySA CDju7PwJ8T/Hkps/Hutz6fpEW0tDCYSbrLAldsJ28bchnztOMKcnHvFFAFewsbfTNOtrCzj8u1tY khhTcTtRQAoyeTgAda+SPjb/AMle13/t3/8ASeOvr+vkD42/8le13/t3/wDSeOgD2+Hxb8RfDs9v pWveDf7cmkykOpaRLiORgi7fMBX93lzhnbYoBYhSF5p3ng3xX8SvEFrc+NLePRvDdk+6PRYbsSyT uAPmd04wcsM5BABAALFz65RQBHBBDa28VvbxRwwRIEjjjUKqKBgAAcAAcYrzf4rfClfHyQahp9xH ba1boIVadm8qWLcTtbAJUgsxBA7kEHIK+mUUAfKGjaH8X/AuopYaRYarbNdYOyFEuLbLEDcx+aJG +UZY4IA5IBrv9J+G3jbxveRXXxN1edbG1lUppcbx4uAAx3HyiETlsbgC5G4ZX5TXuFFAFPUr2ext 1lt9Mu9QcuFMVq0SsBg/MfMdBjjHXPI464+aPGHw3+JPjDxZf69P4Wjt3u3UiFL6AhFVQijJk5O1 Rk8ZOeB0r6jooAw9A1jWNSRV1jwxd6PPsLMWuoJ4s7sBVZH3Ekc8oBwRnpncoooA+WJvh545+H3x Ftr3w5pM97Gl2w0+4VRMjxn5cTEY2ZV9rFtg+8VOBmvd/B1v4xvJf7Z8YSwWdx5TQQ6TYn9zGCwJ lkO5t0h2gDDYVc92bHYUUAeR/E74Kr4y1STXdHvo7TVJEVZorjcYpyu1Q24ZKEKMcAg4Xgck6mh+ M/GWm2dlY+LvBGqzX8m2JLvS/JnSZs4LSgOFh6ryTtPzEbQMD0iigDyO88G+K/iV4gtbnxpbx6N4 bsn3R6LDdiWSdwB8zunGDlhnIIAIABYufVNiafp3l2dnmO3ixDa24VMhR8qICQo6ADJAHqBViigD wP4s+G/HvxC1SxFj4Skt9PsEcQme8tvNkZ9u8sBKQB8oAAz0JJ5wOw+FyeKfDPhix8Oaz4Qu4ktn KpeQ3ttIpDyOzM6+YCoXcPu7ieeOx9MooAr31xLaWck8NlPeyLjEEBQO+SBwXZV468kdPXivnz4n +CvHvj7xUmqW/hCS0ggtxaxrJqFszOqu7Bzh8KSH+7k4x1NfRdFAHD/Dy58T2Xh7TNE8Q+GJ7Oaz iFsLuG4gkhMaJhGYCQuGIGCApGeeAcLl/Fb4Ur4+SDUNPuI7bWrdBCrTs3lSxbidrYBKkFmIIHcg g5BX0yigD5Q0bQ/i/wCBdRSw0iw1W2a6wdkKJcW2WIG5j80SN8oyxwQByQDXf6T8NvG3je8iuvib q862NrKpTS43jxcABjuPlEInLY3AFyNwyvymvcKKACvB/hfpXxM+H/nWFz4S+26RcyiV0S+tlkhc 7Qzqd/zfKPunGSBgrzn3iigDzfxF4g8ReK9D1Xw/oXg7Vba6uM2Nxc6wscEEMcm5HkUhyZcDONmR yDzwG1Phn4Bh8AeGjZtLHcahcuJby4RAAWxgIpxkovOM9yxwN2B2lFABRRRQB5n8VvhSvj5INQ0+ 4jttat0EKtOzeVLFuJ2tgEqQWYggdyCDkFfOPC9x8YPh4ieHrXw1JeQTurwJPEbiKAsxBxLG4VAT yQzYH3uMkn6TooA8X8U+DvHPjrwJd3PiKCAa1HsGnaNYyiOGNvNXfNIxch5Cm4AbiqqTj5mOI/hx 8LvHnhm3dZPFkekWlw8U0tlawpdMTj5wTIuyN8YG5d4OBnIUZ9sooA8v+NfgDUfG2h6fPo0fnalp 8rbYDKqCSOTAfBbjcCqEZIGN3U4FcB4Ah+MWhWd74c0vSPKtVl8sTammEs2YsGeFiwDrnLHaJF4y B83zfR9FAHz/APEr4T+JdS8PWOtPeT694lj3DUNgVVMWzIWFMqAqFSAqrudpC2B0rpPhBF8Qxpem 2euW8enaHYIwj+0xsbu6HzqsZDNmNEJBB2qcIgGVJNeuUUAeF/F/w34x+INxpK6X4Su4ILFJSz3V 5aqzs5XgKspAACDnPOTwMc9Z8KLfxP4e8OWXhrXPC09pHbb9l8l5BKjbneQ7lD7l6hRgNnPOBXpF FAHk/wAXrDxf4w0NNB0Hw3fCEXfmXFxJe28aTImQoCiUllJIb5tuNq8Z6U/g7pHjXwTb3Gi6z4Wk /s+5uBOl1Dd27NE7BUbevmcptUH5eRg8Nnj2SigDyf4y+FvFWvaj4Xv/AArZ+fdaXLNNv82JfKfM RQ4kIB5Q+vTmtyDxv4k03Rop/EngLWVu94jYaQYbxWO3O7asm9ASG4IIHHzEmu8ooA8fuvh7rPj7 4lQeJvFFhBpekWG2K309pEnmuUjbevm4LRhWLtuGTwNuOd9ewUUUAFZet6lqGnW+7TtCu9WnZHKp DNDEqsB8odpHUgEnqobGDx0zqUUAfLk/w3+JLeOpfFNv4WjjnOpnUY4JL6B1VvN8wKSJASM8ds+1 fR+ialqGo2+7UdCu9JnVELJNNDKrMR8wRo3YkAjqwXORx1xqUUAfMnxJ+FfivT/GupeIfD9ld3dn LcC+jmtZA08UrtlgEXD5DkkFQcLgk5Bx3ehw/F/xZFZRa3dQeHNMESi5mgjRby6Rl5IHzeVJx1xH tL5wcbR7BRQB8ua18OPF/gn4mw33hTR7u5tBeiXTpIQzIFJUmOQhyVQbjGS5XcAxzjOPofwoPEZ0 YT+KZLQalcP5ptrRMR2q7VAjBySxyCxOTyxAJABrcooAKKKKAPn/AFr4W+OfD/xFufGXhVrHUJJN QkuYoWcI4WXcXV1fC7fmZMhtxyCMHp3EPj7xtLeXNh/wrC+W+h2sM6jGIGQj5iJyoQsCUwq5zls4 24PpFFAHl8Pw71Txf4ot/Evj2aB4bfJstAgPmQ24IUgSPwHbOdwAwxVeSvyV6hRRQB8oaz8MfHPg TxQ+p+HrG+nt7a7P2C8siJ5CpBK70Ubvu/K2V2k5HIIz63pui/EjxlcMnjWe00bQWQxXOl6cR5l2 AQcGQFiiNna2HBIUjaN26vVKKAPljRfBXxF+H/xFDaDos97IvmpDM64trmE7gDIyuFXO0MEZwQQv fGfZ/G3h7xLrnwhvtHlaDUdfuPLdhbhYY8/aFkKJvI+VFG0Fjkhcnk16BRQB5X4G1Xx74Z8NR6b4 m8G3d1b6fblYbnT7m2klMaAbUMXmDcQoIypycKNpOSafjTS/Evxcs9M0200SfQtESX7VPeawFScu paPasKsWGFZm+bG7jlRgt7BRQBn6Ho1n4e0Oy0iwTZa2kSxJkAFsdWbAALE5JOOSSa8T+J/wOvtS 1m617wr5cr3Tma5sZZdrGVmG5o2bjByWIYjGDgnIUe+UUAfMHhsfG/TPM0LSoNVjjtcgC7hiMahc JtjlmG0qMDCq2MZIGMmvT/Afw21S01yHxh4y1efUfEJiYRQl8pZl925QQcNw5AVQEXc2AeGHqFFA BRRRQBz/AI48N/8ACXeC9U0MSeXJdRfunLYAkUh03HB+Xcq5wM4zjmvnjwj4d+K3gDxQqaT4fnaa 6iPmQybZLSVQGx5jqwRWBBIywbnHRsH6nooA8b1j4eeNPGfg7UpfFuqxy6psM+laXaBVgtpOG2sR tDuQDECzMEDMctnjlPhbovxR0G81LQ7HTf7Ns55QtzeajEzJasAwMkC7gsjHHUBlO1MkLzX0fRQA UUUUAc3458GWPjrw1Jo99JJCQ4mt505MMoBAbGcMMMQQeoJwQcEeCaZ4V+KPwl1iW+0nTP7Rt5cQ yLaBrmG4ypIJjXEg2nPzELg5GcNhvp+igDyvRIPiH47t/svjKytND0GREkmis9yXF6hH+pb94xjQ 8b87Wx8vdscJ4A+DvxC0jWE1VNUg8OSLvidty3MjIVz/AKsZjdSccMwwRnGQM/R9FAGXDpDTeGjo +tXkmqma3aC7ndFhM4YENxHgKMEgY5AxyTyfG7H4W+Lvhp4tj1zwa0GuWb5hms53SGYwsxJUs3y8 bU+cEHd/BtyD7xRQB5/N458VXunXEWjfD7VRq8GI5V1CSKC2RyGGUkLjz1DD+EDI5yuRmPwF8Npt C1S68TeJ7yPVvFN27FrkZKQKeMR5A5K8ZwMD5VAGd3olFAGXrepahp1vu07QrvVp2RyqQzQxKrAf KHaR1IBJ6qGxg8dM/Ongn4c/EPwd4vsdf/4RP7Z9l8z9x/aNvHu3Rsn3txxjdnp2r6fooAy5NVvE 0uG7Xw/qUk7vtayWS382Mc/MxMoTHA6MT8w464+dL74ffE+78fSeLR4czdf2gL6KKfUIZQm1wyRk +YCVUBV4xwOMV9P0UAY9nq2pS6Gb268OX1vfLtDaes9u7seMlH8wIVBJ5YqTtPHQH588ffDfx74v 8b6nrtv4Wkt4Ll0Eccl9bFtqIqAnEmASFzjnGcZOM19N0UAYei6xrF7pc0+q+GLvTbyJC32YXUEw mPzYWN1cDOAPvhBlupAJrxj4reEPHvj/AMSwXdj4Zu4NPtbcRQxXF/bZLElnfaJCFJyF4JyEUk9h 9B0UAcX8OJfElr4asdG8R+HpNPnsLdYEuEuIZIpUQKqcK5YPjrxj5ScjIUY/xW+FK+Pkg1DT7iO2 1q3QQq07N5UsW4na2ASpBZiCB3IIOQV9MooA+UNG0P4v+BdRSw0iw1W2a6wdkKJcW2WIG5j80SN8 oyxwQByQDXf6T8NvG3je8iuvibq862NrKpTS43jxcABjuPlEInLY3AFyNwyvymvcKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e /wDIlah/2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDI lah/2z/9GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPA X/I66f8A9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2 /wCvxf8A0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8v4qPm8T/ AMjaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHrivAX/I66f/ ANtP/RbUp/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUc4ma3lW3kjjnKERvIhdVb HBKggkZ7ZGfUVJRQB5X44+FGteP7izl1bxZaRJZoywxWuklVBYjcx3TEknao64+UYA5zueC/BviD wZo9ro0XiSxvNNglLhJtKZZAjNuZFdZsDJLEEq2C3cACu4ooAKKKKACiiigAooooAKKKKACub8Z+ BtF8daWljrEUgMT74biAhZYTxnaSCMEDBBBB4PUAjpKKAPA4P2bJrW4iuLfxpJDPE4eOSPTyrIwO QQRLkEHnNan/AAz/AP2pqP2rxR401XV9sXlodu2Recj55Gk+XlvlwOTnPr7RRQBl6B4c0jwtpa6b otjHaWgcvsUlizHqWZiSx6DJJ4AHQCtSiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigDH1mz8QXe9NI1ix0+N4im6bT2uJEc5+dT5qrxxgFTyOcg4ryvw58B L7wt4gs9a03xhGLu1csnmaVuVgQVZSPN6FSRxg88EHmvbKKAKemx6lFbsuqXdpcz7yVe1tmgULgc FWkck5zznuOOOblFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBT1KPUpbdV0u7tLaf eCz3Vs06lcHgKsiEHOOc9jxzx4/4j+Al94p8QXmtal4wjN3dOGfy9K2qoACqoHm9AoA5yeOSTzXt lFAGPo1n4gtNiavrFjqEaRBN0OntbyO4x87HzWXnnICjk8YAxWxRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF/wAj rp//AG0/9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2eJl3 /Iuq/wDb35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogooorY9 sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooA4n4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDkZbn/ AK82/wDQ0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ACLV t/1+L/6A9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA 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 FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X/wBAeuc+F/8AyMtz /wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T/wAjaHy/JnR/FD/k Wrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtSn/EX yM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A9GLUz+FnNjP92qej /I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6P49/5ErUP+2f/oxa xp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7XVUPhOnIf92l6/ogo oorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v/oD1znwv/wCRluf+ vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2rtfih/yLVt/1+L/6 A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/wDIlah/2z/9GLXSVzfj3/kS tQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLXnHgL/AJHXT/8A tp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPAX/I66f8A9tP/AEW1e114p4C/ 5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A 15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8v4qPm8T/AMjaHy/JnR/FD/kWrb/r8X/0 B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbUp/xF8jPHf8jSH/bp 7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUV5f8Uvil/wAIvt8P+H1+2eJrraiJGnmfZt33SV53SHI2p7gnjAa58INJ 8X6d4amuPFup3dxLeOstva3btJLbLjnczHILcHZ/DjsWYAA9Eorg/Ht/4+02y1S/0E+H4NLtLKSY y3LSvdZVCzMqhdgI7A7hkZJ5wPO/gp448S+LviHeDXNXnu449KcrDhY4wRLHhtiALu+YjdjODjOK APoCiiigAooooAKKKKACiiigAooooAKK5/xxda7Y+C9UufDVv5+rxxZt0CBz1G4qp+8wXcQOckAY PQ+V/Aufx1c69qb+IJdZl0kW7Ju1JnYC4WTbhPM5yMShgvAIAbnbQB7pRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXlfxy1Lxfp/hq0 PhpbuO0Z3bULqzDebCqAMvzKcohw5ZgP4QCQDhgD1SivP/g7/wAJT/wgx/4Sz7d9r+1yeR9vz53k 4XG7d8339+N3OMY+XFbniU+NvtEC+Fo/D4gCEzPqjzFi2eAqxjAAHck5z0GOQDpKK+aPhn8RfF3i r4paDZ6xrc89qPtGYUVIkf8AcOfmVAA2CoI3Zx2xX0vQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRXlfxy1Lxfp/hq0PhpbuO0Z3bULqzDebCqAMvzKcohw5ZgP 4QCQDhgD1SivP/g7/wAJT/wgx/4Sz7d9r+1yeR9vz53k4XG7d8339+N3OMY+XFegUAFFFFABRRRQ AUUV4f8AHW88cW+raSPD41WHTBFgz6a8ql53kC7H2H/rmFyBkuwBPQAHuFFc34Ak1qXwHozeIYZI dUFuFmWUkuQCQjPkk7yoUtnnJOQOg6SgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK +fPjJqXxGHjeOz0hdZg0vYq2J0sSD7QxTc+4xnLOCj/KeipkDkk+56F/aP8Awj2mf2v/AMhP7JF9 s+7/AK7YN/3fl+9npx6UAaFFeZ/GXTvG97o1jL4OubtEt3kkvIrKcxTuNo2lcYLAYcbQcksvynHF f4TfFmHxlbpo+sPHD4giTg4CreKByyjoHA5ZR/vDjIUA9UooooAKKKKACiiigAooooAKKKKACiii gAooooAKKK8T+OmpeOra90y38PLqUOksilrjTQ4d7hn2BHZDkD5kCjgMXP3iBtAPbKK5f4df27/w r/R/+Ek8/wDtbyj5v2jHmbdzbN/+1s25z82fvc5rqKACiiigAooooAKKKKACiiigAooooAKK5vxL oniTU7iCXQfF0miIqFZYjp8Nyshzww3YKnqDyQeOBzn5sv8A4v8AxM0zUbmwvNd8u6tZXhmT7JbH a6khhkJg4IPSgD63orx//hHvjn/0Oeh/9+V/+R6j1LWfjZ4WsFEmlaN4gSNAz3drE7yMWcgKY1ZC SMj7qYxgk8E0AeyUV5H4U/aA8Oa5cC11m3k0Sd32xvJJ5sDZKgZcAFTknqoUBclu1euUAFFFFABR RRQAUVzfi6TxlDbxS+EIdGndEkaeLUTIGcgDYse0gZPzA7iB05HNeR/BTxx4l8XfEO8GuavPdxx6 U5WHCxxgiWPDbEAXd8xG7GcHGcUAfQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFcP8RPibpfw+s4hLH9t1OfBhsUk2EpnBdmwdq8EDg5PAHDEAHcUV43oB+KnxE0tdTudbtPC+ l3VuUijtbPdLKD0kAc7kBDHDBwflBC8hjYj+G3xD0ZJrnR/idd3V4U2LFqMLPEQWGfvvIFOBwQpP bgE0AeuUV4PpPxi8S+ENci8P/EnS9jHaTfRqodEbcd5VMpIucD5MY2twzDFe6QTw3VvFcW8sc0Eq B45I2DK6kZBBHBBHOaAJKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACub8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5H XT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv +RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/ 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 dRwrgDgAcCgD3Cise/mt/CPg25ms7Xda6Rp7vDb+YRlIoyVTccnooGTn8a8Q+F/lfFnxbq+p+NPP 1KSy8uayszv+xwbm+YBR8o+4gCsfnG4kOQSAD6Horxf4yeAtC0vwhJ4n0Oyg0jU9MlgdZbFDFuXz NoACEKrBnDb8FvkA+nSfBXxRfeKfh9HNqUkk13ZXD2b3Ej7mmChWVjwOdrheck7ck5NAHolFeD/G iTx74e0m21T/AITH/QZ7tYjb6fbmyMT+WSuGDs7KQrkhn4OMA/w4nwp0XWvGHw51Tw3p2pyaPYNe vJe3n2YyGcPHGqwodyjGEcyc5wYxyGYUAfSdFeB/Dr4T+K/BvxUW8keM6LbpKrXaTBRdIyYVfLBL Z3FWIYYBQ4JwpPvlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/ AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yO un/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvfkeceAv8AkddP/wC2n/otq9rrxTwF /wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/wAi1bf9fi/+gPXOfC//AJGW5/68 2/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/ AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1xXgL/kddP/7af+i2pT/iL5GeO/5G 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 rhxJ4D+E1u9nZQx2t3fOrJY2xe4u7pyCEVVJLkEqVXJChieQSc6HxJ8UN4Q8B6lqsEka3mwQ2m51 B81ztBUEEMVBL7cHIQ9smvL/ANnjRbHUX1jxRfTx3mtLceUvnHfLCGXc0pJJOZCxG4jPyNgnLCgD Y+KuqeI9Z+GGr3T6PHpGi7IG2X7br2fMsBX5EO2EAls7mZjtxtXOak/Zx/5J5qH/AGFZP/RUVdB8 bf8AkkOu/wDbv/6UR1z/AOzj/wAk81D/ALCsn/oqKgA/aO/5J5p//YVj/wDRUtdB8Ev+SQ6F/wBv H/pRJXP/ALR3/JPNP/7Csf8A6KlroPgl/wAkh0L/ALeP/SiSgDvJ4Ibq3lt7iKOaCVCkkcihldSM EEHggjjFcOJPAfwmt3s7KGO1u751ZLG2L3F3dOQQiqpJcglSq5IUMTyCTnQ+JPihvCHgPUtVgkjW 82CG03OoPmudoKgghioJfbg5CHtk15f+zxotjqL6x4ovp47zWluPKXzjvlhDLuaUkknMhYjcRn5G wTlhQBsfFXVPEes/DDV7p9Hj0jRdkDbL9t17PmWAr8iHbCAS2dzMx242rnNSfs4/8k81D/sKyf8A oqKug+Nv/JIdd/7d/wD0ojrn/wBnH/knmof9hWT/ANFRUAH7R3/JPNP/AOwrH/6Klo/Zx/5J5qH/ AGFZP/RUVH7R3/JPNP8A+wrH/wCipaP2cf8Aknmof9hWT/0VFQB7BRRUc08NsgeeWOJC6oGdgoLM wVRz3LEADuSBQBJRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/wCjFrpK5vx7/wAi VqH/AGz/APRi1M/hZzYz/dqno/yPOPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWvOPAX/I66f8A 9tP/AEW1ej+Pf+RK1D/tn/6MWsaf8NniZd/yLqv/AG9+R5x4C/5HXT/+2n/otq9rrxTwF/yOun/9 tP8A0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSuj+KH/ ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSueX8VHzeJ/5G0Pl+TOj+KH/ACLVt/1+L/6A9cV4C/5H XT/+2n/otq7X4of8i1bf9fi/+gPXFeAv+R10/wD7af8AotqU/wCIvkZ47/kaQ/7dPa6KKK6T6gKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvJ/jL4W8 Va9qPhe/8K2fn3WlyzTb/NiXynzEUOJCAeUPr05r1iigDg4PG/iTTdGin8SeAtZW73iNhpBhvFY7 c7tqyb0BIbgggcfMSa5u6+Hus+PviVB4m8UWEGl6RYbYrfT2kSea5SNt6+bgtGFYu24ZPA245317 BRQBXv7G31PTrmwvI/MtbqJ4Zk3EbkYEMMjkZBPSvmTxR8DvFfhvVHv/AA15mo2cLtPbywShLqEJ hhleCXznHl5JK5wpIFfUdFAHzhozfHjW9OSzilvrW0OLRpr6OG3kRcAFyzqJjgHO9ctkHBLCvX/A HgC38DWd6Tfz6lqeoS+be302QZSCxX5STjG5iSSSSxJPQDsKKAOL8e3XiG70HVNE0Xwpd6g95byW v2lry3hiCyRkF13PvJUkDaVXODz0z5J8NfBPxD8BeLV1WTwp9ptZYjbXKLe24cRsysWT95jcCoOD weRxnI+j6KAM8xJr2hzW2padPbw3kTwz2k7rv2NlSCY3Ycj+63fsa+bPFHwO8V+G9Ue/8NeZqNnC 7T28sEoS6hCYYZXgl85x5eSSucKSBX1HRQB84aM3x41vTks4pb61tDi0aa+jht5EXABcs6iY4Bzv XLZBwSwr1/wB4At/A1nek38+panqEvm3t9NkGUgsV+Uk4xuYkkkksST0A7CigDm/HPgyx8deGpNH vpJISHE1vOnJhlAIDYzhhhiCD1BOCDgj50b4Z/E7wHqMmp6Rbzu1vsH2nSpxJ5oJU7fL4d13YypT HykkEc19X0UAeD6T4Z+LfjmKK28Xa1PpehSbXnRBFFPPGytlAsa5GQcFZMAbs7WK4r2zStKsdD0u 30zTLaO2s7dNkUSdFH8ySckk8kkk5Jq5RQB4n8dfhzq/iW4svEGh20l5Pb27QXVurjd5alnVkXGW OWcEAknK4B5o8BxfFTVvD9hoGo28eh6Glv5B1Fo/Lv1iQ7QiLu+Ryo2h2QYUbslsZ9sooA4vx7de IbvQdU0TRfCl3qD3lvJa/aWvLeGILJGQXXc+8lSQNpVc4PPTPknw18E/EPwF4tXVZPCn2m1liNtc ot7bhxGzKxZP3mNwKg4PB5HGcj6PooAr2NxLd2cc81lPZSNnME5QumCRyUZl568E9fXivD9T+DWu +EPFEXij4fXEE7W8pkj067wGRWAUoHY4dSGfqVYLjBZua94ooA4OPx14klSazX4dayNaiTe0LTwr aEbh926J2sdrA4Ck5yOxIy/Cfw71S88UN408ezQXmtfKbKyiO6GxGMgY6blJIAGQDlssx3D1CigC vfXEtpZyTw2U97IuMQQFA75IHBdlXjryR09eK+bPH3w38e+L/G+p67b+FpLeC5dBHHJfWxbaiKgJ xJgEhc45xnGTjNfTdFAGHousaxe6XNPqvhi7028iQt9mF1BMJj82FjdXAzgD74QZbqQCa8Y+K3hD x74/8SwXdj4Zu4NPtbcRQxXF/bZLElnfaJCFJyF4JyEUk9h9B0UAcX8OJfElr4asdG8R+HpNPnsL dYEuEuIZIpUQKqcK5YPjrxj5ScjIUdpRRQAV5f8AGvwBqPjbQ9Pn0aPztS0+VtsBlVBJHJgPgtxu BVCMkDG7qcCvUKKAPn/4Zr8WrbQ4PD9rpUGm6SsskYv9TtSs1oG+ZikZZS+CxK5UgscE4HHqnirw FY+LPBUXhy+u7tjboht72V98olRSokfoHJBO4HGdxxg4I6yigD5Mm+HPxL+H2qDUNKtrt3R1RbrS HMwk6PgxgbymVwQ6bSR3yM9nY+HPjJ46ijsPEurz6To08RkklKQo7AqQI2ji2uchuUfAHOeQAfoC igDL8OaBY+FvD9noumrILS1QqnmNuZiSWZifUsSeMDngAcV4/wDF/wAN+MfiDcaSul+EruCCxSUs 91eWqs7OV4CrKQAAg5zzk8DHPulFAHm/wot/E/h7w5ZeGtc8LT2kdtv2XyXkEqNud5DuUPuXqFGA 2c84FZ/xesPF/jDQ00HQfDd8IRd+ZcXEl7bxpMiZCgKJSWUkhvm242rxnp6xRQB438HdI8a+Cbe4 0XWfC0n9n3NwJ0uobu3ZonYKjb18zlNqg/LyMHhs8dx8RvBi+OvB1xpCyRxXaus9pLJu2pKucZwe hUsvQ43ZwSBXWUUAfMHhHS/i/wCANYXTNK0Sd47rMz20wSW0Y7WGWkDbY247OpOEByMCuv8AFfgj xz4l8CX914muvt+rtLC2l6PYALDatJLGGLkAb2VS65YsqLuO45yPcKKAPD/hl8L/AB74OvJLoa1p Vhb3cSvcWrQG6LOAdqOBsxt3scpJ1A+8K9M8c+DLHx14ak0e+kkhIcTW86cmGUAgNjOGGGIIPUE4 IOCOkooA+TJvhz8S/h9qg1DSra7d0dUW60hzMJOj4MYG8plcEOm0kd8jPZ2Phz4yeOoo7DxLq8+k 6NPEZJJSkKOwKkCNo4trnIblHwBznkAH6AooAy/DmgWPhbw/Z6LpqyC0tUKp5jbmYklmYn1LEnjA 54AHFalFFABXjfxZ07xj480a10jS/Bl3DBFcJdNcXV/aqxYK67AiyMMYcHdu9RjvXslFAHi/wl0z xv4D0690nVvCE89jNKbmOW0vLYyLIQqlSGlAKkKDkHIIPXPy+ma/rGsaajLo/hi71ifYGUrdQQRZ 3YKszvuBA54QjkDPXG5RQB8ueD/hv8SfB/iyw16DwtHcPaOxML30ADqylGGRJwdrHB5wccHpX0vp t7PfW7S3GmXenuHKiK6aJmIwPmHlu4xzjrng8dM3KKACiiigAri/ixpum6l8MtcGptHGlvbtcQSM VBWZBmMKWHBZsJxyQ5A60ar8WfA+i6pcabf69Gl3bPslRIJZArdxuRSMjoRng5B5Brj/AB1r1j8S /EGl/D/w/dyXVu9wl3qt9ZzZhSBASU3KGDE5Ugn5Q/ljk52gG58EfDCeH/h1aXUkHl32q/6XMx2k lD/qgCP4dmGAJOC7dM4HpFRwQQ2tvFb28UcMESBI441CqigYAAHAAHGKkoAKKKKAPnz4z/CvX9W8 WTeI9BspL+C4tw91Gki743jUL8qHBYFVXAXcSQ3TIFafhWX41a3o+nWErQaNaxY3apfwBruRFbaV aNySWwcgsi7tgJfnLe4UUAfMHxJ+FXiDQPFCar4ZtdV1C1k8qUXUJaa5S5AO5mKkuWLJ5hfAAL4G MCvd/Bb+MbmznvfGCWNrcS7Uh0+zXIhClsuz7myzZHAJACr3LAdRRQAUUUUAfPHxt+GOu33iiXxN oljPqFvcxR/ao4SHkjkUCMbYwNxUqE6biCHJwMV2/g5/id4j+w/8JUkGjabb+TcM9uoS7vivIRwG IjUkAuNqk/dAALY9QooA8X+LWmeN/HmnWWk6T4QngsYZRcyS3d5bCRpAGUKAspAUBick5JI6Y+aT 4Tad4x8B6NdaRqngy7mgluHuluLW/tWYMVRdhRpFGMITu3egx3r2SigArzf4ofCe3+IHk39tefYt XtojEjuC0cyDcVRhn5fmP3hnAJyG4x6RRQB5P4Y13xt4H0OHSPE/hC+1K0sv9Ftb7RfLuHkReIwY QQwXaD85x/CCu4kk8SeH/G3xL1GPTNTtP+Ea8Kwyhp4/tUctzegEkH5NyrjC/KThS2795tAHrFFA FPStKsdD0u30zTLaO2s7dNkUSdFH8ySckk8kkk5Jryf4s6d4x8eaNa6Rpfgy7hgiuEumuLq/tVYs FddgRZGGMODu3eox3r2SigDxf4S6Z438B6de6Tq3hCeexmlNzHLaXlsZFkIVSpDSgFSFByDkEHrn 5e4+KWiaj4j+HGraTpNv9ovp/J8uLeqbtsyMeWIA4BPJrsKKAPK/A2q+PfDPhqPTfE3g27urfT7c rDc6fc20kpjQDahi8wbiFBGVOThRtJyTT8aaX4l+Llnpmm2miT6FoiS/ap7zWAqTl1LR7VhViwwr M3zY3ccqMFvYKKAM/Q9Gs/D2h2WkWCbLW0iWJMgAtjqzYABYnJJxySTWhRRQAV8//tNf8yt/29/+ 0a9ks/GPhy/8QXWg2usWkmqWz7JLbfhi2CSFzw5AU7guduOcV43+01/zK3/b3/7RoA9A+CX/ACSH Qv8At4/9KJK3PHPgyx8deGpNHvpJISHE1vOnJhlAIDYzhhhiCD1BOCDgiTwNon/COeBtF0lrf7PN BaJ58W/ftmYbpOcnPzljwcenGK6CgDxPwhoXjz4T3F9YR6RH4i8NyObkyWUqJPGc4LKjYZnKKP3Y yCdoVs5z0Gu61488XaWlj4U8O3ehQXiFZNU1eZIJYANwZRCpZ1JwAHxn5sgDhx6ZRQBy/gXwLpfg PQxYWA824kw11duuHuHHc+ijJwvbPckk6Hirw9b+K/C+o6HdNsju4igfBPluDlHwCM7WCnGecYPF bFFAHyxo3hX4rfDbxCn9j6ZPJ9rlELeQFntrhVcYMmP9WpzwzbGAZsEfNXoepeGvH/irwrrl14zu I4oBZSy2fh/TBndcIjBN7LlmG4K4QOwLFc427T7JRQB8+fDn4R+P/DWs2+sJqWm6OZEaO5ikX7TJ 5e4NsKj5SGKLysgIB6g8V6/r+q+JNN0todH8Pyaxqn2cFZ1khgtfN6HcHl3gD720Z4IG7qR0lFAH zB4J+HPxD8HeL7HX/wDhE/tn2XzP3H9o28e7dGyfe3HGN2enavpPTb2e+t2luNMu9PcOVEV00TMR gfMPLdxjnHXPB46ZuUUAeT/GXwt4q17UfC9/4Vs/PutLlmm3+bEvlPmIocSEA8ofXpzW5B438Sab o0U/iTwFrK3e8RsNIMN4rHbndtWTegJDcEEDj5iTXeUUAeP3Xw91nx98SoPE3iiwg0vSLDbFb6e0 iTzXKRtvXzcFowrF23DJ4G3HO+vYKKKACuf8ceG/+Eu8F6poYk8uS6i/dOWwBIpDpuOD8u5VzgZx nHNdBRQB8seEfDvxW8AeKFTSfD87TXUR8yGTbJaSqA2PMdWCKwIJGWDc46Ng+h6x8PPGnjPwdqUv i3VY5dU2GfStLtAqwW0nDbWI2h3IBiBZmCBmOWzx7JRQB84fC3RfijoN5qWh2Om/2bZzyhbm81GJ mS1YBgZIF3BZGOOoDKdqZIXmvo+iigArzv4rW3iHxF4T1Dw5ovhq7unuXiH2trm3jiCqyyEqGk3k 5ULgqvc54GfRKKAPB/hJ4c8b/D281Fb/AMHT3NrqHl75INQtt8Xlh8YUyANkuP4hjGeeleoeNrzX hoeoaf4f0O+vL65tGjguobqGBIXbK53NIHDKPmGF54GRyR1FFAHzh8NfBPxD8BeLV1WTwp9ptZYj bXKLe24cRsysWT95jcCoODweRxnI+i4JGmt4pXhkgd0DNFIVLISPunaSMjpwSPQmpKKAPB9T+DWu +EPFEXij4fXEE7W8pkj067wGRWAUoHY4dSGfqVYLjBZua7yPx14klSazX4dayNaiTe0LTwraEbh9 26J2sdrA4Ck5yOxI7yigDy/wn8O9UvPFDeNPHs0F5rXymysojuhsRjIGOm5SSABkA5bLMdw9Qooo A+ZPiN8OPFehfEG48S+HdPu723mvVvrea2QTyRTkmQhowM4DgkHaVwVBJJIr1vwyfiFqU41Xxdbw afHp/mNBpWlsu+9coQDIzSMu0ZO1dy5Y5bAUZ9AooA8D+LPhvx78QtUsRY+EpLfT7BHEJnvLbzZG fbvLASkAfKAAM9CSecDsPhcninwz4YsfDms+ELuJLZyqXkN7bSKQ8jszOvmAqF3D7u4nnjsfTKKA CvA/if8AA6+1LWbrXvCvlyvdOZrmxll2sZWYbmjZuMHJYhiMYOCchR75RQB8weGx8b9M8zQtKg1W OO1yALuGIxqFwm2OWYbSowMKrYxkgYya9P8AAfw21S01yHxh4y1efUfEJiYRQl8pZl925QQcNw5A VQEXc2AeGHqFFABRRRQBx/xS0TUfEfw41bSdJt/tF9P5Plxb1TdtmRjyxAHAJ5Nc34G1Xx74Z8NR 6b4m8G3d1b6fblYbnT7m2klMaAbUMXmDcQoIypycKNpOSfVKKAPH/Gml+Jfi5Z6Zptpok+haIkv2 qe81gKk5dS0e1YVYsMKzN82N3HKjBb0iw06Dwn4XttO0nT57qGxiSKOCDylkl5ALEsUTcSSzEkZO T1OK2KKAPnT4n+CvHvj7xUmqW/hCS0ggtxaxrJqFszOqu7Bzh8KSH+7k4x1Nep/Dy58T2Xh7TNE8 Q+GJ7OaziFsLuG4gkhMaJhGYCQuGIGCApGeeAcL3FFAHmfxW+FK+Pkg1DT7iO21q3QQq07N5UsW4 na2ASpBZiCB3IIOQV8c0bQ/i/wCBdRSw0iw1W2a6wdkKJcW2WIG5j80SN8oyxwQByQDX1fRQB4fp Pw28beN7yK6+JurzrY2sqlNLjePFwAGO4+UQictjcAXI3DK/Ka9worP13U/7E8Panq3k+d9htJbn yt23fsQttzg4zjGcGgDwT4reD9f/AOFtwal4Z1GNtU1VAYbe3vFt7qApCVJ5YHYyxv8AOMDO5T23 Z8/iz4621xLA9trJeNyjGPRY3UkHHDLEQw9wSD2rU+BPiqzu/FviG88RanAdd1PyBbzXRCvL8zBo 0Y8DJMQCDGdowMLx9D0AfMkPxC+NGlOb+/07Up7SBGeVLvRdkW0KclmRFIA653Dpzxmvb/h544h8 f+Gm1aKxksnjuHt5YWkDgMArZVsDI2svUDnI7ZO5rOuaX4e057/V7+CytVyN8z43EAnao6s2AcKM k44Fc38P9HmgfXfEV5pUem3eu3v2hbcKUdLdVAiEqZIWU5d2xzlznngAHH/Fn4NzeK79/EPh+SNd UdMXVtNIQtxtTClD0V8Kq4OFPByuCW888PWHxn8K3h0DR7TVYFPRHjjltk4L/LI+YlzuOdrDJ4OT xX1PRQB4/wCEvht4l1jXLHxV8RdXnuL6zlMtrpgddkLrt2uSh2LygYqg5wpYn5lr2CiigArH8WWN xqfg3XLCzj8y6utPuIYU3AbnaNgoyeBkkda2KKAPG/hinxG8G6XHoWseEJLvS43ZoZbe9thLAG3M V2mQBwWOeSCMtyeALni668S/E3wu2haH4WvtLtbuULd3mvKtt5QjKyKEjDM7bmAG7aQOR3JX1iig Dm/CXhe28CeDotJsI5Lx4EaWRkREkupTyTyQMnhRubgBQW4zXlfxb8OeN/iFeacth4OntrXT/M2S T6hbb5fMCZyokIXBQ/xHOc8dK94ooA8v+FUXi/wx4ct/DmveFJ0hglIt7u2urdwEdyzGQGXPylic qDkcYyPmr/GXwt4q17UfC9/4Vs/PutLlmm3+bEvlPmIocSEA8ofXpzXrFFAHBweN/Emm6NFP4k8B ayt3vEbDSDDeKx253bVk3oCQ3BBA4+Yk1zd18PdZ8ffEqDxN4osINL0iw2xW+ntIk81ykbb183Ba MKxdtwyeBtxzvr2CigAooooA5/xx4b/4S7wXqmhiTy5LqL905bAEikOm44Py7lXOBnGcc188eEfD vxW8AeKFTSfD87TXUR8yGTbJaSqA2PMdWCKwIJGWDc46Ng/U9FAHjesfDzxp4z8HalL4t1WOXVNh n0rS7QKsFtJw21iNodyAYgWZggZjls8cp8LdF+KOg3mpaHY6b/ZtnPKFubzUYmZLVgGBkgXcFkY4 6gMp2pkhea+j6KACiiigDn/Ems69pnlpofhWfWpGwWb7bDbRqOcjLtuLDA424weuRivmi/8AhB8T NT1G5v7zQvMurqV5pn+12w3OxJY4D4GST0r63ooA8jPiP42/Z0VfBOjCcOxdzcoVK4G0BfPyCDuy cnORwMc154fjh4nt5YHOjeGkVCjGOQbpwwxwymUqVx1BQ/NxnHHslFAHk/hv4DaFp2oyal4hvp/E N80plzcKUjLEhtzruYu2Q2dzFSG5XvXrFFFAFe/sbfU9OubC8j8y1uonhmTcRuRgQwyORkE9K8Ps fhb4u+Gni2PXPBrQa5ZvmGazndIZjCzElSzfLxtT5wQd38G3IPvFFAHn83jnxVe6dcRaN8PtVGrw YjlXUJIoLZHIYZSQuPPUMP4QMjnK5GY/AXw2m0LVLrxN4nvI9W8U3bsWuRkpAp4xHkDkrxnAwPlU AZ3eiUUAYfijUtc07S3Ph/QpNV1B0YRAzRRxRtxgyF3Ukck4XOduCVyDXgnw9+H3xD8FeNLHWZPD k8lqm6O5hh1C3UyRsCD/AMtMNg4YKeCVHI6j6XooAy5NVvE0uG7Xw/qUk7vtayWS382Mc/MxMoTH A6MT8w464+dNb8A/FTWPHM/itdB8i+a7W5g/0y1bydhHlr94BtoVRkjnGT1NfT9FAGfo19e6hpyT ajpE+l3XAe3mljlwcAkq0bEFckgE4Jx0FfMGs/DHxz4E8UPqfh6xvp7e2uz9gvLIieQqQSu9FG77 vytldpORyCM/V9FAHlem6L8SPGVwyeNZ7TRtBZDFc6XpxHmXYBBwZAWKI2drYcEhSNo3bq8s0XwV 8Rfh/wDEUNoOiz3si+akMzri2uYTuAMjK4Vc7QwRnBBC98Z+p6KAM/RIdUg0eBNauoLnUjued7eP ZGCzEhEB52qCFBPJC5PJNaFFFAHP+OPDf/CXeC9U0MSeXJdRfunLYAkUh03HB+Xcq5wM4zjmvnjw j4d+K3gDxQqaT4fnaa6iPmQybZLSVQGx5jqwRWBBIywbnHRsH6nooA8b1j4eeNPGfg7UpfFuqxy6 psM+laXaBVgtpOG2sRtDuQDECzMEDMctnjlPhbovxR0G81LQ7HTf7Ns55QtzeajEzJasAwMkC7gs jHHUBlO1MkLzX0fRQByfxG8GL468HXGkLJHFdq6z2ksm7akq5xnB6FSy9DjdnBIFeGeEdL+L/gDW F0zStEneO6zM9tMEltGO1hlpA22NuOzqThAcjAr6fooA8P8AFfgjxz4l8CX914muvt+rtLC2l6PY ALDatJLGGLkAb2VS65YsqLuO45yD4ZfC/wAe+DryS6GtaVYW93Er3Fq0BuizgHajgbMbd7HKSdQP vCvcKKACiiigArzv4gfCDRfHdx/aAnk03VtgQ3MSBllAIx5icbiFBAIIPIzkAAeiUUAfP8Pizx78 GNOt9L8SaVBrOirmGyu4rgjacKRH5mCQoG4BXQHg7TtXFXIP2g7vW7+LS9B8Kxvf3SBLY3eopGvn FOhBUAjdkAblLcdC2B7B4j0Cx8U+H7zRdSWQ2l0gV/LbaykEMrA+oYA85HHII4r5Y8c/B3xH4OeS 4gik1XSUQMb23iwU+Ult8YJKAbSd3K4xyCcAA9HsPhD4j8a+Jf8AhJPiLexx7nH/ABLLdtxEYLYi 3KcRp0PyliQzZIYk17hBBDa28VvbxRwwRIEjjjUKqKBgAAcAAcYrwP4b/Hm3t9Oi0nxnLOZIvli1 MIZNyAHiUD5iwwAGAO7I3YILH3ixv7PU7OO8sLuC7tZM7JoJBIjYJBww4OCCPwoAx/HHhv8A4S7w XqmhiTy5LqL905bAEikOm44Py7lXOBnGcc188eEfDvxW8AeKFTSfD87TXUR8yGTbJaSqA2PMdWCK wIJGWDc46Ng/U9FAHjesfDzxp4z8HalL4t1WOXVNhn0rS7QKsFtJw21iNodyAYgWZggZjls8cp8L dF+KOg3mpaHY6b/ZtnPKFubzUYmZLVgGBkgXcFkY46gMp2pkhea+j6KAOH+LHg648beBprCx5v7e Vbq1QuEWR1BBUkjurNjp823JAzXlHw1tfi14W+3aJpXhyBbU3amZ9VjKRxOfkZ0cMpkXCjO3fwoI HPP0fRQBx+ueC7jWvhne+GLrVp72+niZjezkIZJ9/mqSADtj3gDaAdqcDpmvCPCPh34reAPFCppP h+dprqI+ZDJtktJVAbHmOrBFYEEjLBucdGwfqeigDxvWPh5408Z+DtSl8W6rHLqmwz6VpdoFWC2k 4baxG0O5AMQLMwQMxy2eOU+Fui/FHQbzUtDsdN/s2znlC3N5qMTMlqwDAyQLuCyMcdQGU7UyQvNf R9FAHi/xa0zxv4806y0nSfCE8FjDKLmSW7vLYSNIAyhQFlICgMTknJJHTHzSfCbTvGPgPRrrSNU8 GXc0Etw90txa39qzBiqLsKNIoxhCd270GO9eyUUAFeD/AB48F+KfEXiHRrzSbSe/sTELRYYWLeTM XYl2U8KrDaC/T5PmI+XPvFFAHL/DrR9U0D4f6PpetPvv7eIiQeb5mwFmKpu/2VKrxwNuASMV1FFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s//Ri1M/hZzYz/ AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDRbV6P49/5ErUP +2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8AbT/0W1e11VD4 TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+KH/ItW3/AF+L /wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9cV4C/wCR10// ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2uiiiuk+oCiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDxvxd +z/Y+I/Et3rFhrcmnC7czTQNbeePNYksynepAJOcc4OcHGAOw8A/DPRfAFvI1mZLrUJ0VZ72YDcQ AMqgH3ELDOOT0yTgY7SigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooA8X/4UD/Zvij+2vDXiqfSPKl821j+yec0HHK7i43LyRhgcqcHdyT2Gl/D2V9ct Nc8V69P4i1Kx3Cy8y3SCC3zg7xEvBkBB+Yn+7xlVI7iigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKAPG/FH7POi6zqj32j6lJo4mdnltxbiWIE4/1Y3KUGdxxk jnA2gYqna/ALWLHTp9Os/iJfW9jPu862htXSOTcNrblE2DkAA56ivcKKAPN/B/wU8LeFLy31FxPq WpQ7HSa6I2RyAHLJGOBknI3biuBg5Ga9IoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKAMe+8J+G9TvJLy/8P6Vd3UmN809lHI7YAAyxGTgAD8K 5f8A4Ul8PP8AoXv/ACduP/jlegUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/wCjFrpK5vx7/wAiVqH/AGz/APRi1M/hZzYz/dqn o/yPOPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWvOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6M Wsaf8NniZd/yLqv/AG9+R5x4C/5HXT/+2n/otq9rrxTwF/yOun/9tP8A0W1e11VD4TpyH/dpev6I KKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAOJ+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSuj+KH/ACLVt/1+L/6A9c58L/8AkZbn /rzb/wBDSueX8VHzeJ/5G0Pl+TOj+KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otq7X4of8i1bf9fi/ +gPXFeAv+R10/wD7af8AotqU/wCIvkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5 ErUP+2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10// ALaf+i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeA v+R10/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ ANebf+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/ 9AeuK8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/2 6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOu n/8AbT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8 i6r/ANvfkeceAv8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2w ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigDifih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8A rzb/ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3 /X4v/oD1xXgL/kddP/7af+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/wBGLXSVzfj3 /kStQ/7Z/wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT /wDtp/6LavR/Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8jrp//bT/ANFtXtdeKeAv+R10 /wD7af8Aotq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6GldH 8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yO un/9tP8A0W1dr8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVz fj3/AJErUP8Atn/6MWukrm/Hv/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49 /wCRK1D/ALZ/+jFrzjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5 x4C/5HXT/wDtp/6Lava68U8Bf8jrp/8A20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1 bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8V HzeJ/wCRtD5fkzo/ih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/ AJHXT/8Atp/6LalP+IvkZ47/AJGkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAoori/F2ieNbh7u/8ADPi6S0C25aLTG0+3lEkqqcKs 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 AUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s// AEYtTP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/Rb V6P49/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP /RbV7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6 P4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xX gL/kddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09ro oorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKAPiDwJ/yUPw1/wBhW1/9GrX2/XxB4E/5KH4a/wCwra/+jVr7foAK+YPjj8N7PwreW+v6ND5O m38pjmt1wEgmxuGwZztYBjtAwu08gFQPp+uT+J2mw6r8MvEVvO0iolk9wChAO6Ieao5B43IAfbPT rQBx/wAEPiNN4p0uXQtYuZJ9YsU3pK6HM1uNqgs2eXVjgk4JBU/Mdxr1yvkT4HTzQ/FvSEilkRJk nSVVYgOvku2G9RuVTg9wD2r3/wCLnjO+8EeCjf6ZHGby5uFtIpX5EJZWbftxhiAhwDxkgnIGCAd5 RXjfwh8I6B4i8JxeJ9dspNZ1q7eSO4uNWVpxhW2qEEg2sAqL8wyQdy7uCo5D4v6Kvwz8VaTrvg+e TSHv0l8yG1LKu9HVySCSCjb1Hl42jYOOcAA+k6Kz9C1P+2/D2mat5Pk/brSK58rdu2b0Dbc4GcZx nArwT45N4o8O2+iW83jDUr2C+t5oriMIlursAgfIiChkYOAFbdtweTuNAH0XRXgfw88O+K/GPw10 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 /Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDR bV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8A bT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+ KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9 cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2ui iiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMf WbPxBd700jWLHT43iKbptPa4kRzn51PmqvHGAVPI5yDivK/DnwEvvC3iCz1rTfGEYu7VyyeZpW5W BBVlI83oVJHGDzwQea9sooAp6bHqUVuy6pd2lzPvJV7W2aBQuBwVaRyTnPOe4445uUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAeN+KP2edF1nVHvtH1KTRxM7PLbi3EsQJx/qxuUoM7jjJHOB tAxVO1+AWsWOnT6dZ/ES+t7Gfd51tDaukcm4bW3KJsHIABz1Fe4UUAeb+D/gp4W8KXlvqLifUtSh 2Ok10RsjkAOWSMcDJORu3FcDByM16RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ALZ/ +jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/ox a848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+ i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOf C/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6 P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2p T/iL5GeO/wCRpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7t U9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8A Ri1jT/hs8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9 f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/ AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vx Q/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRWfrMOqXGnP b6RdQWd1LlPtc0fmeQMH51j4DtnAAJAGcnONrAHn/wAUvil/wi+3w/4fX7Z4mutqIkaeZ9m3fdJX ndIcjanuCeMBrnwg0nxfp3hqa48W6nd3Et46y29rdu0ktsuOdzMcgtwdn8OOxZgNDwZ8M9F8IO98 TJqetTP5s2p3oDy7ypDFD1QEsxPJJ3YLNgV2lABRRRQAV5X8ctS8X6f4atD4aW7jtGd21C6sw3mw qgDL8ynKIcOWYD+EAkA4b1SigDz/AODv/CU/8IMf+Es+3fa/tcnkfb8+d5OFxu3fN9/fjdzjGPlx XoFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFcD4p8U32paofCnhQ79RfK3V2pwtqvRvmHQjue3QZ Y8RUqKCuzqwmEqYqpyQ0S1beyXVt/wBX2Wpn/ET4ifYPN0TRJv8AS+UubpD/AKn1RT/f9T/D06/d l+Ekmp6jZ6hqeo6jdXaeYLeFZrmR9pA3OdpOOdyYPXg9O/jEojEziF2eIMdjOu1iOxIBOD7ZP1r6 O8DaP/Yng/T7V02TvH502Ytjb3+Yhh1yoIXn+6OnSvPw1SdavzS2R9fnOEw2WZWqFNe9NrVpXfV+ a6Ky227m5dXUNlZz3dw+yCCNpJGwTtVRknA56CvBLr4oeKZryeS31DyIHkZo4fJify1J4XcUycDj Neh/E7X4bPTrbQ/tf2Z9SkC3EygsYbfI3NtBB56YxhgHFamkaf4F1GGKHTLTRLorCGCCON5QnAyw I3Z5Gd3OTzzW1bmqz5IStY8vLPYYHDfWcTQdTn20ukl11TWr/BHkf/CzPF//AEF//JaL/wCIr1H4 a6prmt6Lc6lrN406vN5durW6xgBRywKgbgScexQ+9b//AAi3h7/oA6X/AOAcf+FaFra29lbpb2lv FBAmdscSBFXJycAcdSTTo0KkJ8053XzIzLNsFiaHssPh1CTa1tHb5IfLLHBC800ixxRqWd3OFUDk kk9BXkd34+1jxh4ltNG8Nyy6daXH7tpGRDKQRl36/LtUEgKQeOuSAD4ueKWkuB4btjiOPZLdMCwJ YjKpjoQAVbvyR0K1Y+DGkqIdS1lwpYsLWIhjuUDDPkdMHKc9eD07xUqupWVGD06nVg8vp4LLpZji Ipya9xPZX0Ta699dkvMveLNG1Twpoba3pPibWZZraRfMS+uvNQo3ycIVwTll6+564rqvB3iRfFPh 2HUCix3AYxXEaZ2rIPTPYgg98Zxk4rD+Ld5Ja+CTCiqVurmOFyw5AGX498oPwzXPfBa/UTatp7zt uZY54oTnbgZV2HYHlB6nj0pqfs8Sqa2a/Ezlhni8lli6iTnGWjsr8uiadktm77aHql/BcXNjNDa3 bWdwy/u51RXKHsdrAgj1Hp3HWvIvGXiTxf4S1eKw/wCEj+1+ZAJt/wBhijxlmGMYP939a9lr55+J Wp/2n44vts3mQ2u22j+XG3aPmXpzhy/P9MU8dLlhdOz9SeF6Kr4p06kVKCTbuk9dEtbX/E3PCfij xr4q1xdOi1zyUEbSSzfZIW8tR324GcsVHHrntXdS6B4zELmHxqryhTsV9MiVSewJGcD3wfpXN/Bf TdtnqmqMsR3yLbxtj512jcw6cA7k787fYV6ddXVvZW73F3cRQQJjdJK4RVycDJPHUgUYaDlSUpt6 +bDOsUqOOlQw1OKUbK3JF3e76X62PG/EviD4h+FbiKLUdUiKTZ8qWKGFlkwBnHyAjG4DkD2zXp3g 661K98Jadd6s++8njMjNhRuVmJQ4Xj7pX+vNUfiF4fuPEXhV7azjaW8imSaGNXVQxztOS3GNrMeo 5A+ldJa2sNlZwWlumyCCNY41yTtVRgDJ56CrpU5wqu7bVtLnNj8bQxGBp8tOManM+blSWiWn339N CaiiuB8U+Kb7UtUPhTwod+ovlbq7U4W1Xo3zDoR3PboMseN6lRQV2eZhMJUxVTkholq29kurb/q+ y1M/4ifET7B5uiaJN/pfKXN0h/1Pqin+/wCp/h6dfuy/CSTU9Rs9Q1PUdRurtPMFvCs1zI+0gbnO 0nHO5MHrwenfxiURiZxC7PEGOxnXaxHYkAnB9sn619HeBtH/ALE8H6faumyd4/OmzFsbe/zEMOuV BC8/3R06V5+GqTrV+aWyPr85wmGyzK1Qpr3ptatK76vzXRWW23c6KqmpapY6RZtd6hdRW0C5+aRs ZOCcAdScA8Dk4qj4o8SWvhbRX1C6RpDuEcUS9ZJCCQM9hwST6DucA+A32pa7411yNJGlu7qaQiC3 QnZHnGQoJwowBk+2SeprpxGJVL3UryPEyjI549OrUly01u+9t7enVvRHoc/xYvtU1GLT/DOiebPL IFjN0clxjnKKQFwe+4gAEnHbpND0LxRJNY6hr/iScyxKWNlbRxogJx8rkDDjHHTgn5Txk6nhbwtY +FdLFpaDfM+GnuGGGlb+gHOB29ySTuU6dKb96q7vt0MsZj8NG9LA01GO3M1eT6bu9vkr+nTL1qw1 O+hiGl6y2mSox3MLZJlcehDdD7g+vB4x4xqvj/xfpmr3th/bfmfZZ5Id/wBkiG7axGcbeM4r3PUL yPTtNur6ZWaK2heZwgyxCgk4z34r5XllknmeaaRpJZGLO7nLMTySSeprnx03C3K2m/M9vhTDQxKq e2hGUY2SvFXu7ve19j1/wZdeM/F2m3F8fFK2kUc3kqBYRSMxABOeBgfMPXv0xzp6tbfEDREjvbHV otcRNxmtXso4jjacEBTlvoCDnHBya3PAlj/Z/gfSIfM8zdAJs7cY8wmTH4bse+K6KuinRvTV27+p 4+LzFQxk1CnBwTatyrZab2T6PqcD4S+J9jr1xDp9/D9iv5PlRt2YpWwOATypJzhTnoBkkgV31fNH jHTf7J8YarZhYkRZ2eNIhhVR/nUAYGMKwGPavbfh5r0niDwjbzTlmubZjbTO3O8qAQ2SSSSpXJPf NZYXESlJ057o7M8yijRowxuF0hK11va6ureXT/gHVUUUV3Hy4UUUUAFFFFABRRRQAUUUUAFcv468 daX4D0M39+fNuJMra2iNh7hx2HooyMt2z3JAPSTmZbeVreOOScITGkjlFZscAsASBnvg49DXB2vw ss7zxRP4k8W33/CQ6g25IYZrcJaQRkfKqwktnb82MsR82SN3zUAcn8KW+IfibxZP4s12/u7TRZUO 2ylVliuAygoIY24VFG1vMHJxjLbnI9soqOeeG1t5bi4ljhgiQvJJIwVUUDJJJ4AA5zQBJRXifw88 fTeP/jPf3ixSW+n22jyxWdu7kkL50RLsM4DtxnHYKMnbk+2UAFcv468daX4D0M39+fNuJMra2iNh 7hx2HooyMt2z3JAPSTmZbeVreOOScITGkjlFZscAsASBnvg49DXB2vwss7zxRP4k8W33/CQ6g25I YZrcJaQRkfKqwktnb82MsR82SN3zUAcn8KW+IfibxZP4s12/u7TRZUO2ylVliuAygoIY24VFG1vM HJxjLbnI9soooAKKKKACiiigAooooAx/E/ifS/COhzavq8/lW8fCqvLyueiIO7HB/IkkAEjxvwTq vxD+IvxBg8SLc3ekeG4HDeV832eWIFl8pVOBK5+YM+PlPPBCLXeXXw1/4SbxRBr/AIw1D+0Fttpt NIhTbaW/HzKxPM2TtJYhN23lduEHeQQQ2tvFb28UcMESBI441CqigYAAHAAHGKAM/Xzrw0th4cj0 1tQLgA6i7rEq9zhASx7Acdc54wfmz4ifEX4i6Z4j1LQL/W4LRo/K3ppK+Wi5RHGyQjzRnIz83cjp xX1PXyB8bf8Akr2u/wDbv/6Tx0AfX9FFFABRRRQAUUUUAFFFFABRXP8AjTxZZ+CvC91rV4nm+VhI YA4RppGOFUE/iTjJChjg4xXH/A3WbzxD4Z1zV79991d63NK+CSFzFFhVySQoGABngACgD1Cvmzxt qXxXuPilPbacus24W4I06GzDLbyQo67XbnYw+dC5fIBbDYACj6TooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACvL/il8Uv+EX2+H/D6/bPE11tREjTzPs277pK87pDkbU9wTxgN6BrMOqXGnPb 6RdQWd1LlPtc0fmeQMH51j4DtnAAJAGcnONrc34M+Gei+EHe+Jk1PWpn82bU70B5d5Uhih6oCWYn kk7sFmwKAM/4QaT4v07w1NceLdTu7iW8dZbe1u3aSW2XHO5mOQW4Oz+HHYswHolFFABRRRQAUUUU AFFFeH/Hn4jf2dZy+DdN5uruJWvZ0lwYYyc+WApzuYDkNxsbod2QAe4UUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVXvvtn2OQWHkC6O AjT52LkgFiBy2Bk7cjdjG5c7gAcX8TPiZY+ANLCII7nWrhCbW0J4A6eZJjkID26sRgdCVw/g7p/j 1pdR1zxdqN8Le8ysWn3oO8OGyZAp/wBSo+YBQBnOcAKudzw18LtN0nWZ/EGtXcniDxBO4d728iUL GwbKmKPkIQAgBycbfl2g4rvKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsv Xzrw0th4cj01tQLgA6i7rEq9zhASx7Acdc54wdSigD5ouPiF49ufi1pvh/Wb/wCxRw63bRS2ljGY Y2AdV4JHmNG4O7DEghgcYxj6Xr5g8Zf8nQ23/YV03/0GGvp+gAooooAKp6rqtjoel3Gp6ncx21nb pvllfoo/mSTgADkkgDJNXK4PxL8PJvHGswTeJNVk/sW1ctBpFmCquwbh5ZTyxZcggKu3dhW6s4B5 pD4n8e/Fjxzby+F577Q9AtJSFuBkRqFKktLj5ZZDlcRZIAIHTc5+h6r2NhZ6ZZx2dhaQWlrHnZDB GI0XJJOFHAyST+NWKACiiigAooooAK5fx1460vwHoZv78+bcSZW1tEbD3DjsPRRkZbtnuSAeknMy 28rW8cck4QmNJHKKzY4BYAkDPfBx6GuDtfhZZ3niifxJ4tvv+Eh1BtyQwzW4S0gjI+VVhJbO35sZ Yj5skbvmoA5P4Ut8Q/E3iyfxZrt/d2miyodtlKrLFcBlBQQxtwqKNreYOTjGW3OR7ZRRQB538UPH 134YSw0LQYo5/EmsOIrQM6YgywUOQT1LHC5+XIYk4Ug5fif4Z+KW0Oa70Tx54jn10fvXilvjFBO3 VljRcCLJ+6MlRwvA+YcB46vri7/aa0uGeTfHaahp0MA2gbEJjkI46/M7Hn19MV9L0AeD+BPEXxJf 4Z+KFNpfXWp2G0adLe27tM5Lus6gv/rGj2sQpyQ3ykHhak+Bc/jq517U38QS6zLpIt2TdqTOwFws m3CeZzkYlDBeAQA3O2vdKKACiiigAooooA5/xxda7Y+C9UufDVv5+rxxZt0CBz1G4qp+8wXcQOck AYPQ+V/Aufx1c69qb+IJdZl0kW7Ju1JnYC4WTbhPM5yMShgvAIAbnbXulFABRRRQAUUUUAFFFFAB RRRQAUUUUAFeZ/FbXfHXh3RNQ1XRZdGtdJtkiHnNvkuyzOqkqrL5YGWAwd3GTnJAHplc/wCO/wDk nniX/sFXX/opqAPN/gN4q13xXeeJ7rXNTnvZF+y7A5ASPIlB2oMKudozgDOMnmvSPHOp6jovgbWt S0mHzb62tHkj+ZV8vA5k+YEHYMvtI+bbjvXj/wCzL/zNP/bp/wC1q+gKAPlj4efFjxd/wnOmWWo6 rPf2Oo6gEngm2felOwFWKkoqkhgi4XjAxk19T15vqVz/AMLD8aaRZaS0Fz4d0K7j1K71OCXcHulD GOCNsFWxuVnxnhsZUgBvSKACiiigAooooAKKKKACiiigAooooAK87+KHj678MJYaFoMUc/iTWHEV oGdMQZYKHIJ6ljhc/LkMScKQfRK+aPHV9cXf7TWlwzyb47TUNOhgG0DYhMchHHX5nY8+vpigDv8A xP8ADPxS2hzXeiePPEc+uj968Ut8YoJ26ssaLgRZP3RkqOF4HzA+BmseLNQ0fVLTxMl88dpKotbm +icSOS0glQu339jJj1UkgnGAPWKKACiiigAooooAKKKKACiiigAqnqp1JdLuDo8do+obMQC7dli3 erFQTgdcDrjGRnIuUUAfLHxE+IvxF0zxHqWgX+twWjR+VvTSV8tFyiONkhHmjORn5u5HTivqevmD 9o7/AJKHp/8A2Co//RstfT9ABRRRQAUUUUAFFFFABXF/EO/8Zabo15feGjo0Vpa2U09zNeNI04Kq T+6QLsyAMjcSCTggAc9pRQB8/wDwU8ceJfF3xDvBrmrz3ccelOVhwscYIljw2xAF3fMRuxnBxnFe 8X81xb6dczWdr9ruo4neG38wR+a4BKpuPC5OBk9M180fs4/8lD1D/sFSf+jYq+n6APkDS/jN42sd cGoXOsz3kMksT3Nq6xhJETqijaRFuGQSgGc5OTX1/Xm/jm5/4Tm6i8CaK0F3byyq+u3cUufsEMco OzIBUTMyMApyRtOVwdw9IoA4f4sXXim08DTHwlbzy30sqxTNbIXmjhYEM0YHO7O0ZAJAJIxjcOb+ A8/i+60bU7jxJLqU1nK8L2El+zMz5Ulypb5ihHlkH7vXHO6vXKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKK8P8ffEb+0fid4e8G6bxa2mt2bXs6S5E0gkU+WApxtUnkNzvXoNuT7hQ B5X8ctS8X6f4atD4aW7jtGd21C6sw3mwqgDL8ynKIcOWYD+EAkA4bU+Dv/CU/wDCDH/hLPt32v7X J5H2/PneThcbt3zff343c4xj5cV6BRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUV4f8efiN/Z1nL4N03m6u4la9nSXBhjJz5YCnO5gOQ3Gxuh3ZAB7hRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s//Ri1M/hZzYz/ AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDRbV6P49/5ErUP +2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8AbT/0W1e11VD4 TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+KH/ItW3/AF+L /wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9cV4C/wCR10// ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2uiiiuk+oCiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArzP42+NpvCXg 5bXT7iSDVNUcxQSRkq0Ua4Mjg4IzgqvUEb8g/LXplef/ABe8C3HjnwkkOnCD+07KXz7fzFAMg2kN EHP3d3B9CUXOOoADwT8PvCyeEtPurvTrHWry+iW9uNQvYBO9xJIoZmDSLuCnPAIB7kbiSefXw9P4 J+MfhPTtG1K+h8NahFdbdLN7K8UckcTs+EY42ksjDJJ3bjxxXlnw/wDitrXw8uP7F1G3kuNJjuCJ 7SVSJ7U5IcR5I2ndyUbjIP3SxNfR/hfxb4c8d2SX+kzR3D2jqzRzR4ltZGQjkHodrOu5cg/MATzQ Bqa5rNn4e0O91e/fZa2kTSvggFsdFXJALE4AGeSQK8z8K6dffFzS5df8WXN3Hoc9w62Oh2s/lwPE uBulZMPIQ65GSuGQkDa2BJ+0NfXFp8NY4YJNkd3qEUM42g70CvIBz0+ZFPHp6ZrH+Fvh3xlffDjS bnSfHf8AZdi/neXZ/wBkQz+XiZwfnY5OSCeemcdqAI/id8I9D0DwnJ4i8J293p+oaW6z4t5ZZS67 ly2WYlCn39w6ANnsV1Pgd8SLzxVZ3GgazN52pWEQkhuGyXnhztO84xuUlRuJy24cEhidi/8AAnjv U9OubC8+JfmWt1E8Myf2FANyMCGGQ2RkE9Ky/AnwTm8EeLLbW4vFElwkaOktstoYhMrKRhj5h4Db WwQeVH1oAPjDH4303wxf61YeLI7bT4XjV7O0tDBIEMmFYTbmcvlkBxsBAPA6Hzz4Nf8ACQa9/wAJ RpmmanPY3mpeTLd6u8TTNEg83dhtw/fOzrgk/dEjA7lFev8Axt/5JDrv/bv/AOlEdef/ALMv/M0/ 9un/ALWoAqaN8E/Ffhf4m6Pdafcx3Gl21xFPJqKyCAhAf3kbJuLZIDLgZBDDJGTjX+M7eN/D2gw6 q3jWQQTXscK2mnWZsxGfLc58wSM5HynKliMnPYCvdK8f/aO/5J5p/wD2FY//AEVLQAfs4/8AJPNQ /wCwrJ/6KirrPiZ4+h8AeGheLFHcahcuYrO3dwAWxkuwzkovGcdyoyN2Ryf7OP8AyTzUP+wrJ/6K iriP2kb64k8ZaTYNJm1h0/zo02j5XeRwxz15Eafl7mgD0+w+F1v4g062vviBc32t6vJEjyQzXBih tHIG5IkhIUdFDHJ3FN3Ga8w+KXhR/hTrmm+IPBlzfadb3eYnSNmZInTawUuSdyvjOx852N1HC+r/ APCJfEP/AKKf/wCUC3/xrH8SfCnxV4u06Ow1z4h/a7WOUTKn9ixR4cAgHKOD0Y/nQB1nw58Zr468 HW+rtHHFdq7QXcUe7akq4zjI6FSrdTjdjJINdZXB/DP4czfDu31G3bXZNRgu3jdIzAYliZQwYgb2 GWBUE8fcHXt3lABXl/x20nxBrHgaGDQ4Z7mNbtGu7W2jZpJEwdpwD8yhsErtbna3AQ59QooA8n+A 2jeKdG8L3kevpPbWLyg2FncgrJFy3mHaRlVY7cA9wxwN2W9YoooAKKK8/wDiV4vn0ZbbRrC4W2ur xd0ty27NvETjcMA8n5uRkgKcDJBEVKipxcpHVgsHUxldUKW7/BLd/L/gdR3inxTfalqh8KeFDv1F 8rdXanC2q9G+YdCO57dBljxNc6RY/D/4d6obMym4MBWS7T5ZHlb5Fbr8oDMMAHgZ6nJOd4W8SeAf Culi0tNW3zPhp7hrWUNK3/fPAHOB29ySTh/E3xpo+v6RZWGlT/acT+dI+x02bVIAwyjOd5+m33ri lUioOpKScraa7en6s+koYOtPEU8HSpSjRUk5Nxacra3l5aWjHpfqzhfDmktrviKw00Bis8wEmxgG EY5cgnjIUE/h3r6fr58+HOoaNo/iJ9S1m6WBYISIMpIzeY3GQFBGAu4c/wB4Y9vfbW6hvbOC7t33 wTxrJG2CNysMg4PPQ0ZekoN9WPi+dSWIhFp8sVvbRt6uz9LHk3j7wb4s1/xRJewWcVxaiNY4PLnQ bEBPB3bTknLd8bsZOK8xurW4srh7e7t5YJ0xujlQoy5GRkHnoQa+rawPF3he18U6LJayxqLqNWa1 mJwY5McZOD8p4BGOnuAQV8EpXnF6hlXFEqChh68FyKyutGvN7389urOK+Gnjy+1LURoerz+e7xk2 s7D5yVHKMQOflBbceeDknIx6ddXUNlZz3dw+yCCNpJGwTtVRknA56Cvmjwt/yN+i/wDX/B/6MWve fH95JYeBNWmiVSzQiEhhxiRgh/HDHHvTwlaToycun+RPEGWUoZjShRVlUtdLTXmSdvX8z541C8k1 HUrq+mVVluZnmcIMKCxJOM9ua+j/AAdpv9k+D9KsysqOsCvIkowyu/zsCMDGGYjHtXzzoOm/2v4g 0/TysrJcToknlDLBCfmI4PRcnPbFfUVZ5fG7lN/11OzjCsowo4aO2r+7RfqeNfGi+8zV9LsPLx5M DTb93Xe2MY9vL/X2o+C9j5mr6pf+ZjyYFh2beu9s5z7eX+vtXJ+O77+0PHGrzeX5e2cw43Zz5YEe fx259s16j8ItJWz8KyaiwXzb+YkMrEny0JUAjoDu3njsR+EUv3mLcu1/w0OjHJYLh+NLrJJfOT5n +B3GoXkenabdX0ys0VtC8zhBliFBJxnvxXyvLLJPM800jSSyMWd3OWYnkkk9TXuvxZ1OOz8GNZna 0t9MkaqXwwCkOWA7gbQP+BD8fFdG0yTWdas9Ni3BrmZYyypvKAnlsdwBkn2FGPk5VFBf1cXCdGNH CVMVPS7/AAiv87/cejeEfiL4e8NeGrbTXtL9513PNJHBGA7scn+PJwMLk9Qo6dKqa34wm8f+INO0 GxjuoNImnjWZFA82UZBZmxkAKMkDkcbj2A9nlijnheGaNZIpFKujjKsDwQQeorzbw74dtbf4v61L a2ax2dhCrRhGwsUsqL0GehBl46D24repSqpRp82jdtrHl4THYGpOvi/ZNVIxck3LmV3ptZWd2rb7 HplFFef/ABK8Xz6Mtto1hcLbXV4u6W5bdm3iJxuGAeT83IyQFOBkgjsqVFTi5SPncFg6mMrqhS3f 4Jbv5f8AA6jvFPim+1LVD4U8KHfqL5W6u1OFtV6N8w6Edz26DLHia50ix+H/AMO9UNmZTcGArJdp 8sjyt8it1+UBmGADwM9TknO8LeJPAPhXSxaWmrb5nw09w1rKGlb/AL54A5wO3uSScP4m+NNH1/SL Kw0qf7TifzpH2OmzapAGGUZzvP02+9cUqkVB1JSTlbTXb0/Vn0lDB1p4ing6VKUaKknJuLTlbW8v LS0Y9L9WcL4c0ltd8RWGmgMVnmAk2MAwjHLkE8ZCgn8O9fT9fPnw51DRtH8RPqWs3SwLBCRBlJGb zG4yAoIwF3Dn+8Me3tuq6n/xSF7qunzf8uElzby7f+mZZWwR9DgilgOWNNy6/wCRfFfta2Lp0kmo 6JO2l5PXXy0PD/iJ4j/4SHxRL5Mm6xtMwQYbKtg/M4wSDk9COqha0fAfhbxLcW765oslhbO26CKW 8Riy8rl4/kI9Uz7sK4SKKSeZIYY2klkYKiIMsxPAAA6mvqLRtMj0bRbPTYtpW2hWMsqbA5A5bHYk 5J9zWGGpuvUc5Hq53i45VgqeFoJO+mqvot7rzf6nlEfxD8TeF/Es2m+JDFfRxSKswRFVlXGQ0ZUA HIIOGHbHynNev2t1De2cF3bvvgnjWSNsEblYZBweehr55+Il1Dd+PdWkgfeiyLGTgj5kRVYc+jKR +Fev/DP/AJJ7pf8A21/9GvXRhasnVlTbul/mePn2AoxwVHGQgoyla6SstY326f8ABK/xU1OTTvBM scW4NeTJbF1faVByx+oIQqR6N+FeJaDpv9r+INP08rKyXE6JJ5QywQn5iOD0XJz2xXd/GXU47jWt P01Npa0haR2V8kGQj5SOxAQH3DD8aPwj037X4wN4yy7LKB3DqPl3t8gDHHdWcgcfd9jWFf8Ae4lR 9F/mevlS+oZJKu9G1KX36R/T+t/daKKqapqVvpGl3OoXbbYLeMu3IBOOgGSBknAA7kivWbSV2fnk YynJRirtnzt43vJL/wAbaxNKqhluWhAUcYj+QfjhRn3r1H4N/wDIoXf/AF/v/wCi468Sllknmeaa RpJZGLO7nLMTySSepr6G+HWkrpPgmwGF826X7VIysSGL8r16HZsBA4yPxPk4K867n6/ifoXEvJh8 rhQ63il/26tf68zqqKKK9c/OwooooA8L+PXxB1rQr208N6PPJYie3W7mvIJCsrDeyhFI5UZTJIOT kDgZDd5o3wt8DW3h5LOLw9BPDcRAtNfQk3LbkAJLOA8bY5wu3ac4CmtTxL4P8Ka5cQax4i020mfT kLi4ncoqIp3HzOQGQYJw+QMt6nOfH8Q4dZvZrLwlpV3rrxPse9UiGxjYOFcNO3UqpDYRXyCMZ5wA eOaRf3nw0+PLeGdNu55NEuNQSE2PmERhbhU2nDbvmTcnzfeYJjIDGvpevlTXRqS/tG6cNYktH1D+ 09NM5tEZYt22HhQxJwOmT1xnAzgfVdABRRWP4svrjTPBuuX9nJ5d1a6fcTQvtB2usbFTg8HBA60A ed23iTU/il411TRdG1S70rwvpSFLm90+WMT3cpbCbJOSiEoxBXOVU7vvgLoar8CPA97pdxb2GnSa fdumIrpLiWQxN2O13IYdiPQnBBwR5Z8C9I8Rap/b39geKP7D8v7P53+gR3PnZ8zb98jbjDdOu72r 1/8A4RL4h/8ART//ACgW/wDjQB5R8HviRrGh+KLfwjr808ljcSi0jS73mSymA2IgBBIUkKmw4CnB +XDZ978S+END8X28FvrtpJdQQOXjjFxLGu4jGSEYAnGQCc4ycdTXk8/7PV9c6zLrD+OJBqElwbpr iPTdjCUtu3jbKNp3c8Yx2r3SgD5I+CnhbRvF3jK8sNcs/tdrHp7zKnmvHhxJGAcoQejH86+l/DHg nw74O+1f2Bp/2P7Vs8799JJu252/fY4xubp614B+zj/yUPUP+wVJ/wCjYq+h/Fl9caZ4N1y/s5PL urXT7iaF9oO11jYqcHg4IHWgDzu28San8UvGuqaLo2qXeleF9KQpc3unyxie7lLYTZJyUQlGIK5y qnd98BdDVfgR4HvdLuLew06TT7t0xFdJcSyGJux2u5DDsR6E4IOCPLPgXpHiLVP7e/sDxR/Yfl/Z /O/0CO587PmbfvkbcYbp13e1ev8A/CJfEP8A6Kf/AOUC3/xoA8o+D3xI1jQ/FFv4R1+aeSxuJRaR pd7zJZTAbEQAgkKSFTYcBTg/Lhs/S9eFz/s9X1zrMusP44kGoSXBumuI9N2MJS27eNso2ndzxjHa vdKACsfxV4ht/CnhfUdcul3x2kRcJkjzHJwiZAONzFRnHGcnitisvxJokPiPw1qWjT+WEvLd4g7x iQRsR8r7T1KthhyOQORQB5P8HtCsfG2l33izxU8fiDVJrh7ULfL5qWqDD7FRl2qSXLfLkAEAbcsK k+LXg+Lwt4XuvE3g6efQLiOWL7dHp9y9vHPGSI1/dp8u5WZcY2jDOTkkV5JZ6l4v+C3jG6tgscc5 TEkMoZ7e7j52OMEEjOSCMEHIOPmWvoPwd8UvC3xCi/sor5F/PEyy6beIGEq7RvCn7si8sMHDEKxK gUAegV5Xrfi7U/FnxI/4QLw3eyWNpao76vqdu0bShAuGjiJJ2kMyoWHzK56AId3qlfKHwjTxF4m+ Ieq3OneIv7K1O4tJrm4vPsUc/m7pYyy7DhRlmByOmMd6APa5/gj4HureUXFhdzXkqHzL+S9lad5C OZTltpcn5vu4z2xxXjnhTxprHwo8fXHhvUruefQoLs2s0VyrqI495InjTkrkNvwuQwbudrD2f/hE viH/ANFP/wDKBb/41x+t/ADUfEesT6tq3jf7RfT7fMl/spU3bVCjhZABwAOBQB7hXyB8bf8Akr2u /wDbv/6Tx19Z6TZzado1jZXF3JeT29vHFJcyZ3TMqgFzkk5JGep69TXyZ8bf+Sva7/27/wDpPHQB 9f15n468c6mPGOl+BPCsscWsXro9zfERy/Y4uWbCMcF9iliGx8uMZLAr6ZXyxatrOvftIXyWesf2 fqR1C7hhvfsyS+UkUciKNhwD8iBefryaAPZ/+FMeDbj97q1tfavfN/rL6/v5mml9NxVlHAwowBwB XilzqutfBD4kXOm6dc3d1o6OJRa3WUjuYnVSSO28Y2+Yo6oeMZWva/8AhEviH/0U/wD8oFv/AI1y /iT4Haz4u1GO/wBc8d/a7qOIQq/9kJHhASQMJIB1Y/nQB7BYX1vqenW1/ZyeZa3USTQvtI3IwBU4 PIyCOtePxa5cfGrxRfaNpt/fab4P06Ii5ntHEc187gqqnPKxkbztKnIU7gCyhdTxhpt94G/Z8v8A Sk1WS9ntrdbX7U8eC0UkwQptYtgCN9g54AGMcYp/s4/8k81D/sKyf+ioqANzUPgn4HutGmsrTR47 ScpJ5FyJZXaKRlADHL5cAqCFJx16bjnzD4J+NvEdp43tvB+qXF3NZuksC210fmtJI0zgbgWAAiKb MgDcTjI5+k6z7XQtHsdRn1Gz0qxt76fd51zDbokkm47m3MBk5IBOepoA8z+OPhDQ5vBmr+KJbSR9 YhSBIrhriUhF81FwqbtgGGbgDqSepzXKfBT4d+FfF3g28v8AXNK+13UeoPCr/aJY8II4yBhGA6sf zr0f42/8kh13/t3/APSiOuf/AGcf+Seah/2FZP8A0VFQB6Avht9H8Lx6H4SuYNHji3iN5oGuvLDF iSoaQfNubILFh2wR0+XPitd+I7bxnqGha14ku9XS2eJ8sPKiLGJSCsKkopAYjI68nua+w6+QPjb/ AMle13/t3/8ASeOgD6/ry/4tfEm88JfYtD8Px+d4hv8ABRDbmTZG25FKjPMhcDaMMPlORyM+oV8m anqU2q/tIJcTrGrp4jgtwEBA2xTLEp5J52oCffPTpQB7PoHwZ0OOyW58WCTxBr0yH7VeXNxKw+ZN m1ctyFXgMfmyMjbgBeL+I/w8/wCFcWY8ZeBb2+01oJUS6gSfciRkqAQWOWXeFyjbwd/YLivoCqer abDrOjX2l3DSLBe28lvI0ZAYK6lSRkEZwfQ0Aef/AAg+JjeOtLmsdTEaa1YoplZSqi5Q8eYF6gg4 DADAJUjG7aOf+NreKPDvhq21O18YakqTamyG3gRIAisJGjCvGA+FVdpDM244bjGK80+BV9cWnxX0 2GCTZHdxTwzjaDvQRtIBz0+ZFPHp6Zr1f9o7/knmn/8AYVj/APRUtAHIfCDT/GOueCLvS9B1GDRN MOoStdanjzJ3LQovlxJxtxhSW3KfmXaflINf4mfBGz8I+HJ9f0bVJ5LW18sT214AXO59u5XUAdWT 5Sv947ugrt/2cf8Aknmof9hWT/0VFXefEGCG5+HPiRJ4o5UGmXDhXUMAyxllPPcMAQexANAHH/A3 xzfeLfDV3Y6rLJcX+luiG4ccyxODs3HOWcFHBOBkbSckk1J8X4vEWmeC9Z1qw8V31pHHLAUtIIo4 wsZMaFRIB5gYuS+7djB27cc1x/7Mv/M0/wDbp/7Wr0D42/8AJIdd/wC3f/0ojoA8g+DL+MdVl8RQ +H7yC2uLuW2lvtXvD5rxDdITtQg+ZI+5jluPlbJBYEbnjf4Cw2Hhq912z8QXdzqFrbyXd8b4BhdM BudlI5QnDnDb8kgEjk0/9mX/AJmn/t0/9rV75PBDdW8tvcRRzQSoUkjkUMrqRggg8EEcYoA8P/Z8 8c32ppdeFNRlknFlbieykYZKRBgrRls5IBZNoxwNwzgKB7Jrms2fh7Q73V799lraRNK+CAWx0Vck AsTgAZ5JAr5w/Zx/5KHqH/YKk/8ARsVej/tDX1xafDWOGCTZHd6hFDONoO9AryAc9PmRTx6emaAI /CunX3xc0uXX/Flzdx6HPcOtjodrP5cDxLgbpWTDyEOuRkrhkJA2tgY/xO+Eeh6B4Tk8ReE7e70/ UNLdZ8W8sspddy5bLMShT7+4dAGz2KyfC3w74yvvhxpNzpPjv+y7F/O8uz/siGfy8TOD87HJyQTz 0zjtXUX/AIE8d6np1zYXnxL8y1uonhmT+woBuRgQwyGyMgnpQBj/AAO+JF54qs7jQNZm87UrCISQ 3DZLzw52necY3KSo3E5bcOCQxPsFeR+BPgnN4I8WW2txeKJLhI0dJbZbQxCZWUjDHzDwG2tgg8qP rXrlABXF/Ezx9D4A8NC8WKO41C5cxWdu7gAtjJdhnJReM47lRkbsjtK+aP2kb64k8ZaTYNJm1h0/ zo02j5XeRwxz15Eafl7mgD0+w+F1v4g062vviBc32t6vJEjyQzXBihtHIG5IkhIUdFDHJ3FN3Ga8 w+KXhR/hTrmm+IPBlzfadb3eYnSNmZInTawUuSdyvjOx852N1HC+r/8ACJfEP/op/wD5QLf/ABrH 8SfCnxV4u06Ow1z4h/a7WOUTKn9ixR4cAgHKOD0Y/nQB1HgDxZF8Q/AyahKnkXDb7W9jt3dPLkA5 2NwwyrKwIOV3Y3ZGa+ePjX4W0bwj4ys7DQ7P7JayaekzJ5ryZcySAnLknoo/Kve/hn8OZvh3b6jb trsmowXbxukZgMSxMoYMQN7DLAqCePuDr28c/aO/5KHp/wD2Co//AEbLQB7PYfCDwJpmo21/Z6F5 d1aypNC/2uc7XUgqcF8HBA613FFFABXB/FzxnfeCPBRv9MjjN5c3C2kUr8iEsrNv24wxAQ4B4yQT kDB7ysvX/DmkeKdLbTdasY7u0Lh9jEqVYdCrKQVPUZBHBI6E0AeX/CHwjoHiLwnF4n12yk1nWrt5 I7i41ZWnGFbaoQSDawCovzDJB3Lu4KjkPi/oq/DPxVpOu+D55NIe/SXzIbUsq70dXJIJIKNvUeXj aNg45wPW08XeFvDEtr4T8O2c+o3VviIado8QmNuu4qzSuWCph+GLtuywLdc15B8e5vEFzF4cudet bGy8z7QbeztpGleEbYNwklOFZtxPCqAMdWzkAH0PoWp/234e0zVvJ8n7daRXPlbt2zegbbnAzjOM 4FfPnxul8b6BcWUV/wCLpLvT9RScLBaRG0VRlQ8bIpO9NrKAWZj94H1b3PwJ/wAk88Nf9gq1/wDR S14/+01/zK3/AG9/+0aAGeCPCvi/xx8MNJ0uHWY9A8OxJcLvhLST3zNK+d6gqBFhnXaW5KkkEFdv N+Ofg1qnw/0eLxHp2t/bY7WVTLIkf2eS3JYBHX5zn5iBwQQSDgjJHs/wS/5JDoX/AG8f+lEldxf2 NvqenXNheR+Za3UTwzJuI3IwIYZHIyCelAHk/wADviReeKrO40DWZvO1KwiEkNw2S88Odp3nGNyk qNxOW3DgkMTl/G+XxvoFlFqtv4ukj0u4vfKS0s4javAdjFB5iktICFbdlgM4IXoF80+CX/JXtC/7 eP8A0nkr1/8AaO/5J5p//YVj/wDRUtAHGfCbSfF/iPwLdaRoepx6Hpf9pvLdanG7G4dvKTEcaqQQ AVUsdy5DgA8MDX8Xfs/33hzw1d6xYa3HqJtEM00DW3kHylBLMp3sCQBnHGRnBzgHu/2cf+Seah/2 FZP/AEVFXsFAHgfwO+J+palqn/CK69dyXbyo8tldTszylh8zRs3O4bdzAsRjaRk5UDoPjDH4303w xf61YeLI7bT4XjV7O0tDBIEMmFYTbmcvlkBxsBAPA6HxSwsbfTPjrbWFnH5dra+JUhhTcTtRbkBR k8nAA619D/G3/kkOu/8Abv8A+lEdAHkHwa/4SDXv+Eo0zTNTnsbzUvJlu9XeJpmiQebuw24fvnZ1 wSfuiRgdyitTRvgn4r8L/E3R7rT7mO40u2uIp5NRWQQEID+8jZNxbJAZcDIIYZIycW/2Zf8Amaf+ 3T/2tX0BQB5f8WviTeeEvsWh+H4/O8Q3+CiG3MmyNtyKVGeZC4G0YYfKcjkZk0D4M6HHZLc+LBJ4 g16ZD9qvLm4lYfMmzauW5CrwGPzZGRtwAvjGp6lNqv7SCXE6xq6eI4LcBAQNsUyxKeSedqAn3z06 V9Z0AfP/AMR/h5/wrizHjLwLe32mtBKiXUCT7kSMlQCCxyy7wuUbeDv7BcV2nwg+JjeOtLmsdTEa a1YoplZSqi5Q8eYF6gg4DADAJUjG7aPQNW02HWdGvtLuGkWC9t5LeRoyAwV1KkjIIzg+hr5U+BV9 cWnxX02GCTZHdxTwzjaDvQRtIBz0+ZFPHp6ZoA9b+O/hHRbrwRf+IzZRxatZvEwuYlCtKGdIyshx 84CkYzyNowQMgx/s4/8AJPNQ/wCwrJ/6KiroPjb/AMkh13/t3/8ASiOuf/Zx/wCSeah/2FZP/RUV AG58U/AfhzXPCutazdadGmqWllNcR3kPySMyJkByOHGEC/MDgZxjrXkn7OP/ACUPUP8AsFSf+jYq 9/8AHf8AyTzxL/2Crr/0U1eAfs4/8lD1D/sFSf8Ao2KgD2/4gfD/AEvxxodzFLawLqyxEWd6RteN xkorOASY8k5XB6kgZwR88fBvTdLl+KEek+I9J+0yNFPFHbXMOVinUZPmI3oqyDBBwxHGRkfW9fLn xs0S78I/E238Saf5cCXzreWzpGgEdxEV3/LzuO7a5JGCZD1waAPqOvnjxX4C0LWPj9pWg6XZQW9g 1pHc6nDZodke0uSrKhHlb1ES5GP9Yrck8+56V4h03V/DVv4gguY00+a3+0GSV1AiXGWDkEhSuCG5 4IPpXB/CCGXXf7b8fajbbL7XLtktyxRvLtY8KqqQARyCpzjd5SnHcgHokMGm6FpZSCK00/T7ZGcq irFFEvLMeMBR1JP1NeV+HL/UfjNeapeXV3fab4PtpVt4LC1kWN71sEuJ3X5tpRgGQYU7xg5Qk9R8 YL640/4Ua/NayeXI0SQk7QcpJIkbjn1VmHtnjmvMPgpofirU/Bt5NofjH+xbVdQdGt/7Miudz+XG S+5zkZBAx7e9AHT+Nvgd4VPhLUJvD+mz2ep20TTweTLLOZiqk+VsZjnd0GOQcdeQcP4HfE/UtS1T /hFdeu5Lt5UeWyup2Z5Sw+Zo2bncNu5gWIxtIycqB3n/AAiXxD/6Kf8A+UC3/wAa5Pw38AJvDniX TdZg8XSF7O4SUoliYzIoPzJuEvAZcqeDwTwaAPbKKKKAOD+KFr4r/wCEav8AUfD/AIjj0yCyspZZ rcWwLzgAliJskoQoO3aoOercgr4R8KdQ8X6p411STRp47rXLzTHia/1KdmFuoaP942QxcjaqqMHl gSCoIr6T8d/8k88S/wDYKuv/AEU1eAfs4/8AJQ9Q/wCwVJ/6NioA6PVf2ddS1F7i9n8ayX+oOmQ9 3aMTIwXChnMjEDgDODgdjjFcR8P/AIg618OfFX9i6vPIdJjuDaXtpLIXW0Ichnj27sFWLEhchue+ CPrOvlj9oaxt7T4lRzQR7JLvT4ppzuJ3uGeMHnp8qKOPT1zQB9P399b6Zp1zf3knl2trE80z7Sdq KCWOBycAHpXh+gzax8cfEN5PqVzPZ+C9Pl2CxgDxfbcvuRZCCQWAVC2D8vy7QC24SfEfUprH9m/w 3bxLGUv7ewt5SwOQoh83K89d0ajnPBP1Gp+zj/yTzUP+wrJ/6KioA3NS+CHgPULBbWPSpLJ0QIlx a3DiRRvLHO4sGJyRlgTjAGMDHkmk/EDxL8JfGk/hnWbqfVNGspfJaGQqXERC+XJEcnb8gUiMttGS OCdw+n6+dP2ltNhi1nQNUVpPPuLeW3dSRtCxsrKRxnOZWzz2HTuAe/zQabrulhJ4rTUNPuUVwrqs sUq8Mp5yGHQg/Q18sahoFj4X/aGsNH0xZFs4NYsWiR23FA5ifbnqQCxAzk4AySea97+D99cah8KN AmupPMkWJ4QdoGEjkeNBx6Kqj3xzzXjHjL/k6G2/7Cum/wDoMNAH0vfWFnqdnJZ39pBd2smN8M8Y kRsEEZU8HBAP4V8mfGfwlpHg7xrDZaLDJBaT2Udx5LSFwjFnQhS2Tj5AeSeSe2APruvmD9o7/koe n/8AYKj/APRstAHvfgsTN8NPDy28kcc50e2EbyIXVW8lcEqCCRntkZ9RXiHxul8b6BcWUV/4uku9 P1FJwsFpEbRVGVDxsik702soBZmP3gfVvc/An/JPPDX/AGCrX/0UteP/ALTX/Mrf9vf/ALRoAZ4N 8I618RPhJpejx6zJo2i2jyK6GzLtey+c7ls71BiUMgGOrh8j5FNa/wAGfh14r8F+KtXn1hI4dPe3 MCiO5DrcuHBWQKOwUNywUjf05bHWfBL/AJJDoX/bx/6USV6BQAUUUUAfKnxIvJtO/aIlvbe0kvJ7 e9sZY7aPO6ZljhIQYBOSRjoevQ13ep/BrxT468rVvFfi37PfSZk/s+O2MsNnux8ifvABwFBwOSOr fePIeMv+Tobb/sK6b/6DDX0/QB8ea3pHiv4NeMd9peSQO6OLW+iQGO5iPUFWyMjjKHO04PPysfp/ wH4rh8Z+DrDWUMYndNl1GmP3cy8OMZJAz8wBOdrKT1rl/jzpsN98K7y4laQPYXENxEFIwWLiLDcd NsjHjHIH0PH/ALM08zW/iW3aWQwI9s6RljtVmEoYgdASFUE99o9KAOw8deOdTHjHS/AnhWWOLWL1 0e5viI5fscXLNhGOC+xSxDY+XGMlgVuf8KY8G3H73Vra+1e+b/WX1/fzNNL6birKOBhRgDgCvGLV tZ179pC+Sz1j+z9SOoXcMN79mSXykijkRRsOAfkQLz9eTXs//CJfEP8A6Kf/AOUC3/xoA8UudV1r 4IfEi503Trm7utHRxKLW6ykdzE6qSR23jG3zFHVDxjK19Jz+b4i0nTrvRtbnsbWfZc+fBAjPNC0Z KqBKpC5LI2SuflxxnI8v8SfA7WfF2ox3+ueO/td1HEIVf+yEjwgJIGEkA6sfzr0zwfoE3hbwnYaJ PqMmoPZoyC5dSpZdxKjBZsBVIUDPRR06UAfLF5q3iM/Fy1t73ULvX7zTNd2W0c03lrLIs4GEBJWI OVAwOBx2Fez6n8IdX8bJJeeN/FEkmoKjrZ2+nRhbWzyzHowzIPuZ+62FwWOAR45/zcL/ANzX/wC3 dfX9AHyRp2qap8Ffihdaf9t+02cUscd8kSZW4gYBwdhIxIFfI54bIyVJz9b18uftFQQw/Ea1eKKN Hm0yJ5WVQC7eZIuW9TtVRk9gB2r6L8WX1xpng3XL+zk8u6tdPuJoX2g7XWNipweDggdaAPO7bxJq fxS8a6poujapd6V4X0pClze6fLGJ7uUthNknJRCUYgrnKqd33wF0NV+BHge90u4t7DTpNPu3TEV0 lxLIYm7Ha7kMOxHoTgg4I8s+BekeItU/t7+wPFH9h+X9n87/AECO587PmbfvkbcYbp13e1ev/wDC JfEP/op//lAt/wDGgDyj4PfEjWND8UW/hHX5p5LG4lFpGl3vMllMBsRACCQpIVNhwFOD8uGz7v4n 8E+HfGP2X+39P+2fZd/k/vpI9u7G77jDOdq9fSvK5/2er651mXWH8cSDUJLg3TXEem7GEpbdvG2U bTu54xjtXulAHyR4l8LaNp/x5g8NWtn5ekNqFlCbfzXOUkWIuNxO7nc3fjPFe/2Hwg8CaZqNtf2e heXdWsqTQv8Aa5ztdSCpwXwcEDrXjHjL/k6G2/7Cum/+gw19P0AcH8RrPxWdB1bUdK8VR6XZ2dlP N9ng08NLKFjyQZmfKnKnDIqkbu5ANeSfs/X95qfxO1O8v7ue7upNKffNPIZHbEkIGWPJwAB+Fe7+ O/8AknniX/sFXX/opq8A/Zx/5KHqH/YKk/8ARsVAH0/Xi8WuXHxq8UX2jabf32m+D9OiIuZ7RxHN fO4KqpzysZG87SpyFO4AsoXsPjBfXGn/AAo1+a1k8uRokhJ2g5SSRI3HPqrMPbPHNcv+zj/yTzUP +wrJ/wCioqANzUPgn4HutGmsrTR47ScpJ5FyJZXaKRlADHL5cAqCFJx16bjnzD4J+NvEdp43tvB+ qXF3NZuksC210fmtJI0zgbgWAAiKbMgDcTjI5+k6z7XQtHsdRn1Gz0qxt76fd51zDbokkm47m3MB k5IBOepoA5P4jWfis6Dq2o6V4qj0uzs7Keb7PBp4aWULHkgzM+VOVOGRVI3dyAa8k/Z+v7zU/idq d5f3c93dSaU++aeQyO2JIQMseTgAD8K938d/8k88S/8AYKuv/RTV4B+zj/yUPUP+wVJ/6NioA+m5 54bW3luLiWOGCJC8kkjBVRQMkkngADnNeR+HL/UfjNeapeXV3fab4PtpVt4LC1kWN71sEuJ3X5tp RgGQYU7xg5Qk9R8YL640/wCFGvzWsnlyNEkJO0HKSSJG459VZh7Z45rzD4KaH4q1PwbeTaH4x/sW 1XUHRrf+zIrnc/lxkvuc5GQQMe3vQB0/jb4HeFT4S1Cbw/ps9nqdtE08HkyyzmYqpPlbGY53dBjk HHXkHD+B3xP1LUtU/wCEV167ku3lR5bK6nZnlLD5mjZudw27mBYjG0jJyoHef8Il8Q/+in/+UC3/ AMa5Pw38AJvDniXTdZg8XSF7O4SUoliYzIoPzJuEvAZcqeDwTwaAND4wx+N9N8MX+tWHiyO20+F4 1eztLQwSBDJhWE25nL5ZAcbAQDwOh88+DX/CQa9/wlGmaZqc9jeal5Mt3q7xNM0SDzd2G3D987Ou CT90SMDuUV6/8bf+SQ67/wBu/wD6UR15/wDsy/8AM0/9un/tagCpo3wT8V+F/ibo91p9zHcaXbXE U8morIICEB/eRsm4tkgMuBkEMMkZOPouiigArh/ib8RLf4faHHKIftGp3m5LKFgdhK43O5H8K7l4 BycgDHLDuK+TPjzqU198VLy3lWMJYW8NvEVByVKCXLc9d0jDjHAH1IB634P+FsWr2dv4j+IDT61r t1suFiu3cJaLkuIvL4HVjuQjaPuhcAlsv4n+CofBfhPWvEHg+eTSku0W31SyRwbeeGRipKxsp2vu kUDBUKu7bjPPtlc/47/5J54l/wCwVdf+imoA8f8A2Zf+Zp/7dP8A2tX0BXz/APsy/wDM0/8Abp/7 Wr6AoAjgghtbeK3t4o4YIkCRxxqFVFAwAAOAAOMVJRRQB8yftAeEdF8Oapo9/o9lHZHUElWaCBQk WY/LAZUAwpIfnHBwDjOSfe/An/JPPDX/AGCrX/0UteP/ALTX/Mrf9vf/ALRr2DwJ/wAk88Nf9gq1 /wDRS0AeOfHrwH4c0PQbTXtI06Owu5b1beVLf5InUxsc7OikeWPu4zubOScjo/2cf+Seah/2FZP/ AEVFR+0d/wAk80//ALCsf/oqWj9nH/knmof9hWT/ANFRUAaHxfi8RaZ4L1nWrDxXfWkccsBS0gij jCxkxoVEgHmBi5L7t2MHbtxzXmHwZfxjqsviKHw/eQW1xdy20t9q94fNeIbpCdqEHzJH3Mctx8rZ ILAj1/42/wDJIdd/7d//AEojrz/9mX/maf8At0/9rUAM8b/AWGw8NXuu2fiC7udQtbeS7vjfAMLp gNzspHKE4c4bfkkAkcmr/wCz545vtTS68KajLJOLK3E9lIwyUiDBWjLZyQCybRjgbhnAUD3CeCG6 t5be4ijmglQpJHIoZXUjBBB4II4xXzJ+zj/yUPUP+wVJ/wCjYqAPp+iiigDn/E/gnw74x+y/2/p/ 2z7Lv8n99JHt3Y3fcYZztXr6V80eJfC2jaf8eYPDVrZ+XpDahZQm381zlJFiLjcTu53N34zxX1vX zB4y/wCTobb/ALCum/8AoMNAHs9h8IPAmmajbX9noXl3VrKk0L/a5ztdSCpwXwcEDrWh8QPGNv4H 8JXOrS/NcNmGzjKFhJOVJQNgjC8EnkcA45wD1FfNn7SepTS+KtG0tlj8i3sjcIwB3FpHKsDzjGIl xx3PXsAdX4O8DT/Eez/4S74hSz3y3u59P0wSSww2sZIG5VBBG4KuMHBXDEsWyNDxh8EtCurO41Pw tDPpWuwb7m2FpMVSSYEMq4Y4j5GFKlQu7PIAFdx4E/5J54a/7BVr/wCilroKAPn/AOD3xh1G+1i3 8M+Jrn7T9oxHZX0jKrqwXiOQ8b92OG5YscHdu+X2jXNL1bUvL/szxBPpOyKQfubaKXfIduxm8xT8 q4bKjBbd94Yr5U+JcbeF/jLq8+mTSLPBex30UjhWKSuFmzjGCAzHAIPAGc19h0AfHnw/1zxNqXxP 0i7hmk1fWAksNsdSumZVBikGWYknYu5nKjk4IHJr1/VPgbd+KrdtQ8T+Lru68ROiKJ44E+zwqAMo I+CRnfyCmS2Suc58k+CX/JXtC/7eP/SeSvr+gD5Y+FvifVPAXxKbwpdT+dYXGoNYXMMfzoJ93lrI mcY+YKCe69QSFx9T18ueLIIbb9p23SCKOJDrFg5VFCgswhZjx3LEknuSTXt/xa1KbSvhX4guIFjZ 3txbkOCRtldYmPBHO1yR7469KAPP5/EepfGnxjL4e0K+u9M8JWSFr67hDJJeKfl25xgBgWCo3YMz AkBB3E/wa8BzaNLpiaFHAjuZFnjlczo5XbkSMScDrtOVzyVNed/sy/8AM0/9un/tavoCgD40+Kg1 e28eXml6xqUmoPpqJbW08pBc2+PMjDsFXc+2T5mIyTnk19l18wftHf8AJQ9P/wCwVH/6Nlr6foA8 D8O6lafF74vaj/aV5JceH9MTz9P0p3fyp9jBFlZNoBHzMxDYb51X5lDCvRPEXwx0K+06SXQrGDRN bgik+w32nE2jRyEcbjGOVONpyCQrNjBNeEfEbwnrvwz8c/8ACQ6S/wBnsZ7t57C6tECJAzEnySvQ YBIx91lzx95R6X4G+Pukawkdn4oEel6gzlRcIp+yvlgF5JJQ887vlAUncM4AB1nwgv7zU/hbo15f 3c93dSefvmnkMjtieQDLHk4AA/Cu4qOGCG2QpBFHEhdnKooUFmYsx47liST3JJqSgArm/HPjOx8C +GpNYvo5JiXENvAnBmlIJC5xhRhSST0AOATgHpK+bP2k9Sml8VaNpbLH5FvZG4RgDuLSOVYHnGMR LjjuevYA6vwd4Gn+I9n/AMJd8QpZ75b3c+n6YJJYYbWMkDcqggjcFXGDgrhiWLZGx4z8BWfh3TtS 8YeDD/YWt2NpJKfsxC280ahS6vEVZfuISAABvwTzyOw8Cf8AJPPDX/YKtf8A0UtdBQB8wfs4/wDJ Q9Q/7BUn/o2Kvp+vmD9nH/koeof9gqT/ANGxV9P0ARwwQ2yFIIo4kLs5VFCgszFmPHcsSSe5JNSU UUAeT/F2Lxjp3hXVdbtfGH2Sxg8sLY2Vj5LkNMoBM/mFwwDDJXAO3GBk1zf7Nk811ceLbi4lkmnl e1eSSRizOxMxJJPJJPOa7z42/wDJIdd/7d//AEojrz/9mX/maf8At0/9rUAe0a5peral5f8AZniC fSdkUg/c20Uu+Q7djN5in5Vw2VGC277wxXyp8P8AXPE2pfE/SLuGaTV9YCSw2x1K6ZlUGKQZZiSd i7mcqOTggcmvsOvkD4Jf8le0L/t4/wDSeSgD1vVPgbd+KrdtQ8T+Lru68ROiKJ44E+zwqAMoI+CR nfyCmS2Suc588+FvifVPAXxKbwpdT+dYXGoNYXMMfzoJ93lrImcY+YKCe69QSFx9T18ueLIIbb9p 23SCKOJDrFg5VFCgswhZjx3LEknuSTQB9J6zoel+IdOew1ewgvbVsnZMmdpII3KeqtgnDDBGeDXy B4m8MW/gb4lHS9XgnuNIhu45cDO+4tCwPDfLltuVJGBuDAHivs+vE/2ivC7X3h+x8SW8ce/TnMN0 QihjFIQFJbOSFfgLg/60njByAeyWNhZ6ZZx2dhaQWlrHnZDBGI0XJJOFHAyST+NeL/tDaHpcmk6V dWlhAfEN5qCwoYU/f3KGMgjaOZMERAZBxkAY3c9R8EfE6eIPh1aWsk/mX2lf6JMp2ghB/qiAP4dm FBIGSjdcZNOMjxt8dZhLHHPpPhG3xEVeN0N5LjlhjORhhgfdaAHIJwQDtPB/g/S/Bmh2+n6fbQLM sSJc3SRbXuXGcuxySeSxAJO3OBxXB23iTU/il411TRdG1S70rwvpSFLm90+WMT3cpbCbJOSiEoxB XOVU7vvgL6J4svrjTPBuuX9nJ5d1a6fcTQvtB2usbFTg8HBA6188fAvSPEWqf29/YHij+w/L+z+d /oEdz52fM2/fI24w3Tru9qAPU9V+BHge90u4t7DTpNPu3TEV0lxLIYm7Ha7kMOxHoTgg4I80+D3x I1jQ/FFv4R1+aeSxuJRaRpd7zJZTAbEQAgkKSFTYcBTg/Lhs+r/8Il8Q/wDop/8A5QLf/GuLn/Z6 vrnWZdYfxxINQkuDdNcR6bsYSlt28bZRtO7njGO1AHrnirxDb+FPC+o65dLvjtIi4TJHmOThEyAc bmKjOOM5PFeV/B7QrHxtpd94s8VPH4g1Sa4e1C3y+alqgw+xUZdqkly3y5ABAG3LCvWPEmiQ+I/D WpaNP5YS8t3iDvGJBGxHyvtPUq2GHI5A5FfKFnqXi/4LeMbq2CxxzlMSQyhnt7uPnY4wQSM5IIwQ cg4+ZaAPW/i14Pi8LeF7rxN4Onn0C4jli+3R6fcvbxzxkiNf3afLuVmXGNowzk5JFeuarpdprWl3 Gm36SPaXKbJUSV4yy9xuQg4PQjPIyDwTXF+Dvil4W+IUX9lFfIv54mWXTbxAwlXaN4U/dkXlhg4Y hWJUCvQKAPkjxL4W0bT/AI8weGrWz8vSG1CyhNv5rnKSLEXG4ndzubvxnivofRPhb4N8OaxBq2k6 N9nvoN3ly/apn27lKnhnIPBI5FeIeMv+Tobb/sK6b/6DDX0/QB4X8Z28b+HtBh1VvGsggmvY4VtN OszZiM+W5z5gkZyPlOVLEZOewFan7OP/ACTzUP8AsKyf+ioqP2jv+Seaf/2FY/8A0VLR+zj/AMk8 1D/sKyf+ioqAOw+J3i7/AIQvwNe6lE22+l/0ay4z++cHDfdI+UBnwRg7cd65f4VeDdC1fwXb+Idb hg8QarqmZLi71FTcldhKKi+auRtC4PqQeSoXHYfELwn/AMJr4LvtGjeCO6fbJbTTJuEcikEe65GV LDkBjweh+aPC3jfxT8JNcvdKmtcxiUC8026JwGGMuhB+VivAYZUgg4YBcAHrfjDwsfBnirwnf+F7 y70vS9Q12GC/063u5EgkkkcEMIx8oBVWVh0wEAHWvXL++t9M065v7yTy7W1ieaZ9pO1FBLHA5OAD 0rl/Cfj/AMLfEOBotPk33EO2eSxvIgJI9r/K+OVOGVWypO0lc4JFdZPBDdW8tvcRRzQSoUkjkUMr qRggg8EEcYoA8L+GCW/xU8Ua54j8Tv8A2gtnKBY6TcsZYbRJQedhUIflQKCOpVmYZ2muo+IfgDTr Hwvqev8AhWP+wNZsrQyefpsrWqyQod7oyx8HIBI4BLKmTgV4hqemeKfgp45iuLeb1NvchT5N7Dkb kZc/TcucqcEH7rH2/wABfGvQvFf2TTtSP9m63Ltj8tgfJnkOf9W3OM4Hytg5YKCx5oA7TwXPNdeB fD1xcSyTTy6ZbPJJIxZnYxKSSTySTzmuH1vxdqfiz4kf8IF4bvZLG0tUd9X1O3aNpQgXDRxEk7SG ZULD5lc9AEO71CCCG1t4re3ijhgiQJHHGoVUUDAAA4AA4xXyp8I08ReJviHqtzp3iL+ytTuLSa5u Lz7FHP5u6WMsuw4UZZgcjpjHegD2uf4I+B7q3lFxYXc15Kh8y/kvZWneQjmU5baXJ+b7uM9scV45 4U8aax8KPH1x4b1K7nn0KC7NrNFcq6iOPeSJ405K5Db8LkMG7naw9n/4RL4h/wDRT/8AygW/+Ncf rfwA1HxHrE+rat43+0X0+3zJf7KVN21Qo4WQAcADgUAesa5peral5f8AZniCfSdkUg/c20Uu+Q7d jN5in5Vw2VGC277wxXzB4U1LxJp/xtsIr2SfXtXsbubTwJrqRgeJI2O8qzCNdzOTt4AJwK+q9Js5 tO0axsri7kvJ7e3jikuZM7pmVQC5ySckjPU9epr5s8G/8nQ3P/YV1L/0GagD0u/+DjeLn+3+NfEu pXd+zl1gsGWK1tQyqDHEjqxwCv3uCwAJGck+OadqmqfBX4oXWn/bftNnFLHHfJEmVuIGAcHYSMSB XyOeGyMlSc/W9fIHxt/5K9rv/bv/AOk8dAHu994B1nx3ZySeMtdvrK3nw8ei6XIiRWwyDslkKnz2 +VDkgANu28EV4x8RPBdx8IvFGk6n4f1acRzbpLSRyPOidAocNgBWU7x25BKkYGW+r6+f/wBpr/mV v+3v/wBo0Ae2eG9bh8R+GtN1mDywl5bpKUSQSCNiPmTcOpVsqeByDwK4fx1451MeMdL8CeFZY4tY vXR7m+Ijl+xxcs2EY4L7FLENj5cYyWBW58Ev+SQ6F/28f+lEleMWrazr37SF8lnrH9n6kdQu4Yb3 7MkvlJFHIijYcA/IgXn68mgD2f8A4Ux4NuP3urW19q983+svr+/maaX03FWUcDCjAHAFeKXOq618 EPiRc6bp1zd3Wjo4lFrdZSO5idVJI7bxjb5ijqh4xla9r/4RL4h/9FP/APKBb/41y/iT4Haz4u1G O/1zx39ruo4hCr/2QkeEBJAwkgHVj+dAHqksja/4fguNG1SS0S8SGeG8jhVm8olWOFkGAWTI+YHG 7ODjFfKnxdvNdg8d6rompeIL7U7W3ljkjWZgiDMSlf3a4QMFfBZVGeTgZIr6j8H6BN4W8J2GiT6j JqD2aMguXUqWXcSowWbAVSFAz0UdOlfLnxt/5K9rv/bv/wCk8dAHtd/8Otf+IT/aPHWsSWVgHMtp oulspFsSqgGSUqQ7gbweCMklWAJWvGNc03Wvgj8QbY6bqsdxL9nWdJBGVWaJiQ0ciZPG5DwCeisC D0+u6+fP2mYIVuPDVwsUYndLlHkCjcyqYioJ6kAsxA7bj60Ae52F5b+IfD1texCeO11G0SVRvMci pIgI+ZDlWweqng9DXyx8a/C2jeEfGVnYaHZ/ZLWTT0mZPNeTLmSQE5ck9FH5V9L+BP8Aknnhr/sF Wv8A6KWvAP2jv+Sh6f8A9gqP/wBGy0Aez2Hwg8CaZqNtf2eheXdWsqTQv9rnO11IKnBfBwQOtZfx t8bTeEvBy2un3EkGqao5igkjJVoo1wZHBwRnBVeoI35B+WvTK8/+L3gW48c+Ekh04Qf2nZS+fb+Y oBkG0hog5+7u4PoSi5x1AAeCfh94WTwlp91d6dY61eX0S3txqF7AJ3uJJFDMwaRdwU54BAPcjcST z6+Hp/BPxj8J6do2pX0PhrUIrrbpZvZXijkjidnwjHG0lkYZJO7ceOK8s+H/AMVta+Hlx/Yuo28l xpMdwRPaSqRPanJDiPJG07uSjcZB+6WJr6P8L+LfDnjuyS/0maO4e0dWaOaPEtrIyEcg9DtZ13Lk H5gCeaAOkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf 7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/ AGz/APRi1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqof CdOQ/wC7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r 8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8A RbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc3rvi6HQvFnhvRJ 4Y9mtPOguXnCCJo1UqMEfMXZgoGRyR1ziukryf4y+FvFWvaj4Xv/AArZ+fdaXLNNv82JfKfMRQ4k IB5Q+vTmgDrPGfw58OeOkRtXtpFu4k2RXlu+yVF3A4zghh14YHG5sYJzXzJq2ma78HPiLA8U0El1 a/6RazlQUnhbcnzLnK5G9SM5HOD0avouDxv4k03Rop/EngLWVu94jYaQYbxWO3O7asm9ASG4IIHH zEmubuvh7rPj74lQeJvFFhBpekWG2K309pEnmuUjbevm4LRhWLtuGTwNuOd9AFj9oaxuLv4axzQR 747TUIppzuA2IVeMHnr8zqOPX0zWf+z54xt7/wAON4Ul+S+07zJoQEOJIGfJJbJ+YO5B6cFcZw2P YL+xt9T065sLyPzLW6ieGZNxG5GBDDI5GQT0r5k8UfA7xX4b1R7/AMNeZqNnC7T28sEoS6hCYYZX gl85x5eSSucKSBQB9R1zeueJZrPxLo3h3TLeO41C/czTlydlraoR5kjheQW5RM4UseTxg+KaM3x4 1vTks4pb61tDi0aa+jht5EXABcs6iY4BzvXLZBwSwr1/wB4At/A1nek38+panqEvm3t9NkGUgsV+ Uk4xuYkkkksST0AAM/42/wDJIdd/7d//AEojrz/9mX/maf8At0/9rV2HxVi8X+J/Dlx4c0HwpO8M 8oFxd3N1boCiOGUxgS5+YqDlgMDjGT8vL/CTw543+Ht5qK3/AIOnubXUPL3yQahbb4vLD4wpkAbJ cfxDGM89KAPeK8f/AGjv+Seaf/2FY/8A0VLXrkEjTW8UrwyQO6BmikKlkJH3TtJGR04JHoTXj/xZ 07xj480a10jS/Bl3DBFcJdNcXV/aqxYK67AiyMMYcHdu9RjvQBJ+zj/yTzUP+wrJ/wCioq4j9pGx uI/GWk37R4tZtP8AJjfcPmdJHLDHXgSJ+fsa6/4S6Z438B6de6Tq3hCeexmlNzHLaXlsZFkIVSpD SgFSFByDkEHrn5fRPHPgyx8deGpNHvpJISHE1vOnJhlAIDYzhhhiCD1BOCDggAj+H/jG38ceErbV ovluFxDeRhCojnCguFyTleQRyeCM85A6ivkyb4c/Ev4faoNQ0q2u3dHVFutIczCTo+DGBvKZXBDp tJHfIz2dj4c+MnjqKOw8S6vPpOjTxGSSUpCjsCpAjaOLa5yG5R8Ac55ABAPXNL8Sza14x1XTbK3j Ol6SghubwknzbpsHy4yPlwi5D5O4MyjAxk9JWX4c0Cx8LeH7PRdNWQWlqhVPMbczEkszE+pYk8YH PAA4rUoAKjnnhtbeW4uJY4YIkLySSMFVFAySSeAAOc1JXlfx18L6/wCJvCtkuiRyXSWlw09xZRop ZwEbDgk5JX5hsXJbzOnAoA9QgnhureK4t5Y5oJUDxyRsGV1IyCCOCCOc1JXlfwK8L6/4Z8K3q63H Japd3Cz29lIihkBRcuSDkFvlGxsFfL6cmvVKACuB8WfDebxVrjajLrfkoI1jih+yBvLUdt24ZyxY 8+uO1d9RUVKcai5ZbHVhMZWwdT2tB2la2yf5nk3/AApP/qYf/JL/AO2V5trunQ6Rrl5p0F39rS2k 8szeWY8sPvDaSejZHvjNfT8rtHC7rG0rKpIjQjcx9BkgZPuQK8Buvh541vbye7uNL3zzyNJI32iE bmY5JwGx1Nedi8NGKSpx1+Z9lkGdVa05yxtZKKSsnyrX8Nl+Zo+Efhh/wkWjW2rXOp+RBNI2IY4t zFFbafmJwpJDdj2PPSvXNa8RaT4ehil1W8W3WVisYKszMR1wFBOB69OR6iptG0yPRtFs9Ni2lbaF YyypsDkDlsdiTkn3NcP8SvA2oeIrm21PSgstxFD5MkDyBSw3ZXbkYz8zZyRwBiuhU3QpXpq8tDxa mMhmuPUcZU5aScrbKy6a262WrO40nWNP12xF7pt0txbliu5QQQR1BBwQfqOhB71YurqGys57u4fZ BBG0kjYJ2qoyTgc9BXiXhS48Y+C76eEeH9RurNmIlthC+0uONyOFIzwORkEfgR2Go6T4u8a3C2er QRaJoiSK8sMc4llmGOm5cg4I7gAbgcMVpwxLlD4Xzen9aE4rJqdDEa1Y+x3vzJu3ayu3L5W1T7nn /wANtBk1rxdbTYZbawZbmVxxypyi5wRktjg4yA2Olev+P7OS/wDAmrQxMoZYRMSx4xGwc/jhTj3r T0TRLHw9pcen6fFshTkseWkbuzHuT/gBgACtGnRw3JScHu9yMyzl4rHxxMF7sGuVejvr6/hoeCfC ex+1+OIpvM2/ZIJJsbc78jy8e338/hXs/iPVl0Lw7f6kSoaCEmPepKmQ8ICBzgsQPx7V5/beGNX8 A+K5tY03T/7S0ibdG0Ntlp4YmZSAFJyxBxjGchTnbnIZ4lj8T/EO7j0+y0efTdKt2Ehk1GPymaTa eT1OByAFz1yeoxhRcqNJws+b+tT1MwhSzLHwxLmvY2V22tLatNXve+lrPrqeb+H9DuvEWtW+nWqM TIwMkirkRR5G5zyOB9eTgdSK+mbW1hsrOC0t02QQRrHGuSdqqMAZPPQVh+EvB9j4Rs5Y7WSWaefa Z5pD94qOAFHAGSx7nnknitHWbzUrKzSTS9K/tKcyBWh+0LDtXB+bc3HUAY961w1D2EG5bs4M8zT+ 08RGnR+CO19Lt7t327Ly9TyP4w6st34itdNjKlbGHL4UhhJJgkEngjaEPHqfwr/CPTftfjA3jLLs soHcOo+Xe3yAMcd1ZyBx932NM1jwT4513VrjUr3SVNxO2W2TwhQAAAAN/QAAevHOa3PBWkeM/B01 4R4aW7iulXcpvYkYFc4IO48fMeMenPryKMpYj2kou1+33H0dSrQo5P8AVKFWDny2+Jbv4tfmz1yq 5isrJrm+McEDOoa4uCApYKOC7dwBnr0Fcle6748eECx8HwQS7uWnv45VI9MBl56c5/CuH17w58SP EkxbUbRniDbkt0uYliTrjCh+o3EZOTjvXdUxFl7sW36HyuEyj2kv31eEI9ffTf3J2+92Oy8NeIJ/ F3jbULq2uW/sXToRHBEC0Zkkf/loy/xD5Xxu6ArwDk0zxZ8N5vFWuNqMut+SgjWOKH7IG8tR23bh nLFjz647Ve+HPhm48NeHXS+iWO+uZjJKoCllA+VVLAncOC3tvPvXYUQpe0pJVd3qLE476pjZSwDS jFcqdk7pbvbq7u/X0PJv+FJ/9TD/AOSX/wBsrzbXdOh0jXLzToLv7WltJ5Zm8sx5YfeG0k9GyPfG a+n5XaOF3WNpWVSRGhG5j6DJAyfcgV4DdfDzxre3k93caXvnnkaSRvtEI3MxyTgNjqa5MXhoxSVO OvzPosgzqrWnOWNrJRSVk+Va/hsvzNHwj8MP+Ei0a21a51PyIJpGxDHFuYorbT8xOFJIbsex56V6 54kikn8LavDDG0ksllMqIgyzEoQAAOpqbRtMj0bRbPTYtpW2hWMsqbA5A5bHYk5J9zV6uyjQjThZ btanzWY5tWxeKVSTvGMrxW2l0/xsj5w8AWcd/wCO9JhlZgqzGYFTzmNS4/DKjPtX0TdXUNlZz3dw +yCCNpJGwTtVRknA56CvKdQ8F6l4L8VQeIPDtg2o2MTFjaglpIww2lAPvMMMcEAkfxA4yb3izW9d 8V6c2haT4U1SKO52mSe+hMWNp3YGflH3V5LeoxnBrmw7dCEoyXvfPXse3m0Y5riaNalNeytq24rl 1vK6bTvbyd+h5LdT3Gs6vPceVuurydn8uFScu7Zwo5PU4A5r6P8ACektofhXTtOcMssUIMqswYrI xLOMjjAZiB7etcl4I+GcejTQarrDLPfKoaO3Aylu/qTn5mHHsDnGeCOi8UX/AIogV7bw9oy3DSQj beNcxqInJII8tsZIABBzjJ6HBBeFpOknUmtWRnmYU8wqQwWFkuSPVuy003fRL7+lzwzxjqX9reMN VvA0To07JG8RyrInyKQcnOVUHPvXqnwf0z7L4XuL94dsl5Odr7s740GBxnjDeZ6H8MV55/wrPxf/ ANAj/wAmYv8A4uvQPC0njPw5oEOlP4SW6WFm2SLqEUZwzFsEZOTknnjjHHc4YaMo1nOpF9ejPUzq rRqZdHC4SrF25V8UVol697Ho1eR/FbxjHMp8O6dMrqG/05guRkEFUDeoIy2O4Az94Vp3Vt8TfEFu 8EjWGiIuMmKUq0vOeGUuRjHYrnd37WdB+Euj6ZMJ9RmbU5VbKK6eXEOhGVBO48HqcEHpXXVlUrLk grJ9XoeBgKWCy6p9YxVRTlHaMfe17t6L01/KxxXw78Cza7eRatfJs0uCQMquoP2llP3QDxsyME9+ g7ke60UVtQoRoxsjzs0zSrmNb2lTRLZdl+r7sKKKK2PMCiiigD5k+MfiRvFXxNtfCrapHaaLZ3EN vJL5qtEkrEeZM/QZQMVIJ42NyNxr6P0rSrHQ9Lt9M0y2jtrO3TZFEnRR/MknJJPJJJOSa8I+M/wr 1/VvFk3iPQbKS/guLcPdRpIu+N41C/KhwWBVVwF3EkN0yBWn4Vl+NWt6Pp1hK0GjWsWN2qX8Aa7k RW2lWjcklsHILIu7YCX5ywByHjL/AJOhtv8AsK6b/wCgw19P18wfEn4VeINA8UJqvhm11XULWTyp RdQlprlLkA7mYqS5YsnmF8AAvgYwK938Fv4xubOe98YJY2txLtSHT7NciEKWy7PubLNkcAkAKvcs AAdRWP4ssbjU/BuuWFnH5l1dafcQwpuA3O0bBRk8DJI61sUUAfLHwF8Y2/hzxbNpN78tvrPlQpIE LFZwxEYODwp3sDweSvQZNfU9eB/E/wCB19qWs3WveFfLle6czXNjLLtYysw3NGzcYOSxDEYwcE5C jnPDY+N+meZoWlQarHHa5AF3DEY1C4TbHLMNpUYGFVsYyQMZNAH0H4t8Sw+FPD8upPbyXc5dYbWz iIElzM5wkaDqSTycAnAJAOMVqWH2z+zrb+0fI+3eUn2j7Pny/MwN2zPO3OcZ5xXm/gP4bapaa5D4 w8ZavPqPiExMIoS+Usy+7coIOG4cgKoCLubAPDD1CgD5g/Zx/wCSh6h/2CpP/RsVfQ/iyxuNT8G6 5YWcfmXV1p9xDCm4Dc7RsFGTwMkjrXzhN8PPHPw++Itte+HNJnvY0u2Gn3CqJkeM/LiYjGzKvtYt sH3ipwM17v4Ot/GN5L/bPjCWCzuPKaCHSbE/uYwWBMsh3NukO0AYbCrnuzYAPCPgL4xt/Dni2bSb 35bfWfKhSQIWKzhiIwcHhTvYHg8legya+p68D+J/wOvtS1m617wr5cr3Tma5sZZdrGVmG5o2bjBy WIYjGDgnIUc54bHxv0zzNC0qDVY47XIAu4YjGoXCbY5ZhtKjAwqtjGSBjJoA+g/FviWHwp4fl1J7 eS7nLrDa2cRAkuZnOEjQdSSeTgE4BIBxitSw+2f2dbf2j5H27yk+0fZ8+X5mBu2Z525zjPOK838B /DbVLTXIfGHjLV59R8QmJhFCXylmX3blBBw3DkBVARdzYB4YeoUAFc/428T/APCHeEL7X/sf2z7L 5f7jzfL3bpFT72DjG7PTtXQVx/xS0TUfEfw41bSdJt/tF9P5Plxb1TdtmRjyxAHAJ5NAGxrGiaF4 z0NLXUreDUdNm2TxlXOD3V0dTkZB6qeQSOhNfMnxW+FLeAXg1DT7iS50W4cQq07L5sUu0na2AAwI ViCB2IIGAW9f8Dar498M+Go9N8TeDbu6t9PtysNzp9zbSSmNANqGLzBuIUEZU5OFG0nJNPxppfiX 4uWemabaaJPoWiJL9qnvNYCpOXUtHtWFWLDCszfNjdxyowWAO0+Gmv33ij4eaRrGptG15Okiyui7 Q5SRk3Y6AkKCcYGScADivmz4beJP+FbfEp/7aj8qEebp9/hfMaH5hkjaecOi5I3fLuwCcV9X6Ho1 n4e0Oy0iwTZa2kSxJkAFsdWbAALE5JOOSSa8r+LPwbm8V37+IfD8ka6o6YuraaQhbjamFKHor4VV wcKeDlcEsAeyVn65rNn4e0O91e/fZa2kTSvggFsdFXJALE4AGeSQK+aPD1h8Z/Ct4dA0e01WBT0R 445bZOC/yyPmJc7jnawyeDk8V6P4S+G3iXWNcsfFXxF1ee4vrOUy2umB12Quu3a5KHYvKBiqDnCl ifmWgD0zw5ealqPh+zvdWtI7O8uEMrWybv3KsSURtwB3hSobgfMGwAK+VPjb/wAle13/ALd//SeO vrPUr2ext1lt9Mu9QcuFMVq0SsBg/MfMdBjjHXPI464+bPG3w5+IfjHxffa//wAIn9j+1eX+4/tG 3k27Y1T724Zztz070AfT9fJGoatceAfj9f6td22fI1WaaSMYcmCYscrhgNxjkyMng4z3FfS/hjVt e1Czhj8QeHJ9LvhFmeRZ4ZIGcHGE2yM/I5wV45GTgE8n8VvhSvj5INQ0+4jttat0EKtOzeVLFuJ2 tgEqQWYggdyCDkFQD0SwvrfU9Otr+zk8y1uokmhfaRuRgCpweRkEdaknnhtbeW4uJY4YIkLySSMF VFAySSeAAOc18qaNofxf8C6ilhpFhqts11g7IUS4tssQNzH5okb5RljggDkgGu/0n4beNvG95Fdf E3V51sbWVSmlxvHi4ADHcfKIROWxuALkbhlflNAGx4v1DVPG/wAC9f1NdO+zQ3GLmygc7ZfskciN 5km7A3EJI4C5G0qAWPJ4T9nzxtDpWqXXhfULiOK3v3EtmzkKPtHClOnJdQuMkDKAAZavpOvmzxz8 ANXttUkuvCEcd5p8rgrZvOElgzkkbnIDIMDB3bvmAIOCxAPpOuf1rxZZ6Trmk6FEn2vV9TlAitEc KUhGTJMxPRVVXIHViuB3I8Q8PN8eJJTpNvLfQR2svlSXGpRwkLuY5bzZFLSqOTlC/GMcEV634B8B L4Tt5L/UruTVPEl4ii91GZ2kYgAYjRm52DA5PLYBOAFVQCn8bf8AkkOu/wDbv/6UR1z/AOzj/wAk 81D/ALCsn/oqKvQPHHhv/hLvBeqaGJPLkuov3TlsASKQ6bjg/LuVc4GcZxzXgHgPSPit4F1zUrPR /DHmSTRIbhLxV8htvKlZQ6qWG8jCuerZGV4APp+vkD42/wDJXtd/7d//AEnjr6b02PXNC0Zp9SF3 r2qXdwZbiOyMSR2+VA2RCV0AiUKBySxJLEfMceCeNvhz8Q/GPi++1/8A4RP7H9q8v9x/aNvJt2xq n3twznbnp3oA+n6+QPidpmo+C/i1e3sU22aW7/tWyn2qfvuXB25P3XDLz125xg19P+GNW17ULOGP xB4cn0u+EWZ5FnhkgZwcYTbIz8jnBXjkZOATl/Eb4c2PxD0u2gnupLO8tHLW1yq7wgbG9WTIDAhR 3BBA5xkEA6jSdSh1nRrHVLdZFgvbeO4jWQAMFdQwBwSM4PqasTzw2tvLcXEscMESF5JJGCqigZJJ PAAHOa8f8GHx58MtLfRtY8NSa1odq+6G70iRJJYw+WKrEcPIN7dwpX5jkqBjQ8Tx+PPiFbpo+naX J4Z0G6RXub6/mQ3E0TBcx+UhJQ8tlSRuC4LLkqQDzD9nrQG1Lx5LrDLJ5GlW7MHVlA82QFFVgeSC vmnjuoyex9D/AGjv+Seaf/2FY/8A0VLXpHhjwxpfhHQ4dI0iDyrePlmbl5XPV3PdjgfkAAAAB538 YtI8U+NdGt9F0bwtdskF6Z3upru2RXCqyLsXzCSG3k/NtIwOOeACP9nH/knmof8AYVk/9FRV6B47 /wCSeeJf+wVdf+imrz/4P6V4v8E6dLoer+Epxa3F2bj7bDfW7+WWEaYZN+doCkkgk9gproPigvif WfC+o+H/AA94fvpZrrZGb0XcEMfl5DPjMm85A2FSqggtyR1APP8A9mX/AJmn/t0/9rV6B8bf+SQ6 7/27/wDpRHXB/Cbw349+HuqXwvvCUlxp9+iCYwXlt5sbJu2FQZQCPmIIOOoIPGD3HxWtvEPiLwnq HhzRfDV3dPcvEPtbXNvHEFVlkJUNJvJyoXBVe5zwMgHB/sy/8zT/ANun/tavoCvB/hJ4c8b/AA9v NRW/8HT3NrqHl75INQtt8Xlh8YUyANkuP4hjGeeleoeNrzXhoeoaf4f0O+vL65tGjguobqGBIXbK 53NIHDKPmGF54GRyQAeEfs4/8lD1D/sFSf8Ao2KvR/2hrG4u/hrHNBHvjtNQimnO4DYhV4weevzO o49fTNcR8NfBPxD8BeLV1WTwp9ptZYjbXKLe24cRsysWT95jcCoODweRxnI+g57aHWdGltL+1kWC 9tzHPbSMAwV1wyEoSM4JGVJ9j3oA8j/Z88Y29/4cbwpL8l9p3mTQgIcSQM+SS2T8wdyD04K4zhse 0V8ueKPgd4r8N6o9/wCGvM1Gzhdp7eWCUJdQhMMMrwS+c48vJJXOFJArU0ZvjxrenJZxS31raHFo 019HDbyIuAC5Z1ExwDneuWyDglhQB7XrniWaz8S6N4d0y3juNQv3M05cnZa2qEeZI4XkFuUTOFLH k8YPSVx/gDwBb+BrO9Jv59S1PUJfNvb6bIMpBYr8pJxjcxJJJJYknoB2FABXzR+0jY3EfjLSb9o8 Ws2n+TG+4fM6SOWGOvAkT8/Y19L1zfjnwZY+OvDUmj30kkJDia3nTkwygEBsZwwwxBB6gnBBwQAR /D/xjb+OPCVtq0Xy3C4hvIwhURzhQXC5JyvII5PBGecgdRXyZN8OfiX8PtUGoaVbXbujqi3WkOZh J0fBjA3lMrgh02kjvkZ7Ox8OfGTx1FHYeJdXn0nRp4jJJKUhR2BUgRtHFtc5Dco+AOc8gAgHrml+ JZta8Y6rptlbxnS9JQQ3N4ST5t02D5cZHy4Rch8ncGZRgYyfBP2jv+Sh6f8A9gqP/wBGy19F+HNA sfC3h+z0XTVkFpaoVTzG3MxJLMxPqWJPGBzwAOK8n+Ovw51fxLcWXiDQ7aS8nt7doLq3Vxu8tSzq yLjLHLOCASTlcA80Ae2UV4n4Di+KmreH7DQNRt49D0NLfyDqLR+XfrEh2hEXd8jlRtDsgwo3ZLYz 7ZQAV4v+0J4wuNI0Oy8PWFz5U2pb3ujHKA4gXjYVxkK5J5yM+Wy8gmvaK8v+NfgDUfG2h6fPo0fn alp8rbYDKqCSOTAfBbjcCqEZIGN3U4FAGh8G/D2l6J8OtNubBoJ7jUYluLq6jHLuc/ITk/6vJTHq GOASa8//AGmv+ZW/7e//AGjVDwBD8YtCs73w5pekeVarL5Ym1NMJZsxYM8LFgHXOWO0SLxkD5vmv /Er4T+JdS8PWOtPeT694lj3DUNgVVMWzIWFMqAqFSAqrudpC2B0oA9g8Cf8AJPPDX/YKtf8A0Ute P/tNf8yt/wBvf/tGuk+EEXxDGl6bZ65bx6dodgjCP7TGxu7ofOqxkM2Y0QkEHapwiAZUk1zf7TX/ ADK3/b3/AO0aAPQPgl/ySHQv+3j/ANKJK7yeeG1t5bi4ljhgiQvJJIwVUUDJJJ4AA5zXgfw413x7 4Y+HGn3tp4fg8Q6BJ5xggtJCl3bnztpBAU71LbzhVY8kkgACuo8Qr8QviJZjR7XR/wDhFtEufmuL y7uVeeeAkYTyk+aNipJZD1xtLAZDAHmn7PWgNqXjyXWGWTyNKt2YOrKB5sgKKrA8kFfNPHdRk9j6 H+0d/wAk80//ALCsf/oqWvSPDHhjS/COhw6RpEHlW8fLM3Lyuerue7HA/IAAAADzf9o7/knmn/8A YVj/APRUtAB+zj/yTzUP+wrJ/wCioq9gr5s+D2peN9D8IX2p6FpVprWireuLjTxIY7pXWEEvGcYI I8sbfmJIwqjJNd/qWu/Ejxjoy2Wg+FpPDiXiBX1PUbwJJCNp3qIwPMQlgVV8E4w2FyCoB5Z4Q0dP FX7Q95Nbv51jbarc6k08Eq4KJKWjYHncpcxjjOQ3GOo9n+Nv/JIdd/7d/wD0ojrY8C+BdL8B6GLC wHm3EmGurt1w9w47n0UZOF7Z7kknl/irF4v8T+HLjw5oPhSd4Z5QLi7ubq3QFEcMpjAlz8xUHLAY HGMn5QDj/wBmX/maf+3T/wBrV9AV4P8ACTw543+Ht5qK3/g6e5tdQ8vfJBqFtvi8sPjCmQBslx/E MYzz0r3SCRpreKV4ZIHdAzRSFSyEj7p2kjI6cEj0JoA+RPidpmo+C/i1e3sU22aW7/tWyn2qfvuX B25P3XDLz125xg19Z6TqUOs6NY6pbrIsF7bx3EayABgrqGAOCRnB9TXL/Eb4c2PxD0u2gnupLO8t HLW1yq7wgbG9WTIDAhR3BBA5xkHj/Bh8efDLS30bWPDUmtaHavuhu9IkSSWMPliqxHDyDe3cKV+Y 5KgYAPYJ54bW3luLiWOGCJC8kkjBVRQMkkngADnNfMH7PWgNqXjyXWGWTyNKt2YOrKB5sgKKrA8k FfNPHdRk9j6f4nj8efEK3TR9O0uTwzoN0ivc31/MhuJomC5j8pCSh5bKkjcFwWXJU954Y8MaX4R0 OHSNIg8q3j5Zm5eVz1dz3Y4H5AAAAAAHL/G3/kkOu/8Abv8A+lEdc3+zfPC3gXU7dZYzOmps7xhh uVWijCkjqASrAHvtPpXpnirw9b+K/C+o6HdNsju4igfBPluDlHwCM7WCnGecYPFfOGjeFfit8NvE Kf2Ppk8n2uUQt5AWe2uFVxgyY/1anPDNsYBmwR81AH0P47/5J54l/wCwVdf+imrwD9nH/koeof8A YKk/9GxV3epeGvH/AIq8K65deM7iOKAWUstn4f0wZ3XCIwTey5ZhuCuEDsCxXONu04Hw5+Efj/w1 rNvrCalpujmRGjuYpF+0yeXuDbCo+Uhii8rICAeoPFAH0HXB/F/wpN4t+H13b2gka8snF7bxpk+a yBgUwASSVZwAMZbbzjNdxAJlt4luJI5JwgEjxoUVmxyQpJIGe2Tj1NSUAfJnhPxjc3Hw3uvh7byy JqGq6nBbWcr3DqscUzDzBwpwm5cEZ+bz2ODg5+p9J02HRtGsdLt2kaCyt47eNpCCxVFCgnAAzgeg ryP4c/Cp/D3xQ17V7m18qwsJXj0kAsVYSjOQxIJ2RtsOQQWZsElK9ooA4f4wWNxqHwo1+G1j8yRY kmI3AYSORJHPPoqsffHHNeYfs7eMbe0nu/CN18kl3KbqzZUJ3uE/eKxzx8qKRx2bJztFfQ9fNnjn 4AavbapJdeEI47zT5XBWzecJLBnJI3OQGQYGDu3fMAQcFiAfSdc34v8AEs2g29jaadbx3WtapcC1 sLdydoYjLSyBfm8pB8zFQew4zkeGeHr348T2ZtbBNVEdv1OpQQo53En79wAz9+5xwOBivV/h78Nn 8JXl1resavPq/iG9iWKa6kdiETC5QFiS/Kj5mxwqgBecgHoFFFFAHP8Ajv8A5J54l/7BV1/6KavA P2cf+Sh6h/2CpP8A0bFXv/jv/knniX/sFXX/AKKavmD4Qf8ACUp4tu5/CX2F7+HT5ZJIL3Oy4j3I NgI6MWKEcqOOTjIIB9f18yfHuFtZ+K+maZp5juLx7KC1ESyLkSvLJtRsnCkh1POOGB6GvT08e+PN Qt7uCw+Gd3FqEDvGxu75EgU4wjKzBfOG4NkKQMBcN83FjwF8NptC1S68TeJ7yPVvFN27FrkZKQKe MR5A5K8ZwMD5VAGdwBn/ABb8GNN8HItO02SR00BIp0WTaWkihjKNk5ABCMW4HO3AHNch+zZr7C41 nw5I0hRkF9AoVdqkEJISeuTmLA5Hynp3+g68H1P4Na74Q8UReKPh9cQTtbymSPTrvAZFYBSgdjh1 IZ+pVguMFm5oA94r58/aZnha48NW6yxmdEuXeMMNyqxiCkjqASrAHvtPpXo8fjrxJKk1mvw61ka1 Em9oWnhW0I3D7t0TtY7WBwFJzkdiRl+E/h3ql54obxp49mgvNa+U2VlEd0NiMZAx03KSQAMgHLZZ juAB1ngDQG8L+A9G0eVZFngtw06OysUlcl5FyvBAZmAxngDk9a8A8czw2v7TMdxcSxwwRanp7ySS MFVFCQkkk8AAc5r6jrwv4yfCPV/EfiCPxD4bt47me4RYry2MoRtyjCyAuwXG0KpAxjaDg5JAB7pX zB+0d/yUPT/+wVH/AOjZa6PwpqPxw1TRhpqW0dogfy11TV4BHPCFVTja3Lg4xuMbkljluMih44+D fiPW/GtumnSSXryWSS6jrF/JsSS4LS54GcDaqKEQEINmeuSAe1+BP+SeeGv+wVa/+ilrx/8Aaa/5 lb/t7/8AaNemeBtF8V+F/DUdprmp2mqi1tykFpaWwV0CALHGsrMisNq/xKDluWwK83+LPhvx78Qt UsRY+EpLfT7BHEJnvLbzZGfbvLASkAfKAAM9CSecAA7z4Jf8kh0L/t4/9KJK9ArzP4XJ4p8M+GLH w5rPhC7iS2cql5De20ikPI7Mzr5gKhdw+7uJ547H0ygAooooA+YPGX/J0Nt/2FdN/wDQYa+n68L+ I/wp8V3/AI8n8Z+Gbi0mnD288VuzBJUljCKNu8bGA2BvmI7jBwM9RB498eQ3EWm3/wAM7ttQe3Dp JbXyG3dwfm3SYKRDAcgFmOdo53ZoAk+Ot9b2nwo1KGeTZJdywQwDaTvcSLIRx0+VGPPp64rP+APh h9F8DSapcweXdatL5qk7gxgUYjyp4GSXYEdVdTk8Ykv/AAR4j+JGqWd540aPSdDtXDx6Baz+c8jD cGMsq4GTxgrnCsQNjZJ9QgghtbeK3t4o4YIkCRxxqFVFAwAAOAAOMUAfJmoatceAfj9f6td22fI1 WaaSMYcmCYscrhgNxjkyMng4z3FfV9hfW+p6dbX9nJ5lrdRJNC+0jcjAFTg8jII61538VvhSvj5I NQ0+4jttat0EKtOzeVLFuJ2tgEqQWYggdyCDkFfHNG0P4v8AgXUUsNIsNVtmusHZCiXFtliBuY/N EjfKMscEAckA0AfVc88Nrby3FxLHDBEheSSRgqooGSSTwABzmsPwdr154n0P+2biy+xWt3Kz2ELg iX7OMBWkzxuYhmG3I2svJ6ny/Sfht428b3kV18TdXnWxtZVKaXG8eLgAMdx8ohE5bG4AuRuGV+U1 7JqV7PY26y2+mXeoOXCmK1aJWAwfmPmOgxxjrnkcdcAHyZ/zcL/3Nf8A7d19f18wf8K5+If/AAsP /hK/+ET/AOYr/aX2X+0bf/nr5mzfu/DOPfFfQ9nq2pS6Gb268OX1vfLtDaes9u7seMlH8wIVBJ5Y qTtPHQEA+eP2jv8Akoen/wDYKj/9Gy19D+LLG41PwbrlhZx+ZdXWn3EMKbgNztGwUZPAySOteAfE L4ffEPxr40vtZj8OTx2r7Y7aGbULdjHGoAH/AC0wuTlio4BY8nqfe/C+pa5qOlofEGhSaVqCIolA mikikbnJjKOxA4Bw2MbsAtgmgD50+AvjG38OeLZtJvflt9Z8qFJAhYrOGIjBweFO9geDyV6DJr6n rwP4n/A6+1LWbrXvCvlyvdOZrmxll2sZWYbmjZuMHJYhiMYOCchRznhsfG/TPM0LSoNVjjtcgC7h iMahcJtjlmG0qMDCq2MZIGMmgD6D8W+JYfCnh+XUnt5LucusNrZxECS5mc4SNB1JJ5OATgEgHGK1 LD7Z/Z1t/aPkfbvKT7R9nz5fmYG7ZnnbnOM84rzfwH8NtUtNch8YeMtXn1HxCYmEUJfKWZfduUEH DcOQFUBF3NgHhh6Bqeo3Vh5X2bRr7Ut+d32R4F8vGMZ82ROue2ehzjjIB84eMv8Ak6G2/wCwrpv/ AKDDX0/XzB4p+H3xP8S+NLvxMPDn2G6llSSIQahCDDsCqmG8zO4BV+YY55AHQe/6Jrmt33kR6t4S vtLmfd5j/a7aeGPGcfMsm85AHROCfQZoAPHf/JPPEv8A2Crr/wBFNXgH7OP/ACUPUP8AsFSf+jYq 9r8e3XiG70HVNE0Xwpd6g95byWv2lry3hiCyRkF13PvJUkDaVXODz0z5J8NfBPxD8BeLV1WTwp9p tZYjbXKLe24cRsysWT95jcCoODweRxnIAPV/jBY3GofCjX4bWPzJFiSYjcBhI5Ekc8+iqx98cc15 J+z542h0rVLrwvqFxHFb37iWzZyFH2jhSnTkuoXGSBlAAMtX0XY3Et3ZxzzWU9lI2cwTlC6YJHJR mXnrwT19eK+dPHPwA1e21SS68IRx3mnyuCtm84SWDOSRucgMgwMHdu+YAg4LEA+k65/WvFlnpOua ToUSfa9X1OUCK0RwpSEZMkzE9FVVcgdWK4HcjxDw83x4klOk28t9BHay+VJcalHCQu5jlvNkUtKo 5OUL8YxwRXrfgHwEvhO3kv8AUruTVPEl4ii91GZ2kYgAYjRm52DA5PLYBOAFVQDU8d/8k88S/wDY Kuv/AEU1eAfs4/8AJQ9Q/wCwVJ/6Nir2vx7deIbvQdU0TRfCl3qD3lvJa/aWvLeGILJGQXXc+8lS QNpVc4PPTPknw18E/EPwF4tXVZPCn2m1liNtcot7bhxGzKxZP3mNwKg4PB5HGcgA9X+MFjcah8KN fhtY/MkWJJiNwGEjkSRzz6KrH3xxzXmH7O3jG3tJ7vwjdfJJdym6s2VCd7hP3isc8fKikcdmyc7R Xv8AY3Et3ZxzzWU9lI2cwTlC6YJHJRmXnrwT19eK+dPHPwA1e21SS68IRx3mnyuCtm84SWDOSRuc gMgwMHdu+YAg4LEA+k65vxf4lm0G3sbTTreO61rVLgWthbuTtDEZaWQL83lIPmYqD2HGcjwzw9e/ HiezNrYJqojt+p1KCFHO4k/fuAGfv3OOBwMV6v8AD34bP4SvLrW9Y1efV/EN7EsU11I7EImFygLE l+VHzNjhVAC85AD42/8AJIdd/wC3f/0ojrz/APZl/wCZp/7dP/a1dh8VYvF/ifw5ceHNB8KTvDPK BcXdzdW6AojhlMYEufmKg5YDA4xk/Ly/wk8OeN/h7eait/4OnubXUPL3yQahbb4vLD4wpkAbJcfx DGM89KAPeKKjgkaa3ileGSB3QM0UhUshI+6dpIyOnBI9CakoAK+SPjrY3Fp8V9Smnj2R3cUE0B3A 70Eaxk8dPmRhz6emK+t64f4m/Du3+IOhxxCb7PqdnueymYnYC2NyOB/C21eQMjAIzypAOk8N63D4 j8NabrMHlhLy3SUokgkEbEfMm4dSrZU8DkHgVn/EGeG2+HPiR55Y4kOmXCBnYKCzRlVHPcsQAO5I FeEaHY/Ff4S3Fzb2GhSahZ3TtiOOJruBmUgeaBGQyEjA+bbuHUEqNvf3mgeP/HfhXVYfF9raWAit 5vsWlafJt+2XGz900z+Yw2K2CF3AFuW4UZAOb/Zl/wCZp/7dP/a1fQFfP/w7+EvxC8Pyy3kfiGDw 79piKywpGt25Ib5QyH930yQwYkZx3OPfII2ht4onmkndECtLIFDOQPvHaAMnrwAPQCgCSiiigD5/ /aa/5lb/ALe//aNeufD6eG5+HPht4JY5UGmW6FkYMAyxhWHHcMCCOxBFc/8AF/4fzeO/DUJ0/wAv +1tPdpbYOxAlVh88ec4BbCkE91AyASR5h4KX4y+DribQNO0GS4t4UaQW98qm3QsVJMc29QTz91XI yWO3OSADs/2jv+Seaf8A9hWP/wBFS0fs4/8AJPNQ/wCwrJ/6KirD8ffDbxprXhXTpdUvJPEPihr0 RItvtit7W32SM2OEXLFU3OwBJCKOnzdJ8L/h7418D+dbXWvaV/ZjyiU2cVu0/mMdodt58tkbaigf eXkkrxyAbHxt/wCSQ67/ANu//pRHXn/7Mv8AzNP/AG6f+1q7z4rW3iHxF4T1Dw5ovhq7unuXiH2t rm3jiCqyyEqGk3k5ULgqvc54GeL+Enhzxv8AD281Fb/wdPc2uoeXvkg1C23xeWHxhTIA2S4/iGMZ 56UAe8V8wfs4/wDJQ9Q/7BUn/o2Kvd/G15rw0PUNP8P6HfXl9c2jRwXUN1DAkLtlc7mkDhlHzDC8 8DI5I8Y+Gvgn4h+AvFq6rJ4U+02ssRtrlFvbcOI2ZWLJ+8xuBUHB4PI4zkAH0fRUcEjTW8UrwyQO 6BmikKlkJH3TtJGR04JHoTUlABXzB4y/5Ohtv+wrpv8A6DDX0fqeo3Vh5X2bRr7Ut+d32R4F8vGM Z82ROue2ehzjjPzh4p+H3xP8S+NLvxMPDn2G6llSSIQahCDDsCqmG8zO4BV+YY55AHQAH0/Xzx+0 j4euF1HSfEqtutXi+wSDAHluC8i98ncGftxs68ivZ9E1zW77yI9W8JX2lzPu8x/tdtPDHjOPmWTe cgDonBPoM1c8R6BY+KfD95oupLIbS6QK/lttZSCGVgfUMAecjjkEcUAcf8EtfbXvhlYrK0jT6c7W LsyqoIQAoFx1AjZBk4OQevU+iV4X4a8CePPhT4gnl0C1tPEuk3qBZ4hMlrJlR8rHeTtIZmAwXBGc gEjHYX/i/wAYa/pfleEvB2pWM8zmBr7XPLthan5f3giLFpAASc4wCOj8rQB45410dPGP7RdzpFs/ nQ3N3BFM0Eq5VEhTzsE8blCvxzyuME8V9T1w/wAO/h3b+CrOW7u5vt/iG+y99fuSxYk7iik87c8k nljyewXpNb1LUNOt92naFd6tOyOVSGaGJVYD5Q7SOpAJPVQ2MHjpkA+VPgl/yV7Qv+3j/wBJ5K+v 6+YPBPw5+Ifg7xfY6/8A8In9s+y+Z+4/tG3j3bo2T7244xuz07V9FyareJpcN2vh/UpJ3fa1kslv 5sY5+ZiZQmOB0Yn5hx1wAfOnjL/k6G2/7Cum/wDoMNez/GCxuNQ+FGvw2sfmSLEkxG4DCRyJI559 FVj7445rxi++H3xPu/H0ni0eHM3X9oC+iin1CGUJtcMkZPmAlVAVeMcDjFfR+jX17qGnJNqOkT6X dcB7eaWOXBwCSrRsQVySATgnHQUAfPn7N+tw2niXV9Gl8tXv7dJYnaQKS0RPyKv8RKyM3B4CHj0+ k6+cPGPwH13S9c/tLwQfOtfNWSCAXIintW5PyuxAKqQMNu3cjg4LHf8ADvjL406v5dsvhSxj8ry4 5bvU7WS2znjeQXXd0JOxTj05AoA4z9oqeGb4jWqRSxu8OmRJKqsCUbzJGw3odrKcHsQe9fUdfPHj r4K+Jda8W2kmnTfbfPtA2oavfTqgkudzknYMsq7RGqqikKNo7E1634L8P+KNFt1HiPxZJrBFukaQ C2RFiYAbiZMb5TxgM2M8kgk8AEngzxPZ/EHwXHqclnAkdz5sFzZNKJwmCVKPwM5XBwR0Ydq8k+J/ wOsdN0a617wr5kSWqGa5sZZdyiJVG5o2bnIwWIYnOTgjAU2/hfpXxM+H/nWFz4S+26RcyiV0S+tl khc7Qzqd/wA3yj7pxkgYK857DxF4g8ReK9D1Xw/oXg7Vba6uM2Nxc6wscEEMcm5HkUhyZcDONmRy DzwGAOb/AGctfvtQ8P6potw0bWmlvG1rhcMolMjMpPcblyO/zHnGAPbK4v4Z+AYfAHho2bSx3GoX LiW8uEQAFsYCKcZKLzjPcscDdgdpQAV80ftI2NxH4y0m/aPFrNp/kxvuHzOkjlhjrwJE/P2NfS9c 3458GWPjrw1Jo99JJCQ4mt505MMoBAbGcMMMQQeoJwQcEAGf8J9bh1z4ZaHNF5avbW62csayByjR DZ83oWUK+D0DDr1PYTzw2tvLcXEscMESF5JJGCqigZJJPAAHOa+ZNM8K/FH4S6xLfaTpn9o28uIZ FtA1zDcZUkExriQbTn5iFwcjOGw3peiQfEPx3b/ZfGVlaaHoMiJJNFZ7kuL1CP8AUt+8YxoeN+dr Y+Xu2ADzT9nH/koeof8AYKk/9GxV9P184eAPg78QtI1hNVTVIPDki74nbctzIyFc/wCrGY3UnHDM MEZxkDP0HpVrd2Wl29vf6hJqF2iYluniSMyt3O1AAo7AegGSTkkAuUUUUAef/G3/AJJDrv8A27/+ lEdef/sy/wDM0/8Abp/7WrtPiininxN4YvvDmjeELuVLlwr3k17bRqAkiMrIvmEsG2n720jjjsOP +E3hvx78PdUvhfeEpLjT79EExgvLbzY2TdsKgygEfMQQcdQQeMEA98r5A+CX/JXtC/7eP/SeSvqf U9W1K006Kax8OX1/dSxFxbrPbx+U+AQkjNJgZJxlN+MHrxn548E/Dn4h+DvF9jr/APwif2z7L5n7 j+0bePdujZPvbjjG7PTtQB9P18weMv8Ak6G2/wCwrpv/AKDDX0XJqt4mlw3a+H9Sknd9rWSyW/mx jn5mJlCY4HRifmHHXHzpffD74n3fj6TxaPDmbr+0BfRRT6hDKE2uGSMnzASqgKvGOBxigD6fqnq2 mw6zo19pdw0iwXtvJbyNGQGCupUkZBGcH0NR6NfXuoack2o6RPpd1wHt5pY5cHAJKtGxBXJIBOCc dBWhQB8meBvEVz8IvHmtWWsRSMEt5reWESOiSSoN8TAbSSGI2qxAwJd3TIPu/wAINDm0b4fWlxd3 Ulzeau51S4keQvlpQpHJAOdoQnOfmLckYrk/HfwqfxP8YdI1FbXOkXcQk1ORSx5hwMNyNu9TGg2n PDNj5ST7RQBj+LLG41PwbrlhZx+ZdXWn3EMKbgNztGwUZPAySOtfOHwF8Y2/hzxbNpN78tvrPlQp IELFZwxEYODwp3sDweSvQZNfU9eB/E/4HX2pazda94V8uV7pzNc2Msu1jKzDc0bNxg5LEMRjBwTk KAD3ysPxb4lh8KeH5dSe3ku5y6w2tnEQJLmZzhI0HUknk4BOASAcYr588Nj436Z5mhaVBqscdrkA XcMRjULhNscsw2lRgYVWxjJAxk16f4D+G2qWmuQ+MPGWrz6j4hMTCKEvlLMvu3KCDhuHICqAi7mw DwwAOo8UeJ7zwd8P5df1GzgvL61ih+0QW8pjjaRmRG2MQSFBYkZGcCtDWNE0LxnoaWupW8Go6bNs njKucHuro6nIyD1U8gkdCax/ilomo+I/hxq2k6Tb/aL6fyfLi3qm7bMjHliAOATya5vwNqvj3wz4 aj03xN4Nu7q30+3Kw3On3NtJKY0A2oYvMG4hQRlTk4UbSckgHkHxW+FLeAXg1DT7iS50W4cQq07L 5sUu0na2AAwIViCB2IIGAW+h/hpr994o+HmkaxqbRteTpIsrou0OUkZN2OgJCgnGBknAA4ri/Gml +Jfi5Z6Zptpok+haIkv2qe81gKk5dS0e1YVYsMKzN82N3HKjBb1DQ9Gs/D2h2WkWCbLW0iWJMgAt jqzYABYnJJxySTQB84eMv+Tobb/sK6b/AOgw19P188fG34Y67feKJfE2iWM+oW9zFH9qjhIeSORQ IxtjA3FSoTpuIIcnAxXb+Dn+J3iP7D/wlSQaNptv5Nwz26hLu+K8hHAYiNSQC42qT90AAtgAz/2j v+Seaf8A9hWP/wBFS0fs4/8AJPNQ/wCwrJ/6KiqP4s6d4x8eaNa6Rpfgy7hgiuEumuLq/tVYsFdd gRZGGMODu3eox3qP4S6Z438B6de6Tq3hCeexmlNzHLaXlsZFkIVSpDSgFSFByDkEHrn5QD0Txj4u h8H2+k3FxDG8F9qcNjJJJOIlgVwxMpJBGFC5xx9RUnizwXoXjXTls9atPN8rcYJkYpJCzDBKsPwO DlSQMg4Fcv8AGvwtrPi7wbZ2Gh2f2u6j1BJmTzUjwgjkBOXIHVh+dSaJ4t8a6X4f3+L/AATqU1xb oitcaVJb3DXBJxuMKuCp+7nbuH3jhQMUAeCeP/BGo/CvxbZXVldeZatL9p0y6YKXVo2U7XUjG5SV 5xtbIPqo+m4PEsy/DSLxTcW8ck40cajJBGSis3k+YVBOSBnjvj3rz/xV4P1/4t+INKmv9Nk0Dw3Y pvU3Tr9tnEoBfEalhGRsVcNgjJJ3H5R6R4l0prnwLq+j6XbRh5NMmtbW3j2ooJiKog6BR0HYCgCO wm0vx/4Gtpry1guLDVbRHmt/M8xVJALJuGPmRgRkYIZexFeCfFn4Nw+FLB/EPh+SRtLR8XVtNIC1 vufClD1ZMsq4OWHBy2SV7f4Yp8RvBulx6FrHhCS70uN2aGW3vbYSwBtzFdpkAcFjnkgjLcngC54u uvEvxN8LtoWh+Fr7S7W7lC3d5ryrbeUIysihIwzO25gBu2kDkdyVALnwK1++174cot+0bHTrg2ML Ku0mJI0KhuxIDYzxwBnJyT4Z8NvEn/CtviU/9tR+VCPN0+/wvmND8wyRtPOHRckbvl3YBOK+n/Bf hOz8FeF7XRbN/N8rLzTlAjTSMcsxA/ADOSFCjJxmvO/iz8G5vFd+/iHw/JGuqOmLq2mkIW42phSh 6K+FVcHCng5XBLAHslZ+uazZ+HtDvdXv32WtpE0r4IBbHRVyQCxOABnkkCvmjw9YfGfwreHQNHtN VgU9EeOOW2Tgv8sj5iXO452sMng5PFej+Evht4l1jXLHxV8RdXnuL6zlMtrpgddkLrt2uSh2LygY qg5wpYn5loA9M8OXmpaj4fs73VrSOzvLhDK1sm79yrElEbcAd4UqG4HzBsACvnTwb/ydDc/9hXUv /QZq+i9b1LUNOt92naFd6tOyOVSGaGJVYD5Q7SOpAJPVQ2MHjpn580XwT8T9I+Io8ZHwpBNdNdy3 MsAvYVRvN3B1U+YSOHbBOccZz0IB9L18gfG3/kr2u/8Abv8A+k8dfVceq3j6XNdt4f1KOdH2rZNJ b+bIOPmUiUpjk9WB+U8dM/PHj74b+PfF/jfU9dt/C0lvBcugjjkvrYttRFQE4kwCQucc4zjJxmgD 6br5/wD2mv8AmVv+3v8A9o17B4Y1bXtQs4Y/EHhyfS74RZnkWeGSBnBxhNsjPyOcFeORk4BPk/xb 8OeN/iFeacth4OntrXT/ADNkk+oW2+XzAmcqJCFwUP8AEc5zx0oA7j4Jf8kh0L/t4/8ASiSvCNQ1 a48A/H6/1a7ts+Rqs00kYw5MExY5XDAbjHJkZPBxnuK9z+FNt4h8O+E9P8Oa14au7V7Z5R9rW5t5 IirM0gLBZN4OWK4Ct2OeTiv8VvhSvj5INQ0+4jttat0EKtOzeVLFuJ2tgEqQWYggdyCDkFQD0Swv rfU9Otr+zk8y1uokmhfaRuRgCpweRkEdaknnhtbeW4uJY4YIkLySSMFVFAySSeAAOc18qaNofxf8 C6ilhpFhqts11g7IUS4tssQNzH5okb5RljggDkgGu/0n4beNvG95FdfE3V51sbWVSmlxvHi4ADHc fKIROWxuALkbhlflNAHqHg7XrzxPof8AbNxZfYrW7lZ7CFwRL9nGArSZ43MQzDbkbWXk9T8wfG3/ AJK9rv8A27/+k8dfW99cS2lnJPDZT3si4xBAUDvkgcF2VeOvJHT14r5s8ffDfx74v8b6nrtv4Wkt 4Ll0Eccl9bFtqIqAnEmASFzjnGcZOM0AfTdfP/7TX/Mrf9vf/tGvZNF1jWL3S5p9V8MXem3kSFvs wuoJhMfmwsbq4GcAffCDLdSATXjHxW8IePfH/iWC7sfDN3Bp9rbiKGK4v7bJYks77RIQpOQvBOQi knsAD2PwJ/yTzw1/2CrX/wBFLXgH7R3/ACUPT/8AsFR/+jZa9r+HEviS18NWOjeI/D0mnz2FusCX CXEMkUqIFVOFcsHx14x8pORkKOH+Ovw51fxLcWXiDQ7aS8nt7doLq3Vxu8tSzqyLjLHLOCASTlcA 80Ae2Vzeu+LodC8WeG9Enhj2a086C5ecIImjVSowR8xdmCgZHJHXOK838BxfFTVvD9hoGo28eh6G lv5B1Fo/Lv1iQ7QiLu+Ryo2h2QYUbslsZ1PjL4W8Va9qPhe/8K2fn3WlyzTb/NiXynzEUOJCAeUP r05oA6zxn8OfDnjpEbV7aRbuJNkV5bvslRdwOM4IYdeGBxubGCc18yatpmu/Bz4iwPFNBJdWv+kW s5UFJ4W3J8y5yuRvUjORzg9Gr6Lg8b+JNN0aKfxJ4C1lbveI2GkGG8Vjtzu2rJvQEhuCCBx8xJrm 7r4e6z4++JUHibxRYQaXpFhtit9PaRJ5rlI23r5uC0YVi7bhk8DbjnfQB7BUYnha4e3WWMzoiu8Y YblViQpI6gEqwB77T6VJXzB4P+Gfj2z+KtvdXVvPH9g1BJrzU3nISdCSzlXPzSb13A4B+/h9uTQB 9P0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNjP92qej/I848B f8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrGn/ AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaXr+iC iiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c58L/ APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+KH/I tW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAr5/8A2mv+ZW/7e/8A2jXvk4ma3lW3kjjnKERvIhdVbHBKggkZ7ZGfUV5f44+F GteP7izl1bxZaRJZoywxWuklVBYjcx3TEknao64+UYA5yAanwS/5JDoX/bx/6USV6BXD+C/BviDw Zo9ro0XiSxvNNglLhJtKZZAjNuZFdZsDJLEEq2C3cACu4oAK8f8A2jv+Seaf/wBhWP8A9FS17BXm /jf4deIPHunW1hqfiqxgtYJfOCWmkMu98EAktOx4Bbpj7xznjABj/s4/8k81D/sKyf8AoqKvYK83 8EfDrxB4C065sNM8VWM9rPL5xS70hm2PgAkFZ1PIC9c/dGMc59IoAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigDn/Hf/JPPEv8A2Crr/wBFNXgH7OP/ACUPUP8AsFSf +jYq938VaB4g8Q6dqOl2uvWNhYXsRhP/ABLGlmVGGHG8zBTn5h9wYB45Ga4fwd8FtU8D65/a2k+L oGmaJoZI59K3JIhwcHEwI5Cngjp6ZBAPYKKr2KXkdnGt/PBPdDO+SCExI3JxhSzEcY/iPrx0qxQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A9GLUz+Fn NjP92qej/I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6P49/5ErU P+2f/oxaxp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7XVUPhOnIf 92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v/oD1znwv /wCRluf+vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2rtfih/yL Vt/1+L/6A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/wDIlah/2z/9GLXS Vzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLXnHgL/ AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPAX/I66f8A9tP/AEW1 e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/wCvxf8A0B65z4X/ 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 xfYFeacAq7BWMqbCMLyQoOQMAAkVufArXNU8Q+DdSv8AV7+e9um1WUb5nztBjiO1R0Vck4UYAzwK APUKK5vxKfG32iBfC0fh8QBCZn1R5ixbPAVYxgADuSc56DHPhnwz+Ivi7xV8UtBs9Y1uee1H2jMK KkSP+4c/MqABsFQRuzjtigD6XooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAorL1+w1PUtLaDR9ak0e83hluVt45xjurI4wQR6EHIHOMg5fhbxZ/a15e6FqqQWn iXTMC9tIn3I6kArNETyY2DKcH5l3AN2JAOoooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8 iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH /bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ACOu n/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHr nPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8 mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFt Sn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAfHnxf8KQ+EviDd29oI1s71Be28aYHlK5YFMAAABlcADOF285zX 1P4O19fFPg7StaVoy91bq0vlqyqso+WRQG5wHDDv06nrXF/HTwj/AMJH4GfUrdc32jbrlOfvQkDz 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 Lc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8A kWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8 d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFV76ws 9Ts5LO/tILu1kxvhnjEiNggjKng4IB/CrFFAFewsbfTNOtrCzj8u1tYkhhTcTtRQAoyeTgAdasUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXm/jf4deIPHunW1hqfiqxgtYJfOCWmkM u98EAktOx4Bbpj7xznjHpFFAHm/w/wDhrrHw/wDPgs/E8F3Y3MqSTQT6e/G3IbyyJsKzDALEH7q8 HGK9IoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKAKd/pVjqb2b31tHObK4F1b7+QkoVlD46EgMcZ6HBHIBFyiigAooooAKKKKACuX8VaB4g8Q6 dqOl2uvWNhYXsRhP/EsaWZUYYcbzMFOfmH3BgHjkZrqKKAPH/B3wW1TwPrn9raT4ugaZomhkjn0r ckiHBwcTAjkKeCOnpkH1ixS8js41v54J7oZ3yQQmJG5OMKWYjjH8R9eOlWKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr m/Hv/Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10//tp/6LavR/Hv /Ilah/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kXVf8At78jzjwF /wAjrp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8 X/0B65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wChpXPL+Kj5vE/8 jaHy/JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr8UP+Ratv+vxf/QHrivAX/I66f/20 /wDRbUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzY z/dqno/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ ALZ/+jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp/wCi2r2uvFPAX/I66f8A9tP/AEW1e11VD4Tp yH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK6P4of8i1bf9fi/+gPX OfC//kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8i1bf9fi/+gPXFeAv+R10/wD7af8Aotq7X4of 8i1bf9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+bNB1L4r3 /wAXrUX66zBtvUa9tQGW0ityxVsKSY9m1JArcliuQS3NfSdFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUVHPPDa28txcSxwwRIXkkkYKqKBkkk8AAc5rxf4eePpvH/xn v7xYpLfT7bR5YrO3dySF86Il2GcB24zjsFGTtyQD2yiiigCOczLbytbxxyThCY0kcorNjgFgCQM9 8HHoa+ePij47+J/hm4ttM1C602wS6t3YT6RC+2UE7SvmSglXXGfkwRvBzyMfRdfP/wC01/zK3/b3 /wC0aAPZPBc8114F8PXFxLJNPLpls8kkjFmdjEpJJPJJPOa3K5/wJ/yTzw1/2CrX/wBFLXQUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBT1aS+h0a+l0uGOfUEt5GtYpDhXlCnYp5HBbA 6j6ivBPhRffEm++JnmazJrjaevnDUUvVdYYyU3qoR8KjbmiIVQCFPA25r6HooAKKKKACiiigAooo oAKKKKACiiigArzv4jWXxBtre41jwdr8hSNFZtJNlC7EAHc0blSWPQ7Dkn5sH7q16JRQB8oaF8Wv iHrfiHTNJ/4Sfyft13Fbeb9gt22b3C7sbBnGc4yK+l/D2l6tplmV1jxBPrN03WR7aKBFwT91UXIy CM7mbpkYzivlT4v+FIfCXxBu7e0Ea2d6gvbeNMDylcsCmAAAAyuABnC7ec5r6n8Ha+vinwdpWtK0 Ze6t1aXy1ZVWUfLIoDc4Dhh36dT1oA3K8v8AilL4y8OaPq3ifSfGH2exg8ny9N/syF9u5kjP71sk 8ktyPavUK8f+PWsyy6Ppfg3TX8zU9au4wYFKfNGGwoYscruk2YPAOxueCCAR/DCb4k+LrC18Q6p4 sjt9LNwDHbDT4Ha7jRyJASoBjBIKg8nqcDAJ9krP0PRrPw9odlpFgmy1tIliTIALY6s2AAWJyScc kk1oUAFFFFABRRRQAUUUUAFFFFABWfrms2fh7Q73V799lraRNK+CAWx0VckAsTgAZ5JArQryf9oa +uLT4axwwSbI7vUIoZxtB3oFeQDnp8yKePT0zQBH4Vtdf+Kmly+JNX8QazodhLcOum2Oj3KwhYlw rM7gFpCWUj5gMFWIADADlNKi+Jngr4tadpN1qOq61p9zKqmWVpbiGW1Z1V5MEny2TcpJz8pxklW+ b0f4Jf8AJIdC/wC3j/0okr0CgAooooAKKKKACiiigAooooAKKKKAPG/i54q+IfhOyOoWdzo1jpcl 6sFu1urTXRGxiN/mJsAO0ngZBwMnknU+BWuap4h8G6lf6vfz3t02qyjfM+doMcR2qOirknCjAGeB Wh8bf+SQ67/27/8ApRHXP/s4/wDJPNQ/7Csn/oqKgD2CiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKjnnhtbeW4uJY4YIkLySSMFVFAySSeAAOc0ASUV4n8PPH03j /wCM9/eLFJb6fbaPLFZ27uSQvnREuwzgO3GcdgoyduT7ZQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAU9V1Wx0PS7jU9TuY7azt03yyv0UfzJJwABySQBkmvBIfE/j34seO beXwvPfaHoFpKQtwMiNQpUlpcfLLIcriLJABA6bnPpfiX4eTeONZgm8SarJ/Ytq5aDSLMFVdg3Dy ynliy5BAVdu7Ct1Z+0sbCz0yzjs7C0gtLWPOyGCMRouSScKOBkkn8aALFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRXh/j74jf2 j8TvD3g3TeLW01uza9nSXImkEinywFONqk8hud69BtyfcKACiiigAooooAKKKKACiiigAooooAKK KKACvL9b8Y+JfEfjmfwf4I8i2jsto1PWpUWZbYkg7UGdpYYZdrAktuGFCFq9Qry/4ZTJYeOfH+h3 VrBBqX9qtfh/MUyTwSklOBztUFT1ODNggHqAU4/h98Q/DaTano/xCu9YvIkyun6jEzRXADAlMvKw UkDAYYPONygkjsPhz4zXx14Ot9XaOOK7V2gu4o921JVxnGR0KlW6nG7GSQa6ieeG1t5bi4ljhgiQ vJJIwVUUDJJJ4AA5zXlfwas3uNW8beJ4ju0zWNVc2TlGUyokkp3gMB8p8wAe6sCBigD1iiiigAoo ooA4v4h3/jLTdGvL7w0dGitLWymnuZrxpGnBVSf3SBdmQBkbiQScEADnzP4KeOPEvi74h3g1zV57 uOPSnKw4WOMESx4bYgC7vmI3Yzg4zivoCvmD9nH/AJKHqH/YKk/9GxUAfT9FFFABRRRQAUUUUAFF FFABRRRQBT1XVbHQ9LuNT1O5jtrO3TfLK/RR/MknAAHJJAGSa8Eh8T+Pfix45t5fC899oegWkpC3 AyI1ClSWlx8sshyuIskAEDpuc+l+Jfh5N441mCbxJqsn9i2rloNIswVV2DcPLKeWLLkEBV27sK3V n7SxsLPTLOOzsLSC0tY87IYIxGi5JJwo4GSSfxoAsVxfxM8fQ+APDQvFijuNQuXMVnbu4ALYyXYZ yUXjOO5UZG7I7Svmj9pG+uJPGWk2DSZtYdP86NNo+V3kcMc9eRGn5e5oA9Dm+HPivVvDQvbrx34g tvFE1urvGl2IbSOXA/d+XEMAAfKWU8nLYOcVj/BbUvHUfiXWdC8TrqU1pbIxae+DyGK4UxjYspJB DI+7GSCMMvBJPtlFABXi/wAU/ileLeSeDfBSz3etSbo7mezQyPDgEtHEF5MgAO5h9zBx82Snpnij Tda1jS307R9Vj0gzoyy3wjMksY4+WNcqASC3z7srjgZO5afg74f+H/A9n5Wk2u64bcJL2cK08gJB 2lwBheF+UADjOM5JAI/hzpPiPRvB1vbeKdTkvtSZ2lPmP5jQK2CIzJklyDk57ZwCQoNdZRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBga9pniK8mM2i+IF sFWHAt3tEkV5OTkuckA5A4BxjPNeNy/EfxnBM8M2ptHLGxV0e1iDKRwQQU4NfQdfPnxM0ldK8bXR jCrFeKLpVViSC2Q2c9y6scdMEfQefjVKEVODa+Z9dwxUoYirLDYinGWl1eKvpvrbXe+p6X4HPiHW 9Ks9a1DxHK8E24/ZI7SFOVkK4L7SSCFPQA89eK6fW4bmXS5Daat/ZUkf7w3RjSRVUfe3B+MYzzkY wOcZB4L4N6x52l32kSPl7eQTRBpcnY3BCr2AYZOO7/nb1W6/4WNqj6Bpdxs0WykWTUL1H5mPO2OM dCMgncQRlc9hu0p1F7FNat+fU48Zg5rMqilaMIO7fKrKO60tZt7JO9387YHhPV/iF4smc22sLBZx MFluZbWLaDxlVGz5mwc44HTJGRn1qwguLaxhhurtry4Vf3k7IqFz3O1QAB6D07nrRYWFrpljDZWU CwW0K7UjXoB/U9yTyTzVitqNJwXvNtnn5lj4Yqo/ZU4wgtkkk/m1+W35hXG+KfiRpHhxzbRD+0L4 ZzFDIAsZDYIdudp68YJ45xkGuS+InxEuDeS6Jok0tusEhS5ukJR2dTyinqACOT36dPvUfhn4Ij1m ZtY1W3ZrGFh9njdfkuHGck+qrjpjBPGeCDz1MTKc/ZUd+562EyWlQw317MXaPSK3d9r+vZdNXZHQ 6NrPjjxpMlzZvBomk7pNtwIFlZ8YwuH+8R03AKPvdxiu70TTJtJ0uO0n1K61CReTPckFiT1APXGc kZJIzjOAK0aK6adLl1bbf9dDxsXjVX9ynTjCHZJfjLdv528gooorU4CvfwXFzYzQ2t21ncMv7udU Vyh7HawII9R6dx1ryLxl4k8X+EtXisP+Ej+1+ZAJt/2GKPGWYYxg/wB39a9lr5z+IWpf2n441N1a UxwyfZ0WQ/d2DawHPALBj+Oeprix0uSCadn6n0/C9FYjEyp1IqUEm3eKeuiWrVzpfCHiXxn4s1pt PTxCtsqQtM8jWcTEAEDgbRk5Ydxxn6Hsr/RPHMFjNLZeLlurlFykDadDGHPpu5wfTPGfTrWN8F7H y9I1S/8AMz506w7NvTYuc59/M/T3r06jDU3OkpSbu/Nk5zjI4fHypUKcFGNlbkjq930v1seY2HxU uLDVJdM8V6X9knjk2tJbg4j6Y3KSSRjJ3KTkYwD1r0uKWOeFJoZFkikUMjocqwPIII6ivGPjJpv2 fxBY6gqxKl1AUO0YZnQ8luOflZAD7ewrT+DmvSSLd6DMWZY1NzAeoUZAdeTwMlSAB1LE1NKvKNZ0 Zu/Zm2PyqhWy6OY4WPLpeUVt2dr7WfTs+6PV6ztd1eHQdDvNUnG5LePcF5G9jwq5AOMsQM44zWjX kHxk1tZbix0SGXPk5uLhRtIDEYQZ6ggbjjjhgee3TiKvsqbkeNlOB+u4uFF7bv0W/wDl8x/wwutb 8Q+IrzUb/WbyW3tV3NAZ22PJJuA+T7u0AMcDGDtxXa+NvGEPhHS0kEfnX1xuW2iIO3IxlmPoMjjq cgepEvgnw9/wjXhe2spFxdP++uef+WjAZHUjgALxwdue9eQfFK6muPHt5HK+5LeOKOIYA2qUDY9/ mZjz61yylLD4dfzP9T3KFGhm2cSSS9lBbLS6jp0S3evodh4Q0fXvF1i2uav4m1a3inZlihs5hEGC 4Xfx8oGQwxtByM555qa9qviT4c61aL/as+q6VcM0oS8IZmwcMm85YEAocjAyfu9RXSfCnUre78FQ 2cbfv7KR0lQkZ+Zi4OM5wQ2MnHKn0rmPjVdQveaPaK+Z4o5ZHXB4VioU56clG/KlNKOHVSL101ua 4ec62cTwVWC9neS5eVaJLRqyTXTW/X0PUdH1a113SbfUrIsbedcrvXDAgkEEeoII9OOM0/VNSt9I 0u51C7bbBbxl25AJx0AyQMk4AHckVzXwxs5LPwJZGVp907PMEmPCAsQNo7KQA3uWJ71518UfFLax rjaTAcWenyMhILfvJejEg4HynKjj+8c4NbzxHJRU3uzysLk6xWZTw1N+5Fu78k/ze34mzZ+Ktc8f +LjpmnXk+maPt3yeRtEwjU/e39QzEqPlOBnowBJt+L4tY8BQ2WraXr+o3cTzeTPDqVx56tn5lAXA wPkYEgg8jB5NaPwi0lbPwrJqLBfNv5iQysSfLQlQCOgO7eeOxH4Z3xpvJE03SbEKvlTTSTMSPmBQ ADHt+8P6Vg01h3Vk/eev+R6kJ05ZvHA0IL2UfdasneyfM22rt/NbHoGhavDr2h2eqQDalxHuK8nY w4ZckDOGBGcc4rRrzn4OX6z+GruyadnltrksI2yQkbqMY7YLK5wO+T3rZ+IniP8A4R7wvL5Mm2+u 8wQYbDLkfM4wQRgdCOjFa6oVl7FVJdjwsTlslmMsFSX2rL0eq+5P8DzfXfihr0uuXjaRqHk6eJNs C+SjZUcbssmfmxuwemcdqzv+FmeL/wDoL/8AktF/8RXp3hix8CXGl2NlaDRr+48vbmWFPPlYZ3MU f5xkgnHYdOMV0X/CLeHv+gDpf/gHH/hXIqFafvKp+Z7882yzDP2MsHtpqopu2l9VfWxx/wAMdd8R eIpr+61W/aazgVY40Nsiq0h5JDKByoHT/bHtXo1V7PT7LToTDY2kFrEzbikEYRSemcAdeB+Vcr8S PFLeHPD4itji+vt0UTZZTGuPmcEdxlccjkg84Irrj+5pXm72Pn6q/tPHcuGgoqTSS00Xd2+bZh+P PiW+mXE2kaGdt5DIFmuiFdUwASqDkE5yDkcYIxnkacfgvWLnRTcXXijW01mWFpGjW88uBJiCQu1Q cKCQDtPbjHArzf4Z6Suq+NrUyBWis1N0ysxBJXAXGO4dlOOmAfofddavJNO0LUL6FVaW2tpJkDjK kqpIzjtxXPQbrKVSpt0R7OaRhls6WCwaXPo5SaTbbaSTunZdbeZxvw18b3XiNbnT9UdXvoF81JVX aZY84OQBtBUlR2yCOOCT6BXzt8OL9bDx3prSTtFFMzQNtzhyykKpA6jft9s4PavavGPiRfC3h2bU AiyXBYRW8b52tIfXHYAE9s4xkZq8LXvRcpvY58+yv2eYxpYaP8S1l0vs/wDPyMDx98Ql8OeZpenr v1Ro1bzTtKQBs9RnO/ABAIx8wPPQt8P+HNW1/RbfV9Z8S63DdXiiURWdysMaxkDZ8qgjJGG4x15G ck+UeGNObxH4wsbS5bzvtE/mXBldsyKMu+WHOSA3Pqevevpeow7eIk5z26I3zanTyilTw2Ht7R6y lZN9rK6dk308jzPwH4v1I+IrnwrrtwtzcQs8UFwMlmaPhlJx8wIUtubB4Oc5GPTK+aNL1tl8b22t 3Mv2fffi4uGi3AKrPlwAMnGCwxzkcc19L1eCqucWm9n+Bz8S4GOGrwnGKXPHVLbmW9umu4UUUV2H zYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF c349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+ Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfk eceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/I tW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/ FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C /wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAK8z+Lvw4sfFPhq91Ow0+MeILZPPjlhTD3IUDdG20 EyEquFHUEKAQCc+mUUAfMn7O9pot74q1KLUNOjutQit0ubOWVA6whHG4jJ4fc0ZBAyNp5Hf6Xngh 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 wzEY9q82+NF95mr6XYeXjyYGm37uu9sYx7eX+vtVVP3WFt5fmYYX/b8+5+ik38o7fkjk/Alj/aHj jSIfM8vbOJs7c58sGTH47ce2a6T4w6st34itdNjKlbGHL4UhhJJgkEngjaEPHqfwPg9pK3fiK61K QKVsYcJliGEkmQCAOCNocc+o/DmPG95Jf+NtYmlVQy3LQgKOMR/IPxwoz71xaww3+J/kfUe7Xzv/ AK9Q/GT/AMjtfgvpu681TVGWUbI1t42x8jbjuYdOSNqd+N3uK73x3ff2f4H1eby/M3QGHG7GPMIj z+G7Pvis/wCF2m/2f4HtnZZVku5HuHWQYxk7VI46FVU++c9Kw/jRfeXpGl2Hl586dpt+7psXGMe/ mfp712x/dYW/l+Z8vW/2/P8Al6KSXyh/wzPJdKsf7T1eysPM8v7VPHDv2527mAzjvjNfVFfPnwz0 ldV8bWpkCtFZqbplZiCSuAuMdw7KcdMA/Q/QdTl8bQcu5txhXUsTTop/Cr/e/wDJBRRRXoHyAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/ 5ErUP+2f/oxa6Sub8e/8iVqH/bP/ANGLUz+FnNjP92qej/I848Bf8jrp/wD20/8ARbV6P49/5ErU P+2f/oxa848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWsaf8NniZd/yLqv/b35HnHgL/kddP8A +2n/AKLava68U8Bf8jrp/wD20/8ARbV7XVUPhOnIf92l6/ogooorY9sKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf9fi/wDo D1znwv8A+Rluf+vNv/Q0ro/ih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0rnl/FR83if+RtD5fkzo/i h/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2rtfih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2pT/iL5 GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo 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 xkmjGUXNJpXt+QcN5jDC1KlOclHnWjeykr2v9/p3PRq+aPE+ot4j8YX13bL532ify7cRI2ZFGETC nnJAXj1PTtXp2v8AiTxF4h0hdJ0fwvqlrcXkZS5ku4NiIpX5lVmwOeRubHsMkYt+CfhtD4cuItTv 5/P1NN4QRMfKjBGMjIBY4z14+bpwDUV1LENQht1Z05VOlk9OpiMQ17Rq0Yppv1dm7Ju3Xbobngnw 9/wjXhe2spFxdP8Avrnn/lowGR1I4AC8cHbnvXhvjezksPG2sQyspZrlpgVPGJPnH44YZ96+lK4H 4jeBbjxP9nv9NMQvreNo3SRiPNTkqAegIOeuM7uSMVWKw/NSUYLYwyLNlSzCdXEuyqXu+zvdfLp9 x2elWP8AZmkWVh5nmfZYI4d+3G7aoGcds4rwf4masuq+NroRlWis1FqrKpBJXJbOe4dmGemAPqfQ 73xj4nk0kWVp4W1GHXXbyXlNvm2jbOC6ucgjoRn5RnJJA5o+DPhZ/Z1xBqmuS5u4ZElhtoX+VCBk bzjkhscA4+XqwOKmveslTprTqb5U6eWTqY3GSXM7qKTTbb1b0bsn303bt0Nn4Z+GZPD/AIdae7ia K+vmEkqOMMiDIRSM9eS3QH5sHpXa0Vy/xF0fVNf+H+saXor7L+4iAjHm+XvAZSybv9pQy88HdgkD NdlOChFRXQ+axeKniq8q9TeTv/wPkdJDPDcoXgljlQOyFkYMAysVYcdwwII7EEVJXg/wE8F+KdB1 a+1bVbSfT9NubTylt52KPLIJBhjF1G0K4ywB+fjIJr3irOcKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8AIlah/wBs/wD0YtdJXN+Pf+RK 1D/tn/6MWpn8LObGf7tU9H+R5x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi15x4C/5HXT/+ 2n/otq9H8e/8iVqH/bP/ANGLWNP+GzxMu/5F1X/t78jzjwF/yOun/wDbT/0W1e114p4C/wCR10// ALaf+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wCh pXR/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaVzy/io+bxP/ACNofL8mdH8UP+Ratv8Ar8X/ ANAeuK8Bf8jrp/8A20/9FtXa/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1Kf8RfIzx3/ACNI f9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yO un/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf 8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig Difih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rn l/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kd dP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCj FqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8 e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n /otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0f xQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I6 6f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9Q FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV zfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF/wAjrp//AG0/9FtX o/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2eJl3/Iuq/wDb35Hn HgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogooorY9sKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8A ItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ0rnl /FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ACLVt/1+L/6A9cV4 C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A 6MWpn8LObGf7tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0 fx7/AMiVqH/bP/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLa va6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8 X/0B65z4X/8AIy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFt Xa/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ ALZ/+jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2 f/oxa848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A 7af+i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCg PXOfC/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+ X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf +i2pT/iL5GeO/wCRpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo 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 A9c58L/+Rluf+vNv/Q0rnl/FR83if+RtD5fkzo/ih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2rtf ih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2pT/iL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAK+QPjb/yV7Xf+3f8A9J46+s9Sj1KW3VdLu7S2n3gs91bNOpXB4CrIhBzjnPY8c8eP+I/gJfeK fEF5rWpeMIzd3Thn8vStqqAAqqB5vQKAOcnjkk80Ae2UVj6NZ+ILTYmr6xY6hGkQTdDp7W8juMfO x81l55yAo5PGAMVsUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQBn67qf8AYnh7U9W8nzvsNpLc+Vu279iFtucHGcYzg14R8CfF Vnd+LfEN54i1OA67qfkC3muiFeX5mDRox4GSYgEGM7RgYXj6HrxvxR+zzous6o99o+pSaOJnZ5bc W4liBOP9WNylBnccZI5wNoGKAPZKz9Z1zS/D2nPf6vfwWVquRvmfG4gE7VHVmwDhRknHArx+1+AW sWOnT6dZ/ES+t7Gfd51tDaukcm4bW3KJsHIABz1FdR4P+CnhbwpeW+ouJ9S1KHY6TXRGyOQA5ZIx wMk5G7cVwMHIzQBqfD/R5oH13xFeaVHpt3rt79oW3ClHS3VQIhKmSFlOXdsc5c554HaUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRUc4ma3lW3kjjnKERvIhdVbHBKggkZ7ZGfUUAeB/tNf8yt/wBvf/tGvQPgl/ySHQv+3j/0 okrL8cfCjWvH9xZy6t4stIks0ZYYrXSSqgsRuY7piSTtUdcfKMAc53PBfg3xB4M0e10aLxJY3mmw Slwk2lMsgRm3Mius2BkliCVbBbuABQB3FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAVh2fjHw5f+ILrQbXWLSTVLZ9kltvwxbBJC54cgKdwXO3H OK3K8X/4UD/Zvij+2vDXiqfSPKl821j+yec0HHK7i43LyRhgcqcHdySAY/7TX/Mrf9vf/tGvYPA2 if8ACOeBtF0lrf7PNBaJ58W/ftmYbpOcnPzljwcenGKx9L+Hsr65aa54r16fxFqVjuFl5lukEFvn B3iJeDICD8xP93jKqR3FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFRziZreVbe SOOcoRG8iF1VscEqCCRntkZ9RQB5H+0d/wAk80//ALCsf/oqWug+CX/JIdC/7eP/AEokrL8cfCjW vH9xZy6t4stIks0ZYYrXSSqgsRuY7piSTtUdcfKMAc53PAHgjWPAunJpX/CQwahpiyvL5cti6yLu H3UbziqruG7G05Jb1yADuKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/C zmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDI lah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofC dOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc +F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5 Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/ox 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 4p6foGq63thh8QRwTQWKiKM4n2MgYAO0eCRhicjGcmvp+gAooooAKKKKACiiigAooooAKKKKACiq erSX0OjX0ulwxz6glvI1rFIcK8oU7FPI4LYHUfUV4J8KL74k33xM8zWZNcbT184ail6rrDGSm9VC PhUbc0RCqAQp4G3NAH0PRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFZevnXhpb Dw5HpragXAB1F3WJV7nCAlj2A465zxg/NnxE+IvxF0zxHqWgX+twWjR+VvTSV8tFyiONkhHmjORn 5u5HTigD6nooooAKKKKACiiigAoqnqp1JdLuDo8do+obMQC7dli3erFQTgdcDrjGRnI+ePif4++J fhrWU0m/1bTbM3FkHK6RGdu1mdc75F3q/wAp5UjGARg5oA+k6Kw/Bc8114F8PXFxLJNPLpls8kkj FmdjEpJJPJJPOa4f45al4v0/w1aHw0t3HaM7tqF1ZhvNhVAGX5lOUQ4cswH8IBIBwwB6pRXn/wAH f+Ep/wCEGP8Awln277X9rk8j7fnzvJwuN275vv78bucYx8uK9AoAKKKKACiivK/jlqXi/T/DVofD S3cdozu2oXVmG82FUAZfmU5RDhyzAfwgEgHDAHqlFef/AAd/4Sn/AIQY/wDCWfbvtf2uTyPt+fO8 nC43bvm+/vxu5xjHy4r0CgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKy9fOvDS2HhyPTW1AuADqLusSr3OEBLHsBx1znjBANSivlj4ifEX4i 6Z4j1LQL/W4LRo/K3ppK+Wi5RHGyQjzRnIz83cjpxX1PQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/AJEr UP8Atn/6MWukrm/Hv/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCRK1D/ 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 aSLvjeNQvyocFgVVcBdxJDdMgVp+FZfjVrej6dYStBo1rFjdql/AGu5EVtpVo3JJbByCyLu2Al+c t7hRQB8wfEn4VeINA8UJqvhm11XULWTypRdQlprlLkA7mYqS5YsnmF8AAvgYwK938Fv4xubOe98Y JY2txLtSHT7NciEKWy7PubLNkcAkAKvcsB1FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8A Ilah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/ APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp/ /bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih /wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rnl/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+ R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKy9S8NaDrNwtxqmiabfTqgRZLq 1SVguScAsCcZJOPc1qUUAcHP8GPh9c3Es7+HYw8jl2EdzMigk54VXAUewAA7V2lhY2+madbWFnH5 draxJDCm4naigBRk8nAA61YooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigArm/GfgbRfHWlpY6xFIDE++G4gIWWE8Z2kgjBAwQQQeD1AI6SigDwOD9mya1uIri 38aSQzxOHjkj08qyMDkEES5BB5zWp/wz/wD2pqP2rxR401XV9sXlodu2Recj55Gk+XlvlwOTnPr7 RRQBl6B4c0jwtpa6botjHaWgcvsUlizHqWZiSx6DJJ4AHQCtSiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAK5vxn4G0Xx1paWOsRSAxPvhuICFlhPGdpIIwQMEEEHg9QCOkooA8Dg/ZsmtbiK 4t/GkkM8Th45I9PKsjA5BBEuQQec1qf8M/8A9qaj9q8UeNNV1fbF5aHbtkXnI+eRpPl5b5cDk5z6 +0UUAZegeHNI8LaWum6LYx2loHL7FJYsx6lmYksegySeAB0ArUoooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACub8e/wDIlah/2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/ AO2n/otq9H8e/wDIlah/2z/9GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8T Lv8AkXVf+3vyPOPAX/I66f8A9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRW x7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQBxPxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/1 5t/6Glc8v4qPm8T/AMjaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F /wDQHrivAX/I66f/ANtP/RbUp/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8A yJWof9s//Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66 f/20/wDRbV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ ACOun/8AbT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb /wBDSuj+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8A X4v/AKA9cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ /wC3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAryv4jfEzxR4Mt7iaHwjHHZm4W3tdRu71HWRsEkmGM7gCFfGWHYnB+WvVK8/+Nv8AySHX f+3f/wBKI6AI/g54t1fxn4V1DVNZmjknGpyRxrHGEWOPZGwQY5IBY8kk+pNeiV4/+zj/AMk81D/s Kyf+ioq9goAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCnqt1d2Wl3FxYafJqF2iZitUlSMyt2G5yAo 7k+gOATgHwvx78ZvHPhzURpsvh2x0Sae08xRNOLuRcllEishCDkcKynlecg4r6Ar5g/aO/5KHp// AGCo/wD0bLQB9D+E7641Pwbod/eSeZdXWn280z7QNztGpY4HAySelbFc/wCBP+SeeGv+wVa/+ilr oKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPn/4wfFTxd4c8aNo2jv8A2Za2 8SOJjAkhut4B3DepAUHKjb3Vsk9F9w0K6vL7w9pl5qNv9nvp7SKW4h2FPLkZAWXaeRgkjB5FXJII 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 vJJIwVUUDJJJ4AA5zUled+M/CHiP4gXqaddahHo/haN90sMLb7q8ZXH3v4EQgEry2DtLLn5UAOHv Pix4r8Z/EG10f4eJGtjC+WkuIQVuEBG6SUkZji7ADDHP95lUe+Vl6B4c0jwtpa6botjHaWgcvsUl izHqWZiSx6DJJ4AHQCtSgAooooAKKKKACvM/jLr3jTw/o1jd+E4pBAHka/uYrdZmhVVBXIYEBMby WxxtHIzg+mUUAcH8M/iZY+P9LKOI7bWrdAbq0B4I6eZHnkoT26qTg9QW7yvL/Enwcs5dYj8Q+Dr3 /hHdbt8NEIIwLZmCkYKAfLu+UMRlSM5RiTn0TSjqTaXbnWI7RNQ2YnFo7NFu9VLAHB64PTOMnGSA XKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACub8e/8iVqH/bP/wBGLXSVzfj3/kStQ/7Z/wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/ AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e /I848Bf8jrp//bT/ANFtXtdeKeAv+R10/wD7af8Aotq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP +Ratv+vxf/QHrnPhf/yMtz/15t/6GldH8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/ 8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1dr8UP+Ratv+vxf/QHrivAX/I66f8A9tP/ AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU 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 kLFc7h3316v/AMXf/wCpG/8AJuuD8a/Cb4g+PNZh1TVLvwxDPFbrbqtrJcKpUMzZO5GOcue/pQB7 xBPDdW8VxbyxzQSoHjkjYMrqRkEEcEEc5qSuf8D6Tqmg+C9L0nWbmC4vrOLyWkg+5sUkRgfKvRNo 5Hbv1roKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2f/oxamfws5sZ /u1T0f5HnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YteceAv+R10/wD7af8Aotq9H8e/8iVqH/bP /wBGLWNP+GzxMu/5F1X/ALe/I848Bf8AI66f/wBtP/RbV7XXingL/kddP/7af+i2r2uqofCdOQ/7 tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb/r8X/wBAeuc+ F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtX a/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXn/xt/5JDrv/AG7/APpR HXoFcn8S9AvvFHw81fR9MWNrydI2iR22hykivtz0BIUgZwMkZIHNAHF/s4/8k81D/sKyf+ioq9gr 58+HWteI/hTZarpHiTwbrL6ejm8N3Y2/nCNti7tzg+WU2qDkN8pBBzn5e7/4Wnca5p2fB/hLXNRu riLNpc3FqIbPfjLB5SwHyEMpA6su0HkNQB5B410dPGP7RdzpFs/nQ3N3BFM0Eq5VEhTzsE8blCvx zyuME8V9D+OPEn/CI+C9U1wR+ZJaxfukK5BkYhE3DI+Xcy5wc4zjmub+G/w2m8KXuo6/rl5HfeJN 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 rGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaX r+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c 58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+ KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAoorl/FUXjC+07UdP0CDSrfz4jFDfz38ySR7hhmCJFwwy20h+Dg+1AHhH7 OP8AyUPUP+wVJ/6Nir6frwfwB8JfHHgPxQmsQXWh3MZieGe3+1Sp5qMMgbjC23DBW4H8OOhNe6QG ZreJriOOOcoDIkbl1VscgMQCRnvgZ9BQBJRRRQAUUUUAFFFFABRRRQAVz/jv/knniX/sFXX/AKKa ugrk/GNn4q1nRtV0bSbPRlgvbdrdbq7vZQwV1w5MawkZwWA+c9if7tAHhn7OP/JQ9Q/7BUn/AKNi r6frwv4efCnxt4A8Stq0Unh+9SS3e3lha7mQlSVbKt5Rwdyr1B4yO+R7ZYveSWcbX8EEF0c744Jj Ki8nGGKqTxj+EenPWgCxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHn/xt/wCSQ67/ANu//pRHXn/7Mv8A zNP/AG6f+1q9A+IWg+MPGHhy+0CytdDtbW4lXNzNfTO7Ro4ZfkEICsSq5+ZgORz1HN/DP4eeNvh1 caiyr4f1CC+SMOhvZomVkLbSG8lhjDtkY9ORjkA9koqOAzNbxNcRxxzlAZEjcuqtjkBiASM98DPo KkoAKKKKACiiigAooooAK8r+OXjm+8JeGrSx0qWS3v8AVHdBcIOYokA37TnKuS6AHBwNxGCAa9Ur l/HXgXS/Hmhmwvx5VxHlrW7Rcvbue49VOBle+OxAIAK/wtsdLsvhroR0mOBY57SOadoW3b5yo8ws e7BgVOem3bwAAOwr50s/gb8QdCuLpdB8V2lpBK+N8N5cW7SqpO0uqIRnBPGTjJ5NdHN4C+LutXls useP4LS1j3Zk013jcZH91EjD8gfebjJI9CAdR8W7bS9Q8L/2ZNpUGp67f7rfSLfpMJSVLOjYyqoA HYkhSFAYgGu4sLX7Dp1tZ/aJ7jyIki864ffJJtAG527scZJ7mub8HeArHwm9xfPd3eq61doi3Wp3 z75XAUDapPKplc4yT0BJ2jHWUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/+jFrpK5vx7/yJWof9s/8A0YtTP4Wc 2M/3ap6P8jzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrzjwF/yOun/wDbT/0W1ej+Pf8AkStQ /wC2f/oxaxp/w2eJl3/Iuq/9vfkeceAv+R10/wD7af8Aotq9rrxTwF/yOun/APbT/wBFtXtdVQ+E 6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigDifih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSuj+KH/ItW3/X4v/oD 1znwv/5GW5/682/9DSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLau1+K H/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6LalP+IvkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/ACJWof8AbP8A 9GLXSVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0 YteceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/7e/I848Bf8jrp/8A20/9FtXt deKeAv8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X/wBAeuc+F/8A yMtz/wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T/wAjaHy/JnR/ FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtS n/EXyM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A9GLUz+FnNjP9 2qej/I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6P49/5ErUP+2f /oxaxp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7XVUPhOnIf92l6 /ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v/oD1znwv/wCR luf+vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2rtfih/yLVt/1 +L/6A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/wDIlah/2z/9GLXSVzfj 3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLXnHgL/AJHX T/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPAX/I66f8A9tP/AEW1e114 p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/wCvxf8A0B65z4X/APIy 3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8v4qPm8T/AMjaHy/JnR/FD/kWrb/r 8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbUp/xF8jPHf8jS H/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s//Ri1M/hZzYz/AHap6P8AI848Bf8A I66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWsaf8NniZ d/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8AbT/0W1e11VD4TpyH/dpev6IKKKK2 PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+KH/ItW3/AF+L/wCgPXOfC/8A5GW5 /wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2rtfih/wAi 1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2uiiiuk+oCiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN +Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/k 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 oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig Arm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/ Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t7 8jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8U P+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+K j5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/ yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHh/wN0az8Q/CDXNIv032t3qE0T4AJXMMWGXIIDA 4IOOCAa8Y0S+uPh98SoJp5MyaRqDQ3Rt1D70VjHKE3YzldwGcdexr3f9nH/knmof9hWT/wBFRVyH 7RPhH7HrFp4rtl/c32La756TKvyNy38SLjAAA8vJ5agD6LgnhureK4t5Y5oJUDxyRsGV1IyCCOCC Oc15H8ffEnkeHLXwlZR/adS1mVMwou9xGrgrhQc7mcKF4IOHHUVJ+z/4rm1zwdPo10ZHn0d1RJGy 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 ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/wAi VqH/AGz/APRi10lc349/5ErUP+2f/oxamfws5sZ/u1T0f5HnHgL/AJHXT/8Atp/6LavR/Hv/ACJW of8AbP8A9GLXnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/ ANtP/RbV7XXingL/AJHXT/8Atp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/AJFq2/6/F/8A QHrnPhf/AMjLc/8AXm3/AKGldH8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXPL+Kj5vE/8A I2h8vyZ0fxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1dr8UP8AkWrb/r8X/wBAeuK8Bf8AI66f /wBtP/RbUp/xF8jPHf8AI0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFcf4w1nxfbxXFl4X8Kz3kzxOiag97bxJE5UbXVGYl8EnI YL93uDmgDj/2cf8Aknmof9hWT/0VFXoHjjw3/wAJd4L1TQxJ5cl1F+6ctgCRSHTccH5dyrnAzjOO a8j+F2ifEn4fXFzb3HhSS90u8dGkjXUoFaFgcF0Bk2kleCON21fmGK94gkaa3ileGSB3QM0UhUsh I+6dpIyOnBI9CaAPhiy1TV/DVxqVvbvJZz3FvLp95HJEN3lsQHjIYZU5XHYjHavr/wCG3hdvCHgP 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 qT42/wDJIdd/7d//AEojryDwjpfxf8AawumaVok7x3WZntpgktox2sMtIG2xtx2dScIDkYFdf4r8 EeOfEvgS/uvE119v1dpYW0vR7ABYbVpJYwxcgDeyqXXLFlRdx3HOQAZ/7Mv/ADNP/bp/7WrI/aRs biPxlpN+0eLWbT/JjfcPmdJHLDHXgSJ+fsa6f4ZfC/x74OvJLoa1pVhb3cSvcWrQG6LOAdqOBsxt 3scpJ1A+8K9M8c+DLHx14ak0e+kkhIcTW86cmGUAgNjOGGGIIPUE4IOCACP4f+Mbfxx4SttWi+W4 XEN5GEKiOcKC4XJOV5BHJ4IzzkDqK+TJvhz8S/h9qg1DSra7d0dUW60hzMJOj4MYG8plcEOm0kd8 jPZ2Phz4yeOoo7DxLq8+k6NPEZJJSkKOwKkCNo4trnIblHwBznkAEA9c0vxLNrXjHVdNsreM6XpK CG5vCSfNumwfLjI+XCLkPk7gzKMDGT0lZfhzQLHwt4fs9F01ZBaWqFU8xtzMSSzMT6liTxgc8ADi tSgD58/aZnha48NW6yxmdEuXeMMNyqxiCkjqASrAHvtPpXrfw50b+wPh1oWnFJ45FtFlljnGHSST 946kYGMM7DB5GOea8g8SWNv8U/2go9Lij3abpEQhvn3EeYkTkyDHykZeTyvlJ/vDIr6HoAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCjFqZ/Czmxn+7VPR/k eceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0 YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq9rqqHwnTkP8A u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/9Aeu c+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1dr8U P+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRzwQ3VvLb3EUc0EqFJI5FDK6kYIIPBBHGKk ooA8ntbN/g1rE5U7/AOoStLJIUZ5NLnK4GdoLPG21UBPQ7ckHmT1SCeG6t4ri3ljmglQPHJGwZXU jIII4II5zRPBDdW8tvcRRzQSoUkjkUMrqRggg8EEcYqvpelWOi2C2Gm20draI7ukMfCqXcu2B2G5 jwOB0GBxQBcooooAKKKKACiiigAooooAKKKKACiiigDx/wDaO/5J5p//AGFY/wD0VLR+zj/yTzUP +wrJ/wCioq2PG/w68QePdOtrDU/FVjBawS+cEtNIZd74IBJadjwC3TH3jnPGDwR8OvEHgLTrmw0z xVYz2s8vnFLvSGbY+ACQVnU8gL1z90YxzkA9IooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAK8/wDjb/ySHXf+3f8A9KI69Arzfxv8OvEHj3Traw1PxVYwWsEvnBLTSGXe +CASWnY8At0x945zxgAx/wBnH/knmof9hWT/ANFRV7BXm/w/+GusfD/z4LPxPBd2NzKkk0E+nvxt yG8sibCswwCxB+6vBxivSKACiiigAooooAKKKKACuP8AF/ie4Td4c8LTwT+KrnCxx8Otknylp5/7 ihWBXIO5mUBW5FdhVPTtKsdJS4Swto4BcXEl1Nt6ySu25nY9SSfyAAGAAKAMPwL4F0vwHoYsLAeb cSYa6u3XD3DjufRRk4XtnuSSeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0Y tdJXN+Pf+RK1D/tn/wCjFqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0Ytece Av8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8A RbV7XXingL/kddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnP hf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP +Ratv+vxf/QHrivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXy M8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAj 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 FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF/wAjrp//AG0/ 9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2eJl3/Iuq/wDb 35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogooorY9sKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4 of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ 0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ACLVt/1+L/6A 9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD5A+CX/JXtC/7eP8A0nkr6/r4w+Fut6d4 c+I+k6tq1x9nsYPO8yXYz7d0LqOFBJ5IHAr6P/4Xb8PP+hh/8krj/wCN0AegVzcGgQ3XjqLxnb6j HNBLo4sY4o1DK6mXzRKJA2CCOMY9815v4x+PvhxtG1XTdBGpXF5LbtFbXka+TGrOuN4YkOCuSfuj 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 tU4G3JZSVxXZXHwg8ET2BtV0byfvlJo55PMRmAGcljnGAQGyAc8cnLq4ClheWOKm1N62Svyp7X1W vktuoKbl8KO4or5yvtZ8Q/BvxkdItb2a90P5Z4bW5YFZIWLcDGfLYMXGQBkqGKkcV7/o2rWmvaNa arYvutrqISJkglc9VOCQGByCM8EEUsflc8JCFZS5qc9pL8muj/4IQmpadS9RXkHibxbrXjDx0fA/ hS9ext4mxfahHE6yRtGT5mGByFB2r0XLcbtrc9Pb/CDwRBYC1bRvO+4Xmknk8x2UEZyGGM5JIXAJ xxwMFTAQw8ISxU3GUldRSu0ujd2kr9FuCk2/dO4or518UW+ufBjxDajw9qly+kXi+YkN0VdHdSvm KyjAzgJ84CnDYB4Jr27wj4ntPF/hu21e1Xy/MyssBcM0Mg4Kkj8CM4JBBwM1WNyuWHowxNOXPSls 7W+TXR79QjO75XublFFFeUWcd8Vbyex+GWtzW0myRokhJwD8jyKjDn1ViPxrm/gD/wAiJff9hOT/ ANFRVR+JHw38JaB4A1PU9M0nyLyDyvLk+0Stt3Sop4ZiOhPasr4QeA/DXijwndX2s6b9puY754Vf z5EwgjjIGFYDqx/OvrKdPCrJKlpPl51d8qve3bm2+fyMG5e0Xoe8UVzlt4Tj0DQZtM8IyQ6P50rS NJLE91tYrtLKGkHzcLjJI4+6c184/Ee78SQ+Kr/Rtd12bUfs8qMMEpEcoCrCIYVW2tzgdSeT1Pm5 ZlEcwrShTqpJa6p3t3stP/Ji51ORXaPrGivHPGfw78SeO7U6++q7ZhEXsdGltzF5MZOQjMW+WUrj dkY3fLnaAR1fwo8Paz4Z8Gmw1sbJzcySRQeaJPJjIA25GQMsGbAJHzepNYVsDQp4X20ayc00nG23 z626u1uz7tSblax3FFFFeYWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/AJErUP8Atn/6MWukrm/H v/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/+jFrzjwF/wAj rp//AG0/9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5x4C/5HXT/wDtp/6Lava68U8B f8jrp/8A20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf8AX4v/AKA9c58L/wDkZbn/ AK82/wDQ0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8VHzeJ/wCRtD5fkzo/ih/yLVt/ 1+L/AOgPXFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6LalP+IvkZ47/ AJGkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooA+QPgl/yV7Qv+3j/0nkr6/r5A+CX/ACV7Qv8At4/9J5K+v6AOX8beCdL8XaHq EM2m2MupyWjRWt3NHh4nGTH+8A3BQ5yQPU8HJBueC4JrXwL4et7iKSGeLTLZJI5FKsjCJQQQeQQe MVuVxfxL8azeDPD8L6dBHda1fXCW9haMhfzGJG47FYMRjj5c/MyDvQB2lfMH7OP/ACUPUP8AsFSf +jYq+n6+YP2cf+Sh6h/2CpP/AEbFQB9P18gf83C/9zX/AO3dfX9fIH/Nwv8A3Nf/ALd0AfX9fMH7 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 P/JVNZ/7Yf8AoiOt+EP9+l/hf5oWI+E+qqKKK+VNwooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/ Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8A yJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t78jzj wF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ra tv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE /wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun /wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF 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 MX/xyur8GeP9K8c/bf7Mt72H7H5fmfaUVc792MbWP90/pXk4vLMZSi61Si4RX3L722aRnF6JnVUU UV5hYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzY z/dqno/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ ALZ/+jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp/wCi2r2uvFPAX/I66f8A9tP/AEW1e11VD4Tp yH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK6P4of8i1bf9fi/+gPX OfC//kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8i1bf9fi/+gPXFeAv+R10/wD7af8Aotq7X4of 8i1bf9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAoo 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 2MP/AIQvwr/0LOjf+AEX/wATR/whfhX/AKFnRv8AwAi/+Jrcoo+tV/8An5L/AMCf+Ycq7GH/AMIX 4V/6FnRv/ACL/wCJo/4Qvwr/ANCzo3/gBF/8TW5RR9ar/wDPyX/gT/zDlXYw/wDhC/Cv/Qs6N/4A Rf8AxNH/AAhfhX/oWdG/8AIv/ia3KKPrVf8A5+S/8Cf+Ycq7GH/whfhX/oWdG/8AACL/AOJo/wCE L8K/9Czo3/gBF/8AE1uUUfWq/wDz8l/4E/8AMOVdjD/4Qvwr/wBCzo3/AIARf/E1e07RdK0fzf7M 0yysvNx5n2aBY9+M4ztAzjJ/M1eoqZV601yym2vNt/qFkFFFFZDCiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCjFqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0 fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7 e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/ FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/ io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8B f8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9 GLUz+FnNjP8Adqno/wAjzjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFt Xo/j3/kStQ/7Z/8Aoxaxp/w2eJl3/Iuq/wDb35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBt P/RbV7XVUPhOnIf92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooA4n4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4o f8i1bf8AX4v/AKA9c58L/wDkZbn/AK82/wDQ0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1x XgL/AJHXT/8Atp/6Lau1+KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KK K6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x4C/5HXT/APtp/wCi 2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/4bPEy7/kXVf+3vyP OPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kW rb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaVzy/io+bxP/I2 h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBF tSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/ 3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P49/5ErUP+ 2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOn If8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi /wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n /otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorpPqAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8 iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH /bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ACOu n/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHr nPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8 mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFt Sn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/oxa6Sub8e/8iVqH/bP/ANGLUz+FnNjP92qe j/I848Bf8jrp/wD20/8ARbV6P49/5ErUP+2f/oxa848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6 MWsaf8NniZd/yLqv/b35HnHgL/kddP8A+2n/AKLava68U8Bf8jrp/wD20/8ARbV7XVUPhOnIf92l 6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooA4n4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0ro/ih/yLVt/1+L/6A9c58L/+ Rluf+vNv/Q0rnl/FR83if+RtD5fkzo/ih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2rtfih/yLVt/ 1+L/AOgPXFeAv+R10/8A7af+i2pT/iL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/wAiVqH/AGz/APRi10lc 349/5ErUP+2f/oxamfws5sZ/u1T0f5HnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLXnHgL /kddP/7af+i2r0fx7/yJWof9s/8A0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/ANtP/RbV7XXingL/ AJHXT/8Atp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8A Xm3/AKGldH8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXPL+Kj5vE/8AI2h8vyZ0fxQ/5Fq2 /wCvxf8A0B64rwF/yOun/wDbT/0W1dr8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbUp/xF8jP Hf8AI0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/wCjFrpK5vx7/wAiVqH/AGz/APRi1M/hZzYz/dqno/yP OPAX/I66f/20/wDRbV6P49/5ErUP+2f/AKMWvOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWsaf 8NniZd/yLqv/AG9+R5x4C/5HXT/+2n/otq9rrxTwF/yOun/9tP8A0W1e11VD4TpyH/dpev6IKKKK 2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKAOJ+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSuj+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb /wBDSueX8VHzeJ/5G0Pl+TOj+KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otq7X4of8i1bf9fi/+gPX FeAv+R10/wD7af8AotqU/wCIvkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5ErUP +2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10//ALaf +i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeAv+R1 0/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANeb f+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9Aeu K8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10 UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABXN+Pf+RK1D/tn/AOjFrpK5vx7/AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8A bT/0W1ej+Pf+RK1D/tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ ANvfkeceAv8AkddP/wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2woooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD ifih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ ANDSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v /oD1xXgL/kddP/7af+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/wBGLXSVzfj3/kSt Q/7Z/wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT/wDt p/6LavR/Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8jrp//bT/ANFtXtdeKeAv+R10/wD7 af8Aotq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6GldH8UP+ Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/9 tP8A0W1dr8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/ AJErUP8Atn/6MWukrm/Hv/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCR K1D/ALZ/+jFrzjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5x4C/ 5HXT/wDtp/6Lava68U8Bf8jrp/8A20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf8A X4v/AKA9c58L/wDkZbn/AK82/wDQ0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8VHzeJ /wCRtD5fkzo/ih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/AJHX T/8Atp/6LalP+IvkZ47/AJGkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2f/ox amfws5sZ/u1T0f5HnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YteceAv+R10/wD7af8Aotq9H8e/ 8iVqH/bP/wBGLWNP+GzxMu/5F1X/ALe/I848Bf8AI66f/wBtP/RbV7XXingL/kddP/7af+i2r2uq ofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb/r8X /wBAeuc+F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAjrp// AG0/9FtXa/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/k StQ/7Z/+jFrpK5vx7/yJWof9s/8A0YtTP4Wc2M/3ap6P8jzjwF/yOun/APbT/wBFtXo/j3/kStQ/ 7Z/+jFrzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxaxp/w2eJl3/Iuq/9vfkeceAv+R10/wD7 af8Aotq9rrxTwF/yOun/APbT/wBFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/AOgP XOfC/wD5GW5/682/9DSuj+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSueX8VHzeJ/5G0Pl+TOj+KH /ItW3/X4v/oD1xXgL/kddP8A+2n/AKLau1+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6LalP+IvkZ 47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAoori/F2ieNbh7u/wDDPi6S0C25aLTG0+3lEkqqcKsj4KhiB97OCSc4wAAdpRXyZpPxb+JOs6zY 6Xb+I41nvbiO3jaSzgChnYKCcRk4yfQ16n/wj3xz/wChz0P/AL8r/wDI9AHsFFeL6x4w+Lvg2JJt W8O6Vqum2uwXF7ZK5MqhdzucNmPgNljGFB7Yxnc8E/G3w54tuINPulk0nVJnCRwTNvjlYlsBJAAM 4A4YLksAN1AHplFFFABRRRQAUUUUAFFeP/EKP4h+D/Dl9r9l48+1WtvKubabS7dHWN3Cr84UhmBZ c/KoPJ46HhPAfxv8Sf8ACY2EHifVY7jSbl/ImL28MfkluFk3KFwA2Mkkjbu4zigD6booooAKKK+a PiH8aPFVp451Ow0DUPsNhYym1CG1iZndDh2JYN1bdjGPlC8A5oA+l6K8P+Hc/wAT/Hehy6vN41/s y180xW+dIhlM2PvMMqo2g8AgnJDDjHPuFABRRRQAUUVj+JP+Ek/s6P8A4Rf+yvt3mjf/AGn5nl+X g5x5fO7O32xmgDYor508E+PPGmufGvT9J8QajJGkFxeRy2EG1IkYRSZQ7PvhWUYLFsYyDySfougA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAorzP4ra7468O 6JqGq6LLo1rpNskQ85t8l2WZ1UlVZfLAywGDu4yc5IAw/gN4q13xXeeJ7rXNTnvZF+y7A5ASPIlB 2oMKudozgDOMnmgD2iiiigAork/FeieMNRuDceG/F0ekolvtW0k0+OZZJQWO4yNkqDlRwDjGcHpX z5YfFT4n33iG20P+3vs99PdpZ7LixhTy5GcJhx5eRgnnjI9KAPq+ivH/APhHvjn/ANDnof8A35X/ AOR6P+Ee+Of/AEOeh/8Aflf/AJHoA9gorwvwx4l+JOn/ABg0rwt4u1OOSC4SaTZHDBtmjEcu1wyK GALR5wcHjkCvdKACiiigAooooAKKK+ePin40+KPhf7HZ6jd6VYw3sUoWbR1Y+Z0DAtLl0ZQQQV2/ f4JI4APoeisPwXPNdeBfD1xcSyTTy6ZbPJJIxZnYxKSSTySTzmtygAooooAKKKKACiiigAooooAK K8P8dfFzXbnxafB3gK18y/WU28ly0IZzMrfMsat8oVdrBmcEdSMBQx2LH4aePYryPU5filfJfNmS SEWxmgV2B3BUaQIVBJx8gxwQBgYAPWKK+dPGnxD+J/gi3bw/ryabK91busWrQRurSBgQWjdSgDpu A+4CMKcHIJ9z8J31xqfg3Q7+8k8y6utPt5pn2gbnaNSxwOBkk9KANiiiigAooooAKKKKACiiigAo oooAKKKKACiiigAori/iHf8AjLTdGvL7w0dGitLWymnuZrxpGnBVSf3SBdmQBkbiQScEADnzP4Ke OPEvi74h3g1zV57uOPSnKw4WOMESx4bYgC7vmI3Yzg4zigD6AooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMW pn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7 /wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t78jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+ i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/F D/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp /wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB8QeBP+Sh+Gv8A sK2v/o1a+36+IPAn/JQ/DX/YVtf/AEatfb9ABXzB8cfhvZ+Fby31/RofJ02/lMc1uuAkE2Nw2DOd rAMdoGF2nkAqB9P1yfxO02HVfhl4it52kVEsnuAUIB3RDzVHIPG5AD7Z6daAOP8Agh8RpvFOly6F rFzJPrFim9JXQ5mtxtUFmzy6scEnBIKn5juNeuV8ifA6eaH4t6QkUsiJMk6SqrEB18l2w3qNyqcH uAe1ev8Axhj8b6b4Yv8AWrDxZHbafC8avZ2loYJAhkwrCbczl8sgONgIB4HQgHrlFfMHwa/4SDXv +Eo0zTNTnsbzUvJlu9XeJpmiQebuw24fvnZ1wSfuiRgdyitTRvgn4r8L/E3R7rT7mO40u2uIp5NR WQQEID+8jZNxbJAZcDIIYZIycAH0XRRRQB5/8bf+SQ67/wBu/wD6UR180eM/DD+H20W6jg8ux1XS rW7hYbiC5iTzQSf4t+WIBOA69M4H0v8AG3/kkOu/9u//AKUR1zfi3wpD4l/Z70a4AjW80rR7e9gk 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 Uc4yCTlsgHolFfOHxC8L6j8Hby11/wAE6rfWdheytFPC8iukcmGKKVb/AFi7S+NysV253ZYV638M /H0Pj/w0bxoo7fULZxFeW6OCA2Mh1GchG5xnuGGTtyQDtKK+ZP2gPCOi+HNU0e/0eyjsjqCSrNBA oSLMflgMqAYUkPzjg4BxnJPvfgT/AJJ54a/7BVr/AOiloA6Civnz49eA/Dmh6Daa9pGnR2F3Lerb ypb/ACROpjY52dFI8sfdxnc2ck5HR/s4/wDJPNQ/7Csn/oqKgD2Ciub8c+M7HwL4ak1i+jkmJcQ2 8CcGaUgkLnGFGFJJPQA4BOAfO/B3gaf4j2f/AAl3xClnvlvdz6fpgklhhtYyQNyqCCNwVcYOCuGJ YtkAHtFfMH7OP/JQ9Q/7BUn/AKNir0/xn4Cs/Dunal4w8GH+wtbsbSSU/ZiFt5o1Cl1eIqy/cQkA ADfgnnkeYfs4/wDJQ9Q/7BUn/o2KgD6fooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x 4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/ 4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6qh8J05D/u0vX9EFFF FbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3 /oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kWrb/r8X/0B64r wF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHxB4E/5KH4a/7Ctr/wCjVr7fr4g8Cf8AJQ/DX/YVtf8A 0atfb9ABXN/EGeG2+HPiR55Y4kOmXCBnYKCzRlVHPcsQAO5IFdJXz/8AHn4kWdxZy+DNJm86QSqd RmTBRdpyIRxywYKSQRt27eSWAAOI+BVjcXfxX02aCPfHaRTzTncBsQxtGDz1+Z1HHr6Zr3f42/8A JIdd/wC3f/0ojrH+B3w/uPCmh3Grava+Rq2o4CxuBvggHIU8ZVmOSy57JkAgitj42/8AJIdd/wC3 f/0ojoA8/wD2Zf8Amaf+3T/2tX0BXz/+zL/zNP8A26f+1q+gKACiiigDz/42/wDJIdd/7d//AEoj roPAn/JPPDX/AGCrX/0Utc/8bf8AkkOu/wDbv/6UR10HgT/knnhr/sFWv/opaAPlT4jeGJvAPxBu LWyeSCDet5p0kbkMkZJK4O4sCjArknJ2Z7ivo+H4hrL8Gj42dI4ZxZM2x42KG5BMYXapJ2GUYHOc EZI5xz/7QHhSbXPB0Gs2okefR3Z3jXJ3QvtDnABOVKo2cgBQ5PavBPCsOs+K59O8C2t1ssLvUBdF PLQ+W4TDy5OCdsYY7d3OOOaAPe/gR4UmsPD9z4p1QSSaprTl1knyZBDnOSWG7LtlyckMBGa5v9pr /mVv+3v/ANo175BBDa28VvbxRwwRIEjjjUKqKBgAAcAAcYrwP9pr/mVv+3v/ANo0AegfBL/kkOhf 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 jjuevb3PwJ/yTzw1/wBgq1/9FLXhH7SNjcR+MtJv2jxazaf5Mb7h8zpI5YY68CRPz9jXsfwn1uHX Phloc0Xlq9tbrZyxrIHKNENnzehZQr4PQMOvUgHaV8wfs4/8lD1D/sFSf+jYq+m554bW3luLiWOG CJC8kkjBVRQMkkngADnNfMn7OP8AyUPUP+wVJ/6NioA+n6KKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/C zmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDI lah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofC dOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc +F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5 Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA 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 CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK5vx7/wAiVqH/AGz/APRi10lc349/5ErUP+2f/oxamfws5sZ/u1T0f5HnHgL/AJHX T/8Atp/6LavR/Hv/ACJWof8AbP8A9GLXnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YtY0/4bPEy7 /kXVf+3vyPOPAX/I66f/ANtP/RbV7XXingL/AJHXT/8Atp/6Lava6qh8J05D/u0vX9EFFFFbHthR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FAHE/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGldH8UP+Ratv8Ar8X/ANAeuc+F/wDyMtz/ ANebf+hpXPL+Kj5vE/8AI2h8vyZ0fxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W1dr8UP8AkWrb /r8X/wBAeuK8Bf8AI66f/wBtP/RbUp/xF8jPHf8AI0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxfxG+HN j8Q9LtoJ7qSzvLRy1tcqu8IGxvVkyAwIUdwQQOcZB7SigDxvwv8As86Lo2qJfaxqUmsCF1eK3NuI oiRn/WDcxcZ2nGQOMHcDivZKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACub8e/wDIlah/2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq 9H8e/wDIlah/2z/9GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf +3vyPOPAX/I66f8A9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBx PxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8 v4qPm8T/AMjaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHriv AX/I66f/ANtP/RbUp/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s/ /Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDR bV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8A bT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+ KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9 cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2ui iiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDH8T+J9L8I6HNq+rz+Vbx8Kq8vK56 Ig7scH8iSQASPJ9A8c/EX4o3k3/CNxWPh7SLeVPMvpI/PccDdGCw2yNyXwFXGFBYZG7zDxz4kvPi f8SorWzuv9Bku1sdMSViI0VmCeZjaCN5wxyCwBA52ivq/Q9Gs/D2h2WkWCbLW0iWJMgAtjqzYABY nJJxySTQB5v/AMKs8a/2j9u/4Wvqvneb5237M3l7s5x5fnbNuf4cbccYxxXN6l46+KHwyv1k8X21 prelzuEjuIgsalghOEdFBU5PIdDnYdvc175WfrmjWfiHQ73SL9N9rdxNE+ACVz0ZcggMDgg44IBo Ar+GPE+l+LtDh1fSJ/Nt5OGVuHicdUcdmGR+YIJBBOxXxx4G8Waj8MPHMovEn+zxyta6nZROp37S V91LI2SCCM4I3AMa+x6AOL+Jnj6HwB4aF4sUdxqFy5is7d3ABbGS7DOSi8Zx3KjI3ZHPzfDnxXq3 hoXt1478QW3iia3V3jS7ENpHLgfu/LiGAAPlLKeTlsHOK88/aRvriTxlpNg0mbWHT/OjTaPld5HD HPXkRp+Xua+l6APE/gtqXjqPxLrOheJ11Ka0tkYtPfB5DFcKYxsWUkghkfdjJBGGXgknoPHXjnUx 4x0vwJ4Vlji1i9dHub4iOX7HFyzYRjgvsUsQ2PlxjJYFfTK+aPDV9cah+1RPNdSeZIuoXsIO0DCR xSxoOPRVUe+OeaAOv8dfDnxZpmhm/wDCfjLxXe3EGWntLnUnd5U9Y9u35hz8vO7tyAGz7PxF8Sb/ AOBBntbS+l1b7Wtstwtu/wBpksmjBEyd3Ylgu9QTjLdQXHvFFAHkfwHn8X3WjanceJJdSms5Xhew kv2ZmfKkuVLfMUI8sg/d6453V65RRQAUUUUAFcP8WLrxTaeBpj4St55b6WVYpmtkLzRwsCGaMDnd naMgEgEkYxuHcUUAeR/AefxfdaNqdx4kl1KazleF7CS/ZmZ8qS5Ut8xQjyyD93rjndXrlFFABRRR QAUUUUAFU9Vtbu90u4t7DUJNPu3TEV0kSSGJux2uCGHYj0JwQcEXKKAPnz4meIfiT8OrjTlbxpHq EF8khRxpkETKyFdwK7WGMOuDn14GOdf4K/FTU/FGqXmh+JL2Oe8ZPPspTHHEXA+/H8uATjDABc4D knAFSfG6xt9T8ZfDqwvI/MtbrUHhmTcRuRpLcMMjkZBPSvELG41T4Z/EWOWWL/TtIuysiAbRMnIY KWXhXQnDY6MCO1AH2vRVewvrfU9Otr+zk8y1uokmhfaRuRgCpweRkEdasUAU9W1KHRtGvtUuFkaC yt5LiRYwCxVFLEDJAzgeor5Qn+OPxBmuJZU1qOBHcssUdnCVQE/dG5CcDpySfUmvU/j14huJ4NL8 C6UvmX+sSxvKmQMpvxEmWGPmkGchhjy+eGrxD4h+Hrfwp42vNDtW3x2kVuhfBHmOYIy74JONzFjj PGcDigD6X8D6X4+ki0vV/Evi3zI5YvNuNJOlxxldynarSAKysuVJG3qCORzXoFFFABRRRQAUUUUA FFFFABRRRQAV5H8VPE/xG8LaXeajYJo0Gkm4SKKa3SSe6hU9HfevlgMRjocFwAScNXrlef8Axt/5 JDrv/bv/AOlEdAGf8Ctc1TxD4N1K/wBXv5726bVZRvmfO0GOI7VHRVyThRgDPAr1CvH/ANnH/knm of8AYVk/9FRV7BQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABXN+Pf+RK1D/tn/wCjFrpK5vx7/wAiVqH/AGz/APRi1M/hZzYz/dqno/yPOPAX/I66f/20/wDR bV6P49/5ErUP+2f/AKMWvOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWsaf8NniZd/yLqv/AG9+ R5x4C/5HXT/+2n/otq9rrxTwF/yOun/9tP8A0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW 3/X4v/oD1znwv/5GW5/682/9DSuj+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSueX8VHzeJ/5 G0Pl+TOj+KH/ACLVt/1+L/6A9cV4C/5HXT/+2n/otq7X4of8i1bf9fi/+gPXFeAv+R10/wD7af8A otqU/wCIvkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo 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 3ervE0zRIPN3YbcP3zs64JP3RIwO5RWpo3wT8V+F/ibo91p9zHcaXbXEU8morIICEB/eRsm4tkgM uBkEMMkZOLf7Mv8AzNP/AG6f+1q+gKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/ Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/Hv8A yJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t78jzj wF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ra tv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+Kj5vE /wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/yOun /wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA fGnirQL74XfEaJUWOQWlwl9p7StvEsQkJjL42nOUww45Bxxg19d6HrNn4h0Oy1ewffa3cSypkglc 9VbBIDA5BGeCCKy/GfgbRfHWlpY6xFIDE++G4gIWWE8Z2kgjBAwQQQeD1AI8r0nwj8RfhJeTv4eW DxJoUv72e1B8txtClmWMtlZCNyjYXzgZUkKAAe8Vn65rNn4e0O91e/fZa2kTSvggFsdFXJALE4AG eSQK8zPxe8VfZ0ZfhT4gM5dg6FZQoXA2kN5OSSd2RgYwOTnjH13wV8SPilqiR+JRaeHNFtXLQ26S ickndhsIxDuBhSWKAAkqOWBAPKPBnhTV/ib41dpRJJFJcfadUvBhAiuxLEHGA7fNtUDr2wCR9l1h +F/COi+DtLSw0eyjhARVlnKgyzkZO6R8ZY5ZvYZwABxWhqV7PY26y2+mXeoOXCmK1aJWAwfmPmOg xxjrnkcdcAHzZ+0d/wAlD0//ALBUf/o2Wvp+vnD4leCfiH498WtqsfhT7NaxRC2tka9ty5jVmYM/ 7zG4licDgcDnGT634Q1bxTDo2naf4g8J6lHdwpHbyXi31tOrgKqmZyZA+SdxIAY+5JxQB2lfMHg3 /k6G5/7Cupf+gzV9D6zq2pafvTTvDl9qknlF0aGe3ijL84RjJIGHQZIU4B7nivnix+H3xPtPH0fi 0+HMXX9oG+lig1CGIPucs8YPmEhWBZec8HnNAH0/Xn/xt/5JDrv/AG7/APpRHXUaNq2pahsTUfDl 9pcnlB3aae3ljD8ZRTHIWPU4JUZA7HiuL+KKeKfE3hi+8OaN4Qu5UuXCveTXttGoCSIysi+YSwba fvbSOOOwAOL/AGZf+Zp/7dP/AGtXUftDWNxd/DWOaCPfHaahFNOdwGxCrxg89fmdRx6+ma5v4TeG /Hvw91S+F94SkuNPv0QTGC8tvNjZN2wqDKAR8xBBx1BB4wfcJ7aHWdGltL+1kWC9tzHPbSMAwV1w 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 IwIYZHIyCelAHj/7PnjG3v8Aw43hSX5L7TvMmhAQ4kgZ8klsn5g7kHpwVxnDY9or5c8UfA7xX4b1 R7/w15mo2cLtPbywShLqEJhhleCXznHl5JK5wpIFamjN8eNb05LOKW+tbQ4tGmvo4beRFwAXLOom OAc71y2QcEsKAPa9c8SzWfiXRvDumW8dxqF+5mnLk7LW1QjzJHC8gtyiZwpY8njBw/jb/wAkh13/ ALd//SiOtDwB4At/A1nek38+panqEvm3t9NkGUgsV+Uk4xuYkkkksST0A5/4qxeL/E/hy48OaD4U neGeUC4u7m6t0BRHDKYwJc/MVBywGBxjJ+UA4/8AZl/5mn/t0/8Aa1fQFeD/AAk8OeN/h7eait/4 OnubXUPL3yQahbb4vLD4wpkAbJcfxDGM89K90gkaa3ileGSB3QM0UhUshI+6dpIyOnBI9CaAJKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/wBGLXSVzfj3/kStQ/7Z/wDo xamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT/wDtp/6LavR/ Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8jrp//bT/ANFtXtdeKeAv+R10/wD7af8Aotq9 rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6GldH8UP+Ratv+vxf /QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1d r8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1Kf8AEXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/AJErUP8A tn/6MWukrm/Hv/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/ +jFrzjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5x4C/5HXT/wDt p/6Lava68U8Bf8jrp/8A20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf8AX4v/AKA9 c58L/wDkZbn/AK82/wDQ0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8VHzeJ/wCRtD5f kzo/ih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6 LalP+IvkZ47/AJGkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2f/oxamfws5sZ /u1T0f5HnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YteceAv+R10/wD7af8Aotq9H8e/8iVqH/bP /wBGLWNP+GzxMu/5F1X/ALe/I848Bf8AI66f/wBtP/RbV7XXingL/kddP/7af+i2r2uqofCdOQ/7 tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb/r8X/wBAeuc+ F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtX a/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/+ jFrpK5vx7/yJWof9s/8A0YtTP4Wc2M/3ap6P8jzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrz jwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxaxp/w2eJl3/Iuq/9vfkeceAv+R10/wD7af8Aotq9 rrxTwF/yOun/APbT/wBFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/AOgPXOfC/wD5 GW5/682/9DSuj+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/X4 v/oD1xXgL/kddP8A+2n/AKLau1+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6LalP+IvkZ47/kaQ/7 dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigArm/Hv/ACJWof8AbP8A9GLXSVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP /wC2n/otq9H8e/8AIlah/wBs/wD0YteceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+ RdV/7e/I848Bf8jrp/8A20/9FtXtdeKeAv8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AcT8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A 15t/6Glc8v4qPm8T/wAjaHy/JnR/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+ vxf/AEB64rwF/wAjrp//AG0/9FtSn/EXyM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm /Hv/ACJWof8AbP8A9GLUz+FnNjP92qej/I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf 8jrp/wD20/8ARbV6P49/5ErUP+2f/oxaxp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX /I66f/20/wDRbV7XVUPhOnIf92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0N K6P4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1 xXgL/kddP/7af+i2rtfih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooo rpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACub8e/wDIlah/2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq 9H8e/wDIlah/2z/9GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf +3vyPOPAX/I66f8A9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBx PxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8 v4qPm8T/AMjaHy/JnR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHriv AX/I66f/ANtP/RbUp/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s/ /Ri1M/hZzYz/AHap6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDR bV6P49/5ErUP+2f/AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8A bT/0W1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+ KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9 cV4C/wCR10//ALaf+i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2ui iiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7af8A otq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWNP+GzxMu/5F1X/t78 jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5 Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/y NofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8A RbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNj P92qej/I848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D /tn/AOjFrGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4T pyH/AHaXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X 4v8A6A9c58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDt p/6Lau1+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv /Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10//tp/6LavR/Hv/Ila h/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kXVf8At78jzjwF/wAj rp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B 65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wChpXPL+Kj5vE/8jaHy /JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr8UP+Ratv+vxf/QHrivAX/I66f/20/wDR bUp/xF8jPHf8jSH/AG6e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzYz/dq no/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/ +jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp/wCi2r2uvFPAX/I66f8A9tP/AEW1e11VD4TpyH/d pev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK6P4of8i1bf9fi/+gPXOfC/ /kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8i1bf9fi/+gPXFeAv+R10/wD7af8Aotq7X4of8i1b f9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8AIlah/wBs/wD0YtdJ XN+Pf+RK1D/tn/6MWpn8LObGf7tU9H+R5x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi15x4 C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLWNP+GzxMu/5F1X/t78jzjwF/yOun/wDbT/0W1e114p4C /wCR10//ALaf+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/wCRatv+vxf/AEB65z4X/wDIy3P/ AF5t/wChpXR/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaVzy/io+bxP/ACNofL8mdH8UP+Ra tv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtXa/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1Kf8RfI zx3/ACNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8 jzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrG n/DZ4mXf8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCii itj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigDifih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC//AJGW5/68 2/8AQ0rnl/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW3/X4v/oD 1xXgL/kddP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1 D/tn/wCjFqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2 n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/k ddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDX m3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QH rivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9unt dFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA fPPxM/5KFqn/AGy/9FJXJV1vxM/5KFqn/bL/ANFJXJV89X/iy9WfseWf7jR/wx/JBRRRWR3BRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFfTvhb /kUNF/68IP8A0WtfMVfTvhb/AJFDRf8Arwg/9FrXoZd8UvT9T47jL+BS/wAT/I1qKKK9Y/Pwoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/wBG LXSVzfj3/kStQ/7Z/wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15 x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8jrp//bT/ANFtXtde KeAv+R10/wD7af8Aotq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/yMtz/1 5t/6GldH8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/JnR/FD/kWrb/r8X/0B 64rwF/yOun/9tP8A0W1dr8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1Kf8AEXyM8d/yNIf9untd FFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf N3xYt7ub4i6kba+NuAIgy+Urg/uk55rym41nWLW4kglucOjYP7teffp0r2H4mf8AJQtU/wC2X/op K8Z8Qf8AIcuf+A/+givNoWnXnCST36eZ9tmiqYfK8PiKNSUW1FO0nb4e17LbodLYQam6wzXV+cEB mhEKg/QnH58f41qUUV5s5uTufZ4bDxoQ5E2/Ntt/i/y0CiiipOgKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiueXVft/iW2hi/1ELOAQc7ztPPpj0/+vWlOk53t0VzjxmOp4XkU95yUUvV/pv+ B0NFFFZnYFFFFABRRRQAUUUUAFFFc94k1XyozYRffdQZGB+6PT6n+R960pUnVmoo48fjqeCw8q9T psu76L+vU6Gvp3wt/wAihov/AF4Qf+i1r5ir6d8Lf8ihov8A14Qf+i1rsy74pen6nzXGX8Cl/if5 GtRRRXrH5+FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzf j3/kStQ/7Z/+jFrpK5vx7/yJWof9s/8A0YtTP4Wc2M/3ap6P8jzjwF/yOun/APbT/wBFtXo/j3/k StQ/7Z/+jFrzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxaxp/w2eJl3/Iuq/9vfkeceAv+R10 /wD7af8Aotq9rrxTwF/yOun/APbT/wBFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/ AOgPXOfC/wD5GW5/682/9DSuj+KH/ItW3/X4v/oD1znwv/5GW5/682/9DSueX8VHzeJ/5G0Pl+TO j+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLau1+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6LalP+ IvkZ47/kaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooA+efiZ/wAlC1T/ALZf+ikrxnxB/wAhy5/4D/6CK9m+Jn/JQtU/7Zf+ikrxnxB/ yHLn/gP/AKCK8zDf7zP5/mfcZ5/yJMP/ANu/+ks7muZ8QxX1taxOb+SSNv3brgJkkf7PUcdD0/Gu mrC8Vf8AILi/67D/ANBauTCu1WKPoM+pqWX1ZXaaWlm11XZ6/Mi0iO7vdHhhSQ2sCMd0ik75Oc8e g5Izz0+tVdX8PxWVkbm3lchCN6yEHIJxxgVs+H/+QHbf8C/9CNHiD/kB3P8AwH/0IVsq044jljor /qebPLcPVyhVaq5pKndNt6WjdW6JfLXqyhpF/f6jafZo5AkkZ+e4ZQxC9hjuTzz6D1qS68MxTLI6 3U7XBHDTMGBPvxmq/hH/AJfP+Af+zV01KvUlRrNU9DXKsHSzDL6c8Xebaa1b0s2lbXfz1fmcv4Wv n817J3yhXdGCeh7gfXOfwNb17FdyxAWlysDjJyU3bvQew/A1yHh//kOW3/Av/QTXc0Y1KFbmRPDU 5YnLXTqN2Taum07aPda6XOF0y4u5dYgdWM8+GVPNc4HB6n0GScVsS+Gri7YS3Ool5SOcx5A9hz0/ Ksjw/wD8hy2/4F/6Ca7mtsXVlSqLk00PP4dy+jjsHJ4m8veel3bZa6PV+rflY4aC6vNB1BoSchG+ eLd8rA459jjHP/6q7eORJoklQ5R1DKfUGuZ8WxoJbWUD52VlJ9hjH8zV/SpWg8LLMoBaOORgD0yC xrPEJVaUaqWr0OrKKk8Dja+BlJunBcy62W/5P715kF7f3Ooan/ZljIYkU/vZQpBUjrz6dB2574NX U8P6YsWw2+7plixySPx/lWF4V/5Ckv8A1xP/AKEtdhUYhujJU4OyX4nTk0IZjRljMVFSlJtJPVRS 2ST0Xm92cjepc+HLtPsk7m3kG4K+CCRjII/LnjrXRWd5/aOnrPblY3bghxu2kdQQCP6dRVTxJEsm jSMScxsrDHrnH9TVLwlI5iuoifkVlYD3Oc/yFVO1XD+1fxL8THDuWBzZ4GLfsqiulf4XZ7dtn95n 661/BdfZ7i9aZGQMMDaCMnqo4zkfyrQ/sy61fS7Ym48qJIlEcTIeSFxuJz3Oce2PU1T8Vf8AIUi/ 64j/ANCaum03/kF2n/XFP/QRWlWo4Uac47+hyYHBU8RmeLw9VtwVlbmfdW1vfTtt32MnR9GlS0uI NQQ+U7KVjEh6jPPyn6fl7Csi0s7eXxI1o8eYBLIu3J6DOOevau3rj7D/AJHB/wDrtL/JqVCtOftJ PsaZpluHw31OjFXXPa71bW9n5a7bHSWml2VjKZbeHY5XaTuJ4/E+1ZPiTVLi2kS0gYx7lDs6nDHk 8D06f579FVS7sbK4ZZ7qJGMQzuY4AHXn1H1rlpVUqinU1Pdx+BnLByw+Dap37aK3Xba/6bkNvo+n JahBaqysvLSL85yPfkH8sVhwSSaT4kNpE7G3aUL5eeMNjHryMjnvit4aos8jR2UL3JBwZB8sYOcH 5j+fANc3c+aPFUXnlDL50W7YCFzhema6cOpyclU6p6P+v8jxM2lh6UaE8IknGcVzRVlbZq6te/b3 l5nXzI8kRWOUxMSPnABIGeevHSuK1yS5XUpreW6kmRWBAY4HTjgcZ5rua4bxB/yHLn/gP/oIpZf/ ABGvI04uVsJGSbu5Jbu1rPpe34HQS6Vc6od2ozmOPOUt4SPk6dWxyev9KwLiK48PamnlTBm2hgcY DKeoI/D+VdxXMeLVUNaNtG4hwTjkgYx/M/nRha0pT9m/hfQWf5bSo4V4um37WLT5ru71t6emiS2R 0UbpdWqSDcElQMOcEAj26GuN8QWdvY36RW8exDEGIyTzk+v0rrdN/wCQXaf9cU/9BFcz4q/5CkX/ AFxH/oTUsG2q7ittSuJYxqZXGtJLm9zX11dvU349D02GVJUtsOjBlO9uCPxr6u8Lf8ihov8A14Qf +i1r5ir6d8Lf8ihov/XhB/6LWtcBOUpy5nfT9Ti4sw1Ghh6SowUU5PZJfZ8jWooor0z4YKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10 lc349/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceA v+R10/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXing L/kddP8A+2n/AKLava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf +hpXR/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK 8Bf8jrp//bT/ANFtXa/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRR XSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHzz8 TP8AkoWqf9sv/RSV4z4g/wCQ5c/8B/8AQRXrvxWnni+IOqiCzedsQkYdVX/VJxknP6V5Rd6Nq13d yztanMjFsGVTgdhnPbpXmULQrzlJpb9fM+4zVVMRlWHoUYSk0ot2i7L3e9rdeh2dYXir/kFxf9dh /wCgtVrT59SWOKG8sW+VQpmWVWz7kZ9OvX6VT1uHUdSijhhsWWNW3ku6ZJ5HZunNc1CHJWV2rLzR 7mZ4j6xltRQhLmkrW5ZXvp5fjsXPD/8AyA7b/gX/AKEaPEH/ACA7n/gP/oQqLRhfWdolrc2TBVb5 XR1PBOTnn37VJrSXV1ZS2lvaO5cr85dQuAQfXPbHSi3+0Xvpe+/mSpN5P7PlfNyctuV3vy2ta3/A 8zN8I/8AL5/wD/2aumrmtEtNS0uaTzLIvFIBu2yJuBGcY5963bieeOFWhs3lkYZ2b1Xb7E5/lnpR ilzVm4tO/mGQydDLowqxacb3Ti77vbTXfocd4f8A+Q5bf8C/9BNdzXI6bpWpWOow3LWZZUJyBImc EEevvXWRsXjDNG0ZP8LYyPyJFXjpKU1KLurHPwtSqUcLKlVi4y5m9U1pZd0cR4f/AOQ5bf8AAv8A 0E13NcBpIuDqkAtWRZskqX+70OQfwzXUR6lqRJibSHMygZIkAQ+uCePTjnv6VrjqblUTVtu5w8LY ynQwkoTUtZOzUW1stNE9fW3qZ/i1lLWi7huAckZ5AOMfyP5VsWtgY9DWyJKM0JViedrMDnp6Emq1 lpcz3hv9SZZLjjy4xysf/wBcf/X5NbFc9WqlCNOL2/M9jA4GVTE1sbWjb2isk91G1tezfbp6nD6N K9hriRyAgljC6jB5Jx/PH5V3FYmr6AL+Y3MEgSYgBg33W7Z9uKmt7+/ijjjvtPmaU8B4drBj6nnC 9v16VeIca9pw36o5cohVyt1MLXT5L3jKza16Oydntut7i+ImVdEnBYAsVABPU7gf6Gqvha2MVjJc EEGZsDngqvf8yfyp8lhe6tdI+oKILSM5Fur7ix9SR+P+Tmtdv3MP7uIsFACxpgce2SBUSmoUvZJ3 bd3/AJHTSw0sRmH9oTi4xhHljdO73vK26WrS6vscn4q/5CkX/XEf+hNXTab/AMgu0/64p/6CK57V tP1TUr0zCy2Iq7EBkXOMnrz15rc017pLaG3uLJ4jGoTeHVlwB165/Q1pXs6EIpq680cWVqcc1xNW UJKM9m4tJ6ry/Oxfrj7D/kcH/wCu0v8AJq7CuR1XSr221Nru1ieRGkEisg3FW68j6/h0qcI4+9Fu 10dHEUKiVCvCLkqc03bex11cjrt2b3V0sjMEt42VS2cqGPVj9M4/A1uWQ1OeVZb/AGQLGTtii/jJ HVjk8D09foKytf0a5nvWuraMyK65cAjIIGOB34x696eFUIVbSa2/EjPZ4jFYBSo05W5ldNNNx9Fq lffrbU6OGGO3hWGFAkaDAUVyd/8A8jgn/XaL+S1fsj4guIIoyVt0HWaRcuRnGCD3/AZx1qhq2jXV teCa0SaVDg71yzh+5PfPGc+9Xh4KFRqUldpnJm+IqYrB050aElGEovVW26Jb2W17JbfLsK4bxB/y HLn/AID/AOgiurtH1DyHmvYlMhwFghxkc9ck4yc+vauf1LStSvtRmuVsyquRgGRM4AA9falg7U6j 5mtu5rxJ7TF4KCpU5NuV7crvaz33t6Xv5HXVzPi7/lz/AOB/+y1vW888kLNNZvFIozs3q272Bz/P HWsDWrHUtTu1eO0dYkXaqtKnXucZ4/8ArVnhVy1k5NK3mdmfzdbLpQpRcnK1kou+99dNNupu6b/y C7T/AK4p/wCgiuZ8Vf8AIUi/64j/ANCauh0o3aWkdvdWpiaNQoYMpUgYA6HOf8PwrO8R6VPdtHc2 6GRkUq6g84HIIHfv+lVh5KGIvJ9zDOKVTE5Oo0ottculmnpa+m+h0FfTvhb/AJFDRf8Arwg/9FrX yFpo1ma1jtpVFvbhdvmkYk2jjAGeD2zj3r698Lf8ihov/XhB/wCi1rowVPkqSV7+nqeTxLi/rWEo 1ORxV3ura8utlvZd9L9DWooor0T4sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A6MWpn8LObGf7tU9H+R5x4C/5 HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YtY0/4bPE y7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6qh8J05D/u0vX9EFFFFbHt hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaV zy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kWrb/r8X/0B64rwF/y Oun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHzz8TP8AkoWqf9sv/RSVyVeneOfA3iPWfGV/f2Gneday +Xsfz41ziNQeCwPUGue/4Vn4v/6BH/kzF/8AF14VajUdSTUXu+h+rZdmODhg6UZVYpqMftLsclRX W/8ACs/F/wD0CP8AyZi/+Lo/4Vn4v/6BH/kzF/8AF1n7Cr/K/uO3+08D/wA/o/8AgS/zOSorrf8A hWfi/wD6BH/kzF/8XR/wrPxf/wBAj/yZi/8Ai6PYVf5X9wf2ngf+f0f/AAJf5nJUV1v/AArPxf8A 9Aj/AMmYv/i6P+FZ+L/+gR/5Mxf/ABdHsKv8r+4P7TwP/P6P/gS/zOSorrf+FZ+L/wDoEf8AkzF/ 8XUFx8L/ABy+RBp8cQK4y0kTEH1H7wD9KFQqN/C/uZE82wUY3VWL9JR/Vo8g8P8A/Ictv+Bf+gmu 5q7a/A7xpZ3UdxFbDehyMvCQfUf6ytyL4Y+NQp87S0ds8FJolGPoZDXXjISqTUoJ/c/8j5/hzEUc Hh5Ua84ptt/FFrZdpeXY5aiut/4Vn4v/AOgR/wCTMX/xdH/Cs/F//QI/8mYv/i65PYVf5X9x9H/a eB/5/R/8CX+ZyVFdb/wrPxf/ANAj/wAmYv8A4uj/AIVn4v8A+gR/5Mxf/F0ewq/yv7g/tPA/8/o/ +BL/ADOSorrf+FZ+L/8AoEf+TMX/AMXR/wAKz8X/APQI/wDJmL/4uj2FX+V/cH9p4H/n9H/wJf5n JUV1v/Cs/F//AECP/JmL/wCLo/4Vn4v/AOgR/wCTMX/xdHsKv8r+4P7TwP8Az+j/AOBL/M5Kiut/ 4Vn4v/6BH/kzF/8AF0f8Kz8X/wDQI/8AJmL/AOLo9hV/lf3B/aeB/wCf0f8AwJf5nJUV1v8AwrPx f/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF0ewq/wAr+4P7TwP/AD+j/wCBL/M5Kiut/wCFZ+L/APoE f+TMX/xdH/Cs/F//AECP/JmL/wCLo9hV/lf3B/aeB/5/R/8AAl/mclRXW/8ACs/F/wD0CP8AyZi/ +Lo/4Vn4v/6BH/kzF/8AF0ewq/yv7g/tPA/8/o/+BL/M5Kiut/4Vn4v/AOgR/wCTMX/xdH/Cs/F/ /QI/8mYv/i6PYVf5X9wf2ngf+f0f/Al/mclRXW/8Kz8X/wDQI/8AJmL/AOLo/wCFZ+L/APoEf+TM X/xdHsKv8r+4P7TwP/P6P/gS/wAzkq+nfC3/ACKGi/8AXhB/6LWvD/8AhWfi/wD6BH/kzF/8XXuu gWs1l4c0u0uE2TwWkUci5B2sqAEZHHUV3YCnOMpcysfKcWYvD16NJUZqTTezT6eRo0UUV6Z8OFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/8A oxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCj FrzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf8i6r/wBvfkeceAv+R10//tp/6Lav a68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/6A9c58L/+Rluf +vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rnl/FR83if+RtD5fkzo/ih/wAi1bf9 fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLalP8AiL5GeO/5GkP+ 3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooryb42f8wP/t4/9p1lWqezg52vY7stwX13FRw/Na99d9k2es0V8mUV w/2j/d/E+q/1M/6ff+S/8E+s6K+TKKP7R/u/iH+pn/T7/wAl/wCCfWdFfJlFH9o/3fxD/Uz/AKff +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 n/8AbT/0W1dr8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbUp/xF8jPHf8jSH/AG6e10UUV0n1AUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFeTfGz/mB/9vH/ALTr1mvJvjZ/zA/+3j/2nXLjP4Mv66nucN/8jOl8/wD0lnktFRXFxDax GWeRY0Hdj19h6n2rn/7b1DU5zDpsAjTIHmMMleepPQcDpz7V5FOjOorrZdT9FxmZUMJJQndzltFK 7fy6ersdLRWF/Y+pzfvJtYkSQ9VjB2j6YI/lSXI16yJmSdLyNTjYIgGOe+AM9fQ1SoxbtGav8zGW ZVYRc6uHmo+XK3bu0ndfib1Fc1pOt3F9q6R3GArRsqpGMLu65OT6A/5zXS1FWlKlLlkdGAzCjj6T q0dk2tfK3+YUUUVmdwUUUUAFFFFABRRRQAUUUUAFFFFABRXMa9Lqv9oiOATrDgCPyc/McZOcdTwe PQV0Vt5v2WHz/wDXbBv6fexz0961nS5IRldann4XMFiMRVoKElydWtH6f1qtSWiiisj0AooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKjm80Qt5A Qy4+XeSFz74rl9X1LVrScQSzRR7484gHGCSOp5B+lbUaLquyaPNzHM6eAp+0qRk15LT77nWUVXsG Z9OtWZizNChJJyScCrFZNWbR305+0hGa6pP70n+oUUVV1F7mPT5ntF3ThflGM/XjucZoirtIVWoq cJTabsm9NXp2LVFc74cbUXuZjctOYNuMyk/eBxxn8c4/Guiq6tP2cuW9zmy/GfXKCrKDje+j30Ci iisztCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqrqL3MenzPaLunC/KMZ+vHc4zWP4cbUX uZjctOYNuMyk/eBxxn8c4/GtY0uam53Wh59fMFSxdPC8km59UtF6/r207nRUUUVkegFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFIzKilmYKqjJJOABXMXeo3usXgt9M8xIUbmRSVz7k9h1wP68DWlRd R9kup5+PzGng4q6cpS0UVu/+B57HUUU2NXWJFd97hQGbGNx9cdqdWR3p3VwooooGFFFFABRRRQAU VV1GaW3064lhXMiISORx78+nX8K5fS9avv7RhjlmaWOWXDK2OrccHHAHXArelh5VIOS6Hk47OKGC xFOhUTvPqtlrb8+2x2VFFFYHrBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFUNX1NdMtPMADSudqKT39T7D/CqhFzkox3 ZjiK9PD0pVartFasv0VjNpV7PaeY+pXSXjKCQH2oG9ML+WR9ag0CXURdz214JWRActJk7W44DfQ5 /WtfYpxclJOxwLMpxr06VSjKKns9Gtr2dtn3vsdBRRRWB6oUUVjeIpb6K0T7IHCEkyvH95QOR06D rk+1XThzyUb7nNjMSsLQlXcW+Xot/wCvyNmiszQvtn9nf6b5m/edvmfe28de/XPWtOlOPJJxvexW Fr+3oxq8rjzK9nuvUKKKKk3CiiigAooooAKKKKACiiigAormtZ1HVrFosyQRK5baIhuOBjqWHv2r U0OSSbRoHldnc7ssxyT8xradBxpqo2rM8vD5rTr4uWEjGSlFXd1bt5t9TRooorE9QKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopG3BTtALY4BOAT9a5TV9S1a 0nEEs0Ue+POIBxgkjqeQfpWtGi6suVM87Msyp4Cn7SpFteS/N3R1lFV7BmfTrVmYszQoSScknAqx WbVm0d1OftIRmuqT+9J/qFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiisbxFLfRWifZA4QkmV4/vKByOnQdcn2q6cOeSjfc5sZiVhaEq7i3y9 Fv8A1+Rs0VmaF9s/s7/TfM37zt8z723jr36561p0px5JON72Kwtf29GNXlceZXs916hRRRUm4UUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFdb8M/+ShaX/21/wDRT1yVdb8M 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 L/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi// AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF 19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP 9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mf PP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0C P/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hW fi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF /wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2f S7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7 n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPx f/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4u j/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH /kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DU Uf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d /LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8A wrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/Jm L/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi// AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF 19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP 9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mf PP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0C P/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hW fi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF /wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2f S7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7 n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPx f/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4u j/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH /kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DU Uf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d /LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8A wrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/Jm L/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi// AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF 19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP 9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mf PP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0C P/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hW fi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF /wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2f S7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7 n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPx f/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4u j/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH /kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DU Uf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d /LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8A wrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/Jm L/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi// AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF 19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP 9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mf PP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0C P/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hW fi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF /wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2f S7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7 n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPx f/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4u j/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH /kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DU Uf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d /LH7n/mfPP8AwrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8A wrPxf/0CP/JmL/4uj/hWfi//AKBH/kzF/wDF19DUUf2fS7sP9b8d/LH7n/mfPP8AwrPxf/0CP/Jm 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 4v8A+gR/5Mxf/F19DUUf2fS7sP8AW/Hfyx+5/wCZ88/8Kz8X/wDQI/8AJmL/AOLo/wCFZ+L/APoE f+TMX/xdfQ1FH9n0u7D/AFvx38sfuf8AmfPP/Cs/F/8A0CP/ACZi/wDi6P8AhWfi/wD6BH/kzF/8 XX0NRR/Z9Luw/wBb8d/LH7n/AJnzz/wrPxf/ANAj/wAmYv8A4uuh8DeBvEejeMrC/v8ATvJtYvM3 v58bYzGwHAYnqRXstFOOBpxkpJvQyr8U4yvSlSlGNpJrZ9fmFFFFdp80FFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D /tn/AOjFrpK5vx7/AMiVqH/bP/0YtTP4Wc2M/wB2qej/ACPOPAX/ACOun/8AbT/0W1ej+Pf+RK1D /tn/AOjFrzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrGn/DZ4mXf8i6r/ANvfkeceAv8AkddP /wC2n/otq9rrxTwF/wAjrp//AG0/9FtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/wAi1bf9fi/+ gPXOfC//AJGW5/682/8AQ0ro/ih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSueX8VHzeJ/5G 0Pl+TOj+KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otq7X4of8AItW3/X4v/oD1xXgL/kddP/7a f+i2pT/iL5GeO/5GkP8At09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KAPPPjJ/yKFp/wBf6f8AouSvD69w+Mn/ACKFp/1/p/6Lkrw+vFx38b5I/TuFf+Rav8UvzQUUUVxn 0YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeh/Bv/kb7v/rwf/0ZHXuFeH/Bv/kb7v8A 68H/APRkde4V7WB/g/Nn5jxV/wAjJ/4Y/kwooorsPnAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAK5vx7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2f/oxamfws5sZ/u1T0f5HnHgL/kddP/7a f+i2r0fx7/yJWof9s/8A0YteceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLWNP+GzxMu/5F1X/ ALe/I848Bf8AI66f/wBtP/RbV7XXingL/kddP/7af+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPx Q/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaVz y/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtXa/FD/kWrb/r8X/0B64rw F/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQB558ZP8AkULT/r/T/wBFyV4fXuHxk/5FC0/6/wBP/RcleH14uO/jfJH6dwr/AMi1 f4pfmgooorjPowooooAKKKKACiiigAooooAKK57xJqvlRmwi++6gyMD90en1P8j710NaSpOMFJ9T joY6nXxFShDXktd+bvp8rfoFFFFZnYFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRXPLqv2/wAS20MX+ohZwCDnedp59Men/wBetKdJzvbornHjMdTw vIp7zkoper/Tf8DoaKKKzOwKKKKACiiigAooooAKKKKACiiigAooooAKjm80Qt5AQy4+XeSFz74q SihCkrpq9jjdU1XVYbuW2luFQjGRAMAcA8HrXZVx/ir/AJCkX/XEf+hNXYV2Ym3s6bStc+cyV1Fj cXTnNyUWkru+mr/XyOX8QalfW2orFFI0MaqrrtI+Y88n27YPpWroV9Lf6d5kxzIjlC3HzdD0HTrj 8Kt3l5HZwlmIMhH7uPPzSN2AHXqR+dRaXbSW1qxnAE80jSyKpyFY9h+lTKcZUEuWzXXv3NqGGrUs 0lNVnKMk249I7cvW197Kydtdt7tFFFcp7wUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUisrjKsCMkZB7jg0tAk76oKKKKBhRRRQAUUUUAFFFFABRRRQAVjeIpb6K0T7IHCEkyvH9 5QOR06Drk+1bNFXTnySUrXObGYd4mhKipON+q3RmaF9s/s7/AE3zN+87fM+9t469+uetadFFKcue Tla1ysLQ9hRjS5nLlVrvd+oUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVna0 94mnN9iVjIWAYoMsF9R79K0aKqEuWSla5jiKLrUpUlJxurXW69DE8NtfPBM120rRsVMRlOSeOcZ5 x09v1rTu/tm1fsYg3Z+YzE4x7AVYoqp1OabnZehhhsG6GFWHc5O32r67331/XQ48arqMmsxW01xh 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 Kel9Uc+a4bGUMTSx+HXO4rlkurXe3nrttpvqdZVS+u2tljSJQ9xM2yNT0z3Y98DvXO2sniRo9kQm wv8Az1VQefduTW1pekmyke4nnae6kUBnJPA44569OvsOlZyoxpaykn5I7KGZVsclCjSlBPeUtLen d9FpZbvbWzqX/ILu/wDri/8A6Caw/CP/AC+f8A/9mrop4lngkhYkLIpUkdcEYrkbSy1fS9R/cW29 ypXOMow+vbpnsavD2lRnC9mcube0o5jhsUoOUVdOyu1fyXqdlXH2H/I4P/12l/k1dLYx3W1prxx5 sgH7tPuRgdh788n/AArnNV0q9ttTa7tYnkRpBIrINxVuvI+v4dKeF5U5wb3VhZ66s6eHxUKbahPm a629Ff8A4Gl/Lrq4iWd9N8Syzun3ZmYjr8rf1wa6WyGpzyrLf7IFjJ2xRfxkjqxyeB6ev0FRa1oo 1ILLEwS4QbQWPysvofTr/nssPKNKbjN6NWZpm9Cvj8NCvhotThLmimrN/J7eSe+vdGrHIk0SSoco 6hlPqDSsyopZmCqoySTgAVxlvb65p0oigjmTf2UB057nqAeOtacGk6hqMivq87CNGGIQR83v8vA6 9evXpSnhoRd3NW/ErDZ1iK8eSOGl7TrfSK9W+nW1m+h638DLmS88TXdw0flo9lIY1PXb5keCfc8n 6EV7zXh/wb/5G+7/AOvB/wD0ZHXuFehgmnSuu7Pj+Joyjj+WTu+WN330YUUUV1nz4UUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/oxa6Sub8e/8iVqH/bP/ANGLUz+FnNjP 92qej/I848Bf8jrp/wD20/8ARbV6P49/5ErUP+2f/oxa848Bf8jrp/8A20/9FtXo/j3/AJErUP8A tn/6MWsaf8NniZd/yLqv/b35HnHgL/kddP8A+2n/AKLava68U8Bf8jrp/wD20/8ARbV7XVUPhOnI f92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooA4n4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0ro/ih/yLVt/1+L/6A9c5 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 i3iH/oA6p/4Byf4Uf8It4h/6AOqf+Acn+FHJLs/uYfWqH/PyP/gS/wAzJorW/wCEW8Q/9AHVP/AO T/Cj/hFvEP8A0AdU/wDAOT/Cjkl2f3MPrVD/AJ+R/wDAl/mdb8G/+Rvu/wDrwf8A9GR17hXjvwo0 XVdO8U3U19pl5axNZOoeeBkUnehxkjrwfyr2KvZwSao692fm3FE4zzFuDTXLHbXo+1wooorrPngo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s/8A0YtdJXN+Pf8AkStQ/wC2 f/oxamfws5sZ/u1T0f5HnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YteceAv+R10/wD7af8Aotq9 H8e/8iVqH/bP/wBGLWNP+GzxMu/5F1X/ALe/I848Bf8AI66f/wBtP/RbV7XXingL/kddP/7af+i2 r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6GldH8UP8AkWrb /r8X/wBAeuc+F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/AEB64rwF/wAj rp//AG0/9FtXa/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBuntdFFFdJ9QFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFfMX/AAlPiH/oPap/4GSf40f8JT4h/wCg9qn/AIGSf41539ox/lf4H2P+ptf/ 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 AIGSf40f8JT4h/6D2qf+Bkn+NH9ox/lf4B/qbX/5+x+5n07RXzF/wlPiH/oPap/4GSf40f8ACU+I f+g9qn/gZJ/jR/aMf5X+Af6m1/8An7H7mfTtFfMX/CU+If8AoPap/wCBkn+NH/CU+If+g9qn/gZJ /jR/aMf5X+Af6m1/+fsfuZ9O0V8xf8JT4h/6D2qf+Bkn+NH/AAlPiH/oPap/4GSf40f2jH+V/gH+ ptf/AJ+x+5n07RXzF/wlPiH/AKD2qf8AgZJ/jR/wlPiH/oPap/4GSf40f2jH+V/gH+ptf/n7H7mf TtFfMX/CU+If+g9qn/gZJ/jR/wAJT4h/6D2qf+Bkn+NH9ox/lf4B/qbX/wCfsfuZ9O0V8xf8JT4h /wCg9qn/AIGSf40f8JT4h/6D2qf+Bkn+NH9ox/lf4B/qbX/5+x+5n07RXzF/wlPiH/oPap/4GSf4 17t8PLq4vfAum3F3cSzzv5u6SVy7NiVwMk89ABW9DFxrS5UrHm5rkFXLqKrTmpJu2ifZvr6HT0UU V1HgBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/ yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8A DZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKK KK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A +Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1 bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorpPqAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD5 Mooor5k/cQooooAKKKKACiiigAooooAKKK5/xHLqKSQraiVYCOWizktnGCR9Rj1z3rSlT9pLlvY4 8fjFg6DrOLlbot9ToKKp6V9p/syD7Xu87b827rjPGffGKuVElyto3o1Pa041LNXSdnur9worGuL6 a91b+zbSQxogJnmUgnGOg9OoGeufpzT1fT7+zh8+1vrySNR+8VpSWX347fy/lvGhdqMpWbPNr5ry QnUo0nOMHZtNbreyerS6tfjZnS0VzeoXWrHRLaQJJG53eeyqVZcHg+wIGSa0dC+2f2d/pvmb952+ Z97bx179c9aUqDjDnbW9i6GaRrYlYeNOSvFSu1ZapO3429bo06KKKwPUCiiigAooooAKKKKACiii gAorG8RS30Von2QOEJJleP7ygcjp0HXJ9qm0L7Z/Z3+m+Zv3nb5n3tvHXv1z1rV0v3ftLr0PPjmC eNeDUJaK/NbT+v10NOiiisj0AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACisbxFLfRWifZA4QkmV4/ vKByOnQdcn2qbQvtn9nf6b5m/edvmfe28de/XPWtXS/d+0uvQ8+OYJ414NQlor81tP6/XQ06KKKy PQCiiigAorN1fV49MhwMPcOPkT+p9v5/yr6FFqRMtxfSybZPuxSdc564/hHXj/61aqi/Z+0ei/M8 +WY0/rawlNOUutto+r8+25tUUUVkegFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUjMqKWZgqqMkk4AFAm7asWiuXu9RvdYvBb6Z5iQo3Mikrn3J7Drgf14HTRq6x IrvvcKAzYxuPrjtWtSi6aXM9X0ODB5jDGTmqUXyx05ujfW3e3fYdRRRWR6AUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAV9DfDP/knul/9tf8A0a9fPNfQ3wz/AOSe6X/21/8ARr13 Zf8AxX6HyvF/+4x/xL8mdbRRRXsH5wFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/+jFrpK5vx7/yJWof9s/8A 0YtTP4Wc2M/3ap6P8jzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrzjwF/yOun/wDbT/0W1ej+ Pf8AkStQ/wC2f/oxaxp/w2eJl3/Iuq/9vfkeceAv+R10/wD7af8Aotq9rrxTwF/yOun/APbT/wBF tXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSuj+KH/ItW 3/X4v/oD1znwv/5GW5/682/9DSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/ AKLau1+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6LalP+IvkZ47/kaQ/7dPa6KKK6T6gKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooA+TKKx9cF1Dp9xcRXsiAMuEUAYHAxnrnPOc+1Y+gm/mN0tq6ozsjSTyfMV5PQdycnr6e9e FDD81N1ObY/VsRnPscZHCOk25K+lvO1l8urVlqzsKK5jUPDax2klzHcu8qKXk8zneepI9O/rUvhj UZJg9lKxby13Rk9l6EZ/EY//AFUPDp03UhK9t9LBTzepHGRwmKpcjmvdfMpJ+WiX/D/edFRUN1cx 2drJcSk7EGTgZJ9BWHYW82vE3eoMfs4OEgXKqSO/6n8fpis4UuaLm3ZI7MTjvZVY4enHmqS1teyS 7t62XybfQ6Kisi58OWE8eI0ML44ZCewwMg//AKz61laZrdzaXn2S/cum7yyzsMxtnqT3FXGgqkW6 bu10OWtmssJWhTxcOWM9FJO6v2eia/E6tmVFLMwVVGSScACsDS9TbU9fkkAKxJAVRSe25eT7n/Ct i7sbe+VVuULqpyBvIGfwNch4fs7e+v3iuI96CIsBkjnI9PrWmHhB0pye9jkzbE4qGOw1KCXK5X33 aXXTRK/nfqdvRVS2063sVk+xxiJnHJJLDIzjgn3rn/EJv7byhJftIku/5ETywBxxweRz3rGlRVSf LFnoY7MJ4LDe3q0723s1Za2Wrs/wOrorM8P/APIDtv8AgX/oRqW40ewup2mmg3SNjJ3sM4GOxqXC MZuMnsdFPEVa2HhWpRV5JOzdrXV97P8AIwPDMjzazPK5y7xMzH1JYV1tcR4fs7e+v3iuI96CIsBk jnI9PrXV2ml2VjKZbeHY5XaTuJ4/E+1dWNUPab62R4PDE8Q8GvdTi5Su7u++ulv1LlFc7r51C1tl mOoHa0gUJEnl44PfJPbpUvhX/kFy/wDXY/8AoK1i6FqXtbnp08258f8AUXTadm7tr5aK+/qbtFVN Rv49OtDPIC3O1VH8TentWfaaYNThS81NnleQFki3YRFOMYAPoB+fPNRGnePPJ2R01sY1W+r0Y807 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 D/IP41dShywVSLumc+EzT2uJng60eWpHXe6a7p2X5fqXaK57Wbw3GqW+mJM0UbMBMVJGd38PT0/D nnpWo2kae0PlGzi24AyFw3Hv1pOkoxi5Pc1p46VerUp0IpqDs23a7teysnt3fXYu0Vj6Os8Ooajb zXEkwiZNhdy2Ackde+MZrYqKkOSVr3OjCYj6xS9o48ru1Z+Ta6egV9DfDP8A5J7pf/bX/wBGvXzz X0N8M/8Aknul/wDbX/0a9deX/wAV+h89xf8A7jH/ABL8mdbRRRXsH5wFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/AJEr UP8Atn/6MWukrm/Hv/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCRK1D/ ALZ/+jFrzjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5x4C/5HXT /wDtp/6Lava68U8Bf8jrp/8A20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf8AX4v/ AKA9c58L/wDkZbn/AK82/wDQ0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8VHzeJ/wCR tD5fkzo/ih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/AJHXT/8A tp/6LalP+IvkZ47/AJGkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo 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 RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFc349/5ErUP+2f/oxa6Sub8e/8iVqH/bP/ANGLUz+FnNjP92qej/I848Bf8jrp/wD20/8A RbV6P49/5ErUP+2f/oxa848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWsaf8NniZd/yLqv/b35 HnHgL/kddP8A+2n/AKLava68U8Bf8jrp/wD20/8ARbV7XVUPhOnIf92l6/ogooorY9sKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of 8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0ro/ih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0rnl/FR83i f+RtD5fkzo/ih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2rtfih/yLVt/1+L/AOgPXFeAv+R10/8A 7af+i2pT/iL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPjjWkurqyltLe0dy5X5y6hcAg+ue 2OlZ+iWuo6XJKJbBnSXGSsqZGM9s89fWukorwI13Gm6dlZ+p+uVcqhVxccY5yU46La1tdLW8ynqE lz9nlitreR5HQhXV1UKTx1JzkdelYGk6fqmm3omNlvRl2OBIucZHTnrxXV0UQruEHBJWY8VlUMTi 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 y30su1jkdS0rUr7UZrlbMqrkYBkTOAAPX2rpreeeSFmms3ikUZ2b1bd7A5/njrViiqqV3UiotLQy weVQwlWdanN3nq72tfXy8zmNasdS1O7V47R1iRdqq0qde5xnj/61bGlG7S0jt7q1MTRqFDBlKkDA HQ5z/h+FX6KJ13KCg0rIMPlUKGKnio1JOUt72s/w0t0szH8QaZLqFvE0A3SxMcLkDIPXr34H61R0 j+20t1tUhWKEMR5kyYZM88DIz+XWumopxxDVP2bSaIrZPTqYv63Gcoyas7O1/wALrzt+DKV5psd7 p4tZHc7QNshOW3AYyfX3rl20rVtMm82FHJBADwHdnv06447jFdrRRSxM6aa3T6MnMMkw+MlGpdwn HRNPXTb7vW/mczHaa9qIEV3O0EDLknCgnjpgYPfoa6C1to7O1jt4gdiDAyck+pqaioqVnPSyS7I6 cFltPCtz5nOb05pO7t2XZenzOfnttTg8QS3trbCSNgFILqNy4GRycjkVonUJwVjOm3XnMuQBtKZ9 N+cD/PFX6KcqqlbmitNOpNLL5UXN0qslzNtq0Wk3va60/H0MbStIkgu5b+72faJSSEXkJnk8+vbj 9c1d1WCa50yeG3OJWXjnGeeR+IyKuUVMqspTU30/Q0pZfRpYaWGhe0r3d9W3u799Tm/DWn3ltNJN MjRROmArHBJz1x7YPX1r6q+Gf/JPdL/7a/8Ao16+ea+hvhn/AMk90v8A7a/+jXrvwtV1a7k+x8rn +Bhgcqp0KbbSn180zraKKK9M+GCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjF qZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e /wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2u qofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9 Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2v xQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QB8xf8It4h/6AOqf+Acn+FH/AAi3iH/oA6p/4Byf4V9O0V539nR/mf4H2P8ArlX/AOfUfvZ8xf8A CLeIf+gDqn/gHJ/hR/wi3iH/AKAOqf8AgHJ/hX07RR/Z0f5n+Af65V/+fUfvZ8xf8It4h/6AOqf+ Acn+FH/CLeIf+gDqn/gHJ/hX07RR/Z0f5n+Af65V/wDn1H72fMX/AAi3iH/oA6p/4Byf4Uf8It4h /wCgDqn/AIByf4V9O0Uf2dH+Z/gH+uVf/n1H72fMX/CLeIf+gDqn/gHJ/hR/wi3iH/oA6p/4Byf4 V9O0Uf2dH+Z/gH+uVf8A59R+9nzF/wAIt4h/6AOqf+Acn+FH/CLeIf8AoA6p/wCAcn+FfTtFH9nR /mf4B/rlX/59R+9nzF/wi3iH/oA6p/4Byf4Uf8It4h/6AOqf+Acn+FfTtFH9nR/mf4B/rlX/AOfU fvZ8xf8ACLeIf+gDqn/gHJ/hR/wi3iH/AKAOqf8AgHJ/hX07RR/Z0f5n+Af65V/+fUfvZ8xf8It4 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 AOfUfvZ8xf8ACLeIf+gDqn/gHJ/hXu3w8tbiy8C6bb3dvLBOnm7o5UKMuZXIyDz0INdPRW9DCRoy 5k7nm5rn9XMaKozgopO+jfZrr6hRRRXUeAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/+jFrpK5vx7/yJWof9 s/8A0YtTP4Wc2M/3ap6P8jzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrzjwF/yOun/wDbT/0W 1ej+Pf8AkStQ/wC2f/oxaxp/w2eJl3/Iuq/9vfkeceAv+R10/wD7af8Aotq9rrxTwF/yOun/APbT /wBFtXtdVQ+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSuj+KH /ItW3/X4v/oD1znwv/5GW5/682/9DSueX8VHzeJ/5G0Pl+TOj+KH/ItW3/X4v/oD1xXgL/kddP8A +2n/AKLau1+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6LalP+IvkZ47/kaQ/7dPa6KKK6T6gKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/ ACJWof8AbP8A9GLXSVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2n/otq9H8e/8A Ilah/wBs/wD0YteceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/7e/I848Bf8jr p/8A20/9FtXtdeKeAv8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X /wBAeuc+F/8AyMtz/wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T /wAjaHy/JnR/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAj rp//AG0/9FtSn/EXyM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/AKMWukrm/Hv/ACJWof8AbP8A 9GLUz+FnNjP92qej/I848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxa848Bf8jrp/wD20/8ARbV6 P49/5ErUP+2f/oxaxp/w2eJl3/Iuq/8Ab35HnHgL/kddP/7af+i2r2uvFPAX/I66f/20/wDRbV7X VUPhOnIf92l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooA4n4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK6P4of8AItW3/X4v /oD1znwv/wCRluf+vNv/AENK55fxUfN4n/kbQ+X5M6P4of8AItW3/X4v/oD1xXgL/kddP/7af+i2 rtfih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2pT/AIi+Rnjv+RpD/t09rooorpPqAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/wDIlah/ 2z/9GLXSVzfj3/kStQ/7Z/8Aoxamfws5sZ/u1T0f5HnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9 GLXnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLWNP8Ahs8TLv8AkXVf+3vyPOPAX/I66f8A 9tP/AEW1e114p4C/5HXT/wDtp/6Lava6qh8J05D/ALtL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/wCvxf8A 0B65z4X/APIy3P8A15t/6GldH8UP+Ratv+vxf/QHrnPhf/yMtz/15t/6Glc8v4qPm8T/AMjaHy/J nR/FD/kWrb/r8X/0B64rwF/yOun/APbT/wBFtXa/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbU p/xF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSZoAWikz RmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzS5oAKKT NGaAFopM0ZoAWijNJmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFop M0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWi kzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBa KTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAF opM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoA WikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmg BaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGa AFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0Z oAWikzRmgBaKTNGaAFopM0ZoAWikzRmgBaKTNGaAFopM0ZoAWik3CjNAC0UmaM0ALRRmkzQAtFJm lzQAUUmaM0ALRSZozQAtFJmjNAC0UmaM0ALRSZozQAtFJmjNAC0UmaM0ALRSZozQAtFJmjNAC0Um aM0ALRSZozQAtFJmjNAC0UmaWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/ ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGL XnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0 W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAj Lc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8A kWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8 d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB2ptO7U2gAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiikNAC0UlLQAUlLmigBcUlJz60tABRUTzqjlSGyP Ss6XxBaQxmRo5iB6KP8AGgDWornJvGmnQoGaG6IJxwq//FVTl+IukQsFa2viSM8In/xVAHX5oxXE Hx1ZSsSiXoDn5cheM/8AAqZN4mFwgSGS7RgcklscfgaAO6org49Tu5V3Ld3GM45kP+NO+33n/P3P /wB/D/jQB3VGc1wv2+8/5+5/+/ho+33g/wCXuf8A7+GgDuqK4X7den/l7n/7+Gl/tC8/5+5/+/h/ xoA7miuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhft95/wA/c/8A38P+NH2+8/5+5/8Av4f8 aAO6orhft95/z9z/APfw/wCNH2+8/wCfuf8A7+H/ABoA7qiuF+33n/P3P/38P+NH2+8/5+5/+/h/ xoA7qiuF+33n/P3P/wB/D/jR9vvP+fuf/v4f8aAO6orhW1C8UZN3P/38P+NLF4ha0z9omun3fdw2 cY+poA7miuEfxnbo5U/bOPp/8VVofEnRmIAtr/J4/wBWn/xVAHY0Vy8XjzS5mKrBeAgZ5Rf/AIqr 0HiiynQssVwADjlV/wAaANqkqtFfRzBCquN+MZA71aoAKKKKACiiigAoxRRQAUUUUAFGaKMigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClHSkpR0oAWiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7 af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWNP+GzxMu/5F1X /t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxP xQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6Glc8v4qPm 8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD2 0/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAdq bTu1NoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiikoAWimkhetVbnVbKzkEc82xiNwG0n j8B7UAXKRiAK5e68Z6YDNBBf/wCkfMiDyW+90HVcdax5NY8R3q+Xp8++UHcRsjHy/iPUigDt59Rt bZwk0u1iMgbSePwFZr+LtDjkZGvsMpII8p+D/wB81zKWPi29HmXUe9x8oO6Icfh9atL4RMih57HM zDLnzf4u/RvWgCS58U2VzbtFaahIZ2xtwHU9cnnHpmsi6uNbvNn2G8uzszv23BXr06kehrr4/B2g wyCRLDDDofOf/wCKq5Doun2+7yrfbu6/Ox/rQB58NJ8ZTjzEkvGVuh+2j/4qtWLQdbMg86F2j7hp lI/LNdzHEkUYRBhR0GafQByVr4fn80/aLKNkxwG2sM1q2ugab5Z+0aXZs+eC0CHj8q2KKAKA0TSR jGl2Qx0xbp/hTxpOmryNPtR9IV/wq5RQBWGnWQHy2duB7RL/AIUf2fZ/8+kH/fsVZooAr/YLP/n0 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 c2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P49/5E rUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV7XVU PhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of8i1b f9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/ AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorpPqAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigA7U2ndqbQAUUUUAFFFFABRRQaACijNFABRSc5p aACiik6UALRUFzeQWdu088myNcZbBOMnHaud1bxdZQeT9mvtud2790x9MdVoA6R7iJHKs+CPY1g3 vi/ShaOba+/fcbf3Leoz1X0rmZ9Q8S6hM11p0vmWj42NtjGcDB4YZ6g1oWPhBjeRi8sf9H53/vvY 46NnrigCvc69reo7f7GufM8vPm/u0GM9PvD2PSol0/xTqQ865i8x1+UHdEOOvY+9dlYeH9O0/wAz 7Pa+Xvxu/eMc4z6n3rRiiSFSsa4BOetAHMWngzTSIJ7mw/0n5XlPnN9/qejY6+lblto2n2chkgt9 jEbSd7Hj8TV6igBFRUGFGBS0UUAHNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUYooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBGUMpDDiqd1pNle7PtEG/Znb87DGf ofartHSgDm7nwXo09w0h0/cTjnznHb/erGuPD2qWjSvZWuxISTAfMU4A+71P0613uaRlDqVIyCMG gDzu31XxHp8hm1Oby4SNqnbGfm6/wjPQGtzTvGGnrbsNQvv3u84/ct93A9F9c1tXei6fexCO4t96 BtwG9hz+B9653U/B9u1ypsbH91sGf3x65Pq30oA6eDUbW5jjeKXcsgBQ7SMg9O1WeK802eKtOu+n l2Nu/wD0yO2NT+Z4H1rZsPFqG9jF1ffued37r2OOgz1xQB2dFUrHV7HUfM+yT+Z5eN3yMMZzjqPY 1cBB5FAC0UZoNABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSjpSUo6UALRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/ yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8A DZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKK KK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A +Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1 bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorpPqAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigA7U2ndqbQAUUUUAFFFFABR9aKSgBeKOaMYooAKKQnGSeBVS+1G3soF kkuIIwW25kcAdD7+1AFiSeONtrtg4z0rm9Q8W2MYuraC9xdrvjRfKb7/ACAMkY6/hWZrnia/F6n9 mQQXcHljdJGjSANk8ZU46Y/Oqlp4ZN/dwXtxDdo87rLJtXCqWOTjI4HNAES3/iDV2Fi0nmiX+DbG ucc9ePStbSfCIn87+2rHdjb5X73Hrn7rfTrW7ZeHbOwu0uYpJ2dM4DMCOQR6e9bFAFC00exs7VLe CDZGmcLvY4yc9z71fBopMUAKaKSlFABRRmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAoopKAFopKWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACjiiigAooooAKKM0UAFFFFABR 9KDRQBWnsbe4iljkj3CRSGG4jOetYF/4SsVspDY2P+k8bP3reoz1bHTNdRRQB5xNba9oO37Inked 97lGzjp1z6mtSx8XRW1nHDql9tvVz5g8onuSPurjpiumv9Nh1Hy/OaRfLzjYQOuPUe1chqng6CXU ZXUXjKccrgjoP9mgDt0uInYKrZY9ODUorzfTfFWtLfxG+sYbe253yvE6BeDjknA5wK7DStdg1Dzs 3NqdmPuSDvn39qANiimxyJKu6N1cZxlTmnUAFFFFABRRRQAUUUUAFFFFABRRRQAUo6UlKOlAC0UU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK1D/tn/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzY z/dqno/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/tn/6MWvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ ALZ/+jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp/wCi2r2uvFPAX/I66f8A9tP/AEW1e11VD4Tp yH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK6P4of8i1bf9fi/+gPX OfC//kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8i1bf9fi/+gPXFeAv+R10/wD7af8Aotq7X4of 8i1bf9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnjv+RpD/t09rooorpPqAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigA7U2ndqbQAUUUUAFFFFABSc0tFABSZHqKjmuIINvnzRxbum9gufzrjd a8X3Vlq09vaLaSwJt2uQWzlQTyGx1JoA2dT8QQ28F4kVxatPGrhIy4JLAHAxnOc9q5CK41DxSxsb 60aOKMecDBGwbI4754+Y0WujTajqcN5Nb3KrczLK7IhCjc2SQSOnNd3YaLbabO00LyszLtIcgjGQ ew9qAMrQvDNva2LoxuVJkJw+Aeg9q6WOMRRJGucKoUZ9qcKKACg0UUAFJS0UAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVQt9ShuJ1iWaFmbOArgnp9av1wnh7/kO 23/Av/QTQB3WKOlLRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFIAzRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA5/WPDtvdaVNCGuCW28KQT94H0rjp9Pu/DO3+z7WeX7Rnf50ZbG3pjAH9416jVW7s Ir3Z5jONmcbSO/8A+qgDl/D3iForCRdSe2tJvNJCSnyyVwOcMc9c/lXWQ3MU0MciyxtvUMCrAg59 K4nxL4Z8/UY2hiu5FEQBKLkZyfQVW0/X7yzvrWweKFIYZEhZnUhlUEDJOcZwKAPRaKrW9/bXUhSG 5hkYDJCOCcfhVmgAooooAKKKKACiiigAooooAKUdKSlHSgBaKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigArm/Hv/ACJWof8AbP8A9GLXSVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2 n/otq9H8e/8AIlah/wBs/wD0YteceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/ 7e/I848Bf8jrp/8A20/9FtXtdeKeAv8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8 UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/ 6Glc8v4qPm8T/wAjaHy/JnR/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/ AEB64rwF/wAjrp//AG0/9FtSn/EXyM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFAB2ptOPSm0AFFFFABRRRQAVWv7xLKykuGkjUJjlzgDJA/rVmvPNV1y51TTZbOdI VjkxkoCDwQe5PpQAviTWri++y/YVhudm/f5IL7c4xnB46H8ql0vwxFqumxXt4LqK4kzuRcKBgkDg gnoBR4M0i3k+25eXjy+hH+17V3FvAttAsKElVzgnr1zQAy0tUtbSCFSxWKNUG7rgDHNWKKKACig0 UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRT AKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAWC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArhP Dv8AyHbb/gX/AKCa7uuF8Pf8h22/4F/6CaAO6ooxRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABQaKDQAlFLRQAgpaQUt ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSUALRRR1oAK5TV/C9t5V/fRtctcbZJlQEEFuSBjG cZrq6a6h0ZD0YYOKAPMtA1C+0q/ee6txbxtEUDzoyKTkHGSRzwa73R9VTUrR5jLCdshX923HQH19 6xvFukwSaVEC8n+vB4I/ut7VzljqM2gwm1tVR0dvMJlBJyQB2I9BQB6cDkZHSiq2nzNcabazOAGk hRyB0yQDVnrQAUmTS4pKAFooooAKKKKAClHSkpR0oAWiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9 H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjw F/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/ 6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL 8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp /wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAdqbTu1NoAK KKM0AFFB5rlfGWqf2b9i/c+Z5nmfxYxjb7e9AFTXvEX2DWri2+y79m35vMxnKg9Me9ZXhrQvs/iC 1l+07tu/jZj+A+9Vv7L/ALa/4mHneT5v/LPbuxj5euR6V6nigCKKHy8/NnPtUtHSigAooooAKKKK ACiiigAooooAKKKKACgDFGKOlAAaKTNFAC0UlLQAUUUUAFFHWjpQIKKM0UDDOKKQnFLQK4UUYo6U DCiikoAWikzS0AFFGaCc0AFFJS0AFFGaOtABRRSUALRRnNIaAFooooAKKSloAKKOlJnNAC0UCigA ooxRigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACjGKKBQAUUE0UAFFFGaADNFFJQAtFIKDQAtFJmloAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAK4Xw9/yHbb/gX/AKCa7quF8Pf8h22/4F/6CaAO 6ooooAKKKKACiiigAooJooAKKKKACiql7e/Y9n7vfuz/ABYxjH+NYF54z+yXTwfYN+3HPnYzkZ/u 0m7AdVQOaz7TU/tUMEnk7fNVWxuzjP4VfJzRdBYU8UUDpRTuAUUUEZouAZopM44rB1LxJ/Z9hLdf ZPM2Y+XzMZyQOuPek5JDsb9FeR+JfjR/Yn2X/iQed52//l824xj/AGD61wetfGD+2bxLj+wvJ2xh Nv2vdnBJz9wetS5xCzPoq41LyFlPlbvLB/ixnH4VBpetf2lctD9n8vahbO/PcD096+WT4H/t26Oo /wBo+R9vfz/L8jds3ndjO4ZxnrgVZl8J/wDCEqNS+2/bfNPkeX5Xl4z82c5P93pjvUe2h3K5WfWV FfNWg/Fv/hG7F7P+xPtG+Uy7/tezGQBjGw/3a9V074lfatMtLj+ydvmwo+37TnGVBx92rVSLJsz0 CiqkN75sqp5eM981bJzVXQrBmiijNMA6UdaOtIeKAFopKpanqH9nWyzeV5m5wuN2OxPp7UroZeor z7XPid/Y16lv/Y/nbow+77TtxyRj7h9K8u8R/GT/AIn1z/xIf7v/AC+f7I/2KXMnsFmfQV/qf2Ky kuPJ37MfLuxnJA9PeotG1n+1/P8A9H8rytv8e7Oc+w9K+XIvAH22UW/9p7N/8XkZxjn+97VLL4N/ 4RjH+n/aftH/AEx2bdv/AAI5+9+lZKvHuVyM+s6MV8v2XxW/4Ri0TR/7F+0/Z8/vftWzduO7psOP vY69q9Stfi79pu4YP7D2+ZIqbvtecZOM/crTnRPKz06isLTPEf8AaNy0P2Xy9qFs+ZnuB6e9bUb+ YucY5qlJMLD6KKKdxBS0lFABRSVnarqv9meV+583zM/xbcYx7H1pXQGlRXJTeNvKlZP7Pzjv53/2 NdPaXH2qyguNu3zY1fbnOMjOKLgTUUhFFMBaKM0UAFFFFABRRRQAUUUUAIy7hjNcX4s0T7fqsUv2 jy8QBcbM/wATe/vXa0UAeWf299h/0T7Nv8j91v8AMxu28ZxjjpXqCvk4xXEX/hzz9Rupvte3zJnb Hl5xkk+tUPDGufavEVrD9n27t/O/P8DH0oA9JopqvuzxTqACiiigAooooAKUdKSlHSgBaKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/wDRi10lc349/wCRK1D/ALZ/+jFqZ/Czmxn+ 7VPR/keceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi15x4C/5HXT/APtp/wCi2r0fx7/yJWof9s// AEYtY0/4bPEy7/kXVf8At78jzjwF/wAjrp//AG0/9FtXtdeKeAv+R10//tp/6Lava6qh8J05D/u0 vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3/oaV0fxQ/wCRatv+vxf/AEB65z4X /wDIy3P/AF5t/wChpXPL+Kj5vE/8jaHy/JnR/FD/AJFq2/6/F/8AQHrivAX/ACOun/8AbT/0W1dr 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 dFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAHam07tTaADFZetXiLo+oIA4cW8gB HrtNama85v8AU2l1m6svMmIe4eLaW+XliMdelAFfwdE+oavLFKRKogLbZTuGdyj+tehWNill5m2O JN+PuLjOM/41heGtM+x6lJIEiXMJX5Bg9R7e1dSeOtABRRRQAUUUUAFFFFABRRRQAUUYooAKKSlo AKKSloASloqC7uks4hJIGILbfl/z7UCb0K19q9vp86xSpKWK7vkAxjJHr7Vydz8V9Dtbqa3e11Ev E7IxWNMZBxx89cd8UPFy2fiW2jikvI1NmrYjbAzvf/a9q8gu9QuLi8nmFxNiSRnG5znk555q1E5a lWzOgk8baiyEDVNT/wDAhv8A4qsrUtfv9Q8rzL+8k2Zx5szHGcdOfasmirscrm2Od3kcu7MzHqWO TSAlTkEg+opKKZPMxxdmGGYke5ptFFAXYUUUUCCiiigAooooAKKKKAFDFTlSQfardtq+p2cZjtdR u4EJ3FYp2UE+uAfaqdFA7luTVNQmDiW/unD53BpmO7PXPPNVKKKAuwp6zSKMLI4A7BjTKKATPQfB PjfUo/F1i1/qmqXFsPM3xNcM4b922OC2Dzg17z4e8QW+ufafs6zr5O3d5oA656YJ9K+Zzod5p4+1 LLEpTvGxDDPHHHvWzoHjGXw39o+03V+3n7dvkyE/dznOWH96ocTohVsfSzXCoxUhsimm7jVSSG4H pXzjefEi4nunkiv9WVDjAMxGOP8AernJvGPiB7uR117VhE0hIX7ZJwuemN1LkNfrCPprWvE1ppNm k80dwVaQJ+7AznBPcj0rxX4jeMhfeIbeWylvoYxaqpUttyd788N7iuJvfEurXsIjl1XUJFDbsSXD kZ/P3rKmnmuHDzSvIwGAXYk4/GrUTGVa5ci1S4TU0ujcT4WYSE7zu659etdIfHVwozBe6lHIOjLK QR+IauMoosZc7O5tfiLqMW/ztV1h84x/pDHH5tVK98e63NdvJBrmsJGcYX7W4xx6Bq5OinYftJHc L8RNSDAnVtYI/wCvlv8A4qtrRPikbXz/ALbd6vPu27P3m7HXPV/pXltORWbO04qWhxqO59V+AvEk XifQp72H7TtS5aL/AEjG7IVT2J4+auprwP4Z+K7fQPDdxa3Aui73bSDycYwUQdyOeK9kg123k0iO 7CzbWgEvIG7G3Pr1qGjrhU0Nmq095HA4VgxJGeK8t+InjZofD8DWFxqFtKbpQXjfYSux+Mhvp+Ve U3PjbWZpAw1rVuBjm6f/AOKp8oSro+i5vHOmW88kLwXZaNihIRcZBx/erpq+X4fGtsIIxP8AbZJt o3ucEs2OTktzzXpGm/GbRLi/ii+z6sd2fvImOhP9+jlFGsmesUVyen/EDStQ8zyre9GzGd6L3z/t e1dHZXkd9aJcxBgj5wGHPBx/SpsbKaZZoozRSKugooooHcKKKBQAUUZpKAFoopM4oAWijFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRmigAooopAHSijHrRTFcM8Vk6/r9r4dsEu7uOZ43lEQEIB OSCe5HHBrP8AEPiW3sdH1UhbhZILebDIACCqnkHPtXz94k8b3Gt6dHbJe6kSsok/fSnHAI/vHnmq UTCdWx3ni34p2o1WL7G+qwR+QMqhCgnc3OA/0rzO88Va/cX1xPDruppFJIzopu5BhScgYBqjbade atGZ/PVtp2Zlck+vofWveNB+H1rL4d0ySTT9KeR7SJmZoQSxKDJJ29arYy96Rynh34b60NdtjqV1 Y3Vp83mQvI7hvlOPlZcHnB/CvTtI8DaNZed9o0bSZN+3bi1Q4xn1X3rpEt4EcMkMasOhCAGpqls3 jT7manh/RY0CR6RYKo6BbZAB+lRz+G9EmhaM6PpxB7NbJj+Va1FK5pyo4LxR4Asr7TI4tM03SrWY TBmcQKmVw3GVXPUj8q8d8YaZq/hTVorGG/8AIWSATbbSZ1UkswyQAOfl/lX06wDDBAP1rzL4h6CN R1+CYRWx22qr+8Xn7zn096aZhONjh/DPxCnTUtHsZ77VJNs0MLgykq3IB6tyK92sNYt7+dooklDB d3zgYxke/vXyVeFtP8RXG0lGt7tsGPjG1+35V6t8IvEU2oeLLqKa4u5VFi7BZXLDO+MZ5PvVNaEw qa2PcKKZHIJFyM9cc06s7HUnoLRSZzS9KBhRRmigAooooAKKKSgBaKM460UAFFFeffE3xK3h/wDs vbNdxef5v/Hu23O3Z15HrTSIlLlR6BS18xah8QtTe+kaHVtXSM4wouWGOB6NXsWnpq41K183UZXj 85NymdzkZGRihoiNS53dFHSkzmkai0UUGgYUUCigAopKWgAoooyKQBRSc0opgGKKM0UAFFHWigAo ozRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcL4e/5Dtt/wAC/wDQTXdVwvh7/kO23/Av /QTQB3VFFFABRRRQAUUUUAFHWigUAFYfiTQLXWNAubAWlo3m7OJYwV4YHng+lbtIcEYIoA+aPiR4 auPCX9mfYTbWX2rzd/2LMe/bsxuwBnG44+prR8KeI1tvDVpDdvczTrv3Pndn52I5Jz0xXsfifwxD 4h+y77azl8jfj7RGGxu29OD6V8y/Ea1vdD8ealp1tcm3hh8rbFbuyIuYkY4AwByc9OtcOKw6qq2x rTnyns0uy70d5I1AM1uWUsOeV71R8IW1tp+rSy6pbxXUBgKqhQPhtynOG46A/nVLw5rEcmh6Rby+ c8jW0KMzYIY7QCTzWlrrLaWKSRDy2MgXMfBxg15tOEaMrM3bcloehadYaDqlu08Gj2aqrlCHtkBz gHtn1q5/wj+j/wDQJsP/AAGT/Cud+HV2ZfD87OzsftTDLHP8CV2QYEA16tGNOavY55cyM/8A4R/R v+gTYf8AgMn+FL/YGjn/AJhNh/4DJ/hWhuFG6tvY0+xN2ZbaDo4Y/wDEpsP/AAHT/CvPfG9jZ2vg +/mt7SCGVfL2vHGFYfvFHBHtXqTH5jXmfj3/AJErUP8Atn/6MWonSgtkenl6vPXyPFzcTHrNIfqx prMznLMWPuc0lJWaikfZ4elCy0FoNJRQzWrTjyno3gFUOhT7lBP2luo/2Vr1qy0bS5LC3d9Ns2Zo lJZoFJJx1PFeT+AMf2DP/wBfLf8AoK17LYH/AIltr/1xT+Qq6cU9z5LNo8rVu/6EUvh3SWjIj0qw V+x+zoP6VSm8MRHb5NtZx+uEAz+QrodwoBq3RpvoeDzSOFu/Bmqy3Lvb3NtHEcbUEjDHHoFrH8Qe FtbsNDuLn7fENm3mOZ88sB6e9epbhWB4zOfCd7/2z/8ARi1zYijSjFuxcZSueUaDYa1d3zxtqLMB EWw87kdRVnVrXULG6WKW7JYoG+WRsYyf8K0vCf8AyFZf+uB/9CWjxZ/yFIv+uA/9CavIi4OVrHr4 Gnzy18zi4dYVtWjtJGmYmcRtk5U/Ng9+ld5pNjZvdMHtIGGw8GMHuK8rh/5GqP8A6/h/6HXrej/8 fb/9cz/MVx4v3ZKx6FeioonurSzikCpawqMZwsYFeS+L0VfFN4EUKvyYAGP4Fr1+9/1w/wB2vIvG H/I1Xv8AwD/0Ba2w0m0jTDwTSDwbx4rsv+B/+gNXsVi3+s69v61454O/5Gqy/wCB/wDoDV7FY/8A LT8P60sU7IWJikjK1PnUZfw/kK8isp5nv7dHmkZWlUEFiQRkV67qX/IQl/D+Qrx6w/5CNr/12T+Y qMG21K5eHpxcdUeoeGbO1k1KQSW0LjyScNGD3FdS2l6aTzp9qf8Ativ+Fc54W/5Ccv8A1xP/AKEt daetcWJm1VscmKglUsjwnXLmaHxBqUUU0iRpdSqqKxAUBzgAdhWh4Rke51aVJ3aVBASFkO4Z3Lzz WV4g/wCRl1X/AK/Jf/QzWl4J/wCQzN/17t/6EtevNL2Dfl/keq6EPY3t0/yPTNFsLKXz/MtIHxtx ujBx1rW/srTv+fC1/wC/K/4VR0L/AJeP+A/1qvqevw2OoS27+fuTGdmMcgH1968mN3Nng4lJSdjl rG9sNQvI7WK2w75wXjXHAJ/pXQWtsljvwiLvx9wY6f8A66pWOkC0vI5/LgG3PKDnkEelY3jzXho3 9n/PcL5vmf6k4zjb15HrXdDDuUlY4nOyMTxV45h0nxJd2TPfgxbOIiNvKKePmHrVfw74O1HVPFGk 6w89rJZXV7DdNFK7FmjZw21htIJwcEZxVEeGLrxUP7aia2KXPQ3JPmfL8vPB/u+vSvo/wvo1nZ+G NGjaztfPhs4FMixD7wReQcZ6ivosPRjGK01scdSTbLthoun6bO01pYWlvIy7S8MKoSMg4yB04FaN FFdaVjIKKKKYBRRRQAUUUUAFFFFABRRRQAVHPCJoWjZVYHHDDI61JRQB534+s3t/7P8As5SLd5m7 Z8ufu+lavhbUltvDdpDMZXkXfkjnPzse5rV1+wW++z7kibZu/wBYM9cf4Vwupagul6hLZjzF8vHE XC8gHjketAHqlFFFABRRRQAUo6UlKOlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXN+Pf+RK 1D/tn/6MWukrm/Hv/Ilah/2z/wDRi1M/hZzYz/dqno/yPOPAX/I66f8A9tP/AEW1ej+Pf+RK1D/t n/6MWvOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/+jFrGn/DZ4mXf8i6r/29+R5x4C/5HXT/APtp /wCi2r2uvFPAX/I66f8A9tP/AEW1e11VD4TpyH/dpev6IKKKK2PbCiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/X4v8A6A9c 58L/APkZbn/rzb/0NK6P4of8i1bf9fi/+gPXOfC//kZbn/rzb/0NK55fxUfN4n/kbQ+X5M6P4of8 i1bf9fi/+gPXFeAv+R10/wD7af8Aotq7X4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otqU/4i+Rnj v+RpD/t09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA7U2ndqbQBVubpYJAp3 cjPFeWLDNL44D+ZlG1LO0k9DJ0rsvE121vqUaB5BmEH5T7msvT7RX1S1n2RktMj5I5+8D+dAHcxQ LE5YIgOMfKKmHNFH0oAKKKKACiiigAooooAKKKSgAzS5z0pMUtMApKWkpALRRRmgVxk2fJk2nB2n B9K81+J/9qr4atjZ6hLBJ9sXLJMykjY/GR+FejXlzHaWU9zIGMcMbSMFHJAGTivLfHXjvRZtEhU2 d0cXKn5ok/ut/tVSRjUeh4nrhv2vUOoXcl1N5Yw8kjOQuTxk++fzrNrX8Rana6rqEc9pE8caxBCH UA5yT2J9RWRWiRwzeoUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCw1/e OpV7udlPUGQkfzqF5HfG92bHTJzTcUUAFFFFABRRRQAUUUUAFFFFABS7iOhIpKKAJo7u4iXbFcSo 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 X99l2XJP75+5FekQxiKCOMAAIoUBRwMDtWF4JiSDwhYxIioq+ZgKMAfvGroO1eslYwCijpRmmIKK KKACiiigAooooAKKKKACiijFABRRRQA1kV/vKDj1FeWeLtPkk8UXjxmNVOzA6fwL7V6rXK6xppuN VmlAi+bb94c/dHtQBpWV9515HHukOc9Tx0NbFcF4cvjNr1tHukOd3U8fdNd7QAUUUUAFKOlJSjpQ AtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0 YtTP4Wc2M/3ap6P8jzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/ j3/kStQ/7Z/+jFrGn/DZ4mXf8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdV Q+E6ch/3aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigDifih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+ gPXOfC//AJGW5/682/8AQ0rnl/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau 1+KH/ItW3/X4v/oD1xXgL/kddP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKADtTad2ptAHn/jq5WHW4VMhUm2U4Gf7zVt6PbhrWwlEanKRtuw M9Ac1yXxJdl8RW4B/wCXRf8A0N677QYkPh/THI+b7LEc5/2BQBp0tH0ooAKKKKACiiigAooooAKK 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 /wCgNXsVj/y0/D+tePeDx/xVVl/wP/0Bq9gsP+Wn4f1pYvYWK2MvUv8AkIS/h/IV49Yf8hG1/wCu yfzFew6l/wAhCX8P5CvHrD/kI2v/AF1T+YqcHtI0wvwnq3hb/kJy/wDXE/8AoS11p61yPhbjU5f+ uJ/9CWuuNcGK/jfI48X/ABTwTxB/yMuq/wDX5L/6Ga0vBX/IZm/692/9CWszxBn/AISXVf8Ar8m/ 9DNafgn/AJDM2f8An3b/ANCWvoIP9z8l+SPXn/A+X+R6Jafx/hUFz/x8N+H8qsWv8ePaq106i5cE 88fyrzKr94+er/EzH+Jef+Ffap/2y/8ARqVxnwcRX/trcobHkdRn/npXcfES3luvAmpQwrukbysD IH/LVD3rhvhpBd6T/annr5Xm+VjkNnG/0z619DlzXs2vM8etufSfhpQvh+1CgAfPwP8AfNatYvhG QzeF7OQnJO/n/gbVt16JgFFHSigBOc0tFJQAtFFFABRRRQAUUUUAFFFFABkUlLiigAqhcW0kk7Mq Ag45yPSr9FAHkfgudn8W2KmRiD5nBJ/55tXrleQeE4JLbxNZzMu0Lv5zn+BhXqltc+dIV35wM9KA LdFFGaAClHSkpR0oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s/8A0YtdJXN+ Pf8AkStQ/wC2f/oxamfws5sZ/u1T0f5HnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YteceAv+R10 /wD7af8Aotq9H8e/8iVqH/bP/wBGLWNP+GzxMu/5F1X/ALe/I848Bf8AI66f/wBtP/RbV7XXingL /kddP/7af+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6G ldH8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+vxf/ AEB64rwF/wAjrp//AG0/9FtXa/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h/wBu ntdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVbyVoYgynBLY6VaPSqGpE/Zl/ 3x/I0AeeeNYzeazDIw3kW6rnp/E3+Neg6IuzQdOXGMWsQ/8AHRXCeJf+QjH/ANcR/M132kH/AIkt j/17x/8AoIoAuUUUUAFFFFABRRRQAUUUUAFFFHNABR1qC7nS2tnmdtqrjJxnvivO/HnjqfRP7P8A sGo+T53mb/3AbONuOqn1NOxEppHpea89+JcN3/wr7VMr/wA8u4/56pXnsnxa1sOQNb4/69E/+Irn dX+I/iTWdLmsLzVfOgl27k+zxrnDAjkKD1AqlE56lZNWOXu1kXZ5ox1xVapJZ5JseY27HTjFR1oc bdwooooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBpaLepY3jyvJsBjK5xnuP8 K9e8C+LVt9EmSO+2g3LHHlZ/hX2rw+vSfh9plxe6DPJFDvUXTLncBztT396lm9Ns990S9OoaRBdG TzN+75tuM4Yjp+FaHPesfwrbva+G7SGRdrLvyM5/jY1s1mzuhsFHNJRz2pFhmloxRQAUUUUAFFFF ABRRRQAUUUUAFFFFABSUtFACUtJS0AJg9qD0peaQ5xQiZHi3x+jeT/hHtgzj7Tnn/rlXijo0Zwww a+jPiro76t/ZO2DzfK87+PbjOz3HpXhnijTW0vU44Gi8otCH27t3dh6n0rRM46qDwd/yPGgf9hK3 /wDRi19divkLwi4j8a6E7HCrqNuSfbzFr61gvbe5cpFJuYDONpHFKRdAs8UUlLUHWJS0lLQAVWvr qKys5LiV9iJjLYJxkgf1qwa808ceOdPbwdfrp+o5uj5ez9w3/PRc9Vx0zTSM5zsZ3xa8SQy+FbVb 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 BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof 9s//AEYtTP4Wc2M/3ap6P8jzjwF/yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBt P/RbV6P49/5ErUP+2f8A6MWsaf8ADZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ ANtP/RbV7XVUPhOnIf8Adpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A 0NK6P4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDo D1xXgL/kddP/AO2n/otq7X4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t 09rooorpPqAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA7VR1P/j2X/fH8jV7tVHUv+PZf 98fyNAHA+Jf+QjH/ANch/M13ukf8gWw/694//QRXBeJf+QjH/wBcR/M132kf8gWw/wCveP8A9BFA FyiiigAooooAKKKKACiiigAozRRgUAZfiCG6n0O4jtF3TnbtGQP4hnrx0zXgvxPstWt/7K+2x7d3 nbPmQ/3M9Pwr6MkXehU5wa8v+LOl2l1/ZH2iZ49vnbcMBnOz1FWjmqo+fHDK5Dfe702r+tW8Vrq0 8MLl4124YkHPyg9qoVojiluFFFFMkKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFIAooopgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFADk25+bpXvnwTsrW48GXjvHuI1BxnJH/ACzjrwGvZ/hHrx0vwpdQB7dd1874lOD9yMeo9KmR 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 GsgG5myB0GSelfT4LEKcEvJHDVg0z6rpeaw9H8R2er3b29vfWU7rGXKwShmAyBnAJ45rbzXoJ3MQ xzS0UnWmAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeW6H/yGIP8AgX/oJrvdN/4+W/3D/MVwWh/8 hiD/AIF/6Ca73Tf+Plv9w/zFAGrRRRQAUo6UlKOlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNjP92qej/I848Bf8jrp/8A20/9FtXo /j3/AJErUP8Atn/6MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrGn/AA2eJl3/ACLqv/b3 5HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaXr+iCiiitj2wooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDifih/ yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c58L/APkZbn/rzb/0NK55 fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+KH/ItW3/AF+L/wCgPXFe Av8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAO1UdS/49l/3x/I1e7VR1L/j2X/fH8jQBwPiX/kIx/wDXEfzNd9pH/IFsP+veP/0EVwPi X/kIx/8AXEfzNd9pH/IFsP8Ar3j/APQRQBcooooAKKKKACiiigAooooAKKKTPNAC9a8r+Mlvqk39 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 aSbtSXyfl4wV4+QdvWvr8NiY1I+Z504WPrJXV0V0YMrDIYHIIp1cj4W8RyX+g6K8jWwe4tYCwQ92 Vc459666u4yCiiigAooooAKKKKACiiigAooooAKKKKAPLdD/AOQxB/wL/wBBNd7pv/Hy3+4f5iuC 0P8A5DEH/Av/AEE13um/8fLf7h/mKANWiiigApR0pKUdKAFooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACub8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7tU9H+R5x4C/5HXT/+2n/o tq9H8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi1jT/hs8TLv+RdV/wC3 vyPOPAX/ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+ Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGlc8v4 qPm8T/yNofL8mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vxQ/5Fq2/6/F/9AeuK8Bf8 jrp//bT/ANFtSn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFAB2qjqX/Hsv++P5Gr3aqOpf8ey/wC+P5GgDgfEv/IRj/64j+ZrvtI/5Ath/wBe8f8A6CK4HxL/ AMhGP/riP5mu+0j/AJAth/17x/8AoIoAuUUUUAFFFFABRRRQAUUUUAFJS0UAJmilxRQAVz7eENPd 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 /cP8xQBq0UUUAFKOlJSjpQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/AJErUP8Atn/6 MWukrm/Hv/Ilah/2z/8ARi1M/hZzYz/dqno/yPOPAX/I66f/ANtP/RbV6P49/wCRK1D/ALZ/+jFr zjwF/wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxaxp/wANniZd/wAi6r/29+R5x4C/5HXT/wDtp/6L ava68U8Bf8jrp/8A20/9FtXtdVQ+E6ch/wB2l6/ogooorY9sKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4n4of8i1bf8AX4v/AKA9c58L /wDkZbn/AK82/wDQ0ro/ih/yLVt/1+L/AOgPXOfC/wD5GW5/682/9DSueX8VHzeJ/wCRtD5fkzo/ ih/yLVt/1+L/AOgPXFeAv+R10/8A7af+i2rtfih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6LalP +IvkZ47/AJGkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKADtVHUv+PZf9 8fyNXu1UdS/49l/3x/I0AcD4l/5CMf8A1xH8zXfaR/yBbD/r3j/9BFcD4l/5CMf/AFxH8zXfaR/y BbD/AK94/wD0EUAXKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBK57xjbfa9Iij37MTh s4z/AAtXRYoPNNEuNz5k8dj+z9chi/1mbZWz0/iYf0rqdK1fbo9ivkdLeMff/wBke1ep634a/ti8 S4+1+TtjCbfL3dyc9R61o22nfZ7WGDzd3loqZ24zgY9apM55Urs8n8R/Cj7LoNzN/bW7bt4+y4/i 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 me9XobP737z9K8jF4mnDc9rBXMaiu2sfC32yzjuPtmzfn5fKzjBI9fasDSvDv9palDafavL8zPze XnGAT0z7V4VXHU7n0VKqlGxkUYzXfx/DbY2f7Wzx/wA+3/2VRXPhT+zpBD9t8zI3Z8rHt6+1ZxzG jct1Ecsp/wBGA/2P6VXq/Om25kgznDlN344qCe28lA2/OTjpX0GAxNOe39aHzmZXe3n+ZX60YoxR XsJJnhuUkFOWkoWubFRXKz1MqblUV/P8iCX/AFhpmKkl/wBYajrxJRV2fd0qa5EFFFFEY6l1Ka5R yj5h9anzVdR8w+tWBXqYeKPksx0T+f5hmjGaWkPWvRjBWPm5zfMKTxWtof8Ay3/4D/WsitjQl3/a OcY2/wBa83GWUWdWHk2z1Dw9/wAgK2/4F/6Ea47xT/x461/1zn/k1dl4fXboduM/3v8A0I1ymuxe eNTi3bd/mrnGcZyK+Lq/xn6/qe7T+H5GT+zpx8Qb/wD7BUn/AKNir6crwP4IaP8A2d40vJvP8zOn OuNmP+WkZ9favfM17UHdXOd7hRRRVCCiiigAooooAKKKKACg80UUAFFGaKACkpcYooA8t0P/AJDE H/Av/QTXe6b/AMfLf7h/mK4HQ/8AkMwf8C/9BNd9pv8Ax8t/uH+YoA1aKKKAClHSkpR0oAWiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn +7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/ 2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/ 7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F// 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 p8v+sNMrxJbn31H4EFFFHSiO5dT4RV++PrVgioF+8PrU9erhz4/M9n8/zAcUUdaK9GOx8xP4h8EX mzKmcZ74rq/DWnf8fX73+5/D9feuZsf+PyP8f5GvQ/Bke/7dzjHl/wDs1fNZlieXTy/U9bB0r6nS 6XH5OmxJnOM8/ia8x1G68zxLd2+zG68dN2emXIzXpz3XkOY9m7HfOK8Gh/f/ABcjX7vma6B64zPX hU6XtZt38z021FWPcvhdp/2XxNcv5u7Nmwxtx/GnvXrdcz4d0/7JqEknm78xFcbcdx7101enTVkY MKKKM1YgooooAKKKKACiiigAooooAM0YoxSUAKKKKz7m88q4ZPLzjHOfagDyzw1d+b4gtU2Yzv5z /sGvTtN/4+W/3D/MV5R4U/5GW0/4H/6A1er6b/x8t/uH+YoA1aKKKAClHSkpR0oAWiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAK5vx7/wAiVqH/AGz/APRi10lc349/5ErUP+2f/oxamfws5sZ/u1T0 f5HnHgL/AJHXT/8Atp/6LavR/Hv/ACJWof8AbP8A9GLXnHgL/kddP/7af+i2r0fx7/yJWof9s/8A 0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/ANtP/RbV7XXingL/AJHXT/8Atp/6Lava6qh8J05D/u0v X9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFAHE/FD/AJFq2/6/F/8AQHrnPhf/AMjLc/8AXm3/AKGldH8UP+Ratv8Ar8X/ANAe uc+F/wDyMtz/ANebf+hpXPL+Kj5vE/8AI2h8vyZ0fxQ/5Fq2/wCvxf8A0B64rwF/yOun/wDbT/0W 1dr8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbUp/xF8jPHf8AI0h/26e10UUV0n1AUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU 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 BW3ATP3BzyCPT3qPxZ4gh0D7H5v2j99vx5OO23ryPWvicdWdea5ex7tCnyLU5fxZ4mstP8TXlrLF cM6bMlFBHKKfX3qLwtoV1c+L9F1RJIRBJfwXAUk7tpkVsdMZx71zes6Jf+KNWn1m0uI0guNu1Z3Y ONqhTnAI6qe9fR/hDw3Ba+GNBaS1szPFZ25aQRgksEXJzjOc967MPTSgvREzep2FFFFdaMwoopMG gBaKKKACiiigAooooAKMUUZoAKKKTOaAA81yes3SRarOjBsjb0/3RXWYry/xdqQt/E95ETLldn3T x9xfegDE8Kf8jLaf8D/9AavV9N/4+W/3D/MV5R4U/wCRltP+B/8AoDV6vpv/AB8t/uH+YoA1aKKK AClHSkpR0oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1 D/tn/wCjFqZ/Czmxn+7VPR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2 n/otq9H8e/8AIlah/wBs/wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/k ddP/AO2n/otq9rqqHwnTkP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDX m3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QH rivAX/I66f8A9tP/AEW1dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9unt dFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA 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 DceIvs3/AAjGpXUnkbvtHlSPDjdjbndtz0b1qTTPAni/V9PivmsHuTLn97JdRlmwSOSWz2x+Fep+ EfhZo2lfbPtWjeV5mzb/AKU7Zxuz0c+orvrHTLPTrOO0tIfLgjztXcTjJJPJOepNejTw8YKyMJTb KNl4c0mxu0uLfR7CCVM7ZIrdFYZBHBAz3rYCgfdAH0paK32MwooopgFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAJg1n67craaNcTvIY1XblhnjLAdq0a4PxRri3Ph26hS53M2zA2Y/jU+lAHL+J9Rj1D7 L5c7S7N+d2eM7fX6Vz1K0jvjec46UmaANnwof+KltP8Agf8A6A1er6b/AMfLf7h/mK8o8KD/AIqW 0/4H/wCgNXq+m/8AHy3+4f5igDVooooAKUdKSlHSgBaKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig Arm/Hv8AyJWof9s//Ri10lc349/5ErUP+2f/AKMWpn8LObGf7tU9H+R5x4C/5HXT/wDtp/6LavR/ Hv8AyJWof9s//Ri15x4C/wCR10//ALaf+i2r0fx7/wAiVqH/AGz/APRi1jT/AIbPEy7/AJF1X/t7 8jzjwF/yOun/APbT/wBFtXtdeKeAv+R10/8A7af+i2r2uqofCdOQ/wC7S9f0QUUUVse2FFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8U P+Ratv8Ar8X/ANAeuc+F/wDyMtz/ANebf+hpXR/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXPL+K j5vE/wDI2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbV2vxQ/5Fq2/wCvxf8A0B64rwF/ yOun/wDbT/0W1Kf8RfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU 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 8F034c+Ob65aLxBpW+0CFkH2iAfPkY+42ehb2rrtJ+DWhT2rNrOg7rkOQv8Apjj5MDH3Xx1zXrQp elbxgo7ENtnN6d4F8O6alobfTfLe2CeX+/kO0rjHVueldCqBTkDFPoqrIQUUUlMBaKKKACiiigAo oooAKKKKACiiigAooooAKKKOKACiisrUtatNOuVhnuPLdkDAbCeMkdh7UART6/aQ3EkTXOGRipHl ngg/SvHZdQup4jHJLuQ9RtA/pV7VNYun1e9eGfMTTuUOwdNxx1FZGaACkwKWigDZ8Kf8jLaf8D/9 AavV9N/4+W/3D/MV5R4U/wCRltP+B/8AoDV6vpv/AB8t/uH+YoA1aKKKAClHSkpR0oAWiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAK5vx7/AMiVqH/bP/0YtdJXN+Pf+RK1D/tn/wCjFqZ/Czmxn+7V PR/keceAv+R10/8A7af+i2r0fx7/AMiVqH/bP/0YteceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs /wD0YtY0/wCGzxMu/wCRdV/7e/I848Bf8jrp/wD20/8ARbV7XXingL/kddP/AO2n/otq9rqqHwnT kP8Au0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/AK/F/wDQHrnPhf8A8jLc/wDXm3/oaV0fxQ/5Fq2/6/F/ 9Aeuc+F//Iy3P/Xm3/oaVzy/io+bxP8AyNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1 dr8UP+Ratv8Ar8X/ANAeuK8Bf8jrp/8A20/9FtSn/EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAHaqOpf8AHsv++P5Gr3aqOpf8ey/74/kaAOB8S/8AIRj/AOuI /ma77SP+QLYf9e8f/oIrgfEv/IRj/wCuI/ma77SP+QLYf9e8f/oIoAuUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFMAoo opAFFFFABRRRRcQcUYoooCwc0c0ZooGFFFH0oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACuF8Pf8h22/4F/wCgmu6rhfD3/Idtv+Bf+gmgDuqKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKMUAQ3NtDd27QTJvjbGVyRnBz2rk/EXw80HXfs32 jS/P8ndt/wBIdcZx6MPSuyopNJhc+c/Efw18X2mvXMHhrSdmkLt+zj7TEcZUFvvtu+9u6/yrItvF viS2nWbUb7baLnefKjPbA+6ueuK+oGiVmySc151qHwc0C5sZIjd6p82PuyR56g/3K554eMuhoptH lV94m1zxBCLTw3d/aLxG8x18tExGAQTlwB1K+9XdG+HvifxLZvea7pf2m6SQxK/2iNMIACBhGA6s fzr0bwz8I9F0DUpLqC41Mu8JjPnOmMEg9kHPFd9p2nRaZbtDCzsrOXJcgnOAOwHpThQjDZCc2zm9 C+Hvh/T7PTZX0vy763jiYn7RIdsigH+9g8j6V1yoqnKjBp1JW6SRAtFJRTAWijFFABRzRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAc0dBzRmqOoanb2tjdSLcQebFG7BWcfeA PBGaAINb1aHSrJJ5J/KDSBN2wt2Jx0PpXmfinXTqGpxy21z5iCEKTsxzuY9x71L4i8T3GrafHbyC 2wsof93nPQj1PrXMFtxyaAEYl2LNyScmk47UZoxQAc0UUUAbPhT/AJGW0/4H/wCgNXq+m/8AHy3+ 4f5ivKPCn/Iy2n/A/wD0Bq9X03/j5b/cP8xQBq0UUUAFKOlJSjpQAtFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2M/3ap6P8jzjwF/yO un/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/j3/kStQ/7Z/+jFrGn/DZ4mXf 8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3aXr+iCiiitj2wooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig Difih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC//AJGW5/682/8AQ0rn l/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW3/X4v/oD1xXgL/kd dP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKADtVHUv+PZf98fyNXu1UdS/wCPZf8AfH8jQBwPiX/kIx/9cR/M132kf8gWw/694/8A0EVwPiX/ AJCMf/XEfzNd9pH/ACBbD/r3j/8AQRQBcooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBaSiigAooooAKKKKACii igQUdKKKACiiigoKKKKAFpKKKBBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVwvh7/kO23/Av/QTXdVx GgQzJrduzxOqjdklSP4TQB29FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA B0ooooC4UUUUAFFFFABQKKKACiiigANJmlpCKAClooxigBDRS0UAFFFFABRRRQAZooooAKKMUUAF FFFABRRRQAUUUUAFFFFABRRRQAUZoooAKRnRMbmAz6mq11f29tbPM9xCqrjJdwAOcVx/iTxebb7L 9hlsp92/fht23pjo31oA39V16LT7pYfPtVygb944B6kevtXmmq+Irm4u72MLAY5HkXcoPIJPI5qn q+sT6tdpPMsSsqBB5YIGMk9yfWs08nNACdaOlFFABRRRQACigUUAbHhQn/hJbT/gf/oDV6xpv/Hy 3+4f5ivKPCn/ACMtp/wP/wBAavV9N/4+W/3D/MUAatFFFABSjpSUo6UALRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFc349/wCRK1D/ALZ/+jFrpK5vx7/yJWof9s//AEYtTP4Wc2M/3ap6P8jzjwF/ yOun/wDbT/0W1ej+Pf8AkStQ/wC2f/oxa848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWsaf8A DZ4mXf8AIuq/9vfkeceAv+R10/8A7af+i2r2uvFPAX/I66f/ANtP/RbV7XVUPhOnIf8Adpev6IKK KK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKAOJ+KH/ItW3/AF+L/wCgPXOfC/8A5GW5/wCvNv8A0NK6P4of8i1bf9fi/wDoD1znwv8A +Rluf+vNv/Q0rnl/FR83if8AkbQ+X5M6P4of8i1bf9fi/wDoD1xXgL/kddP/AO2n/otq7X4of8i1 bf8AX4v/AKA9cV4C/wCR10//ALaf+i2pT/iL5GeO/wCRpD/t09rooorpPqAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigA7VR1L/j2X/fH8jV7tVHUv+PZf98fyNAHA+Jf+QjH/ANcR/M132kf8 gWw/694//QRXA+Jf+QjH/wBcR/M132kf8gWw/wCveP8A9BFAFyiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqkOnxQ SrIrOSPUj/CrdFABRRRQAnPpS0UUAFFGKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKbIxWNiOoBNYurazcafpk11EkTOm3AcEjlgPX3oA15rmC32+fNHFu6b2C5/OsO+8UW9te SQpd2RVcY3SDPQH1rhtb8X6he+R5kNsNm7G1W74/2vauZubl7q4aZwoZsZC9OmKANi/8V32oWUlr NFbLG+MlFYHgg9z7Vhs27GaTFAFABRQaO1ABRRRQAUUUUAFFFFAGz4U/5GW0/wCB/wDoDV6vpv8A x8t/uH+Yryjwp/yMtp/wP/0Bq9X03/j5b/cP8xQBq0UUUAFKOlJSjpQAtFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAVzfj3/kStQ/7Z/wDoxa6Sub8e/wDIlah/2z/9GLUz+FnNjP8Adqno/wAjzjwF /wAjrp//AG0/9FtXo/j3/kStQ/7Z/wDoxa848Bf8jrp//bT/ANFtXo/j3/kStQ/7Z/8Aoxaxp/w2 eJl3/Iuq/wDb35HnHgL/AJHXT/8Atp/6Lava68U8Bf8AI66f/wBtP/RbV7XVUPhOnIf92l6/ogoo orY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooA4n4of8AItW3/X4v/oD1znwv/wCRluf+vNv/AENK6P4of8i1bf8AX4v/AKA9c58L/wDk Zbn/AK82/wDQ0rnl/FR83if+RtD5fkzo/ih/yLVt/wBfi/8AoD1xXgL/AJHXT/8Atp/6Lau1+KH/ ACLVt/1+L/6A9cV4C/5HXT/+2n/otqU/4i+Rnjv+RpD/ALdPa6KKK6T6gKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAO1UdS/49l/3x/I1eqjqf/Hsv++P5GgDgfEv/IRj/wCuI/ma77SP+QLY f9e8f/oIrgfEv/IRj/64j+ZrvtI/5Ath/wBe8f8A6CKALlFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACdKWii gBMUvWiigA6UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFLSUAFFFFABRRRQAUUUUAFFFFABRSE7RmqV7qP2PZ+637s/xYxjHt70 AXqK42+8efYryS3/ALN37MfN5+M5AP8Ad965q+8a/aftKf2ft8zcM+dnGc/7NAHp95c/ZYg+zdls Yziub1Xxp/Zd0sH9n+buQPnztvcj+6fSvMLm8+0xhPL24Oc5zVWgDo9R8T/bGux9j2ecX/5a5xnP t71zmc0dqSgAxRnFHWjFAC4xSDmlooAOlJ3paM0AFFFFABRRRQAUUUUAbPhT/kZbT/gf/oDV6vpv /Hy3+4f5ivKPCn/Iy2n/AAP/ANAavV9N/wCPlv8AcP8AMUAatFFFABSjpSUo6UALRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f/oxa6Sub8e/8iVqH/bP/ANGLUz+FnNjP92qej/I8 48Bf8jrp/wD20/8ARbV6P49/5ErUP+2f/oxa848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWsa f8NniZd/yLqv/b35HnHgL/kddP8A+2n/AKLava68U8Bf8jrp/wD20/8ARbV7XVUPhOnIf92l6/og ooorY9sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooA4n4of8i1bf9fi/wDoD1znwv8A+Rluf+vNv/Q0ro/ih/yLVt/1+L/6A9c58L/+Rluf +vNv/Q0rnl/FR83if+RtD5fkzo/ih/yLVt/1+L/6A9cV4C/5HXT/APtp/wCi2rtfih/yLVt/1+L/ AOgPXFeAv+R10/8A7af+i2pT/iL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKADtVHUv8Aj2X/AHx/I1e7VR1L/j2X/fH8jQBwPiX/AJCMf/XEfzNd7pH/ACBbD/r3 j/8AQRXm/i69+zatEnl7swA53Y/iarln8SfstlBb/wBk7vKjVN32nGcDGfu0Aek0dK89PxQ/6g// AJM//YUn/C0Mf8wf/wAmf/sKAPQ6K88/4Whn/mD/APkz/wDYUv8AwtD/AKg//kz/APYUAehUV57/ AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2 FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8A qD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A 9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/ AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehU V57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M /wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C 0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+ TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8A wtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYU AehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCo P/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2 FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8A qD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRX nv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/ APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ /wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M /wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC 0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB 6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg/ /kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYU f8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCo P/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee /wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A 9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/ AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/ APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ /wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHo VFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+ TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/ wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg/ /kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/ AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2 FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8A qD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A 9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/ AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehU V57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M /wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C 0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+ TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8A wtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYU AehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCo P/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2 FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8A qD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRX nv8AwtD/AKg//kz/APYUf8LQ/wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/ APYUAehUV57/AMLQ/wCoP/5M/wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUf8LQ /wCoP/5M/wD2FAHoVFee/wDC0P8AqD/+TP8A9hR/wtD/AKg//kz/APYUAehUV57/AMLQ/wCoP/5M /wD2FH/C0P8AqD/+TP8A9hQB6FRXnv8AwtD/AKg//kz/APYUh+KPH/IH/wDJn/7CgD0OjGa88HxR /wCoP/5M/wD2FL/wtDP/ADB//Jn/AOwoA9CxRXER/ELeqH+y8bgP+Xj/AOxqX/hPP+ob/wCR/wD7 GgDsqK44ePP+ob/5H/8AsapXHxL8mdo/7I3Yxz9px2/3aAO+ozivPP8AhaH/AFB//Jn/AOwqG4+J Hnbf+JTjGf8Al4/+xoA9J60ZryxvH2WJ/sz/AMj/AP2NUm8WblK/Yuox/rf/AK1AHsFFeJz675yB fs2Oc/f/APrVmXNx9pkD7duBjGc0Ae5T3/kiQ+VnZn+Lrj8KybrxX9mjD/Yt2TjHm4/pXjtAoA9N vfiJ9l2f8Svduz/y8Yxj/gNYtz49+0XDS/2Zt3Y48/Pb/drjCM0YoA07rV/tVs8Pkbd2Od+e+fSs zpSDk4pelABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGz4U/5GW0/4H/6A1er 6b/x8t/uH+Yryjwp/wAjLaf8D/8AQGr1fTf+Plv9w/zFAGrRRRQAUo6UlKOlAC0UUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNjP92qej/I 848Bf8jrp/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjF rGn/AA2eJl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaX r+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c 58L/APkZbn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+ KH/ItW3/AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAO1UtQjMkCgY+9nn6GrvamFQwwQD9aAPI/HSGPW4Qcf8AHsp4 /wB5q5bvXZfElQviK3CgAfZF6f771x2KAFpKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiijFABRRRQAUUUUAFFFF ABRRRigAooooAKKKKACiiigAooooAKKKKACiijFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFGaACijrRQAUUd6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooxQAEZoAxR RQAZoxRQTnpQAYooFFABRSUooAKKKKAAClpKKADNBFFGaACiijFABRRmigAooooAKMUUUAFFFGaA CiiigAooooAKKKKACiiigAooooAKKKKANnwp/wAjLaf8D/8AQGr1fTf+Plv9w/zFeUeFP+RltP8A gf8A6A1er6b/AMfLf7h/mKANWiiigApR0pKUdKAFooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACu b8e/8iVqH/bP/wBGLXSVzfj3/kStQ/7Z/wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/H v/Ilah/2z/8ARi15x4C/5HXT/wDtp/6LavR/Hv8AyJWof9s//Ri1jT/hs8TLv+RdV/7e/I848Bf8 jrp//bT/ANFtXtdeKeAv+R10/wD7af8Aotq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP+Ratv+vx f/QHrnPhf/yMtz/15t/6GldH8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXPL+Kj5vE/8jaHy/Jn R/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1dr8UP+Ratv+vxf/QHrivAX/I66f8A9tP/AEW1Kf8A EXyM8d/yNIf9untdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFNp1NoA858fW3 na7A2F4tlHP+81cHKu2V19GI4r1XxPbCbUo22ocQgfMPdq8uvhs1C5X0lYcfU0AQClpKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClRS8i oOrEAZpM1Jb/APHzF/vj+dAGvpfhe91e6a3t5bdXVC5MjMBjIHYH1rX/AOFaaz/z82H/AH8f/wCJ rV8Ef8hqb/r3b/0Ja77mgDyz/hWus/8APzYf9/H/APiaP+FaayP+Xmw/7+P/APE16FNrVtC8iMkp KEg4A7fjVf8A4SWz/wCec/8A3yP8aAOFHw11n/n5sP8Av4//AMTR/wAK11n/AJ+bD/v4/wD8TXdf 8JLZ/wDPOf8A75H+NH/CSWf/ADzn/wC+R/jQB5xqvgjUtH02a/uJ7RoosbhG7FuSBxlR61zVeo+L tctbzwveQRxzB32YLAY4dT6+1cPoOjy6t9o8sw/utufMz3z04PpQBmx2kkqB1ZQD6mt208FajdJB Ik1oBKFI3M3f1+Wu/wBD8P2sGjwR3FnZySjdufygc/Me5HpW35NvbQ5WGNVjXICoBgAdqAPPIPh3 qSOTJLYMMdNzH/2Wny/DzUGYFJLADHq3/wATXY3XiG0s4hJJHOQW2/Ko/wAfaoIvFVjMpZYrgAHH Kr/jQBwN14D1O3SaVp7PbGGYgO2cDn+7WDPp00ELSMyFV9Cf8K9yQQ3VurmJSkqA4ZRyCO9ZetaN ZS6ROkVlao524PlKMfMPagDxXpRkVveJNNGn/ZfkiXfv/wBWMdMdePesGgDsv+Faaz/z82H/AH8f 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 P8xXlHhT/kZbT/gf/oDV6vpv/Hy3+4f5igDVooooAKUdKSlHSgBaKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigArm/Hv/ACJWof8AbP8A9GLXSVzfj3/kStQ/7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP /wC2n/otq9H8e/8AIlah/wBs/wD0YteceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+ RdV/7e/I848Bf8jrp/8A20/9FtXtdeKeAv8AkddP/wC2n/otq9rqqHwnTkP+7S9f0QUUUVse2FFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AcT8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaV0fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A 15t/6Glc8v4qPm8T/wAjaHy/JnR/FD/kWrb/AK/F/wDQHrivAX/I66f/ANtP/RbV2vxQ/wCRatv+ vxf/AEB64rwF/wAjrp//AG0/9FtSn/EXyM8d/wAjSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFAB2ptOPSm0AZ99p5uplcCPhcfN9T7V4xrKeXrmoR4Hy3Mg46feNe715Lr+j t/aOqXPkcebLJu3+5OcZoA5TFFGc9KPrQAUUcUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU 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 P/Xwv/oLUAeYat/yxx/tf0rN5rS1Uf6r8f6VnUAWLKA3N2kS7ctn73ToTXpPgPTvs39oeYsTbvLx gZ/ve1cZ4W095/ElpHJFuQ78jdj+BvevRy0GgdT5HnfVt2Pz9aAOe8R6t9j165t1aZQm3hDgcqD6 +9WNO1sXE1pAzzsJGRCGOQc4HPPSuQ8UXxufEd3NHJuRtmDtx/AoqHRdRuF1vTw0uIxcR5+UdNw9 qAO78eaYr6HCII4Ub7SuSFxxtb0FeZ3Ns9rIEcqSRn5TXsWp+TrFstvH++KuH28r2Iz29a828XWR sdWii8vZmANjdn+Jv8KAMCjGKMGkzQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAbPhT/AJGW0/4H /wCgNXq+m/8AHy3+4f5ivKPCn/Iy2n/A/wD0Bq9X03/j5b/cP8xQBq0UUUAFKOlJSjpQAtFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAVzfj3/kStQ/7Z/8Aoxa6Sub8e/8AIlah/wBs/wD0YtTP4Wc2 M/3ap6P8jzjwF/yOun/9tP8A0W1ej+Pf+RK1D/tn/wCjFrzjwF/yOun/APbT/wBFtXo/j3/kStQ/ 7Z/+jFrGn/DZ4mXf8i6r/wBvfkeceAv+R10//tp/6Lava68U8Bf8jrp//bT/ANFtXtdVQ+E6ch/3 aXr+iCiiitj2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigDifih/yLVt/1+L/6A9c58L/+Rluf+vNv/Q0ro/ih/wAi1bf9fi/+gPXOfC// AJGW5/682/8AQ0rnl/FR83if+RtD5fkzo/ih/wAi1bf9fi/+gPXFeAv+R10//tp/6Lau1+KH/ItW 3/X4v/oD1xXgL/kddP8A+2n/AKLalP8AiL5GeO/5GkP+3T2uiiiuk+oCiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKADtTacelNoAK57XdLjbSdTlEPzmCVgd3faT610NV76IT2FzCRu3xMuM4zk EUAeDPBJEu51wOnWo667xTo66fpkcwg8vMwXO/P8LH19q5GgAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACijNHFABipbf/AI+Yv98fzqKpLf8A4+Yv 98fzoA9D8Ef8hqb/AK92/wDQlrvq4HwPn+2pv+vdv/QlrvjQB5rrOu6lBfagkdztWOSQKNinABOO 1c7/AMJXrX/P7/5CT/CtHX/+Qjqf/XWX+ZrlfrQBp3HiDVLrb511u25x+7UY/IVnyzPPIZJG3Oep ximfSigCzYzi1vI5t23bnnGexFek+BNQF5/aGZd+3y/4cYzu9q8t4roPDGtro/2rNx5Pm7P4N2cb vY+tAHsoIIzXBa7oEzjUrlbbIPmyBvMHuc4zXRaPrtpdaVDNJc7mbdk7CM4Yj0rUeKG7tmVhvimT B5IypFAHg0ltLCu6RMAnHUUwKSOBXslz4P0WaML9hzg5/wBc/wD8VUcPgnQVQh9P5z/z2k/+KoA8 5t/Cuq3MMUsdluWRQynzVGQeR3p134T1iztnnmstka4y3mocZOOxr12KxtbWBEjj2xxKAo3E4AHF Z+vXNiui3BnfEfy54b+8PSgDxme2lt9vmJt3dOQairb8Qz2E32b7C27G7fww9MdfxrE+tAH0LXKe NLua1+w+S+3d5meAf7vrXV1Tv9JstT8v7ZB5nl52/OwxnGeh9hQB5FqOtaglwoW4wNv9xfU+1U/7 d1L/AJ+f/HF/wr1eTwZ4fmbdJYZIGP8AXSf/ABVM/wCEG8Of9A7/AMjyf/FUAcH4c1fVptQkWGfc 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 euaZJp73LCA5bYc8N0yPWue8Y6St/q8UqwbwIAud+P4m9/eue8M6/dpqUhuLnCeScfux1yPQV6Dp X2fV7VriX96yuU3crxgHHb1oA8ZuozDdzRYxskZcemDiosVua5psser6k6w4jWeUg7h03H3rDoAK KKKACiiigAooooAKKKKACiiigAooooA2fCn/ACMtp/wP/wBAavV9N/4+W/3D/MV5R4U/5GW0/wCB /wDoDV6vpv8Ax8t/uH+YoA1aKKKAClHSkpR0oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5v x7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/ 8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yO un/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/ 9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH 8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wAR fIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAHpTad2ptABSEAg g96WigDnfFelLf6XFEIfMxMGxux/C3v715rr+lDS/s/7nyvM3fx7s4x7n1r2mSJJl2yLkA564rjP HGkpP9g8m1kk2+ZnZuOPu+lAHmFFWL63NreSQmNoyuPlYEEcA96r0AFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRS0AJRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAGKKPrR9KADmnRtskRs4wQabRzQB0mh6/ /Zt6832ny90ZXPl57g+ntW//AMJzn/mI/wDkD/7GvPKKANW/1L7Vc3Unm7vNd2ztxnJPtWVkGiig Ao5oooAOKKKKANC21vULS3WCC42RrnC7FOMnPcV0Fp421CNIEk1DCqFDDyV6d/4a4+igD0aPxym7 95qPGP8Anh/9jSSeOU3fJqPGP+eH/wBjXnVFAHcXPje6aGYRajyVYL+5H4fw1zl34k1a+tnt7m73 xPjcvloM4Oew9RWVRgUAKXLd6SiigD0P/hOf+oj/AOQP/saP+E5/6iP/AJA/+xrzyloA9C/4Tj/q I/8AkD/7Gj/hOf8AqI/+QP8A7GvPKO9AHez+OZdg8nUfmz/zwHT8VrIvvGmsvMDBqGV28/uU65Pq tc1ikPtQBZl1C5nmeWSXdI7FmO0DJPJ7VDEwWUEnAplFAHUeHvEC6T9p23Xlebt/5Z7s4z7H1puo +J7i4v5JUvNytjB8oDsPauZooAOaKM0UAH1qa0mNteQTq21o5FcNjOCDnNQUtAHaQeMZi5+0X/yY 4/cjr+C1heIdSTVNQjnWXzQsQTO3b3J9B61j80ooAPpXd33jL7TZyRfb927HHk47g/3a4SigDR1S /wDtvlfvN+zP8OMZx/hWdiijmgABINauh6tLpV688c/lFoym7YG7g46H0rKoPtQB3CeLhIu64vsv nA/ddvwWuOvpRPqFzMrbhJKzA4xnJJqDNLxigBKmt7qe13eS+3djPAP86hFFAHS2PjDVLOzjgS+2 KucL5KnGST/drdHjOB/llv8AKHr+5P8A8TXntFAHoR8YWsX+ovsZ+9+5P9VqnN44vBMwh1H932/c D+q1xJ46UUAal5r+o3Tzh7nckpbP7tRkH8Ky8UUD3oA39D1v+zbJ4ftHl7pC2NmewHp7V0MfjcrG i/2hjAA/1P8A9jXn9FAHof8AwnI/6CP/AJA/+xo/4Tkf9BH/AMgf/Y156cYpBQB6H/wnP/UR/wDI H/2NVr7xl9ps5Ift+7djjycdwf7tcLSUAaWqX/23yv3m/Zn+HGM4/wAKhtbnyYiu/GTnpVSigDvb TxmILKCH+0NvlxquPJzjAx/dqb/hOf8AqI/+QP8A7GvPKKAPQv8AhOf+oj/5A/8AsaX/AITkf9BH /wAgf/Y154aMUAd9P41MkLIdQznt5P8A9jXNa/qv9p/Z/wB95vl7v4NuM49h6VjUUAFXbLVbyxu0 uYJtkiZw20HGRjoR71SpKAOvsPG+pidvtWo/Jt4/cr1yPRa1E8ZW0q7rm/y/QfuT0/Ba89oFAHft 4yjXJjv+n3f3J/D+Gs7U/Gl/NbKsGoZcOCf3K9MH1WuRo4oAtXupXeozCa6l8yQLtB2gccnsPc1V JyeaKKAJIJPKmV84xnn8K6bQfEf9mfaP9L8rzNv/ACz3Zxn2PrXK0fWgDd1XWvtupzXH2jfv2/Ns xnAA9PasLmkPWloAKXcw+6eKSigDp7DxbfWsdrEb3bFEEXHlKcAYHpVnW/FX9pWSQ/bfM2yBseVj sR6e9cfQAKALN1P5+z5t23PbFbGmaxFaafFA0+wrnjYTjJJ9K54+1FAHWax4rm1HSprVr3zBJt+X ygM4YHrj2rlCxbqaSigAooooAkhnkt3LxNtYjGcZ4rqdA8VyafYPFLe+WxlLY8rPGAPT2rkqKAN6 /wBXS6a6bz9xlLnOzGc59qwaKKACiiigAooooAKKKKACiiigAooooAKKKKANnwp/yMtp/wAD/wDQ Gr1fTf8Aj5b/AHD/ADFeUeFP+RltP+B/+gNXq+m/8fLf7h/mKANWiiigApR0pKUdKAFooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/ANGLXSVzfj3/AJErUP8Atn/6MWpn8LObGf7t U9H+R5x4C/5HXT/+2n/otq9H8e/8iVqH/bP/ANGLXnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8A Ri1jT/hs8TLv+RdV/wC3vyPOPAX/ACOun/8AbT/0W1e114p4C/5HXT/+2n/otq9rqqHwnTkP+7S9 f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAcT8UP+Ratv+vxf/QHrnPhf/wAjLc/9ebf+hpXR/FD/AJFq2/6/F/8AQHrnPhf/ AMjLc/8AXm3/AKGlc8v4qPm8T/yNofL8mdH8UP8AkWrb/r8X/wBAeuK8Bf8AI66f/wBtP/RbV2vx Q/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtSn/EXyM8d/yNIf8Abp7XRRRXSfUBRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFAAelNpx6U2gApM80tFABUM9slxt3lht6YqaigDzPxL4cefxBdSRwXb q2zDKmQfkHtXDlSBnBr394FdixJya8o1Xwy1jpk1yIbsFNv3145IHp70AcsPeinMrLjcpXPqMU2g AoozRQAUUlLQAUUUUAFFFFABRRRQAUUUUAGcUc0UUAFOSN5M7EZsdcDNWtOsJL6/itxFKxfPCLk8 An09q7nw94Mhk+0/a1vYcbduQFz1z1X6UAcImmX8qB47G5dT0ZYmIP6VpR+GdRZwG06/A9fIb/Cv VrXQ7aztkgjkmKrnBYjPJz6VpMwUZJAHqaAPHf8AhFbz/nxv/wDv0f8ACmN4XvgeLC/I/wCuLf4V 7F50X/PRP++hTlZWGVYMPY5oA8Mm0XUojITp14FTOSYG4A/CqTRSxjMkTqOmWUiveLixiuYpY3Zw JVKnBHeuR8QeDrZbCM2xvJX80ZUYbjB54WgDzIk0Vo6tpcmnXSw+VMu5A2JFwepHp7VnkEHBGD70 AOihkuJBFDG8kjdEQZJ/AVbTRNWfOzS71sdcW7n+lWvCg/4qW0/4H/6A1eu6X/y1/D+tAHjf9gaz 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 H+YoA1aKKKAClHSkpR0oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s/8A0Ytd JXN+Pf8AkStQ/wC2f/oxamfws5sZ/u1T0f5HnHgL/kddP/7af+i2r0fx7/yJWof9s/8A0YteceAv +R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLWNP+GzxMu/5F1X/ALe/I848Bf8AI66f/wBtP/RbV7XX ingL/kddP/7af+i2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15 t/6GldH8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaVzy/io+bxP/I2h8vyZ0fxQ/wCRatv+ vxf/AEB64rwF/wAjrp//AG0/9FtXa/FD/kWrb/r8X/0B64rwF/yOun/9tP8A0W1Kf8RfIzx3/I0h /wBuntdFFFdJ9QFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAHam07tTaACiiigAooooAKM UUUAGKKKKAOI1zwnvTUr77bjIlm2eV9TjOa84uLbyYw2/OTjpXvx5BFY+vaN/bFilv8AaPJ2yh92 zd2Ix1HrQB4kKK6TxH4f/szUI4ftXmbog+fLx3I9faudddjsvXBxmgBtFFFABRRRQAYxRQeaTpQA tFGKUjFACVvW/wDx7Rf7g/lWDnFacV5thRfLzhQOtAHuVZ+qHHlfj/StCjrQB4n4rP8AxUt3/wAA /wDQFrGrsfGGm+f4pvZfO27tnG3P8C+9cdQBoaPafbLt49+zEZbOM9x/jXaaR4O+22jSfb9mHK48 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 +XEX+wZx287/AOxqt/wneP8AmG/+R/8A7GgDof7L/wCm3/jv/wBepY7LYynzM7SD92o9M1P+0tOi u/J8vzM/LuzjBI649qvjkA0AFNZ9pxiqGtPts0OM/vB/I15d4um/4m0Xy/8ALAd/9pqALmva/m81 O0+zf8tJY93me5GcYrkKCckn1oxigAooooAKKKKACiiigAooooAKKKKACiiigDZ8Kf8AIy2n/A// AEBq9X03/j5b/cP8xXlHhT/kZbT/AIH/AOgNXq+m/wDHy3+4f5igDVooooAKUdKSlHSgBaKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/8ARi10lc349/5ErUP+2f8A6MWpn8LObGf7 tU9H+R5x4C/5HXT/APtp/wCi2r0fx7/yJWof9s//AEYteceAv+R10/8A7af+i2r0fx7/AMiVqH/b P/0YtY0/4bPEy7/kXVf+3vyPOPAX/I66f/20/wDRbV7XXingL/kddP8A+2n/AKLava6qh8J05D/u 0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8jLc/9ebf+hpXR/FD/kWrb/r8X/0B65z4X/8A Iy3P/Xm3/oaVzy/io+bxP/I2h8vyZ0fxQ/5Fq2/6/F/9AeuK8Bf8jrp//bT/ANFtXa/FD/kWrb/r 8X/0B64rwF/yOun/APbT/wBFtSn/ABF8jPHf8jSH/bp7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFAB2ptO7U2gAooooAKKKKACiiigAooooAKOlFFADWTec5xXF6x4J8xb++/tDG4 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 ACMtp/wP/wBAavV9N/4+W/3D/MV5R4U/5GW0/wCB/wDoDV6vpv8Ax8t/uH+YoA1aKKKAClHSkpR0 oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof9s//AEYtdJXN+Pf+RK1D/tn/AOjF qZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP/wBGLXnHgL/kddP/AO2n/otq9H8e /wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A0W1e114p4C/5HXT/APtp/wCi2r2u qofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F//Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9 Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv+vxf/QHrivAX/I66f/20/wDRbV2v xQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0h/26e10UUV0n1AUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAdqbTu1NoAKKKKACiiigAooooAKKKKACiiigAooooASjrRS0ARs hLZ4rjdV8KX1xpk0SS2wZtuMs2Oo9q7akIDDBAI9DQB4tqPhe90zyvOlt28zONjMemPUe9ZM0DW7 hHIJIzxXvE1jZ3G3zrWCTb03xg4/Os678O2FxKHSwsgAuOYV/wAKAPFM8U0cV3t/4Av2luponsUi LO6KCwwOSBjbXPXnhi9soRJJLblS235WP+HtQBiUYqWeBrdwjkEkZ4qLBoAKKKKAJUkCqAQa1bbV 7eG4WRklIGegHp9axaKAOobxJZkf6uf/AL5H+NUrnWbeaQMqSgAY5A/xrEooAfKweV3HRmJGaZRR QAUUUUASQOI5lds4HpV5NQiXOVf8h/jWbR1oA1f7Sh/uyfkP8aX+04P7sn5D/Gsnn1ooA1f7Th/u yfkP8aP7Th/uyfkP8ayqKANX+04f7sn5D/Gj+0of7sn5D/GsqigDQmvopNuFfj1AqlKweQsOh9aZ RQAYooooAsRTqkYUg5FaUGr28Xl7kl+TGcAdvxrFooA6h/ElmwwIp/8Avkf41nXmqwXEwdEkAC45 A/xrIooAdIwaRmHQkmm9KKKAA80mKWigB8bhJAxzgVdhv4o92Vfn0ArPooA1f7Th/uyfkP8AGl/t OH+7J+Q/xrJooA1f7Th/uyfkP8aUanD/AHZPyH+NZNFAGr/acP8Adk/If41ns4ZSBmoqKACg0UUA PgcRTK7ZwPSr6ahEpyVf8h/jWbRQBq/2nD/dk/If41UluUffgN82cZqrRQAdKM0YooADRRRQBNDK se7IPPpVyPUIkjClXyPYf41m0UAav9pw/wB2T8h/jUF5ex3EQRFcENnkVRooAKvxXsaIilXyoAOA KoUUAao1KH+7J+Q/xo/tOH+7J+Q/xrKooA1f7Th/uyfkP8aP7Th/uyfkP8ayqKANUanCP4ZPyH+N B1OH+7J+Q/xrKooA021GFkICvyMdB/jVOaZZEAAPXPNQZooAKMUUZoAKKKDQAVdiu40kDENgegql RQBq/wBpw/3ZPyH+NQzXscjghX6Y5AqhRQArMGdiO5pUYKcmm0UAXIbpI0IIbr2FVZGDSMw6Ek03 pS0AKrANmrdreRwb9ysc46CqVFAGsNThx92T8h/jVSa6SSFkAbJ9ap0tABVq2uUhjKsGJJzxVXrR QBqDUoQANsn5D/GmTX8UiABX655A/wAazqKAJJpBI4Iz0xzUdFFABmijFFABVxbuMOpw3B9Kp0UA av8AaUP92T8h/jR/acP92T8h/jWVRQA+Vg8ruOjMSM0sMgjck56dqjooA0Yb+KNCCr9c8Af41J/a cP8Adk/If41lUUAWJZ1eMqAcn1qvRRQAVq/2nD/dk/If41lUUAav9pw/3ZPyH+NUrydbiYOgIAXH NV6KACiiigAqRZAqgEGo6KANb+04f7sn5D/GmSajC+MK/HsP8azKKAJJ3EkzOucH1qOiigAooooA KKKKAHo4XOc1fgv4o4VQq+R6Af41m0UAabalCVI2yfkP8aqXVwk+zaGGM9ar0UAHWkxzS0UAFFFF ABUttKsNwsjAkDPT6VFkUUAav9pw/wB2T8h/jS/2nD/dk/If41k0UASPIGUgZqMCiigAooooAKtW 1ykMZVgxJOeKq0UAaiajCFA2v+Q/xpJdRheMqFfJ9QP8azM0UASzyLLt2g8etRUUUAav9pw/3ZPy H+NH9pw/3ZPyH+NZVAoAsXk63EwdAQAuOar0tJQAUhGaUUUAaFrfRQWyRsrkjPQD1qX+04f7sn5D /GsqigDQnvopdu1X49QKpSMHkLDoaZRQAUdKKKAJEkCjBzV+PUIljVSr5AA6D/GsyigDUfUoSpG2 T8h/jVO5nWfbtBGM9ar0UAFGKKKACig0UAXor2NEQFX+UAHAFT/2nD/dk/If41lZooAuXN0k0gZQ wAGOaqE5Yn3pKKAA8igcUUUAFaCX0SuCVf8AIVn0UAav9pw/3ZPyH+NUrydbiYOgIAXHNV6KACpb aVYZCzAkEY4qKigDTTUYVGCr/kP8ad/acP8Adk/If41lUUAav9pw/wB2T8h/jQdTh/uyfkP8ayqK ANUapB/dk/If40f2nD/dk/If41lUUAap1OEj7sn5D/GoJbyORgQrdMciqNFACscux9TmpbaZYZCz AkEY4qGigDSTUIVzlX/If41INThx92T8h/jWTRQBK8gZSADUVFFABTo2CSKx6Ag02igDSTUIlbJV +noP8af/AGnD/dk/If41lUUAX5b6J0dQr5YEDIFUKKKACiiigAooooAKKKKACiiigAooooAKKKKA Nnwp/wAjLaf8D/8AQGr1fTf+Plv9w/zFeUeFP+RltP8Agf8A6A1er6b/AMfLf7h/mKANWiiigApR 0pKUdKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACub8e/8iVqH/bP/wBGLXSVzfj3/kStQ/7Z /wDoxamfws5sZ/u1T0f5HnHgL/kddP8A+2n/AKLavR/Hv/Ilah/2z/8ARi15x4C/5HXT/wDtp/6L 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 vaf99t/8TQBzNFdL/wAIPqf/AD3tP++2/wDiaP8AhB9T/wCe9p/323/xNAHNUV03/CD6n/z3tP8A vtv/AImj/hB9T/572n/fbf8AxNAHM0V03/CD6n/z3tP++2/+Jo/4QfU/+e9p/wB9t/8AE0AczRXT f8IPqf8Az3tP++2/+Jo/4QfU/wDnvaf99t/8TQBzNFdN/wAIPqf/AD3tP++2/wDiaP8AhB9T/wCe 9p/323/xNAHM0V03/CD6n/z3tP8Avtv/AImj/hB9T/572n/fbf8AxNAHM0V03/CD6n/z3tP++2/+ Jo/4QfU/+e9p/wB9t/8AE0AczRXTf8IPqf8Az3tP++2/+Jo/4QfU/wDnvaf99t/8TQBS8Kf8jLaf 8D/9AavV9N/4+W/3D/MVw2geEb+y1u3uJJrYom7IVmzypH933rv7K2eGYsxUgrjg0AX6KSigBaUd KSlHSgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/ACJWof8AbP8A9GLXSVzfj3/kStQ/ 7Z/+jFqZ/Czmxn+7VPR/keceAv8AkddP/wC2n/otq9H8e/8AIlah/wBs/wD0YteceAv+R10//tp/ 6LavR/Hv/Ilah/2z/wDRi1jT/hs8TLv+RdV/7e/I848Bf8jrp/8A20/9FtXtdeKeAv8AkddP/wC2 n/otq9rqqHwnTkP+7S9f0QUUUVse2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT8UP8AkWrb/r8X/wBAeuc+F/8AyMtz/wBebf8AoaV0 fxQ/5Fq2/wCvxf8A0B65z4X/APIy3P8A15t/6Glc8v4qPm8T/wAjaHy/JnR/FD/kWrb/AK/F/wDQ HrivAX/I66f/ANtP/RbV2vxQ/wCRatv+vxf/AEB64rwF/wAjrp//AG0/9FtSn/EXyM8d/wAjSH/b p7XRRRXSfUBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR 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 RQAUUUUAFFFFABRRRQAUUUUAFc349/5ErUP+2f8A6MWukrm/Hv8AyJWof9s//Ri1M/hZzYz/AHap 6P8AI848Bf8AI66f/wBtP/RbV6P49/5ErUP+2f8A6MWvOPAX/I66f/20/wDRbV6P49/5ErUP+2f/ AKMWsaf8NniZd/yLqv8A29+R5x4C/wCR10//ALaf+i2r2uvFPAX/ACOun/8AbT/0W1e11VD4TpyH /dpev6IKKKK2PbCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKAOJ+KH/ACLVt/1+L/6A9c58L/8AkZbn/rzb/wBDSuj+KH/ItW3/AF+L/wCg PXOfC/8A5GW5/wCvNv8A0NK55fxUfN4n/kbQ+X5M6P4of8i1bf8AX4v/AKA9cV4C/wCR10//ALaf +i2rtfih/wAi1bf9fi/+gPXFeAv+R10//tp/6LalP+IvkZ47/kaQ/wC3T2uiiiuk+oCiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5vx7/yJWof 9s//AEYtdJXN+Pf+RK1D/tn/AOjFqZ/Czmxn+7VPR/keceAv+R10/wD7af8Aotq9H8e/8iVqH/bP /wBGLXnHgL/kddP/AO2n/otq9H8e/wDIlah/2z/9GLWNP+GzxMu/5F1X/t78jzjwF/yOun/9tP8A 0W1e114p4C/5HXT/APtp/wCi2r2uqofCdOQ/7tL1/RBRRRWx7YUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBxPxQ/5Fq2/6/F/9Aeuc+F/ /Iy3P/Xm3/oaV0fxQ/5Fq2/6/F/9Aeuc+F//ACMtz/15t/6Glc8v4qPm8T/yNofL8mdH8UP+Ratv +vxf/QHrivAX/I66f/20/wDRbV2vxQ/5Fq2/6/F/9AeuK8Bf8jrp/wD20/8ARbUp/wARfIzx3/I0 h/26e10UUV0n1AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABXN+Pf8AkStQ/wC2f/oxa6Sub8e/8iVqH/bP/wBGLUz+FnNjP92qej/I848Bf8jr p/8A20/9FtXo/j3/AJErUP8Atn/6MWvOPAX/ACOun/8AbT/0W1ej+Pf+RK1D/tn/AOjFrGn/AA2e Jl3/ACLqv/b35HnHgL/kddP/AO2n/otq9rrxTwF/yOun/wDbT/0W1e11VD4TpyH/AHaXr+iCiiit j2wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigDifih/yLVt/wBfi/8AoD1znwv/AORluf8Arzb/ANDSuj+KH/ItW3/X4v8A6A9c58L/APkZ bn/rzb/0NK55fxUfN4n/AJG0Pl+TOj+KH/ItW3/X4v8A6A9cV4C/5HXT/wDtp/6Lau1+KH/ItW3/ AF+L/wCgPXFeAv8AkddP/wC2n/otqU/4i+Rnjv8AkaQ/7dPa6KKK6T6gKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm/Hv/Ilah/2z/wDRi10l c349/wCRK1D/ALZ/+jFqZ/Czmxn+7VPR/keceAv+R10//tp/6LavR/Hv/Ilah/2z/wDRi15x4C/5 HXT/APtp/wCi2r0fx7/yJWof9s//AEYtY0/4bPEy7/kXVf8At78jzjwF/wAjrp//AG0/9FtXtdeK eAv+R10//tp/6Lava6qh8J05D/u0vX9EFFFFbHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHE/FD/kWrb/r8X/0B65z4X/8AIy3P/Xm3 /oaV0fxQ/wCRatv+vxf/AEB65z4X/wDIy3P/AF5t/wChpXPL+Kj5vE/8jaHy/JnR/FD/AJFq2/6/ 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 3L/Izf8AhHtE/wCgPp//AIDJ/hR/wj2if9AfT/8AwGT/AArSoosuwexpfyr7l/kZv/CPaJ/0B9P/ APAZP8KP+Ee0T/oD6f8A+Ayf4VpUUWXYPY0v5V9y/wAjN/4R7RP+gPp//gMn+FH/AAj2if8AQH0/ /wABk/wrSoosuwexpfyr7l/kZv8Awj2if9AfT/8AwGT/AAo/4R7RP+gPp/8A4DJ/hWlRRZdg9jS/ lX3L/Izf+Ee0T/oD6f8A+Ayf4Uf8I9on/QH0/wD8Bk/wrSoosuwexpfyr7l/kZv/AAj2if8AQH0/ /wABk/wo/wCEe0T/AKA+n/8AgMn+FaVFFl2D2NL+Vfcv8jN/4R7RP+gPp/8A4DJ/hR/wj2if9AfT /wDwGT/CtKiiy7B7Gl/KvuX+Rm/8I9on/QH0/wD8Bk/wo/4R7RP+gPp//gMn+FaVFFl2D2NL+Vfc v8jN/wCEe0T/AKA+n/8AgMn+FH/CPaJ/0B9P/wDAZP8ACtKiiy7B7Gl/KvuX+Rm/8I9on/QH0/8A 8Bk/wo/4R7RP+gPp/wD4DJ/hWlRRZdg9jS/lX3L/ACM3/hHtE/6A+n/+Ayf4Uf8ACPaJ/wBAfT// AAGT/CtKiiy7B7Gl/KvuX+Rm/wDCPaJ/0B9P/wDAZP8ACj/hHtE/6A+n/wDgMn+FaVFFl2D2NL+V fcv8jN/4R7RP+gPp/wD4DJ/hR/wj2if9AfT/APwGT/CtKiiy7B7Gl/KvuX+Rm/8ACPaJ/wBAfT// AAGT/Cj/AIR7RP8AoD6f/wCAyf4VpUUWXYPY0v5V9y/yM3/hHtE/6A+n/wDgMn+FH/CPaJ/0B9P/ APAZP8K0qKLLsHsaX8q+5f5Gb/wj2if9AfT/APwGT/Cj/hHtE/6A+n/+Ayf4VpUUWXYPY0v5V9y/ yKVvo2l2k6z22m2cMq52yRwKrDIxwQPSrtFFOxUYxirRVgooooKCiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigD//Z --=_3d3e3beb941624630cf7ed0e82e959f3-- From JBacik@fusionio.com Thu May 16 15:30:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9B6527F37 for ; Thu, 16 May 2013 15:30:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 290C8AC003 for ; Thu, 16 May 2013 13:30:43 -0700 (PDT) X-ASG-Debug-ID: 1368736238-04cb6c53a1329470001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id WunhPYSCXcvYhDgm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 13:30:38 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id D1FE39A03DC for ; Thu, 16 May 2013 14:30:37 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1368736237; bh=WaJf6+64qS+RRH+wcHcTpvHRAKY8xmgu9b0fyXCx+lc=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=NmuStNIcEJoYMAqQLQ7ZD15rSMH3+fLp1XvIYKcq6hxYAdZ68wIg7efIovKmINUlM 8rr4GlSdOWoCb3HuwDr0mCrc+Ssd7V0OL2LpZFLnCMIn3Yh4YGElWyAOSFF0sCf9at 71d9I7vClNQydAElylSq/aUK2lM+t+1AhPFGVixc= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id VAK9MM6E79BYki2V (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Thu, 16 May 2013 14:30:37 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Thu, 16 May 2013 14:30:36 -0600 Date: Thu, 16 May 2013 16:30:35 -0400 From: Josef Bacik To: Rich Johnston CC: Josef Bacik , "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 Message-ID: <20130516203035.GE1765@localhost.localdomain> X-ASG-Orig-Subj: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 References: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> <5194E764.6030207@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <5194E764.6030207@sgi.com> User-Agent: Mutt/1.5.21 (2011-07-01) X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1368736238 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131154 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Thu, May 16, 2013 at 08:04:20AM -0600, Rich Johnston wrote: > On 05/15/2013 10:20 AM, Josef Bacik wrote: > > Dave pointed out that xfs was having issues with 311 because of caching issues. > > He suggested that I fsck the dm-flakey device to make sure we don't have this > > problem. Make _check_scratch_fs take an optional argument to use as the device > > to fsck. Thanks, > > > > Signed-off-by: Josef Bacik > > --- > Hi Josef, > > Looks like it fails test 19 , are we supposed to see failures for ext4 > and xfs? > Yeah that's what I was seeing, if you run the fsync tester without the reboot option and look at the file itself it should match the md5sum thats in the good output. Thanks, Josef From david@fromorbit.com Thu May 16 17:41:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 06DEA7F37 for ; Thu, 16 May 2013 17:41:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7CC12AC003 for ; Thu, 16 May 2013 15:41:20 -0700 (PDT) X-ASG-Debug-ID: 1368744077-04cbb05fe532ce20001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id K8vNSwsfOKYXcXuV for ; Thu, 16 May 2013 15:41:18 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnMQAEpflVF5LDbs/2dsb2JhbABbgwiDCrlKhS0EAX4XdIIfAQEFJxMcIxAIAw4HAwklDwUlAyETiAu8TBaNbIEdB4J0YQOXN5FBgyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 08:11:17 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ud6rK-00075l-Uv; Fri, 17 May 2013 08:41:14 +1000 Date: Fri, 17 May 2013 08:41:14 +1000 From: Dave Chinner To: Rich Johnston Cc: xfs@oss.sgi.com Subject: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 Message-ID: <20130516224114.GF24635@dastard> X-ASG-Orig-Subj: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-4-git-send-email-david@fromorbit.com> <5194D12E.4000903@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5194D12E.4000903@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368744078 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131162 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words On Thu, May 16, 2013 at 07:29:34AM -0500, Rich Johnston wrote: > On 05/08/2013 08:21 PM, Dave Chinner wrote: > >From: Dave Chinner > > > >Serenity lost. > >Insanity looms darkly. > >/etc/mtab > > > >Random behaviour. > >xfs/189 fails > >After a week passing. > > > >-SCRATCH_DEV on SCRATCH_MNT type xfs (ro,filestreams) > >+SCRATCH_DEV on SCRATCH_MNT type xfs (ro,relatime,attr2,filestreams,inode64,noquota) > > > >Confusion prevails. > >/proc/mounts can never give success. > >Anything but golden. > > > >ls -l > >/etc/mtab shows: > >lrwxrwxrwx 1 root root 12 May 8 16:05 /etc/mtab -> /proc/mounts > > > >symlink modified. > >Stealth. Deception. WTF? > >Ninjas go unseen. > > > >"git grep mtab". Yay! > >generic/235: sad > >SElinux hack. > > > >Remount context grot. > >Mount uses all options from > >/etc/mtab > > > >Kernel rejects mount. > >sed hacks /etc/mtab > >Symlink becomes file. > > > >Test frobulation. > >xfs/189 passes > >Randomness tamed. > > > >Double face-palm. Tears. > >Crack-inspired insanity. > >mount(8) needs fixing. > > > >Schizophrenia. > >/etc/mtab. Same thing. > >Test psychiatry. > > > >Hack, slash, glue, polish. > >xfs/189 fixed. > >Made shiny again. > > > >Signed-off-by: Dave Chinner > >--- > > Thanks for the cleanup patches. Only comment is although I enjoy > the humorous patch description, can we make it shorter? No, I'm not going to rewrite it - there's nothing wrong with having a long commit message to describe the change. FWIW, the notes I wrote as I tracked down this problem are about twice as long as this summary, so any straight up and down description of the problem is not going to make the commit message smaller. And a boring commit message will simply not convey the insanity of the situation.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 17:57:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 00D747F37 for ; Thu, 16 May 2013 17:57:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 71248AC003 for ; Thu, 16 May 2013 15:57:05 -0700 (PDT) X-ASG-Debug-ID: 1368745023-04cbb05fe432d880001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id V4FlVZVxMHwXIqhE for ; Thu, 16 May 2013 15:57:03 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnQQAK9ilVF5LDbs/2dsb2JhbABbDoJ6gwq5SoUtBAF7F3SCHwEBBAE6HA8UBQsIAw4KCSUPBSUDIROIBgW8UBaNUQELD4EdB4NVA5c3kUGCUVEqgSwBHw Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 08:27:02 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ud76W-00077J-In; Fri, 17 May 2013 08:56:56 +1000 Date: Fri, 17 May 2013 08:56:56 +1000 From: Dave Chinner To: David Oostdyk Cc: "stan@hardwarefreak.com" , "linux-kernel@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: high-speed disk I/O is CPU-bound? Message-ID: <20130516225656.GG24635@dastard> X-ASG-Orig-Subj: Re: high-speed disk I/O is CPU-bound? References: <518CFE7C.9080708@ll.mit.edu> <20130516005913.GE24635@dastard> <5194C4BB.9080406@hardwarefreak.com> <5194FCAC.1010300@ll.mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5194FCAC.1010300@ll.mit.edu> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368745023 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131164 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 16, 2013 at 11:35:08AM -0400, David Oostdyk wrote: > On 05/16/13 07:36, Stan Hoeppner wrote: > >On 5/15/2013 7:59 PM, Dave Chinner wrote: > >>[cc xfs list, seeing as that's where all the people who use XFS in > >>these sorts of configurations hang out. ] > >> > >>On Fri, May 10, 2013 at 10:04:44AM -0400, David Oostdyk wrote: > >>>As a basic benchmark, I have an application > >>>that simply writes the same buffer (say, 128MB) to disk repeatedly. > >>>Alternatively you could use the "dd" utility. (For these > >>>benchmarks, I set /proc/sys/vm/dirty_bytes to 512M or lower, since > >>>these systems have a lot of RAM.) > >>> > >>>The basic observations are: > >>> > >>>1. "single-threaded" writes, either a file on the mounted > >>>filesystem or with a "dd" to the raw RAID device, seem to be limited > >>>to 1200-1400MB/sec. These numbers vary slightly based on whether > >>>TurboBoost is affecting the writing process or not. "top" will show > >>>this process running at 100% CPU. > >>Expected. You are using buffered IO. Write speed is limited by the > >>rate at which your user process can memcpy data into the page cache. > >> > >>>2. With two benchmarks running on the same device, I see aggregate > >>>write speeds of up to ~2.4GB/sec, which is closer to what I'd expect > >>>the drives of being able to deliver. This can either be with two > >>>applications writing to separate files on the same mounted file > >>>system, or two separate "dd" applications writing to distinct > >>>locations on the raw device. > >2.4GB/s is the interface limit of quad lane 6G SAS. Coincidence? If > >you've daisy chained the SAS expander backplanes within a server chassis > >(9266-8i/72405), or between external enclosures (9285-8e/71685), and > >have a single 4 lane cable (SFF-8087/8088/8643/8644) connected to your > >RAID card, this would fully explain the 2.4GB/s wall, regardless of how > >many parallel processes are writing, or any other software factor. > > > >But surely you already know this, and you're using more than one 4 lane > >cable. Just covering all the bases here, due to seeing 2.4 GB/s as the > >stated wall. This number is just too coincidental to ignore. > > We definitely have two 4-lane cables being used, but this is an > interesting coincidence. I'd be surprised if anyone could really > achieve the theoretical throughput on one cable, though. We have > one JBOD that only takes a single 4-lane cable, and we seem to cap > out at closer to 1450MB/sec on that unit. (This is just a single > point of reference, and I don't have many tests where only one > 4-lane cable was in use.) You can get pretty close to the theoretical limit on the back end SAS cables - just like you can with FC. What I'd suggest you do is look at the RAID card configuration - often they default to active/passive failover configurations when there are multiple channels to the same storage. Then hey only use one of the cables for all traffic. Some RAID cards offer ative/active or "load balanced" options where all back end paths are used in redundant configurations rather than just one.... > You guys hit the nail on the head! With O_DIRECT I can use a single > writer thread and easily see the same throughput that I _ever_ saw > in the multiple-writer case (~2.4GB/sec), and "top" shows the writer > at 10% CPU usage. I've modified my application to use O_DIRECT and > it makes a world of difference. Be aware that O_DIRECT is not a magic bullet. It can make your IO go a lot slower on some worklaods and storage configs.... > [It's interesting that you see performance benefits for O_DIRECT > even with a single SATA drive. The reason it took me so long to > test O_DIRECT in this case, is that I never saw any significant > benefit from using it in the past. But that is when I didn't have > such fast storage, so I probably wasn't hitting the bottleneck with > buffered I/O?] Right - for applications not designed to use direct IO from the ground up, this is typically the case - buffered IO is faster right up to the point where you run out of CPU.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 18:03:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 506C77F37 for ; Thu, 16 May 2013 18:03:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 31414304043 for ; Thu, 16 May 2013 16:03:18 -0700 (PDT) X-ASG-Debug-ID: 1368745395-04bdf04226335ec0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id RrRFxKrapMF2j0yF for ; Thu, 16 May 2013 16:03:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnYQABxllVF5LDbs/2dsb2JhbABbgwg3glO5SoUtBAF6F3SCHwEBBTocIxAIAxgJJQ8FJQMhExmHcg28OhaNbIEdB4NVA5c3kUGDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 08:33:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ud7Cc-000799-Ua; Fri, 17 May 2013 09:03:14 +1000 Date: Fri, 17 May 2013 09:03:14 +1000 From: Dave Chinner To: Dan Carpenter Cc: Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: bug widening binary "not" operation Message-ID: <20130516230314.GH24635@dastard> X-ASG-Orig-Subj: Re: [patch] xfs: bug widening binary "not" operation References: <20130516075330.GB7494@elgon.mountain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130516075330.GB7494@elgon.mountain> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368745396 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131164 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 16, 2013 at 10:53:30AM +0300, Dan Carpenter wrote: > The problem here is: > > ioffset = offset & ~(rounding - 1); > > "offset" and "ioffset" are type xfs_off_t (__s64) and "rounding" is > unsigned int. The "offset & ~(rounding - 1)" clears the high 32 bits > and which is unintentional. > > This is a static checker fix so I'm not sure how much difference this > makes in real life. It is a real problem, but one that is masked by the way we do range flushing right now. As it is, the static checker missed the: rounding = max_t(uint, ....); The line before the above usage. I posted a patch to fix this this 2 weeks ago here: http://oss.sgi.com/pipermail/xfs/2013-May/025986.html But thanks for the independent confirmation of the problem, Dan. ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From darcy@newwavepoolsspas.com Thu May 16 18:16:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.7 required=5.0 tests=HTML_FONT_LOW_CONTRAST, HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6056F7F37 for ; Thu, 16 May 2013 18:16:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 30631304059 for ; Thu, 16 May 2013 16:16:57 -0700 (PDT) X-ASG-Debug-ID: 1368746214-04cb6c53a2330f60001-NocioJ Received: from omg.omg-hosting.com (142-4-13-114.unifiedlayer.com [142.4.13.114]) by cuda.sgi.com with ESMTP id D0pNcfenpkvAA4b8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 16:16:55 -0700 (PDT) X-Barracuda-Envelope-From: darcy@newwavepoolsspas.com X-Barracuda-Apparent-Source-IP: 142.4.13.114 Received: from [95.215.36.144] (port=49801 helo=jzgu) by omg.omg-hosting.com with esmtpa (Exim 4.80) (envelope-from ) id 1Ud7Pg-0007d0-2D; Thu, 16 May 2013 17:16:46 -0600 Message-ID: <2A4BD5877C794D8782965CA2F770268F@sougcvq> From: =?windows-1251?B?xODw/P8gyvD76+7i4A==?= To: , , , , , , , , , , Subject: =?windows-1251?B?yO3y5fDt5fIt8OXq6+Ds4CDk6/8gwuD45ePu?= =?windows-1251?B?IPPx7+X47e7j7iDh6Oft5fHgIQ==?= Date: Fri, 17 May 2013 03:16:36 +0400 X-ASG-Orig-Subj: =?windows-1251?B?yO3y5fDt5fIt8OXq6+Ds4CDk6/8gwuD45ePu?= =?windows-1251?B?IPPx7+X47e7j7iDh6Oft5fHgIQ==?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0996_01CE52AC.F0E7D1E0" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6001.18416 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6001.18645 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - omg.omg-hosting.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - newwavepoolsspas.com X-Get-Message-Sender-Via: omg.omg-hosting.com: authenticated_id: darcy@newwavepoolsspas.com X-Source: X-Source-Args: X-Source-Dir: X-Barracuda-Connect: 142-4-13-114.unifiedlayer.com[142.4.13.114] X-Barracuda-Start-Time: 1368746215 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.15 X-Barracuda-Spam-Status: No, SCORE=1.15 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_TG035a, BSF_SC5_MJ1963, HTML_FONT_LOW_CONTRAST, HTML_MESSAGE, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131164 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.54 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar to background 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BSF_SC0_TG035a Message contains invalid style definition 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a multi-part message in MIME format. ------=_NextPart_000_0996_01CE52AC.F0E7D1E0 Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: quoted-printable =D0=E0=F1=F1=FB=EB=EA=E8 =E4=EB=FF =E1=E8=E7=ED=E5=F1=E0-=20 =ED=E5=E4=EE=F0=EE=E3=EE=E9 =E8 =ED=E0=E4=E5=E6=ED=FB=E9 =E2=E8=E4 =F0=E5= =EA=EB=E0=EC=FB =C2=E0=F8=E8=F5 =F2=EE=E2=E0=F0=EE=E2 =E8 =F3=F1=EB=F3=E3= . =CA=F0=E0=F2=EA=E8=E9 =EF=F0=E0=E9=F1-=EB=E8=F1=F2 =ED=E0 =F3=F1=EB=F3=E3= =E8: =C1=E0=E7=E0 =EA=EE=F0=EF=EE=F0=E0=F2=E8=E2 - =CC=EE=F1=EA=E2=E0 (2.5 =EC= =EB=ED. =E0=E4=F0=E5=F1=EE=E2) - 4 000 =F0=F3=E1. =C1=E0=E7=E0 =F4=E8=E7. =EB=E8=F6=E0 - =CC=EE=F1=EA=E2=E0 (10 =EC=EB=ED. = =E0=E4=F0=E5=F1=EE=E2) - 12 000 =F0=F3=E1. =CE=F2 500=F0=F3=E1/=EC=EB=ED. =EF=F0=E8 =E1=EE=EB=FC=F8=E8=F5 =E7=E0=EA=E0= =E7=E0=F5. =C0=EA=F6=E8=FF- =EF=F0=E8 =E7=E0=EA=E0=E7=E5 2=F5 =E1=E0=E7 =EE=E4=ED=EE= =E2=F0=E5=EC=E5=ED=ED=EE, 3=FE =F0=E0=F1=F1=FB=EB=E0=E5=EC =E1=EE=ED=F3=F1= =EE=EC! =CA=EE=ED=F1=F3=EB=FC=F2=E0=F6=E8=E8 =EF=EE =F0=E0=F1=F1=FB=EB=EA=E0=EC =E8= =EF=F0=E8=E5=EC =E7=E0=EA=E0=E7=EE=E2: 8(926) 1~ 888~ 017 vzgol ------=_NextPart_000_0996_01CE52AC.F0E7D1E0 Content-Type: text/html; charset="windows-1251" Content-Transfer-Encoding: quoted-printable
 =D0=E0= =F1=F1=FB=EB=EA=E8 =E4=EB=FF=20 =E1=E8=E7=ED=E5=F1=E0
=ED=E5=E4=EE=F0=EE=E3=EE=E9=  =E8 =ED=E0=E4=E5=E6=ED=FB=E9 =E2=E8=E4 =F0=E5=EA=EB=E0=EC=FB=20 =C2=E0=F8=E8=F5 =F2=EE=E2=E0=F0=EE=E2 = =E8 =F3=F1=EB=F3=E3.
=CA=F0=E0=F2=EA=E8=E9 =EF=F0= =E0=E9=F1-=EB=E8=F1=F2 =ED=E0=20 =F3=F1=EB=F3=E3=E8:
=C1=E0=E7=E0 =EA=EE=F0=EF=EE= =F0=E0=F2=E8=E2 - =CC=EE=F1=EA=E2=E0 (2.5 =EC=EB=ED.=20 =E0=E4=F0=E5=F1=EE=E2) - 4 000 =F0=F3=E1.
=C1=E0=E7=E0 =F4=E8=E7. =EB=E8= =F6=E0 - =CC=EE=F1=EA=E2=E0 (10 =EC=EB=ED. =E0=E4=F0=E5=F1=EE=E2) - 12 00= 0=20 =F0=F3=E1.
=CE=F2 500=F0=F3=E1/=EC=EB=ED= . =EF=F0=E8 =E1=EE=EB=FC=F8=E8=F5=20 =E7=E0=EA=E0=E7=E0=F5.
 =C0=EA=F6=E8=FF- =EF=F0= =E8 =E7=E0=EA=E0=E7=E5 2=F5 =E1=E0=E7=20 =EE=E4=ED=EE=E2=F0=E5=EC=E5=ED=ED=EE, 3=FE =F0=E0=F1=F1=FB=EB=E0=E5=EC =E1= =EE=ED=F3=F1=EE=EC!
 
=CA=EE=ED=F1=F3=EB=FC=F2=E0= =F6=E8=E8 =EF=EE =F0=E0=F1=F1=FB=EB=EA=E0=EC =E8 =EF=F0=E8=E5=EC=20 =E7=E0=EA=E0=E7=EE=E2: 8(926) 1~ 888~ 017
 
vzgol
------=_NextPart_000_0996_01CE52AC.F0E7D1E0-- From david@fromorbit.com Thu May 16 18:32:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 12A187F37 for ; Thu, 16 May 2013 18:32:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A50C5AC003 for ; Thu, 16 May 2013 16:31:57 -0700 (PDT) X-ASG-Debug-ID: 1368747115-04bdf042233373c0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 34IahHtN6l3fsCLs for ; Thu, 16 May 2013 16:31:56 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnQQAPNqlVF5LDbs/2dsb2JhbABbgwiDCrlKhS0EAXoXdIIfAQEFOhwjEAgDDgQGCSUPBSUDDRQTFId3vEwWjVgUgR0Hg1UDlzeRQYMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 09:01:55 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ud7eL-0007Bf-V1; Fri, 17 May 2013 09:31:53 +1000 Date: Fri, 17 May 2013 09:31:53 +1000 From: Dave Chinner To: Dmitry Monakhov Cc: xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] xfstests: test data integrity under disk failure Message-ID: <20130516233153.GI24635@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: test data integrity under disk failure References: <1368706052-24391-1-git-send-email-dmonakhov@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368706052-24391-1-git-send-email-dmonakhov@openvz.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368747115 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131166 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 16, 2013 at 04:07:32PM +0400, Dmitry Monakhov wrote: > Parallels team have old good tool called hwflush-check which is server/client > application for testing data integrity under system/disk failure conditions. > Usually we run hwflush-check on two different hosts and use PMU to trigger real > power failure of the client as a whole unit. This tests may be used for > SSD checking (some of them are known to have probelms with hwflush). > I hope it will be good to share it with community. > > This tests simulate just one disk failure while client system should > survive this failure. This test extend idea of shared/305. > 1) Run hwflush-check server and client on same host as usual > 2) Simulare disk failure via blkdev failt injection API aka 'make-it-fail' > 3) Umount failed device > 4) Makes disk operatable again > 5) Mount filesystem > 3) Check data integrity So, for local disk failure, why do we need a client/server network architecture? That just complicates the code, and AFAICT all the client does is send report report packets to server which contain an id number that is kept in memory. If on restart of the client after failure the ID in the report packet doesn't match what the server wants, then it fails the test. So, why is the server needed here? Just dump the IDs the client writes to the file on a device not being tested, and either diff them against a golden image or run a check to see all the IDs are monotonically increasing. That removes all the networking code from the test, the need for a client/server architecture, etc, and makes the test far easier to review. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 19:16:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8D8727F37 for ; Thu, 16 May 2013 19:16:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5F1A48F8039 for ; Thu, 16 May 2013 17:16:19 -0700 (PDT) X-ASG-Debug-ID: 1368749777-04bdf042233392d0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id OnF8JPnTcEM0A1E5 for ; Thu, 16 May 2013 17:16:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnMQALV1lVF5LDbs/2dsb2JhbABbgwiDCrlKhS0EAXoXdIIfAQEEATocIwULCAMYCSUPBSUDIROIBgW8SRaNbIEdB4NVA5c3ihyHJYMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 09:46:16 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ud8L6-0007G9-OG; Fri, 17 May 2013 10:16:04 +1000 Date: Fri, 17 May 2013 10:16:04 +1000 From: Dave Chinner To: Andras Korn Cc: xfs@oss.sgi.com Subject: Re: wishlist: xfs_repair should detect files with too small sizes Message-ID: <20130517001604.GJ24635@dastard> X-ASG-Orig-Subj: Re: wishlist: xfs_repair should detect files with too small sizes References: <20130514215550.GK17260@hellgate> <20130515004736.GM29466@dastard> <20130515080355.GL17260@hellgate> <20130515214105.GZ24635@dastard> <20130516035651.GH17261@hellgate> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130516035651.GH17261@hellgate> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368749777 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131168 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 16, 2013 at 05:56:51AM +0200, Andras Korn wrote: > On Thu, May 16, 2013 at 07:41:05AM +1000, Dave Chinner wrote: > > > > OK, thinking about it I realise there doesn't appear to be a good way of > > > preventing the problem, but I'm still not sure some heuristic couldn't be > > > invented to detect and partially remedy it after the fact. > > > > Trying to remedy it in xfs_repair does more harm than good. What > > happens now allows recovery of data if the inode size was wrong. If > > we remove the blocks beyond EOF, we lose that ability and hence make > > unrecoverable data loss more likely in common failure scenarios. > > That's clear (xfs_repair not freeing up the space is what allowed me to > recover the data). I meant "remedy" as in _either_ increase the inode size > OR free up the extra space. Perhaps xfs_db could be extended to do this? You can already change the inode size with xfs_db by writing the field directly. > Of course, increasing the size as stored in the inode can add garbage (at > the very least, binary zeroes) to the end of files, but if the data would > otherwise have been lost, this is probably still preferable. No, it's not preferable, because if data wasn't written after the extents are allocated, extending the file size exposes stale data that is already on disk that the owner of the file should not have access to. You are free to do this yourself, but we are not going to add potential stale data exposure holes into repair/db if this situation arises. > I can even > imagine an xfs_db command that increases file size up to the last non-zero > data byte in the allocated space. Stale data regions rarely contain zero. Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Thu May 16 20:12:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 32C677F37 for ; Thu, 16 May 2013 20:12:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 105E5304053 for ; Thu, 16 May 2013 18:12:01 -0700 (PDT) X-ASG-Debug-ID: 1368753118-04cbb05fe33337d0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id fxPBzQmwutVFeFSb for ; Thu, 16 May 2013 18:11:59 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtwLAJeClVF5LDbs/2dsb2JhbABTCIMIwgIEexd0gh8BAQUnLzMIGDEhGAMbGYd6Aw6zaw2IXoxIgSEZhHkDlVKMAYIChSODIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 10:40:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ud9Bn-0007LL-9c for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ud9Bn-0002bu-6R for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 4/5] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Date: Fri, 17 May 2013 11:10:28 +1000 X-ASG-Orig-Subj: [PATCH 4/5] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Message-Id: <1368753029-9977-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> References: <1368753029-9977-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368753118 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email From: Dave Chinner Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner --- fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..dfa5c05 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) return 0; - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); - if (error) { - xfs_trans_cancel(tp, 0); - return (error); - } - /* * We don't want to race with a quotaoff so take the quotaoff lock. - * (We don't hold an inode lock, so there's nothing else to stop - * a quotaoff from happening). (XXXThis doesn't currently happen - * because we take the vfslock before calling xfs_qm_sysent). + * We don't hold an inode lock, so there's nothing else to stop + * a quotaoff from happening. */ mutex_lock(&q->qi_quotaofflock); /* - * Get the dquot (locked), and join it to the transaction. - * Allocate the dquot if this doesn't exist. + * Get the dquot (locked) before we start, as we need to do a + * transaction to allocate it if it doesn't exist. Once we have the + * dquot, unlock it so we can start the next transaction safely. We hold + * a reference to the dquot, so it's safe to do this unlock/lock without + * it being reclaimed in the mean time. */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { - xfs_trans_cancel(tp, XFS_TRANS_ABORT); + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); + if (error) { ASSERT(error != ENOENT); goto out_unlock; } + xfs_dqunlock(dqp); + + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), + 0, 0, XFS_DEFAULT_LOG_COUNT); + if (error) { + xfs_trans_cancel(tp, 0); + goto out_unlock; + } + + xfs_dqlock(dqp); xfs_trans_dqjoin(tp, dqp); ddq = &dqp->q_core; -- 1.7.10.4 From dave@fromorbit.com Thu May 16 20:12:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9CB827F37 for ; Thu, 16 May 2013 20:12:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8A8318F8052 for ; Thu, 16 May 2013 18:12:01 -0700 (PDT) X-ASG-Debug-ID: 1368753116-04cb6c53a1335dc0003-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id dYPRsIqGbCLYN2gp for ; Thu, 16 May 2013 18:12:00 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: At4LAJeClVF5LDbs/2dsb2JhbABbgwjCAgQBehd0gh8BAQUnLzMIGDE5AxsZiAu8Vo4CgRIogz8DoVOHJYMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 10:40:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ud9Bn-0007LI-7T for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ud9Bn-0002bk-4H for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/5] xfs: fix rounding in xfs_free_file_space Date: Fri, 17 May 2013 11:10:26 +1000 X-ASG-Orig-Subj: [PATCH 2/5] xfs: fix rounding in xfs_free_file_space Message-Id: <1368753029-9977-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> References: <1368753029-9977-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368753119 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The offset passed into xfs_free_file_space() needs to be rounded down to a certain size, but the rounding mask is built by a 32 bit variable. Hence the mask will always mask off the upper 32 bits of the offset and lead to incorrect writeback and invalidation ranges. This is not actually exposed as a bug because we writeback and invalidate from the rounded offset to the end of the file, and hence the offset we are actually punching a hole out of will always be covered by the code. This needs fixing, however, if we ever want to use exact ranges for writeback/invalidation here... Signed-off-by: Dave Chinner --- fs/xfs/xfs_vnodeops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..0176bb2 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -1453,7 +1453,7 @@ xfs_free_file_space( xfs_mount_t *mp; int nimap; uint resblks; - uint rounding; + xfs_off_t rounding; int rt; xfs_fileoff_t startoffset_fsb; xfs_trans_t *tp; @@ -1482,7 +1482,7 @@ xfs_free_file_space( inode_dio_wait(VFS_I(ip)); } - rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); + rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); ioffset = offset & ~(rounding - 1); error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, -1); -- 1.7.10.4 From dave@fromorbit.com Thu May 16 20:12:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E36977F3F for ; Thu, 16 May 2013 20:12:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C21FD8F8052 for ; Thu, 16 May 2013 18:11:58 -0700 (PDT) X-ASG-Debug-ID: 1368753116-04cb6c53a1335dc0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id mJOjWdbsHBKyLJTZ for ; Thu, 16 May 2013 18:11:57 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtoLAJeClVF5LDbs/2dsb2JhbABbgwjCAgR7F3SCfDuBAgOIP5wHoE+OAoE6gz8DqHiDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 10:40:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ud9Bn-0007LG-5Z for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ud9Bn-0002bd-1N for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/5] xfs: fixes for 3.10-rc2 Date: Fri, 17 May 2013 11:10:24 +1000 X-ASG-Orig-Subj: [PATCH 0/5] xfs: fixes for 3.10-rc2 Message-Id: <1368753029-9977-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368753116 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Ben, The following patches are fixing regressions, data integrity problems and lockdep reports. They are all candidates for 3.10-rc2. Please consider them for 3.10-rc2. Cheers, Dave. From dave@fromorbit.com Thu May 16 20:12:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 62BE17F52 for ; Thu, 16 May 2013 20:12:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 268E9304053 for ; Thu, 16 May 2013 18:12:00 -0700 (PDT) X-ASG-Debug-ID: 1368753116-04cb6c53a1335dc0002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 6nauVG3CUDQOlYVY for ; Thu, 16 May 2013 18:11:58 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtwLAJeClVF5LDbs/2dsb2JhbABbgwjCAgR7F3SCHwEBBScvMwgYMTkDGxmIC7xWjgKBOoM/A6FThyWDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 10:40:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ud9Bn-0007LO-Ah for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ud9Bn-0002bz-7P for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 5/5] xfs: fix missing KM_NOFS tags to keep lockdep happy Date: Fri, 17 May 2013 11:10:29 +1000 X-ASG-Orig-Subj: [PATCH 5/5] xfs: fix missing KM_NOFS tags to keep lockdep happy Message-Id: <1368753029-9977-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> References: <1368753029-9977-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368753118 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner There are several places where we use KM_SLEEP allocation contexts and use the fact that there are called from transaction context to add KM_NOFS where appropriate. Unfortunately, there are several places where the code makes this assumption but can be called from outside transaction context but with filesystem locks held. These places need explicit KM_NOFS annotations to avoid lockdep complaining about reclaim contexts. Signed-off-by: Dave Chinner --- fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_da_btree.c | 6 ++++-- fs/xfs/xfs_dir2_leaf.c | 2 +- fs/xfs/xfs_log_cil.c | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 82b70bd..0d25542 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1649,7 +1649,7 @@ xfs_alloc_buftarg( { xfs_buftarg_t *btp; - btp = kmem_zalloc(sizeof(*btp), KM_SLEEP); + btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOFS); btp->bt_mount = mp; btp->bt_dev = bdev->bd_dev; diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 9b26a99..41ea7e1 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c @@ -2464,7 +2464,8 @@ xfs_buf_map_from_irec( ASSERT(nirecs >= 1); if (nirecs > 1) { - map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), KM_SLEEP); + map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), + KM_SLEEP | KM_NOFS); if (!map) return ENOMEM; *mapp = map; @@ -2520,7 +2521,8 @@ xfs_dabuf_map( * Optimize the one-block case. */ if (nfsb != 1) - irecs = kmem_zalloc(sizeof(irec) * nfsb, KM_SLEEP); + irecs = kmem_zalloc(sizeof(irec) * nfsb, + KM_SLEEP | KM_NOFS); nirecs = nfsb; error = xfs_bmapi_read(dp, (xfs_fileoff_t)bno, nfsb, irecs, diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c index 721ba2f..da71a18 100644 --- a/fs/xfs/xfs_dir2_leaf.c +++ b/fs/xfs/xfs_dir2_leaf.c @@ -1336,7 +1336,7 @@ xfs_dir2_leaf_getdents( mp->m_sb.sb_blocksize); map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + (length * sizeof(struct xfs_bmbt_irec)), - KM_SLEEP); + KM_SLEEP | KM_NOFS); map_info->map_size = length; /* diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index e3d0b85..d0833b5 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -139,7 +139,7 @@ xlog_cil_prepare_log_vecs( new_lv = kmem_zalloc(sizeof(*new_lv) + niovecs * sizeof(struct xfs_log_iovec), - KM_SLEEP); + KM_SLEEP|KM_NOFS); /* The allocated iovec region lies beyond the log vector. */ new_lv->lv_iovecp = (struct xfs_log_iovec *)&new_lv[1]; -- 1.7.10.4 From dave@fromorbit.com Thu May 16 20:12:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CBA4B7F5F for ; Thu, 16 May 2013 20:12:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id A8D8B8F8065 for ; Thu, 16 May 2013 18:12:07 -0700 (PDT) X-ASG-Debug-ID: 1368753125-04bdf0422533bc10001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id HMxTwwDDFyPYBZZx for ; Thu, 16 May 2013 18:12:06 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtwLAJeClVF5LDbs/2dsb2JhbABbgwjCAgR7F3SCHwEBBScvMwgYMTkDGxmIC7xWjgKBOoM/A6h4gyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 10:40:41 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ud9Bx-0007LJ-8K for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:41 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ud9Bn-0002bq-5T for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/5] xfs: Don't reference the EFI after it is freed Date: Fri, 17 May 2013 11:10:27 +1000 X-ASG-Orig-Subj: [PATCH 3/5] xfs: Don't reference the EFI after it is freed Message-Id: <1368753029-9977-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> References: <1368753029-9977-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368753125 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner --- fs/xfs/xfs_extfree_item.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index c0f3750..452920a 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -305,11 +305,12 @@ xfs_efi_release(xfs_efi_log_item_t *efip, { ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { - __xfs_efi_release(efip); - /* recovery needs us to drop the EFI reference, too */ if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) __xfs_efi_release(efip); + + __xfs_efi_release(efip); + /* efip may now have been freed, do not reference it again. */ } } -- 1.7.10.4 From dave@fromorbit.com Thu May 16 20:12:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 37B877F5F for ; Thu, 16 May 2013 20:12:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id EE37F8F8066 for ; Thu, 16 May 2013 18:12:08 -0700 (PDT) X-ASG-Debug-ID: 1368753125-04bdf0422533bc10002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id VcI8sB9POHp7IaZX for ; Thu, 16 May 2013 18:12:07 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtwLAJeClVF5LDbs/2dsb2JhbABbgwjCAgR7F3SCHwEBBScvMwgYMTkDGxmIC7xWjgKEeQOdVosigyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 10:40:41 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ud9Bx-0007LH-5H for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:41 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ud9Bn-0002bg-2c for xfs@oss.sgi.com; Fri, 17 May 2013 11:10:31 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/5] xfs: fix sub-page blocksize data integrity writes Date: Fri, 17 May 2013 11:10:25 +1000 X-ASG-Orig-Subj: [PATCH 1/5] xfs: fix sub-page blocksize data integrity writes Message-Id: <1368753029-9977-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> References: <1368753029-9977-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368753127 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner --- fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 2b2691b..f04eceb 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -725,6 +725,25 @@ xfs_convert_page( (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, i_size_read(inode)); + /* + * If the current map does not span the entire page we are about to try + * to write, then give up. The only way we can write a page that spans + * multiple mappings in a single writeback iteration is via the + * xfs_vm_writepage() function. Data integrity writeback requires the + * entire page to be written in a single attempt, otherwise the part of + * the page we don't write here doesn't get written as part of the data + * integrity sync. + * + * For normal writeback, we also don't attempt to write partial pages + * here as it simply means that write_cache_pages() will see it under + * writeback and ignore the page until some pointin the future, at which + * time this will be the only page inteh file that needs writeback. + * Hence for more optimal IO patterns, we should always avoid partial + * page writeback due to multiple mappings on a page here. + */ + if (!xfs_imap_valid(inode, imap, end_offset)) + goto fail_unlock_page; + len = 1 << inode->i_blkbits; p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), PAGE_CACHE_SIZE); -- 1.7.10.4 From sandeen@sandeen.net Thu May 16 20:12:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3232B7F50 for ; Thu, 16 May 2013 20:12:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0BC82304059 for ; Thu, 16 May 2013 18:12:51 -0700 (PDT) X-ASG-Debug-ID: 1368753170-04cbb05fe5333860001-w1Z2WR Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id YLK4pL57d6fNquSy for ; Thu, 16 May 2013 18:12:50 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 471CF651C46D; Thu, 16 May 2013 20:12:50 -0500 (CDT) Message-ID: <51958411.70008@sandeen.net> Date: Thu, 16 May 2013 20:12:49 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: "chen.szu.fan" CC: linux-xfs@oss.sgi.com Subject: Re: see the file content by xfs_db References: X-ASG-Orig-Subj: Re: see the file content by xfs_db In-Reply-To: X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368753170 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/16/13 1:48 AM, chen.szu.fan wrote: > is it possible to see the file content by xfs_db? and how-to? you can get the file mapping & dump file blocks one at a time, anyway: [root@bp-05 ~]# mount /dev/sdb4 /mnt/test [root@bp-05 ~]# echo "mydata" > /mnt/test/testfile [root@bp-05 ~]# ls -i /mnt/test/testfile 53573991 /mnt/test/testfile [root@bp-05 ~]# umount /dev/sdb4 [root@bp-05 ~]# xfs_db /dev/sdb4 xfs_db> inode 53573991 xfs_db> p u.bmx u.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,3348403,1,0] xfs_db> fsblock 3348403 xfs_db> type text xfs_db> p 000: 6d 79 64 61 74 61 0a 00 00 00 00 00 00 00 00 00 mydata.......... 010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ -Eric From david@fromorbit.com Thu May 16 21:00:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CE6BE7F37 for ; Thu, 16 May 2013 21:00:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 69B58AC006 for ; Thu, 16 May 2013 19:00:26 -0700 (PDT) X-ASG-Debug-ID: 1368756020-04cb6c53a3338370001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Vf9crhE5X47cJGh0 for ; Thu, 16 May 2013 19:00:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnYQAFiOlVF5LDbs/2dsb2JhbABbgwg3glO5ToUtBAF7F3SCHwEBBTocIxAIAw4KCSUPBSUDIROICw28TxaNbIEdB4NVA5c3gSqQF4MiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 11:30:19 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ud9xx-0007Qd-CI; Fri, 17 May 2013 12:00:17 +1000 Date: Fri, 17 May 2013 12:00:17 +1000 From: Dave Chinner To: Jakub Bogusz Cc: xfs@oss.sgi.com, Christoph Hellwig Subject: Re: Polish translation update for xfsprogs 3.1.11 and xfsdump 3.1.3 Message-ID: <20130517020017.GL24635@dastard> X-ASG-Orig-Subj: Re: Polish translation update for xfsprogs 3.1.11 and xfsdump 3.1.3 References: <20130514142827.GD32293@stranger.qboosh.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130514142827.GD32293@stranger.qboosh.pl> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368756020 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131176 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 14, 2013 at 04:28:27PM +0200, Jakub Bogusz wrote: > Hello, > > I updated Polish translations for xfsprogs 3.1.11 and xfsdump 3.1.3. > They are available at: > http://qboosh.pl/pl.po/xfsprogs-3.1.11.pl.po > http://qboosh.pl/pl.po/xfsdump-3.1.3.pl.po Thanks, Jakub. Out of interest, is there any way we can let you know about an upcoming release so we can get translations done before the release and hence ship them in the released package? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 21:55:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8A7437F37 for ; Thu, 16 May 2013 21:55:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 26142AC003 for ; Thu, 16 May 2013 19:55:20 -0700 (PDT) X-ASG-Debug-ID: 1368759317-04bdf04225340db0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id mnid0x4S2Kw4JM3B for ; Thu, 16 May 2013 19:55:18 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtIOAF+blVF5LDbs/2dsb2JhbABbgwi8W4UtBAF9F3SCHwEBBScTHCMQCAMOCgklDwUlAyETiAu8WhaNWROBHQeDVQOXN4ochyWBWIFKKoEt Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 12:25:17 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdAp9-0007Vg-8R; Fri, 17 May 2013 12:55:15 +1000 Date: Fri, 17 May 2013 12:55:15 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Message-ID: <20130517025515.GM24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368759317 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131180 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 10, 2013 at 04:21:25PM -0500, Chandra Seetharaman wrote: > Remove all incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, > start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts for GQUOTA and > PQUOTA respectively. > > On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. > > Read and write of the superblock does the conversion from *OQUOTA* > to *[PG]QUOTA*. > > Signed-off-by: Chandra Seetharaman > Reviewed-by: Dave Chinner > --- > fs/xfs/xfs_mount.c | 41 +++++++++++++++++++++++++++++++++++++++++ > fs/xfs/xfs_qm.c | 9 ++++++--- > fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++------------------ > fs/xfs/xfs_quota.h | 42 ++++++++++++++++++++++++++++-------------- > fs/xfs/xfs_quotaops.c | 6 ++++-- > fs/xfs/xfs_super.c | 16 ++++++++-------- > fs/xfs/xfs_trans_dquot.c | 4 ++-- > 7 files changed, 110 insertions(+), 47 deletions(-) > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index f6bfbd7..1b79906 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -564,6 +564,8 @@ xfs_sb_from_disk( > struct xfs_sb *to, > xfs_dsb_t *from) > { > + bool force_quota_check = false; > + > to->sb_magicnum = be32_to_cpu(from->sb_magicnum); > to->sb_blocksize = be32_to_cpu(from->sb_blocksize); > to->sb_dblocks = be64_to_cpu(from->sb_dblocks); > @@ -599,6 +601,21 @@ xfs_sb_from_disk( > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > to->sb_qflags = be16_to_cpu(from->sb_qflags); > + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > + (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > + "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > + force_quota_check = true; > + } We can't do these quota check manipulations to the superblock quota flags during disk->incore translation anymore - there is more than one place that converts the superblock from on-disk to incore format (e.g. the verification callbacks) and so emitting this message when we are *writing* the superblock is not good. Also, if the XFS_PQUOTA_CHKD/XFS_PQUOTA_ENFD flags are set and the superblock is not a V5 superblock, then I think we should refuse to mount the filesystem because that is an invalid state - those flags should only be set now on a V5 superblock, and never at any other time. Hence this specific check should probably be moved to xfs_mount_validate_sb() and cause an EFSCORRUPTED return if it fails. That will catch something setting the flags incorrectly (i.e. at superblock write) as well as prevent mounting in this situation. I know, this is different to what I've said in the past, but the on-disk format checking is now a lot stricter and so I think that if the filesystem is in some kind of wierd state we should just throw an error and let the administrator work out how this problem happened and how to resolve it. > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > + This translation of the quota flags needs to be external to this function, and then only called in the mount path where we are initially setting up the in-core superblock (i.e. in xfs_readsb()) because that is the only place where the incore values are permanently stored. > @@ -636,11 +656,30 @@ xfs_sb_to_disk( > xfs_sb_field_t f; > int first; > int size; > + __uint16_t qflags = from->sb_qflags; > > ASSERT(fields); > if (!fields) > return; > > + if (fields & XFS_SB_QFLAGS) { > + /* > + * The in-core version of sb_qflags do not have > + * XFS_OQUOTA_* flags, whereas the on-disk version > + * does. So, convert incore XFS_{PG}QUOTA_* flags > + * to on-disk XFS_OQUOTA_* flags. > + */ > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > + > + if (from->sb_qflags & > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > + qflags |= XFS_OQUOTA_ENFD; > + if (from->sb_qflags & > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > + qflags |= XFS_OQUOTA_CHKD; > + } Given that we have a new superblock version, we can write the new XFS_[PG]QUOTA_CHKD/XFS_[PG]QUOTA_ENFD flags directly into the sb_qflags knowing that we can't get an older kernel to interpret these new fields because they'll fail the superblck version test. So that would mean we only need to do this translation for filesystems for non-v5 superblock filesystems. Ah, I see that in a later patch you introduce xfs_sb_version_has_pquota() and modify this code path to do something similar, and it becomes rather complex and nasty. OK, I know this is a bit of work, but can you introduce xfs_sb_version_has_pquota() in this patch (as we already have the pquota inode defined in the on-disk format) as: static inline int xfs_sb_version_haspquota(xfs_sb_t *sbp) { return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5; } and make these OQUOTA flag translations dependent on this not being set right from the start? Also, given how nasty this manipulation ends up, can you push it out into a function that is called from xfs_sb_to_disk(). That way xfs_sb_to_disk() doesn't end up mostly being 70% quota field manipulation code... > /* > + * Start differentiating group quota and project quota in-core > + * using distinct flags, instead of using the combined OQUOTA flags. > + * > + * Conversion to and from the combined OQUOTA flag (if necessary) > + * is done only in xfs_sb_{to,from}_disk() > + */ > +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ > +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ > +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ > +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ These become new on-disk fields for xfs_sb_version_haspquota() filesystems, so they are not specifically in-core values. Other than these to/from disk changes, the patch looks fine. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 22:01:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7BF0C7F37 for ; Thu, 16 May 2013 22:01:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5B4028F8049 for ; Thu, 16 May 2013 20:01:34 -0700 (PDT) X-ASG-Debug-ID: 1368759692-04cb6c53a133b470001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id zLB2NIoZBm8VE534 for ; Thu, 16 May 2013 20:01:32 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtEOAGGclVF5LDbs/2dsb2JhbABbgwi8XIUtBAF9F3SCHwEBBScTHCMQCAMYCSUPBSUDIROIC7xZFo1sgR0Hg1UDlzeRQYMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 12:31:31 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdAv8-0007X8-1S; Fri, 17 May 2013 13:01:26 +1000 Date: Fri, 17 May 2013 13:01:26 +1000 From: Dave Chinner To: Jeff Liu Cc: Chandra Seetharaman , xfs@oss.sgi.com Subject: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. Message-ID: <20130517030125.GT29466@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> <51906528.3030307@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51906528.3030307@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368759692 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131180 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 13, 2013 at 11:59:36AM +0800, Jeff Liu wrote: > Hi, > > > +struct xfs_inode * > > +xfs_dq_to_quota_inode(struct xfs_dquot *dqp) > > +{ > > + if (XFS_QM_ISUDQ(dqp)) > > + return dqp->q_mount->m_quotainfo->qi_uquotaip; > > + if (XFS_QM_ISGDQ(dqp)) > > + return dqp->q_mount->m_quotainfo->qi_gquotaip; > > + ASSERT(XFS_QM_ISPDQ(dqp)); > > + return dqp->q_mount->m_quotainfo->qi_pquotaip; > > +} > Is it better to replace above conditional judgment with 'switch...case'? > i.e. > static inline struct xfs_inode * > xfs_dq_to_qip(struct xfs_dquot *dqp) > { > switch (dqp->dq_flags) { > case XFS_DQ_USER: > return dqp->q_mount->m_quotainfo->qi_uquotaip; > case XFS_DQ_GROUP: > return dqp->q_mount->m_quotainfo->qi_gqoutaip; > case XFS_DQ_PROJ: > return dqp->q_mount->m_quotainfo->qi_pquotaip; > } Doesn't work because dq_flags can have other fields set in it (e.g XFS_DQ_DIRTY). It would need to be: switch (dqp->dq_flags & XFS_DQ_ALLTYPES) { .... } Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 23:23:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5C9FC7F37 for ; Thu, 16 May 2013 23:23:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id EC297AC004 for ; Thu, 16 May 2013 21:23:09 -0700 (PDT) X-ASG-Debug-ID: 1368764586-04bdf042233454a0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 43saQhI1TCsxldGd for ; Thu, 16 May 2013 21:23:07 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtUOAKSflVF5LDbs/2dsb2JhbABbgwg3vCeFLQQBfRd0gh8BAQQBJxMcIwULCAMOCgklDwUlAyETiAYFDbxJFo1ZE4EdB4NVA5c3kUGDIiqBLQ Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 13:53:05 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdCC8-0007gY-1m; Fri, 17 May 2013 14:23:04 +1000 Date: Fri, 17 May 2013 14:23:04 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. Message-ID: <20130517042303.GN24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368764586 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131186 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 10, 2013 at 04:21:26PM -0500, Chandra Seetharaman wrote: > Add project quota changes to all the places where group quota field > is used: > * add separate project quota members into various structures > * split project quota and group quotas so that instead of overriding > the group quota members incore, the new project quota members are > used instead > * get rid of usage of the OQUOTA flag incore, in favor of separate > * group > and project quota flags. > * add a project dquot argument to various functions. > > No externally visible interfaces changed. Looks pretty good. Some relatively minor changes below. > @@ -568,6 +567,17 @@ xfs_qm_dqrepair( > return 0; > } > > +struct xfs_inode * > +xfs_dq_to_quota_inode(struct xfs_dquot *dqp) > +{ > + if (XFS_QM_ISUDQ(dqp)) > + return dqp->q_mount->m_quotainfo->qi_uquotaip; > + if (XFS_QM_ISGDQ(dqp)) > + return dqp->q_mount->m_quotainfo->qi_gquotaip; > + ASSERT(XFS_QM_ISPDQ(dqp)); > + return dqp->q_mount->m_quotainfo->qi_pquotaip; > +} Consolidate this with xfs_dquot_tree() as a static inline function, I think. Let's try and keep all these little helpers together so they are easy to find ;) > + > /* > * Maps a dquot to the buffer containing its on-disk version. > * This returns a ptr to the buffer containing the on-disk dquot > @@ -584,7 +594,7 @@ xfs_qm_dqtobp( > xfs_bmbt_irec_t map; > int nmaps = 1, error; > xfs_buf_t *bp; > - xfs_inode_t *quotip = XFS_DQ_TO_QIP(dqp); > + xfs_inode_t *quotip = xfs_dq_to_quota_inode(dqp); convert to struct xfs_inode a the same time.... > @@ -52,7 +51,8 @@ typedef struct xfs_dquot { > @@ -144,9 +146,6 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > #define XFS_QM_ISPDQ(dqp) ((dqp)->dq_flags & XFS_DQ_PROJ) > #define XFS_QM_ISGDQ(dqp) ((dqp)->dq_flags & XFS_DQ_GROUP) > #define XFS_DQ_TO_QINF(dqp) ((dqp)->q_mount->m_quotainfo) > -#define XFS_DQ_TO_QIP(dqp) (XFS_QM_ISUDQ(dqp) ? \ > - XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ > - XFS_DQ_TO_QINF(dqp)->qi_gquotaip) XFS_DQ_TO_QINF can go away, too. > --- a/fs/xfs/xfs_ioctl.c > +++ b/fs/xfs/xfs_ioctl.c > @@ -928,7 +928,7 @@ xfs_ioctl_setattr( > struct xfs_trans *tp; > unsigned int lock_flags = 0; > struct xfs_dquot *udqp = NULL; > - struct xfs_dquot *gdqp = NULL; > + struct xfs_dquot *pdqp = NULL; > struct xfs_dquot *olddquot = NULL; > int code; > > @@ -957,7 +957,7 @@ xfs_ioctl_setattr( > if (XFS_IS_QUOTA_ON(mp) && (mask & FSX_PROJID)) { > code = xfs_qm_vop_dqalloc(ip, ip->i_d.di_uid, > ip->i_d.di_gid, fa->fsx_projid, > - XFS_QMOPT_PQUOTA, &udqp, &gdqp); > + XFS_QMOPT_PQUOTA, &udqp, NULL, &pdqp); We're only passing in XFS_QMOPT_PQUOTA, so we do not need to pass in uid, gid, udqp or gdqp here.... Can you add a comment here that this may cause user/group quotas to be allocated, but we don't need it here in this function because we are only specifically changing the project quota via a chown operation. Indeed, the only reason a user quota is passed in is to make use of the dquot hint that the udq might hold that points to the other dquots on the inode.... > if (code) > return code; > } > @@ -994,8 +994,8 @@ xfs_ioctl_setattr( > XFS_IS_PQUOTA_ON(mp) && > xfs_get_projid(ip) != fa->fsx_projid) { > ASSERT(tp); > - code = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, > - capable(CAP_FOWNER) ? > + code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, > + pdqp, capable(CAP_FOWNER) ? > XFS_QMOPT_FORCE_RES : 0); > @@ -1113,7 +1113,7 @@ xfs_ioctl_setattr( > if (xfs_get_projid(ip) != fa->fsx_projid) { > if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { > olddquot = xfs_qm_vop_chown(tp, ip, > - &ip->i_gdquot, gdqp); > + &ip->i_pdquot, pdqp); xfs_qm_vop_chown() is only called on one dquot at a time, so it can only exchange one dquot at a time. and udqp is not used for hints, so it looks to me like udqp and gdqp are wholly unnecessary in this function.... > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index d82efaa..7c54ea4 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -517,7 +517,7 @@ xfs_setattr_nonsize( > ASSERT(udqp == NULL); > ASSERT(gdqp == NULL); > error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip), > - qflags, &udqp, &gdqp); > + qflags, &udqp, &gdqp, NULL); Why is there no project quota support here, even though we pass in a project ID? I know the answer, but please add a comment so that a couple of years down the track I don't need to go remind myself of why.... > /* > - * Given a udquot and gdquot, attach a ptr to the group dquot in the > + * Given a udquot and gdquot, attach a ptr to the group/project dquot in the > * udquot as a hint for future lookups. > */ > STATIC void > -xfs_qm_dqattach_grouphint( > - xfs_dquot_t *udq, > - xfs_dquot_t *gdq) > +xfs_qm_dqattach_grouphint(xfs_inode_t *ip, int type) Wrong format for the function header And it's not longer just for the group dquot, so I'd rename just to xfs_qm_dqattach_hint. i.e: STATIC void xfs_qm_dqattach_hint( struct xfs_inode *ip, int type) > { > - xfs_dquot_t *tmp; > + struct xfs_dquot **dqhint; > + struct xfs_dquot *gpdq; not a group dquot. so perhaps just call it dqp? > @@ -1395,19 +1453,27 @@ xfs_qm_init_quotainos( > if (XFS_IS_UQUOTA_ON(mp) && > mp->m_sb.sb_uquotino != NULLFSINO) { > ASSERT(mp->m_sb.sb_uquotino > 0); > - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > - 0, 0, &uip))) > + error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > + 0, 0, &uip); > + if (error) > return XFS_ERROR(error); > } > - if (XFS_IS_OQUOTA_ON(mp) && > + if (XFS_IS_GQUOTA_ON(mp) && > mp->m_sb.sb_gquotino != NULLFSINO) { > ASSERT(mp->m_sb.sb_gquotino > 0); > - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > - 0, 0, &gip))) { > - if (uip) > - IRELE(uip); > - return XFS_ERROR(error); > - } > + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > + 0, 0, &gip); > + if (error) > + goto error_rele; > + } > + /* Use sb_gquotino for now */ > + if (XFS_IS_PQUOTA_ON(mp) && > + mp->m_sb.sb_gquotino != NULLFSINO) { > + ASSERT(mp->m_sb.sb_gquotino > 0); > + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > + 0, 0, &pip); > + if (error) > + goto error_rele; There is no need for this trickery, right? All that is needed is: qino = xfs_sb_version_has_pquota(&mp->m_sb) ? mp->m_sb.sb_pquotino : mp->m_sb.sb_gquotino; And the correct on-disk inode is read.... > @@ -1804,15 +1896,21 @@ xfs_qm_vop_chown( > */ > int > xfs_qm_vop_chown_reserve( > - xfs_trans_t *tp, > - xfs_inode_t *ip, > - xfs_dquot_t *udqp, > - xfs_dquot_t *gdqp, > - uint flags) > + xfs_trans_t *tp, > + xfs_inode_t *ip, struct xfs_trans, struct xfs_inode. > + struct xfs_dquot *udqp, > + struct xfs_dquot *gdqp, > + struct xfs_dquot *pdqp, > + uint flags) > { > xfs_mount_t *mp = ip->i_mount; > uint delblks, blkflags, prjflags = 0; > - xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; > + struct xfs_dquot *unresudq = NULL; > + struct xfs_dquot *unresgdq = NULL; > + struct xfs_dquot *unrespdq = NULL; > + struct xfs_dquot *delblksudq = NULL; > + struct xfs_dquot *delblksgdq = NULL; > + struct xfs_dquot *delblkspdq = NULL; > int error; You may as well line up the other 3 declarations, and make is a struct xfs_mount.... .... and I just realised that looking through this code reviewing the xfs_ioctl_setattr() changes that I'd not read the existing code correctly. Why not? becuse unresudq and unresgdq are not very different. The classic case of the brain not really seeing the difference between single letters inside a larger word, and that's where the single letter difference in the variables are. i.e: this phenomenon: http://www.ecenglish.com/learnenglish/lessons/can-you-read I can read that mess as fast as if it were spelt correctly, hence the importance of the first/last letter of variable names... So, can you rename these variables: udq_unres gdq_unres pdq_unres udq_delblks gdq_delblks pdq_delblks so it's a little more obvious to my easily tricked brain that they are different.... > @@ -1935,13 +2039,18 @@ xfs_qm_vop_create_dqattach( > } > if (gdqp) { > ASSERT(ip->i_gdquot == NULL); > - ASSERT(XFS_IS_OQUOTA_ON(mp)); > - ASSERT((XFS_IS_GQUOTA_ON(mp) ? > - ip->i_d.di_gid : xfs_get_projid(ip)) == > - be32_to_cpu(gdqp->q_core.d_id)); > - > + ASSERT(XFS_IS_GQUOTA_ON(mp)); > + ASSERT(ip->i_d.di_gid == be32_to_cpu(gdqp->q_core.d_id)); > ip->i_gdquot = xfs_qm_dqhold(gdqp); > xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); > } > + if (pdqp) { > + ASSERT(ip->i_pdquot == NULL); > + ASSERT(XFS_IS_PQUOTA_ON(mp)); > + ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); > + > + ip->i_pdquot = xfs_qm_dqhold(pdqp); > + xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1); > + } > } Something this just triggered. All transaction reservations that reserve space for dquots need to be upped from 2 to 3 dquots. > -extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); > -extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, > - xfs_dquot_t *, xfs_dquot_t *, long, long, uint); > -extern void xfs_trans_dqjoin(xfs_trans_t *, xfs_dquot_t *); > -extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); > +extern void xfs_trans_mod_dquot(xfs_trans_t *, struct xfs_dquot *, uint, long); > +extern void xfs_trans_dqjoin(xfs_trans_t *, struct xfs_dquot *); > +extern void xfs_trans_log_dquot(xfs_trans_t *, struct xfs_dquot *); Remove the typedefs at the same time. > /* > - * We keep the usr and grp dquots separately so that locking will be easier > - * to do at commit time. All transactions that we know of at this point > + * We keep the usr, grp, and prj dquots separately so that locking will be > + * easier to do at commit time. All transactions that we know of at this point > * affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value. > */ > +enum { > + XFS_QM_TRANS_USR = 0, > + XFS_QM_TRANS_GRP, > + XFS_QM_TRANS_PROJ, > + XFS_QM_TRANS_DQTYPES > +}; > #define XFS_QM_TRANS_MAXDQS 2 > -typedef struct xfs_dquot_acct { > - xfs_dqtrx_t dqa_usrdquots[XFS_QM_TRANS_MAXDQS]; > - xfs_dqtrx_t dqa_grpdquots[XFS_QM_TRANS_MAXDQS]; > -} xfs_dquot_acct_t; > +struct xfs_dquot_acct { > + struct xfs_dqtrx dqs[XFS_QM_TRANS_DQTYPES][XFS_QM_TRANS_MAXDQS]; > +}; > > /* > * Users are allowed to have a usage exceeding their softlimit for > diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c > index 2d02eac..72a4fdd 100644 > --- a/fs/xfs/xfs_qm_bhv.c > +++ b/fs/xfs/xfs_qm_bhv.c > @@ -115,7 +115,7 @@ xfs_qm_newmount( > (pquotaondisk && !XFS_IS_PQUOTA_ON(mp)) || > (!pquotaondisk && XFS_IS_PQUOTA_ON(mp)) || > (gquotaondisk && !XFS_IS_GQUOTA_ON(mp)) || > - (!gquotaondisk && XFS_IS_OQUOTA_ON(mp))) && > + (!gquotaondisk && XFS_IS_GQUOTA_ON(mp))) && > xfs_dev_is_read_only(mp, "changing quota state")) { > xfs_warn(mp, "please mount with%s%s%s%s.", > (!quotaondisk ? "out quota" : ""), Shouldn't this hunk be in the first patch? > index 1501f4f..cd0d133 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -498,6 +498,7 @@ xfs_create( > prid_t prid; > struct xfs_dquot *udqp = NULL; > struct xfs_dquot *gdqp = NULL; > + struct xfs_dquot *pdqp = NULL; > uint resblks; > uint log_res; > uint log_count; > @@ -516,7 +517,7 @@ xfs_create( > * Make sure that we have allocated dquot(s) on disk. > */ > error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, > - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); > + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); break that into two lines. XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 16 23:46:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 407CC7F37 for ; Thu, 16 May 2013 23:46:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1E9988F8039 for ; Thu, 16 May 2013 21:46:09 -0700 (PDT) X-ASG-Debug-ID: 1368765966-04cbb05fe533e110001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id iWCFJy52MTfuz3do for ; Thu, 16 May 2013 21:46:06 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtMOAKSflVF5LDbs/2dsb2JhbABbgwi8XoUtBAF9F3SCHwEBBAEnExwjBQsIAw4KCSUPBSUDIROIBgW8VhaNUgcED4EdB4NVA5c3kUGDIiqBLQ Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 14:16:05 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdCYO-0007ib-PO; Fri, 17 May 2013 14:46:04 +1000 Date: Fri, 17 May 2013 14:46:04 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock Message-ID: <20130517044604.GO24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-4-git-send-email-sekharan@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368220889-25188-4-git-send-email-sekharan@us.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368765966 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131186 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 10, 2013 at 04:21:27PM -0500, Chandra Seetharaman wrote: > Define a macro to check if the superblock has pquotino. > > Keep backward compatibilty by alowing mount of older superblock > with no separate pquota inode. .... > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 1b79906..233f88e 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -601,21 +601,6 @@ xfs_sb_from_disk( > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > to->sb_qflags = be16_to_cpu(from->sb_qflags); > - if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > - (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > - XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > - xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > - "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > - force_quota_check = true; > - } > - if (to->sb_qflags & XFS_OQUOTA_ENFD) > - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > - XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > - if (to->sb_qflags & XFS_OQUOTA_CHKD) > - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > - XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > - to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > - > to->sb_flags = from->sb_flags; > to->sb_shared_vn = from->sb_shared_vn; > to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); > @@ -636,6 +621,44 @@ xfs_sb_from_disk( > to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > to->sb_lsn = be64_to_cpu(from->sb_lsn); > > + if (xfs_sb_version_has_pquota(to)) { > + if (to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits " > + "with version PQUOTINO. Quota check forced.\n"); > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > + force_quota_check = true; > + } > + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > + } else { > + if (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { > + xfs_notice(NULL, "Super block has XFS_[G|P]UOTA " > + "bits in version older than PQUOTINO. " > + "Quota check forced.\n"); > + > + to->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD); > + force_quota_check = true; > + } > + > + /* > + * On disk superblock qflags uses XFS_OQUOTA.* to support > + * either PQUOTA or GQUOTA. But, in memory qflags uses > + * XFS_PQUOTA.* or XFS_GQUOTA.* depending on which quota > + * is used. > + * Following block translates XFS_OQUOTA.* to either > + * GQUOTA or PQUOTA. > + */ > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > + > + } > + > if (force_quota_check) > to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); > } This all gets restructured here - as per my previous comments, this probably should all be in xfs_readsb(), not here. > @@ -657,27 +680,51 @@ xfs_sb_to_disk( > int first; > int size; > __uint16_t qflags = from->sb_qflags; > + xfs_ino_t gquotino = from->sb_gquotino; > > ASSERT(fields); > if (!fields) > return; > > - if (fields & XFS_SB_QFLAGS) { > + if (!xfs_sb_version_has_pquota(from)) { This should be moved to a separate function, I think. > + if (fields & XFS_SB_QFLAGS) { > + /* > + * The in-core version of sb_qflags do not have > + * XFS_OQUOTA_* flags, whereas the on-disk version > + * does. So, convert incore XFS_{PG}QUOTA_* flags > + * to on-disk XFS_OQUOTA_* flags. > + */ > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > + > + if (from->sb_qflags & > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > + qflags |= XFS_OQUOTA_ENFD; > + if (from->sb_qflags & > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > + qflags |= XFS_OQUOTA_CHKD; Now that we have the new flags set correct, write it directly to to->sb_qflags and clear XFS_SB_QFLAGS from the fields varaible. > + } > + > /* > - * The in-core version of sb_qflags do not have > - * XFS_OQUOTA_* flags, whereas the on-disk version > - * does. So, convert incore XFS_{PG}QUOTA_* flags > - * to on-disk XFS_OQUOTA_* flags. > + * On-disk version earlier than pquota doesn't have > + * sb_pquotino. so, we need to copy the value to gquotino. > */ > - qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > - XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > + if (fields & XFS_SB_PQUOTINO) { > + fields &= (__int64_t)~XFS_SB_PQUOTINO; > + fields |= (__int64_t)XFS_SB_GQUOTINO; > + gquotino = from->sb_pquotino; > + } Same here - write the inode number directly to the to->sb_gquotino field and clear the XFS_SB_PQUOTINO flag. > > - if (from->sb_qflags & > - (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > - qflags |= XFS_OQUOTA_ENFD; > - if (from->sb_qflags & > - (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > - qflags |= XFS_OQUOTA_CHKD; > + /* If any quota inodes are written, write all quota inodes */ > + if (fields & (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO)) > + fields |= (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO); Why write things that haven't been modified? > + > + } else { > + /* If any quota inodes are written, write all quota inodes */ > + if (fields & (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO > + | XFS_SB_PQUOTINO)) > + fields |= (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO > + | XFS_SB_PQUOTINO); Same - the flags pssed in are supposed to document everything that has been modified. If the flags passed in are wrong, then fix the bad callers..... > } > > while (fields) { > @@ -691,6 +738,8 @@ xfs_sb_to_disk( > memcpy(to_ptr + first, from_ptr + first, size); > } else if (f == XFS_SBS_QFLAGS) { > *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); > + } else if (f == XFS_SBS_GQUOTINO) { > + *(__be64 *)(to_ptr + first) = cpu_to_be64(gquotino); If we clear the XFS_SBS_GQUOTINO/XFS_SBS_QFLAGS flags like I suggested above, this grot can go away and the loop remain completely generic. > } else { > switch (size) { > case 2: > @@ -872,6 +921,18 @@ reread: > */ > xfs_sb_from_disk(&mp->m_sb, XFS_BUF_TO_SBP(bp)); > > + if (!xfs_sb_version_has_pquota(&mp->m_sb) && XFS_IS_PQUOTA_ON(mp)) { > + /* > + * On disk superblock only has sb_gquotino, and in memory > + * superblock has both sb_gquotino and sb_pquotino. But, > + * only one them is supported at any point of time. > + * So, if PQUOTA is set in disk superblock, copy over > + * sb_gquotino to sb_pquotino. > + */ > + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino; > + mp->m_sb.sb_gquotino = NULLFSINO; > + } Yup, that's the right place for doing all this on-disk->incore translation stuff at mount time ;) > - if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { > + if (ino == mp->m_sb.sb_uquotino || > + ino == mp->m_sb.sb_gquotino || > + ino == mp->m_sb.sb_pquotino) { Seeing how often this is repeated, perhaps we need a helper function called "xfs_is_quota_inode(mp, ino)"? > @@ -1505,7 +1506,7 @@ xfs_qm_init_quotainos( > } > if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { > error = xfs_qm_qino_alloc(mp, &pip, > - sbflags | XFS_SB_GQUOTINO, > + sbflags | XFS_SB_PQUOTINO, > flags | XFS_QMOPT_PQUOTA); Isn't that fixing a bug in the previous patch? > @@ -412,17 +413,20 @@ xfs_qm_scall_getqstat( > struct fs_quota_stat *out) > { > struct xfs_quotainfo *q = mp->m_quotainfo; > - struct xfs_inode *uip, *gip; > - bool tempuqip, tempgqip; > + struct xfs_inode *uip = NULL; > + struct xfs_inode *gip = NULL; > + struct xfs_inode *pip = NULL; > + bool tempuqip = false; > + bool tempgqip = false; > + bool temppqip = false; See my previous comments about naming variables. At least add an underscore into the name like temp_uqip.... > @@ -420,12 +420,6 @@ xfs_parseargs( > } > #endif > > - if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && > - (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { > - xfs_warn(mp, "cannot mount with both project and group quota"); > - return EINVAL; > - } > - > if ((dsunit && !dswidth) || (!dsunit && dswidth)) { > xfs_warn(mp, "sunit and swidth must be specified together"); > return EINVAL; > @@ -1388,6 +1382,14 @@ xfs_finish_flags( > return XFS_ERROR(EROFS); > } > > + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && > + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) && > + !xfs_sb_version_has_pquota(&mp->m_sb)) { > + xfs_warn(mp, "Super block does not support " > + "project and group quota together"); > + return XFS_ERROR(EINVAL); > + } Why move this check? just leave it where it is and add the extra check to it... > @@ -157,7 +157,8 @@ xfs_trans_mod_dquot_byino( > if (!XFS_IS_QUOTA_RUNNING(mp) || > !XFS_IS_QUOTA_ON(mp) || > ip->i_ino == mp->m_sb.sb_uquotino || > - ip->i_ino == mp->m_sb.sb_gquotino) > + ip->i_ino == mp->m_sb.sb_gquotino || > + ip->i_ino == mp->m_sb.sb_pquotino) > return; I see a helper.... > if (tp->t_dqinfo == NULL) > @@ -825,6 +826,7 @@ xfs_trans_reserve_quota_nblks( > > ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); > ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); > + ASSERT(ip->i_ino != mp->m_sb.sb_pquotino); And that becomes ASSERT(!xfs_is_quota_inode(mp, ip->i_ino)).... > diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h > index 8655280..f17e3bb 100644 > --- a/include/uapi/linux/dqblk_xfs.h > +++ b/include/uapi/linux/dqblk_xfs.h > @@ -155,6 +155,7 @@ typedef struct fs_quota_stat { > __s8 qs_pad; /* unused */ > fs_qfilestat_t qs_uquota; /* user quota storage information */ > fs_qfilestat_t qs_gquota; /* group quota storage information */ > +#define qs_pquota qs_gquota > __u32 qs_incoredqs; /* number of dquots incore */ > __s32 qs_btimelimit; /* limit for blks timer */ > __s32 qs_itimelimit; /* limit for inodes timer */ Ugly, but will do until the next patch ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri May 17 00:10:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 168067F37 for ; Fri, 17 May 2013 00:10:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CE53B8F80C4 for ; Thu, 16 May 2013 22:10:05 -0700 (PDT) X-ASG-Debug-ID: 1368767403-04bdf04226347dd0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id PVH6FIJHD5c4QhGq for ; Thu, 16 May 2013 22:10:03 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtMOAKSflVF5LDbs/2dsb2JhbABbgwi8XoUtBAF9F3SCHwEBBAEnExwjBQsIAw4KCSUPBSUDIROIBgW8VhaNUgcED4EdB4NVA5c3ihyHJYMiKoEt Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 14:40:02 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdCvZ-0007lx-Dr; Fri, 17 May 2013 15:10:01 +1000 Date: Fri, 17 May 2013 15:10:01 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat Message-ID: <20130517051001.GP24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-5-git-send-email-sekharan@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368220889-25188-5-git-send-email-sekharan@us.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368767403 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131188 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 10, 2013 at 04:21:28PM -0500, Chandra Seetharaman wrote: > Added appropriate pads and code for backward compatibility. > > Copied over the old version as it is different from the newer padded > version. > > New callers of the system call have to just set the version of the data > structure being passed, and kernel will fill as much data as requested. > > Signed-off-by: Chandra Seetharaman This needs to be cc'd to Steve Whitehouse so he's aware that we are changing the quota interface... > --- > fs/gfs2/quota.c | 3 --- > fs/quota/quota.c | 40 ++++++++++++++++++++++++++++++++++++++-- > fs/xfs/xfs_qm_syscalls.c | 4 ---- > include/uapi/linux/dqblk_xfs.h | 38 ++++++++++++++++++++++++++++++++++++-- > 4 files changed, 74 insertions(+), 11 deletions(-) > > diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c > index c7c840e..ca0dccd 100644 > --- a/fs/gfs2/quota.c > +++ b/fs/gfs2/quota.c > @@ -1443,9 +1443,6 @@ static int gfs2_quota_get_xstate(struct super_block *sb, > { > struct gfs2_sbd *sdp = sb->s_fs_info; > > - memset(fqs, 0, sizeof(struct fs_quota_stat)); > - fqs->qs_version = FS_QSTAT_VERSION; > - > switch (sdp->sd_args.ar_quota) { > case GFS2_QUOTA_ON: > fqs->qs_flags |= (FS_QUOTA_UDQ_ENFD | FS_QUOTA_GDQ_ENFD); > diff --git a/fs/quota/quota.c b/fs/quota/quota.c > index c7314f1..510464e 100644 > --- a/fs/quota/quota.c > +++ b/fs/quota/quota.c > @@ -207,12 +207,48 @@ static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr) > static int quota_getxstate(struct super_block *sb, void __user *addr) > { > struct fs_quota_stat fqs; > - int ret; > + struct fs_quota_stat_v1 fqs_v1; > + int ret, size; > + void *cp = &fqs; What's "cp" mean? Wouldn't fqsp be a better name? And initialise it just before it gets used makes more sense, too. > > if (!sb->s_qcop->get_xstate) > return -ENOSYS; > + > + memset(&fqs, 0, sizeof(struct fs_quota_stat)); > + if (copy_from_user(&fqs, addr, 1)) /* just get the version */ > + return -EFAULT; > + > + switch (fqs.qs_version) { > + case FS_QSTAT_VERSION_2: > + size = FS_QSTAT_V2_SIZE; > + break; > + default: > + fqs.qs_version = FS_QSTAT_VERSION; > + /* fallthrough */ > + case FS_QSTAT_VERSION: > + size = FS_QSTAT_V1_SIZE; > + cp = &fqs_v1; > + } Missing a break on the last case there. > + > ret = sb->s_qcop->get_xstate(sb, &fqs); > - if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) > + if (ret) > + return ret; > + > + if (fqs.qs_version == FS_QSTAT_VERSION) { > + fqs_v1.qs_version = fqs.qs_version; > + fqs_v1.qs_flags = fqs.qs_flags; > + fqs_v1.qs_pad = 0; > + fqs_v1.qs_uquota = fqs.qs_uquota; > + fqs_v1.qs_gquota = fqs.qs_gquota; > + fqs_v1.qs_incoredqs = fqs.qs_incoredqs; > + fqs_v1.qs_btimelimit = fqs.qs_btimelimit; > + fqs_v1.qs_itimelimit = fqs.qs_itimelimit; > + fqs_v1.qs_rtbtimelimit = fqs.qs_rtbtimelimit; > + fqs_v1.qs_bwarnlimit = fqs.qs_bwarnlimit; > + fqs_v1.qs_iwarnlimit = fqs.qs_iwarnlimit; fsqp = &fsq_v1; } else { fsqp = &fsq_v2; } > + > + if (copy_to_user(addr, &cp, size)) > return -EFAULT; > return ret; > } > diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h > index f17e3bb..d9629c1 100644 > --- a/include/uapi/linux/dqblk_xfs.h > +++ b/include/uapi/linux/dqblk_xfs.h > @@ -18,6 +18,7 @@ > #define _LINUX_DQBLK_XFS_H > > #include > +#include Really? What's new that requires this include? > > /* > * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). > @@ -137,8 +138,12 @@ typedef struct fs_disk_quota { > * Provides a centralized way to get meta information about the quota subsystem. > * eg. space taken up for user and group quotas, number of dquots currently > * incore. > + * User space caller should set qs_version to the appropriate version > + * of the fs_quota_stat data structure they are providing. Not providing > + * a version will be treated as FS_QSTAT_VERSION. > */ > #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ > +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ > > /* > * Some basic information about 'quota files'. > @@ -149,19 +154,48 @@ typedef struct fs_qfilestat { > __u32 qfs_nextents; /* number of extents */ > } fs_qfilestat_t; > > +typedef struct fs_quota_stat_v1 { Kill the typedef. Add a comment stating that this structure is likely to have compatibility problems across architectures due to implicit padding and offset alignment in the structure definition and that the v2 structure should be used if these problems are being seen. > + __s8 qs_version; /* version number for future changes */ > + __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ > + __u8 qs_pad; /* unused */ > + fs_qfilestat_t qs_uquota; /* user quota storage information */ > + fs_qfilestat_t qs_gquota; /* group quota storage information */ > + __u32 qs_incoredqs; /* number of dquots incore */ > + __s32 qs_btimelimit; /* limit for blks timer */ > + __s32 qs_itimelimit; /* limit for inodes timer */ > + __s32 qs_rtbtimelimit;/* limit for rt blks timer */ > + __u16 qs_bwarnlimit; /* limit for num warnings */ > + __u16 qs_iwarnlimit; /* limit for num warnings */ > +} fs_quota_stat_v1_t; > + > typedef struct fs_quota_stat { Kill the typedef. > __s8 qs_version; /* version number for future changes */ > + __u8 qs_pad1; /* unused */ > __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ > - __s8 qs_pad; /* unused */ > + __u8 qs_pad2[4]; /* unused */ > fs_qfilestat_t qs_uquota; /* user quota storage information */ > fs_qfilestat_t qs_gquota; /* group quota storage information */ > -#define qs_pquota qs_gquota > __u32 qs_incoredqs; /* number of dquots incore */ > __s32 qs_btimelimit; /* limit for blks timer */ > __s32 qs_itimelimit; /* limit for inodes timer */ > __s32 qs_rtbtimelimit;/* limit for rt blks timer */ > __u16 qs_bwarnlimit; /* limit for num warnings */ > __u16 qs_iwarnlimit; /* limit for num warnings */ > + __u8 qs_pad3[4]; /* unused */ > + fs_qfilestat_t qs_pquota; /* project quota storage information */ > + /* End of Data structure for FS_QSTAT_VERSION_2 */ No need for that comment. > } fs_quota_stat_t; Use pahole on the built object file to determine if the end ofthe structure is 64 bit aligned. If it isn't, please pad it to 64 bit alignment. Um. fs_qfilestat_t is { u64, u64, u32 }, and so there's going to be alignment problems with that. We need a fs_qfilestat_v1 definition and add padding to fs_qfilestat_t so that it is 64 bit aligned..... > > +/* > + * Since Version 1 did not have padding at appropriate places, > + * a new data structure has been defined for the older version to > + * provide backward compatibility. > + * Future extentions of this data structure won't require new > + * data structure definitions as the current one can be extended > + * with the logic and padding in place now. > + */ > +#define FS_QSTAT_V1_SIZE (sizeof(struct fs_quota_stat_v1)) > +#define FS_QSTAT_V2_SIZE (offsetof(struct fs_quota_stat, qs_pquota) + \ > + sizeof(fs_qfilestat_t)) Just use sizeof(struct fs_quota_stat) as the size. Indeed, for future enhancements, maybe we should add 64 bytes of empty space at the end of the structure.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri May 17 00:15:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 79C617F37 for ; Fri, 17 May 2013 00:15:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 54AF48F80D7 for ; Thu, 16 May 2013 22:15:12 -0700 (PDT) X-ASG-Debug-ID: 1368767710-04cb6c53a2341ae0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id k6NEXzSn7SEYn00f for ; Thu, 16 May 2013 22:15:10 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtIOADi8lVF5LDbs/2dsb2JhbABbgwi8X4UtBAF9F3SCHwEBBScTHCMQCAMOCgklDwUlAyETiAu8dRaNWROBHQeDVQOXN4ochyWBWIFKKoEt Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail04.adl6.internode.on.net with ESMTP; 17 May 2013 14:44:41 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdD05-0007mV-E3; Fri, 17 May 2013 15:14:41 +1000 Date: Fri, 17 May 2013 15:14:41 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [PATCH v8 5/5] xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT Message-ID: <20130517051441.GQ24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 5/5] xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-6-git-send-email-sekharan@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368220889-25188-6-git-send-email-sekharan@us.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1368767710 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131188 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 10, 2013 at 04:21:29PM -0500, Chandra Seetharaman wrote: > For the Q_XGETQSTAT quota command, if the new version of fs_quota_stat > data structure is used, fill the project quota information. > > Signed-off-by: Chandra Seetharaman > --- > fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++++++-------------- > 1 files changed, 25 insertions(+), 14 deletions(-) > > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index c27b0e4..7c5876b 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -420,20 +420,14 @@ xfs_qm_scall_getqstat( > bool tempgqip = false; > bool temppqip = false; > > - if (!xfs_sb_version_hasquota(&mp->m_sb)) { > - out->qs_uquota.qfs_ino = NULLFSINO; > - out->qs_gquota.qfs_ino = NULLFSINO; > - out->qs_pquota.qfs_ino = NULLFSINO; > + out->qs_uquota.qfs_ino = NULLFSINO; > + out->qs_gquota.qfs_ino = NULLFSINO; > + out->qs_pquota.qfs_ino = NULLFSINO; > + > + if (!xfs_sb_version_hasquota(&mp->m_sb)) > return (0); > - } > out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & > - (XFS_ALL_QUOTA_ACCT| > - XFS_ALL_QUOTA_ENFD)); > - out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; > - out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; > - if (&out->qs_gquota != &out->qs_pquota) > - out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; > - > + (XFS_ALL_QUOTA_ACCT| XFS_ALL_QUOTA_ENFD)); > if (q) { > uip = q->qi_uquotaip; > gip = q->qi_gquotaip; > @@ -454,21 +448,38 @@ xfs_qm_scall_getqstat( > 0, 0, &pip) == 0) > temppqip = true; > } > + > if (uip) { > + out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; > out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; > out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; > if (tempuqip) > IRELE(uip); > } > if (gip) { > + out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; > out->qs_gquota.qfs_nblks = gip->i_d.di_nblocks; > out->qs_gquota.qfs_nextents = gip->i_d.di_nextents; > if (tempgqip) > IRELE(gip); > } > if (pip) { > - out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; > - out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; > + if (out->qs_version >= FS_QSTAT_VERSION_2) { > + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; > + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; > + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; > + } else { > + /* > + * In FS_QSTAT_VERSION version, there is no > + * qs_pquota, and there is no combined support > + * for gquota/pquota. qs_gquota is shared for > + * providing the pquota/gquota information to > + * the user space. > + */ Move that comment to the head of the function. i.e.: /* * We support two different versions of the fs_quota_stat structure * here. If the version is FS_QSTAT_VERSION, then there is no * separate project quota fields, and so we write project quota * information into the group quota fields. With FS_QSTAT_VERSION_2, * there is a separate project quota field so we can use that * instead to pass both group and project quota back to user space * in the one call. */ Cheers, Dave. -- Dave Chinner david@fromorbit.com From jeff.liu@oracle.com Fri May 17 00:38:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 388D07F37 for ; Fri, 17 May 2013 00:38:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AD15DAC04F for ; Thu, 16 May 2013 22:38:09 -0700 (PDT) X-ASG-Debug-ID: 1368769088-04cbb05fe4340d80001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id BilpvlB5hBv430t3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:08 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5c5Bb030627 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:06 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5c6dZ007180 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:07 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5c6JX012437 for ; Fri, 17 May 2013 05:38:06 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:05 -0700 Message-ID: <5195C239.5010905@oracle.com> Date: Fri, 17 May 2013 13:38:01 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 0/8] xfs: log space validation Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 0/8] xfs: log space validation Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769088 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, This is version 2 of fix log space calculation if the log stripe unit is specified. I changed the subject in this round since there are many changes belong to the log space reservation interface adjustment. Major changes of v2->v1: - The interface of xfs_trans_reserve() has been changed to: xfs_trans_reserve(struct xfs_trans *tp, xfs_trans_res *tres, int blocks, int rtextents); - Introduce a new inline helper m_tresp() to fetch pointer of mp->m_reservations structure, so that we don't need a big code change if someday we rename m_reservations to another name. - Introduce xfs_log_rlimit.[c|h] to isolate the maximum transaction log space validation related routines. There are two functions can be shared with the user space which are: void xfs_log_adjust_max_attrsetm_res(); void xfs_log_get_max_trans_res(); - Calculate the maximum length in bytes that would be required for a local attribute value as large attributes out of line are not logged according to Dave's advise. - Don't return if the given log space at mount time is too small, drop a message via syslog in critical level instead. Testing: xfstests/generic and xfs specified test cases(except a dozens of cases need a tap device or xfsdump) works without panic. [PATCH 1/8] xfs: Introduce a new structure to hold transaction reservation items [PATCH 2/8] xfs: Introduce tr_fsyncts to m_reservation [PATCH 3/8] xfs: Make writeid transaction use tr_writeid [PATCH 4/8] xfs: Refactor xfs_trans_reserve() interface [PATCH 5/8] xfs: Get rid of all XFS_XXX_LOG_RES() macros [PATCH 6/8] xfs: Refactor xfs_ticket_alloc() to extract a new helper [PATCH 7/8] xfs: Add xfs_log_rlimit.[c|h] [PATCH 8/8] xfs: Validate log space at mount time The patches of user space sync up with those kernel space change will be sent out later as I have to go out to deal with a urgent thing right now. v1: http://comments.gmane.org/gmane.comp.file-systems.xfs.general/52201 Thanks, -Jeff From jeff.liu@oracle.com Fri May 17 00:38:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2F71D7F37 for ; Fri, 17 May 2013 00:38:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id BDE84AC04F for ; Thu, 16 May 2013 22:38:13 -0700 (PDT) X-ASG-Debug-ID: 1368769092-04bdf04225349460001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id 7SU7i2cP1Fc8sE5N (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:12 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5c9Xj030734 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:10 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cAxm007405 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:11 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cARK012640 for ; Fri, 17 May 2013 05:38:10 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:09 -0700 Message-ID: <5195C23F.3040406@oracle.com> Date: Fri, 17 May 2013 13:38:07 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 1/8] xfs: Introduce a new structure to hold transaction reservation items Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 1/8] xfs: Introduce a new structure to hold transaction reservation items Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769092 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Introduce a new structure xfs_trans_res to hold transaction reservation item info per log ticket. We also need to improve xfs_trans_init() by initializing the log count as well as log flags for permanent log reservation. Signed-off-by: Jie Liu --- fs/xfs/xfs_mount.h | 68 +++++++++++++++++------------ fs/xfs/xfs_trans.c | 121 ++++++++++++++++++++++++++++++++++++++++------------ fs/xfs/xfs_trans.h | 67 ++++++++++++++++------------- 3 files changed, 171 insertions(+), 85 deletions(-) diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index b004cec..474826e 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -18,35 +18,47 @@ #ifndef __XFS_MOUNT_H__ #define __XFS_MOUNT_H__ +struct xfs_trans_res { + uint tr_logres; /* log space unit in bytes per log ticket */ + int tr_logcount; /* number of log operations per log ticket */ + int tr_logflags; /* log flags, currently only used for indicating + * a reservation request is permanent or not */ +}; + typedef struct xfs_trans_reservations { - uint tr_write; /* extent alloc trans */ - uint tr_itruncate; /* truncate trans */ - uint tr_rename; /* rename trans */ - uint tr_link; /* link trans */ - uint tr_remove; /* unlink trans */ - uint tr_symlink; /* symlink trans */ - uint tr_create; /* create trans */ - uint tr_mkdir; /* mkdir trans */ - uint tr_ifree; /* inode free trans */ - uint tr_ichange; /* inode update trans */ - uint tr_growdata; /* fs data section grow trans */ - uint tr_swrite; /* sync write inode trans */ - uint tr_addafork; /* cvt inode to attributed trans */ - uint tr_writeid; /* write setuid/setgid file */ - uint tr_attrinval; /* attr fork buffer invalidation */ - uint tr_attrsetm; /* set/create an attribute at mount time */ - uint tr_attrsetrt; /* set/create an attribute at runtime */ - uint tr_attrrm; /* remove an attribute */ - uint tr_clearagi; /* clear bad agi unlinked ino bucket */ - uint tr_growrtalloc; /* grow realtime allocations */ - uint tr_growrtzero; /* grow realtime zeroing */ - uint tr_growrtfree; /* grow realtime freeing */ - uint tr_qm_sbchange; /* change quota flags */ - uint tr_qm_setqlim; /* adjust quota limits */ - uint tr_qm_dqalloc; /* allocate quota on disk */ - uint tr_qm_quotaoff; /* turn quota off */ - uint tr_qm_equotaoff;/* end of turn quota off */ - uint tr_sb; /* modify superblock */ + struct xfs_trans_res tr_write; /* extent alloc trans */ + struct xfs_trans_res tr_itruncate; /* truncate trans */ + struct xfs_trans_res tr_rename; /* rename trans */ + struct xfs_trans_res tr_link; /* link trans */ + struct xfs_trans_res tr_remove; /* unlink trans */ + struct xfs_trans_res tr_symlink; /* symlink trans */ + struct xfs_trans_res tr_create; /* create trans */ + struct xfs_trans_res tr_mkdir; /* mkdir trans */ + struct xfs_trans_res tr_ifree; /* inode free trans */ + struct xfs_trans_res tr_ichange; /* inode update trans */ + struct xfs_trans_res tr_growdata; /* fs data section grow trans */ + struct xfs_trans_res tr_swrite; /* sync write inode trans */ + struct xfs_trans_res tr_addafork; /* cvt inode to attributed + * trans */ + struct xfs_trans_res tr_writeid; /* write setuid/setgid file */ + struct xfs_trans_res tr_attrinval; /* attr fork buffer + * invalidation */ + struct xfs_trans_res tr_attrsetm; /* set/create an attribute at + * mount time */ + struct xfs_trans_res tr_attrsetrt; /* set/create an attribute at + * runtime */ + struct xfs_trans_res tr_attrrm; /* remove an attribute */ + struct xfs_trans_res tr_clearagi; /* clear bad agi unlinked ino + * bucket */ + struct xfs_trans_res tr_growrtalloc; /* grow realtime allocations */ + struct xfs_trans_res tr_growrtzero; /* grow realtime zeroing */ + struct xfs_trans_res tr_growrtfree; /* grow realtime freeing */ + struct xfs_trans_res tr_qm_sbchange; /* change quota flags */ + struct xfs_trans_res tr_qm_setqlim; /* adjust quota limits */ + struct xfs_trans_res tr_qm_dqalloc; /* allocate quota on disk */ + struct xfs_trans_res tr_qm_quotaoff; /* turn quota off */ + struct xfs_trans_res tr_qm_equotaoff;/* end of turn quota off */ + struct xfs_trans_res tr_sb; /* modify superblock */ } xfs_trans_reservations_t; #ifndef __KERNEL__ diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 2fd7c1f..8f38901 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -645,34 +645,99 @@ xfs_trans_init( { struct xfs_trans_reservations *resp = &mp->m_reservations; - resp->tr_write = xfs_calc_write_reservation(mp); - resp->tr_itruncate = xfs_calc_itruncate_reservation(mp); - resp->tr_rename = xfs_calc_rename_reservation(mp); - resp->tr_link = xfs_calc_link_reservation(mp); - resp->tr_remove = xfs_calc_remove_reservation(mp); - resp->tr_symlink = xfs_calc_symlink_reservation(mp); - resp->tr_create = xfs_calc_create_reservation(mp); - resp->tr_mkdir = xfs_calc_mkdir_reservation(mp); - resp->tr_ifree = xfs_calc_ifree_reservation(mp); - resp->tr_ichange = xfs_calc_ichange_reservation(mp); - resp->tr_growdata = xfs_calc_growdata_reservation(mp); - resp->tr_swrite = xfs_calc_swrite_reservation(mp); - resp->tr_writeid = xfs_calc_writeid_reservation(mp); - resp->tr_addafork = xfs_calc_addafork_reservation(mp); - resp->tr_attrinval = xfs_calc_attrinval_reservation(mp); - resp->tr_attrsetm = xfs_calc_attrsetm_reservation(mp); - resp->tr_attrsetrt = xfs_calc_attrsetrt_reservation(mp); - resp->tr_attrrm = xfs_calc_attrrm_reservation(mp); - resp->tr_clearagi = xfs_calc_clear_agi_bucket_reservation(mp); - resp->tr_growrtalloc = xfs_calc_growrtalloc_reservation(mp); - resp->tr_growrtzero = xfs_calc_growrtzero_reservation(mp); - resp->tr_growrtfree = xfs_calc_growrtfree_reservation(mp); - resp->tr_qm_sbchange = xfs_calc_qm_sbchange_reservation(mp); - resp->tr_qm_setqlim = xfs_calc_qm_setqlim_reservation(mp); - resp->tr_qm_dqalloc = xfs_calc_qm_dqalloc_reservation(mp); - resp->tr_qm_quotaoff = xfs_calc_qm_quotaoff_reservation(mp); - resp->tr_qm_equotaoff = xfs_calc_qm_quotaoff_end_reservation(mp); - resp->tr_sb = xfs_calc_sb_reservation(mp); + /* + * The following transactions are logged in physical format and + * require a permanent reservation on space. + */ + resp->tr_write.tr_logres = xfs_calc_write_reservation(mp); + resp->tr_write.tr_logcount = XFS_WRITE_LOG_COUNT; + resp->tr_write.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_itruncate.tr_logres = xfs_calc_itruncate_reservation(mp); + resp->tr_itruncate.tr_logcount = XFS_ITRUNCATE_LOG_COUNT; + resp->tr_itruncate.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_rename.tr_logres = xfs_calc_rename_reservation(mp); + resp->tr_rename.tr_logcount = XFS_RENAME_LOG_COUNT; + resp->tr_rename.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_link.tr_logres = xfs_calc_link_reservation(mp); + resp->tr_link.tr_logcount = XFS_LINK_LOG_COUNT; + resp->tr_link.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_remove.tr_logres = xfs_calc_remove_reservation(mp); + resp->tr_remove.tr_logcount = XFS_REMOVE_LOG_COUNT; + resp->tr_remove.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_symlink.tr_logres = xfs_calc_symlink_reservation(mp); + resp->tr_symlink.tr_logcount = XFS_SYMLINK_LOG_COUNT; + resp->tr_symlink.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_create.tr_logres = xfs_calc_create_reservation(mp); + resp->tr_create.tr_logcount = XFS_CREATE_LOG_COUNT; + resp->tr_create.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_mkdir.tr_logres = xfs_calc_mkdir_reservation(mp); + resp->tr_mkdir.tr_logcount = XFS_MKDIR_LOG_COUNT; + resp->tr_mkdir.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_ifree.tr_logres = xfs_calc_ifree_reservation(mp); + resp->tr_ifree.tr_logcount = XFS_INACTIVE_LOG_COUNT; + resp->tr_ifree.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_addafork.tr_logres = xfs_calc_addafork_reservation(mp); + resp->tr_addafork.tr_logcount = XFS_ADDAFORK_LOG_COUNT; + resp->tr_addafork.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_attrinval.tr_logres = xfs_calc_attrinval_reservation(mp); + resp->tr_attrinval.tr_logcount = XFS_ATTRINVAL_LOG_COUNT; + resp->tr_attrinval.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_attrsetm.tr_logres = xfs_calc_attrsetm_reservation(mp); + resp->tr_attrsetm.tr_logcount = XFS_ATTRSET_LOG_COUNT; + resp->tr_attrsetm.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_attrrm.tr_logres = xfs_calc_attrrm_reservation(mp); + resp->tr_attrrm.tr_logcount = XFS_ATTRRM_LOG_COUNT; + resp->tr_attrrm.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_growrtalloc.tr_logres = xfs_calc_growrtalloc_reservation(mp); + resp->tr_growrtalloc.tr_logcount = XFS_DEFAULT_PERM_LOG_COUNT; + resp->tr_growrtalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_qm_dqalloc.tr_logres = xfs_calc_qm_dqalloc_reservation(mp); + resp->tr_qm_dqalloc.tr_logcount = XFS_WRITE_LOG_COUNT; + resp->tr_qm_dqalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + /* + * The following transactions are logged in logical format with + * a default log count. + */ + resp->tr_qm_sbchange.tr_logres = xfs_calc_qm_sbchange_reservation(mp); + resp->tr_qm_sbchange.tr_logcount = XFS_DEFAULT_LOG_COUNT; + + resp->tr_qm_setqlim.tr_logres = xfs_calc_qm_setqlim_reservation(mp); + resp->tr_qm_setqlim.tr_logcount = XFS_DEFAULT_LOG_COUNT; + + resp->tr_qm_quotaoff.tr_logres = xfs_calc_qm_quotaoff_reservation(mp); + resp->tr_qm_quotaoff.tr_logcount = XFS_DEFAULT_LOG_COUNT; + + resp->tr_qm_equotaoff.tr_logres = + xfs_calc_qm_quotaoff_end_reservation(mp); + resp->tr_qm_equotaoff.tr_logcount = XFS_DEFAULT_LOG_COUNT; + + resp->tr_sb.tr_logres = xfs_calc_sb_reservation(mp); + resp->tr_sb.tr_logcount = XFS_DEFAULT_LOG_COUNT; + + /* The following transaction are logged in logical format */ + resp->tr_ichange.tr_logres = xfs_calc_ichange_reservation(mp); + resp->tr_growdata.tr_logres = xfs_calc_growdata_reservation(mp); + resp->tr_swrite.tr_logres = xfs_calc_swrite_reservation(mp); + resp->tr_writeid.tr_logres = xfs_calc_writeid_reservation(mp); + resp->tr_attrsetrt.tr_logres = xfs_calc_attrsetrt_reservation(mp); + resp->tr_clearagi.tr_logres = xfs_calc_clear_agi_bucket_reservation(mp); + resp->tr_growrtzero.tr_logres = xfs_calc_growrtzero_reservation(mp); + resp->tr_growrtfree.tr_logres = xfs_calc_growrtfree_reservation(mp); } /* diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index a44dba5..15a6031 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -232,39 +232,48 @@ struct xfs_log_item_desc { XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) -#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write) -#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate) -#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename) -#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link) -#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove) -#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink) -#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create) -#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir) -#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree) -#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange) -#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata) -#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc) -#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero) -#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree) -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) +#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write.tr_logres) +#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename.tr_logres) +#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link.tr_logres) +#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove.tr_logres) +#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink.tr_logres) +#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create.tr_logres) +#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir.tr_logres) +#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree.tr_logres) +#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange.tr_logres) +#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata.tr_logres) +#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate.tr_logres) +#define XFS_GROWRTALLOC_LOG_RES(mp) \ + ((mp)->m_reservations.tr_growrtalloc.tr_logres) +#define XFS_GROWRTZERO_LOG_RES(mp) \ + ((mp)->m_reservations.tr_growrtzero.tr_logres) +#define XFS_GROWRTFREE_LOG_RES(mp) \ + ((mp)->m_reservations.tr_growrtfree.tr_logres) +#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) /* * Logging the inode timestamps on an fsync -- same as SWRITE * as long as SWRITE logs the entire inode core */ -#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) -#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) -#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork) -#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval) -#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm) -#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt) -#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm) -#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp) ((mp)->m_reservations.tr_clearagi) -#define XFS_QM_SBCHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_qm_sbchange) -#define XFS_QM_SETQLIM_LOG_RES(mp) ((mp)->m_reservations.tr_qm_setqlim) -#define XFS_QM_DQALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_qm_dqalloc) -#define XFS_QM_QUOTAOFF_LOG_RES(mp) ((mp)->m_reservations.tr_qm_quotaoff) -#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) ((mp)->m_reservations.tr_qm_equotaoff) -#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb) +#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) +#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) +#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork.tr_logres) +#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm.tr_logres) +#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval.tr_logres) +#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt.tr_logres) +#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm.tr_logres) +#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb.tr_logres) +#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp)\ + ((mp)->m_reservations.tr_clearagi.tr_logres) +#define XFS_QM_SBCHANGE_LOG_RES(mp) \ + ((mp)->m_reservations.tr_qm_sbchange.tr_logres) +#define XFS_QM_SETQLIM_LOG_RES(mp) \ + ((mp)->m_reservations.tr_qm_setqlim.tr_logres) +#define XFS_QM_DQALLOC_LOG_RES(mp) \ + ((mp)->m_reservations.tr_qm_dqalloc.tr_logres) +#define XFS_QM_QUOTAOFF_LOG_RES(mp) \ + ((mp)->m_reservations.tr_qm_quotaoff.tr_logres) +#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) \ + ((mp)->m_reservations.tr_qm_equotaoff.tr_logres) /* * Various log count values. -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:38:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B58E77F55 for ; Fri, 17 May 2013 00:38:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3C9B2AC04F for ; Thu, 16 May 2013 22:38:21 -0700 (PDT) X-ASG-Debug-ID: 1368769099-04cb6c53a4342c70001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id k7KfP21mpC48BYIa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:20 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5cHiZ030996 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:18 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cG8U009827 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:18 GMT Received: from abhmt104.oracle.com (abhmt104.oracle.com [141.146.116.56]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cGum028329 for ; Fri, 17 May 2013 05:38:16 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:16 -0700 Message-ID: <5195C245.9050804@oracle.com> Date: Fri, 17 May 2013 13:38:13 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 3/8] xfs: Make writeid transaction use tr_writeid Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 3/8] xfs: Make writeid transaction use tr_writeid Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769099 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu tr_writeid is defined at mp->m_reservation structure, however, it does not really being used. This patch fix it to tr_writeid to fetch the log reservation size. Signed-off-by: Jie Liu --- fs/xfs/xfs_trans.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 509ad4d..6177040 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -255,7 +255,7 @@ struct xfs_log_item_desc { * as long as SWRITE logs the entire inode core */ #define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_fsyncts.tr_logres) -#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) +#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_writeid.tr_logres) #define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork.tr_logres) #define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm.tr_logres) #define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval.tr_logres) -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:38:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 471A97F5D for ; Fri, 17 May 2013 00:38:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 270358F8040 for ; Thu, 16 May 2013 22:38:38 -0700 (PDT) X-ASG-Debug-ID: 1368769117-04cbb05fe2340dd0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id usgpz5LWKQdnxR2I (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:37 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5cY9l031346 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:35 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cZ7g013875 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:35 GMT Received: from abhmt102.oracle.com (abhmt102.oracle.com [141.146.116.54]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cZdS010733 for ; Fri, 17 May 2013 05:38:35 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:34 -0700 Message-ID: <5195C258.4040103@oracle.com> Date: Fri, 17 May 2013 13:38:32 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 5/8] xfs: Get rid of all XFS_XXX_LOG_RES() macro Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 5/8] xfs: Get rid of all XFS_XXX_LOG_RES() macro Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769117 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Get rid of all XFS_XXX_LOG_RES() macros since they are obsoleted now. Signed-off-by: Jie Liu --- fs/xfs/xfs_trans.h | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 8049f55..a1a1835 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -231,50 +231,6 @@ struct xfs_log_item_desc { (XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK) + \ XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) - -#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write.tr_logres) -#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename.tr_logres) -#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link.tr_logres) -#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove.tr_logres) -#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink.tr_logres) -#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create.tr_logres) -#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir.tr_logres) -#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree.tr_logres) -#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange.tr_logres) -#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata.tr_logres) -#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate.tr_logres) -#define XFS_GROWRTALLOC_LOG_RES(mp) \ - ((mp)->m_reservations.tr_growrtalloc.tr_logres) -#define XFS_GROWRTZERO_LOG_RES(mp) \ - ((mp)->m_reservations.tr_growrtzero.tr_logres) -#define XFS_GROWRTFREE_LOG_RES(mp) \ - ((mp)->m_reservations.tr_growrtfree.tr_logres) -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) -/* - * Logging the inode timestamps on an fsync -- same as SWRITE - * as long as SWRITE logs the entire inode core - */ -#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_fsyncts.tr_logres) -#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_writeid.tr_logres) -#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork.tr_logres) -#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm.tr_logres) -#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval.tr_logres) -#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt.tr_logres) -#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm.tr_logres) -#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb.tr_logres) -#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp)\ - ((mp)->m_reservations.tr_clearagi.tr_logres) -#define XFS_QM_SBCHANGE_LOG_RES(mp) \ - ((mp)->m_reservations.tr_qm_sbchange.tr_logres) -#define XFS_QM_SETQLIM_LOG_RES(mp) \ - ((mp)->m_reservations.tr_qm_setqlim.tr_logres) -#define XFS_QM_DQALLOC_LOG_RES(mp) \ - ((mp)->m_reservations.tr_qm_dqalloc.tr_logres) -#define XFS_QM_QUOTAOFF_LOG_RES(mp) \ - ((mp)->m_reservations.tr_qm_quotaoff.tr_logres) -#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) \ - ((mp)->m_reservations.tr_qm_equotaoff.tr_logres) - /* * Various log count values. */ -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:38:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 02C347F5D for ; Fri, 17 May 2013 00:38:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id E538430413C for ; Thu, 16 May 2013 22:38:35 -0700 (PDT) X-ASG-Debug-ID: 1368769113-04cbb05fe3340dd0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id qj6iwlVvGycAgUr9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:33 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5cW5q005894 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:32 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cV1G010534 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:31 GMT Received: from abhmt115.oracle.com (abhmt115.oracle.com [141.146.116.67]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cUDh029123 for ; Fri, 17 May 2013 05:38:30 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:29 -0700 Message-ID: <5195C253.8080805@oracle.com> Date: Fri, 17 May 2013 13:38:27 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 4/8] xfs: efactor xfs_trans_reserve() interface Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 4/8] xfs: efactor xfs_trans_reserve() interface Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368769113 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu With the new xfs_trans_res structure has been introduced, the log reservation size, log count as well as log flags are pre-initialized at mount time. So it's time to refine xfs_trans_reserve() interface to be more neat. Also, introduce a new inline helper m_tresp() to return a pointer to the mp->m_reservations structure to simplify the input. Signed-off-by: Jie Liu --- fs/xfs/xfs_aops.c | 2 +- fs/xfs/xfs_attr.c | 38 ++++++++++---------- fs/xfs/xfs_bmap.c | 16 ++++----- fs/xfs/xfs_dfrag.c | 5 ++- fs/xfs/xfs_dquot.c | 6 ++-- fs/xfs/xfs_fsops.c | 8 ++--- fs/xfs/xfs_inode.c | 5 +-- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iomap.c | 18 ++++------ fs/xfs/xfs_iops.c | 8 ++--- fs/xfs/xfs_log_recover.c | 5 ++- fs/xfs/xfs_mount.c | 9 ++--- fs/xfs/xfs_mount.h | 6 ++++ fs/xfs/xfs_qm.c | 11 +++--- fs/xfs/xfs_qm_syscalls.c | 13 +++---- fs/xfs/xfs_rename.c | 6 ++-- fs/xfs/xfs_rtalloc.c | 17 ++++----- fs/xfs/xfs_symlink.c | 10 +++--- fs/xfs/xfs_trans.c | 58 +++++++++++++++--------------- fs/xfs/xfs_trans.h | 3 +- fs/xfs/xfs_utils.c | 13 +++---- fs/xfs/xfs_vnodeops.c | 90 ++++++++++++++++++---------------------------- 22 files changed, 153 insertions(+), 196 deletions(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3244c98..a68d4d4 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -115,7 +115,7 @@ xfs_setfilesize_trans_alloc( tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); - error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_fsyncts, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return error; diff --git a/fs/xfs/xfs_attr.c b/fs/xfs/xfs_attr.c index 20fe3fe..a89b339 100644 --- a/fs/xfs/xfs_attr.c +++ b/fs/xfs/xfs_attr.c @@ -227,13 +227,14 @@ xfs_attr_set_int( int valuelen, int flags) { - xfs_da_args_t args; - xfs_fsblock_t firstblock; - xfs_bmap_free_t flist; - int error, err2, committed; - xfs_mount_t *mp = dp->i_mount; - int rsvd = (flags & ATTR_ROOT) != 0; - int local; + xfs_da_args_t args; + xfs_fsblock_t firstblock; + xfs_bmap_free_t flist; + int error, err2, committed; + struct xfs_mount *mp = dp->i_mount; + struct xfs_trans_res tres; + int rsvd = (flags & ATTR_ROOT) != 0; + int local; /* * Attach the dquots to the inode. @@ -293,11 +294,11 @@ xfs_attr_set_int( if (rsvd) args.trans->t_flags |= XFS_TRANS_RESERVE; - error = xfs_trans_reserve(args.trans, args.total, - XFS_ATTRSETM_LOG_RES(mp) + - XFS_ATTRSETRT_LOG_RES(mp) * args.total, - 0, XFS_TRANS_PERM_LOG_RES, - XFS_ATTRSET_LOG_COUNT); + tres.tr_logres = m_tresp(mp)->tr_attrsetm.tr_logres + + m_tresp(mp)->tr_attrsetrt.tr_logres * args.total; + tres.tr_logcount = XFS_ATTRSET_LOG_COUNT; + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; + error = xfs_trans_reserve(args.trans, &tres, args.total, 0); if (error) { xfs_trans_cancel(args.trans, 0); return(error); @@ -517,11 +518,9 @@ xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) if (flags & ATTR_ROOT) args.trans->t_flags |= XFS_TRANS_RESERVE; - if ((error = xfs_trans_reserve(args.trans, - XFS_ATTRRM_SPACE_RES(mp), - XFS_ATTRRM_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, - XFS_ATTRRM_LOG_COUNT))) { + error = xfs_trans_reserve(args.trans, &m_tresp(mp)->tr_attrrm, + XFS_ATTRRM_SPACE_RES(mp), 0); + if (error) { xfs_trans_cancel(args.trans, 0); return(error); } @@ -791,9 +790,8 @@ xfs_attr_inactive(xfs_inode_t *dp) * the log. */ trans = xfs_trans_alloc(mp, XFS_TRANS_ATTRINVAL); - if ((error = xfs_trans_reserve(trans, 0, XFS_ATTRINVAL_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_ATTRINVAL_LOG_COUNT))) { + error = xfs_trans_reserve(trans, &m_tresp(mp)->tr_attrinval, 0, 0); + if (error) { xfs_trans_cancel(trans, 0); return(error); } diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 8904284..87c2af2 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c @@ -857,8 +857,7 @@ xfs_bmap_finish( xfs_efi_log_item_t *efi; /* extent free intention */ int error; /* error return value */ xfs_bmap_free_item_t *free; /* free extent item */ - unsigned int logres; /* new log reservation */ - unsigned int logcount; /* new log count */ + struct xfs_trans_res tres; /* new log reservation */ xfs_mount_t *mp; /* filesystem mount structure */ xfs_bmap_free_item_t *next; /* next item on free list */ xfs_trans_t *ntp; /* new transaction pointer */ @@ -873,8 +872,9 @@ xfs_bmap_finish( for (free = flist->xbf_first; free; free = free->xbfi_next) xfs_trans_log_efi_extent(ntp, efi, free->xbfi_startblock, free->xbfi_blockcount); - logres = ntp->t_log_res; - logcount = ntp->t_log_count; + tres.tr_logres = ntp->t_log_res; + tres.tr_logcount = ntp->t_log_count; + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; ntp = xfs_trans_dup(*tp); error = xfs_trans_commit(*tp, 0); *tp = ntp; @@ -892,8 +892,8 @@ xfs_bmap_finish( */ xfs_log_ticket_put(ntp->t_ticket); - if ((error = xfs_trans_reserve(ntp, 0, logres, 0, XFS_TRANS_PERM_LOG_RES, - logcount))) + error = xfs_trans_reserve(ntp, &tres, 0, 0); + if (error) return error; efd = xfs_trans_get_efd(ntp, efi, flist->xbf_count); for (free = flist->xbf_first; free != NULL; free = next) { @@ -1414,8 +1414,8 @@ xfs_bmap_add_attrfork( blks = XFS_ADDAFORK_SPACE_RES(mp); if (rsvd) tp->t_flags |= XFS_TRANS_RESERVE; - if ((error = xfs_trans_reserve(tp, blks, XFS_ADDAFORK_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_ADDAFORK_LOG_COUNT))) + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_addafork, blks, 0); + if (error) goto error0; xfs_ilock(ip, XFS_ILOCK_EXCL); error = xfs_trans_reserve_quota_nblks(tp, ip, blks, 0, rsvd ? diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index f852b08..362e305 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c @@ -316,9 +316,8 @@ xfs_swap_extents( truncate_pagecache_range(VFS_I(ip), 0, -1); tp = xfs_trans_alloc(mp, XFS_TRANS_SWAPEXT); - if ((error = xfs_trans_reserve(tp, 0, - XFS_ICHANGE_LOG_RES(mp), 0, - 0, 0))) { + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_ichange, 0, 0); + if (error) { xfs_iunlock(ip, XFS_IOLOCK_EXCL); xfs_iunlock(tip, XFS_IOLOCK_EXCL); xfs_trans_cancel(tp, 0); diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index a41f8bf..c3fafdb 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -721,10 +721,8 @@ xfs_qm_dqread( if (flags & XFS_QMOPT_DQALLOC) { tp = xfs_trans_alloc(mp, XFS_TRANS_QM_DQALLOC); - error = xfs_trans_reserve(tp, XFS_QM_DQALLOC_SPACE_RES(mp), - XFS_QM_DQALLOC_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_WRITE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_attrsetm, + XFS_QM_DQALLOC_SPACE_RES(mp), 0); if (error) goto error1; cancelflags = XFS_TRANS_RELEASE_LOG_RES; diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 87595b2..effa652 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -201,8 +201,9 @@ xfs_growfs_data_private( tp = xfs_trans_alloc(mp, XFS_TRANS_GROWFS); tp->t_flags |= XFS_TRANS_RESERVE; - if ((error = xfs_trans_reserve(tp, XFS_GROWFS_SPACE_RES(mp), - XFS_GROWDATA_LOG_RES(mp), 0, 0, 0))) { + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_growdata, + XFS_GROWFS_SPACE_RES(mp), 0); + if (error) { xfs_trans_cancel(tp, 0); return error; } @@ -737,8 +738,7 @@ xfs_fs_log_dummy( int error; tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1, KM_SLEEP); - error = xfs_trans_reserve(tp, 0, XFS_SB_LOG_RES(mp), 0, 0, - XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_sb, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return error; diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index efbe1ac..f1906bd 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1549,10 +1549,7 @@ xfs_itruncate_extents( * reference that we gained in xfs_trans_dup() */ xfs_log_ticket_put(tp->t_ticket); - error = xfs_trans_reserve(tp, 0, - XFS_ITRUNCATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_itruncate, 0, 0); if (error) goto out; } diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 5e99968..49af42b 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -967,7 +967,7 @@ xfs_ioctl_setattr( * first do an error checking pass. */ tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); - code = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0); + code = xfs_trans_reserve(tp, &m_tresp(mp)->tr_ichange, 0, 0); if (code) goto error_return; diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 8f8aaee..2a5539d 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -187,10 +187,8 @@ xfs_iomap_write_direct( * Allocate and setup the transaction */ tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); - error = xfs_trans_reserve(tp, resblks, - XFS_WRITE_LOG_RES(mp), resrtextents, - XFS_TRANS_PERM_LOG_RES, - XFS_WRITE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_write, + resblks, resrtextents); /* * Check for running out of space, note: need lock to return */ @@ -685,10 +683,8 @@ xfs_iomap_write_allocate( tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); tp->t_flags |= XFS_TRANS_RESERVE; nres = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); - error = xfs_trans_reserve(tp, nres, - XFS_WRITE_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, - XFS_WRITE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_write, + nres, 0); if (error) { xfs_trans_cancel(tp, 0); return XFS_ERROR(error); @@ -851,10 +847,8 @@ xfs_iomap_write_unwritten( sb_start_intwrite(mp->m_super); tp = _xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE, KM_NOFS); tp->t_flags |= XFS_TRANS_RESERVE | XFS_TRANS_FREEZE_PROT; - error = xfs_trans_reserve(tp, resblks, - XFS_WRITE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_WRITE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_write, + resblks, 0); if (error) { xfs_trans_cancel(tp, 0); return XFS_ERROR(error); diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa..4f2e469 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -523,7 +523,7 @@ xfs_setattr_nonsize( } tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); - error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_ichange, 0, 0); if (error) goto out_dqrele; @@ -796,9 +796,7 @@ xfs_setattr_size( goto out_unlock; tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_SIZE); - error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_itruncate, 0, 0); if (error) goto out_trans_cancel; @@ -915,7 +913,7 @@ xfs_vn_update_time( trace_xfs_update_time(ip); tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); - error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_fsyncts, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return -error; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 93f03ec..a37adeb 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -3167,7 +3167,7 @@ xlog_recover_process_efi( } tp = xfs_trans_alloc(mp, 0); - error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, 0, 0); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_itruncate, 0, 0); if (error) goto abort_error; efdp = xfs_trans_get_efd(tp, efip, efip->efi_format.efi_nextents); @@ -3273,8 +3273,7 @@ xlog_recover_clear_agi_bucket( int error; tp = xfs_trans_alloc(mp, XFS_TRANS_CLEAR_AGI_BUCKET); - error = xfs_trans_reserve(tp, 0, XFS_CLEAR_AGI_BUCKET_LOG_RES(mp), - 0, 0, 0); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_clearagi, 0, 0); if (error) goto out_abort; diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd7..c29977c 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1220,8 +1220,7 @@ xfs_mount_reset_sbqflags( return 0; tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE); - error = xfs_trans_reserve(tp, 0, XFS_QM_SBCHANGE_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_qm_sbchange, 0, 0); if (error) { xfs_trans_cancel(tp, 0); xfs_alert(mp, "%s: Superblock update failed!", __func__); @@ -1694,8 +1693,7 @@ xfs_log_sbcount(xfs_mount_t *mp) return 0; tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT, KM_SLEEP); - error = xfs_trans_reserve(tp, 0, XFS_SB_LOG_RES(mp), 0, 0, - XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_sb, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return error; @@ -2057,8 +2055,7 @@ xfs_mount_log_sb( XFS_SB_VERSIONNUM)); tp = xfs_trans_alloc(mp, XFS_TRANS_SB_UNIT); - error = xfs_trans_reserve(tp, 0, XFS_SB_LOG_RES(mp), 0, 0, - XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_sb, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return error; diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 00d33f6..27ae8a9 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -231,6 +231,12 @@ typedef struct xfs_mount { struct workqueue_struct *m_eofblocks_workqueue; } xfs_mount_t; +static inline struct xfs_trans_reservations * +m_tresp(struct xfs_mount *mp) +{ + return &mp->m_reservations; +} + /* * Flags for m_flags. */ diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index f41702b..50fc798 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -781,11 +781,9 @@ xfs_qm_qino_alloc( int committed; tp = xfs_trans_alloc(mp, XFS_TRANS_QM_QINOCREATE); - if ((error = xfs_trans_reserve(tp, - XFS_QM_QINOCREATE_SPACE_RES(mp), - XFS_CREATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_CREATE_LOG_COUNT))) { + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_create, + XFS_QM_QINOCREATE_SPACE_RES(mp), 0); + if (error) { xfs_trans_cancel(tp, 0); return error; } @@ -1601,8 +1599,7 @@ xfs_qm_write_sb_changes( int error; tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE); - error = xfs_trans_reserve(tp, 0, XFS_QM_SBCHANGE_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_qm_sbchange, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return error; diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..1ffa769 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -243,9 +243,7 @@ xfs_qm_scall_trunc_qfile( xfs_ilock(ip, XFS_IOLOCK_EXCL); tp = xfs_trans_alloc(mp, XFS_TRANS_TRUNCATE_FILE); - error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_itruncate, 0, 0); if (error) { xfs_trans_cancel(tp, 0); xfs_iunlock(ip, XFS_IOLOCK_EXCL); @@ -490,8 +488,7 @@ xfs_qm_scall_setqlim( return 0; tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_qm_setqlim, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return (error); @@ -640,8 +637,7 @@ xfs_qm_log_quotaoff_end( tp = xfs_trans_alloc(mp, XFS_TRANS_QM_QUOTAOFF_END); - error = xfs_trans_reserve(tp, 0, XFS_QM_QUOTAOFF_END_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_qm_equotaoff, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return (error); @@ -674,8 +670,7 @@ xfs_qm_log_quotaoff( uint oldsbqflag=0; tp = xfs_trans_alloc(mp, XFS_TRANS_QM_QUOTAOFF); - error = xfs_trans_reserve(tp, 0, XFS_QM_QUOTAOFF_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_qm_quotaoff, 0, 0); if (error) goto error0; diff --git a/fs/xfs/xfs_rename.c b/fs/xfs/xfs_rename.c index 30ff5f4..791e140 100644 --- a/fs/xfs/xfs_rename.c +++ b/fs/xfs/xfs_rename.c @@ -124,12 +124,10 @@ xfs_rename( tp = xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags = XFS_TRANS_RELEASE_LOG_RES; spaceres = XFS_RENAME_SPACE_RES(mp, target_name->len); - error = xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_rename, spaceres, 0); if (error == ENOSPC) { spaceres = 0; - error = xfs_trans_reserve(tp, 0, XFS_RENAME_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_rename, 0, 0); } if (error) { xfs_trans_cancel(tp, 0); diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c index 98dc670..e1d2490 100644 --- a/fs/xfs/xfs_rtalloc.c +++ b/fs/xfs/xfs_rtalloc.c @@ -101,10 +101,9 @@ xfs_growfs_rt_alloc( /* * Reserve space & log for one extent added to the file. */ - if ((error = xfs_trans_reserve(tp, resblks, - XFS_GROWRTALLOC_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_DEFAULT_PERM_LOG_COUNT))) + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_growdata, + resblks, 0); + if (error) goto error_cancel; cancelflags = XFS_TRANS_RELEASE_LOG_RES; /* @@ -147,8 +146,9 @@ xfs_growfs_rt_alloc( /* * Reserve log for one block zeroing. */ - if ((error = xfs_trans_reserve(tp, 0, - XFS_GROWRTZERO_LOG_RES(mp), 0, 0, 0))) + error = xfs_trans_reserve(tp, + &m_tresp(mp)->tr_growrtzero, 0, 0); + if (error) goto error_cancel; /* * Lock the bitmap inode. @@ -1958,8 +1958,9 @@ xfs_growfs_rt( * Start a transaction, get the log reservation. */ tp = xfs_trans_alloc(mp, XFS_TRANS_GROWFSRT_FREE); - if ((error = xfs_trans_reserve(tp, 0, - XFS_GROWRTFREE_LOG_RES(nmp), 0, 0, 0))) + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_growrtfree, + 0, 0); + if (error) goto error_cancel; /* * Lock out other callers by grabbing the bitmap inode lock. diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 5f234389..02b4b85 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c @@ -407,12 +407,10 @@ xfs_symlink( else fs_blocks = XFS_B_TO_FSB(mp, pathlen); resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); - error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_symlink, resblks, 0); if (error == ENOSPC && fs_blocks == 0) { resblks = 0; - error = xfs_trans_reserve(tp, 0, XFS_SYMLINK_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_symlink, 0, 0); } if (error) { cancel_flags = 0; @@ -713,8 +711,8 @@ xfs_inactive_symlink_rmt( * Put an itruncate log reservation in the new transaction * for our caller. */ - if ((error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_ITRUNCATE_LOG_COUNT))) { + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_itruncate, 0, 0); + if (error) { ASSERT(XFS_FORCED_SHUTDOWN(mp)); goto error0; } diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index f1ccb2d..bc6f8c5 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -516,7 +516,8 @@ xfs_calc_attrsetm_reservation( * Since the runtime attribute transaction space is dependent on the total * blocks needed for the 1st bmap, here we calculate out the space unit for * one block so that the caller could figure out the total space according - * to the attibute extent length in blocks by: ext * XFS_ATTRSETRT_LOG_RES(mp). + * to the attibute extent length in blocks by: + * ext * m_tresp(mp)->tr_attrsetrt.tr_logres */ STATIC uint xfs_calc_attrsetrt_reservation( @@ -588,14 +589,14 @@ xfs_calc_qm_setqlim_reservation( /* * Allocating quota on disk if needed. - * the write transaction log space: XFS_WRITE_LOG_RES(mp) + * the write transaction log space: m_tresp(mp)->tr_write.tr_logres * the unit of quota allocation: one system block size */ STATIC uint xfs_calc_qm_dqalloc_reservation( struct xfs_mount *mp) { - return XFS_WRITE_LOG_RES(mp) + + return m_tresp(mp)->tr_write.tr_logres + xfs_calc_buf_res(1, XFS_FSB_TO_B(mp, XFS_DQUOT_CLUSTER_SIZE_FSB) - 1); } @@ -643,7 +644,7 @@ void xfs_trans_init( struct xfs_mount *mp) { - struct xfs_trans_reservations *resp = &mp->m_reservations; + struct xfs_trans_reservations *resp = m_tresp(mp); /* * The following transactions are logged in physical format and @@ -862,12 +863,10 @@ xfs_trans_dup( */ int xfs_trans_reserve( - xfs_trans_t *tp, - uint blocks, - uint logspace, - uint rtextents, - uint flags, - uint logcount) + struct xfs_trans *tp, + struct xfs_trans_res *tresp, + uint blocks, + uint rtextents) { int error = 0; int rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0; @@ -893,13 +892,15 @@ xfs_trans_reserve( /* * Reserve the log space needed for this transaction. */ - if (logspace > 0) { + if (tresp->tr_logres > 0) { bool permanent = false; - ASSERT(tp->t_log_res == 0 || tp->t_log_res == logspace); - ASSERT(tp->t_log_count == 0 || tp->t_log_count == logcount); + ASSERT(tp->t_log_res == 0 || + tp->t_log_res == tresp->tr_logres); + ASSERT(tp->t_log_count == 0 || + tp->t_log_count == tresp->tr_logcount); - if (flags & XFS_TRANS_PERM_LOG_RES) { + if (tresp->tr_logflags & XFS_TRANS_PERM_LOG_RES) { tp->t_flags |= XFS_TRANS_PERM_LOG_RES; permanent = true; } else { @@ -908,20 +909,21 @@ xfs_trans_reserve( } if (tp->t_ticket != NULL) { - ASSERT(flags & XFS_TRANS_PERM_LOG_RES); + ASSERT(tresp->tr_logflags & XFS_TRANS_PERM_LOG_RES); error = xfs_log_regrant(tp->t_mountp, tp->t_ticket); } else { - error = xfs_log_reserve(tp->t_mountp, logspace, - logcount, &tp->t_ticket, - XFS_TRANSACTION, permanent, - tp->t_type); + error = xfs_log_reserve(tp->t_mountp, + tresp->tr_logres, + tresp->tr_logcount, + &tp->t_ticket, XFS_TRANSACTION, + permanent, tp->t_type); } if (error) goto undo_blocks; - tp->t_log_res = logspace; - tp->t_log_count = logcount; + tp->t_log_res = tresp->tr_logres; + tp->t_log_count = tresp->tr_logcount; } /* @@ -946,10 +948,10 @@ xfs_trans_reserve( * reservations which have already been performed. */ undo_log: - if (logspace > 0) { + if (tresp->tr_logres > 0) { int log_flags; - if (flags & XFS_TRANS_PERM_LOG_RES) { + if (tresp->tr_logflags & XFS_TRANS_PERM_LOG_RES) { log_flags = XFS_LOG_REL_PERM_RESERV; } else { log_flags = 0; @@ -1696,7 +1698,7 @@ xfs_trans_roll( struct xfs_inode *dp) { struct xfs_trans *trans; - unsigned int logres, count; + struct xfs_trans_res tres; int error; /* @@ -1708,8 +1710,8 @@ xfs_trans_roll( /* * Copy the critical parameters from one trans to the next. */ - logres = trans->t_log_res; - count = trans->t_log_count; + tres.tr_logres = trans->t_log_res; + tres.tr_logcount = trans->t_log_count; *tpp = xfs_trans_dup(trans); /* @@ -1740,8 +1742,8 @@ xfs_trans_roll( * across this call, or that anything that is locked be logged in * the prior and the next transactions. */ - error = xfs_trans_reserve(trans, 0, logres, 0, - XFS_TRANS_PERM_LOG_RES, count); + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; + error = xfs_trans_reserve(trans, &tres, 0, 0); /* * Ensure that the inode is in the new transaction and locked. */ diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 6177040..8049f55 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -322,6 +322,7 @@ struct xfs_log_iovec; struct xfs_log_item_desc; struct xfs_mount; struct xfs_trans; +struct xfs_trans_res; struct xfs_dquot_acct; struct xfs_busy_extent; @@ -458,7 +459,7 @@ typedef struct xfs_trans { xfs_trans_t *xfs_trans_alloc(struct xfs_mount *, uint); xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint, xfs_km_flags_t); xfs_trans_t *xfs_trans_dup(xfs_trans_t *); -int xfs_trans_reserve(xfs_trans_t *, uint, uint, uint, +int xfs_trans_reserve(struct xfs_trans *, struct xfs_trans_res *, uint, uint); void xfs_trans_mod_sb(xfs_trans_t *, uint, int64_t); diff --git a/fs/xfs/xfs_utils.c b/fs/xfs/xfs_utils.c index 0025c78..5795ced 100644 --- a/fs/xfs/xfs_utils.c +++ b/fs/xfs/xfs_utils.c @@ -66,8 +66,6 @@ xfs_dir_ialloc( xfs_inode_t *ip; xfs_buf_t *ialloc_context = NULL; int code; - uint log_res; - uint log_count; void *dqinfo; uint tflags; @@ -113,6 +111,8 @@ xfs_dir_ialloc( * to succeed the second time. */ if (ialloc_context) { + struct xfs_trans_res tres; + /* * Normally, xfs_trans_commit releases all the locks. * We call bhold to hang on to the ialloc_context across @@ -125,8 +125,8 @@ xfs_dir_ialloc( * Save the log reservation so we can use * them in the next transaction. */ - log_res = xfs_trans_get_log_res(tp); - log_count = xfs_trans_get_log_count(tp); + tres.tr_logres = xfs_trans_get_log_res(tp); + tres.tr_logcount = xfs_trans_get_log_count(tp); /* * We want the quota changes to be associated with the next @@ -169,8 +169,9 @@ xfs_dir_ialloc( * reference that we gained in xfs_trans_dup() */ xfs_log_ticket_put(tp->t_ticket); - code = xfs_trans_reserve(tp, 0, log_res, 0, - XFS_TRANS_PERM_LOG_RES, log_count); + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; + code = xfs_trans_reserve(tp, &tres, 0, 0); + /* * Re-attach the quota info that we detached from prev trx. */ diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..503193c 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -110,10 +110,7 @@ xfs_free_eofblocks( } } - error = xfs_trans_reserve(tp, 0, - XFS_ITRUNCATE_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_itruncate, 0, 0); if (error) { ASSERT(XFS_FORCED_SHUTDOWN(mp)); xfs_trans_cancel(tp, 0); @@ -255,13 +252,14 @@ int xfs_inactive( xfs_inode_t *ip) { - xfs_bmap_free_t free_list; - xfs_fsblock_t first_block; - int committed; - xfs_trans_t *tp; - xfs_mount_t *mp; - int error; - int truncate = 0; + xfs_bmap_free_t free_list; + xfs_fsblock_t first_block; + int committed; + struct xfs_trans *tp; + struct xfs_mount *mp; + struct xfs_trans_res *tresp; + int error; + int truncate = 0; /* * If the inode is already free, then there can be nothing @@ -305,13 +303,10 @@ xfs_inactive( return VN_INACTIVE_CACHE; tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE); - error = xfs_trans_reserve(tp, 0, - (truncate || S_ISLNK(ip->i_d.di_mode)) ? - XFS_ITRUNCATE_LOG_RES(mp) : - XFS_IFREE_LOG_RES(mp), - 0, - XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); + tresp = (truncate || S_ISLNK(ip->i_d.di_mode)) ? + &m_tresp(mp)->tr_itruncate : &m_tresp(mp)->tr_ifree; + + error = xfs_trans_reserve(tp, tresp, 0, 0); if (error) { ASSERT(XFS_FORCED_SHUTDOWN(mp)); xfs_trans_cancel(tp, 0); @@ -365,10 +360,7 @@ xfs_inactive( goto out; tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE); - error = xfs_trans_reserve(tp, 0, - XFS_IFREE_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, - XFS_INACTIVE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_ifree, 0, 0); if (error) { xfs_trans_cancel(tp, 0); goto out; @@ -498,9 +490,8 @@ xfs_create( prid_t prid; struct xfs_dquot *udqp = NULL; struct xfs_dquot *gdqp = NULL; + struct xfs_trans_res tres; uint resblks; - uint log_res; - uint log_count; trace_xfs_create(dp, name); @@ -523,13 +514,13 @@ xfs_create( if (is_dir) { rdev = 0; resblks = XFS_MKDIR_SPACE_RES(mp, name->len); - log_res = XFS_MKDIR_LOG_RES(mp); - log_count = XFS_MKDIR_LOG_COUNT; + tres.tr_logres = m_tresp(mp)->tr_mkdir.tr_logres; + tres.tr_logcount = XFS_MKDIR_LOG_COUNT; tp = xfs_trans_alloc(mp, XFS_TRANS_MKDIR); } else { resblks = XFS_CREATE_SPACE_RES(mp, name->len); - log_res = XFS_CREATE_LOG_RES(mp); - log_count = XFS_CREATE_LOG_COUNT; + tres.tr_logres = m_tresp(mp)->tr_create.tr_logres; + tres.tr_logcount = XFS_CREATE_LOG_COUNT; tp = xfs_trans_alloc(mp, XFS_TRANS_CREATE); } @@ -541,19 +532,17 @@ xfs_create( * the case we'll drop the one we have and get a more * appropriate transaction later. */ - error = xfs_trans_reserve(tp, resblks, log_res, 0, - XFS_TRANS_PERM_LOG_RES, log_count); + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; + error = xfs_trans_reserve(tp, &tres, resblks, 0); if (error == ENOSPC) { /* flush outstanding delalloc blocks and retry */ xfs_flush_inodes(mp); - error = xfs_trans_reserve(tp, resblks, log_res, 0, - XFS_TRANS_PERM_LOG_RES, log_count); + error = xfs_trans_reserve(tp, &tres, resblks, 0); } if (error == ENOSPC) { /* No space at all so try a "no-allocation" reservation */ resblks = 0; - error = xfs_trans_reserve(tp, 0, log_res, 0, - XFS_TRANS_PERM_LOG_RES, log_count); + error = xfs_trans_reserve(tp, &tres, 0, 0); } if (error) { cancel_flags = 0; @@ -902,12 +891,10 @@ xfs_remove( * block from the directory. */ resblks = XFS_REMOVE_SPACE_RES(mp); - error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, log_count); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, resblks, 0); if (error == ENOSPC) { resblks = 0; - error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, log_count); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, 0, 0); } if (error) { ASSERT(error != ENOSPC); @@ -1049,12 +1036,10 @@ xfs_link( tp = xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags = XFS_TRANS_RELEASE_LOG_RES; resblks = XFS_LINK_SPACE_RES(mp, target_name->len); - error = xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_link, resblks, 0); if (error == ENOSPC) { resblks = 0; - error = xfs_trans_reserve(tp, 0, XFS_LINK_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_link, 0, 0); } if (error) { cancel_flags = 0; @@ -1136,7 +1121,7 @@ xfs_set_dmattrs( return XFS_ERROR(EIO); tp = xfs_trans_alloc(mp, XFS_TRANS_SET_DMATTRS); - error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES (mp), 0, 0, 0); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_ichange, 0, 0); if (error) { xfs_trans_cancel(tp, 0); return error; @@ -1264,10 +1249,8 @@ xfs_alloc_file_space( * Allocate and setup the transaction. */ tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); - error = xfs_trans_reserve(tp, resblks, - XFS_WRITE_LOG_RES(mp), resrtextents, - XFS_TRANS_PERM_LOG_RES, - XFS_WRITE_LOG_COUNT); + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_write, + resblks, resrtextents); /* * Check for running out of space */ @@ -1557,13 +1540,8 @@ xfs_free_file_space( */ tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); tp->t_flags |= XFS_TRANS_RESERVE; - error = xfs_trans_reserve(tp, - resblks, - XFS_WRITE_LOG_RES(mp), - 0, - XFS_TRANS_PERM_LOG_RES, - XFS_WRITE_LOG_COUNT); - + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_write, + resblks, 0); /* * check for running out of space */ @@ -1837,8 +1815,8 @@ xfs_change_file_space( */ tp = xfs_trans_alloc(mp, XFS_TRANS_WRITEID); - if ((error = xfs_trans_reserve(tp, 0, XFS_WRITEID_LOG_RES(mp), - 0, 0, 0))) { + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_writeid, 0, 0); + if (error) { /* ASSERT(0); */ xfs_trans_cancel(tp, 0); return error; -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:38:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1C5047F3F for ; Fri, 17 May 2013 00:38:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D1BB88F8040 for ; Thu, 16 May 2013 22:38:45 -0700 (PDT) X-ASG-Debug-ID: 1368769124-04bdf042233494d0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id pd2l0kubzk8nDKqQ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:44 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5cfTW031511 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:42 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cgZj014305 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:43 GMT Received: from abhmt118.oracle.com (abhmt118.oracle.com [141.146.116.70]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5cfMl029761 for ; Fri, 17 May 2013 05:38:42 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:41 -0700 Message-ID: <5195C25F.3000709@oracle.com> Date: Fri, 17 May 2013 13:38:39 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 6/8] xfs: Refactor xfs_ticket_alloc() to extract a new helper Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 6/8] xfs: Refactor xfs_ticket_alloc() to extract a new helper Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769124 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Refactor xfs_ticket_alloc() to extract a new helper, i.e. xfs_log_calc_unit_res(). This helper would be used to calcaulation the total log reservation size by adding extra log operation/transation headers for a new log ticket. Signed-off-by: Jie Liu --- fs/xfs/xfs_log.c | 53 +++++++++++++++++++++++++++++++++++------------------ fs/xfs/xfs_log.h | 1 + 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index b345a7c..304b3d0 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -3377,24 +3377,17 @@ xfs_log_ticket_get( } /* - * Allocate and initialise a new log ticket. + * Figure out the total log space unit (in bytes) that would be + * required for a log ticket. */ -struct xlog_ticket * -xlog_ticket_alloc( - struct xlog *log, - int unit_bytes, - int cnt, - char client, - bool permanent, - xfs_km_flags_t alloc_flags) +int +xfs_log_calc_unit_res( + struct xfs_mount *mp, + int unit_bytes) { - struct xlog_ticket *tic; - uint num_headers; - int iclog_space; - - tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); - if (!tic) - return NULL; + struct xlog *log = mp->m_log; + int iclog_space; + uint num_headers; /* * Permanent reservations have up to 'cnt'-1 active log operations @@ -3478,11 +3471,35 @@ xlog_ticket_alloc( unit_bytes += 2*BBSIZE; } + return unit_bytes; +} + +/* + * Allocate and initialise a new log ticket. + */ +struct xlog_ticket * +xlog_ticket_alloc( + struct xlog *log, + int unit_bytes, + int cnt, + char client, + bool permanent, + xfs_km_flags_t alloc_flags) +{ + struct xlog_ticket *tic; + int unit_res; + + unit_res = xfs_log_calc_unit_res(log->l_mp, unit_bytes); + + tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); + if (!tic) + return NULL; + atomic_set(&tic->t_ref, 1); tic->t_task = current; INIT_LIST_HEAD(&tic->t_queue); - tic->t_unit_res = unit_bytes; - tic->t_curr_res = unit_bytes; + tic->t_unit_res = unit_res; + tic->t_curr_res = unit_res; tic->t_cnt = cnt; tic->t_ocnt = cnt; tic->t_tid = prandom_u32(); diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h index 5caee96..8424291 100644 --- a/fs/xfs/xfs_log.h +++ b/fs/xfs/xfs_log.h @@ -184,6 +184,7 @@ bool xfs_log_item_in_current_chkpt(struct xfs_log_item *lip); void xfs_log_work_queue(struct xfs_mount *mp); void xfs_log_worker(struct work_struct *work); void xfs_log_quiesce(struct xfs_mount *mp); +int xfs_log_calc_unit_res(struct xfs_mount *mp, int unit_bytes); #endif #endif /* __XFS_LOG_H__ */ -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:38:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C6B297F50 for ; Fri, 17 May 2013 00:38:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 60DA8AC04D for ; Thu, 16 May 2013 22:38:58 -0700 (PDT) X-ASG-Debug-ID: 1368769137-04bdf04224349530001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id Rvec2hoPzhpRq5g5 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:38:57 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5ctum006410 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:38:56 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5ct47000266 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:38:55 GMT Received: from abhmt104.oracle.com (abhmt104.oracle.com [141.146.116.56]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5ctPD009569 for ; Fri, 17 May 2013 05:38:55 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:38:54 -0700 Message-ID: <5195C26C.4010406@oracle.com> Date: Fri, 17 May 2013 13:38:52 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 8/8] xfs: Validate log space at mount time Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 8/8] xfs: Validate log space at mount time Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368769137 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu Validate log space during log mount stage, the underlying function will drop a warning message via syslog in critical level if the log space is too small or too large. Signed-off-by: Jie Liu --- fs/xfs/xfs_log.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 304b3d0..2a631d9 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -30,6 +30,7 @@ #include "xfs_alloc_btree.h" #include "xfs_ialloc_btree.h" #include "xfs_log_recover.h" +#include "xfs_log_rlimit.h" #include "xfs_trans_priv.h" #include "xfs_dinode.h" #include "xfs_inode.h" @@ -631,6 +632,17 @@ xfs_log_mount( } /* + * Validate the given log space and drop a critical message via syslog + * if the log size is too small that would lead to some unexpected + * situations in transaction log space reservation stage. + * Note: we can't just reject the mount if the validation fails. This + * would mean that people would have to downgrade their kernel just to + * remedy the situation as there is no way to grow the log (short of + * black magic surgery with xfs_db). + */ + xfs_log_validate_logspace(mp); + + /* * Initialize the AIL now we have a log. */ error = xfs_trans_ail_init(mp); -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:39:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 076E27F53 for ; Fri, 17 May 2013 00:39:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E973C30413C for ; Thu, 16 May 2013 22:39:04 -0700 (PDT) X-ASG-Debug-ID: 1368769143-04cb6c53a4342d20001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id F3CDvNkcw3AkopQT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:39:03 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5d1Xh031881 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:39:01 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5d1JZ011757 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:39:02 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5d19Z015045 for ; Fri, 17 May 2013 05:39:01 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:39:01 -0700 Message-ID: <5195C273.1050703@oracle.com> Date: Fri, 17 May 2013 13:38:59 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 2/8] xfs: Introduce tr_fsyncts to m_reservation Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 2/8] xfs: Introduce tr_fsyncts to m_reservation Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769143 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Jie Liu A preparation step. For now fsync_ts transaction use the pre-calculated log reservation size of tr_swrite. This patch introduce a new item tr_fsyncts to mp->m_reservations structure so that we can fetch the log reservation value for it in a same manner to others. Signed-off-by: Jie Liu --- fs/xfs/xfs_mount.h | 1 + fs/xfs/xfs_trans.c | 1 + fs/xfs/xfs_trans.h | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 474826e..00d33f6 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -59,6 +59,7 @@ typedef struct xfs_trans_reservations { struct xfs_trans_res tr_qm_quotaoff; /* turn quota off */ struct xfs_trans_res tr_qm_equotaoff;/* end of turn quota off */ struct xfs_trans_res tr_sb; /* modify superblock */ + struct xfs_trans_res tr_fsyncts; /* update timestamps on fsync */ } xfs_trans_reservations_t; #ifndef __KERNEL__ diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 8f38901..f1ccb2d 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -733,6 +733,7 @@ xfs_trans_init( resp->tr_ichange.tr_logres = xfs_calc_ichange_reservation(mp); resp->tr_growdata.tr_logres = xfs_calc_growdata_reservation(mp); resp->tr_swrite.tr_logres = xfs_calc_swrite_reservation(mp); + resp->tr_fsyncts.tr_logres = xfs_calc_swrite_reservation(mp); resp->tr_writeid.tr_logres = xfs_calc_writeid_reservation(mp); resp->tr_attrsetrt.tr_logres = xfs_calc_attrsetrt_reservation(mp); resp->tr_clearagi.tr_logres = xfs_calc_clear_agi_bucket_reservation(mp); diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 15a6031..509ad4d 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -254,7 +254,7 @@ struct xfs_log_item_desc { * Logging the inode timestamps on an fsync -- same as SWRITE * as long as SWRITE logs the entire inode core */ -#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) +#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_fsyncts.tr_logres) #define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) #define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork.tr_logres) #define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm.tr_logres) -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:39:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C0EBC7F5D for ; Fri, 17 May 2013 00:39:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3FB92AC04E for ; Thu, 16 May 2013 22:39:14 -0700 (PDT) X-ASG-Debug-ID: 1368769152-04cb6c53a4342d40001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id trWRphk0ewTMHFle (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:39:12 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5dB61006775 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 05:39:12 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5dAJ4000899 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 05:39:11 GMT Received: from abhmt111.oracle.com (abhmt111.oracle.com [141.146.116.63]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5dAP0015262 for ; Fri, 17 May 2013 05:39:10 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:39:10 -0700 Message-ID: <5195C279.3060502@oracle.com> Date: Fri, 17 May 2013 13:39:05 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368769152 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) From: Jie Liu Add source files for xfs_log_rlimit.[c|h]. The new source would be used for the log space validation. Signed-off-by: Jie Liu --- fs/xfs/Makefile | 3 +- fs/xfs/xfs_log_rlimit.c | 148 +++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_log_rlimit.h | 25 ++++++++ fs/xfs/xfs_mount.h | 3 + 4 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 fs/xfs/xfs_log_rlimit.c create mode 100644 fs/xfs/xfs_log_rlimit.h diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile index 6313b69..7e7a49d 100644 --- a/fs/xfs/Makefile +++ b/fs/xfs/Makefile @@ -75,7 +75,8 @@ xfs-y += xfs_alloc.o \ xfs_log_recover.o \ xfs_mount.o \ xfs_symlink.o \ - xfs_trans.o + xfs_trans.o \ + xfs_log_rlimit.o # low-level transaction/log code xfs-y += xfs_log.o \ diff --git a/fs/xfs/xfs_log_rlimit.c b/fs/xfs/xfs_log_rlimit.c new file mode 100644 index 0000000..3e84d46 --- /dev/null +++ b/fs/xfs/xfs_log_rlimit.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2013 Jie Liu. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_sb.h" +#include "xfs_mount.h" +#include "xfs_trans_space.h" +#include "xfs_bmap_btree.h" +#include "xfs_inode.h" +#include "xfs_log.h" +#include "xfs_log_priv.h" +#include "xfs_da_btree.h" +#include "xfs_attr_leaf.h" + +void +xfs_log_adjust_max_attrsetm_res( + struct xfs_mount *mp) +{ + int size; + int nblks; + int res; + + /* + * Calculate the maximum length in bytes that would be required + * for a local attribute value as large attributes out of line + * are not logged. + */ + size = xfs_attr_leaf_entsize_local_max(mp->m_sb.sb_blocksize) - + MAXNAMELEN - 1; + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); + nblks += XFS_B_TO_FSB(mp, size); + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); + + res = m_tresp(mp)->tr_attrsetm.tr_logres + + m_tresp(mp)->tr_attrsetrt.tr_logres * nblks; + mp->m_reservations.tr_attrsetm.tr_logres = res; +} + +/* + * Iterate over the log space reservation table to figure out and return + * the maximum one in terms of the pre-calculated values which were done + * at mount time. + */ +void +xfs_log_get_max_trans_res( + struct xfs_mount *mp, + struct xfs_trans_res *max_tresp) +{ + struct xfs_trans_reservations *mtresp = m_tresp(mp); + struct xfs_trans_res tres_items[XFS_TRANS_RES_NUM]; + struct xfs_trans_res *tresp; + int i, logspace = 0; + + xfs_log_adjust_max_attrsetm_res(mp); + + memcpy(tres_items, mtresp, sizeof(*mtresp)); + for (i = 0; i < ARRAY_SIZE(tres_items); i++) { + struct xfs_trans_res *p = &tres_items[i]; + int tmp = p->tr_logcount > 1 ? + p->tr_logres * p->tr_logcount : + p->tr_logres; + if (logspace < tmp) { + logspace = tmp; + tresp = p; + } + } + + *max_tresp = *tresp; +} + +/* + * Verify if the configured log space is sufficient or not for the specified + * log stripe unit. + */ +void +xfs_log_validate_logspace( + struct xfs_mount *mp) +{ + struct xlog *log = mp->m_log; + struct xfs_trans_res tres; + int maxlres; + int minlblks = 0, lsunit = 0; + + xfs_log_get_max_trans_res(mp, &tres); + + maxlres = xfs_log_calc_unit_res(mp, tres.tr_logres); + maxlres = tres.tr_logcount > 1 ? maxlres * tres.tr_logcount : maxlres; + + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && + log->l_mp->m_sb.sb_logsunit > 1) + lsunit = BTOBB(log->l_mp->m_sb.sb_logsunit); + + /* + * Two factors should be taken into account for calculating the minimum + * log space. + * 1) The fundamental limitation is that no single transaction can be + * larger than half size of the log. + * 2) If the lsunit option is specified, a transaction requires 2 LSU + * for the reservation because there are two log writes that can + * require padding - the transaction data and the commit record which + * are written separately and both can require padding to the LSU. + * Consider that we can have an active CIL reservation holding 2*LSU, + * but the CIL is not over a push threshold, in this case, if we + * don't have enough log space for at one new transaction, which + * includes another 2*LSU in the reservation, we will run into dead + * loop situation in log space grant procedure. i.e. + * xlog_grant_head_wait(). + * + * Hence the log size needs to be able to contain two maximally sized + * and padded transactions, which is (2 * (2 * LSU + maxlres)). + * + * Also, the log size should be a multiple of the log stripe unit, round + * it up to lsunit boundary if lsunit is specified. + */ + minlblks = lsunit ? (roundup(BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : + BTOBB(maxlres) * 2; + + if (log->l_logBBsize < minlblks) { + xfs_crit(mp, + "Log size %d blocks too small, minimu size is %d blocks", + log->l_logBBsize, minlblks); + } + if (log->l_logBBsize > XFS_MAX_LOG_BLOCKS) { + xfs_crit(mp, + "Log size %d blocks too large, maximum size is %lld blocks", + log->l_logBBsize, XFS_MAX_LOG_BLOCKS); + } + if (log->l_logsize > XFS_MAX_LOG_BYTES) { + xfs_crit(mp, + "log size %lld bytes too large, maximum size is %lld bytes", + (long long)(log->l_logsize), XFS_MAX_LOG_BYTES); + } +} diff --git a/fs/xfs/xfs_log_rlimit.h b/fs/xfs/xfs_log_rlimit.h new file mode 100644 index 0000000..93d8a0e --- /dev/null +++ b/fs/xfs/xfs_log_rlimit.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2013 Jie Liu. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_LOG_RLIMIT_H__ +#define __XFS_LOG_RLIMIT_H__ + +void xfs_log_adjust_max_attrsetm_res(struct xfs_mount *); +void xfs_log_get_max_trans_res(struct xfs_mount *, struct xfs_trans_res *); +void xfs_log_validate_logspace(struct xfs_mount *); + +#endif /* __XFS_LOG_PRIV_H__ */ diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 27ae8a9..2b469a5 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -62,6 +62,9 @@ typedef struct xfs_trans_reservations { struct xfs_trans_res tr_fsyncts; /* update timestamps on fsync */ } xfs_trans_reservations_t; +#define XFS_TRANS_RES_NUM (sizeof(struct xfs_trans_reservations) / \ + sizeof(struct xfs_trans_res)) + #ifndef __KERNEL__ #define xfs_daddr_to_agno(mp,d) \ -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 00:40:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D7DF57F50 for ; Fri, 17 May 2013 00:40:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 65814AC04D for ; Thu, 16 May 2013 22:40:27 -0700 (PDT) X-ASG-Debug-ID: 1368769226-04cbb05fe4340f50001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id XqMGdmCC134F1p6X (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 May 2013 22:40:26 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H5eMhw001312 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 May 2013 05:40:22 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5eMw6013160 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 17 May 2013 05:40:23 GMT Received: from abhmt113.oracle.com (abhmt113.oracle.com [141.146.116.65]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H5eMsG015530; Fri, 17 May 2013 05:40:22 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 22:40:22 -0700 Message-ID: <5195C2C3.3000603@oracle.com> Date: Fri, 17 May 2013 13:40:19 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Chandra Seetharaman , xfs@oss.sgi.com Subject: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> <51906528.3030307@oracle.com> <20130517030125.GT29466@dastard> X-ASG-Orig-Subj: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. In-Reply-To: <20130517030125.GT29466@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368769226 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/17/2013 11:01 AM, Dave Chinner wrote: > On Mon, May 13, 2013 at 11:59:36AM +0800, Jeff Liu wrote: >> Hi, >> >>> +struct xfs_inode * >>> +xfs_dq_to_quota_inode(struct xfs_dquot *dqp) >>> +{ >>> + if (XFS_QM_ISUDQ(dqp)) >>> + return dqp->q_mount->m_quotainfo->qi_uquotaip; >>> + if (XFS_QM_ISGDQ(dqp)) >>> + return dqp->q_mount->m_quotainfo->qi_gquotaip; >>> + ASSERT(XFS_QM_ISPDQ(dqp)); >>> + return dqp->q_mount->m_quotainfo->qi_pquotaip; >>> +} >> Is it better to replace above conditional judgment with 'switch...case'? >> i.e. >> static inline struct xfs_inode * >> xfs_dq_to_qip(struct xfs_dquot *dqp) >> { >> switch (dqp->dq_flags) { >> case XFS_DQ_USER: >> return dqp->q_mount->m_quotainfo->qi_uquotaip; >> case XFS_DQ_GROUP: >> return dqp->q_mount->m_quotainfo->qi_gqoutaip; >> case XFS_DQ_PROJ: >> return dqp->q_mount->m_quotainfo->qi_pquotaip; >> } > > Doesn't work because dq_flags can have other fields set in it (e.g > XFS_DQ_DIRTY). It would need to be: > > switch (dqp->dq_flags & XFS_DQ_ALLTYPES) { > .... > } Ah, yep. thanks for the teaching. :) Thanks, -Jeff From pibic@ufra.edu.br Fri May 17 00:50:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.5 required=5.0 tests=DEAR_SOMETHING, FREEMAIL_REPLYTO,SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BCCD87F37 for ; Fri, 17 May 2013 00:50:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 48E47AC04F for ; Thu, 16 May 2013 22:50:15 -0700 (PDT) X-ASG-Debug-ID: 1368769813-04cbb05fe5341680001-NocioJ Received: from correio2.ufra.edu.br (pop3.ufra.edu.br [200.129.150.6]) by cuda.sgi.com with ESMTP id WqCGCOqYW8lezJXd for ; Thu, 16 May 2013 22:50:13 -0700 (PDT) X-Barracuda-Envelope-From: pibic@ufra.edu.br X-Barracuda-Apparent-Source-IP: 200.129.150.6 Received: from localhost (localhost.localdomain [127.0.0.1]) by correio2.ufra.edu.br (Postfix) with ESMTP id 98C099CA58A; Fri, 17 May 2013 02:50:15 -0300 (BRT) X-Virus-Scanned: amavisd-new at ufra.edu.br Received: from correio2.ufra.edu.br ([127.0.0.1]) by localhost (correio2.ufra.edu.br [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Hop20KG5Wy2M; Fri, 17 May 2013 02:50:15 -0300 (BRT) Received: from correio2.ufra.edu.br (correio2.ufra.edu.br [10.10.0.6]) by correio2.ufra.edu.br (Postfix) with ESMTP id C0F2C9CA589; Fri, 17 May 2013 02:50:14 -0300 (BRT) Date: Fri, 17 May 2013 02:50:14 -0300 (BRT) From: "mrs.jessica powell" Reply-To: "jessicapowell.usa@gmail.com" Message-ID: <1247737941.30982.1368769814692.JavaMail.root@ufra.edu.br> Subject: 2013 USA (W.C.H.R) CONFERENCE/INVITATION!!! MIME-Version: 1.0 X-ASG-Orig-Subj: 2013 USA (W.C.H.R) CONFERENCE/INVITATION!!! Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [41.82.173.69] X-Mailer: Zimbra 7.2.2_GA_2857 (ZimbraWebClient - FF3.0 (Win)/7.2.2_GA_2852) To: undisclosed-recipients:; X-Barracuda-Connect: pop3.ufra.edu.br[200.129.150.6] X-Barracuda-Start-Time: 1368769813 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.96 X-Barracuda-Spam-Status: No, SCORE=0.96 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620a, PLING_PLING X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131192 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.46 PLING_PLING Subject has lots of exclamation marks 0.50 BSF_SC0_SA620a Custom Rule SA620a Dear Sir/Madam, You are cordially invited to participate in the forth-coming conference / W= orld Conference on Human Rights (W.C.H.R) against Child Protection & HIV/AI= DS Treatment, Prostitution, Sex Work and forced Labor. Which is scheduled = to take place from July 20th =E2=80=93 24th 2013 in 228 Park Avenue South N= ew York U.S.A, and from 26th =E2=80=93 30th of July 2013 in Dakar-Senegal. = At Dakar Conference Center Dakar-Senegal, West -Africa. We are inviting peo= ple with conscience/ NGO=E2=80=99s, Individuals and cooperate organization = from all countries around the world, The aims of the conference are to bring together researchers and practition= ers in an effort to lay the ground work for future collaborative research, = advocacy, and program development as well as to educate social service, hea= lth care, and criminal justice professionals on human trafficking and the n= eeds for those victimized by the commercial sex industry. Note that all interested delegates that requires entry visa to enter the Un= ited States to attend this meeting will be assisted by the organization, in= obtaining the visa in their passport. Free air round trip tickets to atten= d this meeting will be provided to all participants. The Workshop welcomes = paper presentation from any interested participants willing to present pape= rs during the meeting. For registration information you are to contact the conference secretariat = via- Email:WCHR.usa.secretaryoffice@aim.com Please share the information with your colleagues. Sincerely, mrs.jessica powell Email:jessicapowell.usa@gmail.com (P.H.D) Activity Cordinator From dan.carpenter@oracle.com Fri May 17 01:32:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EC8D97F37 for ; Fri, 17 May 2013 01:32:16 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 79E22AC038 for ; Thu, 16 May 2013 23:32:13 -0700 (PDT) X-ASG-Debug-ID: 1368772331-04cb6c53a3345540001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id Wu9vWHsAxpUPe1HW (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 16 May 2013 23:32:12 -0700 (PDT) X-Barracuda-Envelope-From: dan.carpenter@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H6W7kg019601 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 May 2013 06:32:07 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H6W5Fb016677 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 17 May 2013 06:32:06 GMT Received: from abhmt118.oracle.com (abhmt118.oracle.com [141.146.116.70]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H6W57f012845; Fri, 17 May 2013 06:32:05 GMT Received: from mwanda (/197.237.137.111) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 16 May 2013 23:32:04 -0700 Date: Fri, 17 May 2013 09:31:59 +0300 From: Dan Carpenter To: Dave Chinner Cc: Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: bug widening binary "not" operation Message-ID: <20130517063159.GO1360@mwanda> X-ASG-Orig-Subj: Re: [patch] xfs: bug widening binary "not" operation References: <20130516075330.GB7494@elgon.mountain> <20130516230314.GH24635@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130516230314.GH24635@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368772332 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131194 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Fri, May 17, 2013 at 09:03:14AM +1000, Dave Chinner wrote: > As it is, the static checker missed the: > > rounding = max_t(uint, ....); > > The line before the above usage. I posted a patch to fix this this > 2 weeks ago here: > > http://oss.sgi.com/pipermail/xfs/2013-May/025986.html > Ah. Grand. There is still a problem with the max_t(). The shift operation will wrap before we do the cast. It should be: - rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); + rounding = max_t(xfs_off_t, 1ULL << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); regards, dan carpenter From mlsemon35@gmail.com Fri May 17 02:52:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 115BD7F37 for ; Fri, 17 May 2013 02:52:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 94C90AC004 for ; Fri, 17 May 2013 00:52:00 -0700 (PDT) X-ASG-Debug-ID: 1368777118-04cb6c53a3348f90001-NocioJ Received: from mail-ia0-f169.google.com (mail-ia0-f169.google.com [209.85.210.169]) by cuda.sgi.com with ESMTP id Ar2xMOKPrIO4YLAf (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 00:51:58 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.169 X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.169] Received: by mail-ia0-f169.google.com with SMTP id k38so4650637iah.0 for ; Fri, 17 May 2013 00:51:58 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.169] X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.169] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=M4TwN3QxErjDMWEQQeDBxYYnhOZ/MZXfPTgl/Ma1GM4=; b=IZZn36PHgJ8wGnUpjugM5M24coo2T1twS6rFuV3mUCAyi8ZV6NenjGZBdzbVNznedr wb4s7+a3H8twfe5Posf3Ov36c8Y+RsfJ64Uf7jlPHV2f7G3OUZB1w3iC8x99VsSfcsC2 C1CH9rbME7qaQR5CrtCpyBqnmzc8yunuh4BLNlY8nYi2INBmd0yh6akEXIn5jwuCSVpB UuJ7MNRMzQOIz9zW7bm/Ml2NPGCEzn4CY1n7GkLnYfGpCif7f43TLyuNLMqVb0E+xMIX BwCf11BZayiXIH3zX1TQ8ypmTaglhda4Yy7Q1CvG9LIOgDoPz2C+Uxh5LovxN1yQJJps cE2A== X-Received: by 10.42.41.210 with SMTP id q18mr25436676ice.13.1368777118451; Fri, 17 May 2013 00:51:58 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id xc3sm8512905igb.10.2013.05.17.00.51.50 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 17 May 2013 00:51:57 -0700 (PDT) Message-ID: <5195E18D.50905@gmail.com> Date: Fri, 17 May 2013 03:51:41 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] References: <5195C279.3060502@oracle.com> X-ASG-Orig-Subj: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] In-Reply-To: <5195C279.3060502@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ia0-f169.google.com[209.85.210.169] X-Barracuda-Start-Time: 1368777118 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) How do I get this to build? With gcc-4.8.0, the kernel build ends like this: LINK vmlinux LD vmlinux.o MODPOST vmlinux.o GEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o LD init/built-in.o fs/built-in.o: In function `xfs_log_validate_logspace': /usr/src/kernel-git/linux/fs/xfs/xfs_log_rlimit.c:130: undefined reference to `__udivdi3' make: *** [vmlinux] Error 1 The fs/xfs section of the kernel did build without errors, though. Thanks! Michael On 05/17/2013 01:39 AM, Jeff Liu wrote: > From: Jie Liu > > Add source files for xfs_log_rlimit.[c|h]. > The new source would be used for the log space validation. > > Signed-off-by: Jie Liu > > --- > fs/xfs/Makefile | 3 +- > fs/xfs/xfs_log_rlimit.c | 148 +++++++++++++++++++++++++++++++++++++++++++++++ > fs/xfs/xfs_log_rlimit.h | 25 ++++++++ > fs/xfs/xfs_mount.h | 3 + > 4 files changed, 178 insertions(+), 1 deletion(-) > create mode 100644 fs/xfs/xfs_log_rlimit.c > create mode 100644 fs/xfs/xfs_log_rlimit.h > > diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile > index 6313b69..7e7a49d 100644 > --- a/fs/xfs/Makefile > +++ b/fs/xfs/Makefile > @@ -75,7 +75,8 @@ xfs-y += xfs_alloc.o \ > xfs_log_recover.o \ > xfs_mount.o \ > xfs_symlink.o \ > - xfs_trans.o > + xfs_trans.o \ > + xfs_log_rlimit.o > > # low-level transaction/log code > xfs-y += xfs_log.o \ > diff --git a/fs/xfs/xfs_log_rlimit.c b/fs/xfs/xfs_log_rlimit.c > new file mode 100644 > index 0000000..3e84d46 > --- /dev/null > +++ b/fs/xfs/xfs_log_rlimit.c > @@ -0,0 +1,148 @@ > +/* > + * Copyright (c) 2013 Jie Liu. > + * All Rights Reserved. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it would be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write the Free Software Foundation, > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + */ > +#include "xfs.h" > +#include "xfs_fs.h" > +#include "xfs_sb.h" > +#include "xfs_mount.h" > +#include "xfs_trans_space.h" > +#include "xfs_bmap_btree.h" > +#include "xfs_inode.h" > +#include "xfs_log.h" > +#include "xfs_log_priv.h" > +#include "xfs_da_btree.h" > +#include "xfs_attr_leaf.h" > + > +void > +xfs_log_adjust_max_attrsetm_res( > + struct xfs_mount *mp) > +{ > + int size; > + int nblks; > + int res; > + > + /* > + * Calculate the maximum length in bytes that would be required > + * for a local attribute value as large attributes out of line > + * are not logged. > + */ > + size = xfs_attr_leaf_entsize_local_max(mp->m_sb.sb_blocksize) - > + MAXNAMELEN - 1; > + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); > + nblks += XFS_B_TO_FSB(mp, size); > + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); > + > + res = m_tresp(mp)->tr_attrsetm.tr_logres + > + m_tresp(mp)->tr_attrsetrt.tr_logres * nblks; > + mp->m_reservations.tr_attrsetm.tr_logres = res; > +} > + > +/* > + * Iterate over the log space reservation table to figure out and return > + * the maximum one in terms of the pre-calculated values which were done > + * at mount time. > + */ > +void > +xfs_log_get_max_trans_res( > + struct xfs_mount *mp, > + struct xfs_trans_res *max_tresp) > +{ > + struct xfs_trans_reservations *mtresp = m_tresp(mp); > + struct xfs_trans_res tres_items[XFS_TRANS_RES_NUM]; > + struct xfs_trans_res *tresp; > + int i, logspace = 0; > + > + xfs_log_adjust_max_attrsetm_res(mp); > + > + memcpy(tres_items, mtresp, sizeof(*mtresp)); > + for (i = 0; i < ARRAY_SIZE(tres_items); i++) { > + struct xfs_trans_res *p = &tres_items[i]; > + int tmp = p->tr_logcount > 1 ? > + p->tr_logres * p->tr_logcount : > + p->tr_logres; > + if (logspace < tmp) { > + logspace = tmp; > + tresp = p; > + } > + } > + > + *max_tresp = *tresp; > +} > + > +/* > + * Verify if the configured log space is sufficient or not for the specified > + * log stripe unit. > + */ > +void > +xfs_log_validate_logspace( > + struct xfs_mount *mp) > +{ > + struct xlog *log = mp->m_log; > + struct xfs_trans_res tres; > + int maxlres; > + int minlblks = 0, lsunit = 0; > + > + xfs_log_get_max_trans_res(mp, &tres); > + > + maxlres = xfs_log_calc_unit_res(mp, tres.tr_logres); > + maxlres = tres.tr_logcount > 1 ? maxlres * tres.tr_logcount : maxlres; > + > + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && > + log->l_mp->m_sb.sb_logsunit > 1) > + lsunit = BTOBB(log->l_mp->m_sb.sb_logsunit); > + > + /* > + * Two factors should be taken into account for calculating the minimum > + * log space. > + * 1) The fundamental limitation is that no single transaction can be > + * larger than half size of the log. > + * 2) If the lsunit option is specified, a transaction requires 2 LSU > + * for the reservation because there are two log writes that can > + * require padding - the transaction data and the commit record which > + * are written separately and both can require padding to the LSU. > + * Consider that we can have an active CIL reservation holding 2*LSU, > + * but the CIL is not over a push threshold, in this case, if we > + * don't have enough log space for at one new transaction, which > + * includes another 2*LSU in the reservation, we will run into dead > + * loop situation in log space grant procedure. i.e. > + * xlog_grant_head_wait(). > + * > + * Hence the log size needs to be able to contain two maximally sized > + * and padded transactions, which is (2 * (2 * LSU + maxlres)). > + * > + * Also, the log size should be a multiple of the log stripe unit, round > + * it up to lsunit boundary if lsunit is specified. > + */ > + minlblks = lsunit ? (roundup(BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : > + BTOBB(maxlres) * 2; > + > + if (log->l_logBBsize < minlblks) { > + xfs_crit(mp, > + "Log size %d blocks too small, minimu size is %d blocks", > + log->l_logBBsize, minlblks); > + } > + if (log->l_logBBsize > XFS_MAX_LOG_BLOCKS) { > + xfs_crit(mp, > + "Log size %d blocks too large, maximum size is %lld blocks", > + log->l_logBBsize, XFS_MAX_LOG_BLOCKS); > + } > + if (log->l_logsize > XFS_MAX_LOG_BYTES) { > + xfs_crit(mp, > + "log size %lld bytes too large, maximum size is %lld bytes", > + (long long)(log->l_logsize), XFS_MAX_LOG_BYTES); > + } > +} > diff --git a/fs/xfs/xfs_log_rlimit.h b/fs/xfs/xfs_log_rlimit.h > new file mode 100644 > index 0000000..93d8a0e > --- /dev/null > +++ b/fs/xfs/xfs_log_rlimit.h > @@ -0,0 +1,25 @@ > +/* > + * Copyright (c) 2013 Jie Liu. > + * All Rights Reserved. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it would be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write the Free Software Foundation, > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + */ > +#ifndef __XFS_LOG_RLIMIT_H__ > +#define __XFS_LOG_RLIMIT_H__ > + > +void xfs_log_adjust_max_attrsetm_res(struct xfs_mount *); > +void xfs_log_get_max_trans_res(struct xfs_mount *, struct xfs_trans_res *); > +void xfs_log_validate_logspace(struct xfs_mount *); > + > +#endif /* __XFS_LOG_PRIV_H__ */ > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index 27ae8a9..2b469a5 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -62,6 +62,9 @@ typedef struct xfs_trans_reservations { > struct xfs_trans_res tr_fsyncts; /* update timestamps on fsync */ > } xfs_trans_reservations_t; > > +#define XFS_TRANS_RES_NUM (sizeof(struct xfs_trans_reservations) / \ > + sizeof(struct xfs_trans_res)) > + > #ifndef __KERNEL__ > > #define xfs_daddr_to_agno(mp,d) \ > From mlsemon35@gmail.com Fri May 17 03:37:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 693AD7F37 for ; Fri, 17 May 2013 03:37:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 567168F8037 for ; Fri, 17 May 2013 01:37:05 -0700 (PDT) X-ASG-Debug-ID: 1368779824-04cbb05fe4349970001-NocioJ Received: from mail-ie0-f182.google.com (mail-ie0-f182.google.com [209.85.223.182]) by cuda.sgi.com with ESMTP id j0eJlVXePjOOpeks (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 01:37:04 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.182 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.182] Received: by mail-ie0-f182.google.com with SMTP id a14so8644537iee.13 for ; Fri, 17 May 2013 01:37:04 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.182] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.182] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=n9DXKejepiFVwHlq5fFvj0Ti6671WDz4zFO77qshydY=; b=F3mX0AwSqzkuz2AFZLtuHF606aWaVd88/qpoMUZSHIGY6b3vBwB94gwXPOFr8zhLj0 x/6KmN3dM8MQu5rIzwA+H4atQ4ii5vUrlFaIcP/Yznw/852/y8OwuRfsHtudAE1dcS8m uRp75hx6TatiILd4VaPhZHlkYYQSPikzThgGH+5j1bzLldx4B3g9LpmrgWhSnrKx/IFD surtnmGQGui+wBI22W1gj4Oo3Ox8ZSwIzyY4NFib47HSuAliHBJ2KOjRaY/mrVkuVttD gy84GwyuipCg4fCgwQUZriILkSVEuip4/IVqqFLkUToJuYze7bkUp8Ozou68j66WOMHS j5yQ== X-Received: by 10.50.78.232 with SMTP id e8mr11746465igx.72.1368779823987; Fri, 17 May 2013 01:37:03 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id ct8sm8651414igb.7.2013.05.17.01.36.55 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 17 May 2013 01:37:03 -0700 (PDT) Message-ID: <5195EC13.2060502@gmail.com> Date: Fri, 17 May 2013 04:36:35 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] References: <5195C279.3060502@oracle.com> X-ASG-Orig-Subj: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] In-Reply-To: <5195C279.3060502@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f182.google.com[209.85.223.182] X-Barracuda-Start-Time: 1368779824 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131202 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) On 05/17/2013 01:39 AM, Jeff Liu wrote: > From: Jie Liu > > Add source files for xfs_log_rlimit.[c|h]. > The new source would be used for the log space validation. Update: To build the kernel, I'm getting by on a sysadmin hack that looks like this: --- linux/fs/xfs/xfs_log_rlimit.c.orig 2013-05-17 03:36:28.983493357 -0400 +++ linux/fs/xfs/xfs_log_rlimit.c 2013-05-17 04:21:07.090661828 -0400 @@ -127,8 +127,10 @@ * Also, the log size should be a multiple of the log stripe unit, round * it up to lsunit boundary if lsunit is specified. */ - minlblks = lsunit ? (roundup(BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : - BTOBB(maxlres) * 2; + minlblks = lsunit ? + (roundup((const int)(BTOBB(maxlres)), lsunit) + + 2 * lsunit) * 2 : + BTOBB(maxlres) * 2; if (log->l_logBBsize < minlblks) { xfs_crit(mp, However, that makes no sense. There is a roundup in that goes like this: /* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */ #define roundup(x, y) ( \ { \ const typeof(y) __y = y; \ (((x) + (__y - 1)) / __y) * __y; \ } \ ) Okay, so that gave me the inspiration to cast the type so gcc-4.8.0 wouldn't call __divdi3. But why did this make a difference? Disclaimer: I'm not a C macro guru, so I don't know which random sequence of punctuation keys would make roundup() happy. Michael From jeff.liu@oracle.com Fri May 17 04:21:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 845497F3F for ; Fri, 17 May 2013 04:21:16 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 21476AC005 for ; Fri, 17 May 2013 02:21:13 -0700 (PDT) X-ASG-Debug-ID: 1368782469-04bdf042263546a0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id yaJ1vtLI26aG4X8E (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 02:21:09 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H9L6RA029478 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 09:21:07 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H9L6cZ008347 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 09:21:07 GMT Received: from abhmt102.oracle.com (abhmt102.oracle.com [141.146.116.54]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H9L6Ln025571 for ; Fri, 17 May 2013 09:21:06 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 17 May 2013 02:21:05 -0700 Message-ID: <5195F67F.5070101@oracle.com> Date: Fri, 17 May 2013 17:21:03 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: [PATCH] xfsprogs: code sync up for log space reservation Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] xfsprogs: code sync up for log space reservation Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368782469 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131206 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, Here is a patch to sync up the kernel code changes regarding log space reservation to the xfsprogs. There have a couple of differences between the kernel and the user space. 1) A few transaction reservation item related to dquot are not synced because they are not being used in xfsprogs. 2) In xfs_log_rlimit.c, the xfs_log_validate_logspace() is not copied and the xfs_mkfs.c still use the default validate_log_space() to check the given log size. Thanks, -Jeff From: Jie Liu Sync up the kernel space code changes to the user space which are includes: 1) Sync up xfs_log_rlimit.[c|h] to libxfs and replaced two functions at mkfs/maxres.c for figuring out the max transaction reservation. 2) Add m_tresp() helper, libxfs_trans_reserve() interface refactor and propagate them to where they should be. Signed-off-by: Jie Liu --- include/libxfs.h | 9 ++- include/xfs_log_rlimit.h | 24 ++++++ include/xfs_mount.h | 72 ++++++++++------- libxfs/Makefile | 2 +- libxfs/trans.c | 10 +-- libxfs/util.c | 11 ++- libxfs/xfs_attr.c | 44 +++++------ libxfs/xfs_bmap.c | 4 +- libxfs/xfs_log_rlimit.c | 73 ++++++++++++++++++ libxfs/xfs_trans.c | 109 +++++++++++++++++++------- mkfs/maxtrres.c | 68 ++++------------ mkfs/proto.c | 61 +++++++++------ mkfs/xfs_mkfs.c | 9 ++- repair/phase6.c | 193 ++++++++++++++++++++++++---------------------- repair/phase7.c | 6 +- 15 files changed, 424 insertions(+), 271 deletions(-) create mode 100644 include/xfs_log_rlimit.h create mode 100644 libxfs/xfs_log_rlimit.c diff --git a/include/libxfs.h b/include/libxfs.h index b6e83f4..9e2a603 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -55,6 +55,7 @@ #include #include #include +#include #include #ifndef ARRAY_SIZE @@ -197,6 +198,11 @@ typedef struct xfs_mount { xfs_dablk_t m_dirfreeblk; /* blockno of dirfreeindex v2 */ } xfs_mount_t; +static inline struct xfs_trans_reservations * +m_tresp(struct xfs_mount *mp) +{ + return &mp->m_reservations; +} #define LIBXFS_MOUNT_ROOTINOS 0x0001 #define LIBXFS_MOUNT_DEBUGGER 0x0002 @@ -429,7 +435,8 @@ typedef struct xfs_trans { extern xfs_trans_t *libxfs_trans_alloc (xfs_mount_t *, int); extern xfs_trans_t *libxfs_trans_dup (xfs_trans_t *); -extern int libxfs_trans_reserve (xfs_trans_t *, uint,uint,uint,uint,uint); +extern int libxfs_trans_reserve(xfs_trans_t *, struct xfs_trans_res *, + uint, uint); extern int libxfs_trans_commit (xfs_trans_t *, uint); extern void libxfs_trans_cancel (xfs_trans_t *, int); extern void libxfs_mod_sb (xfs_trans_t *, __int64_t); diff --git a/include/xfs_log_rlimit.h b/include/xfs_log_rlimit.h new file mode 100644 index 0000000..3dff6f7 --- /dev/null +++ b/include/xfs_log_rlimit.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2013 Jie Liu. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_LOG_RLIMIT_H__ +#define __XFS_LOG_RLIMIT_H__ + +void xfs_log_adjust_max_attrsetm_res(struct xfs_mount *); +void xfs_log_get_max_trans_res(struct xfs_mount *, struct xfs_trans_res *); + +#endif /* __XFS_LOG_PRIV_H__ */ diff --git a/include/xfs_mount.h b/include/xfs_mount.h index 28bbf46..ee8928f 100644 --- a/include/xfs_mount.h +++ b/include/xfs_mount.h @@ -18,37 +18,53 @@ #ifndef __XFS_MOUNT_H__ #define __XFS_MOUNT_H__ +struct xfs_trans_res { + uint tr_logres; /* log space unit in bytes per log ticket */ + int tr_logcount; /* number of log operations per log ticket */ + int tr_logflags; /* log flags, currently only used for indicating + * a reservation request is permanent or not */ +}; + typedef struct xfs_trans_reservations { - uint tr_write; /* extent alloc trans */ - uint tr_itruncate; /* truncate trans */ - uint tr_rename; /* rename trans */ - uint tr_link; /* link trans */ - uint tr_remove; /* unlink trans */ - uint tr_symlink; /* symlink trans */ - uint tr_create; /* create trans */ - uint tr_mkdir; /* mkdir trans */ - uint tr_ifree; /* inode free trans */ - uint tr_ichange; /* inode update trans */ - uint tr_growdata; /* fs data section grow trans */ - uint tr_swrite; /* sync write inode trans */ - uint tr_addafork; /* cvt inode to attributed trans */ - uint tr_writeid; /* write setuid/setgid file */ - uint tr_attrinval; /* attr fork buffer invalidation */ - uint tr_attrsetm; /* set/create an attribute at mount time */ - uint tr_attrsetrt; /* set/create an attribute at runtime */ - uint tr_attrrm; /* remove an attribute */ - uint tr_clearagi; /* clear bad agi unlinked ino bucket */ - uint tr_growrtalloc; /* grow realtime allocations */ - uint tr_growrtzero; /* grow realtime zeroing */ - uint tr_growrtfree; /* grow realtime freeing */ - uint tr_qm_sbchange; /* change quota flags */ - uint tr_qm_setqlim; /* adjust quota limits */ - uint tr_qm_dqalloc; /* allocate quota on disk */ - uint tr_qm_quotaoff; /* turn quota off */ - uint tr_qm_equotaoff;/* end of turn quota off */ - uint tr_sb; /* modify superblock */ + struct xfs_trans_res tr_write; /* extent alloc trans */ + struct xfs_trans_res tr_itruncate; /* truncate trans */ + struct xfs_trans_res tr_rename; /* rename trans */ + struct xfs_trans_res tr_link; /* link trans */ + struct xfs_trans_res tr_remove; /* unlink trans */ + struct xfs_trans_res tr_symlink; /* symlink trans */ + struct xfs_trans_res tr_create; /* create trans */ + struct xfs_trans_res tr_mkdir; /* mkdir trans */ + struct xfs_trans_res tr_ifree; /* inode free trans */ + struct xfs_trans_res tr_ichange; /* inode update trans */ + struct xfs_trans_res tr_growdata; /* fs data section grow trans */ + struct xfs_trans_res tr_swrite; /* sync write inode trans */ + struct xfs_trans_res tr_addafork; /* cvt inode to attributed + * trans */ + struct xfs_trans_res tr_writeid; /* write setuid/setgid file */ + struct xfs_trans_res tr_attrinval; /* attr fork buffer + * invalidation */ + struct xfs_trans_res tr_attrsetm; /* set/create an attribute at + * mount time */ + struct xfs_trans_res tr_attrsetrt; /* set/create an attribute at + * runtime */ + struct xfs_trans_res tr_attrrm; /* remove an attribute */ + struct xfs_trans_res tr_clearagi; /* clear bad agi unlinked ino + * bucket */ + struct xfs_trans_res tr_growrtalloc; /* grow realtime allocations */ + struct xfs_trans_res tr_growrtzero; /* grow realtime zeroing */ + struct xfs_trans_res tr_growrtfree; /* grow realtime freeing */ + struct xfs_trans_res tr_qm_sbchange; /* change quota flags */ + struct xfs_trans_res tr_qm_setqlim; /* adjust quota limits */ + struct xfs_trans_res tr_qm_dqalloc; /* allocate quota on disk */ + struct xfs_trans_res tr_qm_quotaoff; /* turn quota off */ + struct xfs_trans_res tr_qm_equotaoff;/* end of turn quota off */ + struct xfs_trans_res tr_sb; /* modify superblock */ + struct xfs_trans_res tr_fsyncts; /* update timestamps on fsync */ } xfs_trans_reservations_t; +#define XFS_TRANS_RES_NUM (sizeof(struct xfs_trans_reservations) / \ + sizeof(struct xfs_trans_res)) + #ifndef __KERNEL__ #define xfs_daddr_to_agno(mp,d) \ diff --git a/libxfs/Makefile b/libxfs/Makefile index 28f71c8..53b48d1 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -16,7 +16,7 @@ CFILES = cache.c init.c kmem.c logitem.c radix-tree.c rdwr.c trans.c util.c \ xfs_ialloc_btree.c xfs_bmap_btree.c xfs_da_btree.c \ xfs_dir2.c xfs_dir2_leaf.c xfs_attr_leaf.c xfs_dir2_block.c \ xfs_dir2_node.c xfs_dir2_data.c xfs_dir2_sf.c xfs_bmap.c \ - xfs_mount.c xfs_rtalloc.c xfs_trans.c xfs_attr.c \ + xfs_mount.c xfs_rtalloc.c xfs_trans.c xfs_attr.c xfs_log_rlimit.c \ crc32.c CFILES += $(PKG_PLATFORM).c diff --git a/libxfs/trans.c b/libxfs/trans.c index 7cb3c8c..d27553b 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -58,12 +58,10 @@ libxfs_trans_dup( int libxfs_trans_reserve( - xfs_trans_t *tp, - uint blocks, - uint logspace, - uint rtextents, - uint flags, - uint logcount) + xfs_trans_t *tp, + struct xfs_trans_res *tres, + uint blocks, + uint rtextents) { xfs_sb_t *mpsb = &tp->t_mountp->m_sb; diff --git a/libxfs/util.c b/libxfs/util.c index 2ad4bfd..2ae66e0 100644 --- a/libxfs/util.c +++ b/libxfs/util.c @@ -442,11 +442,14 @@ libxfs_alloc_file_space( /* allocate file space until done or until there is an error */ while (allocatesize_fsb && !error) { + struct xfs_trans_res tres; + datablocks = allocatesize_fsb; tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); resblks = (uint)XFS_DIOSTRAT_SPACE_RES(mp, datablocks); - error = xfs_trans_reserve(tp, resblks, 0, 0, 0, 0); + memset(&tres, 0, sizeof(tres)); + error = xfs_trans_reserve(tp, &tres, resblks, 0); if (error) break; xfs_trans_ijoin(tp, ip, 0); @@ -528,11 +531,15 @@ libxfs_inode_alloc( } if (ialloc_context) { + struct xfs_trans_res tres; + xfs_trans_bhold(*tp, ialloc_context); ntp = xfs_trans_dup(*tp); xfs_trans_commit(*tp, 0); *tp = ntp; - if ((i = xfs_trans_reserve(*tp, 0, 0, 0, 0, 0))) { + memset(&tres, 0, sizeof(tres)); + i = xfs_trans_reserve(*tp, &tres, 0, 0); + if (i) { fprintf(stderr, _("%s: cannot reserve space: %s\n"), progname, strerror(i)); exit(1); diff --git a/libxfs/xfs_attr.c b/libxfs/xfs_attr.c index 2adf92b..7a8e0ff 100644 --- a/libxfs/xfs_attr.c +++ b/libxfs/xfs_attr.c @@ -203,19 +203,20 @@ xfs_attr_calc_size( STATIC int xfs_attr_set_int( - struct xfs_inode *dp, - struct xfs_name *name, - unsigned char *value, - int valuelen, - int flags) + struct xfs_inode *dp, + struct xfs_name *name, + unsigned char *value, + int valuelen, + int flags) { - xfs_da_args_t args; - xfs_fsblock_t firstblock; - xfs_bmap_free_t flist; - int error, err2, committed; - xfs_mount_t *mp = dp->i_mount; - int rsvd = (flags & ATTR_ROOT) != 0; - int local; + xfs_da_args_t args; + xfs_fsblock_t firstblock; + xfs_bmap_free_t flist; + int error, err2, committed; + struct xfs_mount *mp = dp->i_mount; + struct xfs_trans_res tres; + int rsvd = (flags & ATTR_ROOT) != 0; + int local; /* * Attach the dquots to the inode. @@ -275,12 +276,11 @@ xfs_attr_set_int( if (rsvd) args.trans->t_flags |= XFS_TRANS_RESERVE; - - error = xfs_trans_reserve(args.trans, args.total, - XFS_ATTRSETM_LOG_RES(mp) + - XFS_ATTRSETRT_LOG_RES(mp) * args.total, - 0, XFS_TRANS_PERM_LOG_RES, - XFS_ATTRSET_LOG_COUNT); + tres.tr_logres = m_tresp(mp)->tr_attrsetm.tr_logres + + m_tresp(mp)->tr_attrsetrt.tr_logres * args.total; + tres.tr_logcount = XFS_ATTRSET_LOG_COUNT; + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; + error = xfs_trans_reserve(args.trans, &tres, args.total, 0); if (error) { xfs_trans_cancel(args.trans, 0); return(error); @@ -500,11 +500,9 @@ xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) if (flags & ATTR_ROOT) args.trans->t_flags |= XFS_TRANS_RESERVE; - if ((error = xfs_trans_reserve(args.trans, - XFS_ATTRRM_SPACE_RES(mp), - XFS_ATTRRM_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, - XFS_ATTRRM_LOG_COUNT))) { + error = xfs_trans_reserve(args.trans, &m_tresp(mp)->tr_attrrm, + XFS_ATTRRM_SPACE_RES(mp), 0); + if (error) { xfs_trans_cancel(args.trans, 0); return(error); } diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index c8232a9..8b42453 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -1290,8 +1290,8 @@ xfs_bmap_add_attrfork( blks = XFS_ADDAFORK_SPACE_RES(mp); if (rsvd) tp->t_flags |= XFS_TRANS_RESERVE; - if ((error = xfs_trans_reserve(tp, blks, XFS_ADDAFORK_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_ADDAFORK_LOG_COUNT))) + error = xfs_trans_reserve(tp, &m_tresp(mp)->tr_addafork, blks, 0); + if (error) goto error0; xfs_ilock(ip, XFS_ILOCK_EXCL); error = xfs_trans_reserve_quota_nblks(tp, ip, blks, 0, rsvd ? diff --git a/libxfs/xfs_log_rlimit.c b/libxfs/xfs_log_rlimit.c new file mode 100644 index 0000000..edf96a6 --- /dev/null +++ b/libxfs/xfs_log_rlimit.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2013 Jie Liu. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include + +void +xfs_log_adjust_max_attrsetm_res( + struct xfs_mount *mp) +{ + int size; + int nblks; + int res; + + /* + * Calculate the maximum length in bytes that would be required + * for a local attribute value as large attributes out of line + * are not logged. + */ + size = xfs_attr_leaf_entsize_local_max(mp->m_sb.sb_blocksize) - 1; + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); + nblks += XFS_B_TO_FSB(mp, size); + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); + + res = m_tresp(mp)->tr_attrsetm.tr_logres + + m_tresp(mp)->tr_attrsetrt.tr_logres * nblks; + mp->m_reservations.tr_attrsetm.tr_logres = res; +} + +/* + * Iterate over the log space reservation table to figure out and return + * the maximum one in terms of the pre-calculated values which were done + * at mount time. + */ +void +xfs_log_get_max_trans_res( + struct xfs_mount *mp, + struct xfs_trans_res *max_tresp) +{ + struct xfs_trans_reservations *mtresp = m_tresp(mp); + struct xfs_trans_res tres_items[XFS_TRANS_RES_NUM]; + struct xfs_trans_res *tresp; + int i, logspace = 0; + + xfs_log_adjust_max_attrsetm_res(mp); + + memcpy(tres_items, mtresp, sizeof(*mtresp)); + for (i = 0; i < ARRAY_SIZE(tres_items); i++) { + struct xfs_trans_res *p = &tres_items[i]; + int tmp = p->tr_logcount > 1 ? + p->tr_logres * p->tr_logcount : + p->tr_logres; + if (logspace < tmp) { + logspace = tmp; + tresp = p; + } + } + + *max_tresp = *tresp; +} diff --git a/libxfs/xfs_trans.c b/libxfs/xfs_trans.c index bdd0ebc..72d9e46 100644 --- a/libxfs/xfs_trans.c +++ b/libxfs/xfs_trans.c @@ -490,7 +490,8 @@ xfs_calc_attrsetm_reservation( * Since the runtime attribute transaction space is dependent on the total * blocks needed for the 1st bmap, here we calculate out the space unit for * one block so that the caller could figure out the total space according - * to the attibute extent length in blocks by: ext * XFS_ATTRSETRT_LOG_RES(mp). + * to the attibute extent length in blocks by: + * ext * m_tresp(mp)->tr_attrsetrt.tr_logres */ STATIC uint xfs_calc_attrsetrt_reservation( @@ -545,30 +546,78 @@ void xfs_trans_init( struct xfs_mount *mp) { - struct xfs_trans_reservations *resp = &mp->m_reservations; - - resp->tr_write = xfs_calc_write_reservation(mp); - resp->tr_itruncate = xfs_calc_itruncate_reservation(mp); - resp->tr_rename = xfs_calc_rename_reservation(mp); - resp->tr_link = xfs_calc_link_reservation(mp); - resp->tr_remove = xfs_calc_remove_reservation(mp); - resp->tr_symlink = xfs_calc_symlink_reservation(mp); - resp->tr_create = xfs_calc_create_reservation(mp); - resp->tr_mkdir = xfs_calc_mkdir_reservation(mp); - resp->tr_ifree = xfs_calc_ifree_reservation(mp); - resp->tr_ichange = xfs_calc_ichange_reservation(mp); - resp->tr_growdata = xfs_calc_growdata_reservation(mp); - resp->tr_swrite = xfs_calc_swrite_reservation(mp); - resp->tr_writeid = xfs_calc_writeid_reservation(mp); - resp->tr_addafork = xfs_calc_addafork_reservation(mp); - resp->tr_attrinval = xfs_calc_attrinval_reservation(mp); - resp->tr_attrsetm = xfs_calc_attrsetm_reservation(mp); - resp->tr_attrsetrt = xfs_calc_attrsetrt_reservation(mp); - resp->tr_attrrm = xfs_calc_attrrm_reservation(mp); - resp->tr_clearagi = xfs_calc_clear_agi_bucket_reservation(mp); - resp->tr_growrtalloc = xfs_calc_growrtalloc_reservation(mp); - resp->tr_growrtzero = xfs_calc_growrtzero_reservation(mp); - resp->tr_growrtfree = xfs_calc_growrtfree_reservation(mp); + struct xfs_trans_reservations *resp = m_tresp(mp); + + /* + * The following transactions are logged in physical format and + * require a permanent reservation on space. + */ + resp->tr_write.tr_logres = xfs_calc_write_reservation(mp); + resp->tr_write.tr_logcount = XFS_WRITE_LOG_COUNT; + resp->tr_write.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_itruncate.tr_logres = xfs_calc_itruncate_reservation(mp); + resp->tr_itruncate.tr_logcount = XFS_ITRUNCATE_LOG_COUNT; + resp->tr_itruncate.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_rename.tr_logres = xfs_calc_rename_reservation(mp); + resp->tr_rename.tr_logcount = XFS_RENAME_LOG_COUNT; + resp->tr_rename.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_link.tr_logres = xfs_calc_link_reservation(mp); + resp->tr_link.tr_logcount = XFS_LINK_LOG_COUNT; + resp->tr_link.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_remove.tr_logres = xfs_calc_remove_reservation(mp); + resp->tr_remove.tr_logcount = XFS_REMOVE_LOG_COUNT; + resp->tr_remove.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_symlink.tr_logres = xfs_calc_symlink_reservation(mp); + resp->tr_symlink.tr_logcount = XFS_SYMLINK_LOG_COUNT; + resp->tr_symlink.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_create.tr_logres = xfs_calc_create_reservation(mp); + resp->tr_create.tr_logcount = XFS_CREATE_LOG_COUNT; + resp->tr_create.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_mkdir.tr_logres = xfs_calc_mkdir_reservation(mp); + resp->tr_mkdir.tr_logcount = XFS_MKDIR_LOG_COUNT; + resp->tr_mkdir.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_ifree.tr_logres = xfs_calc_ifree_reservation(mp); + resp->tr_ifree.tr_logcount = XFS_INACTIVE_LOG_COUNT; + resp->tr_ifree.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_addafork.tr_logres = xfs_calc_addafork_reservation(mp); + resp->tr_addafork.tr_logcount = XFS_ADDAFORK_LOG_COUNT; + resp->tr_addafork.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_attrinval.tr_logres = xfs_calc_attrinval_reservation(mp); + resp->tr_attrinval.tr_logcount = XFS_ATTRINVAL_LOG_COUNT; + resp->tr_attrinval.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_attrsetm.tr_logres = xfs_calc_attrsetm_reservation(mp); + resp->tr_attrsetm.tr_logcount = XFS_ATTRSET_LOG_COUNT; + resp->tr_attrsetm.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_attrrm.tr_logres = xfs_calc_attrrm_reservation(mp); + resp->tr_attrrm.tr_logcount = XFS_ATTRRM_LOG_COUNT; + resp->tr_attrrm.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + resp->tr_growrtalloc.tr_logres = xfs_calc_growrtalloc_reservation(mp); + resp->tr_growrtalloc.tr_logcount = XFS_DEFAULT_PERM_LOG_COUNT; + resp->tr_growrtalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES; + + /* The following transaction are logged in logical format */ + resp->tr_ichange.tr_logres = xfs_calc_ichange_reservation(mp); + resp->tr_growdata.tr_logres = xfs_calc_growdata_reservation(mp); + resp->tr_swrite.tr_logres = xfs_calc_swrite_reservation(mp); + resp->tr_fsyncts.tr_logres = xfs_calc_swrite_reservation(mp); + resp->tr_writeid.tr_logres = xfs_calc_writeid_reservation(mp); + resp->tr_attrsetrt.tr_logres = xfs_calc_attrsetrt_reservation(mp); + resp->tr_clearagi.tr_logres = xfs_calc_clear_agi_bucket_reservation(mp); + resp->tr_growrtzero.tr_logres = xfs_calc_growrtzero_reservation(mp); + resp->tr_growrtfree.tr_logres = xfs_calc_growrtfree_reservation(mp); } /* @@ -627,7 +676,7 @@ xfs_trans_roll( struct xfs_inode *dp) { struct xfs_trans *trans; - unsigned int logres, count; + struct xfs_trans_res tres; int error; /* @@ -639,8 +688,9 @@ xfs_trans_roll( /* * Copy the critical parameters from one trans to the next. */ - logres = trans->t_log_res; - count = trans->t_log_count; + tres.tr_logres = trans->t_log_res; + tres.tr_logcount = trans->t_log_count; + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; *tpp = xfs_trans_dup(trans); /* @@ -664,8 +714,7 @@ xfs_trans_roll( * across this call, or that anything that is locked be logged in * the prior and the next transactions. */ - error = xfs_trans_reserve(trans, 0, logres, 0, - XFS_TRANS_PERM_LOG_RES, count); + error = xfs_trans_reserve(trans, &tres, 0, 0); /* * Ensure that the inode is in the new transaction and locked. */ diff --git a/mkfs/maxtrres.c b/mkfs/maxtrres.c index f12cc70..c16115c 100644 --- a/mkfs/maxtrres.c +++ b/mkfs/maxtrres.c @@ -27,55 +27,18 @@ #include #include "xfs_mkfs.h" -static void -max_attrsetm_trans_res_adjust( - xfs_mount_t *mp) -{ - int local; - int size; - int nblks; - int res; - - /* - * Determine space the maximal sized attribute will use, - * to calculate the largest reservation size needed. - */ - size = libxfs_attr_leaf_newentsize(MAXNAMELEN, 64 * 1024, - mp->m_sb.sb_blocksize, &local); - ASSERT(!local); - nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); - nblks += XFS_B_TO_FSB(mp, size); - nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); - res = XFS_ATTRSETM_LOG_RES(mp) + XFS_ATTRSETRT_LOG_RES(mp) * nblks; - mp->m_reservations.tr_attrsetm = res; -} - -static int -max_trans_res_by_mount( - xfs_mount_t *mp) -{ - uint *p; - int rval; - xfs_trans_reservations_t *tr = &mp->m_reservations; - - for (rval = 0, p = (uint *)tr; p < (uint *)(tr + 1); p++) { - if ((int)*p > rval) - rval = (int)*p; - } - return rval; -} - int max_trans_res( - int dirversion, - int sectorlog, - int blocklog, - int inodelog, - int dirblocklog) + int dirversion, + int sectorlog, + int blocklog, + int inodelog, + int dirblocklog) { - xfs_sb_t *sbp; - xfs_mount_t mount; - int maxres, maxfsb; + struct xfs_sb *sbp; + struct xfs_mount mount; + struct xfs_trans_res tres; + int maxfsb; memset(&mount, 0, sizeof(mount)); sbp = &mount.m_sb; @@ -93,16 +56,11 @@ max_trans_res( sbp->sb_versionnum = XFS_SB_VERSION_4 | (dirversion == 2 ? XFS_SB_VERSION_DIRV2BIT : 0); - libxfs_mount(&mount, sbp, 0,0,0,0); - max_attrsetm_trans_res_adjust(&mount); - maxres = max_trans_res_by_mount(&mount); - maxfsb = XFS_B_TO_FSB(&mount, maxres); + libxfs_mount(&mount, sbp, 0, 0, 0, 0); + xfs_log_adjust_max_attrsetm_res(&mount); + xfs_log_get_max_trans_res(&mount, &tres); + maxfsb = XFS_B_TO_FSB(&mount, tres.tr_logres); libxfs_umount(&mount); -#if 0 - printf("#define\tMAXTRRES_S%d_B%d_I%d_D%d_V%d\t%lld\n", - sectorlog, blocklog, inodelog, dirblocklog, dirversion, maxfsb); -#endif - return maxfsb; } diff --git a/mkfs/proto.c b/mkfs/proto.c index 56eed31..6071acc 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -119,7 +119,10 @@ getres( mp = tp->t_mountp; for (i = 0, r = MKFS_BLOCKRES(blocks); r >= blocks; r--) { - i = libxfs_trans_reserve(tp, r, 0, 0, 0, 0); + struct xfs_trans_res tres; + + memset(&tres, 0, sizeof(tres)); + i = libxfs_trans_reserve(tp, &tres, r, 0); if (i == 0) return; } @@ -597,31 +600,36 @@ parse_proto( */ static void rtinit( - xfs_mount_t *mp) + xfs_mount_t *mp) { - xfs_dfiloff_t bno; - int committed; - xfs_dfiloff_t ebno; - xfs_bmbt_irec_t *ep; - int error; - xfs_fsblock_t first; - xfs_bmap_free_t flist; - int i; - xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP]; - xfs_extlen_t nsumblocks; - int nmap; - xfs_inode_t *rbmip; - xfs_inode_t *rsumip; - xfs_trans_t *tp; - struct cred creds; - struct fsxattr fsxattrs; + xfs_dfiloff_t bno; + int committed; + xfs_dfiloff_t ebno; + xfs_bmbt_irec_t *ep; + int error; + xfs_fsblock_t first; + xfs_bmap_free_t flist; + int i; + xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP]; + xfs_extlen_t nsumblocks; + int nmap; + xfs_inode_t *rbmip; + xfs_inode_t *rsumip; + xfs_trans_t *tp; + struct cred creds; + struct fsxattr fsxattrs; + struct xfs_trans_res tres; + + memset(&tres, 0, sizeof(tres)); /* * First, allocate the inodes. */ tp = libxfs_trans_alloc(mp, 0); - if ((i = libxfs_trans_reserve(tp, MKFS_BLOCKRES_INODE, 0, 0, 0, 0))) + i = libxfs_trans_reserve(tp, &tres, MKFS_BLOCKRES_INODE, 0); + if (i) res_failed(i); + memset(&creds, 0, sizeof(creds)); memset(&fsxattrs, 0, sizeof(fsxattrs)); error = libxfs_inode_alloc(&tp, NULL, S_IFREG, 1, 0, @@ -658,9 +666,11 @@ rtinit( * Next, give the bitmap file some zero-filled blocks. */ tp = libxfs_trans_alloc(mp, 0); - if ((i = libxfs_trans_reserve(tp, mp->m_sb.sb_rbmblocks + - (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), 0, 0, 0, 0))) + i = libxfs_trans_reserve(tp, &tres, mp->m_sb.sb_rbmblocks + + (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), 0); + if (i) res_failed(i); + libxfs_trans_ijoin(tp, rbmip, 0); libxfs_trans_ihold(tp, rbmip); bno = 0; @@ -694,10 +704,12 @@ rtinit( */ tp = libxfs_trans_alloc(mp, 0); nsumblocks = mp->m_rsumsize >> mp->m_sb.sb_blocklog; - if ((i = libxfs_trans_reserve(tp, + i = libxfs_trans_reserve(tp, &tres, nsumblocks + (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), - 0, 0, 0, 0))) + 0); + if (i) res_failed(i); + libxfs_trans_ijoin(tp, rsumip, 0); libxfs_trans_ihold(tp, rsumip); bno = 0; @@ -731,7 +743,8 @@ rtinit( */ for (bno = 0; bno < mp->m_sb.sb_rextents; bno = ebno) { tp = libxfs_trans_alloc(mp, 0); - if ((i = libxfs_trans_reserve(tp, 0, 0, 0, 0, 0))) + i = libxfs_trans_reserve(tp, &tres, 0, 0); + if (i) res_failed(i); xfs_bmap_init(&flist, &first); ebno = XFS_RTMIN(mp->m_sb.sb_rextents, diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index a393607..350e2cb 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -2685,8 +2685,9 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), * BNO, CNT free block list */ for (agno = 0; agno < agcount; agno++) { - xfs_alloc_arg_t args; - xfs_trans_t *tp; + struct xfs_alloc_arg args; + struct xfs_trans *tp; + struct xfs_trans_res tres; memset(&args, 0, sizeof(args)); args.tp = tp = libxfs_trans_alloc(mp, 0); @@ -2694,7 +2695,9 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), args.agno = agno; args.alignment = 1; args.pag = xfs_perag_get(mp,agno); - if ((c = libxfs_trans_reserve(tp, worst_freelist, 0, 0, 0, 0))) + memset(&tres, 0, sizeof(tres)); + c = libxfs_trans_reserve(tp, &tres, worst_freelist, 0); + if (c) res_failed(c); libxfs_alloc_fix_freelist(&args, 0); xfs_perag_put(args.pag); diff --git a/repair/phase6.c b/repair/phase6.c index 5c33797..af7fc94 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -414,26 +414,31 @@ res_failed( } void -mk_rbmino(xfs_mount_t *mp) +mk_rbmino( + struct xfs_mount *mp) { - xfs_trans_t *tp; - xfs_inode_t *ip; - xfs_bmbt_irec_t *ep; - xfs_fsblock_t first; - int i; - int nmap; - int committed; - int error; - xfs_bmap_free_t flist; - xfs_dfiloff_t bno; - xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP]; + struct xfs_trans *tp; + struct xfs_inode *ip; + struct xfs_bmbt_irec *ep; + xfs_fsblock_t first; + int i; + int nmap; + int committed; + int error; + struct xfs_bmap_free flist; + xfs_dfiloff_t bno; + struct xfs_bmbt_irec map[XFS_BMAP_MAX_NMAP]; + struct xfs_trans_res tres; + + memset(&tres, 0, sizeof(tres)); /* * first set up inode */ tp = libxfs_trans_alloc(mp, 0); - if ((i = libxfs_trans_reserve(tp, 10, 0, 0, 0, 0))) + i = libxfs_trans_reserve(tp, &tres, 10, 0); + if (i) res_failed(i); error = libxfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, 0, &ip); @@ -474,8 +479,9 @@ mk_rbmino(xfs_mount_t *mp) * from mkfs) */ tp = libxfs_trans_alloc(mp, 0); - if ((error = libxfs_trans_reserve(tp, mp->m_sb.sb_rbmblocks + - (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), 0, 0, 0, 0))) + error = libxfs_trans_reserve(tp, &tres, mp->m_sb.sb_rbmblocks + + (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), 0); + if (error) res_failed(error); libxfs_trans_ijoin(tp, ip, 0); @@ -509,24 +515,29 @@ mk_rbmino(xfs_mount_t *mp) } static int -fill_rbmino(xfs_mount_t *mp) +fill_rbmino( + struct xfs_mount *mp) { - xfs_buf_t *bp; - xfs_trans_t *tp; - xfs_inode_t *ip; - xfs_rtword_t *bmp; - xfs_fsblock_t first; - int nmap; - int error; - xfs_dfiloff_t bno; - xfs_bmbt_irec_t map; + struct xfs_buf *bp; + struct xfs_trans *tp; + struct xfs_inode *ip; + xfs_rtword_t *bmp; + xfs_fsblock_t first; + int nmap; + int error; + xfs_dfiloff_t bno; + struct xfs_bmbt_irec map; + struct xfs_trans_res tres; + + memset(&tres, 0, sizeof(tres)); bmp = btmcompute; bno = 0; tp = libxfs_trans_alloc(mp, 0); - if ((error = libxfs_trans_reserve(tp, 10, 0, 0, 0, 0))) + error = libxfs_trans_reserve(tp, &tres, 10, 0); + if (error) res_failed(error); error = libxfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, 0, &ip); @@ -576,18 +587,22 @@ _("can't access block %" PRIu64 " (fsbno %" PRIu64 ") of realtime bitmap inode % } static int -fill_rsumino(xfs_mount_t *mp) +fill_rsumino( + struct xfs_mount *mp) { - xfs_buf_t *bp; - xfs_trans_t *tp; - xfs_inode_t *ip; - xfs_suminfo_t *smp; - xfs_fsblock_t first; - int nmap; - int error; - xfs_dfiloff_t bno; - xfs_dfiloff_t end_bno; - xfs_bmbt_irec_t map; + struct xfs_buf *bp; + struct xfs_trans *tp; + struct xfs_inode *ip; + xfs_suminfo_t *smp; + xfs_fsblock_t first; + int nmap; + int error; + xfs_dfiloff_t bno; + xfs_dfiloff_t end_bno; + struct xfs_bmbt_irec map; + struct xfs_trans_res tres; + + memset(&tres, 0, sizeof(tres)); smp = sumcompute; bno = 0; @@ -595,7 +610,8 @@ fill_rsumino(xfs_mount_t *mp) tp = libxfs_trans_alloc(mp, 0); - if ((error = libxfs_trans_reserve(tp, 10, 0, 0, 0, 0))) + error = libxfs_trans_reserve(tp, &tres, 10, 0); + if (error) res_failed(error); error = libxfs_trans_iget(mp, tp, mp->m_sb.sb_rsumino, 0, 0, &ip); @@ -645,28 +661,30 @@ _("can't access block %" PRIu64 " (fsbno %" PRIu64 ") of realtime summary inode } static void -mk_rsumino(xfs_mount_t *mp) +mk_rsumino( + struct xfs_mount *mp) { - xfs_trans_t *tp; - xfs_inode_t *ip; - xfs_bmbt_irec_t *ep; - xfs_fsblock_t first; - int i; - int nmap; - int committed; - int error; - int nsumblocks; - xfs_bmap_free_t flist; - xfs_dfiloff_t bno; - xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP]; + struct xfs_trans *tp; + struct xfs_inode *ip; + struct xfs_bmbt_irec *ep; + xfs_fsblock_t first; + int i; + int nmap; + int committed; + int error; + int nsumblocks; + struct xfs_bmap_free flist; + xfs_dfiloff_t bno; + struct xfs_bmbt_irec map[XFS_BMAP_MAX_NMAP]; + struct xfs_trans_res tres; /* * first set up inode */ tp = libxfs_trans_alloc(mp, 0); - if ((i = libxfs_trans_reserve(tp, 10, XFS_ICHANGE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT))) + i = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_ichange, 10, 0); + if (i) res_failed(i); error = libxfs_trans_iget(mp, tp, mp->m_sb.sb_rsumino, 0, 0, &ip); @@ -710,11 +728,13 @@ mk_rsumino(xfs_mount_t *mp) xfs_bmap_init(&flist, &first); nsumblocks = mp->m_rsumsize >> mp->m_sb.sb_blocklog; - if ((error = libxfs_trans_reserve(tp, - mp->m_sb.sb_rbmblocks + - (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), - BBTOB(128), 0, XFS_TRANS_PERM_LOG_RES, - XFS_DEFAULT_PERM_LOG_COUNT))) + tres.tr_logres = BBTOB(128); + tres.tr_logcount = XFS_DEFAULT_PERM_LOG_COUNT; + tres.tr_logflags = XFS_TRANS_PERM_LOG_RES; + error = libxfs_trans_reserve(tp, &tres, mp->m_sb.sb_rbmblocks + + (XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) - 1), + 0); + if (error) res_failed(error); libxfs_trans_ijoin(tp, ip, 0); @@ -764,8 +784,8 @@ mk_root_dir(xfs_mount_t *mp) tp = libxfs_trans_alloc(mp, 0); ip = NULL; - if ((i = libxfs_trans_reserve(tp, 10, XFS_ICHANGE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT))) + i = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_ichange, 10, 0); + if (i) res_failed(i); error = libxfs_trans_iget(mp, tp, mp->m_sb.sb_rootino, 0, 0, &ip); @@ -856,8 +876,8 @@ mk_orphanage(xfs_mount_t *mp) xfs_bmap_init(&flist, &first); nres = XFS_MKDIR_SPACE_RES(mp, xname.len); - if ((i = libxfs_trans_reserve(tp, nres, XFS_MKDIR_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT))) + i = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_mkdir, nres, 0); + if (i) res_failed(i); /* @@ -993,10 +1013,9 @@ mv_orphanage( if (err) { ASSERT(err == ENOENT); - if ((err = libxfs_trans_reserve(tp, nres, - XFS_RENAME_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_RENAME_LOG_COUNT))) + err = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_rename, + nres, 0); + if (err) do_error( _("space reservation failed (%d), filesystem may be out of space\n"), err); @@ -1037,10 +1056,9 @@ mv_orphanage( libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC); } else { - if ((err = libxfs_trans_reserve(tp, nres, - XFS_RENAME_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_RENAME_LOG_COUNT))) + err = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_rename, + nres, 0); + if (err) do_error( _("space reservation failed (%d), filesystem may be out of space\n"), err); @@ -1095,8 +1113,8 @@ mv_orphanage( * also accounted for in the create */ nres = XFS_DIRENTER_SPACE_RES(mp, xname.len); - err = libxfs_trans_reserve(tp, nres, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + err = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, + nres, 0); if (err) do_error( _("space reservation failed (%d), filesystem may be out of space\n"), @@ -1191,8 +1209,7 @@ longform_dir2_rebuild( tp = libxfs_trans_alloc(mp, 0); nres = XFS_REMOVE_SPACE_RES(mp); - error = libxfs_trans_reserve(tp, nres, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, nres, 0); if (error) res_failed(error); libxfs_trans_ijoin(tp, ip, 0); @@ -1232,8 +1249,8 @@ longform_dir2_rebuild( tp = libxfs_trans_alloc(mp, 0); nres = XFS_CREATE_SPACE_RES(mp, p->name.len); - error = libxfs_trans_reserve(tp, nres, XFS_CREATE_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, XFS_CREATE_LOG_COUNT); + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_create, + nres, 0); if (error) { do_warn( _("space reservation failed (%d), filesystem may be out of space\n"), @@ -1294,8 +1311,7 @@ dir2_kill_block( tp = libxfs_trans_alloc(mp, 0); nres = XFS_REMOVE_SPACE_RES(mp); - error = libxfs_trans_reserve(tp, nres, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, nres, 0); if (error) res_failed(error); libxfs_trans_ijoin(tp, ip, 0); @@ -1476,8 +1492,7 @@ longform_dir2_entry_check_data( freetab->nents = db + 1; tp = libxfs_trans_alloc(mp, 0); - error = libxfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, 0, 0); if (error) res_failed(error); libxfs_trans_ijoin(tp, ip, 0); @@ -2525,10 +2540,8 @@ process_dir_inode( * new define in ourselves. */ nres = no_modify ? 0 : XFS_REMOVE_SPACE_RES(mp); - error = libxfs_trans_reserve(tp, nres, - XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_REMOVE_LOG_COUNT); + error = libxfs_trans_reserve(tp, + &m_tresp(mp)->tr_remove, nres, 0); if (error) res_failed(error); @@ -2576,8 +2589,8 @@ process_dir_inode( ASSERT(tp != NULL); nres = XFS_MKDIR_SPACE_RES(mp, 2); - error = libxfs_trans_reserve(tp, nres, XFS_MKDIR_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_mkdir, + nres, 0); if (error) res_failed(error); @@ -2638,12 +2651,8 @@ process_dir_inode( ASSERT(tp != NULL); nres = XFS_MKDIR_SPACE_RES(mp, 1); - error = libxfs_trans_reserve(tp, nres, - XFS_MKDIR_LOG_RES(mp), - 0, - XFS_TRANS_PERM_LOG_RES, - XFS_MKDIR_LOG_COUNT); - + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_mkdir, + nres, 0); if (error) res_failed(error); diff --git a/repair/phase7.c b/repair/phase7.c index bd1668e..88f5345 100644 --- a/repair/phase7.c +++ b/repair/phase7.c @@ -71,10 +71,8 @@ update_inode_nlinks( tp = libxfs_trans_alloc(mp, XFS_TRANS_REMOVE); - error = libxfs_trans_reserve(tp, (no_modify ? 0 : 10), - XFS_REMOVE_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, - XFS_REMOVE_LOG_COUNT); - + error = libxfs_trans_reserve(tp, &m_tresp(mp)->tr_remove, + (no_modify ? 0 : 10), 0); ASSERT(error == 0); error = libxfs_trans_iget(mp, tp, ino, 0, 0, &ip); -- 1.7.9.5 From jeff.liu@oracle.com Fri May 17 04:40:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F137F7F4E for ; Fri, 17 May 2013 04:40:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DD0D9304100 for ; Fri, 17 May 2013 02:40:51 -0700 (PDT) X-ASG-Debug-ID: 1368783650-04cb6c53a434dd80001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id c4FIv1FFfT3DbOLl (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 02:40:50 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4H9emXu009221 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 May 2013 09:40:49 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H9eloi022322 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 17 May 2013 09:40:47 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4H9ekFF009463; Fri, 17 May 2013 09:40:46 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 17 May 2013 02:40:46 -0700 Message-ID: <5195FB1B.9000803@oracle.com> Date: Fri, 17 May 2013 17:40:43 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] References: <5195C279.3060502@oracle.com> <5195EC13.2060502@gmail.com> X-ASG-Orig-Subj: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] In-Reply-To: <5195EC13.2060502@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368783650 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131206 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) Hi Michael, Are you compiling kernel on 32-bit system? Looks this issue is regarding 64-bit division at roundup() on 32-bit if so. Could you please try below fix? diff --git a/fs/xfs/xfs_log_rlimit.c b/fs/xfs/xfs_log_rlimit.c index 3e84d46..49a88cc 100644 --- a/fs/xfs/xfs_log_rlimit.c +++ b/fs/xfs/xfs_log_rlimit.c @@ -127,7 +127,7 @@ xfs_log_validate_logspace( * Also, the log size should be a multiple of the log stripe unit, round * it up to lsunit boundary if lsunit is specified. */ - minlblks = lsunit ? (roundup(BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : + minlblks = lsunit ? (roundup((int)BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : BTOBB(maxlres) * 2; if (log->l_logBBsize < minlblks) { Thanks, -Jeff On 05/17/2013 04:36 PM, Michael L. Semon wrote: > On 05/17/2013 01:39 AM, Jeff Liu wrote: >> From: Jie Liu >> >> Add source files for xfs_log_rlimit.[c|h]. >> The new source would be used for the log space validation. > > Update: To build the kernel, I'm getting by on a sysadmin hack that > looks like this: > > --- linux/fs/xfs/xfs_log_rlimit.c.orig 2013-05-17 03:36:28.983493357 -0400 > +++ linux/fs/xfs/xfs_log_rlimit.c 2013-05-17 04:21:07.090661828 -0400 > @@ -127,8 +127,10 @@ > * Also, the log size should be a multiple of the log stripe unit, round > * it up to lsunit boundary if lsunit is specified. > */ > - minlblks = lsunit ? (roundup(BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : > - BTOBB(maxlres) * 2; > + minlblks = lsunit ? > + (roundup((const int)(BTOBB(maxlres)), lsunit) + > + 2 * lsunit) * 2 : > + BTOBB(maxlres) * 2; > > if (log->l_logBBsize < minlblks) { > xfs_crit(mp, > > However, that makes no sense. There is a roundup in > that goes like this: > > /* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */ > #define roundup(x, y) ( \ > { \ > const typeof(y) __y = y; \ > (((x) + (__y - 1)) / __y) * __y; \ > } \ > ) > > Okay, so that gave me the inspiration to cast the type so gcc-4.8.0 > wouldn't call __divdi3. But why did this make a difference? > > Disclaimer: I'm not a C macro guru, so I don't know which random > sequence of punctuation keys would make roundup() happy. > > Michael > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From david@fromorbit.com Fri May 17 05:15:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1EEEA7F37 for ; Fri, 17 May 2013 05:15:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A5B49AC002 for ; Fri, 17 May 2013 03:15:51 -0700 (PDT) X-ASG-Debug-ID: 1368785749-04cbb05fe334e730001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id FjiybuFFcyUsMcFW for ; Fri, 17 May 2013 03:15:50 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtEOACECllF5LDbs/2dsb2JhbABbgwi8YYUtBAF6F3SCHwEBBScTHDMIGAwlDwUlAzSIC7xrFo1sgSQWgz8DlzeKHIclgyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 19:45:48 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdHhR-0008KQ-GP for xfs@oss.sgi.com; Fri, 17 May 2013 20:15:45 +1000 Date: Fri, 17 May 2013 20:15:45 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 6/5] xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Message-ID: <20130517101545.GR24635@dastard> X-ASG-Orig-Subj: [PATCH 6/5] xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC References: <1368753029-9977-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368785749 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131208 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- fs/xfs/xfs_da_btree.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 41ea7e1..0b8b2a1 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c @@ -270,6 +270,7 @@ xfs_da3_node_read_verify( break; return; case XFS_ATTR_LEAF_MAGIC: + case XFS_ATTR3_LEAF_MAGIC: bp->b_ops = &xfs_attr3_leaf_buf_ops; bp->b_ops->verify_read(bp); return; From david@fromorbit.com Fri May 17 05:19:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 288D27F51 for ; Fri, 17 May 2013 05:19:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 07955304084 for ; Fri, 17 May 2013 03:19:12 -0700 (PDT) X-ASG-Debug-ID: 1368785950-04cb6c53a134f840001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id KATLRJ7MNe7piRS0 for ; Fri, 17 May 2013 03:19:10 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtUOADoDllF5LDbs/2dsb2JhbABbgwg3vCqFLQQBehd0gh8BAQUnExwjEAgDGAklDwUlAyETiAsNvFkWjWyBHQeDVQOXN5FBgyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 19:49:09 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdHki-0008L3-Pf; Fri, 17 May 2013 20:19:08 +1000 Date: Fri, 17 May 2013 20:19:08 +1000 From: Dave Chinner To: Dan Carpenter Cc: Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: bug widening binary "not" operation Message-ID: <20130517101908.GS24635@dastard> X-ASG-Orig-Subj: Re: [patch] xfs: bug widening binary "not" operation References: <20130516075330.GB7494@elgon.mountain> <20130516230314.GH24635@dastard> <20130517063159.GO1360@mwanda> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130517063159.GO1360@mwanda> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368785950 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131210 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 17, 2013 at 09:31:59AM +0300, Dan Carpenter wrote: > On Fri, May 17, 2013 at 09:03:14AM +1000, Dave Chinner wrote: > > As it is, the static checker missed the: > > > > rounding = max_t(uint, ....); > > > > The line before the above usage. I posted a patch to fix this this > > 2 weeks ago here: > > > > http://oss.sgi.com/pipermail/xfs/2013-May/025986.html > > > > Ah. Grand. There is still a problem with the max_t(). The shift > operation will wrap before we do the cast. It should be: It probably looks that way, but it can't overflow as mp->m_sb.sb_blocklog has a maximum value of 16 (i.e. 64k maximum filesystem block size). > > - rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); > + rounding = max_t(xfs_off_t, 1ULL << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); So it is safe the way it is and this is not necessary. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri May 17 05:29:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 86B6F7F37 for ; Fri, 17 May 2013 05:29:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 743068F8049 for ; Fri, 17 May 2013 03:29:49 -0700 (PDT) X-ASG-Debug-ID: 1368786587-04cb6c53a13500e0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id bincGzW0vJ8frWJS for ; Fri, 17 May 2013 03:29:47 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtEOAJIFllF5LDbs/2dsb2JhbABbgwi8YYUtBAF6F3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLvGcWjWyBHQeDVQOXN4ochyWDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 19:59:47 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdHv0-0008MC-4D; Fri, 17 May 2013 20:29:46 +1000 Date: Fri, 17 May 2013 20:29:46 +1000 From: Dave Chinner To: Jeff Liu Cc: "Michael L. Semon" , "xfs@oss.sgi.com" Subject: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] Message-ID: <20130517102946.GT24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] References: <5195C279.3060502@oracle.com> <5195EC13.2060502@gmail.com> <5195FB1B.9000803@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5195FB1B.9000803@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368786587 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131210 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) On Fri, May 17, 2013 at 05:40:43PM +0800, Jeff Liu wrote: > Hi Michael, > > Are you compiling kernel on 32-bit system? > > Looks this issue is regarding 64-bit division at roundup() on 32-bit if so. roundup_64() is what you want, then. Cheers, Dave. -- Dave Chinner david@fromorbit.com From jeff.liu@oracle.com Fri May 17 05:34:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CFA917F37 for ; Fri, 17 May 2013 05:34:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4B091AC003 for ; Fri, 17 May 2013 03:34:40 -0700 (PDT) X-ASG-Debug-ID: 1368786878-04cbb05fe334f770001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id HvhfznYoywWjYCpR (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 03:34:39 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4HAYYmw006285 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 May 2013 10:34:35 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4HAYYG2028510 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 17 May 2013 10:34:35 GMT Received: from abhmt119.oracle.com (abhmt119.oracle.com [141.146.116.71]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4HAYYOX027003; Fri, 17 May 2013 10:34:34 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 17 May 2013 03:34:34 -0700 Message-ID: <519607B6.5090009@oracle.com> Date: Fri, 17 May 2013 18:34:30 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: "Michael L. Semon" , "xfs@oss.sgi.com" Subject: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] References: <5195C279.3060502@oracle.com> <5195EC13.2060502@gmail.com> <5195FB1B.9000803@oracle.com> <20130517102946.GT24635@dastard> X-ASG-Orig-Subj: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] In-Reply-To: <20130517102946.GT24635@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368786879 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131210 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) On 05/17/2013 06:29 PM, Dave Chinner wrote: > On Fri, May 17, 2013 at 05:40:43PM +0800, Jeff Liu wrote: >> Hi Michael, >> >> Are you compiling kernel on 32-bit system? >> >> Looks this issue is regarding 64-bit division at roundup() on 32-bit if so. > > roundup_64() is what you want, then. Yep, will take care of it. Thanks, -Jeff From p.pisati@gmail.com Fri May 17 05:45:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7A4387F37 for ; Fri, 17 May 2013 05:45:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 13FA3AC002 for ; Fri, 17 May 2013 03:45:35 -0700 (PDT) X-ASG-Debug-ID: 1368787533-04bdf04223358860001-NocioJ Received: from mail-ea0-f176.google.com (mail-ea0-f176.google.com [209.85.215.176]) by cuda.sgi.com with ESMTP id qjGyFoGaHWxawFgr (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 03:45:34 -0700 (PDT) X-Barracuda-Envelope-From: p.pisati@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.176 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.176] Received: by mail-ea0-f176.google.com with SMTP id k11so2312128eaj.21 for ; Fri, 17 May 2013 03:45:33 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.176] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.176] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:date:from:to:subject:message-id:mime-version :content-type:content-disposition:user-agent; bh=o5W3qYtd78fm6/urpKsVwn6S91RIdB/PR6DbFNWyWwA=; b=HSc1LF5DSsJQ4wfM8XJeISVvsbRfflgM8gKe0BN+s8Ni54muvnYBBjUPnNRusB0MQZ 3Eicoz9oZEtFwCFYEaqRfQ5xO3bmleqGUCVYU//z2YsdQUGLVRY1+HYcPTZoIQ2zcW4u 8GmdtuwabCWn70x+lKN+8Gb5R1YK+VePn+vk+ehDBxAnwVjoNBm9qJ6Yk2pSTiBOGyil wAvrETcLws5oSF8ozwWG/iRfri6Bqpr9qaA21yQlG3HllTCGPfBzClH8APdn/oluEVDp M9XWt/a5YCbYlzXXBfCk3fmQ3gppz2VQPas/5fmkpA/CQ4FO3r0JgdNNRdZwvh7yE3c5 u7oQ== X-Received: by 10.14.4.199 with SMTP id 47mr100067566eej.29.1368787533320; Fri, 17 May 2013 03:45:33 -0700 (PDT) Received: from gmail.com (2-230-238-136.ip204.fastwebnet.it. [2.230.238.136]) by mx.google.com with ESMTPSA id x41sm17812777eey.17.2013.05.17.03.45.31 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 17 May 2013 03:45:31 -0700 (PDT) Date: Fri, 17 May 2013 12:45:29 +0200 From: Paolo Pisati To: xfs@oss.sgi.com Subject: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130517104529.GA12490@luxor.wired.org> X-ASG-Orig-Subj: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-ea0-f176.google.com[209.85.215.176] X-Barracuda-Start-Time: 1368787534 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131210 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature While exercising swift on a single node 32bit armhf system running a 3.5 kernel, i got this when i hit ~25% of fs space usage: dmesg: ... [ 3037.399406] vmap allocation for size 2097152 failed: use vmalloc= to increase size. [ 3037.399442] vmap allocation for size 2097152 failed: use vmalloc= to increase size. [ 3037.399469] vmap allocation for size 2097152 failed: use vmalloc= to increase size. [ 3037.399485] XFS (sda5): xfs_buf_get: failed to map pages [ 3037.399485] [ 3037.399501] XFS (sda5): Internal error xfs_trans_cancel at line 1466 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Caller 0xbf0235e0 [ 3037.399501] [ 3037.413789] [] (unwind_backtrace+0x0/0x104) from [] (dump_stack+0x20/0x24) [ 3037.413985] [] (dump_stack+0x20/0x24) from [] (xfs_error_report+0x60/0x6c [xfs]) [ 3037.414321] [] (xfs_error_report+0x60/0x6c [xfs]) from [] (xfs_trans_cancel+0xfc/0x11c [xfs]) [ 3037.414654] [] (xfs_trans_cancel+0xfc/0x11c [xfs]) from [] (xfs_create+0x228/0x558 [xfs]) [ 3037.414953] [] (xfs_create+0x228/0x558 [xfs]) from [] (xfs_vn_mknod+0x9c/0x180 [xfs]) [ 3037.415239] [] (xfs_vn_mknod+0x9c/0x180 [xfs]) from [] (xfs_vn_mkdir+0x20/0x24 [xfs]) [ 3037.415393] [] (xfs_vn_mkdir+0x20/0x24 [xfs]) from [] (vfs_mkdir+0xc4/0x13c) [ 3037.415410] [] (vfs_mkdir+0xc4/0x13c) from [] (sys_mkdirat+0xdc/0xe4) [ 3037.415422] [] (sys_mkdirat+0xdc/0xe4) from [] (sys_mkdir+0x24/0x28) [ 3037.415437] [] (sys_mkdir+0x24/0x28) from [] (ret_fast_syscall+0x0/0x30) [ 3037.415452] XFS (sda5): xfs_do_force_shutdown(0x8) called from line 1467 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Return address = 0xbf06340c [ 3037.416892] XFS (sda5): Corruption of in-memory data detected. Shutting down filesystem [ 3037.425008] XFS (sda5): Please umount the filesystem and rectify the problem(s) [ 3047.912480] XFS (sda5): xfs_log_force: error 5 returned. flag@c13:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 225G 2.1G 212G 1% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 4.0K 2.0G 1% /dev tmpfs 405M 260K 404M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda1 228M 30M 186M 14% /boot /dev/sda5 2.0G 569M 1.5G 28% /mnt/sdb1 flag@c13:~$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda2 14958592 74462 14884130 1% / none 182027 1 182026 1% /sys/fs/cgroup udev 177378 1361 176017 1% /dev tmpfs 182027 807 181220 1% /run none 182027 3 182024 1% /run/lock none 182027 1 182026 1% /run/shm none 182027 1 182026 1% /run/user /dev/sda1 124496 35 124461 1% /boot /dev/sda5 524288 237184 287104 46% /mnt/sdb1 the vmalloc space is ~256M usually on this box, so i enlarged it: flag@c13:~$ dmesg | grep vmalloc Kernel command line: console=ttyAMA0 nosplash vmalloc=512M vmalloc : 0xdf800000 - 0xff000000 ( 504 MB) and while i didn't hit the warning above, still after ~25% of usage, the storage node died with: May 17 06:26:00 c13 container-server ERROR __call__ error with PUT /sdb1/123172/AUTH_test/3b3d078015304a41b76b0ab083b7863a_5 : [Errno 28] No space left on device: '/srv/1/node/sdb1/containers/123172' (txn: tx8ea3ce392ee94df096b16-00519605b0) flag@c13:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 225G 3.9G 210G 2% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 4.0K 2.0G 1% /dev tmpfs 405M 260K 404M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda1 228M 25M 192M 12% /boot /dev/sda5 2.0G 564M 1.5G 28% /mnt/sdb1 flag@c13:~$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda2 14958592 124409 14834183 1% / none 114542 1 114541 1% /sys/fs/cgroup udev 103895 1361 102534 2% /dev tmpfs 114542 806 113736 1% /run none 114542 3 114539 1% /run/lock none 114542 1 114541 1% /run/shm none 114542 1 114541 1% /run/user /dev/sda1 124496 33 124463 1% /boot /dev/sda5 524288 234880 289408 45% /mnt/sdb1 any idea what else shall i tune to workaround this? or is it a know problem that involves 32bit arch and xfs? -- bye, p. From david@fromorbit.com Fri May 17 05:52:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 966037F37 for ; Fri, 17 May 2013 05:52:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2C1B3AC001 for ; Fri, 17 May 2013 03:52:56 -0700 (PDT) X-ASG-Debug-ID: 1368787975-04cb6c53a1351270001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 7aYWtRJA6XV0SAy5 for ; Fri, 17 May 2013 03:52:55 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtEOAHILllF5LDbs/2dsb2JhbABbgwi8YYUtBAF5F3SCHwEBBTocIxAIAxgJJQ8FJQMhE4gLvHMWjWyBHQeDVQOXN5FBgyIqgS4k Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:22:54 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdIHN-0008OC-Oy; Fri, 17 May 2013 20:52:53 +1000 Date: Fri, 17 May 2013 20:52:53 +1000 From: Dave Chinner To: Jeff Liu Cc: "xfs@oss.sgi.com" Subject: Re: [PATCH] xfsprogs: code sync up for log space reservation Message-ID: <20130517105253.GU24635@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: code sync up for log space reservation References: <5195F67F.5070101@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5195F67F.5070101@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368787975 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 17, 2013 at 05:21:03PM +0800, Jeff Liu wrote: > Hello, > > Here is a patch to sync up the kernel code changes regarding log space reservation > to the xfsprogs. > > There have a couple of differences between the kernel and the user space. > 1) A few transaction reservation item related to dquot are not synced because they > are not being used in xfsprogs. > 2) In xfs_log_rlimit.c, the xfs_log_validate_logspace() is not copied and the xfs_mkfs.c > still use the default validate_log_space() to check the given log size. Hi Jeff, Just as a heads up, this is going to have conflicts with the CRC patchset that I'm planning on posting in a few minutes. How do you want to resolve them? >From my perspective it's easier if we rebase your patch on top of my patchset. If we go the other way around, I'll have to rebase 10-20 patches that your patch has conflicts with.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Fri May 17 06:13:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7E65E7F37 for ; Fri, 17 May 2013 06:13:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6B7EB30405F for ; Fri, 17 May 2013 04:13:40 -0700 (PDT) X-ASG-Debug-ID: 1368789216-04cb6c53a23521c0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id iRM5nvVv1jUPFtCt for ; Fri, 17 May 2013 04:13:39 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKBOoM/A6h4gyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:36 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbM-0008RR-Lu for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005Dk-HU for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 01/30] mkfs: fix realtime device initialisation Date: Fri, 17 May 2013 21:12:56 +1000 X-ASG-Orig-Subj: [PATCH 01/30] mkfs: fix realtime device initialisation Message-Id: <1368789205-19969-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789218 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The method that libxfs uses for logging inodes is not followed by rtinit(). It fails to join the realtime bitmap inode to the final extent free transactions, and so mkfs.xfs dies when trying to log changes to the bitmap inode. Fix it. Signed-off-by: Dave Chinner --- mkfs/proto.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkfs/proto.c b/mkfs/proto.c index 56eed31..f201096 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -733,6 +733,8 @@ rtinit( tp = libxfs_trans_alloc(mp, 0); if ((i = libxfs_trans_reserve(tp, 0, 0, 0, 0, 0))) res_failed(i); + libxfs_trans_ijoin(tp, rbmip, 0); + libxfs_trans_ihold(tp, rbmip); xfs_bmap_init(&flist, &first); ebno = XFS_RTMIN(mp->m_sb.sb_rextents, bno + NBBY * mp->m_sb.sb_blocksize); -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E4E3529E06 for ; Fri, 17 May 2013 06:13:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id A6E4B8F8035 for ; Fri, 17 May 2013 04:13:39 -0700 (PDT) X-ASG-Debug-ID: 1368789213-04bdf04225359f50001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id ZhAWiXFvdMrPum8f for ; Fri, 17 May 2013 04:13:34 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhAMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCfDuBAgOIP5wyoE6OAoR5A6h4gyIqgSwCHgQC Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:33 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbM-0008RQ-L8 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005Dh-G9 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 00/30] xfsprogs: Initial CRC support Date: Fri, 17 May 2013 21:12:55 +1000 X-ASG-Orig-Subj: [PATCH 00/30] xfsprogs: Initial CRC support Message-Id: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789213 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Folks, This is the first real "works ok" CRC patchset for xfsprogs. It provides full support for mkfs.xfs and xfs_repair, and partial read-only support for xfs_db. For mkfs.xfs, it does everything properly, and filesystems that are freshly made also run cleanly through xfs_repair and mount and run just fine. For xfs_repair, it reads and writes all metadata with CRC checks, calculations and validation just like the kernel code does, but it currently silently ignores the validation done in the IO layer. Enabling that is future work - it involves adding buffer error checking to every libxfs_readbuf() call that is made, and we do none of that right now. It does, however, fully validate all the non-CRC format metadata just as it does for non-CRC filesystems, and so the coverage it has is the same for both CRC and non-CRC filesystems. For xfs_db, there is read-only support for looking at the filesystem as the xfs_db IO stack does not support CRCs at all. We need to convert xfs_db to use the libxfs infrastructure to enable that. Apart from that, xfs_db has partial support for the extended metadata fields - the directory/attribute blocks don't have extended support yet, but everything else does. xfs_check is made special. It currently detects a version 5 superblock, and immediately exits with success. Hence it always says CRC enabled filesystems are OK. This is a temporary change that enables running xfstests without full support in xfs_db for all the new metadata structures (like headers in remote symlink and attribute blocks). Depending on if we want to keep xfs-check useful for xfstests, we can revisit this bypass hack once xfs_db has been converted to use the libxfs IO engine. Overall, xfstests is now running enough to start to find bugs in the kernel CRC code - I'm mainly hitting remote attribute block bugs right now (generic/117!) but there's certainly less problems being reported than I expected. Oh, and I've tested it with external log devices and real time devices, too. Comments, thoughts, flames, and testing all welcome! Cheers, Dave. $ git diff --minimal --stat --summary 8e78288.. copy/xfs_copy.c | 4 +- db/agf.c | 3 + db/agfl.c | 16 + db/agfl.h | 2 + db/agi.c | 3 + db/attr.c | 20 +- db/btblock.c | 145 +++++ db/btblock.h | 10 + db/check.c | 34 +- db/dir2.c | 10 +- db/dir2sf.c | 9 +- db/field.c | 16 + db/field.h | 8 + db/freesp.c | 13 +- db/init.c | 19 + db/inode.c | 27 + db/inode.h | 3 + db/metadump.c | 4 +- db/sb.c | 54 +- db/type.c | 34 +- db/type.h | 3 +- include/Makefile | 4 +- include/libxfs.h | 118 ++-- include/libxlog.h | 2 +- include/xfs_ag.h | 54 +- include/xfs_alloc_btree.h | 13 +- include/xfs_attr_leaf.h | 124 +++- include/xfs_attr_remote.h | 52 ++ include/xfs_bmap_btree.h | 20 +- include/xfs_btree.h | 63 +- include/xfs_buf_item.h | 64 +- include/xfs_da_btree.h | 130 +++- include/xfs_dinode.h | 37 +- include/xfs_dir2.h | 7 + include/xfs_dir2_format.h | 293 ++++++++- include/xfs_ialloc_btree.h | 10 +- include/xfs_inode.h | 26 + include/xfs_mount.h | 1 + include/xfs_quota.h | 11 +- include/xfs_sb.h | 166 ++++- include/xfs_symlink.h | 45 ++ libxfs/Makefile | 4 +- libxfs/init.c | 84 ++- libxfs/logitem.c | 4 +- libxfs/rdwr.c | 236 ++++--- libxfs/trans.c | 17 +- libxfs/util.c | 29 +- libxfs/xfs.h | 37 +- libxfs/xfs_alloc.c | 202 ++++-- libxfs/xfs_alloc_btree.c | 99 ++- libxfs/xfs_attr.c | 386 ++---------- libxfs/xfs_attr_leaf.c | 1553 ++++++++++++++++++++++++++-------------------- libxfs/xfs_attr_remote.c | 527 ++++++++++++++++ libxfs/xfs_bmap.c | 49 +- libxfs/xfs_bmap_btree.c | 107 +++- libxfs/xfs_btree.c | 255 ++++++-- libxfs/xfs_da_btree.c | 1499 +++++++++++++++++++++++++++----------------- libxfs/xfs_dir2_block.c | 171 +++-- libxfs/xfs_dir2_data.c | 266 +++++--- libxfs/xfs_dir2_leaf.c | 880 ++++++++++++++++---------- libxfs/xfs_dir2_node.c | 1007 +++++++++++++++++++----------- libxfs/xfs_dir2_priv.h | 46 +- libxfs/xfs_dir2_sf.c | 8 +- libxfs/xfs_ialloc.c | 78 ++- libxfs/xfs_ialloc_btree.c | 80 ++- libxfs/xfs_inode.c | 124 +++- libxfs/xfs_mount.c | 137 +++- libxfs/xfs_symlink.c | 154 +++++ logprint/log_misc.c | 51 +- logprint/log_print_all.c | 3 +- logprint/log_print_trans.c | 18 + logprint/logprint.c | 4 +- mdrestore/Makefile | 2 +- mkfs/maxtrres.c | 4 +- mkfs/proto.c | 6 +- mkfs/xfs_mkfs.c | 170 +++-- mkfs/xfs_mkfs.h | 12 +- repair/agheader.c | 36 +- repair/attr_repair.c | 173 +++--- repair/dino_chunks.c | 13 +- repair/dinode.c | 200 +++--- repair/dir2.c | 167 ++--- repair/dir2.h | 6 +- repair/phase2.c | 8 +- repair/phase3.c | 2 +- repair/phase5.c | 156 +++-- repair/phase6.c | 172 +++-- repair/prefetch.c | 9 +- repair/rt.c | 4 +- repair/scan.c | 169 ++--- repair/scan.h | 12 +- repair/versions.c | 2 +- repair/xfs_repair.c | 8 +- 93 files changed, 7559 insertions(+), 3564 deletions(-) create mode 100644 include/xfs_attr_remote.h create mode 100644 include/xfs_symlink.h create mode 100644 libxfs/xfs_attr_remote.c create mode 100644 libxfs/xfs_symlink.c From dave@fromorbit.com Fri May 17 06:13:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BE2B729E05 for ; Fri, 17 May 2013 06:13:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A84068F8037 for ; Fri, 17 May 2013 04:13:42 -0700 (PDT) X-ASG-Debug-ID: 1368789219-04cb6c53a23521d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id m9ABmPM8l49dSy7R for ; Fri, 17 May 2013 04:13:39 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYGBk5AxsZiAu9AI4CgS6DSwOoeIMiKoEuJA Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:33 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbM-0008Ra-TI for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005ED-Pa for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 07/30] libxfs: add version 3 inode support Date: Fri, 17 May 2013 21:13:02 +1000 X-ASG-Orig-Subj: [PATCH 07/30] libxfs: add version 3 inode support Message-Id: <1368789205-19969-8-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789219 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner Header from folded patch 'debug': xfs_quota: fix report command parsing The report command line needs to be parsed as a whole not as individual elements - report_f() is set up to do this correctly. When treated as non-global command line, the report function is called once for each command line arg, resulting in reports being issued multiple times. Set the command to be a global command so that it is only called once. Signed-off-by: Dave Chinner --- db/dir2sf.c | 9 +++-- include/xfs_buf_item.h | 4 +- include/xfs_dinode.h | 33 +++++++++++++++-- include/xfs_inode.h | 26 +++++++++++++ libxfs/trans.c | 1 + libxfs/util.c | 30 ++++++++++++++- libxfs/xfs_ialloc.c | 23 +++++++++++- libxfs/xfs_inode.c | 91 ++++++++++++++++++++++++++++++++++++++++------ logprint/log_misc.c | 2 +- logprint/log_print_all.c | 3 +- repair/phase6.c | 63 +++++++++++++++++++++++++++++--- 11 files changed, 255 insertions(+), 30 deletions(-) diff --git a/db/dir2sf.c b/db/dir2sf.c index 92f8a66..271e08a 100644 --- a/db/dir2sf.c +++ b/db/dir2sf.c @@ -74,10 +74,11 @@ dir2_inou_i4_count( void *obj, int startoff) { + struct xfs_dinode *dip = obj; xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(obj); + sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); return sf->hdr.i8count == 0; } @@ -87,10 +88,11 @@ dir2_inou_i8_count( void *obj, int startoff) { + struct xfs_dinode *dip = obj; xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(obj); + sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); return sf->hdr.i8count != 0; } @@ -101,11 +103,12 @@ dir2_inou_size( int startoff, int idx) { + struct xfs_dinode *dip = obj; xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(obj); + sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); return bitize(sf->hdr.i8count ? (uint)sizeof(xfs_dir2_ino8_t) : (uint)sizeof(xfs_dir2_ino4_t)); diff --git a/include/xfs_buf_item.h b/include/xfs_buf_item.h index c256606..abae8c8 100644 --- a/include/xfs_buf_item.h +++ b/include/xfs_buf_item.h @@ -48,6 +48,7 @@ extern kmem_zone_t *xfs_buf_item_zone; #define XFS_BLF_AGF_BUF (1<<6) #define XFS_BLF_AGFL_BUF (1<<7) #define XFS_BLF_AGI_BUF (1<<8) +#define XFS_BLF_DINO_BUF (1<<9) #define XFS_BLF_TYPE_MASK \ (XFS_BLF_UDQUOT_BUF | \ @@ -56,7 +57,8 @@ extern kmem_zone_t *xfs_buf_item_zone; XFS_BLF_BTREE_BUF | \ XFS_BLF_AGF_BUF | \ XFS_BLF_AGFL_BUF | \ - XFS_BLF_AGI_BUF) + XFS_BLF_AGI_BUF | \ + XFS_BLF_DINO_BUF) #define XFS_BLF_CHUNK 128 #define XFS_BLF_SHIFT 7 diff --git a/include/xfs_dinode.h b/include/xfs_dinode.h index 6b5bd17..f7a0e95 100644 --- a/include/xfs_dinode.h +++ b/include/xfs_dinode.h @@ -19,7 +19,7 @@ #define __XFS_DINODE_H__ #define XFS_DINODE_MAGIC 0x494e /* 'IN' */ -#define XFS_DINODE_GOOD_VERSION(v) (((v) == 1 || (v) == 2)) +#define XFS_DINODE_GOOD_VERSION(v) ((v) >= 1 && (v) <= 3) typedef struct xfs_timestamp { __be32 t_sec; /* timestamp seconds */ @@ -70,11 +70,36 @@ typedef struct xfs_dinode { /* di_next_unlinked is the only non-core field in the old dinode */ __be32 di_next_unlinked;/* agi unlinked list ptr */ -} __attribute__((packed)) xfs_dinode_t; + + /* start of the extended dinode, writable fields */ + __le32 di_crc; /* CRC of the inode */ + __be64 di_changecount; /* number of attribute changes */ + __be64 di_lsn; /* flush sequence */ + __be64 di_flags2; /* more random flags */ + __u8 di_pad2[16]; /* more padding for future expansion */ + + /* fields only written to during inode creation */ + xfs_timestamp_t di_crtime; /* time created */ + __be64 di_ino; /* inode number */ + uuid_t di_uuid; /* UUID of the filesystem */ + + /* structure must be padded to 64 bit alignment */ +} xfs_dinode_t; #define DI_MAX_FLUSH 0xffff /* + * Size of the core inode on disk. Version 1 and 2 inodes have + * the same size, but version 3 has grown a few additional fields. + */ +static inline uint xfs_dinode_size(int version) +{ + if (version == 3) + return sizeof(struct xfs_dinode); + return offsetof(struct xfs_dinode, di_crc); +} + +/* * The 32 bit link count in the inode theoretically maxes out at UINT_MAX. * Since the pathconf interface is signed, we use 2^31 - 1 instead. * The old inode format had a 16 bit link count, so its maximum is USHRT_MAX. @@ -105,7 +130,7 @@ typedef enum xfs_dinode_fmt { * Inode size for given fs. */ #define XFS_LITINO(mp, version) \ - ((int)(((mp)->m_sb.sb_inodesize) - sizeof(struct xfs_dinode))) + ((int)(((mp)->m_sb.sb_inodesize) - xfs_dinode_size(version))) #define XFS_BROOT_SIZE_ADJ(ip) \ (XFS_BMBT_BLOCK_LEN((ip)->i_mount) - sizeof(xfs_bmdr_block_t)) @@ -133,7 +158,7 @@ typedef enum xfs_dinode_fmt { * Return pointers to the data or attribute forks. */ #define XFS_DFORK_DPTR(dip) \ - ((char *)(dip) + sizeof(struct xfs_dinode)) + ((char *)dip + xfs_dinode_size(dip->di_version)) #define XFS_DFORK_APTR(dip) \ (XFS_DFORK_DPTR(dip) + XFS_DFORK_BOFF(dip)) #define XFS_DFORK_PTR(dip,w) \ diff --git a/include/xfs_inode.h b/include/xfs_inode.h index 4733f85..cc14743 100644 --- a/include/xfs_inode.h +++ b/include/xfs_inode.h @@ -150,13 +150,38 @@ typedef struct xfs_icdinode { __uint16_t di_dmstate; /* DMIG state info */ __uint16_t di_flags; /* random flags, XFS_DIFLAG_... */ __uint32_t di_gen; /* generation number */ + + /* di_next_unlinked is the only non-core field in the old dinode */ + __be32 di_next_unlinked;/* agi unlinked list ptr */ + + /* start of the extended dinode, writable fields */ + __uint32_t di_crc; /* CRC of the inode */ + __uint64_t di_changecount; /* number of attribute changes */ + xfs_lsn_t di_lsn; /* flush sequence */ + __uint64_t di_flags2; /* more random flags */ + __uint8_t di_pad2[16]; /* more padding for future expansion */ + + /* fields only written to during inode creation */ + xfs_ictimestamp_t di_crtime; /* time created */ + xfs_ino_t di_ino; /* inode number */ + uuid_t di_uuid; /* UUID of the filesystem */ + + /* structure must be padded to 64 bit alignment */ } xfs_icdinode_t; +static inline uint xfs_icdinode_size(struct xfs_icdinode *dicp) +{ + if (dicp->di_version == 3) + return sizeof(struct xfs_icdinode); + return offsetof(struct xfs_icdinode, di_next_unlinked); +} + /* * Flags for xfs_ichgtime(). */ #define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */ #define XFS_ICHGTIME_CHG 0x2 /* inode field change timestamp */ +#define XFS_ICHGTIME_CREATE 0x4 /* inode create timestamp */ /* * Per-fork incore inode flags. @@ -556,6 +581,7 @@ int xfs_imap_to_bp(struct xfs_mount *, struct xfs_trans *, struct xfs_buf **, uint, uint); int xfs_iread(struct xfs_mount *, struct xfs_trans *, struct xfs_inode *, uint); +void xfs_dinode_calc_crc(struct xfs_mount *, struct xfs_dinode *); void xfs_dinode_to_disk(struct xfs_dinode *, struct xfs_icdinode *); void xfs_idestroy_fork(struct xfs_inode *, int); diff --git a/libxfs/trans.c b/libxfs/trans.c index 7cb3c8c..619aad1 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -218,6 +218,7 @@ libxfs_trans_inode_alloc_buf( ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF; + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DINO_BUF); } /* diff --git a/libxfs/util.c b/libxfs/util.c index 2ad4bfd..abe16cf 100644 --- a/libxfs/util.c +++ b/libxfs/util.c @@ -47,6 +47,10 @@ libxfs_trans_ichgtime( ip->i_d.di_ctime.t_sec = (__int32_t)tv.tv_sec; ip->i_d.di_ctime.t_nsec = (__int32_t)tv.tv_nsec; } + if (flags & XFS_ICHGTIME_CREATE) { + ip->i_d.di_crtime.t_sec = (__int32_t)tv.tv_sec; + ip->i_d.di_crtime.t_nsec = (__int32_t)tv.tv_nsec; + } } /* @@ -75,6 +79,7 @@ libxfs_ialloc( xfs_inode_t *ip; uint flags; int error; + int times; /* * Call the space management code to pick @@ -103,6 +108,7 @@ libxfs_ialloc( ip->i_d.di_gid = cr->cr_gid; xfs_set_projid(&ip->i_d, pip ? 0 : fsx->fsx_projid); memset(&(ip->i_d.di_pad[0]), 0, sizeof(ip->i_d.di_pad)); + xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG | XFS_ICHGTIME_MOD); /* * If the superblock version is up to where we support new format @@ -128,7 +134,6 @@ libxfs_ialloc( ip->i_d.di_size = 0; ip->i_d.di_nextents = 0; ASSERT(ip->i_d.di_nblocks == 0); - xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG|XFS_ICHGTIME_MOD); /* * di_gen will have been taken care of in xfs_iread. */ @@ -136,6 +141,18 @@ libxfs_ialloc( ip->i_d.di_dmevmask = 0; ip->i_d.di_dmstate = 0; ip->i_d.di_flags = pip ? 0 : fsx->fsx_xflags; + + if (ip->i_d.di_version == 3) { + ASSERT(ip->i_d.di_ino == ino); + ASSERT(uuid_equal(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid)); + ip->i_d.di_crc = 0; + ip->i_d.di_changecount = 1; + ip->i_d.di_lsn = 0; + ip->i_d.di_flags2 = 0; + memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); + ip->i_d.di_crtime = ip->i_d.di_mtime; + } + flags = XFS_ILOG_CORE; switch (mode & S_IFMT) { case S_IFIFO: @@ -295,6 +312,10 @@ libxfs_iflush_int(xfs_inode_t *ip, xfs_buf_t *bp) ASSERT(ip->i_d.di_nextents+ip->i_d.di_anextents <= ip->i_d.di_nblocks); ASSERT(ip->i_d.di_forkoff <= mp->m_sb.sb_inodesize); + /* bump the change count on v3 inodes */ + if (ip->i_d.di_version == 3) + ip->i_d.di_changecount++; + /* * Copy the dirty parts of the inode into the on-disk * inode. We always copy out the core of the inode, @@ -338,6 +359,13 @@ libxfs_iflush_int(xfs_inode_t *ip, xfs_buf_t *bp) if (XFS_IFORK_Q(ip)) xfs_iflush_fork(ip, dip, iip, XFS_ATTR_FORK, bp); + /* update the lsn in the on disk inode if required */ + if (ip->i_d.di_version == 3) + dip->di_lsn = cpu_to_be64(iip->ili_item.li_lsn); + + /* generate the checksum. */ + xfs_dinode_calc_crc(mp, dip); + return 0; } diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index feb4a4e..57fbae2 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -146,6 +146,7 @@ xfs_ialloc_inode_init( int version; int i, j; xfs_daddr_t d; + xfs_ino_t ino = 0; /* * Loop over the new block(s), filling in the inodes. @@ -169,8 +170,18 @@ xfs_ialloc_inode_init( * the new inode format, then use the new inode version. Otherwise * use the old version so that old kernels will continue to be * able to use the file system. + * + * For v3 inodes, we also need to write the inode number into the inode, + * so calculate the first inode number of the chunk here as + * XFS_OFFBNO_TO_AGINO() only works on filesystem block boundaries, not + * cluster boundaries and so cannot be used in the cluster buffer loop + * below. */ - if (xfs_sb_version_hasnlink(&mp->m_sb)) + if (xfs_sb_version_hascrc(&mp->m_sb)) { + version = 3; + ino = XFS_AGINO_TO_INO(mp, agno, + XFS_OFFBNO_TO_AGINO(mp, agbno, 0)); + } else if (xfs_sb_version_hasnlink(&mp->m_sb)) version = 2; else version = 1; @@ -196,13 +207,21 @@ xfs_ialloc_inode_init( xfs_buf_zero(fbuf, 0, ninodes << mp->m_sb.sb_inodelog); for (i = 0; i < ninodes; i++) { int ioffset = i << mp->m_sb.sb_inodelog; - uint isize = sizeof(struct xfs_dinode); + uint isize = xfs_dinode_size(version); free = xfs_make_iptr(mp, fbuf, i); free->di_magic = cpu_to_be16(XFS_DINODE_MAGIC); free->di_version = version; free->di_gen = cpu_to_be32(gen); free->di_next_unlinked = cpu_to_be32(NULLAGINO); + + if (version == 3) { + free->di_ino = cpu_to_be64(ino); + ino++; + uuid_copy(&free->di_uuid, &mp->m_sb.sb_uuid); + xfs_dinode_calc_crc(mp, free); + } + xfs_trans_log_buf(tp, fbuf, ioffset, ioffset + isize - 1); } xfs_trans_inode_alloc_buf(tp, fbuf); diff --git a/libxfs/xfs_inode.c b/libxfs/xfs_inode.c index f9f792c..d6513b9 100644 --- a/libxfs/xfs_inode.c +++ b/libxfs/xfs_inode.c @@ -572,6 +572,17 @@ xfs_dinode_from_disk( to->di_dmstate = be16_to_cpu(from->di_dmstate); to->di_flags = be16_to_cpu(from->di_flags); to->di_gen = be32_to_cpu(from->di_gen); + + if (to->di_version == 3) { + to->di_changecount = be64_to_cpu(from->di_changecount); + to->di_crtime.t_sec = be32_to_cpu(from->di_crtime.t_sec); + to->di_crtime.t_nsec = be32_to_cpu(from->di_crtime.t_nsec); + to->di_flags2 = be64_to_cpu(from->di_flags2); + to->di_ino = be64_to_cpu(from->di_ino); + to->di_lsn = be64_to_cpu(from->di_lsn); + memcpy(to->di_pad2, from->di_pad2, sizeof(to->di_pad2)); + platform_uuid_copy(&to->di_uuid, &from->di_uuid); + } } void @@ -608,6 +619,58 @@ xfs_dinode_to_disk( to->di_dmstate = cpu_to_be16(from->di_dmstate); to->di_flags = cpu_to_be16(from->di_flags); to->di_gen = cpu_to_be32(from->di_gen); + + if (from->di_version == 3) { + to->di_changecount = cpu_to_be64(from->di_changecount); + to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.t_sec); + to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.t_nsec); + to->di_flags2 = cpu_to_be64(from->di_flags2); + to->di_ino = cpu_to_be64(from->di_ino); + to->di_lsn = cpu_to_be64(from->di_lsn); + memcpy(to->di_pad2, from->di_pad2, sizeof(to->di_pad2)); + platform_uuid_copy(&to->di_uuid, &from->di_uuid); + } +} + +static bool +xfs_dinode_verify( + struct xfs_mount *mp, + struct xfs_inode *ip, + struct xfs_dinode *dip) +{ + if (dip->di_magic != cpu_to_be16(XFS_DINODE_MAGIC)) + return false; + + /* only version 3 or greater inodes are extensively verified here */ + if (dip->di_version < 3) + return true; + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (!xfs_verify_cksum((char *)dip, mp->m_sb.sb_inodesize, + offsetof(struct xfs_dinode, di_crc))) + return false; + if (be64_to_cpu(dip->di_ino) != ip->i_ino) + return false; + if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_uuid)) + return false; + return true; +} + +void +xfs_dinode_calc_crc( + struct xfs_mount *mp, + struct xfs_dinode *dip) +{ + __uint32_t crc; + + if (dip->di_version < 3) + return; + + ASSERT(xfs_sb_version_hascrc(&mp->m_sb)); + crc = xfs_start_cksum((char *)dip, mp->m_sb.sb_inodesize, + offsetof(struct xfs_dinode, di_crc)); + dip->di_crc = xfs_end_cksum(crc); } /* @@ -638,17 +701,13 @@ xfs_iread( if (error) return error; - /* - * If we got something that isn't an inode it means someone - * (nfs or dmi) has a stale handle. - */ - if (dip->di_magic != cpu_to_be16(XFS_DINODE_MAGIC)) { -#ifdef DEBUG - xfs_alert(mp, - "%s: dip->di_magic (0x%x) != XFS_DINODE_MAGIC (0x%x)", - __func__, be16_to_cpu(dip->di_magic), XFS_DINODE_MAGIC); -#endif /* DEBUG */ - error = XFS_ERROR(EINVAL); + /* even unallocated inodes are verified */ + if (!xfs_dinode_verify(mp, ip, dip)) { + xfs_alert(mp, "%s: validation failed for inode %lld failed", + __func__, ip->i_ino); + + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, dip); + error = XFS_ERROR(EFSCORRUPTED); goto out_brelse; } @@ -670,10 +729,20 @@ xfs_iread( goto out_brelse; } } else { + /* + * Partial initialisation of the in-core inode. Just the bits + * that xfs_ialloc won't overwrite or relies on being correct. + */ ip->i_d.di_magic = be16_to_cpu(dip->di_magic); ip->i_d.di_version = dip->di_version; ip->i_d.di_gen = be32_to_cpu(dip->di_gen); ip->i_d.di_flushiter = be16_to_cpu(dip->di_flushiter); + + if (dip->di_version == 3) { + ip->i_d.di_ino = be64_to_cpu(dip->di_ino); + uuid_copy(&ip->i_d.di_uuid, &dip->di_uuid); + } + /* * Make sure to pull in the mode here as well in * case the inode is released without being used. diff --git a/logprint/log_misc.c b/logprint/log_misc.c index 334b6bf..f368e5a 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -655,7 +655,7 @@ xlog_print_trans_inode(xfs_caddr_t *ptr, mode = dino.di_mode & S_IFMT; size = (int)dino.di_size; xlog_print_trans_inode_core(&dino); - *ptr += sizeof(xfs_icdinode_t); + *ptr += xfs_icdinode_size(&dino); if (*i == num_ops-1 && f->ilf_size == 3) { return 1; diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c index dfd76b7..70b0905 100644 --- a/logprint/log_print_all.c +++ b/logprint/log_print_all.c @@ -295,7 +295,8 @@ xlog_recover_print_inode( f->ilf_dsize); /* core inode comes 2nd */ - ASSERT(item->ri_buf[1].i_len == sizeof(xfs_icdinode_t)); + ASSERT(item->ri_buf[1].i_len == xfs_icdinode_size((xfs_icdinode_t *) + item->ri_buf[1].i_addr)); xlog_recover_print_inode_core((xfs_icdinode_t *) item->ri_buf[1].i_addr); diff --git a/repair/phase6.c b/repair/phase6.c index 5c33797..039e8ae 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -427,6 +427,8 @@ mk_rbmino(xfs_mount_t *mp) xfs_bmap_free_t flist; xfs_dfiloff_t bno; xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP]; + int vers; + int times; /* * first set up inode @@ -443,16 +445,31 @@ mk_rbmino(xfs_mount_t *mp) error); } - memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); + vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1; + ip->i_d.di_version = vers; + memset(&ip->i_d, 0, xfs_icdinode_size(&ip->i_d)); ip->i_d.di_magic = XFS_DINODE_MAGIC; ip->i_d.di_mode = S_IFREG; - ip->i_d.di_version = 1; + ip->i_d.di_version = vers; ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS; ip->i_d.di_nlink = 1; /* account for sb ptr */ + times = XFS_ICHGTIME_CHG | XFS_ICHGTIME_MOD; + if (ip->i_d.di_version == 3) { + ip->i_d.di_crc = 0; + ip->i_d.di_changecount = 1; + ip->i_d.di_lsn = 0; + ip->i_d.di_flags2 = 0; + ip->i_d.di_ino = mp->m_sb.sb_rbmino; + memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + times |= XFS_ICHGTIME_CREATE; + } + libxfs_trans_ichgtime(tp, ip, times); + /* * now the ifork */ @@ -659,6 +676,8 @@ mk_rsumino(xfs_mount_t *mp) xfs_bmap_free_t flist; xfs_dfiloff_t bno; xfs_bmbt_irec_t map[XFS_BMAP_MAX_NMAP]; + int vers; + int times; /* * first set up inode @@ -676,16 +695,31 @@ mk_rsumino(xfs_mount_t *mp) error); } - memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); + vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1; + ip->i_d.di_version = vers; + memset(&ip->i_d, 0, xfs_icdinode_size(&ip->i_d)); ip->i_d.di_magic = XFS_DINODE_MAGIC; ip->i_d.di_mode = S_IFREG; - ip->i_d.di_version = 1; + ip->i_d.di_version = vers; ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS; ip->i_d.di_nlink = 1; /* account for sb ptr */ + times = XFS_ICHGTIME_CHG | XFS_ICHGTIME_MOD; + if (ip->i_d.di_version == 3) { + ip->i_d.di_crc = 0; + ip->i_d.di_changecount = 1; + ip->i_d.di_lsn = 0; + ip->i_d.di_flags2 = 0; + ip->i_d.di_ino = mp->m_sb.sb_rsumino; + memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + times |= XFS_ICHGTIME_CREATE; + } + libxfs_trans_ichgtime(tp, ip, times); + /* * now the ifork */ @@ -758,6 +792,8 @@ mk_root_dir(xfs_mount_t *mp) int error; const mode_t mode = 0755; ino_tree_node_t *irec; + int vers; + int times; ASSERT(xfs_sb_version_hasdirv2(&mp->m_sb)); @@ -776,16 +812,31 @@ mk_root_dir(xfs_mount_t *mp) /* * take care of the core -- initialization from xfs_ialloc() */ - memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); + vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1; + ip->i_d.di_version = vers; + memset(&ip->i_d, 0, xfs_icdinode_size(&ip->i_d)); ip->i_d.di_magic = XFS_DINODE_MAGIC; ip->i_d.di_mode = (__uint16_t) mode|S_IFDIR; - ip->i_d.di_version = 1; + ip->i_d.di_version = vers; ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS; ip->i_d.di_nlink = 1; /* account for . */ + times = XFS_ICHGTIME_CHG | XFS_ICHGTIME_MOD; + if (ip->i_d.di_version == 3) { + ip->i_d.di_crc = 0; + ip->i_d.di_changecount = 1; + ip->i_d.di_lsn = 0; + ip->i_d.di_flags2 = 0; + ip->i_d.di_ino = mp->m_sb.sb_rootino; + memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + times |= XFS_ICHGTIME_CREATE; + } + libxfs_trans_ichgtime(tp, ip, times); + libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); /* -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8685B29E07 for ; Fri, 17 May 2013 06:13:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id EA993AC001 for ; Fri, 17 May 2013 04:13:39 -0700 (PDT) X-ASG-Debug-ID: 1368789216-04cb6c53a23521c0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id pGSX9zWO2xAkZumQ for ; Fri, 17 May 2013 04:13:36 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhQMACUQllF5LDbs/2dsb2JhbABbgwjCDgQBeRd0gh8BAQUnLzMIGDE5AxsZiAu9AI4CgRiDYQOoeIMiKoEuJA Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:33 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbM-0008RV-Q1 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005Dy-M6 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 04/30] xfsprogs: add crc format chagnes to ag headers Date: Fri, 17 May 2013 21:12:59 +1000 X-ASG-Orig-Subj: [PATCH 04/30] xfsprogs: add crc format chagnes to ag headers Message-Id: <1368789205-19969-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789216 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- include/xfs_ag.h | 54 ++++++++++++- include/xfs_buf_item.h | 8 +- libxfs/xfs_alloc.c | 197 ++++++++++++++++++++++++++++++++---------------- libxfs/xfs_ialloc.c | 55 ++++++++++---- 4 files changed, 231 insertions(+), 83 deletions(-) diff --git a/include/xfs_ag.h b/include/xfs_ag.h index f2aeedb..1e0fa34 100644 --- a/include/xfs_ag.h +++ b/include/xfs_ag.h @@ -30,6 +30,7 @@ struct xfs_trans; #define XFS_AGF_MAGIC 0x58414746 /* 'XAGF' */ #define XFS_AGI_MAGIC 0x58414749 /* 'XAGI' */ +#define XFS_AGFL_MAGIC 0x5841464c /* 'XAFL' */ #define XFS_AGF_VERSION 1 #define XFS_AGI_VERSION 1 @@ -63,12 +64,29 @@ typedef struct xfs_agf { __be32 agf_spare0; /* spare field */ __be32 agf_levels[XFS_BTNUM_AGF]; /* btree levels */ __be32 agf_spare1; /* spare field */ + __be32 agf_flfirst; /* first freelist block's index */ __be32 agf_fllast; /* last freelist block's index */ __be32 agf_flcount; /* count of blocks in freelist */ __be32 agf_freeblks; /* total free blocks */ + __be32 agf_longest; /* longest free space */ __be32 agf_btreeblks; /* # of blocks held in AGF btrees */ + uuid_t agf_uuid; /* uuid of filesystem */ + + /* + * reserve some contiguous space for future logged fields before we add + * the unlogged fields. This makes the range logging via flags and + * structure offsets much simpler. + */ + __be64 agf_spare64[16]; + + /* unlogged fields, written during buffer writeback. */ + __be64 agf_lsn; /* last write sequence */ + __be32 agf_crc; /* crc of agf sector */ + __be32 agf_spare2; + + /* structure must be padded to 64 bit alignment */ } xfs_agf_t; #define XFS_AGF_MAGICNUM 0x00000001 @@ -83,6 +101,7 @@ typedef struct xfs_agf { #define XFS_AGF_FREEBLKS 0x00000200 #define XFS_AGF_LONGEST 0x00000400 #define XFS_AGF_BTREEBLKS 0x00000800 +#define XFS_AGF_UUID 0x00001000 #define XFS_AGF_NUM_BITS 12 #define XFS_AGF_ALL_BITS ((1 << XFS_AGF_NUM_BITS) - 1) @@ -98,7 +117,8 @@ typedef struct xfs_agf { { XFS_AGF_FLCOUNT, "FLCOUNT" }, \ { XFS_AGF_FREEBLKS, "FREEBLKS" }, \ { XFS_AGF_LONGEST, "LONGEST" }, \ - { XFS_AGF_BTREEBLKS, "BTREEBLKS" } + { XFS_AGF_BTREEBLKS, "BTREEBLKS" }, \ + { XFS_AGF_UUID, "UUID" } /* disk block (xfs_daddr_t) in the AG */ #define XFS_AGF_DADDR(mp) ((xfs_daddr_t)(1 << (mp)->m_sectbb_log)) @@ -132,6 +152,7 @@ typedef struct xfs_agi { __be32 agi_root; /* root of inode btree */ __be32 agi_level; /* levels in inode btree */ __be32 agi_freecount; /* number of free inodes */ + __be32 agi_newino; /* new inode just allocated */ __be32 agi_dirino; /* last directory inode chunk */ /* @@ -139,6 +160,13 @@ typedef struct xfs_agi { * still being referenced. */ __be32 agi_unlinked[XFS_AGI_UNLINKED_BUCKETS]; + + uuid_t agi_uuid; /* uuid of filesystem */ + __be32 agi_crc; /* crc of agi sector */ + __be32 agi_pad32; + __be64 agi_lsn; /* last write sequence */ + + /* structure must be padded to 64 bit alignment */ } xfs_agi_t; #define XFS_AGI_MAGICNUM 0x00000001 @@ -171,11 +199,31 @@ extern const struct xfs_buf_ops xfs_agi_buf_ops; */ #define XFS_AGFL_DADDR(mp) ((xfs_daddr_t)(3 << (mp)->m_sectbb_log)) #define XFS_AGFL_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGFL_DADDR(mp)) -#define XFS_AGFL_SIZE(mp) ((mp)->m_sb.sb_sectsize / sizeof(xfs_agblock_t)) #define XFS_BUF_TO_AGFL(bp) ((xfs_agfl_t *)((bp)->b_addr)) +#define XFS_BUF_TO_AGFL_BNO(mp, bp) \ + (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ + &(XFS_BUF_TO_AGFL(bp)->agfl_bno[0]) : \ + (__be32 *)(bp)->b_addr) + +/* + * Size of the AGFL. For CRC-enabled filesystes we steal a couple of + * slots in the beginning of the block for a proper header with the + * location information and CRC. + */ +#define XFS_AGFL_SIZE(mp) \ + (((mp)->m_sb.sb_sectsize - \ + (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ + sizeof(struct xfs_agfl) : 0)) / \ + sizeof(xfs_agblock_t)) + typedef struct xfs_agfl { - __be32 agfl_bno[1]; /* actually XFS_AGFL_SIZE(mp) */ + __be32 agfl_magicnum; + __be32 agfl_seqno; + uuid_t agfl_uuid; + __be64 agfl_lsn; + __be32 agfl_crc; + __be32 agfl_bno[]; /* actually XFS_AGFL_SIZE(mp) */ } xfs_agfl_t; /* diff --git a/include/xfs_buf_item.h b/include/xfs_buf_item.h index 101ef83..c256606 100644 --- a/include/xfs_buf_item.h +++ b/include/xfs_buf_item.h @@ -45,12 +45,18 @@ extern kmem_zone_t *xfs_buf_item_zone; * once the changes have been replayed into the buffer. */ #define XFS_BLF_BTREE_BUF (1<<5) +#define XFS_BLF_AGF_BUF (1<<6) +#define XFS_BLF_AGFL_BUF (1<<7) +#define XFS_BLF_AGI_BUF (1<<8) #define XFS_BLF_TYPE_MASK \ (XFS_BLF_UDQUOT_BUF | \ XFS_BLF_PDQUOT_BUF | \ XFS_BLF_GDQUOT_BUF | \ - XFS_BLF_BTREE_BUF) + XFS_BLF_BTREE_BUF | \ + XFS_BLF_AGF_BUF | \ + XFS_BLF_AGFL_BUF | \ + XFS_BLF_AGI_BUF) #define XFS_BLF_CHUNK 128 #define XFS_BLF_SHIFT 7 diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index e59fdac..30fc5f4 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -410,53 +410,84 @@ xfs_alloc_fixup_trees( return 0; } -static void +static bool xfs_agfl_verify( struct xfs_buf *bp) { -#ifdef WHEN_CRCS_COME_ALONG - /* - * we cannot actually do any verification of the AGFL because mkfs does - * not initialise the AGFL to zero or NULL. Hence the only valid part of - * the AGFL is what the AGF says is active. We can't get to the AGF, so - * we can't verify just those entries are valid. - * - * This problem goes away when the CRC format change comes along as that - * requires the AGFL to be initialised by mkfs. At that point, we can - * verify the blocks in the agfl -active or not- lie within the bounds - * of the AG. Until then, just leave this check ifdef'd out. - */ struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_agfl *agfl = XFS_BUF_TO_AGFL(bp); - int agfl_ok = 1; - int i; + if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_uuid)) + return false; + if (be32_to_cpu(agfl->agfl_magicnum) != XFS_AGFL_MAGIC) + return false; + /* + * during growfs operations, the perag is not fully initialised, + * so we can't use it for any useful checking. growfs ensures we can't + * use it by using uncached buffers that don't have the perag attached + * so we can detect and avoid this problem. + */ + if (bp->b_pag && be32_to_cpu(agfl->agfl_seqno) != bp->b_pag->pag_agno) + return false; + for (i = 0; i < XFS_AGFL_SIZE(mp); i++) { - if (be32_to_cpu(agfl->agfl_bno[i]) == NULLAGBLOCK || + if (be32_to_cpu(agfl->agfl_bno[i]) != NULLAGBLOCK && be32_to_cpu(agfl->agfl_bno[i]) >= mp->m_sb.sb_agblocks) - agfl_ok = 0; + return false; } + return true; +} + +static void +xfs_agfl_read_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + int agfl_ok = 1; + + /* + * There is no verification of non-crc AGFLs because mkfs does not + * initialise the AGFL to zero or NULL. Hence the only valid part of the + * AGFL is what the AGF says is active. We can't get to the AGF, so we + * can't verify just those entries are valid. + */ + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + agfl_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_agfl, agfl_crc)); + + agfl_ok = agfl_ok && xfs_agfl_verify(bp); if (!agfl_ok) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, agfl); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); xfs_buf_ioerror(bp, EFSCORRUPTED); } -#endif } static void xfs_agfl_write_verify( struct xfs_buf *bp) { - xfs_agfl_verify(bp); -} + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; -static void -xfs_agfl_read_verify( - struct xfs_buf *bp) -{ - xfs_agfl_verify(bp); + /* no verification of non-crc AGFLs */ + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (!xfs_agfl_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (bip) + XFS_BUF_TO_AGFL(bp)->agfl_lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_agfl, agfl_crc)); } const struct xfs_buf_ops xfs_agfl_buf_ops = { @@ -1964,18 +1995,18 @@ xfs_alloc_get_freelist( int btreeblk) /* destination is a AGF btree */ { xfs_agf_t *agf; /* a.g. freespace structure */ - xfs_agfl_t *agfl; /* a.g. freelist structure */ xfs_buf_t *agflbp;/* buffer for a.g. freelist structure */ xfs_agblock_t bno; /* block number returned */ + __be32 *agfl_bno; int error; int logflags; - xfs_mount_t *mp; /* mount structure */ + xfs_mount_t *mp = tp->t_mountp; xfs_perag_t *pag; /* per allocation group data */ - agf = XFS_BUF_TO_AGF(agbp); /* * Freelist is empty, give up. */ + agf = XFS_BUF_TO_AGF(agbp); if (!agf->agf_flcount) { *bnop = NULLAGBLOCK; return 0; @@ -1983,15 +2014,17 @@ xfs_alloc_get_freelist( /* * Read the array of free blocks. */ - mp = tp->t_mountp; - if ((error = xfs_alloc_read_agfl(mp, tp, - be32_to_cpu(agf->agf_seqno), &agflbp))) + error = xfs_alloc_read_agfl(mp, tp, be32_to_cpu(agf->agf_seqno), + &agflbp); + if (error) return error; - agfl = XFS_BUF_TO_AGFL(agflbp); + + /* * Get the block number and update the data structures. */ - bno = be32_to_cpu(agfl->agfl_bno[be32_to_cpu(agf->agf_flfirst)]); + agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, agflbp); + bno = be32_to_cpu(agfl_bno[be32_to_cpu(agf->agf_flfirst)]); be32_add_cpu(&agf->agf_flfirst, 1); xfs_trans_brelse(tp, agflbp); if (be32_to_cpu(agf->agf_flfirst) == XFS_AGFL_SIZE(mp)) @@ -2040,11 +2073,14 @@ xfs_alloc_log_agf( offsetof(xfs_agf_t, agf_freeblks), offsetof(xfs_agf_t, agf_longest), offsetof(xfs_agf_t, agf_btreeblks), + offsetof(xfs_agf_t, agf_uuid), sizeof(xfs_agf_t) }; trace_xfs_agf(tp->t_mountp, XFS_BUF_TO_AGF(bp), fields, _RET_IP_); + xfs_trans_buf_set_type(tp, bp, XFS_BLF_AGF_BUF); + xfs_btree_offsets(fields, offsets, XFS_AGF_NUM_BITS, &first, &last); xfs_trans_log_buf(tp, bp, (uint)first, (uint)last); } @@ -2081,12 +2117,13 @@ xfs_alloc_put_freelist( int btreeblk) /* block came from a AGF btree */ { xfs_agf_t *agf; /* a.g. freespace structure */ - xfs_agfl_t *agfl; /* a.g. free block array */ __be32 *blockp;/* pointer to array entry */ int error; int logflags; xfs_mount_t *mp; /* mount structure */ xfs_perag_t *pag; /* per allocation group data */ + __be32 *agfl_bno; + int startoff; agf = XFS_BUF_TO_AGF(agbp); mp = tp->t_mountp; @@ -2094,7 +2131,6 @@ xfs_alloc_put_freelist( if (!agflbp && (error = xfs_alloc_read_agfl(mp, tp, be32_to_cpu(agf->agf_seqno), &agflbp))) return error; - agfl = XFS_BUF_TO_AGFL(agflbp); be32_add_cpu(&agf->agf_fllast, 1); if (be32_to_cpu(agf->agf_fllast) == XFS_AGFL_SIZE(mp)) agf->agf_fllast = 0; @@ -2115,32 +2151,38 @@ xfs_alloc_put_freelist( xfs_alloc_log_agf(tp, agbp, logflags); ASSERT(be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp)); - blockp = &agfl->agfl_bno[be32_to_cpu(agf->agf_fllast)]; + + agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, agflbp); + blockp = &agfl_bno[be32_to_cpu(agf->agf_fllast)]; *blockp = cpu_to_be32(bno); + startoff = (char *)blockp - (char *)agflbp->b_addr; + xfs_alloc_log_agf(tp, agbp, logflags); - xfs_trans_log_buf(tp, agflbp, - (int)((xfs_caddr_t)blockp - (xfs_caddr_t)agfl), - (int)((xfs_caddr_t)blockp - (xfs_caddr_t)agfl + - sizeof(xfs_agblock_t) - 1)); + + xfs_trans_buf_set_type(tp, agflbp, XFS_BLF_AGFL_BUF); + xfs_trans_log_buf(tp, agflbp, startoff, + startoff + sizeof(xfs_agblock_t) - 1); return 0; } -static void +static bool xfs_agf_verify( + struct xfs_mount *mp, struct xfs_buf *bp) { - struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_agf *agf; - int agf_ok; + struct xfs_agf *agf = XFS_BUF_TO_AGF(bp); - agf = XFS_BUF_TO_AGF(bp); + if (xfs_sb_version_hascrc(&mp->m_sb) && + !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_uuid)) + return false; - agf_ok = agf->agf_magicnum == cpu_to_be32(XFS_AGF_MAGIC) && - XFS_AGF_GOOD_VERSION(be32_to_cpu(agf->agf_versionnum)) && - be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length) && - be32_to_cpu(agf->agf_flfirst) < XFS_AGFL_SIZE(mp) && - be32_to_cpu(agf->agf_fllast) < XFS_AGFL_SIZE(mp) && - be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp); + if (!(agf->agf_magicnum == cpu_to_be32(XFS_AGF_MAGIC) && + XFS_AGF_GOOD_VERSION(be32_to_cpu(agf->agf_versionnum)) && + be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length) && + be32_to_cpu(agf->agf_flfirst) < XFS_AGFL_SIZE(mp) && + be32_to_cpu(agf->agf_fllast) < XFS_AGFL_SIZE(mp) && + be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp))) + return false; /* * during growfs operations, the perag is not fully initialised, @@ -2148,33 +2190,58 @@ xfs_agf_verify( * use it by using uncached buffers that don't have the perag attached * so we can detect and avoid this problem. */ - if (bp->b_pag) - agf_ok = agf_ok && be32_to_cpu(agf->agf_seqno) == - bp->b_pag->pag_agno; + if (bp->b_pag && be32_to_cpu(agf->agf_seqno) != bp->b_pag->pag_agno) + return false; - if (xfs_sb_version_haslazysbcount(&mp->m_sb)) - agf_ok = agf_ok && be32_to_cpu(agf->agf_btreeblks) <= - be32_to_cpu(agf->agf_length); + if (xfs_sb_version_haslazysbcount(&mp->m_sb) && + be32_to_cpu(agf->agf_btreeblks) > be32_to_cpu(agf->agf_length)) + return false; + + return true;; - if (unlikely(XFS_TEST_ERROR(!agf_ok, mp, XFS_ERRTAG_ALLOC_READ_AGF, - XFS_RANDOM_ALLOC_READ_AGF))) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, agf); - xfs_buf_ioerror(bp, EFSCORRUPTED); - } } static void xfs_agf_read_verify( struct xfs_buf *bp) { - xfs_agf_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + int agf_ok = 1; + + if (xfs_sb_version_hascrc(&mp->m_sb)) + agf_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_agf, agf_crc)); + + agf_ok = agf_ok && xfs_agf_verify(mp, bp); + + if (unlikely(XFS_TEST_ERROR(!agf_ok, mp, XFS_ERRTAG_ALLOC_READ_AGF, + XFS_RANDOM_ALLOC_READ_AGF))) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void xfs_agf_write_verify( struct xfs_buf *bp) { - xfs_agf_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + + if (!xfs_agf_verify(mp, bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + XFS_BUF_TO_AGF(bp)->agf_lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_agf, agf_crc)); } const struct xfs_buf_ops xfs_agf_buf_ops = { diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index f0322c9..feb4a4e 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -1267,6 +1267,7 @@ xfs_ialloc_log_agi( /* * Log the allocation group inode header buffer. */ + xfs_trans_buf_set_type(tp, bp, XFS_BLF_AGI_BUF); xfs_trans_log_buf(tp, bp, first, last); } @@ -1284,19 +1285,23 @@ xfs_check_agi_unlinked( #define xfs_check_agi_unlinked(agi) #endif -static void +static bool xfs_agi_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_agi *agi = XFS_BUF_TO_AGI(bp); - int agi_ok; + if (xfs_sb_version_hascrc(&mp->m_sb) && + !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_uuid)) + return false; /* * Validate the magic number of the agi block. */ - agi_ok = agi->agi_magicnum == cpu_to_be32(XFS_AGI_MAGIC) && - XFS_AGI_GOOD_VERSION(be32_to_cpu(agi->agi_versionnum)); + if (agi->agi_magicnum != cpu_to_be32(XFS_AGI_MAGIC)) + return false; + if (!XFS_AGI_GOOD_VERSION(be32_to_cpu(agi->agi_versionnum))) + return false; /* * during growfs operations, the perag is not fully initialised, @@ -1304,30 +1309,52 @@ xfs_agi_verify( * use it by using uncached buffers that don't have the perag attached * so we can detect and avoid this problem. */ - if (bp->b_pag) - agi_ok = agi_ok && be32_to_cpu(agi->agi_seqno) == - bp->b_pag->pag_agno; + if (bp->b_pag && be32_to_cpu(agi->agi_seqno) != bp->b_pag->pag_agno) + return false; - if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, - XFS_RANDOM_IALLOC_READ_AGI))) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, agi); - xfs_buf_ioerror(bp, EFSCORRUPTED); - } xfs_check_agi_unlinked(agi); + return true; } static void xfs_agi_read_verify( struct xfs_buf *bp) { - xfs_agi_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + int agi_ok = 1; + + if (xfs_sb_version_hascrc(&mp->m_sb)) + agi_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_agi, agi_crc)); + agi_ok = agi_ok && xfs_agi_verify(bp); + + if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, + XFS_RANDOM_IALLOC_READ_AGI))) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void xfs_agi_write_verify( struct xfs_buf *bp) { - xfs_agi_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + + if (!xfs_agi_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + XFS_BUF_TO_AGI(bp)->agi_lsn = cpu_to_be64(bip->bli_item.li_lsn); + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_agi, agi_crc)); } const struct xfs_buf_ops xfs_agi_buf_ops = { -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9286F29E09 for ; Fri, 17 May 2013 06:13:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 540EE304059 for ; Fri, 17 May 2013 04:13:45 -0700 (PDT) X-ASG-Debug-ID: 1368789213-04bdf04225359f50003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 0SESHXl6t7NCaB6e for ; Fri, 17 May 2013 04:13:43 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOoeIMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbW-0008RS-N9 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:42 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005Do-JJ for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 02/30] logprint: fix wrapped log dump issue. Date: Fri, 17 May 2013 21:12:57 +1000 X-ASG-Orig-Subj: [PATCH 02/30] logprint: fix wrapped log dump issue. Message-Id: <1368789205-19969-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789222 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When running xfs/295 on a 512 byte block size filesystem, logprint fails during checking with a "Bad log record header" error. This is due to the fact that the log has wrapped and there is partial record a the start of the log. logprint doesn't check for this condition, and simply assumes that the first block in the log contains a log header, and hence aborts when this case occurs. So we now have a spurious test failure due to logprint displaying how right this comment is: /* * This code is gross and needs to be rewritten. */ Signed-off-by: Dave Chinner --- logprint/log_misc.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/logprint/log_misc.c b/logprint/log_misc.c index d08f900..334b6bf 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -833,7 +833,8 @@ xlog_print_record(int fd, int *read_type, xfs_caddr_t *partial_buf, xlog_rec_header_t *rhead, - xlog_rec_ext_header_t *xhdrs) + xlog_rec_ext_header_t *xhdrs, + int bad_hdr_warn) { xfs_caddr_t buf, ptr; int read_len, skip; @@ -1006,11 +1007,17 @@ xlog_print_record(int fd, break; } default: { - fprintf(stderr, _("%s: unknown log operation type (%x)\n"), - progname, *(unsigned short *)ptr); - if (print_exit) { - free(buf); - return BAD_HEADER; + if(bad_hdr_warn) { + fprintf(stderr, + _("%s: unknown log operation type (%x)\n"), + progname, *(unsigned short *)ptr); + if (print_exit) { + free(buf); + return BAD_HEADER; + } + } else { + printf( + _("Left over region from split log item\n")); } skip = 0; ptr += be32_to_cpu(op_head->oh_len); @@ -1028,7 +1035,7 @@ xlog_print_record(int fd, int -xlog_print_rec_head(xlog_rec_header_t *head, int *len) +xlog_print_rec_head(xlog_rec_header_t *head, int *len, int bad_hdr_warn) { int i; char uub[64]; @@ -1041,9 +1048,10 @@ xlog_print_rec_head(xlog_rec_header_t *head, int *len) return ZEROED_LOG; if (be32_to_cpu(head->h_magicno) != XLOG_HEADER_MAGIC_NUM) { - printf(_("Header 0x%x wanted 0x%x\n"), - be32_to_cpu(head->h_magicno), - XLOG_HEADER_MAGIC_NUM); + if (bad_hdr_warn) + printf(_("Header 0x%x wanted 0x%x\n"), + be32_to_cpu(head->h_magicno), + XLOG_HEADER_MAGIC_NUM); return BAD_HEADER; } @@ -1269,8 +1277,9 @@ void xfs_log_print(struct xlog *log, xfs_daddr_t zeroed_blkno = 0, cleared_blkno = 0; int read_type = FULL_READ; xfs_caddr_t partial_buf; - int zeroed = 0; - int cleared = 0; + int zeroed = 0; + int cleared = 0; + int first_hdr_found = 0; logBBsize = log->l_logBBsize; @@ -1302,7 +1311,7 @@ void xfs_log_print(struct xlog *log, blkno++; goto loop; } - num_ops = xlog_print_rec_head(hdr, &len); + num_ops = xlog_print_rec_head(hdr, &len, first_hdr_found); blkno++; if (zeroed && num_ops != ZEROED_LOG) { @@ -1328,7 +1337,10 @@ void xfs_log_print(struct xlog *log, cleared_blkno = blkno-1; cleared++; } else { - print_xlog_bad_header(blkno-1, hbuf); + if (!first_hdr_found) + block_start = blkno; + else + print_xlog_bad_header(blkno-1, hbuf); } goto loop; @@ -1339,7 +1351,9 @@ void xfs_log_print(struct xlog *log, break; } - error = xlog_print_record(fd, num_ops, len, &read_type, &partial_buf, hdr, xhdrs); + error = xlog_print_record(fd, num_ops, len, &read_type, &partial_buf, + hdr, xhdrs, first_hdr_found); + first_hdr_found++; switch (error) { case 0: { blkno += BTOBB(len); @@ -1415,7 +1429,7 @@ loop: blkno++; goto loop2; } - num_ops = xlog_print_rec_head(hdr, &len); + num_ops = xlog_print_rec_head(hdr, &len, first_hdr_found); blkno++; if (num_ops == ZEROED_LOG || @@ -1444,7 +1458,8 @@ partial_log_read: &read_type, &partial_buf, (xlog_rec_header_t *)hbuf, - xhdrs); + xhdrs, + first_hdr_found); if (read_type != FULL_READ) len -= read_type; read_type = FULL_READ; -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5E40229E0F for ; Fri, 17 May 2013 06:13:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2CE518F8035 for ; Fri, 17 May 2013 04:13:46 -0700 (PDT) X-ASG-Debug-ID: 1368789213-04bdf04225359f50004-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id UNqLGN8RGCDfAtVW for ; Fri, 17 May 2013 04:13:44 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhEMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBVYzCBgxOQMbGYgLvQCNWxQTgTqDPwOoeIMiKoEsAR8 Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbW-0008S2-UX for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:42 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005E8-OW for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 06/30] libxfs: change quota buffer formats Date: Fri, 17 May 2013 21:13:01 +1000 X-ASG-Orig-Subj: [PATCH 06/30] libxfs: change quota buffer formats Message-Id: <1368789205-19969-7-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789224 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- include/xfs_quota.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/include/xfs_quota.h b/include/xfs_quota.h index b50ec5b..c61e31c 100644 --- a/include/xfs_quota.h +++ b/include/xfs_quota.h @@ -77,7 +77,14 @@ typedef struct xfs_disk_dquot { */ typedef struct xfs_dqblk { xfs_disk_dquot_t dd_diskdq; /* portion that lives incore as well */ - char dd_fill[32]; /* filling for posterity */ + char dd_fill[4]; /* filling for posterity */ + + /* + * These two are only present on filesystems with the CRC bits set. + */ + __be32 dd_crc; /* checksum */ + __be64 dd_lsn; /* last modification in log */ + uuid_t dd_uuid; /* location information */ } xfs_dqblk_t; /* @@ -380,5 +387,7 @@ extern int xfs_qm_dqcheck(struct xfs_mount *, xfs_disk_dquot_t *, xfs_dqid_t, uint, uint, char *); extern int xfs_mount_reset_sbqflags(struct xfs_mount *); +extern const struct xfs_buf_ops xfs_dquot_buf_ops; + #endif /* __KERNEL__ */ #endif /* __XFS_QUOTA_H__ */ -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E050229E10 for ; Fri, 17 May 2013 06:13:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6B25DAC001 for ; Fri, 17 May 2013 04:13:46 -0700 (PDT) X-ASG-Debug-ID: 1368789224-04cbb05fe2351650001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id SHDMHteidlyEGZ8h for ; Fri, 17 May 2013 04:13:44 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOoeIMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbM-0008RX-R1 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005E3-NU for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 05/30] xfsprogs: Support new AGFL format Date: Fri, 17 May 2013 21:13:00 +1000 X-ASG-Orig-Subj: [PATCH 05/30] xfsprogs: Support new AGFL format Message-Id: <1368789205-19969-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789224 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner With the addition of CRCs to the filesystem format, the AGFL has a new format structure definition. Existing code that pulls freelist blocks out via dereferencing agfl->agfl_bno no longer works as the location of the free list is now variable depending on the disk format in use. Hence all the users of agfl_bno need ot be converted to extract the location of the first free list entry from the AGFL and grab entries relative to that first entry. It's a simple change, but needs to be made in several places as there is very little code reuse within and between the different utilities in xfsprogs. Signed-off-by: Dave Chinner --- db/check.c | 6 +++++- db/freesp.c | 7 ++++++- repair/phase5.c | 6 ++++-- repair/scan.c | 6 +++--- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/db/check.c b/db/check.c index 353530b..127e407 100644 --- a/db/check.c +++ b/db/check.c @@ -3806,6 +3806,7 @@ scan_freelist( xfs_agblock_t bno; uint count; int i; + __be32 *freelist; if (XFS_SB_BLOCK(mp) != XFS_AGFL_BLOCK(mp) && XFS_AGF_BLOCK(mp) != XFS_AGFL_BLOCK(mp) && @@ -3835,9 +3836,12 @@ scan_freelist( return; } + /* open coded XFS_BUF_TO_AGFL_BNO */ + freelist = xfs_sb_version_hascrc(&((mp)->m_sb)) ? &agfl->agfl_bno[0] + : (__be32 *)agfl; count = 0; for (;;) { - bno = be32_to_cpu(agfl->agfl_bno[i]); + bno = be32_to_cpu(freelist[i]); set_dbmap(seqno, bno, 1, DBM_FREELIST, seqno, XFS_AGFL_BLOCK(mp)); count++; diff --git a/db/freesp.c b/db/freesp.c index 472b1f7..228ca07 100644 --- a/db/freesp.c +++ b/db/freesp.c @@ -231,6 +231,7 @@ scan_freelist( xfs_agfl_t *agfl; xfs_agblock_t bno; int i; + __be32 *agfl_bno; if (be32_to_cpu(agf->agf_flcount) == 0) return; @@ -240,6 +241,10 @@ scan_freelist( agfl = iocur_top->data; i = be32_to_cpu(agf->agf_flfirst); + /* open coded XFS_BUF_TO_AGFL_BNO */ + agfl_bno = xfs_sb_version_hascrc(&mp->m_sb) ? &agfl->agfl_bno[0] + : (__be32 *)agfl; + /* verify agf values before proceeding */ if (be32_to_cpu(agf->agf_flfirst) >= XFS_AGFL_SIZE(mp) || be32_to_cpu(agf->agf_fllast) >= XFS_AGFL_SIZE(mp)) { @@ -250,7 +255,7 @@ scan_freelist( } for (;;) { - bno = be32_to_cpu(agfl->agfl_bno[i]); + bno = be32_to_cpu(agfl_bno[i]); addtohist(seqno, bno, 1); if (i == be32_to_cpu(agf->agf_fllast)) break; diff --git a/repair/phase5.c b/repair/phase5.c index 1f71cac..c7cef4f 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -1208,6 +1208,7 @@ build_agf_agfl(xfs_mount_t *mp, int j; xfs_agfl_t *agfl; xfs_agf_t *agf; + __be32 *freelist; agf_buf = libxfs_getbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)), @@ -1277,19 +1278,20 @@ build_agf_agfl(xfs_mount_t *mp, XFS_AG_DADDR(mp, agno, XFS_AGFL_DADDR(mp)), mp->m_sb.sb_sectsize/BBSIZE); agfl = XFS_BUF_TO_AGFL(agfl_buf); + freelist = XFS_BUF_TO_AGFL_BNO(mp, agfl_buf); memset(agfl, 0, mp->m_sb.sb_sectsize); /* * ok, now grab as many blocks as we can */ i = j = 0; while (bno_bt->num_free_blocks > 0 && i < XFS_AGFL_SIZE(mp)) { - agfl->agfl_bno[i] = cpu_to_be32( + freelist[i] = cpu_to_be32( get_next_blockaddr(agno, 0, bno_bt)); i++; } while (bcnt_bt->num_free_blocks > 0 && i < XFS_AGFL_SIZE(mp)) { - agfl->agfl_bno[i] = cpu_to_be32( + freelist[i] = cpu_to_be32( get_next_blockaddr(agno, 0, bcnt_bt)); i++; } diff --git a/repair/scan.c b/repair/scan.c index 76bb7f1..f79342a 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -1041,12 +1041,12 @@ scan_freelist( xfs_agf_t *agf, struct aghdr_cnts *agcnts) { - xfs_agfl_t *agfl; xfs_buf_t *agflbuf; xfs_agnumber_t agno; xfs_agblock_t bno; int count; int i; + __be32 *freelist; agno = be32_to_cpu(agf->agf_seqno); @@ -1065,7 +1065,7 @@ scan_freelist( do_abort(_("can't read agfl block for ag %d\n"), agno); return; } - agfl = XFS_BUF_TO_AGFL(agflbuf); + freelist = XFS_BUF_TO_AGFL_BNO(mp, agflbuf); i = be32_to_cpu(agf->agf_flfirst); if (no_modify) { @@ -1080,7 +1080,7 @@ scan_freelist( count = 0; for (;;) { - bno = be32_to_cpu(agfl->agfl_bno[i]); + bno = be32_to_cpu(freelist[i]); if (verify_agbno(mp, agno, bno)) set_bmap(agno, bno, XR_E_FREE); else -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D244E29E06 for ; Fri, 17 May 2013 06:13:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 794ABAC001 for ; Fri, 17 May 2013 04:13:44 -0700 (PDT) X-ASG-Debug-ID: 1368789213-04bdf04225359f50002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id tcxClgTUearWwDql for ; Fri, 17 May 2013 04:13:39 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhcMACUQllF5LDbs/2dsb2JhbABbgwiDc74bBHoXdIIfAQEFGgEIBAsBIzMIGAUCERUCAjkDGxmIC6sYkWiBJoxcgS6COIETA6h4gyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:33 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbM-0008RT-On for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005Dt-Kk for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: =?UTF-8?q?=5BPATCH=2003/30=5D=20libxfs=3A=20add=20crc=20format=20changes=20to=20generic=20btrees?= Date: Fri, 17 May 2013 21:12:58 +1000 X-ASG-Orig-Subj: =?UTF-8?q?=5BPATCH=2003/30=5D=20libxfs=3A=20add=20crc=20format=20changes=20to=20generic=20btrees?= Message-Id: <1368789205-19969-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789218 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner Signed-off-by: Dave Chinner --- include/libxfs.h | 15 +-- include/xfs_alloc_btree.h | 13 ++- include/xfs_bmap_btree.h | 20 ++-- include/xfs_btree.h | 60 +++++++++-- include/xfs_buf_item.h | 24 ++++- include/xfs_dinode.h | 4 +- include/xfs_ialloc_btree.h | 10 +- include/xfs_trans.h | 2 + libxfs/rdwr.c | 24 ++--- libxfs/xfs.h | 4 + libxfs/xfs_alloc_btree.c | 99 +++++++++++------ libxfs/xfs_attr_leaf.c | 2 +- libxfs/xfs_bmap.c | 49 ++++++--- libxfs/xfs_bmap_btree.c | 107 ++++++++++++------ libxfs/xfs_btree.c | 257 ++++++++++++++++++++++++++++++++++++-------- libxfs/xfs_ialloc_btree.c | 80 +++++++++----- libxfs/xfs_inode.c | 33 +++--- libxfs/xfs_mount.c | 2 +- mdrestore/Makefile | 2 +- 19 files changed, 587 insertions(+), 220 deletions(-) diff --git a/include/libxfs.h b/include/libxfs.h index b6e83f4..a4564fd 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -240,14 +240,14 @@ struct xfs_buf_ops { typedef struct xfs_buf { struct cache_node b_node; unsigned int b_flags; - xfs_daddr_t b_blkno; + xfs_daddr_t b_bn; unsigned b_bcount; unsigned int b_length; dev_t b_dev; pthread_mutex_t b_lock; pthread_t b_holder; unsigned int b_recur; - void *b_fsprivate; + void *b_fspriv; void *b_fsprivate2; void *b_fsprivate3; void *b_addr; @@ -273,9 +273,11 @@ enum xfs_buf_flags_t { /* b_flags bits */ LIBXFS_B_DISCONTIG = 0x0010, /* discontiguous buffer */ }; +#define XFS_BUF_DADDR_NULL ((xfs_daddr_t) (-1LL)) + #define XFS_BUF_PTR(bp) ((char *)(bp)->b_addr) #define xfs_buf_offset(bp, offset) (XFS_BUF_PTR(bp) + (offset)) -#define XFS_BUF_ADDR(bp) ((bp)->b_blkno) +#define XFS_BUF_ADDR(bp) ((bp)->b_bn) #define XFS_BUF_SIZE(bp) ((bp)->b_bcount) #define XFS_BUF_COUNT(bp) ((bp)->b_bcount) #define XFS_BUF_TARGET(bp) ((bp)->b_dev) @@ -284,11 +286,11 @@ enum xfs_buf_flags_t { /* b_flags bits */ XFS_BUF_SET_COUNT(bp,cnt); \ }) -#define XFS_BUF_SET_ADDR(bp,blk) ((bp)->b_blkno = (blk)) +#define XFS_BUF_SET_ADDR(bp,blk) ((bp)->b_bn = (blk)) #define XFS_BUF_SET_COUNT(bp,cnt) ((bp)->b_bcount = (cnt)) -#define XFS_BUF_FSPRIVATE(bp,type) ((type)(bp)->b_fsprivate) -#define XFS_BUF_SET_FSPRIVATE(bp,val) (bp)->b_fsprivate = (void *)(val) +#define XFS_BUF_FSPRIVATE(bp,type) ((type)(bp)->b_fspriv) +#define XFS_BUF_SET_FSPRIVATE(bp,val) (bp)->b_fspriv = (void *)(val) #define XFS_BUF_FSPRIVATE2(bp,type) ((type)(bp)->b_fsprivate2) #define XFS_BUF_SET_FSPRIVATE2(bp,val) (bp)->b_fsprivate2 = (void *)(val) #define XFS_BUF_FSPRIVATE3(bp,type) ((type)(bp)->b_fsprivate3) @@ -392,6 +394,7 @@ typedef struct xfs_log_item { struct xfs_log_item_desc *li_desc; /* ptr to current desc*/ struct xfs_mount *li_mountp; /* ptr to fs mount */ uint li_type; /* item type */ + xfs_lsn_t li_lsn; } xfs_log_item_t; typedef struct xfs_inode_log_item { diff --git a/include/xfs_alloc_btree.h b/include/xfs_alloc_btree.h index 7e89a2b..70c3ea0 100644 --- a/include/xfs_alloc_btree.h +++ b/include/xfs_alloc_btree.h @@ -31,8 +31,10 @@ struct xfs_mount; * by blockcount and blockno. All blocks look the same to make the code * simpler; if we have time later, we'll make the optimizations. */ -#define XFS_ABTB_MAGIC 0x41425442 /* 'ABTB' for bno tree */ -#define XFS_ABTC_MAGIC 0x41425443 /* 'ABTC' for cnt tree */ +#define XFS_ABTB_MAGIC 0x41425442 /* 'ABTB' for bno tree */ +#define XFS_ABTB_CRC_MAGIC 0x41423342 /* 'AB3B' */ +#define XFS_ABTC_MAGIC 0x41425443 /* 'ABTC' for cnt tree */ +#define XFS_ABTC_CRC_MAGIC 0x41423343 /* 'AB3C' */ /* * Data record/key structure @@ -59,10 +61,11 @@ typedef __be32 xfs_alloc_ptr_t; /* * Btree block header size depends on a superblock flag. - * - * (not quite yet, but soon) */ -#define XFS_ALLOC_BLOCK_LEN(mp) XFS_BTREE_SBLOCK_LEN +#define XFS_ALLOC_BLOCK_LEN(mp) \ + (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ + XFS_BTREE_SBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD : \ + XFS_BTREE_SBLOCK_LEN) /* * Record, key, and pointer address macros for btree blocks. diff --git a/include/xfs_bmap_btree.h b/include/xfs_bmap_btree.h index 88469ca..8a28b89 100644 --- a/include/xfs_bmap_btree.h +++ b/include/xfs_bmap_btree.h @@ -18,7 +18,8 @@ #ifndef __XFS_BMAP_BTREE_H__ #define __XFS_BMAP_BTREE_H__ -#define XFS_BMAP_MAGIC 0x424d4150 /* 'BMAP' */ +#define XFS_BMAP_MAGIC 0x424d4150 /* 'BMAP' */ +#define XFS_BMAP_CRC_MAGIC 0x424d4133 /* 'BMA3' */ struct xfs_btree_cur; struct xfs_btree_block; @@ -136,10 +137,11 @@ typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; /* * Btree block header size depends on a superblock flag. - * - * (not quite yet, but soon) */ -#define XFS_BMBT_BLOCK_LEN(mp) XFS_BTREE_LBLOCK_LEN +#define XFS_BMBT_BLOCK_LEN(mp) \ + (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ + XFS_BTREE_LBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD : \ + XFS_BTREE_LBLOCK_LEN) #define XFS_BMBT_REC_ADDR(mp, block, index) \ ((xfs_bmbt_rec_t *) \ @@ -186,12 +188,12 @@ typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; #define XFS_BMAP_BROOT_PTR_ADDR(mp, bb, i, sz) \ XFS_BMBT_PTR_ADDR(mp, bb, i, xfs_bmbt_maxrecs(mp, sz, 0)) -#define XFS_BMAP_BROOT_SPACE_CALC(nrecs) \ - (int)(XFS_BTREE_LBLOCK_LEN + \ +#define XFS_BMAP_BROOT_SPACE_CALC(mp, nrecs) \ + (int)(XFS_BMBT_BLOCK_LEN(mp) + \ ((nrecs) * (sizeof(xfs_bmbt_key_t) + sizeof(xfs_bmbt_ptr_t)))) -#define XFS_BMAP_BROOT_SPACE(bb) \ - (XFS_BMAP_BROOT_SPACE_CALC(be16_to_cpu((bb)->bb_numrecs))) +#define XFS_BMAP_BROOT_SPACE(mp, bb) \ + (XFS_BMAP_BROOT_SPACE_CALC(mp, be16_to_cpu((bb)->bb_numrecs))) #define XFS_BMDR_SPACE_CALC(nrecs) \ (int)(sizeof(xfs_bmdr_block_t) + \ ((nrecs) * (sizeof(xfs_bmbt_key_t) + sizeof(xfs_bmbt_ptr_t)))) @@ -204,7 +206,7 @@ typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; /* * Prototypes for xfs_bmap.c to call. */ -extern void xfs_bmdr_to_bmbt(struct xfs_mount *, xfs_bmdr_block_t *, int, +extern void xfs_bmdr_to_bmbt(struct xfs_inode *, xfs_bmdr_block_t *, int, struct xfs_btree_block *, int); extern void xfs_bmbt_get_all(xfs_bmbt_rec_host_t *r, xfs_bmbt_irec_t *s); extern xfs_filblks_t xfs_bmbt_get_blockcount(xfs_bmbt_rec_host_t *r); diff --git a/include/xfs_btree.h b/include/xfs_btree.h index be1eb23..02f89d8 100644 --- a/include/xfs_btree.h +++ b/include/xfs_btree.h @@ -42,11 +42,15 @@ extern kmem_zone_t *xfs_btree_cur_zone; * Generic btree header. * * This is a combination of the actual format used on disk for short and long - * format btrees. The first three fields are shared by both format, but - * the pointers are different and should be used with care. + * format btrees. The first three fields are shared by both format, but the + * pointers are different and should be used with care. * - * To get the size of the actual short or long form headers please use - * the size macros below. Never use sizeof(xfs_btree_block). + * To get the size of the actual short or long form headers please use the size + * macros below. Never use sizeof(xfs_btree_block). + * + * The blkno, crc, lsn, owner and uuid fields are only available in filesystems + * with the crc feature bit, and all accesses to them must be conditional on + * that flag. */ struct xfs_btree_block { __be32 bb_magic; /* magic number for block type */ @@ -56,16 +60,35 @@ struct xfs_btree_block { struct { __be32 bb_leftsib; __be32 bb_rightsib; + + __be64 bb_blkno; + __be64 bb_lsn; + uuid_t bb_uuid; + __be32 bb_owner; + __le32 bb_crc; } s; /* short form pointers */ struct { __be64 bb_leftsib; __be64 bb_rightsib; + + __be64 bb_blkno; + __be64 bb_lsn; + uuid_t bb_uuid; + __be64 bb_owner; + __le32 bb_crc; + __be32 bb_pad; /* padding for alignment */ } l; /* long form pointers */ } bb_u; /* rest */ }; #define XFS_BTREE_SBLOCK_LEN 16 /* size of a short form block */ #define XFS_BTREE_LBLOCK_LEN 24 /* size of a long form block */ +#define XFS_BTREE_CRCBLOCK_ADD 32 /* size of blkno + crc + uuid */ + +#define XFS_BTREE_SBLOCK_CRC_OFF \ + offsetof(struct xfs_btree_block, bb_u.s.bb_crc) +#define XFS_BTREE_LBLOCK_CRC_OFF \ + offsetof(struct xfs_btree_block, bb_u.l.bb_crc) /* @@ -101,13 +124,11 @@ union xfs_btree_rec { #define XFS_BB_NUMRECS 0x04 #define XFS_BB_LEFTSIB 0x08 #define XFS_BB_RIGHTSIB 0x10 +#define XFS_BB_BLKNO 0x20 #define XFS_BB_NUM_BITS 5 #define XFS_BB_ALL_BITS ((1 << XFS_BB_NUM_BITS) - 1) - -/* - * Magic numbers for btree blocks. - */ -extern const __uint32_t xfs_magics[]; +#define XFS_BB_NUM_BITS_CRC 8 +#define XFS_BB_ALL_BITS_CRC ((1 << XFS_BB_NUM_BITS_CRC) - 1) /* * Generic stats interface @@ -275,6 +296,7 @@ typedef struct xfs_btree_cur #define XFS_BTREE_LONG_PTRS (1<<0) /* pointers are 64bits long */ #define XFS_BTREE_ROOT_IN_INODE (1<<1) /* root may be variable size */ #define XFS_BTREE_LASTREC_UPDATE (1<<2) /* track last rec externally */ +#define XFS_BTREE_CRC_BLOCKS (1<<3) /* uses extended btree blocks */ #define XFS_BTREE_NOERROR 0 @@ -412,8 +434,20 @@ xfs_btree_init_block( __u32 magic, __u16 level, __u16 numrecs, + __u64 owner, unsigned int flags); +void +xfs_btree_init_block_int( + struct xfs_mount *mp, + struct xfs_btree_block *buf, + xfs_daddr_t blkno, + __u32 magic, + __u16 level, + __u16 numrecs, + __u64 owner, + unsigned int flags); + /* * Common btree core entry points. */ @@ -427,6 +461,14 @@ int xfs_btree_delete(struct xfs_btree_cur *, int *); int xfs_btree_get_rec(struct xfs_btree_cur *, union xfs_btree_rec **, int *); /* + * btree block CRC helpers + */ +void xfs_btree_lblock_calc_crc(struct xfs_buf *); +bool xfs_btree_lblock_verify_crc(struct xfs_buf *); +void xfs_btree_sblock_calc_crc(struct xfs_buf *); +bool xfs_btree_sblock_verify_crc(struct xfs_buf *); + +/* * Internal btree helpers also used by xfs_bmap.c. */ void xfs_btree_log_block(struct xfs_btree_cur *, struct xfs_buf *, int); diff --git a/include/xfs_buf_item.h b/include/xfs_buf_item.h index ee36c88..101ef83 100644 --- a/include/xfs_buf_item.h +++ b/include/xfs_buf_item.h @@ -24,19 +24,33 @@ extern kmem_zone_t *xfs_buf_item_zone; * This flag indicates that the buffer contains on disk inodes * and requires special recovery handling. */ -#define XFS_BLF_INODE_BUF 0x1 +#define XFS_BLF_INODE_BUF (1<<0) /* * This flag indicates that the buffer should not be replayed * during recovery because its blocks are being freed. */ -#define XFS_BLF_CANCEL 0x2 +#define XFS_BLF_CANCEL (1<<1) + /* * This flag indicates that the buffer contains on disk * user or group dquots and may require special recovery handling. */ -#define XFS_BLF_UDQUOT_BUF 0x4 -#define XFS_BLF_PDQUOT_BUF 0x8 -#define XFS_BLF_GDQUOT_BUF 0x10 +#define XFS_BLF_UDQUOT_BUF (1<<2) +#define XFS_BLF_PDQUOT_BUF (1<<3) +#define XFS_BLF_GDQUOT_BUF (1<<4) + +/* + * all buffers now need flags to tell recovery where the magic number + * is so that it can verify and calculate the CRCs on the buffer correctly + * once the changes have been replayed into the buffer. + */ +#define XFS_BLF_BTREE_BUF (1<<5) + +#define XFS_BLF_TYPE_MASK \ + (XFS_BLF_UDQUOT_BUF | \ + XFS_BLF_PDQUOT_BUF | \ + XFS_BLF_GDQUOT_BUF | \ + XFS_BLF_BTREE_BUF) #define XFS_BLF_CHUNK 128 #define XFS_BLF_SHIFT 7 diff --git a/include/xfs_dinode.h b/include/xfs_dinode.h index 88a3368..6b5bd17 100644 --- a/include/xfs_dinode.h +++ b/include/xfs_dinode.h @@ -107,8 +107,8 @@ typedef enum xfs_dinode_fmt { #define XFS_LITINO(mp, version) \ ((int)(((mp)->m_sb.sb_inodesize) - sizeof(struct xfs_dinode))) -#define XFS_BROOT_SIZE_ADJ \ - (XFS_BTREE_LBLOCK_LEN - sizeof(xfs_bmdr_block_t)) +#define XFS_BROOT_SIZE_ADJ(ip) \ + (XFS_BMBT_BLOCK_LEN((ip)->i_mount) - sizeof(xfs_bmdr_block_t)) /* * Inode data & attribute fork sizes, per inode. diff --git a/include/xfs_ialloc_btree.h b/include/xfs_ialloc_btree.h index 25c0239..a1bfa7a 100644 --- a/include/xfs_ialloc_btree.h +++ b/include/xfs_ialloc_btree.h @@ -29,7 +29,8 @@ struct xfs_mount; /* * There is a btree for the inode map per allocation group. */ -#define XFS_IBT_MAGIC 0x49414254 /* 'IABT' */ +#define XFS_IBT_MAGIC 0x49414254 /* 'IABT' */ +#define XFS_IBT_CRC_MAGIC 0x49414233 /* 'IAB3' */ typedef __uint64_t xfs_inofree_t; #define XFS_INODES_PER_CHUNK (NBBY * sizeof(xfs_inofree_t)) @@ -76,10 +77,11 @@ typedef __be32 xfs_inobt_ptr_t; /* * Btree block header size depends on a superblock flag. - * - * (not quite yet, but soon) */ -#define XFS_INOBT_BLOCK_LEN(mp) XFS_BTREE_SBLOCK_LEN +#define XFS_INOBT_BLOCK_LEN(mp) \ + (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ + XFS_BTREE_SBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD : \ + XFS_BTREE_SBLOCK_LEN) /* * Record, key, and pointer address macros for btree blocks. diff --git a/include/xfs_trans.h b/include/xfs_trans.h index acf1381..a9bd826 100644 --- a/include/xfs_trans.h +++ b/include/xfs_trans.h @@ -500,6 +500,8 @@ void xfs_trans_inode_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_stale_inode_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint); void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *); +void xfs_trans_buf_set_type(struct xfs_trans *, struct xfs_buf *, + uint); void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int); void xfs_trans_ijoin(struct xfs_trans *, struct xfs_inode *, uint); void xfs_trans_log_buf(xfs_trans_t *, struct xfs_buf *, uint, uint); diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index e75edd0..e9cc7b1 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -323,17 +323,17 @@ libxfs_bcompare(struct cache_node *node, cache_key_t key) #ifdef IO_BCOMPARE_CHECK if (bp->b_dev == bkey->device && - bp->b_blkno == bkey->blkno && + bp->b_bn == bkey->blkno && bp->b_bcount != BBTOB(bkey->bblen)) fprintf(stderr, "%lx: Badness in key lookup (length)\n" "bp=(bno 0x%llx, len %u bytes) key=(bno 0x%llx, len %u bytes)\n", pthread_self(), - (unsigned long long)bp->b_blkno, (int)bp->b_bcount, + (unsigned long long)bp->b_bn, (int)bp->b_bcount, (unsigned long long)bkey->blkno, BBTOB(bkey->bblen)); #endif return (bp->b_dev == bkey->device && - bp->b_blkno == bkey->blkno && + bp->b_bn == bkey->blkno && bp->b_bcount == BBTOB(bkey->bblen)); } @@ -341,7 +341,7 @@ void libxfs_bprint(xfs_buf_t *bp) { fprintf(stderr, "Buffer 0x%p blkno=%llu bytes=%u flags=0x%x count=%u\n", - bp, (unsigned long long)bp->b_blkno, (unsigned)bp->b_bcount, + bp, (unsigned long long)bp->b_bn, (unsigned)bp->b_bcount, bp->b_flags, bp->b_node.cn_count); } @@ -349,7 +349,7 @@ static void __initbuf(xfs_buf_t *bp, dev_t device, xfs_daddr_t bno, unsigned int bytes) { bp->b_flags = 0; - bp->b_blkno = bno; + bp->b_bn = bno; bp->b_bcount = bytes; bp->b_length = BTOBB(bytes); bp->b_dev = device; @@ -613,7 +613,7 @@ libxfs_purgebuf(xfs_buf_t *bp) struct xfs_bufkey key = {0}; key.device = bp->b_dev; - key.blkno = bp->b_blkno; + key.blkno = bp->b_bn; key.bblen = bp->b_bcount >> BBSHIFT; cache_node_purge(libxfs_bcache, &key, (struct cache_node *)bp); @@ -669,7 +669,7 @@ libxfs_readbufr(dev_t dev, xfs_daddr_t blkno, xfs_buf_t *bp, int len, int flags) error = __read_buf(fd, bp->b_addr, bytes, LIBXFS_BBTOOFF64(blkno), flags); if (!error && bp->b_dev == dev && - bp->b_blkno == blkno && + bp->b_bn == blkno && bp->b_bcount == bytes) bp->b_flags |= LIBXFS_B_UPTODATE; #ifdef IO_DEBUG @@ -736,7 +736,7 @@ libxfs_readbuf_map(dev_t dev, struct xfs_buf_map *map, int nmaps, int flags) #ifdef IO_DEBUG printf("%lx: %s: read %lu bytes, error %d, blkno=%llu(%llu), %p\n", pthread_self(), __FUNCTION__, buf - (char *)bp->b_addr, error, - (long long)LIBXFS_BBTOOFF64(bp->b_blkno), (long long)bp->b_blkno, bp); + (long long)LIBXFS_BBTOOFF64(bp->b_bn), (long long)bp->b_bn, bp); #endif return bp; } @@ -772,7 +772,7 @@ libxfs_writebufr(xfs_buf_t *bp) if (!(bp->b_flags & LIBXFS_B_DISCONTIG)) { error = __write_buf(fd, bp->b_addr, bp->b_bcount, - LIBXFS_BBTOOFF64(bp->b_blkno), bp->b_flags); + LIBXFS_BBTOOFF64(bp->b_bn), bp->b_flags); } else { int i; char *buf = bp->b_addr; @@ -794,8 +794,8 @@ libxfs_writebufr(xfs_buf_t *bp) #ifdef IO_DEBUG printf("%lx: %s: wrote %u bytes, blkno=%llu(%llu), %p\n", pthread_self(), __FUNCTION__, bp->b_bcount, - (long long)LIBXFS_BBTOOFF64(bp->b_blkno), - (long long)bp->b_blkno, bp); + (long long)LIBXFS_BBTOOFF64(bp->b_bn), + (long long)bp->b_bn, bp); #endif if (!error) { bp->b_flags |= LIBXFS_B_UPTODATE; @@ -826,7 +826,7 @@ libxfs_iomove(xfs_buf_t *bp, uint boff, int len, void *data, int flags) if (boff + len > bp->b_bcount) { printf("Badness, iomove out of range!\n" "bp=(bno 0x%llx, bytes %u) range=(boff %u, bytes %u)\n", - (long long)bp->b_blkno, bp->b_bcount, boff, len); + (long long)bp->b_bn, bp->b_bcount, boff, len); abort(); } #endif diff --git a/libxfs/xfs.h b/libxfs/xfs.h index 9fbe261..b3b45bb 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -249,6 +249,7 @@ roundup_pow_of_two(uint v) #define xfs_trans_agblocks_delta(tp, d) #define xfs_trans_agflist_delta(tp, d) #define xfs_trans_agbtree_delta(tp, d) +#define xfs_trans_buf_set_type(tp, bp, t) #define xfs_buf_readahead(a,b,c,ops) ((void) 0) /* no readahead */ #define xfs_buf_readahead_map(a,b,c,ops) ((void) 0) /* no readahead */ @@ -314,6 +315,9 @@ do { \ #define xfs_trans_unreserve_quota_nblks(t,i,b,n,f) ((void) 0) #define xfs_qm_dqattach(i,f) (0) +#define uuid_copy(s,d) platform_uuid_copy((s),(d)) +#define uuid_equal(s,d) (platform_uuid_compare((s),(d)) == 0) + /* * Prototypes for kernel static functions that are aren't in their * associated header files diff --git a/libxfs/xfs_alloc_btree.c b/libxfs/xfs_alloc_btree.c index a751c37..1ee1f48 100644 --- a/libxfs/xfs_alloc_btree.c +++ b/libxfs/xfs_alloc_btree.c @@ -253,7 +253,7 @@ xfs_allocbt_key_diff( return (__int64_t)be32_to_cpu(kp->ar_startblock) - rec->ar_startblock; } -static void +static bool xfs_allocbt_verify( struct xfs_buf *bp) { @@ -261,66 +261,98 @@ xfs_allocbt_verify( struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); struct xfs_perag *pag = bp->b_pag; unsigned int level; - int sblock_ok; /* block passes checks */ /* * magic number and level verification * - * During growfs operations, we can't verify the exact level as the - * perag is not fully initialised and hence not attached to the buffer. - * In this case, check against the maximum tree depth. + * During growfs operations, we can't verify the exact level or owner as + * the perag is not fully initialised and hence not attached to the + * buffer. In this case, check against the maximum tree depth. */ level = be16_to_cpu(block->bb_level); switch (cpu_to_be32(block->bb_magic)) { + case XFS_ABTB_CRC_MAGIC: + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + return false; + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) + return false; + if (pag && + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + return false; + /* fall through */ case XFS_ABTB_MAGIC: - if (pag) - sblock_ok = level < pag->pagf_levels[XFS_BTNUM_BNOi]; - else - sblock_ok = level < mp->m_ag_maxlevels; + if (pag) { + if (level >= pag->pagf_levels[XFS_BTNUM_BNOi]) + return false; + } else if (level >= mp->m_ag_maxlevels) + return false; break; + case XFS_ABTC_CRC_MAGIC: + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + return false; + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) + return false; + if (pag && + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + return false; + /* fall through */ case XFS_ABTC_MAGIC: - if (pag) - sblock_ok = level < pag->pagf_levels[XFS_BTNUM_CNTi]; - else - sblock_ok = level < mp->m_ag_maxlevels; + if (pag) { + if (level >= pag->pagf_levels[XFS_BTNUM_CNTi]) + return false; + } else if (level >= mp->m_ag_maxlevels) + return false; break; default: - sblock_ok = 0; - break; + return false; } /* numrecs verification */ - sblock_ok = sblock_ok && - be16_to_cpu(block->bb_numrecs) <= mp->m_alloc_mxr[level != 0]; + if (be16_to_cpu(block->bb_numrecs) > mp->m_alloc_mxr[level != 0]) + return false; /* sibling pointer verification */ - sblock_ok = sblock_ok && - (block->bb_u.s.bb_leftsib == cpu_to_be32(NULLAGBLOCK) || - be32_to_cpu(block->bb_u.s.bb_leftsib) < mp->m_sb.sb_agblocks) && - block->bb_u.s.bb_leftsib && - (block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK) || - be32_to_cpu(block->bb_u.s.bb_rightsib) < mp->m_sb.sb_agblocks) && - block->bb_u.s.bb_rightsib; - - if (!sblock_ok) { - trace_xfs_btree_corrupt(bp, _RET_IP_); - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, block); - xfs_buf_ioerror(bp, EFSCORRUPTED); - } + if (!block->bb_u.s.bb_leftsib || + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) + return false; + if (!block->bb_u.s.bb_rightsib || + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) + return false; + + return true; } static void xfs_allocbt_read_verify( struct xfs_buf *bp) { - xfs_allocbt_verify(bp); + if (!(xfs_btree_sblock_verify_crc(bp) && + xfs_allocbt_verify(bp))) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + bp->b_target->bt_mount, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void xfs_allocbt_write_verify( struct xfs_buf *bp) { - xfs_allocbt_verify(bp); + if (!xfs_allocbt_verify(bp)) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + bp->b_target->bt_mount, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } + xfs_btree_sblock_calc_crc(bp); + } const struct xfs_buf_ops xfs_allocbt_buf_ops = { @@ -498,6 +530,9 @@ xfs_allocbt_init_cursor( cur->bc_private.a.agbp = agbp; cur->bc_private.a.agno = agno; + if (xfs_sb_version_hascrc(&mp->m_sb)) + cur->bc_flags |= XFS_BTREE_CRC_BLOCKS; + return cur; } diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index 426130f..85cb31d 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -201,7 +201,7 @@ xfs_attr_shortform_bytesfit(xfs_inode_t *dp, int bytes) return 0; return dp->i_d.di_forkoff; } - dsize = XFS_BMAP_BROOT_SPACE(dp->i_df.if_broot); + dsize = XFS_BMAP_BROOT_SPACE(mp, dp->i_df.if_broot); break; } diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index c8232a9..5e736a5 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -407,11 +407,15 @@ xfs_bmap_sanity_check( { struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); - if (block->bb_magic != cpu_to_be32(XFS_BMAP_MAGIC) || - be16_to_cpu(block->bb_level) != level || + if (block->bb_magic != cpu_to_be32(XFS_BMAP_CRC_MAGIC) && + block->bb_magic != cpu_to_be32(XFS_BMAP_MAGIC)) + return 0; + + if (be16_to_cpu(block->bb_level) != level || be16_to_cpu(block->bb_numrecs) == 0 || be16_to_cpu(block->bb_numrecs) > mp->m_bmap_dmxr[level != 0]) return 0; + return 1; } @@ -914,6 +918,7 @@ xfs_bmap_extents_to_btree( xfs_extnum_t nextents; /* number of file extents */ xfs_bmbt_ptr_t *pp; /* root block address pointer */ + mp = ip->i_mount; ifp = XFS_IFORK_PTR(ip, whichfork); ASSERT(XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS); @@ -927,16 +932,18 @@ xfs_bmap_extents_to_btree( * Fill in the root. */ block = ifp->if_broot; - block->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC); - block->bb_level = cpu_to_be16(1); - block->bb_numrecs = cpu_to_be16(1); - block->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO); - block->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block_int(mp, block, XFS_BUF_DADDR_NULL, + XFS_BMAP_CRC_MAGIC, 1, 1, ip->i_ino, + XFS_BTREE_LONG_PTRS | XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block_int(mp, block, XFS_BUF_DADDR_NULL, + XFS_BMAP_MAGIC, 1, 1, ip->i_ino, + XFS_BTREE_LONG_PTRS); /* * Need a cursor. Can't allocate until bb_level is filled in. */ - mp = ip->i_mount; cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); cur->bc_private.b.firstblock = *firstblock; cur->bc_private.b.flist = flist; @@ -985,10 +992,15 @@ xfs_bmap_extents_to_btree( */ abp->b_ops = &xfs_bmbt_buf_ops; ablock = XFS_BUF_TO_BLOCK(abp); - ablock->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC); - ablock->bb_level = 0; - ablock->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO); - ablock->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block_int(mp, ablock, abp->b_bn, + XFS_BMAP_CRC_MAGIC, 0, 0, ip->i_ino, + XFS_BTREE_LONG_PTRS | XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block_int(mp, ablock, abp->b_bn, + XFS_BMAP_MAGIC, 0, 0, ip->i_ino, + XFS_BTREE_LONG_PTRS); + arp = XFS_BMBT_REC_ADDR(mp, ablock, 1); nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); for (cnt = i = 0; i < nextents; i++) { @@ -1016,8 +1028,8 @@ xfs_bmap_extents_to_btree( * Do all this logging at the end so that * the root is at the right level. */ - xfs_btree_log_block(cur, abp, XFS_BB_ALL_BITS); xfs_btree_log_recs(cur, abp, 1, be16_to_cpu(ablock->bb_numrecs)); + xfs_btree_log_block(cur, abp, XFS_BB_ALL_BITS); ASSERT(*curp == NULL); *curp = cur; *logflagsp = XFS_ILOG_CORE | xfs_ilog_fbroot(whichfork); @@ -1038,7 +1050,8 @@ xfs_bmap_local_to_extents( xfs_extlen_t total, /* total blocks needed by transaction */ int *logflagsp, /* inode logging flags */ int whichfork, - void (*init_fn)(struct xfs_buf *bp, + void (*init_fn)(struct xfs_trans *tp, + struct xfs_buf *bp, struct xfs_inode *ip, struct xfs_ifork *ifp)) { @@ -1090,7 +1103,7 @@ xfs_bmap_local_to_extents( bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0); /* initialise the block and copy the data */ - init_fn(bp, ip, ifp); + init_fn(tp, bp, ip, ifp); /* account for the change in fork size and log everything */ xfs_trans_log_buf(tp, bp, 0, ifp->if_bytes - 1); @@ -1197,16 +1210,19 @@ xfs_bmap_add_attrfork_extents( */ STATIC void xfs_bmap_local_to_extents_init_fn( + struct xfs_trans *tp, struct xfs_buf *bp, struct xfs_inode *ip, struct xfs_ifork *ifp) { bp->b_ops = &xfs_bmbt_buf_ops; memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); + xfs_trans_buf_set_type(tp, bp, XFS_BLF_BTREE_BUF); } STATIC void xfs_symlink_local_to_remote( + struct xfs_trans *tp, struct xfs_buf *bp, struct xfs_inode *ip, struct xfs_ifork *ifp) @@ -1225,8 +1241,7 @@ xfs_symlink_local_to_remote( * * XXX (dgc): investigate whether directory conversion can use the generic * formatting callout. It should be possible - it's just a very complex - * formatter. it would also require passing the transaction through to the init - * function. + * formatter. */ STATIC int /* error */ xfs_bmap_add_attrfork_local( diff --git a/libxfs/xfs_bmap_btree.c b/libxfs/xfs_bmap_btree.c index 836f52f..473db4a 100644 --- a/libxfs/xfs_bmap_btree.c +++ b/libxfs/xfs_bmap_btree.c @@ -38,24 +38,31 @@ xfs_extent_state( */ void xfs_bmdr_to_bmbt( - struct xfs_mount *mp, + struct xfs_inode *ip, xfs_bmdr_block_t *dblock, int dblocklen, struct xfs_btree_block *rblock, int rblocklen) { + struct xfs_mount *mp = ip->i_mount; int dmxr; xfs_bmbt_key_t *fkp; __be64 *fpp; xfs_bmbt_key_t *tkp; __be64 *tpp; - rblock->bb_magic = cpu_to_be32(XFS_BMAP_MAGIC); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block_int(mp, rblock, XFS_BUF_DADDR_NULL, + XFS_BMAP_CRC_MAGIC, 0, 0, ip->i_ino, + XFS_BTREE_LONG_PTRS | XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block_int(mp, rblock, XFS_BUF_DADDR_NULL, + XFS_BMAP_MAGIC, 0, 0, ip->i_ino, + XFS_BTREE_LONG_PTRS); + rblock->bb_level = dblock->bb_level; ASSERT(be16_to_cpu(rblock->bb_level) > 0); rblock->bb_numrecs = dblock->bb_numrecs; - rblock->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO); - rblock->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO); dmxr = xfs_bmdr_maxrecs(mp, dblocklen, 0); fkp = XFS_BMDR_KEY_ADDR(dblock, 1); tkp = XFS_BMBT_KEY_ADDR(mp, rblock, 1); @@ -403,7 +410,13 @@ xfs_bmbt_to_bmdr( xfs_bmbt_key_t *tkp; __be64 *tpp; - ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_MAGIC)); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_CRC_MAGIC)); + ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)); + ASSERT(rblock->bb_u.l.bb_blkno == + cpu_to_be64(XFS_BUF_DADDR_NULL)); + } else + ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_MAGIC)); ASSERT(rblock->bb_u.l.bb_leftsib == cpu_to_be64(NULLDFSBNO)); ASSERT(rblock->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO)); ASSERT(rblock->bb_level != 0); @@ -687,45 +700,59 @@ xfs_bmbt_key_diff( cur->bc_rec.b.br_startoff; } -static void +static bool xfs_bmbt_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); unsigned int level; - int lblock_ok; /* block passes checks */ - /* magic number and level verification. + switch (be32_to_cpu(block->bb_magic)) { + case XFS_BMAP_CRC_MAGIC: + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)) + return false; + if (block->bb_u.l.bb_blkno != cpu_to_be64(bp->b_bn)) + return false; + /* + * XXX: need a better way of verifying the owner here. Right now + * just make sure there has been one set. + */ + if (be64_to_cpu(block->bb_u.l.bb_owner) == 0) + return false; + /* fall through */ + case XFS_BMAP_MAGIC: + break; + default: + return false; + } + + /* + * numrecs and level verification. * - * We don't know waht fork we belong to, so just verify that the level + * We don't know what fork we belong to, so just verify that the level * is less than the maximum of the two. Later checks will be more * precise. */ level = be16_to_cpu(block->bb_level); - lblock_ok = block->bb_magic == cpu_to_be32(XFS_BMAP_MAGIC) && - level < MAX(mp->m_bm_maxlevels[0], mp->m_bm_maxlevels[1]); - - /* numrecs verification */ - lblock_ok = lblock_ok && - be16_to_cpu(block->bb_numrecs) <= mp->m_bmap_dmxr[level != 0]; + if (level > MAX(mp->m_bm_maxlevels[0], mp->m_bm_maxlevels[1])) + return false; + if (be16_to_cpu(block->bb_numrecs) > mp->m_bmap_dmxr[level != 0]) + return false; /* sibling pointer verification */ - lblock_ok = lblock_ok && - block->bb_u.l.bb_leftsib && - (block->bb_u.l.bb_leftsib == cpu_to_be64(NULLDFSBNO) || - XFS_FSB_SANITY_CHECK(mp, - be64_to_cpu(block->bb_u.l.bb_leftsib))) && - block->bb_u.l.bb_rightsib && - (block->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO) || - XFS_FSB_SANITY_CHECK(mp, - be64_to_cpu(block->bb_u.l.bb_rightsib))); - - if (!lblock_ok) { - trace_xfs_btree_corrupt(bp, _RET_IP_); - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, block); - xfs_buf_ioerror(bp, EFSCORRUPTED); - } + if (!block->bb_u.l.bb_leftsib || + (block->bb_u.l.bb_leftsib != cpu_to_be64(NULLDFSBNO) && + !XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_u.l.bb_leftsib)))) + return false; + if (!block->bb_u.l.bb_rightsib || + (block->bb_u.l.bb_rightsib != cpu_to_be64(NULLDFSBNO) && + !XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_u.l.bb_rightsib)))) + return false; + + return true; } static void @@ -733,13 +760,29 @@ xfs_bmbt_read_verify( struct xfs_buf *bp) { xfs_bmbt_verify(bp); + if (!(xfs_btree_lblock_verify_crc(bp) && + xfs_bmbt_verify(bp))) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + bp->b_target->bt_mount, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } + } static void xfs_bmbt_write_verify( struct xfs_buf *bp) { - xfs_bmbt_verify(bp); + if (!xfs_bmbt_verify(bp)) { + xfs_warn(bp->b_target->bt_mount, "bmbt daddr 0x%llx failed", bp->b_bn); + trace_xfs_btree_corrupt(bp, _RET_IP_); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + bp->b_target->bt_mount, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + xfs_btree_lblock_calc_crc(bp); } const struct xfs_buf_ops xfs_bmbt_buf_ops = { @@ -913,6 +956,8 @@ xfs_bmbt_init_cursor( cur->bc_ops = &xfs_bmbt_ops; cur->bc_flags = XFS_BTREE_LONG_PTRS | XFS_BTREE_ROOT_IN_INODE; + if (xfs_sb_version_hascrc(&mp->m_sb)) + cur->bc_flags |= XFS_BTREE_CRC_BLOCKS; cur->bc_private.b.forksize = XFS_IFORK_SIZE(ip, whichfork); cur->bc_private.b.ip = ip; diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index c35269b..a7c19e9 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -26,9 +26,13 @@ kmem_zone_t *xfs_btree_cur_zone; /* * Btree magic numbers. */ -const __uint32_t xfs_magics[XFS_BTNUM_MAX] = { - XFS_ABTB_MAGIC, XFS_ABTC_MAGIC, XFS_BMAP_MAGIC, XFS_IBT_MAGIC +static const __uint32_t xfs_magics[2][XFS_BTNUM_MAX] = { + { XFS_ABTB_MAGIC, XFS_ABTC_MAGIC, XFS_BMAP_MAGIC, XFS_IBT_MAGIC }, + { XFS_ABTB_CRC_MAGIC, XFS_ABTC_CRC_MAGIC, + XFS_BMAP_CRC_MAGIC, XFS_IBT_CRC_MAGIC } }; +#define xfs_btree_magic(cur) \ + xfs_magics[!!((cur)->bc_flags & XFS_BTREE_CRC_BLOCKS)][cur->bc_btnum] STATIC int /* error (0 or EFSCORRUPTED) */ @@ -38,30 +42,38 @@ xfs_btree_check_lblock( int level, /* level of the btree block */ struct xfs_buf *bp) /* buffer for block, if any */ { - int lblock_ok; /* block passes checks */ + int lblock_ok = 1; /* block passes checks */ struct xfs_mount *mp; /* file system mount point */ mp = cur->bc_mp; - lblock_ok = - be32_to_cpu(block->bb_magic) == xfs_magics[cur->bc_btnum] && + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + lblock_ok = lblock_ok && + uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid) && + block->bb_u.l.bb_blkno == cpu_to_be64( + bp ? bp->b_bn : XFS_BUF_DADDR_NULL); + } + + lblock_ok = lblock_ok && + be32_to_cpu(block->bb_magic) == xfs_btree_magic(cur) && be16_to_cpu(block->bb_level) == level && be16_to_cpu(block->bb_numrecs) <= cur->bc_ops->get_maxrecs(cur, level) && block->bb_u.l.bb_leftsib && (block->bb_u.l.bb_leftsib == cpu_to_be64(NULLDFSBNO) || XFS_FSB_SANITY_CHECK(mp, - be64_to_cpu(block->bb_u.l.bb_leftsib))) && + be64_to_cpu(block->bb_u.l.bb_leftsib))) && block->bb_u.l.bb_rightsib && (block->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO) || XFS_FSB_SANITY_CHECK(mp, - be64_to_cpu(block->bb_u.l.bb_rightsib))); + be64_to_cpu(block->bb_u.l.bb_rightsib))); + if (unlikely(XFS_TEST_ERROR(!lblock_ok, mp, XFS_ERRTAG_BTREE_CHECK_LBLOCK, XFS_RANDOM_BTREE_CHECK_LBLOCK))) { if (bp) trace_xfs_btree_corrupt(bp, _RET_IP_); - XFS_ERROR_REPORT("xfs_btree_check_lblock", XFS_ERRLEVEL_LOW, - mp); + XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); return XFS_ERROR(EFSCORRUPTED); } return 0; @@ -74,16 +86,26 @@ xfs_btree_check_sblock( int level, /* level of the btree block */ struct xfs_buf *bp) /* buffer containing block */ { + struct xfs_mount *mp; /* file system mount point */ struct xfs_buf *agbp; /* buffer for ag. freespace struct */ struct xfs_agf *agf; /* ag. freespace structure */ xfs_agblock_t agflen; /* native ag. freespace length */ - int sblock_ok; /* block passes checks */ + int sblock_ok = 1; /* block passes checks */ + mp = cur->bc_mp; agbp = cur->bc_private.a.agbp; agf = XFS_BUF_TO_AGF(agbp); agflen = be32_to_cpu(agf->agf_length); - sblock_ok = - be32_to_cpu(block->bb_magic) == xfs_magics[cur->bc_btnum] && + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + sblock_ok = sblock_ok && + uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid) && + block->bb_u.s.bb_blkno == cpu_to_be64( + bp ? bp->b_bn : XFS_BUF_DADDR_NULL); + } + + sblock_ok = sblock_ok && + be32_to_cpu(block->bb_magic) == xfs_btree_magic(cur) && be16_to_cpu(block->bb_level) == level && be16_to_cpu(block->bb_numrecs) <= cur->bc_ops->get_maxrecs(cur, level) && @@ -93,13 +115,13 @@ xfs_btree_check_sblock( (block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK) || be32_to_cpu(block->bb_u.s.bb_rightsib) < agflen) && block->bb_u.s.bb_rightsib; - if (unlikely(XFS_TEST_ERROR(!sblock_ok, cur->bc_mp, + + if (unlikely(XFS_TEST_ERROR(!sblock_ok, mp, XFS_ERRTAG_BTREE_CHECK_SBLOCK, XFS_RANDOM_BTREE_CHECK_SBLOCK))) { if (bp) trace_xfs_btree_corrupt(bp, _RET_IP_); - XFS_CORRUPTION_ERROR("xfs_btree_check_sblock", - XFS_ERRLEVEL_LOW, cur->bc_mp, block); + XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); return XFS_ERROR(EFSCORRUPTED); } return 0; @@ -178,6 +200,72 @@ xfs_btree_check_ptr( #endif /* + * Calculate CRC on the whole btree block and stuff it into the + * long-form btree header. + * + * Prior to calculting the CRC, pull the LSN out of the buffer log item and put + * it into the buffer so recovery knows what the last modifcation was that made + * it to disk. + */ +void +xfs_btree_lblock_calc_crc( + struct xfs_buf *bp) +{ + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); + struct xfs_buf_log_item *bip = bp->b_fspriv; + + if (!xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) + return; + if (bip) + block->bb_u.l.bb_lsn = cpu_to_be64(bip->bli_item.li_lsn); + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_BTREE_LBLOCK_CRC_OFF); +} + +bool +xfs_btree_lblock_verify_crc( + struct xfs_buf *bp) +{ + if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) + return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_BTREE_LBLOCK_CRC_OFF); + return true; +} + +/* + * Calculate CRC on the whole btree block and stuff it into the + * short-form btree header. + * + * Prior to calculting the CRC, pull the LSN out of the buffer log item and put + * it into the buffer so recovery knows what the last modifcation was that made + * it to disk. + */ +void +xfs_btree_sblock_calc_crc( + struct xfs_buf *bp) +{ + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); + struct xfs_buf_log_item *bip = bp->b_fspriv; + + if (!xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) + return; + if (bip) + block->bb_u.s.bb_lsn = cpu_to_be64(bip->bli_item.li_lsn); + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_BTREE_SBLOCK_CRC_OFF); +} + +bool +xfs_btree_sblock_verify_crc( + struct xfs_buf *bp) +{ + if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) + return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_BTREE_SBLOCK_CRC_OFF); + return true; +} + +/* * Delete the btree cursor. */ void @@ -261,10 +349,8 @@ xfs_btree_dup_cursor( *ncur = NULL; return error; } - new->bc_bufs[i] = bp; - ASSERT(!xfs_buf_geterror(bp)); - } else - new->bc_bufs[i] = NULL; + } + new->bc_bufs[i] = bp; } *ncur = new; return 0; @@ -305,9 +391,17 @@ xfs_btree_dup_cursor( */ static inline size_t xfs_btree_block_len(struct xfs_btree_cur *cur) { - return (cur->bc_flags & XFS_BTREE_LONG_PTRS) ? - XFS_BTREE_LBLOCK_LEN : - XFS_BTREE_SBLOCK_LEN; + size_t len; + + if (cur->bc_flags & XFS_BTREE_LONG_PTRS) + len = XFS_BTREE_LBLOCK_LEN; + else + len = XFS_BTREE_SBLOCK_LEN; + + if (cur->bc_flags & XFS_BTREE_CRC_BLOCKS) + len += XFS_BTREE_CRCBLOCK_ADD; + + return len; } /* @@ -807,43 +901,85 @@ xfs_btree_set_sibling( } void +xfs_btree_init_block_int( + struct xfs_mount *mp, + struct xfs_btree_block *buf, + xfs_daddr_t blkno, + __u32 magic, + __u16 level, + __u16 numrecs, + __u64 owner, + unsigned int flags) +{ + buf->bb_magic = cpu_to_be32(magic); + buf->bb_level = cpu_to_be16(level); + buf->bb_numrecs = cpu_to_be16(numrecs); + + if (flags & XFS_BTREE_LONG_PTRS) { + buf->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO); + buf->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO); + if (flags & XFS_BTREE_CRC_BLOCKS) { + buf->bb_u.l.bb_blkno = cpu_to_be64(blkno); + buf->bb_u.l.bb_owner = cpu_to_be64(owner); + uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid); + buf->bb_u.l.bb_pad = 0; + } + } else { + /* owner is a 32 bit value on short blocks */ + __u32 __owner = (__u32)owner; + + buf->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); + buf->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); + if (flags & XFS_BTREE_CRC_BLOCKS) { + buf->bb_u.s.bb_blkno = cpu_to_be64(blkno); + buf->bb_u.s.bb_owner = cpu_to_be32(__owner); + uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid); + } + } +} + +void xfs_btree_init_block( struct xfs_mount *mp, struct xfs_buf *bp, __u32 magic, __u16 level, __u16 numrecs, + __u64 owner, unsigned int flags) { - struct xfs_btree_block *new = XFS_BUF_TO_BLOCK(bp); - - new->bb_magic = cpu_to_be32(magic); - new->bb_level = cpu_to_be16(level); - new->bb_numrecs = cpu_to_be16(numrecs); - - if (flags & XFS_BTREE_LONG_PTRS) { - new->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO); - new->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO); - } else { - new->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); - new->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); - } + xfs_btree_init_block_int(mp, XFS_BUF_TO_BLOCK(bp), bp->b_bn, + magic, level, numrecs, owner, flags); } STATIC void xfs_btree_init_block_cur( struct xfs_btree_cur *cur, + struct xfs_buf *bp, int level, - int numrecs, - struct xfs_buf *bp) + int numrecs) { - xfs_btree_init_block(cur->bc_mp, bp, xfs_magics[cur->bc_btnum], - level, numrecs, cur->bc_flags); + __u64 owner; + + /* + * we can pull the owner from the cursor right now as the different + * owners align directly with the pointer size of the btree. This may + * change in future, but is safe for current users of the generic btree + * code. + */ + if (cur->bc_flags & XFS_BTREE_LONG_PTRS) + owner = cur->bc_private.b.ip->i_ino; + else + owner = cur->bc_private.a.agno; + + xfs_btree_init_block_int(cur->bc_mp, XFS_BUF_TO_BLOCK(bp), bp->b_bn, + xfs_btree_magic(cur), level, numrecs, + owner, cur->bc_flags); } /* * Return true if ptr is the last record in the btree and - * we need to track updateѕ to this record. The decision + * we need to track updates to this record. The decision * will be further refined in the update_lastrec method. */ STATIC int @@ -1091,6 +1227,7 @@ xfs_btree_log_keys( XFS_BTREE_TRACE_ARGBII(cur, bp, first, last); if (bp) { + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, xfs_btree_key_offset(cur, first), xfs_btree_key_offset(cur, last + 1) - 1); @@ -1115,6 +1252,7 @@ xfs_btree_log_recs( XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); XFS_BTREE_TRACE_ARGBII(cur, bp, first, last); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, xfs_btree_rec_offset(cur, first), xfs_btree_rec_offset(cur, last + 1) - 1); @@ -1139,6 +1277,7 @@ xfs_btree_log_ptrs( struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); int level = xfs_btree_get_level(block); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, xfs_btree_ptr_offset(cur, first, level), xfs_btree_ptr_offset(cur, last + 1, level) - 1); @@ -1167,7 +1306,12 @@ xfs_btree_log_block( offsetof(struct xfs_btree_block, bb_numrecs), offsetof(struct xfs_btree_block, bb_u.s.bb_leftsib), offsetof(struct xfs_btree_block, bb_u.s.bb_rightsib), - XFS_BTREE_SBLOCK_LEN + offsetof(struct xfs_btree_block, bb_u.s.bb_blkno), + offsetof(struct xfs_btree_block, bb_u.s.bb_lsn), + offsetof(struct xfs_btree_block, bb_u.s.bb_uuid), + offsetof(struct xfs_btree_block, bb_u.s.bb_owner), + offsetof(struct xfs_btree_block, bb_u.s.bb_crc), + XFS_BTREE_SBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD }; static const short loffsets[] = { /* table of offsets (long) */ offsetof(struct xfs_btree_block, bb_magic), @@ -1175,17 +1319,40 @@ xfs_btree_log_block( offsetof(struct xfs_btree_block, bb_numrecs), offsetof(struct xfs_btree_block, bb_u.l.bb_leftsib), offsetof(struct xfs_btree_block, bb_u.l.bb_rightsib), - XFS_BTREE_LBLOCK_LEN + offsetof(struct xfs_btree_block, bb_u.l.bb_blkno), + offsetof(struct xfs_btree_block, bb_u.l.bb_lsn), + offsetof(struct xfs_btree_block, bb_u.l.bb_uuid), + offsetof(struct xfs_btree_block, bb_u.l.bb_owner), + offsetof(struct xfs_btree_block, bb_u.l.bb_crc), + offsetof(struct xfs_btree_block, bb_u.l.bb_pad), + XFS_BTREE_LBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD }; XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); XFS_BTREE_TRACE_ARGBI(cur, bp, fields); if (bp) { + int nbits; + + if (cur->bc_flags & XFS_BTREE_CRC_BLOCKS) { + /* + * We don't log the CRC when updating a btree + * block but instead recreate it during log + * recovery. As the log buffers have checksums + * of their this is safe and avoids logging a crc + * update in a lot of places. + */ + if (fields == XFS_BB_ALL_BITS) + fields = XFS_BB_ALL_BITS_CRC; + nbits = XFS_BB_NUM_BITS_CRC; + } else { + nbits = XFS_BB_NUM_BITS; + } xfs_btree_offsets(fields, (cur->bc_flags & XFS_BTREE_LONG_PTRS) ? loffsets : soffsets, - XFS_BB_NUM_BITS, &first, &last); + nbits, &first, &last); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, first, last); } else { xfs_trans_log_inode(cur->bc_tp, cur->bc_private.b.ip, @@ -2148,7 +2315,7 @@ xfs_btree_split( goto error0; /* Fill in the btree header for the new right block. */ - xfs_btree_init_block_cur(cur, xfs_btree_get_level(left), 0, rbp); + xfs_btree_init_block_cur(cur, rbp, xfs_btree_get_level(left), 0); /* * Split the entries between the old and the new block evenly. @@ -2457,7 +2624,7 @@ xfs_btree_new_root( nptr = 2; } /* Fill in the new block's btree header and log it. */ - xfs_btree_init_block_cur(cur, cur->bc_nlevels, 2, nbp); + xfs_btree_init_block_cur(cur, nbp, cur->bc_nlevels, 2); xfs_btree_log_block(cur, nbp, XFS_BB_ALL_BITS); ASSERT(!xfs_btree_ptr_is_null(cur, &lptr) && !xfs_btree_ptr_is_null(cur, &rptr)); diff --git a/libxfs/xfs_ialloc_btree.c b/libxfs/xfs_ialloc_btree.c index 0bc24cc..ee036bf 100644 --- a/libxfs/xfs_ialloc_btree.c +++ b/libxfs/xfs_ialloc_btree.c @@ -163,52 +163,82 @@ xfs_inobt_key_diff( cur->bc_rec.i.ir_startino; } -void +static int xfs_inobt_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); + struct xfs_perag *pag = bp->b_pag; unsigned int level; - int sblock_ok; /* block passes checks */ - /* magic number and level verification */ - level = be16_to_cpu(block->bb_level); - sblock_ok = block->bb_magic == cpu_to_be32(XFS_IBT_MAGIC) && - level < mp->m_in_maxlevels; + /* + * During growfs operations, we can't verify the exact owner as the + * perag is not fully initialised and hence not attached to the buffer. + */ + switch (be32_to_cpu(block->bb_magic)) { + case XFS_IBT_CRC_MAGIC: + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + return false; + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) + return false; + if (pag && + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + return false; + /* fall through */ + case XFS_IBT_MAGIC: + break; + default: + return 0; + } - /* numrecs verification */ - sblock_ok = sblock_ok && - be16_to_cpu(block->bb_numrecs) <= mp->m_inobt_mxr[level != 0]; + /* numrecs and level verification */ + level = be16_to_cpu(block->bb_level); + if (level >= mp->m_in_maxlevels) + return false; + if (be16_to_cpu(block->bb_numrecs) > mp->m_inobt_mxr[level != 0]) + return false; /* sibling pointer verification */ - sblock_ok = sblock_ok && - (block->bb_u.s.bb_leftsib == cpu_to_be32(NULLAGBLOCK) || - be32_to_cpu(block->bb_u.s.bb_leftsib) < mp->m_sb.sb_agblocks) && - block->bb_u.s.bb_leftsib && - (block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK) || - be32_to_cpu(block->bb_u.s.bb_rightsib) < mp->m_sb.sb_agblocks) && - block->bb_u.s.bb_rightsib; - - if (!sblock_ok) { - trace_xfs_btree_corrupt(bp, _RET_IP_); - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, block); - xfs_buf_ioerror(bp, EFSCORRUPTED); - } + if (!block->bb_u.s.bb_leftsib || + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) + return false; + if (!block->bb_u.s.bb_rightsib || + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) + return false; + + return true; } static void xfs_inobt_read_verify( struct xfs_buf *bp) { - xfs_inobt_verify(bp); + if (!(xfs_btree_sblock_verify_crc(bp) && + xfs_inobt_verify(bp))) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + bp->b_target->bt_mount, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void xfs_inobt_write_verify( struct xfs_buf *bp) { - xfs_inobt_verify(bp); + if (!xfs_inobt_verify(bp)) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, + bp->b_target->bt_mount, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } + xfs_btree_sblock_calc_crc(bp); + } const struct xfs_buf_ops xfs_inobt_buf_ops = { @@ -355,6 +385,8 @@ xfs_inobt_init_cursor( cur->bc_blocklog = mp->m_sb.sb_blocklog; cur->bc_ops = &xfs_inobt_ops; + if (xfs_sb_version_hascrc(&mp->m_sb)) + cur->bc_flags |= XFS_BTREE_CRC_BLOCKS; cur->bc_private.a.agbp = agbp; cur->bc_private.a.agno = agno; diff --git a/libxfs/xfs_inode.c b/libxfs/xfs_inode.c index 3cf2423..f9f792c 100644 --- a/libxfs/xfs_inode.c +++ b/libxfs/xfs_inode.c @@ -492,6 +492,7 @@ xfs_iformat_btree( xfs_dinode_t *dip, int whichfork) { + struct xfs_mount *mp = ip->i_mount; xfs_bmdr_block_t *dfp; xfs_ifork_t *ifp; /* REFERENCED */ @@ -500,7 +501,7 @@ xfs_iformat_btree( ifp = XFS_IFORK_PTR(ip, whichfork); dfp = (xfs_bmdr_block_t *)XFS_DFORK_PTR(dip, whichfork); - size = XFS_BMAP_BROOT_SPACE(dfp); + size = XFS_BMAP_BROOT_SPACE(mp, dfp); nrecs = be16_to_cpu(dfp->bb_numrecs); /* @@ -511,14 +512,14 @@ xfs_iformat_btree( * blocks. */ if (unlikely(XFS_IFORK_NEXTENTS(ip, whichfork) <= - XFS_IFORK_MAXEXT(ip, whichfork) || + XFS_IFORK_MAXEXT(ip, whichfork) || XFS_BMDR_SPACE_CALC(nrecs) > - XFS_DFORK_SIZE(dip, ip->i_mount, whichfork) || + XFS_DFORK_SIZE(dip, mp, whichfork) || XFS_IFORK_NEXTENTS(ip, whichfork) > ip->i_d.di_nblocks)) { - xfs_warn(ip->i_mount, "corrupt inode %Lu (btree).", - (unsigned long long) ip->i_ino); + xfs_warn(mp, "corrupt inode %Lu (btree).", + (unsigned long long) ip->i_ino); XFS_CORRUPTION_ERROR("xfs_iformat_btree", XFS_ERRLEVEL_LOW, - ip->i_mount, dip); + mp, dip); return XFS_ERROR(EFSCORRUPTED); } @@ -529,8 +530,7 @@ xfs_iformat_btree( * Copy and convert from the on-disk structure * to the in-memory structure. */ - xfs_bmdr_to_bmbt(ip->i_mount, dfp, - XFS_DFORK_SIZE(dip, ip->i_mount, whichfork), + xfs_bmdr_to_bmbt(ip, dfp, XFS_DFORK_SIZE(dip, ip->i_mount, whichfork), ifp->if_broot, size); ifp->if_flags &= ~XFS_IFEXTENTS; ifp->if_flags |= XFS_IFBROOT; @@ -813,7 +813,7 @@ xfs_iroot_realloc( * allocate it now and get out. */ if (ifp->if_broot_bytes == 0) { - new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(rec_diff); + new_size = XFS_BMAP_BROOT_SPACE_CALC(mp, rec_diff); ifp->if_broot = kmem_alloc(new_size, KM_SLEEP | KM_NOFS); ifp->if_broot_bytes = (int)new_size; return; @@ -827,9 +827,9 @@ xfs_iroot_realloc( */ cur_max = xfs_bmbt_maxrecs(mp, ifp->if_broot_bytes, 0); new_max = cur_max + rec_diff; - new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(new_max); + new_size = XFS_BMAP_BROOT_SPACE_CALC(mp, new_max); ifp->if_broot = kmem_realloc(ifp->if_broot, new_size, - (size_t)XFS_BMAP_BROOT_SPACE_CALC(cur_max), /* old size */ + XFS_BMAP_BROOT_SPACE_CALC(mp, cur_max), KM_SLEEP | KM_NOFS); op = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, ifp->if_broot, 1, ifp->if_broot_bytes); @@ -837,7 +837,7 @@ xfs_iroot_realloc( (int)new_size); ifp->if_broot_bytes = (int)new_size; ASSERT(ifp->if_broot_bytes <= - XFS_IFORK_SIZE(ip, whichfork) + XFS_BROOT_SIZE_ADJ); + XFS_IFORK_SIZE(ip, whichfork) + XFS_BROOT_SIZE_ADJ(ip)); memmove(np, op, cur_max * (uint)sizeof(xfs_dfsbno_t)); return; } @@ -852,7 +852,7 @@ xfs_iroot_realloc( new_max = cur_max + rec_diff; ASSERT(new_max >= 0); if (new_max > 0) - new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(new_max); + new_size = XFS_BMAP_BROOT_SPACE_CALC(mp, new_max); else new_size = 0; if (new_size > 0) { @@ -860,7 +860,8 @@ xfs_iroot_realloc( /* * First copy over the btree block header. */ - memcpy(new_broot, ifp->if_broot, XFS_BTREE_LBLOCK_LEN); + memcpy(new_broot, ifp->if_broot, + XFS_BMBT_BLOCK_LEN(ip->i_mount)); } else { new_broot = NULL; ifp->if_flags &= ~XFS_IFBROOT; @@ -890,7 +891,7 @@ xfs_iroot_realloc( ifp->if_broot = new_broot; ifp->if_broot_bytes = (int)new_size; ASSERT(ifp->if_broot_bytes <= - XFS_IFORK_SIZE(ip, whichfork) + XFS_BROOT_SIZE_ADJ); + XFS_IFORK_SIZE(ip, whichfork) + XFS_BROOT_SIZE_ADJ(ip)); return; } @@ -1161,7 +1162,7 @@ xfs_iflush_fork( ASSERT(ifp->if_broot != NULL); ASSERT(ifp->if_broot_bytes <= (XFS_IFORK_SIZE(ip, whichfork) + - XFS_BROOT_SIZE_ADJ)); + XFS_BROOT_SIZE_ADJ(ip))); xfs_bmbt_to_bmdr(mp, ifp->if_broot, ifp->if_broot_bytes, (xfs_bmdr_block_t *)cp, XFS_DFORK_SIZE(dip, mp, whichfork)); diff --git a/libxfs/xfs_mount.c b/libxfs/xfs_mount.c index b7514fb..7ab3519 100644 --- a/libxfs/xfs_mount.c +++ b/libxfs/xfs_mount.c @@ -333,7 +333,7 @@ xfs_sb_verify( * Only check the in progress field for the primary superblock as * mkfs.xfs doesn't clear it from secondary superblocks. */ - error = xfs_mount_validate_sb(mp, &sb, bp->b_blkno == XFS_SB_DADDR); + error = xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); if (error) xfs_buf_ioerror(bp, error); } diff --git a/mdrestore/Makefile b/mdrestore/Makefile index ca2d1a0..5171306 100644 --- a/mdrestore/Makefile +++ b/mdrestore/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs LTCOMMAND = xfs_mdrestore CFILES = xfs_mdrestore.c -LLDLIBS = $(LIBXFS) $(LIBRT) $(LIBPTHREAD) +LLDLIBS = $(LIBXFS) $(LIBRT) $(LIBPTHREAD) $(LIBUUID) LTDEPENDENCIES = $(LIBXFS) LLDFLAGS = -static -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9817929E1B for ; Fri, 17 May 2013 06:13:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 56CCF8F8035 for ; Fri, 17 May 2013 04:13:54 -0700 (PDT) X-ASG-Debug-ID: 1368789230-04cb6c53a2352200001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id K0ZN6mfutSGhcnwe for ; Fri, 17 May 2013 04:13:51 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoNLzMIGDE5AxsZiAu9AI4ChHkDqHiDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:44 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbN-0008Rn-2Q for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:33 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005EU-UO for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 11/30] xfs: add CRC checking to dir2 data blocks Date: Fri, 17 May 2013 21:13:06 +1000 X-ASG-Orig-Subj: [PATCH 11/30] xfs: add CRC checking to dir2 data blocks Message-Id: <1368789205-19969-12-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789230 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner This addition follows the same pattern as the dir2 block CRCs. Signed-off-by: Dave Chinner --- include/xfs_dir2_format.h | 21 +++++----- libxfs/xfs_dir2_block.c | 20 ++++----- libxfs/xfs_dir2_data.c | 98 +++++++++++++++++++++++++++++++-------------- libxfs/xfs_dir2_leaf.c | 59 ++++++++++++++++----------- libxfs/xfs_dir2_node.c | 39 ++++++++++-------- libxfs/xfs_dir2_priv.h | 12 +++--- 6 files changed, 152 insertions(+), 97 deletions(-) diff --git a/include/xfs_dir2_format.h b/include/xfs_dir2_format.h index 5c28a6a..8db394a 100644 --- a/include/xfs_dir2_format.h +++ b/include/xfs_dir2_format.h @@ -277,7 +277,8 @@ struct xfs_dir3_data_hdr { static inline struct xfs_dir2_data_free * xfs_dir3_data_bestfree_p(struct xfs_dir2_data_hdr *hdr) { - if (hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { + if (hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { struct xfs_dir3_data_hdr *hdr3 = (struct xfs_dir3_data_hdr *)hdr; return hdr3->best_free; } @@ -339,17 +340,6 @@ xfs_dir2_data_unused_tag_p(struct xfs_dir2_data_unused *dup) be16_to_cpu(dup->length) - sizeof(__be16)); } -static inline struct xfs_dir2_data_unused * -xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) -{ - if (hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { - return (struct xfs_dir2_data_unused *) - ((char *)hdr + sizeof(struct xfs_dir3_data_hdr)); - } - return (struct xfs_dir2_data_unused *) - ((char *)hdr + sizeof(struct xfs_dir2_data_hdr)); -} - static inline size_t xfs_dir3_data_hdr_size(bool dir3) { @@ -373,6 +363,13 @@ xfs_dir3_data_entry_p(struct xfs_dir2_data_hdr *hdr) ((char *)hdr + xfs_dir3_data_entry_offset(hdr)); } +static inline struct xfs_dir2_data_unused * +xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) +{ + return (struct xfs_dir2_data_unused *) + ((char *)hdr + xfs_dir3_data_entry_offset(hdr)); +} + /* * Offsets of . and .. in data space (always block 0) */ diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c index c79199a..18eabd1 100644 --- a/libxfs/xfs_dir2_block.c +++ b/libxfs/xfs_dir2_block.c @@ -59,7 +59,7 @@ xfs_dir3_block_verify( if (hdr3->magic != cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) return false; } - if (__xfs_dir2_data_check(NULL, bp)) + if (__xfs_dir3_data_check(NULL, bp)) return false; return true; } @@ -535,7 +535,7 @@ xfs_dir2_block_addname( xfs_dir2_data_log_header(tp, bp); xfs_dir2_block_log_tail(tp, bp); xfs_dir2_data_log_entry(tp, bp, dep); - xfs_dir2_data_check(dp, bp); + xfs_dir3_data_check(dp, bp); return 0; } @@ -604,7 +604,7 @@ xfs_dir2_block_lookup( dp = args->dp; mp = dp->i_mount; hdr = bp->b_addr; - xfs_dir2_data_check(dp, bp); + xfs_dir3_data_check(dp, bp); btp = xfs_dir2_block_tail_p(mp, hdr); blp = xfs_dir2_block_leaf_p(btp); /* @@ -655,7 +655,7 @@ xfs_dir2_block_lookup_int( return error; hdr = bp->b_addr; - xfs_dir2_data_check(dp, bp); + xfs_dir3_data_check(dp, bp); btp = xfs_dir2_block_tail_p(mp, hdr); blp = xfs_dir2_block_leaf_p(btp); /* @@ -792,7 +792,7 @@ xfs_dir2_block_removename( xfs_dir2_data_freescan(mp, hdr, &needlog); if (needlog) xfs_dir2_data_log_header(tp, bp); - xfs_dir2_data_check(dp, bp); + xfs_dir3_data_check(dp, bp); /* * See if the size as a shortform is good enough. */ @@ -849,7 +849,7 @@ xfs_dir2_block_replace( */ dep->inumber = cpu_to_be64(args->inumber); xfs_dir2_data_log_entry(args->trans, bp, dep); - xfs_dir2_data_check(dp, bp); + xfs_dir3_data_check(dp, bp); return 0; } @@ -930,12 +930,14 @@ xfs_dir2_leaf_to_block( * Read the data block if we don't already have it, give up if it fails. */ if (!dbp) { - error = xfs_dir2_data_read(tp, dp, mp->m_dirdatablk, -1, &dbp); + error = xfs_dir3_data_read(tp, dp, mp->m_dirdatablk, -1, &dbp); if (error) return error; } hdr = dbp->b_addr; - ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC)); + ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)); + /* * Size of the "leaf" area in the block. */ @@ -1213,6 +1215,6 @@ xfs_dir2_sf_to_block( ASSERT(needscan == 0); xfs_dir2_block_log_leaf(tp, bp, 0, be32_to_cpu(btp->count) - 1); xfs_dir2_block_log_tail(tp, bp); - xfs_dir2_data_check(dp, bp); + xfs_dir3_data_check(dp, bp); return 0; } diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c index 66aab07..69841df 100644 --- a/libxfs/xfs_dir2_data.c +++ b/libxfs/xfs_dir2_data.c @@ -25,7 +25,7 @@ * Return 0 is the buffer is good, otherwise an error. */ int -__xfs_dir2_data_check( +__xfs_dir3_data_check( struct xfs_inode *dp, /* incore inode pointer */ struct xfs_buf *bp) /* data block's buffer */ { @@ -61,6 +61,7 @@ __xfs_dir2_data_check( endp = (char *)lep; break; case XFS_DIR2_DATA_MAGIC: + case XFS_DIR3_DATA_MAGIC: endp = (char *)hdr + mp->m_dirblksize; break; default: @@ -173,21 +174,27 @@ __xfs_dir2_data_check( return 0; } -static void -xfs_dir2_data_verify( +static bool +xfs_dir3_data_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_dir2_data_hdr *hdr = bp->b_addr; - int block_ok = 0; + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; - block_ok = hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC); - block_ok = block_ok && __xfs_dir2_data_check(NULL, bp) == 0; - - if (!block_ok) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); - xfs_buf_ioerror(bp, EFSCORRUPTED); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + if (hdr3->magic != cpu_to_be32(XFS_DIR3_DATA_MAGIC)) + return false; + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + return false; + if (be64_to_cpu(hdr3->blkno) != bp->b_bn) + return false; + } else { + if (hdr3->magic != cpu_to_be32(XFS_DIR2_DATA_MAGIC)) + return false; } + if (__xfs_dir3_data_check(NULL, bp)) + return false; + return true; } /* @@ -196,7 +203,7 @@ xfs_dir2_data_verify( * format buffer or a data format buffer on readahead. */ static void -xfs_dir2_data_reada_verify( +xfs_dir3_data_reada_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; @@ -209,7 +216,8 @@ xfs_dir2_data_reada_verify( bp->b_ops->verify_read(bp); return; case XFS_DIR2_DATA_MAGIC: - xfs_dir2_data_verify(bp); + case XFS_DIR3_DATA_MAGIC: + xfs_dir3_data_verify(bp); return; default: XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); @@ -219,32 +227,56 @@ xfs_dir2_data_reada_verify( } static void -xfs_dir2_data_read_verify( +xfs_dir3_data_read_verify( struct xfs_buf *bp) { - xfs_dir2_data_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + + if ((xfs_sb_version_hascrc(&mp->m_sb) && + !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_DIR3_DATA_CRC_OFF)) || + !xfs_dir3_data_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void -xfs_dir2_data_write_verify( +xfs_dir3_data_write_verify( struct xfs_buf *bp) { - xfs_dir2_data_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + if (!xfs_dir3_data_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + hdr3->lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DIR3_DATA_CRC_OFF); } -const struct xfs_buf_ops xfs_dir2_data_buf_ops = { - .verify_read = xfs_dir2_data_read_verify, - .verify_write = xfs_dir2_data_write_verify, +const struct xfs_buf_ops xfs_dir3_data_buf_ops = { + .verify_read = xfs_dir3_data_read_verify, + .verify_write = xfs_dir3_data_write_verify, }; -static const struct xfs_buf_ops xfs_dir2_data_reada_buf_ops = { - .verify_read = xfs_dir2_data_reada_verify, - .verify_write = xfs_dir2_data_write_verify, +static const struct xfs_buf_ops xfs_dir3_data_reada_buf_ops = { + .verify_read = xfs_dir3_data_reada_verify, + .verify_write = xfs_dir3_data_write_verify, }; int -xfs_dir2_data_read( +xfs_dir3_data_read( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, @@ -252,18 +284,18 @@ xfs_dir2_data_read( struct xfs_buf **bpp) { return xfs_da_read_buf(tp, dp, bno, mapped_bno, bpp, - XFS_DATA_FORK, &xfs_dir2_data_buf_ops); + XFS_DATA_FORK, &xfs_dir3_data_buf_ops); } int -xfs_dir2_data_readahead( +xfs_dir3_data_readahead( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mapped_bno) { return xfs_da_reada_buf(tp, dp, bno, mapped_bno, - XFS_DATA_FORK, &xfs_dir2_data_reada_buf_ops); + XFS_DATA_FORK, &xfs_dir3_data_reada_buf_ops); } /* @@ -293,6 +325,7 @@ xfs_dir2_data_freefind( * one we're looking for it has to be exact. */ ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); for (dfp = &bf[0], seenzero = matched = 0; @@ -442,6 +475,7 @@ xfs_dir2_data_freescan( char *p; /* current entry pointer */ ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); @@ -518,13 +552,12 @@ xfs_dir3_data_init( XFS_DATA_FORK); if (error) return error; - bp->b_ops = &xfs_dir2_data_buf_ops; + bp->b_ops = &xfs_dir3_data_buf_ops; /* * Initialize the header. */ hdr = bp->b_addr; - if (xfs_sb_version_hascrc(&mp->m_sb)) { struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; @@ -575,6 +608,7 @@ xfs_dir2_data_log_entry( xfs_dir2_data_hdr_t *hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); @@ -594,6 +628,7 @@ xfs_dir2_data_log_header( xfs_dir2_data_hdr_t *hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); @@ -612,6 +647,7 @@ xfs_dir2_data_log_unused( xfs_dir2_data_hdr_t *hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); @@ -659,7 +695,8 @@ xfs_dir2_data_make_free( /* * Figure out where the end of the data area is. */ - if (hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC)) + if (hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)) endptr = (char *)hdr + mp->m_dirblksize; else { xfs_dir2_block_tail_t *btp; /* block tail */ @@ -841,6 +878,7 @@ xfs_dir2_data_use_free( hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); ASSERT(be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG); diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index a1df347..0f848b4 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -133,7 +133,7 @@ xfs_dir2_block_to_leaf( int needlog; /* need to log block header */ int needscan; /* need to rescan bestfree */ xfs_trans_t *tp; /* transaction pointer */ - struct xfs_dir2_data_free *bf; + struct xfs_dir2_data_free *bf; trace_xfs_dir2_block_to_leaf(args); @@ -159,7 +159,7 @@ xfs_dir2_block_to_leaf( ASSERT(lbp != NULL); leaf = lbp->b_addr; hdr = dbp->b_addr; - xfs_dir2_data_check(dp, dbp); + xfs_dir3_data_check(dp, dbp); btp = xfs_dir2_block_tail_p(mp, hdr); blp = xfs_dir2_block_leaf_p(btp); bf = xfs_dir3_data_bestfree_p(hdr); @@ -188,8 +188,12 @@ xfs_dir2_block_to_leaf( /* * Fix up the block header, make it a data block. */ - dbp->b_ops = &xfs_dir2_data_buf_ops; - hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); + dbp->b_ops = &xfs_dir3_data_buf_ops; + if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) + hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); + else + hdr->magic = cpu_to_be32(XFS_DIR3_DATA_MAGIC); + if (needscan) xfs_dir2_data_freescan(mp, hdr, &needlog); /* @@ -205,7 +209,7 @@ xfs_dir2_block_to_leaf( if (needlog) xfs_dir2_data_log_header(tp, dbp); xfs_dir2_leaf_check(dp, lbp); - xfs_dir2_data_check(dp, dbp); + xfs_dir3_data_check(dp, dbp); xfs_dir2_leaf_log_bests(tp, lbp, 0, 0); return 0; } @@ -369,6 +373,7 @@ xfs_dir2_leaf_addname( __be16 *tagp; /* end of data entry */ xfs_trans_t *tp; /* transaction pointer */ xfs_dir2_db_t use_block; /* data block number */ + struct xfs_dir2_data_free *bf; /* bestfree table */ trace_xfs_dir2_leaf_addname(args); @@ -552,14 +557,15 @@ xfs_dir2_leaf_addname( else xfs_dir2_leaf_log_bests(tp, lbp, use_block, use_block); hdr = dbp->b_addr; - bestsp[use_block] = hdr->bestfree[0].length; + bf = xfs_dir3_data_bestfree_p(hdr); + bestsp[use_block] = bf[0].length; grown = 1; } else { /* * Already had space in some data block. * Just read that one in. */ - error = xfs_dir2_data_read(tp, dp, + error = xfs_dir3_data_read(tp, dp, xfs_dir2_db_to_da(mp, use_block), -1, &dbp); if (error) { @@ -567,13 +573,14 @@ xfs_dir2_leaf_addname( return error; } hdr = dbp->b_addr; + bf = xfs_dir3_data_bestfree_p(hdr); grown = 0; } /* * Point to the biggest freespace in our data block. */ dup = (xfs_dir2_data_unused_t *) - ((char *)hdr + be16_to_cpu(hdr->bestfree[0].offset)); + ((char *)hdr + be16_to_cpu(bf[0].offset)); ASSERT(be16_to_cpu(dup->length) >= length); needscan = needlog = 0; /* @@ -606,8 +613,8 @@ xfs_dir2_leaf_addname( * If the bests table needs to be changed, do it. * Log the change unless we've already done that. */ - if (be16_to_cpu(bestsp[use_block]) != be16_to_cpu(hdr->bestfree[0].length)) { - bestsp[use_block] = hdr->bestfree[0].length; + if (be16_to_cpu(bestsp[use_block]) != be16_to_cpu(bf[0].length)) { + bestsp[use_block] = bf[0].length; if (!grown) xfs_dir2_leaf_log_bests(tp, lbp, use_block, use_block); } @@ -627,7 +634,7 @@ xfs_dir2_leaf_addname( xfs_dir2_leaf_log_header(tp, lbp); xfs_dir2_leaf_log_ents(tp, lbp, lfloglow, lfloghigh); xfs_dir2_leaf_check(dp, lbp); - xfs_dir2_data_check(dp, dbp); + xfs_dir3_data_check(dp, dbp); return 0; } @@ -1077,7 +1084,7 @@ xfs_dir2_leaf_lookup_int( if (newdb != curdb) { if (dbp) xfs_trans_brelse(tp, dbp); - error = xfs_dir2_data_read(tp, dp, + error = xfs_dir3_data_read(tp, dp, xfs_dir2_db_to_da(mp, newdb), -1, &dbp); if (error) { @@ -1118,7 +1125,7 @@ xfs_dir2_leaf_lookup_int( ASSERT(cidb != -1); if (cidb != curdb) { xfs_trans_brelse(tp, dbp); - error = xfs_dir2_data_read(tp, dp, + error = xfs_dir3_data_read(tp, dp, xfs_dir2_db_to_da(mp, cidb), -1, &dbp); if (error) { @@ -1164,6 +1171,7 @@ xfs_dir2_leaf_removename( int needscan; /* need to rescan data frees */ xfs_dir2_data_off_t oldbest; /* old value of best free */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_data_free *bf; /* bestfree table */ trace_xfs_dir2_leaf_removename(args); @@ -1178,7 +1186,8 @@ xfs_dir2_leaf_removename( mp = dp->i_mount; leaf = lbp->b_addr; hdr = dbp->b_addr; - xfs_dir2_data_check(dp, dbp); + bf = xfs_dir3_data_bestfree_p(hdr); + xfs_dir3_data_check(dp, dbp); /* * Point to the leaf entry, use that to point to the data entry. */ @@ -1187,7 +1196,7 @@ xfs_dir2_leaf_removename( dep = (xfs_dir2_data_entry_t *) ((char *)hdr + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); needscan = needlog = 0; - oldbest = be16_to_cpu(hdr->bestfree[0].length); + oldbest = be16_to_cpu(bf[0].length); ltp = xfs_dir2_leaf_tail_p(mp, leaf); bestsp = xfs_dir2_leaf_bests_p(ltp); ASSERT(be16_to_cpu(bestsp[db]) == oldbest); @@ -1216,16 +1225,16 @@ xfs_dir2_leaf_removename( * If the longest freespace in the data block has changed, * put the new value in the bests table and log that. */ - if (be16_to_cpu(hdr->bestfree[0].length) != oldbest) { - bestsp[db] = hdr->bestfree[0].length; + if (be16_to_cpu(bf[0].length) != oldbest) { + bestsp[db] = bf[0].length; xfs_dir2_leaf_log_bests(tp, lbp, db, db); } - xfs_dir2_data_check(dp, dbp); + xfs_dir3_data_check(dp, dbp); /* * If the data block is now empty then get rid of the data block. */ - if (be16_to_cpu(hdr->bestfree[0].length) == - mp->m_dirblksize - (uint)sizeof(*hdr)) { + if (be16_to_cpu(bf[0].length) == + mp->m_dirblksize - xfs_dir3_data_entry_offset(hdr)) { ASSERT(db != mp->m_dirdatablk); if ((error = xfs_dir2_shrink_inode(args, db, dbp))) { /* @@ -1405,7 +1414,7 @@ xfs_dir2_leaf_trim_data( /* * Read the offending data block. We need its buffer. */ - error = xfs_dir2_data_read(tp, dp, xfs_dir2_db_to_da(mp, db), -1, &dbp); + error = xfs_dir3_data_read(tp, dp, xfs_dir2_db_to_da(mp, db), -1, &dbp); if (error) return error; @@ -1415,10 +1424,12 @@ xfs_dir2_leaf_trim_data( #ifdef DEBUG { struct xfs_dir2_data_hdr *hdr = dbp->b_addr; + struct xfs_dir2_data_free *bf = xfs_dir3_data_bestfree_p(hdr); - ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC)); - ASSERT(be16_to_cpu(hdr->bestfree[0].length) == - mp->m_dirblksize - (uint)sizeof(*hdr)); + ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)); + ASSERT(be16_to_cpu(bf[0].length) == + mp->m_dirblksize - xfs_dir3_data_entry_offset(hdr)); ASSERT(db == be32_to_cpu(ltp->bestcount) - 1); } #endif diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index e1d1f22..f87a245 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -737,13 +737,13 @@ xfs_dir2_leafn_lookup_for_entry( ASSERT(state->extravalid); curbp = state->extrablk.bp; } else { - error = xfs_dir2_data_read(tp, dp, + error = xfs_dir3_data_read(tp, dp, xfs_dir2_db_to_da(mp, newdb), -1, &curbp); if (error) return error; } - xfs_dir2_data_check(dp, curbp); + xfs_dir3_data_check(dp, curbp); curdb = newdb; } /* @@ -771,7 +771,7 @@ xfs_dir2_leafn_lookup_for_entry( state->extrablk.index = (int)((char *)dep - (char *)curbp->b_addr); state->extrablk.magic = XFS_DIR2_DATA_MAGIC; - curbp->b_ops = &xfs_dir2_data_buf_ops; + curbp->b_ops = &xfs_dir3_data_buf_ops; if (cmp == XFS_CMP_EXACT) return XFS_ERROR(EEXIST); } @@ -786,7 +786,7 @@ xfs_dir2_leafn_lookup_for_entry( state->extrablk.index = -1; state->extrablk.blkno = curdb; state->extrablk.magic = XFS_DIR2_DATA_MAGIC; - curbp->b_ops = &xfs_dir2_data_buf_ops; + curbp->b_ops = &xfs_dir3_data_buf_ops; } else { /* If the curbp is not the CI match block, drop it */ if (state->extrablk.bp != curbp) @@ -1136,6 +1136,7 @@ xfs_dir2_leafn_remove( int needlog; /* need to log data header */ int needscan; /* need to rescan data frees */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_data_free *bf; /* bestfree table */ trace_xfs_dir2_leafn_remove(args, index); @@ -1170,7 +1171,8 @@ xfs_dir2_leafn_remove( dbp = dblk->bp; hdr = dbp->b_addr; dep = (xfs_dir2_data_entry_t *)((char *)hdr + off); - longest = be16_to_cpu(hdr->bestfree[0].length); + bf = xfs_dir3_data_bestfree_p(hdr); + longest = be16_to_cpu(bf[0].length); needlog = needscan = 0; xfs_dir2_data_make_free(tp, dbp, off, xfs_dir2_data_entsize(dep->namelen), &needlog, &needscan); @@ -1182,12 +1184,12 @@ xfs_dir2_leafn_remove( xfs_dir2_data_freescan(mp, hdr, &needlog); if (needlog) xfs_dir2_data_log_header(tp, dbp); - xfs_dir2_data_check(dp, dbp); + xfs_dir3_data_check(dp, dbp); /* * If the longest data block freespace changes, need to update * the corresponding freeblock entry. */ - if (longest < be16_to_cpu(hdr->bestfree[0].length)) { + if (longest < be16_to_cpu(bf[0].length)) { int error; /* error return value */ struct xfs_buf *fbp; /* freeblock buffer */ xfs_dir2_db_t fdb; /* freeblock block number */ @@ -1217,12 +1219,13 @@ xfs_dir2_leafn_remove( * Calculate which entry we need to fix. */ findex = xfs_dir2_db_to_fdindex(mp, db); - longest = be16_to_cpu(hdr->bestfree[0].length); + longest = be16_to_cpu(bf[0].length); /* * If the data block is now empty we can get rid of it * (usually). */ - if (longest == mp->m_dirblksize - (uint)sizeof(*hdr)) { + if (longest == mp->m_dirblksize - + xfs_dir3_data_entry_offset(hdr)) { /* * Try to punch out the data block. */ @@ -1596,6 +1599,7 @@ xfs_dir2_node_addname_int( xfs_trans_t *tp; /* transaction pointer */ __be16 *bests; struct xfs_dir3_icfree_hdr freehdr; + struct xfs_dir2_data_free *bf; dp = args->dp; mp = dp->i_mount; @@ -1853,7 +1857,8 @@ xfs_dir2_node_addname_int( * change again. */ hdr = dbp->b_addr; - bests[findex] = hdr->bestfree[0].length; + bf = xfs_dir3_data_bestfree_p(hdr); + bests[findex] = bf[0].length; logfree = 1; } /* @@ -1869,19 +1874,20 @@ xfs_dir2_node_addname_int( /* * Read the data block in. */ - error = xfs_dir2_data_read(tp, dp, xfs_dir2_db_to_da(mp, dbno), + error = xfs_dir3_data_read(tp, dp, xfs_dir2_db_to_da(mp, dbno), -1, &dbp); if (error) return error; hdr = dbp->b_addr; + bf = xfs_dir3_data_bestfree_p(hdr); logfree = 0; } - ASSERT(be16_to_cpu(hdr->bestfree[0].length) >= length); + ASSERT(be16_to_cpu(bf[0].length) >= length); /* * Point to the existing unused space. */ dup = (xfs_dir2_data_unused_t *) - ((char *)hdr + be16_to_cpu(hdr->bestfree[0].offset)); + ((char *)hdr + be16_to_cpu(bf[0].offset)); needscan = needlog = 0; /* * Mark the first part of the unused space, inuse for us. @@ -1913,8 +1919,8 @@ xfs_dir2_node_addname_int( * If the freespace entry is now wrong, update it. */ bests = xfs_dir3_free_bests_p(mp, free); /* gcc is so stupid */ - if (be16_to_cpu(bests[findex]) != be16_to_cpu(hdr->bestfree[0].length)) { - bests[findex] = hdr->bestfree[0].length; + if (be16_to_cpu(bests[findex]) != be16_to_cpu(bf[0].length)) { + bests[findex] = bf[0].length; logfree = 1; } /* @@ -2104,7 +2110,8 @@ xfs_dir2_node_replace( * Point to the data entry. */ hdr = state->extrablk.bp->b_addr; - ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC)); + ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)); dep = (xfs_dir2_data_entry_t *) ((char *)hdr + xfs_dir2_dataptr_to_off(state->mp, be32_to_cpu(lep->address))); diff --git a/libxfs/xfs_dir2_priv.h b/libxfs/xfs_dir2_priv.h index e6f2e0a..910e644 100644 --- a/libxfs/xfs_dir2_priv.h +++ b/libxfs/xfs_dir2_priv.h @@ -43,17 +43,17 @@ extern int xfs_dir2_leaf_to_block(struct xfs_da_args *args, /* xfs_dir2_data.c */ #ifdef DEBUG -#define xfs_dir2_data_check(dp,bp) __xfs_dir2_data_check(dp, bp); +#define xfs_dir3_data_check(dp,bp) __xfs_dir3_data_check(dp, bp); #else -#define xfs_dir2_data_check(dp,bp) +#define xfs_dir3_data_check(dp,bp) #endif -extern const struct xfs_buf_ops xfs_dir2_data_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_data_buf_ops; -extern int __xfs_dir2_data_check(struct xfs_inode *dp, struct xfs_buf *bp); -extern int xfs_dir2_data_read(struct xfs_trans *tp, struct xfs_inode *dp, +extern int __xfs_dir3_data_check(struct xfs_inode *dp, struct xfs_buf *bp); +extern int xfs_dir3_data_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mapped_bno, struct xfs_buf **bpp); -extern int xfs_dir2_data_readahead(struct xfs_trans *tp, struct xfs_inode *dp, +extern int xfs_dir3_data_readahead(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mapped_bno); extern struct xfs_dir2_data_free * -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 70E9829E20 for ; Fri, 17 May 2013 06:13:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5EB588F8035 for ; Fri, 17 May 2013 04:13:55 -0700 (PDT) X-ASG-Debug-ID: 1368789230-04cb6c53a2352200002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 2jCv8U2TiNtJlbhU for ; Fri, 17 May 2013 04:13:53 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYGBk5AxsZiAu9AI1SMIEug0sDqHiDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:51 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbd-0008ST-Ft for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:49 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005EH-Qg for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 08/30] libxfs: add support for crc headers on remote symlinks Date: Fri, 17 May 2013 21:13:03 +1000 X-ASG-Orig-Subj: [PATCH 08/30] libxfs: add support for crc headers on remote symlinks Message-Id: <1368789205-19969-9-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789233 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- include/Makefile | 4 +- include/libxfs.h | 1 + include/xfs_buf_item.h | 4 +- include/xfs_symlink.h | 43 ++++++++++++++ libxfs/Makefile | 2 +- libxfs/xfs_symlink.c | 154 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 include/xfs_symlink.h create mode 100644 libxfs/xfs_symlink.c diff --git a/include/Makefile b/include/Makefile index 8688a86..92161bd 100644 --- a/include/Makefile +++ b/include/Makefile @@ -28,8 +28,8 @@ QAHFILES = libxfs.h libxlog.h \ xfs_extfree_item.h xfs_ialloc.h xfs_ialloc_btree.h \ xfs_inode.h xfs_inode_item.h xfs_inum.h \ xfs_log.h xfs_log_priv.h xfs_log_recover.h xfs_metadump.h \ - xfs_mount.h xfs_quota.h xfs_rtalloc.h xfs_sb.h xfs_trace.h \ - xfs_trans.h xfs_trans_space.h xfs_dfrag.h + xfs_mount.h xfs_quota.h xfs_rtalloc.h xfs_sb.h xfs_symlink.h \ + xfs_trace.h xfs_trans.h xfs_trans_space.h xfs_dfrag.h HFILES = handle.h jdm.h xqm.h xfs.h xfs_fs.h xfs_types.h HFILES += $(PKG_PLATFORM).h diff --git a/include/libxfs.h b/include/libxfs.h index a4564fd..41cb585 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -56,6 +56,7 @@ #include #include #include +#include #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) diff --git a/include/xfs_buf_item.h b/include/xfs_buf_item.h index abae8c8..09cab4e 100644 --- a/include/xfs_buf_item.h +++ b/include/xfs_buf_item.h @@ -49,6 +49,7 @@ extern kmem_zone_t *xfs_buf_item_zone; #define XFS_BLF_AGFL_BUF (1<<7) #define XFS_BLF_AGI_BUF (1<<8) #define XFS_BLF_DINO_BUF (1<<9) +#define XFS_BLF_SYMLINK_BUF (1<<10) #define XFS_BLF_TYPE_MASK \ (XFS_BLF_UDQUOT_BUF | \ @@ -58,7 +59,8 @@ extern kmem_zone_t *xfs_buf_item_zone; XFS_BLF_AGF_BUF | \ XFS_BLF_AGFL_BUF | \ XFS_BLF_AGI_BUF | \ - XFS_BLF_DINO_BUF) + XFS_BLF_DINO_BUF | \ + XFS_BLF_SYMLINK_BUF) #define XFS_BLF_CHUNK 128 #define XFS_BLF_SHIFT 7 diff --git a/include/xfs_symlink.h b/include/xfs_symlink.h new file mode 100644 index 0000000..bb21e6a --- /dev/null +++ b/include/xfs_symlink.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2012 Red Hat, Inc. All rights reserved. + */ +#ifndef __XFS_SYMLINK_H +#define __XFS_SYMLINK_H 1 + +#define XFS_SYMLINK_MAGIC 0x58534c4d /* XSLM */ + +struct xfs_dsymlink_hdr { + __be32 sl_magic; + __be32 sl_offset; + __be32 sl_bytes; + __be32 sl_crc; + uuid_t sl_uuid; + __be64 sl_owner; + __be64 sl_blkno; + __be64 sl_lsn; +}; + +/* + * The maximum pathlen is 1024 bytes. Since the minimum file system + * blocksize is 512 bytes, we can get a max of 3 extents back from + * bmapi when crc headers are taken into account. + */ +#define XFS_SYMLINK_MAPS 3 + +#define XFS_SYMLINK_BUF_SPACE(mp, bufsize) \ + ((bufsize) - (xfs_sb_version_hascrc(&(mp)->m_sb) ? \ + sizeof(struct xfs_dsymlink_hdr) : 0)) + +int xfs_symlink_blocks(struct xfs_mount *mp, int pathlen); + +extern const struct xfs_buf_ops xfs_symlink_buf_ops; + +#ifdef __KERNEL__ + +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, + const char *target_path, umode_t mode, struct xfs_inode **ipp); +int xfs_readlink(struct xfs_inode *ip, char *link); +int xfs_inactive_symlink_rmt(struct xfs_inode *ip, struct xfs_trans **tpp); + +#endif /* __KERNEL__ */ +#endif /* __XFS_SYMLINK_H */ diff --git a/libxfs/Makefile b/libxfs/Makefile index 28f71c8..75f365c 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -17,7 +17,7 @@ CFILES = cache.c init.c kmem.c logitem.c radix-tree.c rdwr.c trans.c util.c \ xfs_dir2.c xfs_dir2_leaf.c xfs_attr_leaf.c xfs_dir2_block.c \ xfs_dir2_node.c xfs_dir2_data.c xfs_dir2_sf.c xfs_bmap.c \ xfs_mount.c xfs_rtalloc.c xfs_trans.c xfs_attr.c \ - crc32.c + crc32.c xfs_symlink.c CFILES += $(PKG_PLATFORM).c PCFILES = darwin.c freebsd.c irix.c linux.c diff --git a/libxfs/xfs_symlink.c b/libxfs/xfs_symlink.c new file mode 100644 index 0000000..e018abc --- /dev/null +++ b/libxfs/xfs_symlink.c @@ -0,0 +1,154 @@ +/* + * Copyright 2013 Red Hat, Inc. + * All rights reserved. + */ + +#include "xfs.h" + +/* + * Each contiguous block has a header, so it is not just a simple pathlen + * to FSB conversion. + */ +int +xfs_symlink_blocks( + struct xfs_mount *mp, + int pathlen) +{ + int fsblocks = 0; + int len = pathlen; + + do { + fsblocks++; + len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); + } while (len > 0); + + ASSERT(fsblocks <= XFS_SYMLINK_MAPS); + return fsblocks; +} + +/* + * XXX: this need to be used by mkfs/proto.c to create symlinks. + */ +static int +xfs_symlink_hdr_set( + struct xfs_mount *mp, + xfs_ino_t ino, + uint32_t offset, + uint32_t size, + struct xfs_buf *bp) +{ + struct xfs_dsymlink_hdr *dsl = bp->b_addr; + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return 0; + + dsl->sl_magic = cpu_to_be32(XFS_SYMLINK_MAGIC); + dsl->sl_offset = cpu_to_be32(offset); + dsl->sl_bytes = cpu_to_be32(size); + uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_uuid); + dsl->sl_owner = cpu_to_be64(ino); + dsl->sl_blkno = cpu_to_be64(bp->b_bn); + bp->b_ops = &xfs_symlink_buf_ops; + + return sizeof(struct xfs_dsymlink_hdr); +} + +/* + * Checking of the symlink header is split into two parts. the verifier does + * CRC, location and bounds checking, the unpacking function checks the path + * parameters and owner. + */ +bool +xfs_symlink_hdr_ok( + struct xfs_mount *mp, + xfs_ino_t ino, + uint32_t offset, + uint32_t size, + struct xfs_buf *bp) +{ + struct xfs_dsymlink_hdr *dsl = bp->b_addr; + + if (offset != be32_to_cpu(dsl->sl_offset)) + return false; + if (size != be32_to_cpu(dsl->sl_bytes)) + return false; + if (ino != be64_to_cpu(dsl->sl_owner)) + return false; + + /* ok */ + return true; + +} + +static bool +xfs_symlink_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_dsymlink_hdr *dsl = bp->b_addr; + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (dsl->sl_magic != cpu_to_be32(XFS_SYMLINK_MAGIC)) + return false; + if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_uuid)) + return false; + if (bp->b_bn != be64_to_cpu(dsl->sl_blkno)) + return false; + if (be32_to_cpu(dsl->sl_offset) + + be32_to_cpu(dsl->sl_bytes) >= MAXPATHLEN) + return false; + if (dsl->sl_owner == 0) + return false; + + return true; +} + +static void +xfs_symlink_read_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + + /* no verification of non-crc buffers */ + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_dsymlink_hdr, sl_crc)) || + !xfs_symlink_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } +} + +static void +xfs_symlink_write_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + + /* no verification of non-crc buffers */ + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (!xfs_symlink_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (bip) { + struct xfs_dsymlink_hdr *dsl = bp->b_addr; + dsl->sl_lsn = cpu_to_be64(bip->bli_item.li_lsn); + } + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_dsymlink_hdr, sl_crc)); +} + +const struct xfs_buf_ops xfs_symlink_buf_ops = { + .verify_read = xfs_symlink_read_verify, + .verify_write = xfs_symlink_write_verify, +}; + -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:13:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5D2E229E14 for ; Fri, 17 May 2013 06:13:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id A3833AC001 for ; Fri, 17 May 2013 04:13:53 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id XFq6CfEfDjBdbnYM for ; Fri, 17 May 2013 04:13:49 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoBDC8zCBgxOQMbGYgLvQCOAoR5A6h4gyIqgS4k Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbW-0008Rf-VI for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:42 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005EL-Ro for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 09/30] xfs: add CRC checks to block format directory blocks Date: Fri, 17 May 2013 21:13:04 +1000 X-ASG-Orig-Subj: [PATCH 09/30] xfs: add CRC checks to block format directory blocks Message-Id: <1368789205-19969-10-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789229 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Now that directory buffers are made from a single struct xfs_buf, we can add CRC calculation and checking callbacks. While there, add all the fields to the on disk structures for future functionality such as d_type support, uuids, block numbers, owner inode, etc. To distinguish between the different on disk formats, change the magic numbers for the new format directory blocks. Signed-off-by: Dave Chinner --- include/xfs_dir2_format.h | 155 +++++++++++++++++++++++++++++++++++++++++-- libxfs/xfs_dir2_block.c | 126 +++++++++++++++++++++++++---------- libxfs/xfs_dir2_data.c | 160 ++++++++++++++++++++++++++++----------------- libxfs/xfs_dir2_leaf.c | 6 +- libxfs/xfs_dir2_node.c | 2 +- libxfs/xfs_dir2_priv.h | 4 +- libxfs/xfs_dir2_sf.c | 2 +- 7 files changed, 346 insertions(+), 109 deletions(-) diff --git a/include/xfs_dir2_format.h b/include/xfs_dir2_format.h index f5c264a..da928c7 100644 --- a/include/xfs_dir2_format.h +++ b/include/xfs_dir2_format.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -36,6 +37,37 @@ #define XFS_DIR2_FREE_MAGIC 0x58443246 /* XD2F: free index blocks */ /* + * Directory Version 3 With CRCs. + * + * The tree formats are the same as for version 2 directories. The difference + * is in the block header and dirent formats. In many cases the v3 structures + * use v2 definitions as they are no different and this makes code sharing much + * easier. + * + * Also, the xfs_dir3_*() functions handle both v2 and v3 formats - if the + * format is v2 then they switch to the existing v2 code, or the format is v3 + * they implement the v3 functionality. This means the existing dir2 is a mix of + * xfs_dir2/xfs_dir3 calls and functions. The xfs_dir3 functions are called + * where there is a difference in the formats, otherwise the code is unchanged. + * + * Where it is possible, the code decides what to do based on the magic numbers + * in the blocks rather than feature bits in the superblock. This means the code + * is as independent of the external XFS code as possible as doesn't require + * passing struct xfs_mount pointers into places where it isn't really + * necessary. + * + * Version 3 includes: + * + * - a larger block header for CRC and identification purposes and so the + * offsets of all the structures inside the blocks are different. + * + * - new magic numbers to be able to detect the v2/v3 types on the fly. + */ + +#define XFS_DIR3_BLOCK_MAGIC 0x58444233 /* XDB3: single block dirs */ +#define XFS_DIR3_DATA_MAGIC 0x58444433 /* XDD3: multiblock dirs */ + +/* * Byte offset in data block and shortform entry. */ typedef __uint16_t xfs_dir2_data_off_t; @@ -111,19 +143,19 @@ static inline int xfs_dir2_sf_hdr_size(int i8count) (sizeof(xfs_dir2_ino8_t) - sizeof(xfs_dir2_ino4_t)); } -static inline xfs_dir2_data_aoff_t + static inline xfs_dir2_data_aoff_t xfs_dir2_sf_get_offset(xfs_dir2_sf_entry_t *sfep) { return get_unaligned_be16(&sfep->offset.i); } -static inline void + static inline void xfs_dir2_sf_put_offset(xfs_dir2_sf_entry_t *sfep, xfs_dir2_data_aoff_t off) { put_unaligned_be16(off, &sfep->offset.i); } -static inline int + static inline int xfs_dir2_sf_entsize(struct xfs_dir2_sf_hdr *hdr, int len) { return sizeof(struct xfs_dir2_sf_entry) + /* namelen + offset */ @@ -133,14 +165,14 @@ xfs_dir2_sf_entsize(struct xfs_dir2_sf_hdr *hdr, int len) sizeof(xfs_dir2_ino4_t)); } -static inline struct xfs_dir2_sf_entry * + static inline struct xfs_dir2_sf_entry * xfs_dir2_sf_firstentry(struct xfs_dir2_sf_hdr *hdr) { return (struct xfs_dir2_sf_entry *) ((char *)hdr + xfs_dir2_sf_hdr_size(hdr->i8count)); } -static inline struct xfs_dir2_sf_entry * + static inline struct xfs_dir2_sf_entry * xfs_dir2_sf_nextentry(struct xfs_dir2_sf_hdr *hdr, struct xfs_dir2_sf_entry *sfep) { @@ -215,11 +247,43 @@ typedef struct xfs_dir2_data_free { */ typedef struct xfs_dir2_data_hdr { __be32 magic; /* XFS_DIR2_DATA_MAGIC or */ - /* XFS_DIR2_BLOCK_MAGIC */ + /* XFS_DIR2_BLOCK_MAGIC */ xfs_dir2_data_free_t bestfree[XFS_DIR2_DATA_FD_COUNT]; } xfs_dir2_data_hdr_t; /* + * define a structure for all the verification fields we are adding to the + * directory block structures. This will be used in several structures. + * The magic number must be the first entry to align with all the dir2 + * structures so we determine how to decode them just by the magic number. + */ +struct xfs_dir3_blk_hdr { + __be32 magic; /* magic number */ + __be32 crc; /* CRC of block */ + __be64 blkno; /* first block of the buffer */ + __be64 lsn; /* sequence number of last write */ + uuid_t uuid; /* filesystem we belong to */ + __be64 owner; /* inode that owns the block */ +}; + +struct xfs_dir3_data_hdr { + struct xfs_dir3_blk_hdr hdr; + xfs_dir2_data_free_t best_free[XFS_DIR2_DATA_FD_COUNT]; +}; + +#define XFS_DIR3_DATA_CRC_OFF offsetof(struct xfs_dir3_data_hdr, hdr.crc) + + static inline struct xfs_dir2_data_free * +xfs_dir3_data_bestfree_p(struct xfs_dir2_data_hdr *hdr) +{ + if (hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { + struct xfs_dir3_data_hdr *hdr3 = (struct xfs_dir3_data_hdr *)hdr; + return hdr3->best_free; + } + return hdr->bestfree; +} + +/* * Active entry in a data block. * * Aligned to 8 bytes. After the variable length name field there is a @@ -274,6 +338,85 @@ xfs_dir2_data_unused_tag_p(struct xfs_dir2_data_unused *dup) be16_to_cpu(dup->length) - sizeof(__be16)); } +static inline struct xfs_dir2_data_unused * +xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) +{ + if (hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { + return (struct xfs_dir2_data_unused *) + ((char *)hdr + sizeof(struct xfs_dir3_data_hdr)); + } + return (struct xfs_dir2_data_unused *) + ((char *)hdr + sizeof(struct xfs_dir2_data_hdr)); +} + +static inline size_t +xfs_dir3_data_hdr_size(bool dir3) +{ + if (dir3) + return sizeof(struct xfs_dir3_data_hdr); + return sizeof(struct xfs_dir2_data_hdr); +} + +static inline size_t +xfs_dir3_data_entry_offset(struct xfs_dir2_data_hdr *hdr) +{ + bool dir3 = hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC); + return xfs_dir3_data_hdr_size(dir3); +} + +static inline struct xfs_dir2_data_entry * +xfs_dir3_data_entry_p(struct xfs_dir2_data_hdr *hdr) +{ + return (struct xfs_dir2_data_entry *) + ((char *)hdr + xfs_dir3_data_entry_offset(hdr)); +} + +/* + * Offsets of . and .. in data space (always block 0) + */ +static inline xfs_dir2_data_aoff_t +xfs_dir3_data_dot_offset(struct xfs_dir2_data_hdr *hdr) +{ + return xfs_dir3_data_entry_offset(hdr); +} + +static inline xfs_dir2_data_aoff_t +xfs_dir3_data_dotdot_offset(struct xfs_dir2_data_hdr *hdr) +{ + return xfs_dir3_data_dot_offset(hdr) + xfs_dir2_data_entsize(1); +} + +static inline xfs_dir2_data_aoff_t +xfs_dir3_data_first_offset(struct xfs_dir2_data_hdr *hdr) +{ + return xfs_dir3_data_dotdot_offset(hdr) + xfs_dir2_data_entsize(2); +} + +/* + * location of . and .. in data space (always block 0) + */ +static inline struct xfs_dir2_data_entry * +xfs_dir3_data_dot_entry_p(struct xfs_dir2_data_hdr *hdr) +{ + return (struct xfs_dir2_data_entry *) + ((char *)hdr + xfs_dir3_data_dot_offset(hdr)); +} + +static inline struct xfs_dir2_data_entry * +xfs_dir3_data_dotdot_entry_p(struct xfs_dir2_data_hdr *hdr) +{ + return (struct xfs_dir2_data_entry *) + ((char *)hdr + xfs_dir3_data_dotdot_offset(hdr)); +} + +static inline struct xfs_dir2_data_entry * +xfs_dir3_data_first_entry_p(struct xfs_dir2_data_hdr *hdr) +{ + return (struct xfs_dir2_data_entry *) + ((char *)hdr + xfs_dir3_data_first_offset(hdr)); +} + /* * Leaf block structures. * diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c index 2a99dea..c79199a 100644 --- a/libxfs/xfs_dir2_block.c +++ b/libxfs/xfs_dir2_block.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -40,44 +41,74 @@ xfs_dir_startup(void) xfs_dir_hash_dotdot = xfs_da_hashname((unsigned char *)"..", 2); } -static void -xfs_dir2_block_verify( +static bool +xfs_dir3_block_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_dir2_data_hdr *hdr = bp->b_addr; - int block_ok = 0; - - block_ok = hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC); - block_ok = block_ok && __xfs_dir2_data_check(NULL, bp) == 0; - - if (!block_ok) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); - xfs_buf_ioerror(bp, EFSCORRUPTED); + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + if (hdr3->magic != cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) + return false; + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + return false; + if (be64_to_cpu(hdr3->blkno) != bp->b_bn) + return false; + } else { + if (hdr3->magic != cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) + return false; } + if (__xfs_dir2_data_check(NULL, bp)) + return false; + return true; } static void -xfs_dir2_block_read_verify( +xfs_dir3_block_read_verify( struct xfs_buf *bp) { - xfs_dir2_block_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + + if ((xfs_sb_version_hascrc(&mp->m_sb) && + !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_DIR3_DATA_CRC_OFF)) || + !xfs_dir3_block_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void -xfs_dir2_block_write_verify( +xfs_dir3_block_write_verify( struct xfs_buf *bp) { - xfs_dir2_block_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + if (!xfs_dir3_block_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + hdr3->lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DIR3_DATA_CRC_OFF); } -const struct xfs_buf_ops xfs_dir2_block_buf_ops = { - .verify_read = xfs_dir2_block_read_verify, - .verify_write = xfs_dir2_block_write_verify, +const struct xfs_buf_ops xfs_dir3_block_buf_ops = { + .verify_read = xfs_dir3_block_read_verify, + .verify_write = xfs_dir3_block_write_verify, }; static int -xfs_dir2_block_read( +xfs_dir3_block_read( struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_buf **bpp) @@ -85,7 +116,29 @@ xfs_dir2_block_read( struct xfs_mount *mp = dp->i_mount; return xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, bpp, - XFS_DATA_FORK, &xfs_dir2_block_buf_ops); + XFS_DATA_FORK, &xfs_dir3_block_buf_ops); +} + +static void +xfs_dir3_block_init( + struct xfs_mount *mp, + struct xfs_buf *bp, + struct xfs_inode *dp) +{ + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + bp->b_ops = &xfs_dir3_block_buf_ops; + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + memset(hdr3, 0, sizeof(*hdr3)); + hdr3->magic = cpu_to_be32(XFS_DIR3_BLOCK_MAGIC); + hdr3->blkno = cpu_to_be64(bp->b_bn); + hdr3->owner = cpu_to_be64(dp->i_ino); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + return; + + } + hdr3->magic = cpu_to_be32(XFS_DIR2_BLOCK_MAGIC); } static void @@ -105,7 +158,7 @@ xfs_dir2_block_need_space( struct xfs_dir2_data_unused *enddup = NULL; *compact = 0; - bf = hdr->bestfree; + bf = xfs_dir3_data_bestfree_p(hdr); /* * If there are stale entries we'll use one for the leaf. @@ -287,7 +340,7 @@ xfs_dir2_block_addname( mp = dp->i_mount; /* Read the (one and only) directory block into bp. */ - error = xfs_dir2_block_read(tp, dp, &bp); + error = xfs_dir3_block_read(tp, dp, &bp); if (error) return error; @@ -597,7 +650,7 @@ xfs_dir2_block_lookup_int( tp = args->trans; mp = dp->i_mount; - error = xfs_dir2_block_read(tp, dp, &bp); + error = xfs_dir3_block_read(tp, dp, &bp); if (error) return error; @@ -860,9 +913,12 @@ xfs_dir2_leaf_to_block( * These will show up in the leaf bests table. */ while (dp->i_d.di_size > mp->m_dirblksize) { + int hdrsz; + + hdrsz = xfs_dir3_data_hdr_size(xfs_sb_version_hascrc(&mp->m_sb)); bestsp = xfs_dir2_leaf_bests_p(ltp); if (be16_to_cpu(bestsp[be32_to_cpu(ltp->bestcount) - 1]) == - mp->m_dirblksize - (uint)sizeof(*hdr)) { + mp->m_dirblksize - hdrsz) { if ((error = xfs_dir2_leaf_trim_data(args, lbp, (xfs_dir2_db_t)(be32_to_cpu(ltp->bestcount) - 1)))) @@ -900,8 +956,8 @@ xfs_dir2_leaf_to_block( /* * Start converting it to block form. */ - dbp->b_ops = &xfs_dir2_block_buf_ops; - hdr->magic = cpu_to_be32(XFS_DIR2_BLOCK_MAGIC); + xfs_dir3_block_init(mp, dbp, dp); + needlog = 1; needscan = 0; /* @@ -1023,16 +1079,16 @@ xfs_dir2_sf_to_block( return error; } /* - * Initialize the data block. + * Initialize the data block, then convert it to block format. */ - error = xfs_dir2_data_init(args, blkno, &bp); + error = xfs_dir3_data_init(args, blkno, &bp); if (error) { kmem_free(sfp); return error; } - bp->b_ops = &xfs_dir2_block_buf_ops; + xfs_dir3_block_init(mp, bp, dp); hdr = bp->b_addr; - hdr->magic = cpu_to_be32(XFS_DIR2_BLOCK_MAGIC); + /* * Compute size of block "tail" area. */ @@ -1042,7 +1098,7 @@ xfs_dir2_sf_to_block( * The whole thing is initialized to free by the init routine. * Say we're using the leaf and tail area. */ - dup = (xfs_dir2_data_unused_t *)(hdr + 1); + dup = xfs_dir3_data_unused_p(hdr); needlog = needscan = 0; xfs_dir2_data_use_free(tp, bp, dup, mp->m_dirblksize - i, i, &needlog, &needscan); @@ -1064,8 +1120,7 @@ xfs_dir2_sf_to_block( /* * Create entry for . */ - dep = (xfs_dir2_data_entry_t *) - ((char *)hdr + XFS_DIR2_DATA_DOT_OFFSET); + dep = xfs_dir3_data_dot_entry_p(hdr); dep->inumber = cpu_to_be64(dp->i_ino); dep->namelen = 1; dep->name[0] = '.'; @@ -1078,8 +1133,7 @@ xfs_dir2_sf_to_block( /* * Create entry for .. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)hdr + XFS_DIR2_DATA_DOTDOT_OFFSET); + dep = xfs_dir3_data_dotdot_entry_p(hdr); dep->inumber = cpu_to_be64(xfs_dir2_sf_get_parent_ino(sfp)); dep->namelen = 2; dep->name[0] = dep->name[1] = '.'; @@ -1089,7 +1143,7 @@ xfs_dir2_sf_to_block( blp[1].hashval = cpu_to_be32(xfs_dir_hash_dotdot); blp[1].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)hdr)); - offset = XFS_DIR2_DATA_FIRST_OFFSET; + offset = xfs_dir3_data_first_offset(hdr); /* * Loop over existing entries, stuff them in. */ diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c index eb86739..66aab07 100644 --- a/libxfs/xfs_dir2_data.c +++ b/libxfs/xfs_dir2_data.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -49,11 +50,12 @@ __xfs_dir2_data_check( mp = bp->b_target->bt_mount; hdr = bp->b_addr; - bf = hdr->bestfree; - p = (char *)(hdr + 1); + bf = xfs_dir3_data_bestfree_p(hdr); + p = (char *)xfs_dir3_data_entry_p(hdr); switch (be32_to_cpu(hdr->magic)) { case XFS_DIR2_BLOCK_MAGIC: + case XFS_DIR3_BLOCK_MAGIC: btp = xfs_dir2_block_tail_p(mp, hdr); lep = xfs_dir2_block_leaf_p(btp); endp = (char *)lep; @@ -132,7 +134,8 @@ __xfs_dir2_data_check( (char *)dep - (char *)hdr); count++; lastfree = 0; - if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) { + if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { addr = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)hdr)); @@ -152,7 +155,8 @@ __xfs_dir2_data_check( * Need to have seen all the entries and all the bestfree slots. */ XFS_WANT_CORRUPTED_RETURN(freeseen == 7); - if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) { + if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { for (i = stale = 0; i < be32_to_cpu(btp->count); i++) { if (lep[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) @@ -200,7 +204,8 @@ xfs_dir2_data_reada_verify( switch (be32_to_cpu(hdr->magic)) { case XFS_DIR2_BLOCK_MAGIC: - bp->b_ops = &xfs_dir2_block_buf_ops; + case XFS_DIR3_BLOCK_MAGIC: + bp->b_ops = &xfs_dir3_block_buf_ops; bp->b_ops->verify_read(bp); return; case XFS_DIR2_DATA_MAGIC: @@ -272,12 +277,15 @@ xfs_dir2_data_freefind( { xfs_dir2_data_free_t *dfp; /* bestfree entry */ xfs_dir2_data_aoff_t off; /* offset value needed */ + struct xfs_dir2_data_free *bf; #if defined(DEBUG) && defined(__KERNEL__) int matched; /* matched the value */ int seenzero; /* saw a 0 bestfree entry */ #endif off = (xfs_dir2_data_aoff_t)((char *)dup - (char *)hdr); + bf = xfs_dir3_data_bestfree_p(hdr); + #if defined(DEBUG) && defined(__KERNEL__) /* * Validate some consistency in the bestfree table. @@ -285,9 +293,10 @@ xfs_dir2_data_freefind( * one we're looking for it has to be exact. */ ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); - for (dfp = &hdr->bestfree[0], seenzero = matched = 0; - dfp < &hdr->bestfree[XFS_DIR2_DATA_FD_COUNT]; + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); + for (dfp = &bf[0], seenzero = matched = 0; + dfp < &bf[XFS_DIR2_DATA_FD_COUNT]; dfp++) { if (!dfp->offset) { ASSERT(!dfp->length); @@ -303,7 +312,7 @@ xfs_dir2_data_freefind( else ASSERT(be16_to_cpu(dfp->offset) + be16_to_cpu(dfp->length) <= off); ASSERT(matched || be16_to_cpu(dfp->length) >= be16_to_cpu(dup->length)); - if (dfp > &hdr->bestfree[0]) + if (dfp > &bf[0]) ASSERT(be16_to_cpu(dfp[-1].length) >= be16_to_cpu(dfp[0].length)); } #endif @@ -312,14 +321,12 @@ xfs_dir2_data_freefind( * it can't be there since they're sorted. */ if (be16_to_cpu(dup->length) < - be16_to_cpu(hdr->bestfree[XFS_DIR2_DATA_FD_COUNT - 1].length)) + be16_to_cpu(bf[XFS_DIR2_DATA_FD_COUNT - 1].length)) return NULL; /* * Look at the three bestfree entries for our guy. */ - for (dfp = &hdr->bestfree[0]; - dfp < &hdr->bestfree[XFS_DIR2_DATA_FD_COUNT]; - dfp++) { + for (dfp = &bf[0]; dfp < &bf[XFS_DIR2_DATA_FD_COUNT]; dfp++) { if (!dfp->offset) return NULL; if (be16_to_cpu(dfp->offset) == off) @@ -343,11 +350,12 @@ xfs_dir2_data_freeinsert( xfs_dir2_data_free_t *dfp; /* bestfree table pointer */ xfs_dir2_data_free_t new; /* new bestfree entry */ -#ifdef __KERNEL__ ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); -#endif - dfp = hdr->bestfree; + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); + + dfp = xfs_dir3_data_bestfree_p(hdr); new.length = dup->length; new.offset = cpu_to_be16((char *)dup - (char *)hdr); @@ -384,32 +392,36 @@ xfs_dir2_data_freeremove( xfs_dir2_data_free_t *dfp, /* bestfree entry pointer */ int *loghead) /* out: log data header */ { -#ifdef __KERNEL__ + struct xfs_dir2_data_free *bf; + ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); -#endif + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); + /* * It's the first entry, slide the next 2 up. */ - if (dfp == &hdr->bestfree[0]) { - hdr->bestfree[0] = hdr->bestfree[1]; - hdr->bestfree[1] = hdr->bestfree[2]; + bf = xfs_dir3_data_bestfree_p(hdr); + if (dfp == &bf[0]) { + bf[0] = bf[1]; + bf[1] = bf[2]; } /* * It's the second entry, slide the 3rd entry up. */ - else if (dfp == &hdr->bestfree[1]) - hdr->bestfree[1] = hdr->bestfree[2]; + else if (dfp == &bf[1]) + bf[1] = bf[2]; /* * Must be the last entry. */ else - ASSERT(dfp == &hdr->bestfree[2]); + ASSERT(dfp == &bf[2]); /* * Clear the 3rd entry, must be zero now. */ - hdr->bestfree[2].length = 0; - hdr->bestfree[2].offset = 0; + bf[2].length = 0; + bf[2].offset = 0; *loghead = 1; } @@ -425,23 +437,26 @@ xfs_dir2_data_freescan( xfs_dir2_block_tail_t *btp; /* block tail */ xfs_dir2_data_entry_t *dep; /* active data entry */ xfs_dir2_data_unused_t *dup; /* unused data entry */ + struct xfs_dir2_data_free *bf; char *endp; /* end of block's data */ char *p; /* current entry pointer */ -#ifdef __KERNEL__ ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); -#endif + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); + /* * Start by clearing the table. */ - memset(hdr->bestfree, 0, sizeof(hdr->bestfree)); + bf = xfs_dir3_data_bestfree_p(hdr); + memset(bf, 0, sizeof(*bf) * XFS_DIR2_DATA_FD_COUNT); *loghead = 1; /* * Set up pointers. */ - p = (char *)(hdr + 1); - if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) { + p = (char *)xfs_dir3_data_entry_p(hdr); + if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { btp = xfs_dir2_block_tail_p(mp, hdr); endp = (char *)xfs_dir2_block_leaf_p(btp); } else @@ -477,7 +492,7 @@ xfs_dir2_data_freescan( * Give back the buffer for the created block. */ int /* error */ -xfs_dir2_data_init( +xfs_dir3_data_init( xfs_da_args_t *args, /* directory operation args */ xfs_dir2_db_t blkno, /* logical dir block number */ struct xfs_buf **bpp) /* output block buffer */ @@ -486,6 +501,7 @@ xfs_dir2_data_init( xfs_dir2_data_hdr_t *hdr; /* data block header */ xfs_inode_t *dp; /* incore directory inode */ xfs_dir2_data_unused_t *dup; /* unused entry pointer */ + struct xfs_dir2_data_free *bf; int error; /* error return value */ int i; /* bestfree index */ xfs_mount_t *mp; /* filesystem mount point */ @@ -508,21 +524,34 @@ xfs_dir2_data_init( * Initialize the header. */ hdr = bp->b_addr; - hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); - hdr->bestfree[0].offset = cpu_to_be16(sizeof(*hdr)); + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + memset(hdr3, 0, sizeof(*hdr3)); + hdr3->magic = cpu_to_be32(XFS_DIR3_DATA_MAGIC); + hdr3->blkno = cpu_to_be64(bp->b_bn); + hdr3->owner = cpu_to_be64(dp->i_ino); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + + } else + hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); + + bf = xfs_dir3_data_bestfree_p(hdr); + bf[0].offset = cpu_to_be16(xfs_dir3_data_entry_offset(hdr)); for (i = 1; i < XFS_DIR2_DATA_FD_COUNT; i++) { - hdr->bestfree[i].length = 0; - hdr->bestfree[i].offset = 0; + bf[i].length = 0; + bf[i].offset = 0; } /* * Set up an unused entry for the block's body. */ - dup = (xfs_dir2_data_unused_t *)(hdr + 1); + dup = xfs_dir3_data_unused_p(hdr); dup->freetag = cpu_to_be16(XFS_DIR2_DATA_FREE_TAG); - t = mp->m_dirblksize - (uint)sizeof(*hdr); - hdr->bestfree[0].length = cpu_to_be16(t); + t = mp->m_dirblksize - (uint)xfs_dir3_data_entry_offset(hdr); + bf[0].length = cpu_to_be16(t); dup->length = cpu_to_be16(t); *xfs_dir2_data_unused_tag_p(dup) = cpu_to_be16((char *)dup - (char *)hdr); /* @@ -546,7 +575,8 @@ xfs_dir2_data_log_entry( xfs_dir2_data_hdr_t *hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); xfs_trans_log_buf(tp, bp, (uint)((char *)dep - (char *)hdr), (uint)((char *)(xfs_dir2_data_entry_tag_p(dep) + 1) - @@ -564,9 +594,10 @@ xfs_dir2_data_log_header( xfs_dir2_data_hdr_t *hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); - xfs_trans_log_buf(tp, bp, 0, sizeof(*hdr) - 1); + xfs_trans_log_buf(tp, bp, 0, xfs_dir3_data_entry_offset(hdr) - 1); } /* @@ -581,7 +612,8 @@ xfs_dir2_data_log_unused( xfs_dir2_data_hdr_t *hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); /* * Log the first part of the unused entry. @@ -619,6 +651,7 @@ xfs_dir2_data_make_free( xfs_dir2_data_unused_t *newdup; /* new unused entry */ xfs_dir2_data_unused_t *postdup; /* unused entry after us */ xfs_dir2_data_unused_t *prevdup; /* unused entry before us */ + struct xfs_dir2_data_free *bf; mp = tp->t_mountp; hdr = bp->b_addr; @@ -631,7 +664,8 @@ xfs_dir2_data_make_free( else { xfs_dir2_block_tail_t *btp; /* block tail */ - ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); + ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); btp = xfs_dir2_block_tail_p(mp, hdr); endptr = (char *)xfs_dir2_block_leaf_p(btp); } @@ -639,7 +673,7 @@ xfs_dir2_data_make_free( * If this isn't the start of the block, then back up to * the previous entry and see if it's free. */ - if (offset > sizeof(*hdr)) { + if (offset > xfs_dir3_data_entry_offset(hdr)) { __be16 *tagp; /* tag just before us */ tagp = (__be16 *)((char *)hdr + offset) - 1; @@ -665,6 +699,7 @@ xfs_dir2_data_make_free( * Previous and following entries are both free, * merge everything into a single free entry. */ + bf = xfs_dir3_data_bestfree_p(hdr); if (prevdup && postdup) { xfs_dir2_data_free_t *dfp2; /* another bestfree pointer */ @@ -679,7 +714,7 @@ xfs_dir2_data_make_free( * since the third bestfree is there, there might be more * entries. */ - needscan = (hdr->bestfree[2].length != 0); + needscan = (bf[2].length != 0); /* * Fix up the new big freespace. */ @@ -695,10 +730,10 @@ xfs_dir2_data_make_free( * Remove entry 1 first then entry 0. */ ASSERT(dfp && dfp2); - if (dfp == &hdr->bestfree[1]) { - dfp = &hdr->bestfree[0]; + if (dfp == &bf[1]) { + dfp = &bf[0]; ASSERT(dfp2 == dfp); - dfp2 = &hdr->bestfree[1]; + dfp2 = &bf[1]; } xfs_dir2_data_freeremove(hdr, dfp2, needlogp); xfs_dir2_data_freeremove(hdr, dfp, needlogp); @@ -706,7 +741,7 @@ xfs_dir2_data_make_free( * Now insert the new entry. */ dfp = xfs_dir2_data_freeinsert(hdr, prevdup, needlogp); - ASSERT(dfp == &hdr->bestfree[0]); + ASSERT(dfp == &bf[0]); ASSERT(dfp->length == prevdup->length); ASSERT(!dfp[1].length); ASSERT(!dfp[2].length); @@ -735,7 +770,7 @@ xfs_dir2_data_make_free( */ else { needscan = be16_to_cpu(prevdup->length) > - be16_to_cpu(hdr->bestfree[2].length); + be16_to_cpu(bf[2].length); } } /* @@ -763,7 +798,7 @@ xfs_dir2_data_make_free( */ else { needscan = be16_to_cpu(newdup->length) > - be16_to_cpu(hdr->bestfree[2].length); + be16_to_cpu(bf[2].length); } } /* @@ -802,10 +837,12 @@ xfs_dir2_data_use_free( xfs_dir2_data_unused_t *newdup; /* new unused entry */ xfs_dir2_data_unused_t *newdup2; /* another new unused entry */ int oldlen; /* old unused entry's length */ + struct xfs_dir2_data_free *bf; hdr = bp->b_addr; ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || - hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)); + hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || + hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); ASSERT(be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG); ASSERT(offset >= (char *)dup - (char *)hdr); ASSERT(offset + len <= (char *)dup + be16_to_cpu(dup->length) - (char *)hdr); @@ -815,7 +852,8 @@ xfs_dir2_data_use_free( */ dfp = xfs_dir2_data_freefind(hdr, dup); oldlen = be16_to_cpu(dup->length); - ASSERT(dfp || oldlen <= be16_to_cpu(hdr->bestfree[2].length)); + bf = xfs_dir3_data_bestfree_p(hdr); + ASSERT(dfp || oldlen <= be16_to_cpu(bf[2].length)); /* * Check for alignment with front and back of the entry. */ @@ -829,7 +867,7 @@ xfs_dir2_data_use_free( */ if (matchfront && matchback) { if (dfp) { - needscan = (hdr->bestfree[2].offset != 0); + needscan = (bf[2].offset != 0); if (!needscan) xfs_dir2_data_freeremove(hdr, dfp, needlogp); } @@ -859,7 +897,7 @@ xfs_dir2_data_use_free( * that means we don't know if there was a better * choice for the last slot, or not. Rescan. */ - needscan = dfp == &hdr->bestfree[2]; + needscan = dfp == &bf[2]; } } /* @@ -886,7 +924,7 @@ xfs_dir2_data_use_free( * that means we don't know if there was a better * choice for the last slot, or not. Rescan. */ - needscan = dfp == &hdr->bestfree[2]; + needscan = dfp == &bf[2]; } } /* @@ -914,7 +952,7 @@ xfs_dir2_data_use_free( * the 2 new will work. */ if (dfp) { - needscan = (hdr->bestfree[2].length != 0); + needscan = (bf[2].length != 0); if (!needscan) { xfs_dir2_data_freeremove(hdr, dfp, needlogp); xfs_dir2_data_freeinsert(hdr, newdup, needlogp); diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index d303813..d83fce4 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -133,6 +133,7 @@ xfs_dir2_block_to_leaf( int needlog; /* need to log block header */ int needscan; /* need to rescan bestfree */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_data_free *bf; trace_xfs_dir2_block_to_leaf(args); @@ -161,6 +162,7 @@ xfs_dir2_block_to_leaf( xfs_dir2_data_check(dp, dbp); btp = xfs_dir2_block_tail_p(mp, hdr); blp = xfs_dir2_block_leaf_p(btp); + bf = xfs_dir3_data_bestfree_p(hdr); /* * Set the counts in the leaf header. */ @@ -196,7 +198,7 @@ xfs_dir2_block_to_leaf( ltp = xfs_dir2_leaf_tail_p(mp, leaf); ltp->bestcount = cpu_to_be32(1); bestsp = xfs_dir2_leaf_bests_p(ltp); - bestsp[0] = hdr->bestfree[0].length; + bestsp[0] = bf[0].length; /* * Log the data header and leaf bests table. */ @@ -528,7 +530,7 @@ xfs_dir2_leaf_addname( /* * Initialize the block. */ - if ((error = xfs_dir2_data_init(args, use_block, &dbp))) { + if ((error = xfs_dir3_data_init(args, use_block, &dbp))) { xfs_trans_brelse(tp, lbp); return error; } diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index 649f677..e7820b2 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -1573,7 +1573,7 @@ xfs_dir2_node_addname_int( if (unlikely((error = xfs_dir2_grow_inode(args, XFS_DIR2_DATA_SPACE, &dbno)) || - (error = xfs_dir2_data_init(args, dbno, &dbp)))) + (error = xfs_dir3_data_init(args, dbno, &dbp)))) return error; /* diff --git a/libxfs/xfs_dir2_priv.h b/libxfs/xfs_dir2_priv.h index 7da79f6..e6f2e0a 100644 --- a/libxfs/xfs_dir2_priv.h +++ b/libxfs/xfs_dir2_priv.h @@ -30,7 +30,7 @@ extern int xfs_dir_cilookup_result(struct xfs_da_args *args, const unsigned char *name, int len); /* xfs_dir2_block.c */ -extern const struct xfs_buf_ops xfs_dir2_block_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_block_buf_ops; extern int xfs_dir2_block_addname(struct xfs_da_args *args); extern int xfs_dir2_block_getdents(struct xfs_inode *dp, void *dirent, @@ -61,7 +61,7 @@ xfs_dir2_data_freeinsert(struct xfs_dir2_data_hdr *hdr, struct xfs_dir2_data_unused *dup, int *loghead); extern void xfs_dir2_data_freescan(struct xfs_mount *mp, struct xfs_dir2_data_hdr *hdr, int *loghead); -extern int xfs_dir2_data_init(struct xfs_da_args *args, xfs_dir2_db_t blkno, +extern int xfs_dir3_data_init(struct xfs_da_args *args, xfs_dir2_db_t blkno, struct xfs_buf **bpp); extern void xfs_dir2_data_log_entry(struct xfs_trans *tp, struct xfs_buf *bp, struct xfs_dir2_data_entry *dep); diff --git a/libxfs/xfs_dir2_sf.c b/libxfs/xfs_dir2_sf.c index a96be76..6848d05 100644 --- a/libxfs/xfs_dir2_sf.c +++ b/libxfs/xfs_dir2_sf.c @@ -262,7 +262,7 @@ xfs_dir2_block_to_sf( * Set up to loop over the block's entries. */ btp = xfs_dir2_block_tail_p(mp, hdr); - ptr = (char *)(hdr + 1); + ptr = (char *)xfs_dir3_data_entry_p(hdr); endptr = (char *)xfs_dir2_block_leaf_p(btp); sfep = xfs_dir2_sf_firstentry(sfp); /* -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8AB8B29E22 for ; Fri, 17 May 2013 06:13:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 15600AC003 for ; Fri, 17 May 2013 04:13:57 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 64mvk5iImtDxxefy for ; Fri, 17 May 2013 04:13:55 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYGBk5AxsZiAu9AI4CgS6DSwOoeIMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:54 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbh-0008S9-4a for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbN-0005Ed-0j for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:33 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 13/30] xfs: shortform directory offsets change for dir3 format Date: Fri, 17 May 2013 21:13:08 +1000 X-ASG-Orig-Subj: [PATCH 13/30] xfs: shortform directory offsets change for dir3 format Message-Id: <1368789205-19969-14-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789234 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Because the header size for the CRC enabled directory blocks is larger, the offset of the first entry into a directory block is different to the dir2 format. The shortform directory stores the dirent's offset so that it doesn't change when moving from shortform to block form and back again, and hence it needs to take into account the different header sizes to maintain the correct offsets. Signed-off-by: Dave Chinner --- db/check.c | 2 +- include/xfs_dir2_format.h | 25 ++++++++++++++----------- libxfs/xfs_dir2_sf.c | 6 +++--- repair/dir2.c | 7 ++++--- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/db/check.c b/db/check.c index b7855c0..27107a0 100644 --- a/db/check.c +++ b/db/check.c @@ -3418,7 +3418,7 @@ process_sf_dir_v2( dbprintf(_("dir %lld entry . %lld\n"), id->ino, id->ino); (*dot)++; sfe = xfs_dir2_sf_firstentry(&sf->hdr); - offset = XFS_DIR2_DATA_FIRST_OFFSET; + offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); for (i = sf->hdr.count - 1, i8 = 0; i >= 0; i--) { if ((__psint_t)sfe + xfs_dir2_sf_entsize(&sf->hdr,sfe->namelen) - (__psint_t)sf > be64_to_cpu(dip->di_size)) { diff --git a/include/xfs_dir2_format.h b/include/xfs_dir2_format.h index ce3626b..6dc884a 100644 --- a/include/xfs_dir2_format.h +++ b/include/xfs_dir2_format.h @@ -222,16 +222,6 @@ xfs_dir2_sf_nextentry(struct xfs_dir2_sf_hdr *hdr, xfs_dir2_byte_to_db(mp, XFS_DIR2_DATA_OFFSET) /* - * Offsets of . and .. in data space (always block 0) - */ -#define XFS_DIR2_DATA_DOT_OFFSET \ - ((xfs_dir2_data_aoff_t)sizeof(struct xfs_dir2_data_hdr)) -#define XFS_DIR2_DATA_DOTDOT_OFFSET \ - (XFS_DIR2_DATA_DOT_OFFSET + xfs_dir2_data_entsize(1)) -#define XFS_DIR2_DATA_FIRST_OFFSET \ - (XFS_DIR2_DATA_DOTDOT_OFFSET + xfs_dir2_data_entsize(2)) - -/* * Describe a free area in the data block. * * The freespace will be formatted as a xfs_dir2_data_unused_t. @@ -372,7 +362,20 @@ xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) /* * Offsets of . and .. in data space (always block 0) - */ + * + * The macros are used for shortform directories as they have no headers to read + * the magic number out of. Shortform directories need to know the size of the + * data block header because the sfe embeds the block offset of the entry into + * it so that it doesn't change when format conversion occurs. Bad Things Happen + * if we don't follow this rule. + */ +#define XFS_DIR3_DATA_DOT_OFFSET(mp) \ + xfs_dir3_data_hdr_size(xfs_sb_version_hascrc(&(mp)->m_sb)) +#define XFS_DIR3_DATA_DOTDOT_OFFSET(mp) \ + (XFS_DIR3_DATA_DOT_OFFSET(mp) + xfs_dir2_data_entsize(1)) +#define XFS_DIR3_DATA_FIRST_OFFSET(mp) \ + (XFS_DIR3_DATA_DOTDOT_OFFSET(mp) + xfs_dir2_data_entsize(2)) + static inline xfs_dir2_data_aoff_t xfs_dir3_data_dot_offset(struct xfs_dir2_data_hdr *hdr) { diff --git a/libxfs/xfs_dir2_sf.c b/libxfs/xfs_dir2_sf.c index 6848d05..cb23368 100644 --- a/libxfs/xfs_dir2_sf.c +++ b/libxfs/xfs_dir2_sf.c @@ -519,7 +519,7 @@ xfs_dir2_sf_addname_hard( * to insert the new entry. * If it's going to end up at the end then oldsfep will point there. */ - for (offset = XFS_DIR2_DATA_FIRST_OFFSET, + for (offset = XFS_DIR3_DATA_FIRST_OFFSET(dp->i_mount), oldsfep = xfs_dir2_sf_firstentry(oldsfp), add_datasize = xfs_dir2_data_entsize(args->namelen), eof = (char *)oldsfep == &buf[old_isize]; @@ -601,7 +601,7 @@ xfs_dir2_sf_addname_pick( sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data; size = xfs_dir2_data_entsize(args->namelen); - offset = XFS_DIR2_DATA_FIRST_OFFSET; + offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); sfep = xfs_dir2_sf_firstentry(sfp); holefit = 0; /* @@ -672,7 +672,7 @@ xfs_dir2_sf_check( dp = args->dp; sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data; - offset = XFS_DIR2_DATA_FIRST_OFFSET; + offset = XFS_DIR3_DATA_FIRST_OFFSET(dp->i_mount); ino = xfs_dir2_sf_get_parent_ino(sfp); i8count = ino > XFS_DIR2_MAX_SHORT_INUM; diff --git a/repair/dir2.c b/repair/dir2.c index 9f1d50b..2f13864 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -682,6 +682,7 @@ process_sf_dir2_fixi8( */ static void process_sf_dir2_fixoff( + xfs_mount_t *mp, xfs_dinode_t *dip) { int i; @@ -691,7 +692,7 @@ process_sf_dir2_fixoff( sfp = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); sfep = xfs_dir2_sf_firstentry(&sfp->hdr); - offset = XFS_DIR2_DATA_FIRST_OFFSET; + offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); for (i = 0; i < sfp->hdr.count; i++) { xfs_dir2_sf_put_offset(sfep, offset); @@ -745,7 +746,7 @@ process_sf_dir2( max_size = XFS_DFORK_DSIZE(dip, mp); num_entries = sfp->hdr.count; ino_dir_size = be64_to_cpu(dip->di_size); - offset = XFS_DIR2_DATA_FIRST_OFFSET; + offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); bad_offset = *repair = 0; ASSERT(ino_dir_size <= max_size); @@ -1102,7 +1103,7 @@ _("would have corrected entry offsets in directory %" PRIu64 "\n"), do_warn( _("corrected entry offsets in directory %" PRIu64 "\n"), ino); - process_sf_dir2_fixoff(dip); + process_sf_dir2_fixoff(mp, dip); *dino_dirty = 1; *repair = 1; } -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2D4FF29E21 for ; Fri, 17 May 2013 06:13:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 179F2304059 for ; Fri, 17 May 2013 04:13:56 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id aiN8Yp1La9zC55bG for ; Fri, 17 May 2013 04:13:52 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoNLzMIGDE5AxsZiAu9AI4ChHkDqHiDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:44 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbX-0008Rj-0T for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005EP-TC for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 10/30] xfs: add CRC checking to dir2 free blocks Date: Fri, 17 May 2013 21:13:05 +1000 X-ASG-Orig-Subj: [PATCH 10/30] xfs: add CRC checking to dir2 free blocks Message-Id: <1368789205-19969-11-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789232 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner This addition follows the same pattern as the dir2 block CRCs, but with a few differences. The main difference is that the free block header is different between the v2 and v3 formats, so an "in-core" free block header has been added and _todisk/_from_disk functions used to abstract the differences in structure format from the code. This is similar to the on-disk superblock versus the in-core superblock setup. The in-core strucutre is populated when the buffer is read from disk, all the in memory checks and modifications are done on the in-core version of the structure which is written back to the buffer before the buffer is logged. Signed-off-by: Dave Chinner --- db/check.c | 2 +- include/xfs_dir2_format.h | 55 +++++- libxfs/xfs_dir2_leaf.c | 15 +- libxfs/xfs_dir2_node.c | 474 ++++++++++++++++++++++++++++++--------------- repair/phase6.c | 2 +- 5 files changed, 384 insertions(+), 164 deletions(-) diff --git a/db/check.c b/db/check.c index 127e407..f464d4a 100644 --- a/db/check.c +++ b/db/check.c @@ -3005,7 +3005,7 @@ process_leaf_node_dir_v2_free( error++; return; } - maxent = xfs_dir2_free_max_bests(mp); + maxent = xfs_dir3_free_max_bests(mp); if (be32_to_cpu(free->hdr.firstdb) != xfs_dir2_da_to_db(mp, dabno - mp->m_dirfreeblk) * maxent) { if (!sflag || v) diff --git a/include/xfs_dir2_format.h b/include/xfs_dir2_format.h index da928c7..5c28a6a 100644 --- a/include/xfs_dir2_format.h +++ b/include/xfs_dir2_format.h @@ -66,6 +66,7 @@ #define XFS_DIR3_BLOCK_MAGIC 0x58444233 /* XDB3: single block dirs */ #define XFS_DIR3_DATA_MAGIC 0x58444433 /* XDD3: multiblock dirs */ +#define XFS_DIR3_FREE_MAGIC 0x58444633 /* XDF3: free index blocks */ /* * Byte offset in data block and shortform entry. @@ -657,19 +658,65 @@ typedef struct xfs_dir2_free { /* unused entries are -1 */ } xfs_dir2_free_t; -static inline int xfs_dir2_free_max_bests(struct xfs_mount *mp) +struct xfs_dir3_free_hdr { + struct xfs_dir3_blk_hdr hdr; + __be32 firstdb; /* db of first entry */ + __be32 nvalid; /* count of valid entries */ + __be32 nused; /* count of used entries */ +}; + +struct xfs_dir3_free { + struct xfs_dir3_free_hdr hdr; + __be16 bests[]; /* best free counts */ + /* unused entries are -1 */ +}; + +#define XFS_DIR3_FREE_CRC_OFF offsetof(struct xfs_dir3_free, hdr.hdr.crc) + +/* + * In core version of the free block header, abstracted away from on-disk format + * differences. Use this in the code, and convert to/from the disk version using + * xfs_dir3_free_hdr_from_disk/xfs_dir3_free_hdr_to_disk. + */ +struct xfs_dir3_icfree_hdr { + __uint32_t magic; + __uint32_t firstdb; + __uint32_t nvalid; + __uint32_t nused; + +}; + +void xfs_dir3_free_hdr_from_disk(struct xfs_dir3_icfree_hdr *to, + struct xfs_dir2_free *from); + +static inline int +xfs_dir3_free_hdr_size(struct xfs_mount *mp) { - return (mp->m_dirblksize - sizeof(struct xfs_dir2_free_hdr)) / + if (xfs_sb_version_hascrc(&mp->m_sb)) + return sizeof(struct xfs_dir3_free_hdr); + return sizeof(struct xfs_dir2_free_hdr); +} + +static inline int +xfs_dir3_free_max_bests(struct xfs_mount *mp) +{ + return (mp->m_dirblksize - xfs_dir3_free_hdr_size(mp)) / sizeof(xfs_dir2_data_off_t); } +static inline __be16 * +xfs_dir3_free_bests_p(struct xfs_mount *mp, struct xfs_dir2_free *free) +{ + return (__be16 *)((char *)free + xfs_dir3_free_hdr_size(mp)); +} + /* * Convert data space db to the corresponding free db. */ static inline xfs_dir2_db_t xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db) { - return XFS_DIR2_FREE_FIRSTDB(mp) + db / xfs_dir2_free_max_bests(mp); + return XFS_DIR2_FREE_FIRSTDB(mp) + db / xfs_dir3_free_max_bests(mp); } /* @@ -678,7 +725,7 @@ xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db) static inline int xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db) { - return db % xfs_dir2_free_max_bests(mp); + return db % xfs_dir3_free_max_bests(mp); } /* diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index d83fce4..a1df347 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -1477,6 +1477,7 @@ xfs_dir2_node_to_leaf( xfs_mount_t *mp; /* filesystem mount point */ int rval; /* successful free trim? */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir3_icfree_hdr freehdr; /* * There's more than a leaf level in the btree, so there must @@ -1534,15 +1535,15 @@ xfs_dir2_node_to_leaf( if (error) return error; free = fbp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); - ASSERT(!free->hdr.firstdb); + xfs_dir3_free_hdr_from_disk(&freehdr, free); + + ASSERT(!freehdr.firstdb); /* * Now see if the leafn and free data will fit in a leaf1. * If not, release the buffer and give up. */ - if (xfs_dir2_leaf_size(&leaf->hdr, be32_to_cpu(free->hdr.nvalid)) > - mp->m_dirblksize) { + if (xfs_dir2_leaf_size(&leaf->hdr, freehdr.nvalid) > mp->m_dirblksize) { xfs_trans_brelse(tp, fbp); return 0; } @@ -1563,12 +1564,12 @@ xfs_dir2_node_to_leaf( * Set up the leaf tail from the freespace block. */ ltp = xfs_dir2_leaf_tail_p(mp, leaf); - ltp->bestcount = free->hdr.nvalid; + ltp->bestcount = cpu_to_be32(freehdr.nvalid); /* * Set up the leaf bests table. */ - memcpy(xfs_dir2_leaf_bests_p(ltp), free->bests, - be32_to_cpu(ltp->bestcount) * sizeof(xfs_dir2_data_off_t)); + memcpy(xfs_dir2_leaf_bests_p(ltp), xfs_dir3_free_bests_p(mp, free), + freehdr.nvalid * sizeof(xfs_dir2_data_off_t)); xfs_dir2_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); xfs_dir2_leaf_log_tail(tp, lbp); xfs_dir2_leaf_check(dp, lbp); diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index e7820b2..e1d1f22 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -40,44 +41,78 @@ static int xfs_dir2_leafn_remove(xfs_da_args_t *args, struct xfs_buf *bp, static int xfs_dir2_node_addname_int(xfs_da_args_t *args, xfs_da_state_blk_t *fblk); -static void -xfs_dir2_free_verify( +static bool +xfs_dir3_free_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_dir2_free_hdr *hdr = bp->b_addr; - int block_ok = 0; - block_ok = hdr->magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC); - if (!block_ok) { - XFS_CORRUPTION_ERROR("xfs_dir2_free_verify magic", - XFS_ERRLEVEL_LOW, mp, hdr); - xfs_buf_ioerror(bp, EFSCORRUPTED); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + if (hdr3->magic != cpu_to_be32(XFS_DIR3_FREE_MAGIC)) + return false; + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + return false; + if (be64_to_cpu(hdr3->blkno) != bp->b_bn) + return false; + } else { + if (hdr->magic != cpu_to_be32(XFS_DIR2_FREE_MAGIC)) + return false; } + + /* XXX: should bounds check the xfs_dir3_icfree_hdr here */ + + return true; } static void -xfs_dir2_free_read_verify( +xfs_dir3_free_read_verify( struct xfs_buf *bp) { - xfs_dir2_free_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + + if ((xfs_sb_version_hascrc(&mp->m_sb) && + !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_DIR3_FREE_CRC_OFF)) || + !xfs_dir3_free_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } static void -xfs_dir2_free_write_verify( +xfs_dir3_free_write_verify( struct xfs_buf *bp) { - xfs_dir2_free_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; + + if (!xfs_dir3_free_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + hdr3->lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DIR3_FREE_CRC_OFF); } -static const struct xfs_buf_ops xfs_dir2_free_buf_ops = { - .verify_read = xfs_dir2_free_read_verify, - .verify_write = xfs_dir2_free_write_verify, +static const struct xfs_buf_ops xfs_dir3_free_buf_ops = { + .verify_read = xfs_dir3_free_read_verify, + .verify_write = xfs_dir3_free_write_verify, }; static int -__xfs_dir2_free_read( +__xfs_dir3_free_read( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t fbno, @@ -85,7 +120,7 @@ __xfs_dir2_free_read( struct xfs_buf **bpp) { return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, - XFS_DATA_FORK, &xfs_dir2_free_buf_ops); + XFS_DATA_FORK, &xfs_dir3_free_buf_ops); } int @@ -95,7 +130,7 @@ xfs_dir2_free_read( xfs_dablk_t fbno, struct xfs_buf **bpp) { - return __xfs_dir2_free_read(tp, dp, fbno, -1, bpp); + return __xfs_dir3_free_read(tp, dp, fbno, -1, bpp); } static int @@ -105,7 +140,95 @@ xfs_dir2_free_try_read( xfs_dablk_t fbno, struct xfs_buf **bpp) { - return __xfs_dir2_free_read(tp, dp, fbno, -2, bpp); + return __xfs_dir3_free_read(tp, dp, fbno, -2, bpp); +} + + +void +xfs_dir3_free_hdr_from_disk( + struct xfs_dir3_icfree_hdr *to, + struct xfs_dir2_free *from) +{ + if (from->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)) { + to->magic = be32_to_cpu(from->hdr.magic); + to->firstdb = be32_to_cpu(from->hdr.firstdb); + to->nvalid = be32_to_cpu(from->hdr.nvalid); + to->nused = be32_to_cpu(from->hdr.nused); + } else { + struct xfs_dir3_free_hdr *hdr3 = (struct xfs_dir3_free_hdr *)from; + + to->magic = be32_to_cpu(hdr3->hdr.magic); + to->firstdb = be32_to_cpu(hdr3->firstdb); + to->nvalid = be32_to_cpu(hdr3->nvalid); + to->nused = be32_to_cpu(hdr3->nused); + } + + ASSERT(to->magic == XFS_DIR2_FREE_MAGIC || + to->magic == XFS_DIR3_FREE_MAGIC); +} + +static void +xfs_dir3_free_hdr_to_disk( + struct xfs_dir2_free *to, + struct xfs_dir3_icfree_hdr *from) +{ + ASSERT(from->magic == XFS_DIR2_FREE_MAGIC || + from->magic == XFS_DIR3_FREE_MAGIC); + + if (from->magic == XFS_DIR2_FREE_MAGIC) { + to->hdr.magic = cpu_to_be32(from->magic); + to->hdr.firstdb = cpu_to_be32(from->firstdb); + to->hdr.nvalid = cpu_to_be32(from->nvalid); + to->hdr.nused = cpu_to_be32(from->nused); + } else { + struct xfs_dir3_free_hdr *hdr3 = (struct xfs_dir3_free_hdr *)to; + + hdr3->hdr.magic = cpu_to_be32(from->magic); + hdr3->firstdb = cpu_to_be32(from->firstdb); + hdr3->nvalid = cpu_to_be32(from->nvalid); + hdr3->nused = cpu_to_be32(from->nused); + } +} + +static int +xfs_dir3_free_get_buf( + struct xfs_trans *tp, + struct xfs_inode *dp, + xfs_dir2_db_t fbno, + struct xfs_buf **bpp) +{ + struct xfs_mount *mp = dp->i_mount; + struct xfs_buf *bp; + int error; + struct xfs_dir3_icfree_hdr hdr; + + error = xfs_da_get_buf(tp, dp, xfs_dir2_db_to_da(mp, fbno), + -1, &bp, XFS_DATA_FORK); + if (error) + return error; + + bp->b_ops = &xfs_dir3_free_buf_ops;; + + /* + * Initialize the new block to be empty, and remember + * its first slot as our empty slot. + */ + hdr.magic = XFS_DIR2_FREE_MAGIC; + hdr.firstdb = 0; + hdr.nused = 0; + hdr.nvalid = 0; + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_dir3_free_hdr *hdr3 = bp->b_addr; + + hdr.magic = XFS_DIR3_FREE_MAGIC; + hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); + hdr3->hdr.owner = cpu_to_be64(dp->i_ino); + uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); + + } + xfs_dir3_free_hdr_to_disk(bp->b_addr, &hdr); + *bpp = bp; + return 0; } /* @@ -119,13 +242,16 @@ xfs_dir2_free_log_bests( int last) /* last entry to log */ { xfs_dir2_free_t *free; /* freespace structure */ + __be16 *bests; free = bp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); + bests = xfs_dir3_free_bests_p(tp->t_mountp, free); + ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC) || + free->hdr.magic == cpu_to_be32(XFS_DIR3_FREE_MAGIC)); xfs_trans_log_buf(tp, bp, - (uint)((char *)&free->bests[first] - (char *)free), - (uint)((char *)&free->bests[last] - (char *)free + - sizeof(free->bests[0]) - 1)); + (uint)((char *)&bests[first] - (char *)free), + (uint)((char *)&bests[last] - (char *)free + + sizeof(bests[0]) - 1)); } /* @@ -139,9 +265,9 @@ xfs_dir2_free_log_header( xfs_dir2_free_t *free; /* freespace structure */ free = bp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); - xfs_trans_log_buf(tp, bp, (uint)((char *)&free->hdr - (char *)free), - (uint)(sizeof(xfs_dir2_free_hdr_t) - 1)); + ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC) || + free->hdr.magic == cpu_to_be32(XFS_DIR3_FREE_MAGIC)); + xfs_trans_log_buf(tp, bp, 0, xfs_dir3_free_hdr_size(tp->t_mountp) - 1); } /* @@ -168,6 +294,7 @@ xfs_dir2_leaf_to_node( xfs_dir2_data_off_t off; /* freespace entry value */ __be16 *to; /* pointer to freespace entry */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir3_icfree_hdr freehdr; trace_xfs_dir2_leaf_to_node(args); @@ -184,43 +311,43 @@ xfs_dir2_leaf_to_node( /* * Get the buffer for the new freespace block. */ - error = xfs_da_get_buf(tp, dp, xfs_dir2_db_to_da(mp, fdb), -1, &fbp, - XFS_DATA_FORK); + error = xfs_dir3_free_get_buf(tp, dp, fdb, &fbp); if (error) return error; - fbp->b_ops = &xfs_dir2_free_buf_ops; free = fbp->b_addr; + xfs_dir3_free_hdr_from_disk(&freehdr, free); leaf = lbp->b_addr; ltp = xfs_dir2_leaf_tail_p(mp, leaf); - /* - * Initialize the freespace block header. - */ - free->hdr.magic = cpu_to_be32(XFS_DIR2_FREE_MAGIC); - free->hdr.firstdb = 0; - ASSERT(be32_to_cpu(ltp->bestcount) <= (uint)dp->i_d.di_size / mp->m_dirblksize); - free->hdr.nvalid = ltp->bestcount; + ASSERT(be32_to_cpu(ltp->bestcount) <= + (uint)dp->i_d.di_size / mp->m_dirblksize); + /* * Copy freespace entries from the leaf block to the new block. * Count active entries. */ - for (i = n = 0, from = xfs_dir2_leaf_bests_p(ltp), to = free->bests; - i < be32_to_cpu(ltp->bestcount); i++, from++, to++) { + from = xfs_dir2_leaf_bests_p(ltp); + to = xfs_dir3_free_bests_p(mp, free); + for (i = n = 0; i < be32_to_cpu(ltp->bestcount); i++, from++, to++) { if ((off = be16_to_cpu(*from)) != NULLDATAOFF) n++; *to = cpu_to_be16(off); } - free->hdr.nused = cpu_to_be32(n); - - lbp->b_ops = &xfs_dir2_leafn_buf_ops; - leaf->hdr.info.magic = cpu_to_be16(XFS_DIR2_LEAFN_MAGIC); /* - * Log everything. + * Now initialize the freespace block header. */ - xfs_dir2_leaf_log_header(tp, lbp); + freehdr.nused = n; + freehdr.nvalid = be32_to_cpu(ltp->bestcount); + + xfs_dir3_free_hdr_to_disk(fbp->b_addr, &freehdr); + xfs_dir2_free_log_bests(tp, fbp, 0, freehdr.nvalid - 1); xfs_dir2_free_log_header(tp, fbp); - xfs_dir2_free_log_bests(tp, fbp, 0, be32_to_cpu(free->hdr.nvalid) - 1); + + /* convert the leaf to a leafnode */ + leaf->hdr.info.magic = cpu_to_be16(XFS_DIR2_LEAFN_MAGIC); + lbp->b_ops = &xfs_dir2_leafn_buf_ops; + xfs_dir2_leaf_log_header(tp, lbp); xfs_dir2_leafn_check(dp, lbp); return 0; } @@ -339,6 +466,23 @@ xfs_dir2_leafn_check( } ASSERT(be16_to_cpu(leaf->hdr.stale) == stale); } + +static void +xfs_dir2_free_hdr_check( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_dir2_db_t db) +{ + struct xfs_dir3_icfree_hdr hdr; + + xfs_dir3_free_hdr_from_disk(&hdr, bp->b_addr); + + ASSERT((hdr.firstdb % xfs_dir3_free_max_bests(mp)) == 0); + ASSERT(hdr.firstdb <= db); + ASSERT(db < hdr.firstdb + hdr.nvalid); +} +#else +#define xfs_dir2_free_hdr_check(mp, dp, db) #endif /* DEBUG */ /* @@ -409,7 +553,8 @@ xfs_dir2_leafn_lookup_for_addname( curbp = state->extrablk.bp; curfdb = state->extrablk.blkno; free = curbp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); + ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC) || + free->hdr.magic == cpu_to_be32(XFS_DIR3_FREE_MAGIC)); } length = xfs_dir2_data_entsize(args->namelen); /* @@ -436,6 +581,8 @@ xfs_dir2_leafn_lookup_for_addname( * in hand, take a look at it. */ if (newdb != curdb) { + __be16 *bests; + curdb = newdb; /* * Convert the data block to the free block @@ -458,13 +605,8 @@ xfs_dir2_leafn_lookup_for_addname( if (error) return error; free = curbp->b_addr; - ASSERT(be32_to_cpu(free->hdr.magic) == - XFS_DIR2_FREE_MAGIC); - ASSERT((be32_to_cpu(free->hdr.firstdb) % - xfs_dir2_free_max_bests(mp)) == 0); - ASSERT(be32_to_cpu(free->hdr.firstdb) <= curdb); - ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) + - be32_to_cpu(free->hdr.nvalid)); + + xfs_dir2_free_hdr_check(mp, curbp, curdb); } /* * Get the index for our entry. @@ -473,8 +615,8 @@ xfs_dir2_leafn_lookup_for_addname( /* * If it has room, return it. */ - if (unlikely(free->bests[fi] == - cpu_to_be16(NULLDATAOFF))) { + bests = xfs_dir3_free_bests_p(mp, free); + if (unlikely(bests[fi] == cpu_to_be16(NULLDATAOFF))) { XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", XFS_ERRLEVEL_LOW, mp); if (curfdb != newfdb) @@ -482,7 +624,7 @@ xfs_dir2_leafn_lookup_for_addname( return XFS_ERROR(EFSCORRUPTED); } curfdb = newfdb; - if (be16_to_cpu(free->bests[fi]) >= length) + if (be16_to_cpu(bests[fi]) >= length) goto out; } } @@ -496,6 +638,12 @@ out: state->extrablk.bp = curbp; state->extrablk.index = fi; state->extrablk.blkno = curfdb; + + /* + * Important: this magic number is not in the buffer - it's for + * buffer type information and therefore only the free/data type + * matters here, not whether CRCs are enabled or not. + */ state->extrablk.magic = XFS_DIR2_FREE_MAGIC; } else { state->extravalid = 0; @@ -883,7 +1031,7 @@ xfs_dir2_leafn_rebalance( } static int -xfs_dir2_data_block_free( +xfs_dir3_data_block_free( xfs_da_args_t *args, struct xfs_dir2_data_hdr *hdr, struct xfs_dir2_free *free, @@ -894,59 +1042,68 @@ xfs_dir2_data_block_free( { struct xfs_trans *tp = args->trans; int logfree = 0; + __be16 *bests; + struct xfs_dir3_icfree_hdr freehdr; - if (!hdr) { - /* One less used entry in the free table. */ - be32_add_cpu(&free->hdr.nused, -1); - xfs_dir2_free_log_header(tp, fbp); - /* - * If this was the last entry in the table, we can trim the - * table size back. There might be other entries at the end - * referring to non-existent data blocks, get those too. - */ - if (findex == be32_to_cpu(free->hdr.nvalid) - 1) { - int i; /* free entry index */ + xfs_dir3_free_hdr_from_disk(&freehdr, free); - for (i = findex - 1; i >= 0; i--) { - if (free->bests[i] != cpu_to_be16(NULLDATAOFF)) - break; - } - free->hdr.nvalid = cpu_to_be32(i + 1); - logfree = 0; - } else { - /* Not the last entry, just punch it out. */ - free->bests[findex] = cpu_to_be16(NULLDATAOFF); - logfree = 1; - } + bests = xfs_dir3_free_bests_p(tp->t_mountp, free); + if (hdr) { /* - * If there are no useful entries left in the block, - * get rid of the block if we can. + * Data block is not empty, just set the free entry to the new + * value. */ - if (!free->hdr.nused) { - int error; + bests[findex] = cpu_to_be16(longest); + xfs_dir2_free_log_bests(tp, fbp, findex, findex); + return 0; + } - error = xfs_dir2_shrink_inode(args, fdb, fbp); - if (error == 0) { - fbp = NULL; - logfree = 0; - } else if (error != ENOSPC || args->total != 0) - return error; - /* - * It's possible to get ENOSPC if there is no - * space reservation. In this case some one - * else will eventually get rid of this block. - */ + /* + * One less used entry in the free table. Unused is not converted + * because we only need to know if it zero + */ + freehdr.nused--; + + if (findex == freehdr.nvalid - 1) { + int i; /* free entry index */ + + for (i = findex - 1; i >= 0; i--) { + if (bests[i] != cpu_to_be16(NULLDATAOFF)) + break; } + freehdr.nvalid = i + 1; + logfree = 0; } else { + /* Not the last entry, just punch it out. */ + bests[findex] = cpu_to_be16(NULLDATAOFF); + logfree = 1; + } + + xfs_dir3_free_hdr_to_disk(free, &freehdr); + xfs_dir2_free_log_header(tp, fbp); + + /* + * If there are no useful entries left in the block, get rid of the + * block if we can. + */ + if (!freehdr.nused) { + int error; + + error = xfs_dir2_shrink_inode(args, fdb, fbp); + if (error == 0) { + fbp = NULL; + logfree = 0; + } else if (error != ENOSPC || args->total != 0) + return error; /* - * Data block is not empty, just set the free entry to the new - * value. + * It's possible to get ENOSPC if there is no + * space reservation. In this case some one + * else will eventually get rid of this block. */ - free->bests[findex] = cpu_to_be16(longest); - logfree = 1; } + /* Log the free entry that changed, unless we got rid of it. */ if (logfree) xfs_dir2_free_log_bests(tp, fbp, findex, findex); @@ -1047,10 +1204,15 @@ xfs_dir2_leafn_remove( if (error) return error; free = fbp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); - ASSERT(be32_to_cpu(free->hdr.firstdb) == - xfs_dir2_free_max_bests(mp) * - (fdb - XFS_DIR2_FREE_FIRSTDB(mp))); +#ifdef DEBUG + { + struct xfs_dir3_icfree_hdr freehdr; + xfs_dir3_free_hdr_from_disk(&freehdr, free); + ASSERT(freehdr.firstdb == + xfs_dir3_free_max_bests(mp) * + (fdb - XFS_DIR2_FREE_FIRSTDB(mp))); + } +#endif /* * Calculate which entry we need to fix. */ @@ -1081,7 +1243,7 @@ xfs_dir2_leafn_remove( * If we got rid of the data block, we can eliminate that entry * in the free block. */ - error = xfs_dir2_data_block_free(args, hdr, free, + error = xfs_dir3_data_block_free(args, hdr, free, fdb, findex, fbp, longest); if (error) return error; @@ -1432,6 +1594,8 @@ xfs_dir2_node_addname_int( int needscan; /* need to rescan data frees */ __be16 *tagp; /* data entry tag pointer */ xfs_trans_t *tp; /* transaction pointer */ + __be16 *bests; + struct xfs_dir3_icfree_hdr freehdr; dp = args->dp; mp = dp->i_mount; @@ -1449,36 +1613,37 @@ xfs_dir2_node_addname_int( */ ifbno = fblk->blkno; free = fbp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); findex = fblk->index; + bests = xfs_dir3_free_bests_p(mp, free); + xfs_dir3_free_hdr_from_disk(&freehdr, free); + /* * This means the free entry showed that the data block had * space for our entry, so we remembered it. * Use that data block. */ if (findex >= 0) { - ASSERT(findex < be32_to_cpu(free->hdr.nvalid)); - ASSERT(be16_to_cpu(free->bests[findex]) != NULLDATAOFF); - ASSERT(be16_to_cpu(free->bests[findex]) >= length); - dbno = be32_to_cpu(free->hdr.firstdb) + findex; - } - /* - * The data block looked at didn't have enough room. - * We'll start at the beginning of the freespace entries. - */ - else { + ASSERT(findex < freehdr.nvalid); + ASSERT(be16_to_cpu(bests[findex]) != NULLDATAOFF); + ASSERT(be16_to_cpu(bests[findex]) >= length); + dbno = freehdr.firstdb + findex; + } else { + /* + * The data block looked at didn't have enough room. + * We'll start at the beginning of the freespace entries. + */ dbno = -1; findex = 0; } - } - /* - * Didn't come in with a freespace block, so don't have a data block. - */ - else { + } else { + /* + * Didn't come in with a freespace block, so no data block. + */ ifbno = dbno = -1; fbp = NULL; findex = 0; } + /* * If we don't have a data block yet, we're going to scan the * freespace blocks looking for one. Figure out what the @@ -1532,20 +1697,26 @@ xfs_dir2_node_addname_int( if (!fbp) continue; free = fbp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); findex = 0; } /* * Look at the current free entry. Is it good enough? + * + * The bests initialisation should be wher eteh bufer is read in + * the above branch. But gcc is too stupid to realise that bests + * iand the freehdr are actually initialised if they are placed + * there, so we have to do it here to avoid warnings. Blech. */ - if (be16_to_cpu(free->bests[findex]) != NULLDATAOFF && - be16_to_cpu(free->bests[findex]) >= length) - dbno = be32_to_cpu(free->hdr.firstdb) + findex; + bests = xfs_dir3_free_bests_p(mp, free); + xfs_dir3_free_hdr_from_disk(&freehdr, free); + if (be16_to_cpu(bests[findex]) != NULLDATAOFF && + be16_to_cpu(bests[findex]) >= length) + dbno = freehdr.firstdb + findex; else { /* * Are we done with the freeblock? */ - if (++findex == be32_to_cpu(free->hdr.nvalid)) { + if (++findex == freehdr.nvalid) { /* * Drop the block. */ @@ -1599,11 +1770,11 @@ xfs_dir2_node_addname_int( * If there wasn't a freespace block, the read will * return a NULL fbp. Allocate and initialize a new one. */ - if( fbp == NULL ) { - if ((error = xfs_dir2_grow_inode(args, XFS_DIR2_FREE_SPACE, - &fbno))) { + if(!fbp) { + error = xfs_dir2_grow_inode(args, XFS_DIR2_FREE_SPACE, + &fbno); + if (error) return error; - } if (unlikely(xfs_dir2_db_to_fdb(mp, dbno) != fbno)) { xfs_alert(mp, @@ -1631,27 +1802,24 @@ xfs_dir2_node_addname_int( /* * Get a buffer for the new block. */ - error = xfs_da_get_buf(tp, dp, - xfs_dir2_db_to_da(mp, fbno), - -1, &fbp, XFS_DATA_FORK); + error = xfs_dir3_free_get_buf(tp, dp, fbno, &fbp); if (error) return error; - fbp->b_ops = &xfs_dir2_free_buf_ops; + free = fbp->b_addr; + bests = xfs_dir3_free_bests_p(mp, free); + xfs_dir3_free_hdr_from_disk(&freehdr, free); /* - * Initialize the new block to be empty, and remember - * its first slot as our empty slot. + * Remember the first slot as our empty slot. */ - free = fbp->b_addr; - free->hdr.magic = cpu_to_be32(XFS_DIR2_FREE_MAGIC); - free->hdr.firstdb = cpu_to_be32( - (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) * - xfs_dir2_free_max_bests(mp)); + freehdr.firstdb = (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) * + xfs_dir3_free_max_bests(mp); free->hdr.nvalid = 0; free->hdr.nused = 0; } else { free = fbp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); + bests = xfs_dir3_free_bests_p(mp, free); + xfs_dir3_free_hdr_from_disk(&freehdr, free); } /* @@ -1662,20 +1830,21 @@ xfs_dir2_node_addname_int( * If it's after the end of the current entries in the * freespace block, extend that table. */ - if (findex >= be32_to_cpu(free->hdr.nvalid)) { - ASSERT(findex < xfs_dir2_free_max_bests(mp)); - free->hdr.nvalid = cpu_to_be32(findex + 1); + if (findex >= freehdr.nvalid) { + ASSERT(findex < xfs_dir3_free_max_bests(mp)); + freehdr.nvalid = findex + 1; /* * Tag new entry so nused will go up. */ - free->bests[findex] = cpu_to_be16(NULLDATAOFF); + bests[findex] = cpu_to_be16(NULLDATAOFF); } /* * If this entry was for an empty data block * (this should always be true) then update the header. */ - if (free->bests[findex] == cpu_to_be16(NULLDATAOFF)) { - be32_add_cpu(&free->hdr.nused, 1); + if (bests[findex] == cpu_to_be16(NULLDATAOFF)) { + freehdr.nused++; + xfs_dir3_free_hdr_to_disk(fbp->b_addr, &freehdr); xfs_dir2_free_log_header(tp, fbp); } /* @@ -1684,7 +1853,7 @@ xfs_dir2_node_addname_int( * change again. */ hdr = dbp->b_addr; - free->bests[findex] = hdr->bestfree[0].length; + bests[findex] = hdr->bestfree[0].length; logfree = 1; } /* @@ -1743,8 +1912,9 @@ xfs_dir2_node_addname_int( /* * If the freespace entry is now wrong, update it. */ - if (be16_to_cpu(free->bests[findex]) != be16_to_cpu(hdr->bestfree[0].length)) { - free->bests[findex] = hdr->bestfree[0].length; + bests = xfs_dir3_free_bests_p(mp, free); /* gcc is so stupid */ + if (be16_to_cpu(bests[findex]) != be16_to_cpu(hdr->bestfree[0].length)) { + bests[findex] = hdr->bestfree[0].length; logfree = 1; } /* @@ -1980,6 +2150,7 @@ xfs_dir2_node_trim_free( xfs_dir2_free_t *free; /* freespace structure */ xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir3_icfree_hdr freehdr; dp = args->dp; mp = dp->i_mount; @@ -1997,11 +2168,12 @@ xfs_dir2_node_trim_free( if (!bp) return 0; free = bp->b_addr; - ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC)); + xfs_dir3_free_hdr_from_disk(&freehdr, free); + /* * If there are used entries, there's nothing to do. */ - if (be32_to_cpu(free->hdr.nused) > 0) { + if (freehdr.nused > 0) { xfs_trans_brelse(tp, bp); *rvalp = 0; return 0; diff --git a/repair/phase6.c b/repair/phase6.c index 039e8ae..4c65acf 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1960,7 +1960,7 @@ longform_dir2_check_node( if (be32_to_cpu(free->hdr.magic) != XFS_DIR2_FREE_MAGIC || be32_to_cpu(free->hdr.firstdb) != (fdb - XFS_DIR2_FREE_FIRSTDB(mp)) * - xfs_dir2_free_max_bests(mp) || + xfs_dir3_free_max_bests(mp) || be32_to_cpu(free->hdr.nvalid) < be32_to_cpu(free->hdr.nused)) { do_warn( -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1EF1829E06 for ; Fri, 17 May 2013 06:13:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0B784304059 for ; Fri, 17 May 2013 04:13:58 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0004-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id lN5cK4YrHT3jEJp0 for ; Fri, 17 May 2013 04:13:56 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOoeIMiKoEuJA Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:55 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbX-0008SN-HU for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbX-0005F5-7z for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 18/30] xfs: add buffer types to directory and attribute buffers Date: Fri, 17 May 2013 21:13:13 +1000 X-ASG-Orig-Subj: [PATCH 18/30] xfs: add buffer types to directory and attribute buffers Message-Id: <1368789205-19969-19-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789236 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Add buffer types to the buffer log items so that log recovery can validate the buffers and calculate CRCs correctly after the buffers are recovered. Signed-off-by: Dave Chinner --- include/xfs_attr_remote.h | 2 ++ include/xfs_buf_item.h | 18 +++++++++++++++++- include/xfs_da_btree.h | 2 ++ include/xfs_trans.h | 2 ++ libxfs/xfs.h | 1 + libxfs/xfs_attr_leaf.c | 9 ++++++++- libxfs/xfs_da_btree.c | 46 ++++++++++++++++++++++++++++++++++++++++++--- libxfs/xfs_dir2_block.c | 12 +++++++++--- libxfs/xfs_dir2_data.c | 8 +++++++- libxfs/xfs_dir2_leaf.c | 24 +++++++++++++++++++---- libxfs/xfs_dir2_node.c | 17 ++++++++++++++--- libxfs/xfs_dir2_priv.h | 2 ++ 12 files changed, 127 insertions(+), 16 deletions(-) diff --git a/include/xfs_attr_remote.h b/include/xfs_attr_remote.h index 9e71edf..28f6f10 100644 --- a/include/xfs_attr_remote.h +++ b/include/xfs_attr_remote.h @@ -43,6 +43,8 @@ struct xfs_attr3_rmt_hdr { ((bufsize) - (xfs_sb_version_hascrc(&(mp)->m_sb) ? \ sizeof(struct xfs_attr3_rmt_hdr) : 0)) +extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops; + int xfs_attr_rmtval_get(struct xfs_da_args *args); int xfs_attr_rmtval_set(struct xfs_da_args *args); int xfs_attr_rmtval_remove(struct xfs_da_args *args); diff --git a/include/xfs_buf_item.h b/include/xfs_buf_item.h index 09cab4e..640adcf 100644 --- a/include/xfs_buf_item.h +++ b/include/xfs_buf_item.h @@ -50,6 +50,14 @@ extern kmem_zone_t *xfs_buf_item_zone; #define XFS_BLF_AGI_BUF (1<<8) #define XFS_BLF_DINO_BUF (1<<9) #define XFS_BLF_SYMLINK_BUF (1<<10) +#define XFS_BLF_DIR_BLOCK_BUF (1<<11) +#define XFS_BLF_DIR_DATA_BUF (1<<12) +#define XFS_BLF_DIR_FREE_BUF (1<<13) +#define XFS_BLF_DIR_LEAF1_BUF (1<<14) +#define XFS_BLF_DIR_LEAFN_BUF (1<<15) +#define XFS_BLF_DA_NODE_BUF (1<<16) +#define XFS_BLF_ATTR_LEAF_BUF (1<<17) +#define XFS_BLF_ATTR_RMT_BUF (1<<18) #define XFS_BLF_TYPE_MASK \ (XFS_BLF_UDQUOT_BUF | \ @@ -60,7 +68,15 @@ extern kmem_zone_t *xfs_buf_item_zone; XFS_BLF_AGFL_BUF | \ XFS_BLF_AGI_BUF | \ XFS_BLF_DINO_BUF | \ - XFS_BLF_SYMLINK_BUF) + XFS_BLF_SYMLINK_BUF | \ + XFS_BLF_DIR_BLOCK_BUF | \ + XFS_BLF_DIR_DATA_BUF | \ + XFS_BLF_DIR_FREE_BUF | \ + XFS_BLF_DIR_LEAF1_BUF | \ + XFS_BLF_DIR_LEAFN_BUF | \ + XFS_BLF_DA_NODE_BUF | \ + XFS_BLF_ATTR_LEAF_BUF | \ + XFS_BLF_ATTR_RMT_BUF) #define XFS_BLF_CHUNK 128 #define XFS_BLF_SHIFT 7 diff --git a/include/xfs_da_btree.h b/include/xfs_da_btree.h index 0e8182c..6fb3371 100644 --- a/include/xfs_da_btree.h +++ b/include/xfs_da_btree.h @@ -301,6 +301,8 @@ int xfs_da3_node_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mappedbno, struct xfs_buf **bpp, int which_fork); +extern const struct xfs_buf_ops xfs_da3_node_buf_ops; + /* * Utility routines. */ diff --git a/include/xfs_trans.h b/include/xfs_trans.h index a9bd826..9e145e9 100644 --- a/include/xfs_trans.h +++ b/include/xfs_trans.h @@ -502,6 +502,8 @@ void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint); void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_buf_set_type(struct xfs_trans *, struct xfs_buf *, uint); +void xfs_trans_buf_copy_type(struct xfs_buf *dst_bp, + struct xfs_buf *src_bp); void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int); void xfs_trans_ijoin(struct xfs_trans *, struct xfs_inode *, uint); void xfs_trans_log_buf(xfs_trans_t *, struct xfs_buf *, uint, uint); diff --git a/libxfs/xfs.h b/libxfs/xfs.h index c69dc4a..6bec18e 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -255,6 +255,7 @@ roundup_pow_of_two(uint v) #define xfs_trans_agflist_delta(tp, d) #define xfs_trans_agbtree_delta(tp, d) #define xfs_trans_buf_set_type(tp, bp, t) +#define xfs_trans_buf_copy_type(dbp, sbp) #define xfs_buf_readahead(a,b,c,ops) ((void) 0) /* no readahead */ #define xfs_buf_readahead_map(a,b,c,ops) ((void) 0) /* no readahead */ diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index 9de2244..7724781 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -236,8 +236,13 @@ xfs_attr3_leaf_read( xfs_daddr_t mappedbno, struct xfs_buf **bpp) { - return xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, + int err; + + err = xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, XFS_ATTR_FORK, &xfs_attr3_leaf_buf_ops); + if (!err && tp) + xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_ATTR_LEAF_BUF); + return err; } /*======================================================================== @@ -867,6 +872,7 @@ xfs_attr3_leaf_to_node( goto out; /* copy leaf to new buffer, update identifiers */ + xfs_trans_buf_set_type(args->trans, bp2, XFS_BLF_ATTR_LEAF_BUF); bp2->b_ops = bp1->b_ops; memcpy(bp2->b_addr, bp1->b_addr, XFS_LBSIZE(mp)); if (xfs_sb_version_hascrc(&mp->m_sb)) { @@ -929,6 +935,7 @@ xfs_attr3_leaf_create( if (error) return error; bp->b_ops = &xfs_attr3_leaf_buf_ops; + xfs_trans_buf_set_type(args->trans, bp, XFS_BLF_ATTR_LEAF_BUF); leaf = bp->b_addr; memset(leaf, 0, XFS_LBSIZE(mp)); diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index 5db94db..ef443ae 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -270,7 +270,6 @@ const struct xfs_buf_ops xfs_da3_node_buf_ops = { .verify_write = xfs_da3_node_write_verify, }; - int xfs_da3_node_read( struct xfs_trans *tp, @@ -280,8 +279,35 @@ xfs_da3_node_read( struct xfs_buf **bpp, int which_fork) { - return xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, + int err; + + err = xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, which_fork, &xfs_da3_node_buf_ops); + if (!err && tp) { + struct xfs_da_blkinfo *info = (*bpp)->b_addr; + int type; + + switch (be16_to_cpu(info->magic)) { + case XFS_DA3_NODE_MAGIC: + case XFS_DA_NODE_MAGIC: + type = XFS_BLF_DA_NODE_BUF; + break; + case XFS_ATTR_LEAF_MAGIC: + case XFS_ATTR3_LEAF_MAGIC: + type = XFS_BLF_ATTR_LEAF_BUF; + break; + case XFS_DIR2_LEAFN_MAGIC: + case XFS_DIR3_LEAFN_MAGIC: + type = XFS_BLF_DIR_LEAFN_BUF; + break; + default: + type = 0; + ASSERT(0); + break; + } + xfs_trans_buf_set_type(tp, *bpp, type); + } + return err; } /*======================================================================== @@ -312,6 +338,8 @@ xfs_da3_node_create( error = xfs_da_get_buf(tp, args->dp, blkno, -1, &bp, whichfork); if (error) return(error); + bp->b_ops = &xfs_da3_node_buf_ops; + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DA_NODE_BUF); node = bp->b_addr; if (xfs_sb_version_hascrc(&mp->m_sb)) { @@ -330,7 +358,6 @@ xfs_da3_node_create( xfs_trans_log_buf(tp, bp, XFS_DA_LOGRANGE(node, &node->hdr, xfs_da3_node_hdr_size(node))); - bp->b_ops = &xfs_da3_node_buf_ops; *bpp = bp; return(0); } @@ -541,6 +568,12 @@ xfs_da3_root_split( btree = xfs_da3_node_tree_p(oldroot); size = (int)((char *)&btree[nodehdr.count] - (char *)oldroot); level = nodehdr.level; + + /* + * we are about to copy oldroot to bp, so set up the type + * of bp while we know exactly what it will be. + */ + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DA_NODE_BUF); } else { struct xfs_dir3_icleaf_hdr leafhdr; struct xfs_dir2_leaf_entry *ents; @@ -553,6 +586,12 @@ xfs_da3_root_split( leafhdr.magic == XFS_DIR3_LEAFN_MAGIC); size = (int)((char *)&ents[leafhdr.count] - (char *)leaf); level = 0; + + /* + * we are about to copy oldroot to bp, so set up the type + * of bp while we know exactly what it will be. + */ + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_LEAFN_BUF); } /* @@ -1068,6 +1107,7 @@ xfs_da3_root_join( */ memcpy(root_blk->bp->b_addr, bp->b_addr, state->blocksize); root_blk->bp->b_ops = bp->b_ops; + xfs_trans_buf_copy_type(root_blk->bp, bp); if (oldroothdr.magic == XFS_DA3_NODE_MAGIC) { struct xfs_da3_blkinfo *da3 = root_blk->bp->b_addr; da3->blkno = cpu_to_be64(root_blk->bp->b_bn); diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c index b98b749..574e414 100644 --- a/libxfs/xfs_dir2_block.c +++ b/libxfs/xfs_dir2_block.c @@ -114,20 +114,26 @@ xfs_dir3_block_read( struct xfs_buf **bpp) { struct xfs_mount *mp = dp->i_mount; + int err; - return xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, bpp, + err = xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, bpp, XFS_DATA_FORK, &xfs_dir3_block_buf_ops); + if (!err && tp) + xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_BLOCK_BUF); + return err; } static void xfs_dir3_block_init( struct xfs_mount *mp, + struct xfs_trans *tp, struct xfs_buf *bp, struct xfs_inode *dp) { struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; bp->b_ops = &xfs_dir3_block_buf_ops; + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_BLOCK_BUF); if (xfs_sb_version_hascrc(&mp->m_sb)) { memset(hdr3, 0, sizeof(*hdr3)); @@ -964,7 +970,7 @@ xfs_dir2_leaf_to_block( /* * Start converting it to block form. */ - xfs_dir3_block_init(mp, dbp, dp); + xfs_dir3_block_init(mp, tp, dbp, dp); needlog = 1; needscan = 0; @@ -1093,7 +1099,7 @@ xfs_dir2_sf_to_block( kmem_free(sfp); return error; } - xfs_dir3_block_init(mp, bp, dp); + xfs_dir3_block_init(mp, tp, bp, dp); hdr = bp->b_addr; /* diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c index 69841df..9752ae3 100644 --- a/libxfs/xfs_dir2_data.c +++ b/libxfs/xfs_dir2_data.c @@ -283,8 +283,13 @@ xfs_dir3_data_read( xfs_daddr_t mapped_bno, struct xfs_buf **bpp) { - return xfs_da_read_buf(tp, dp, bno, mapped_bno, bpp, + int err; + + err = xfs_da_read_buf(tp, dp, bno, mapped_bno, bpp, XFS_DATA_FORK, &xfs_dir3_data_buf_ops); + if (!err && tp) + xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_DATA_BUF); + return err; } int @@ -553,6 +558,7 @@ xfs_dir3_data_init( if (error) return error; bp->b_ops = &xfs_dir3_data_buf_ops; + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_DATA_BUF); /* * Initialize the header. diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index f00b23c..3d1ec23 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -279,8 +279,13 @@ xfs_dir3_leaf_read( xfs_daddr_t mappedbno, struct xfs_buf **bpp) { - return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, + int err; + + err = xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, XFS_DATA_FORK, &xfs_dir3_leaf1_buf_ops); + if (!err && tp) + xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_LEAF1_BUF); + return err; } int @@ -291,8 +296,13 @@ xfs_dir3_leafn_read( xfs_daddr_t mappedbno, struct xfs_buf **bpp) { - return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, + int err; + + err = xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, XFS_DATA_FORK, &xfs_dir3_leafn_buf_ops); + if (!err && tp) + xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_LEAFN_BUF); + return err; } /* @@ -301,6 +311,7 @@ xfs_dir3_leafn_read( static void xfs_dir3_leaf_init( struct xfs_mount *mp, + struct xfs_trans *tp, struct xfs_buf *bp, xfs_ino_t owner, __uint16_t type) @@ -335,8 +346,11 @@ xfs_dir3_leaf_init( ltp = xfs_dir2_leaf_tail_p(mp, leaf); ltp->bestcount = 0; bp->b_ops = &xfs_dir3_leaf1_buf_ops; - } else + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_LEAF1_BUF); + } else { bp->b_ops = &xfs_dir3_leafn_buf_ops; + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_LEAFN_BUF); + } } int @@ -361,7 +375,7 @@ xfs_dir3_leaf_get_buf( if (error) return error; - xfs_dir3_leaf_init(mp, bp, dp->i_ino, magic); + xfs_dir3_leaf_init(mp, tp, bp, dp->i_ino, magic); xfs_dir3_leaf_log_header(tp, bp); if (magic == XFS_DIR2_LEAF1_MAGIC) xfs_dir3_leaf_log_tail(tp, bp); @@ -456,6 +470,7 @@ xfs_dir2_block_to_leaf( * Fix up the block header, make it a data block. */ dbp->b_ops = &xfs_dir3_data_buf_ops; + xfs_trans_buf_set_type(tp, dbp, XFS_BLF_DIR_DATA_BUF); if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); else @@ -1776,6 +1791,7 @@ xfs_dir2_node_to_leaf( xfs_dir3_leaf_compact(args, &leafhdr, lbp); lbp->b_ops = &xfs_dir3_leaf1_buf_ops; + xfs_trans_buf_set_type(tp, lbp, XFS_BLF_DIR_LEAF1_BUF); leafhdr.magic = (leafhdr.magic == XFS_DIR2_LEAFN_MAGIC) ? XFS_DIR2_LEAF1_MAGIC : XFS_DIR3_LEAF1_MAGIC; diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index 9e75553..a88049b 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -130,7 +130,7 @@ xfs_dir3_free_write_verify( xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DIR3_FREE_CRC_OFF); } -static const struct xfs_buf_ops xfs_dir3_free_buf_ops = { +const struct xfs_buf_ops xfs_dir3_free_buf_ops = { .verify_read = xfs_dir3_free_read_verify, .verify_write = xfs_dir3_free_write_verify, }; @@ -144,8 +144,15 @@ __xfs_dir3_free_read( xfs_daddr_t mappedbno, struct xfs_buf **bpp) { - return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, + int err; + + err = xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, XFS_DATA_FORK, &xfs_dir3_free_buf_ops); + + /* try read returns without an error or *bpp if it lands in a hole */ + if (!err && tp && *bpp) + xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_FREE_BUF); + return err; } int @@ -232,7 +239,8 @@ xfs_dir3_free_get_buf( if (error) return error; - bp->b_ops = &xfs_dir3_free_buf_ops;; + xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_FREE_BUF); + bp->b_ops = &xfs_dir3_free_buf_ops; /* * Initialize the new block to be empty, and remember @@ -380,6 +388,7 @@ xfs_dir2_leaf_to_node( else leaf->hdr.info.magic = cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); lbp->b_ops = &xfs_dir3_leafn_buf_ops; + xfs_trans_buf_set_type(tp, lbp, XFS_BLF_DIR_LEAFN_BUF); xfs_dir3_leaf_log_header(tp, lbp); xfs_dir3_leaf_check(mp, lbp); return 0; @@ -795,6 +804,7 @@ xfs_dir2_leafn_lookup_for_entry( (char *)curbp->b_addr); state->extrablk.magic = XFS_DIR2_DATA_MAGIC; curbp->b_ops = &xfs_dir3_data_buf_ops; + xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF); if (cmp == XFS_CMP_EXACT) return XFS_ERROR(EEXIST); } @@ -809,6 +819,7 @@ xfs_dir2_leafn_lookup_for_entry( state->extrablk.blkno = curdb; state->extrablk.magic = XFS_DIR2_DATA_MAGIC; curbp->b_ops = &xfs_dir3_data_buf_ops; + xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF); } else { /* If the curbp is not the CI match block, drop it */ if (state->extrablk.bp != curbp) diff --git a/libxfs/xfs_dir2_priv.h b/libxfs/xfs_dir2_priv.h index 932565d..7cf573c 100644 --- a/libxfs/xfs_dir2_priv.h +++ b/libxfs/xfs_dir2_priv.h @@ -49,6 +49,7 @@ extern int xfs_dir2_leaf_to_block(struct xfs_da_args *args, #endif extern const struct xfs_buf_ops xfs_dir3_data_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_free_buf_ops; extern int __xfs_dir3_data_check(struct xfs_inode *dp, struct xfs_buf *bp); extern int xfs_dir3_data_read(struct xfs_trans *tp, struct xfs_inode *dp, @@ -77,6 +78,7 @@ extern void xfs_dir2_data_use_free(struct xfs_trans *tp, struct xfs_buf *bp, xfs_dir2_data_aoff_t len, int *needlogp, int *needscanp); /* xfs_dir2_leaf.c */ +extern const struct xfs_buf_ops xfs_dir3_leaf1_buf_ops; extern const struct xfs_buf_ops xfs_dir3_leafn_buf_ops; extern int xfs_dir3_leafn_read(struct xfs_trans *tp, struct xfs_inode *dp, -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5F6CA29E15 for ; Fri, 17 May 2013 06:14:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3C2FB304059 for ; Fri, 17 May 2013 04:14:04 -0700 (PDT) X-ASG-Debug-ID: 1368789230-04cb6c53a2352200003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id uwifanZwHbyzql3Z for ; Fri, 17 May 2013 04:13:55 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhMMACUQllF5LDbs/2dsb2JhbABTCIMIwg4Eehd0gh8BAQUaAQwvMwgYMTkDGxmIC70AjWkZhHkDk2eJb4sigyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:44 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbX-0008Rq-2E for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbM-0005EY-Vd for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:32 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 12/30] xfs: add CRC checking to dir2 leaf blocks Date: Fri, 17 May 2013 21:13:07 +1000 X-ASG-Orig-Subj: [PATCH 12/30] xfs: add CRC checking to dir2 leaf blocks Message-Id: <1368789205-19969-13-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789234 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner This addition follows the same pattern as the dir2 block CRCs. Seeing as both LEAF1 and LEAFN types need to changed at the same time, this is a pretty large amount of change. leaf block headers need to be abstracted away from the on-disk structures (struct xfs_dir3_icleaf_hdr), as do the base leaf entry locations. This header abstract allows the in-core header and leaf entry location to be passed around instead of the leaf block itself. This saves a lot of converting individual variables from on-disk format to host format where they are used, so there's a good chance that the compiler will be able to produce much more optimal code as it's not having to byteswap variables all over the place. Signed-off-by: Dave Chinner --- db/check.c | 2 +- db/dir2.c | 2 +- include/xfs_da_btree.h | 23 ++ include/xfs_dir2_format.h | 60 +++- libxfs/xfs_da_btree.c | 45 ++- libxfs/xfs_dir2_block.c | 19 +- libxfs/xfs_dir2_leaf.c | 786 ++++++++++++++++++++++++++++----------------- libxfs/xfs_dir2_node.c | 475 +++++++++++++++------------ libxfs/xfs_dir2_priv.h | 32 +- repair/dir2.c | 12 +- repair/phase6.c | 14 +- 11 files changed, 938 insertions(+), 532 deletions(-) diff --git a/db/check.c b/db/check.c index f464d4a..b7855c0 100644 --- a/db/check.c +++ b/db/check.c @@ -3140,7 +3140,7 @@ process_leaf_node_dir_v2_int( error++; return; } - lep = leaf->ents; + lep = xfs_dir3_leaf_ents_p(leaf); for (i = stale = 0; i < be16_to_cpu(leaf->hdr.count); i++) { if (be32_to_cpu(lep[i].address) == XFS_DIR2_NULL_DATAPTR) stale++; diff --git a/db/dir2.c b/db/dir2.c index a539f2d..176bdab 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -80,7 +80,7 @@ const field_t dir2_flds[] = { FLD_COUNT, TYP_NONE }, { "lbests", FLDT_DIR2_DATA_OFF, dir2_leaf_bests_offset, dir2_leaf_bests_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, - { "lents", FLDT_DIR2_LEAF_ENTRY, OI(LOFF(ents)), dir2_leaf_ents_count, + { "lents", FLDT_DIR2_LEAF_ENTRY, OI(LOFF(__ents)), dir2_leaf_ents_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, { "ltail", FLDT_DIR2_LEAF_TAIL, dir2_leaf_tail_offset, dir2_leaf_tail_count, FLD_OFFSET|FLD_COUNT, TYP_NONE }, diff --git a/include/xfs_da_btree.h b/include/xfs_da_btree.h index ee5170c..0854b95 100644 --- a/include/xfs_da_btree.h +++ b/include/xfs_da_btree.h @@ -47,6 +47,29 @@ typedef struct xfs_da_blkinfo { } xfs_da_blkinfo_t; /* + * CRC enabled directory structure types + * + * The headers change size for the additional verification information, but + * otherwise the tree layouts and contents are unchanged. + */ +#define XFS_DIR3_LEAF1_MAGIC 0x3df1 /* magic number: v2 dirlf single blks */ +#define XFS_DIR3_LEAFN_MAGIC 0x3dff /* magic number: v2 dirlf multi blks */ + +struct xfs_da3_blkinfo { + /* + * the node link manipulation code relies on the fact that the first + * element of this structure is the struct xfs_da_blkinfo so it can + * ignore the differences in the rest of the structures. + */ + struct xfs_da_blkinfo hdr; + __be32 crc; /* CRC of block */ + __be64 blkno; /* first block of the buffer */ + __be64 lsn; /* sequence number of last write */ + uuid_t uuid; /* filesystem we belong to */ + __be64 owner; /* inode that owns the block */ +}; + +/* * This is the structure of the root and intermediate nodes in the Btree. * The leaf nodes are defined above. * diff --git a/include/xfs_dir2_format.h b/include/xfs_dir2_format.h index 8db394a..ce3626b 100644 --- a/include/xfs_dir2_format.h +++ b/include/xfs_dir2_format.h @@ -464,6 +464,21 @@ typedef struct xfs_dir2_leaf_hdr { __be16 stale; /* count of stale entries */ } xfs_dir2_leaf_hdr_t; +struct xfs_dir3_leaf_hdr { + struct xfs_da3_blkinfo info; /* header for da routines */ + __be16 count; /* count of entries */ + __be16 stale; /* count of stale entries */ + __be32 pad; +}; + +struct xfs_dir3_icleaf_hdr { + __uint32_t forw; + __uint32_t back; + __uint16_t magic; + __uint16_t count; + __uint16_t stale; +}; + /* * Leaf block entry. */ @@ -483,23 +498,50 @@ typedef struct xfs_dir2_leaf_tail { * Leaf block. */ typedef struct xfs_dir2_leaf { - xfs_dir2_leaf_hdr_t hdr; /* leaf header */ - xfs_dir2_leaf_entry_t ents[]; /* entries */ + xfs_dir2_leaf_hdr_t hdr; /* leaf header */ + xfs_dir2_leaf_entry_t __ents[]; /* entries */ } xfs_dir2_leaf_t; -/* - * DB blocks here are logical directory block numbers, not filesystem blocks. - */ +struct xfs_dir3_leaf { + struct xfs_dir3_leaf_hdr hdr; /* leaf header */ + struct xfs_dir2_leaf_entry __ents[]; /* entries */ +}; + +#define XFS_DIR3_LEAF_CRC_OFF offsetof(struct xfs_dir3_leaf_hdr, info.crc) + +static inline int +xfs_dir3_leaf_hdr_size(struct xfs_dir2_leaf *lp) +{ + if (lp->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC) || + lp->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)) + return sizeof(struct xfs_dir3_leaf_hdr); + return sizeof(struct xfs_dir2_leaf_hdr); +} -static inline int xfs_dir2_max_leaf_ents(struct xfs_mount *mp) +static inline int +xfs_dir3_max_leaf_ents(struct xfs_mount *mp, struct xfs_dir2_leaf *lp) { - return (mp->m_dirblksize - (uint)sizeof(struct xfs_dir2_leaf_hdr)) / + return (mp->m_dirblksize - xfs_dir3_leaf_hdr_size(lp)) / (uint)sizeof(struct xfs_dir2_leaf_entry); } /* * Get address of the bestcount field in the single-leaf block. */ +static inline struct xfs_dir2_leaf_entry * +xfs_dir3_leaf_ents_p(struct xfs_dir2_leaf *lp) +{ + if (lp->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC) || + lp->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)) { + struct xfs_dir3_leaf *lp3 = (struct xfs_dir3_leaf *)lp; + return lp3->__ents; + } + return lp->__ents; +} + +/* + * Get address of the bestcount field in the single-leaf block. + */ static inline struct xfs_dir2_leaf_tail * xfs_dir2_leaf_tail_p(struct xfs_mount *mp, struct xfs_dir2_leaf *lp) { @@ -518,6 +560,10 @@ xfs_dir2_leaf_bests_p(struct xfs_dir2_leaf_tail *ltp) } /* + * DB blocks here are logical directory block numbers, not filesystem blocks. + */ + +/* * Convert dataptr to byte in file space */ static inline xfs_dir2_off_t diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index a31d353..63cd299 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -118,7 +118,8 @@ xfs_da_node_read_verify( bp->b_ops->verify_read(bp); return; case XFS_DIR2_LEAFN_MAGIC: - bp->b_ops = &xfs_dir2_leafn_buf_ops; + case XFS_DIR3_LEAFN_MAGIC: + bp->b_ops = &xfs_dir3_leafn_buf_ops; bp->b_ops->verify_read(bp); return; default: @@ -375,11 +376,18 @@ xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, size = (int)((char *)&oldroot->btree[be16_to_cpu(oldroot->hdr.count)] - (char *)oldroot); } else { - ASSERT(oldroot->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + struct xfs_dir3_icleaf_hdr leafhdr; + struct xfs_dir2_leaf_entry *ents; + leaf = (xfs_dir2_leaf_t *)oldroot; - size = (int)((char *)&leaf->ents[be16_to_cpu(leaf->hdr.count)] - - (char *)leaf); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + + ASSERT(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || + leafhdr.magic == XFS_DIR3_LEAFN_MAGIC); + size = (int)((char *)&ents[leafhdr.count] - (char *)leaf); } + /* XXX: can't just copy CRC headers from one block to another */ memcpy(node, oldroot, size); xfs_trans_log_buf(tp, bp, 0, size - 1); @@ -403,7 +411,8 @@ xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, node->hdr.count = cpu_to_be16(2); #ifdef DEBUG - if (oldroot->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)) { + if (oldroot->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + oldroot->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)) { ASSERT(blk1->blkno >= mp->m_dirleafblk && blk1->blkno < mp->m_dirfreeblk); ASSERT(blk2->blkno >= mp->m_dirleafblk && @@ -761,6 +770,7 @@ xfs_da_blkinfo_onlychild_validate(struct xfs_da_blkinfo *blkinfo, __u16 level) if (level == 1) { ASSERT(magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC) || magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); } else ASSERT(magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); @@ -1544,6 +1554,7 @@ xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, info = blk->bp->b_addr; ASSERT(info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + info->magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC) || info->magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); blk->magic = be16_to_cpu(info->magic); if (blk->magic == XFS_DA_NODE_MAGIC) { @@ -1563,12 +1574,13 @@ xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, NULL); break; case XFS_DIR2_LEAFN_MAGIC: + case XFS_DIR3_LEAFN_MAGIC: + blk->magic = XFS_DIR2_LEAFN_MAGIC; blk->hashval = xfs_dir2_leafn_lasthash(blk->bp, NULL); break; default: - ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC || - blk->magic == XFS_DIR2_LEAFN_MAGIC); + ASSERT(0); break; } } @@ -1812,10 +1824,16 @@ xfs_da_swap_lastblock( /* * Get values from the moved block. */ - if (dead_info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)) { + if (dead_info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + dead_info->magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)) { + struct xfs_dir3_icleaf_hdr leafhdr; + struct xfs_dir2_leaf_entry *ents; + dead_leaf2 = (xfs_dir2_leaf_t *)dead_info; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, dead_leaf2); + ents = xfs_dir3_leaf_ents_p(dead_leaf2); dead_level = 0; - dead_hash = be32_to_cpu(dead_leaf2->ents[be16_to_cpu(dead_leaf2->hdr.count) - 1].hashval); + dead_hash = be32_to_cpu(ents[leafhdr.count - 1].hashval); } else { ASSERT(dead_info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); dead_node = (xfs_da_intnode_t *)dead_info; @@ -2260,10 +2278,17 @@ xfs_da_read_buf( XFS_TEST_ERROR((magic != XFS_DA_NODE_MAGIC) && (magic != XFS_ATTR_LEAF_MAGIC) && (magic != XFS_DIR2_LEAF1_MAGIC) && + (magic != XFS_DIR3_LEAF1_MAGIC) && (magic != XFS_DIR2_LEAFN_MAGIC) && + (magic != XFS_DIR3_LEAFN_MAGIC) && (magic1 != XFS_DIR2_BLOCK_MAGIC) && + (magic1 != XFS_DIR3_BLOCK_MAGIC) && (magic1 != XFS_DIR2_DATA_MAGIC) && - (free->hdr.magic != cpu_to_be32(XFS_DIR2_FREE_MAGIC)), + (magic1 != XFS_DIR3_DATA_MAGIC) && + (free->hdr.magic != + cpu_to_be32(XFS_DIR2_FREE_MAGIC)) && + (free->hdr.magic != + cpu_to_be32(XFS_DIR3_FREE_MAGIC)), mp, XFS_ERRTAG_DA_READ_BUF, XFS_RANDOM_DA_READ_BUF))) { trace_xfs_da_btree_corrupt(bp, _RET_IP_); diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c index 18eabd1..b98b749 100644 --- a/libxfs/xfs_dir2_block.c +++ b/libxfs/xfs_dir2_block.c @@ -897,6 +897,8 @@ xfs_dir2_leaf_to_block( __be16 *tagp; /* end of entry (tag) */ int to; /* block/leaf to index */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; trace_xfs_dir2_leaf_to_block(args); @@ -904,8 +906,12 @@ xfs_dir2_leaf_to_block( tp = args->trans; mp = dp->i_mount; leaf = lbp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); ltp = xfs_dir2_leaf_tail_p(mp, leaf); + + ASSERT(leafhdr.magic == XFS_DIR2_LEAF1_MAGIC || + leafhdr.magic == XFS_DIR3_LEAF1_MAGIC); /* * If there are data blocks other than the first one, take this * opportunity to remove trailing empty data blocks that may have @@ -942,7 +948,7 @@ xfs_dir2_leaf_to_block( * Size of the "leaf" area in the block. */ size = (uint)sizeof(xfs_dir2_block_tail_t) + - (uint)sizeof(*lep) * (be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale)); + (uint)sizeof(*lep) * (leafhdr.count - leafhdr.stale); /* * Look at the last data entry. */ @@ -971,18 +977,17 @@ xfs_dir2_leaf_to_block( * Initialize the block tail. */ btp = xfs_dir2_block_tail_p(mp, hdr); - btp->count = cpu_to_be32(be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale)); + btp->count = cpu_to_be32(leafhdr.count - leafhdr.stale); btp->stale = 0; xfs_dir2_block_log_tail(tp, dbp); /* * Initialize the block leaf area. We compact out stale entries. */ lep = xfs_dir2_block_leaf_p(btp); - for (from = to = 0; from < be16_to_cpu(leaf->hdr.count); from++) { - if (leaf->ents[from].address == - cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) + for (from = to = 0; from < leafhdr.count; from++) { + if (ents[from].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) continue; - lep[to++] = leaf->ents[from]; + lep[to++] = ents[from]; } ASSERT(to == be32_to_cpu(btp->count)); xfs_dir2_block_log_leaf(tp, dbp, 0, be32_to_cpu(btp->count) - 1); diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index 0f848b4..f00b23c 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -21,73 +22,257 @@ /* * Local function declarations. */ -#ifdef DEBUG -static void xfs_dir2_leaf_check(struct xfs_inode *dp, struct xfs_buf *bp); -#else -#define xfs_dir2_leaf_check(dp, bp) -#endif static int xfs_dir2_leaf_lookup_int(xfs_da_args_t *args, struct xfs_buf **lbpp, int *indexp, struct xfs_buf **dbpp); -static void xfs_dir2_leaf_log_bests(struct xfs_trans *tp, struct xfs_buf *bp, +static void xfs_dir3_leaf_log_bests(struct xfs_trans *tp, struct xfs_buf *bp, int first, int last); -static void xfs_dir2_leaf_log_tail(struct xfs_trans *tp, struct xfs_buf *bp); +static void xfs_dir3_leaf_log_tail(struct xfs_trans *tp, struct xfs_buf *bp); -static void -xfs_dir2_leaf_verify( +/* + * Check the internal consistency of a leaf1 block. + * Pop an assert if something is wrong. + */ +#ifdef DEBUG +#define xfs_dir3_leaf_check(mp, bp) \ +do { \ + if (!xfs_dir3_leaf1_check((mp), (bp))) \ + ASSERT(0); \ +} while (0); + +STATIC bool +xfs_dir3_leaf1_check( + struct xfs_mount *mp, + struct xfs_buf *bp) +{ + struct xfs_dir2_leaf *leaf = bp->b_addr; + struct xfs_dir3_icleaf_hdr leafhdr; + + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + + if (leafhdr.magic == XFS_DIR3_LEAF1_MAGIC) { + struct xfs_dir3_leaf_hdr *leaf3 = bp->b_addr; + if (be64_to_cpu(leaf3->info.blkno) != bp->b_bn) + return false; + } else if (leafhdr.magic != XFS_DIR2_LEAF1_MAGIC) + return false; + + return xfs_dir3_leaf_check_int(mp, &leafhdr, leaf); +} +#else +#define xfs_dir3_leaf_check(mp, bp) +#endif + +void +xfs_dir3_leaf_hdr_from_disk( + struct xfs_dir3_icleaf_hdr *to, + struct xfs_dir2_leaf *from) +{ + if (from->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || + from->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)) { + to->forw = be32_to_cpu(from->hdr.info.forw); + to->back = be32_to_cpu(from->hdr.info.back); + to->magic = be16_to_cpu(from->hdr.info.magic); + to->count = be16_to_cpu(from->hdr.count); + to->stale = be16_to_cpu(from->hdr.stale); + } else { + struct xfs_dir3_leaf_hdr *hdr3 = (struct xfs_dir3_leaf_hdr *)from; + + to->forw = be32_to_cpu(hdr3->info.hdr.forw); + to->back = be32_to_cpu(hdr3->info.hdr.back); + to->magic = be16_to_cpu(hdr3->info.hdr.magic); + to->count = be16_to_cpu(hdr3->count); + to->stale = be16_to_cpu(hdr3->stale); + } + + ASSERT(to->magic == XFS_DIR2_LEAF1_MAGIC || + to->magic == XFS_DIR3_LEAF1_MAGIC || + to->magic == XFS_DIR2_LEAFN_MAGIC || + to->magic == XFS_DIR3_LEAFN_MAGIC); +} + +void +xfs_dir3_leaf_hdr_to_disk( + struct xfs_dir2_leaf *to, + struct xfs_dir3_icleaf_hdr *from) +{ + ASSERT(from->magic == XFS_DIR2_LEAF1_MAGIC || + from->magic == XFS_DIR3_LEAF1_MAGIC || + from->magic == XFS_DIR2_LEAFN_MAGIC || + from->magic == XFS_DIR3_LEAFN_MAGIC); + + if (from->magic == XFS_DIR2_LEAF1_MAGIC || + from->magic == XFS_DIR2_LEAFN_MAGIC) { + to->hdr.info.forw = cpu_to_be32(from->forw); + to->hdr.info.back = cpu_to_be32(from->back); + to->hdr.info.magic = cpu_to_be16(from->magic); + to->hdr.count = cpu_to_be16(from->count); + to->hdr.stale = cpu_to_be16(from->stale); + } else { + struct xfs_dir3_leaf_hdr *hdr3 = (struct xfs_dir3_leaf_hdr *)to; + + hdr3->info.hdr.forw = cpu_to_be32(from->forw); + hdr3->info.hdr.back = cpu_to_be32(from->back); + hdr3->info.hdr.magic = cpu_to_be16(from->magic); + hdr3->count = cpu_to_be16(from->count); + hdr3->stale = cpu_to_be16(from->stale); + } +} + +bool +xfs_dir3_leaf_check_int( + struct xfs_mount *mp, + struct xfs_dir3_icleaf_hdr *hdr, + struct xfs_dir2_leaf *leaf) +{ + struct xfs_dir2_leaf_entry *ents; + xfs_dir2_leaf_tail_t *ltp; + int stale; + int i; + + ents = xfs_dir3_leaf_ents_p(leaf); + ltp = xfs_dir2_leaf_tail_p(mp, leaf); + + /* + * XXX (dgc): This value is not restrictive enough. + * Should factor in the size of the bests table as well. + * We can deduce a value for that from di_size. + */ + if (hdr->count > xfs_dir3_max_leaf_ents(mp, leaf)) + return false; + + /* Leaves and bests don't overlap in leaf format. */ + if ((hdr->magic == XFS_DIR2_LEAF1_MAGIC || + hdr->magic == XFS_DIR3_LEAF1_MAGIC) && + (char *)&ents[hdr->count] > (char *)xfs_dir2_leaf_bests_p(ltp)) + return false; + + /* Check hash value order, count stale entries. */ + for (i = stale = 0; i < hdr->count; i++) { + if (i + 1 < hdr->count) { + if (be32_to_cpu(ents[i].hashval) > + be32_to_cpu(ents[i + 1].hashval)) + return false; + } + if (ents[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) + stale++; + } + if (hdr->stale != stale) + return false; + return true; +} + +static bool +xfs_dir3_leaf_verify( struct xfs_buf *bp, - __be16 magic) + __uint16_t magic) { struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_dir2_leaf_hdr *hdr = bp->b_addr; - int block_ok = 0; + struct xfs_dir2_leaf *leaf = bp->b_addr; + struct xfs_dir3_icleaf_hdr leafhdr; + + ASSERT(magic == XFS_DIR2_LEAF1_MAGIC || magic == XFS_DIR2_LEAFN_MAGIC); + + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_dir3_leaf_hdr *leaf3 = bp->b_addr; - block_ok = hdr->info.magic == magic; - if (!block_ok) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); + if ((magic == XFS_DIR2_LEAF1_MAGIC && + leafhdr.magic != XFS_DIR3_LEAF1_MAGIC) || + (magic == XFS_DIR2_LEAFN_MAGIC && + leafhdr.magic != XFS_DIR3_LEAFN_MAGIC)) + return false; + + if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_uuid)) + return false; + if (be64_to_cpu(leaf3->info.blkno) != bp->b_bn) + return false; + } else { + if (leafhdr.magic != magic) + return false; + } + return xfs_dir3_leaf_check_int(mp, &leafhdr, leaf); +} + +static void +__read_verify( + struct xfs_buf *bp, + __uint16_t magic) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + + if ((xfs_sb_version_hascrc(&mp->m_sb) && + !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_DIR3_LEAF_CRC_OFF)) || + !xfs_dir3_leaf_verify(bp, magic)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); xfs_buf_ioerror(bp, EFSCORRUPTED); } } static void -xfs_dir2_leaf1_read_verify( +__write_verify( + struct xfs_buf *bp, + __uint16_t magic) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + struct xfs_dir3_leaf_hdr *hdr3 = bp->b_addr; + + if (!xfs_dir3_leaf_verify(bp, magic)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + hdr3->info.lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DIR3_LEAF_CRC_OFF); +} + +static void +xfs_dir3_leaf1_read_verify( struct xfs_buf *bp) { - xfs_dir2_leaf_verify(bp, cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)); + __read_verify(bp, XFS_DIR2_LEAF1_MAGIC); } static void -xfs_dir2_leaf1_write_verify( +xfs_dir3_leaf1_write_verify( struct xfs_buf *bp) { - xfs_dir2_leaf_verify(bp, cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)); + __write_verify(bp, XFS_DIR2_LEAF1_MAGIC); } void -xfs_dir2_leafn_read_verify( +xfs_dir3_leafn_read_verify( struct xfs_buf *bp) { - xfs_dir2_leaf_verify(bp, cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + __read_verify(bp, XFS_DIR2_LEAFN_MAGIC); } void -xfs_dir2_leafn_write_verify( +xfs_dir3_leafn_write_verify( struct xfs_buf *bp) { - xfs_dir2_leaf_verify(bp, cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + __write_verify(bp, XFS_DIR2_LEAFN_MAGIC); } -static const struct xfs_buf_ops xfs_dir2_leaf1_buf_ops = { - .verify_read = xfs_dir2_leaf1_read_verify, - .verify_write = xfs_dir2_leaf1_write_verify, +const struct xfs_buf_ops xfs_dir3_leaf1_buf_ops = { + .verify_read = xfs_dir3_leaf1_read_verify, + .verify_write = xfs_dir3_leaf1_write_verify, }; -const struct xfs_buf_ops xfs_dir2_leafn_buf_ops = { - .verify_read = xfs_dir2_leafn_read_verify, - .verify_write = xfs_dir2_leafn_write_verify, +const struct xfs_buf_ops xfs_dir3_leafn_buf_ops = { + .verify_read = xfs_dir3_leafn_read_verify, + .verify_write = xfs_dir3_leafn_write_verify, }; static int -xfs_dir2_leaf_read( +xfs_dir3_leaf_read( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t fbno, @@ -95,11 +280,11 @@ xfs_dir2_leaf_read( struct xfs_buf **bpp) { return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, - XFS_DATA_FORK, &xfs_dir2_leaf1_buf_ops); + XFS_DATA_FORK, &xfs_dir3_leaf1_buf_ops); } int -xfs_dir2_leafn_read( +xfs_dir3_leafn_read( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t fbno, @@ -107,7 +292,81 @@ xfs_dir2_leafn_read( struct xfs_buf **bpp) { return xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, - XFS_DATA_FORK, &xfs_dir2_leafn_buf_ops); + XFS_DATA_FORK, &xfs_dir3_leafn_buf_ops); +} + +/* + * Initialize a new leaf block, leaf1 or leafn magic accepted. + */ +static void +xfs_dir3_leaf_init( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_ino_t owner, + __uint16_t type) +{ + struct xfs_dir2_leaf *leaf = bp->b_addr; + + ASSERT(type == XFS_DIR2_LEAF1_MAGIC || type == XFS_DIR2_LEAFN_MAGIC); + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_dir3_leaf_hdr *leaf3 = bp->b_addr; + + memset(leaf3, 0, sizeof(*leaf3)); + + leaf3->info.hdr.magic = (type == XFS_DIR2_LEAF1_MAGIC) + ? cpu_to_be16(XFS_DIR3_LEAF1_MAGIC) + : cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); + leaf3->info.blkno = cpu_to_be64(bp->b_bn); + leaf3->info.owner = cpu_to_be64(owner); + uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_uuid); + } else { + memset(leaf, 0, sizeof(*leaf)); + leaf->hdr.info.magic = cpu_to_be16(type); + } + + /* + * If it's a leaf-format directory initialize the tail. + * Caller is responsible for initialising the bests table. + */ + if (type == XFS_DIR2_LEAF1_MAGIC) { + struct xfs_dir2_leaf_tail *ltp; + + ltp = xfs_dir2_leaf_tail_p(mp, leaf); + ltp->bestcount = 0; + bp->b_ops = &xfs_dir3_leaf1_buf_ops; + } else + bp->b_ops = &xfs_dir3_leafn_buf_ops; +} + +int +xfs_dir3_leaf_get_buf( + xfs_da_args_t *args, + xfs_dir2_db_t bno, + struct xfs_buf **bpp, + __uint16_t magic) +{ + struct xfs_inode *dp = args->dp; + struct xfs_trans *tp = args->trans; + struct xfs_mount *mp = dp->i_mount; + struct xfs_buf *bp; + int error; + + ASSERT(magic == XFS_DIR2_LEAF1_MAGIC || magic == XFS_DIR2_LEAFN_MAGIC); + ASSERT(bno >= XFS_DIR2_LEAF_FIRSTDB(mp) && + bno < XFS_DIR2_FREE_FIRSTDB(mp)); + + error = xfs_da_get_buf(tp, dp, xfs_dir2_db_to_da(mp, bno), -1, &bp, + XFS_DATA_FORK); + if (error) + return error; + + xfs_dir3_leaf_init(mp, bp, dp->i_ino, magic); + xfs_dir3_leaf_log_header(tp, bp); + if (magic == XFS_DIR2_LEAF1_MAGIC) + xfs_dir3_leaf_log_tail(tp, bp); + *bpp = bp; + return 0; } /* @@ -134,6 +393,8 @@ xfs_dir2_block_to_leaf( int needscan; /* need to rescan bestfree */ xfs_trans_t *tp; /* transaction pointer */ struct xfs_dir2_data_free *bf; + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; trace_xfs_dir2_block_to_leaf(args); @@ -153,27 +414,33 @@ xfs_dir2_block_to_leaf( /* * Initialize the leaf block, get a buffer for it. */ - if ((error = xfs_dir2_leaf_init(args, ldb, &lbp, XFS_DIR2_LEAF1_MAGIC))) { + error = xfs_dir3_leaf_get_buf(args, ldb, &lbp, XFS_DIR2_LEAF1_MAGIC); + if (error) return error; - } - ASSERT(lbp != NULL); + leaf = lbp->b_addr; hdr = dbp->b_addr; xfs_dir3_data_check(dp, dbp); btp = xfs_dir2_block_tail_p(mp, hdr); blp = xfs_dir2_block_leaf_p(btp); bf = xfs_dir3_data_bestfree_p(hdr); + ents = xfs_dir3_leaf_ents_p(leaf); + /* * Set the counts in the leaf header. */ - leaf->hdr.count = cpu_to_be16(be32_to_cpu(btp->count)); - leaf->hdr.stale = cpu_to_be16(be32_to_cpu(btp->stale)); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + leafhdr.count = be32_to_cpu(btp->count); + leafhdr.stale = be32_to_cpu(btp->stale); + xfs_dir3_leaf_hdr_to_disk(leaf, &leafhdr); + xfs_dir3_leaf_log_header(tp, lbp); + /* * Could compact these but I think we always do the conversion * after squeezing out stale entries. */ - memcpy(leaf->ents, blp, be32_to_cpu(btp->count) * sizeof(xfs_dir2_leaf_entry_t)); - xfs_dir2_leaf_log_ents(tp, lbp, 0, be16_to_cpu(leaf->hdr.count) - 1); + memcpy(ents, blp, be32_to_cpu(btp->count) * sizeof(xfs_dir2_leaf_entry_t)); + xfs_dir3_leaf_log_ents(tp, lbp, 0, leafhdr.count - 1); needscan = 0; needlog = 1; /* @@ -208,15 +475,16 @@ xfs_dir2_block_to_leaf( */ if (needlog) xfs_dir2_data_log_header(tp, dbp); - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_check(mp, lbp); xfs_dir3_data_check(dp, dbp); - xfs_dir2_leaf_log_bests(tp, lbp, 0, 0); + xfs_dir3_leaf_log_bests(tp, lbp, 0, 0); return 0; } STATIC void -xfs_dir2_leaf_find_stale( - struct xfs_dir2_leaf *leaf, +xfs_dir3_leaf_find_stale( + struct xfs_dir3_icleaf_hdr *leafhdr, + struct xfs_dir2_leaf_entry *ents, int index, int *lowstale, int *highstale) @@ -225,7 +493,7 @@ xfs_dir2_leaf_find_stale( * Find the first stale entry before our index, if any. */ for (*lowstale = index - 1; *lowstale >= 0; --*lowstale) { - if (leaf->ents[*lowstale].address == + if (ents[*lowstale].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) break; } @@ -235,10 +503,8 @@ xfs_dir2_leaf_find_stale( * Stop if the result would require moving more entries than using * lowstale. */ - for (*highstale = index; - *highstale < be16_to_cpu(leaf->hdr.count); - ++*highstale) { - if (leaf->ents[*highstale].address == + for (*highstale = index; *highstale < leafhdr->count; ++*highstale) { + if (ents[*highstale].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) break; if (*lowstale >= 0 && index - *lowstale <= *highstale - index) @@ -247,8 +513,9 @@ xfs_dir2_leaf_find_stale( } struct xfs_dir2_leaf_entry * -xfs_dir2_leaf_find_entry( - xfs_dir2_leaf_t *leaf, /* leaf structure */ +xfs_dir3_leaf_find_entry( + struct xfs_dir3_icleaf_hdr *leafhdr, + struct xfs_dir2_leaf_entry *ents, int index, /* leaf table position */ int compact, /* need to compact leaves */ int lowstale, /* index of prev stale leaf */ @@ -256,7 +523,7 @@ xfs_dir2_leaf_find_entry( int *lfloglow, /* low leaf logging index */ int *lfloghigh) /* high leaf logging index */ { - if (!leaf->hdr.stale) { + if (!leafhdr->stale) { xfs_dir2_leaf_entry_t *lep; /* leaf entry table pointer */ /* @@ -264,18 +531,16 @@ xfs_dir2_leaf_find_entry( * * If there are no stale entries, just insert a hole at index. */ - lep = &leaf->ents[index]; - if (index < be16_to_cpu(leaf->hdr.count)) + lep = &ents[index]; + if (index < leafhdr->count) memmove(lep + 1, lep, - (be16_to_cpu(leaf->hdr.count) - index) * - sizeof(*lep)); + (leafhdr->count - index) * sizeof(*lep)); /* * Record low and high logging indices for the leaf. */ *lfloglow = index; - *lfloghigh = be16_to_cpu(leaf->hdr.count); - be16_add_cpu(&leaf->hdr.count, 1); + *lfloghigh = leafhdr->count++; return lep; } @@ -289,16 +554,17 @@ xfs_dir2_leaf_find_entry( * entries before and after our insertion point. */ if (compact == 0) - xfs_dir2_leaf_find_stale(leaf, index, &lowstale, &highstale); + xfs_dir3_leaf_find_stale(leafhdr, ents, index, + &lowstale, &highstale); /* * If the low one is better, use it. */ if (lowstale >= 0 && - (highstale == be16_to_cpu(leaf->hdr.count) || + (highstale == leafhdr->count || index - lowstale - 1 < highstale - index)) { ASSERT(index - lowstale - 1 >= 0); - ASSERT(leaf->ents[lowstale].address == + ASSERT(ents[lowstale].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)); /* @@ -306,37 +572,34 @@ xfs_dir2_leaf_find_entry( * for the new entry. */ if (index - lowstale - 1 > 0) { - memmove(&leaf->ents[lowstale], - &leaf->ents[lowstale + 1], + memmove(&ents[lowstale], &ents[lowstale + 1], (index - lowstale - 1) * - sizeof(xfs_dir2_leaf_entry_t)); + sizeof(xfs_dir2_leaf_entry_t)); } *lfloglow = MIN(lowstale, *lfloglow); *lfloghigh = MAX(index - 1, *lfloghigh); - be16_add_cpu(&leaf->hdr.stale, -1); - return &leaf->ents[index - 1]; + leafhdr->stale--; + return &ents[index - 1]; } /* * The high one is better, so use that one. */ ASSERT(highstale - index >= 0); - ASSERT(leaf->ents[highstale].address == - cpu_to_be32(XFS_DIR2_NULL_DATAPTR)); + ASSERT(ents[highstale].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)); /* * Copy entries down to cover the stale entry and make room for the * new entry. */ if (highstale - index > 0) { - memmove(&leaf->ents[index + 1], - &leaf->ents[index], + memmove(&ents[index + 1], &ents[index], (highstale - index) * sizeof(xfs_dir2_leaf_entry_t)); } *lfloglow = MIN(index, *lfloglow); *lfloghigh = MAX(highstale, *lfloghigh); - be16_add_cpu(&leaf->hdr.stale, -1); - return &leaf->ents[index]; + leafhdr->stale--; + return &ents[index]; } /* @@ -374,6 +637,8 @@ xfs_dir2_leaf_addname( xfs_trans_t *tp; /* transaction pointer */ xfs_dir2_db_t use_block; /* data block number */ struct xfs_dir2_data_free *bf; /* bestfree table */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; trace_xfs_dir2_leaf_addname(args); @@ -381,7 +646,7 @@ xfs_dir2_leaf_addname( tp = args->trans; mp = dp->i_mount; - error = xfs_dir2_leaf_read(tp, dp, mp->m_dirleafblk, -1, &lbp); + error = xfs_dir3_leaf_read(tp, dp, mp->m_dirleafblk, -1, &lbp); if (error) return error; @@ -394,16 +659,19 @@ xfs_dir2_leaf_addname( index = xfs_dir2_leaf_search_hash(args, lbp); leaf = lbp->b_addr; ltp = xfs_dir2_leaf_tail_p(mp, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); bestsp = xfs_dir2_leaf_bests_p(ltp); length = xfs_dir2_data_entsize(args->namelen); + /* * See if there are any entries with the same hash value * and space in their block for the new entry. * This is good because it puts multiple same-hash value entries * in a data block, improving the lookup of those entries. */ - for (use_block = -1, lep = &leaf->ents[index]; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) == args->hashval; + for (use_block = -1, lep = &ents[index]; + index < leafhdr.count && be32_to_cpu(lep->hashval) == args->hashval; index++, lep++) { if (be32_to_cpu(lep->address) == XFS_DIR2_NULL_DATAPTR) continue; @@ -436,7 +704,7 @@ xfs_dir2_leaf_addname( * How many bytes do we need in the leaf block? */ needbytes = 0; - if (!leaf->hdr.stale) + if (!leafhdr.stale) needbytes += sizeof(xfs_dir2_leaf_entry_t); if (use_block == -1) needbytes += sizeof(xfs_dir2_data_off_t); @@ -451,16 +719,15 @@ xfs_dir2_leaf_addname( * If we don't have enough free bytes but we can make enough * by compacting out stale entries, we'll do that. */ - if ((char *)bestsp - (char *)&leaf->ents[be16_to_cpu(leaf->hdr.count)] < - needbytes && be16_to_cpu(leaf->hdr.stale) > 1) { + if ((char *)bestsp - (char *)&ents[leafhdr.count] < needbytes && + leafhdr.stale > 1) compact = 1; - } + /* * Otherwise if we don't have enough free bytes we need to * convert to node form. */ - else if ((char *)bestsp - (char *)&leaf->ents[be16_to_cpu( - leaf->hdr.count)] < needbytes) { + else if ((char *)bestsp - (char *)&ents[leafhdr.count] < needbytes) { /* * Just checking or no space reservation, give up. */ @@ -508,15 +775,15 @@ xfs_dir2_leaf_addname( * point later. */ if (compact) { - xfs_dir2_leaf_compact_x1(lbp, &index, &lowstale, &highstale, - &lfloglow, &lfloghigh); + xfs_dir3_leaf_compact_x1(&leafhdr, ents, &index, &lowstale, + &highstale, &lfloglow, &lfloghigh); } /* * There are stale entries, so we'll need log-low and log-high * impossibly bad values later. */ - else if (be16_to_cpu(leaf->hdr.stale)) { - lfloglow = be16_to_cpu(leaf->hdr.count); + else if (leafhdr.stale) { + lfloglow = leafhdr.count; lfloghigh = -1; } /* @@ -548,14 +815,14 @@ xfs_dir2_leaf_addname( memmove(&bestsp[0], &bestsp[1], be32_to_cpu(ltp->bestcount) * sizeof(bestsp[0])); be32_add_cpu(<p->bestcount, 1); - xfs_dir2_leaf_log_tail(tp, lbp); - xfs_dir2_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); + xfs_dir3_leaf_log_tail(tp, lbp); + xfs_dir3_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); } /* * If we're filling in a previously empty block just log it. */ else - xfs_dir2_leaf_log_bests(tp, lbp, use_block, use_block); + xfs_dir3_leaf_log_bests(tp, lbp, use_block, use_block); hdr = dbp->b_addr; bf = xfs_dir3_data_bestfree_p(hdr); bestsp[use_block] = bf[0].length; @@ -616,10 +883,10 @@ xfs_dir2_leaf_addname( if (be16_to_cpu(bestsp[use_block]) != be16_to_cpu(bf[0].length)) { bestsp[use_block] = bf[0].length; if (!grown) - xfs_dir2_leaf_log_bests(tp, lbp, use_block, use_block); + xfs_dir3_leaf_log_bests(tp, lbp, use_block, use_block); } - lep = xfs_dir2_leaf_find_entry(leaf, index, compact, lowstale, + lep = xfs_dir3_leaf_find_entry(&leafhdr, ents, index, compact, lowstale, highstale, &lfloglow, &lfloghigh); /* @@ -631,82 +898,40 @@ xfs_dir2_leaf_addname( /* * Log the leaf fields and give up the buffers. */ - xfs_dir2_leaf_log_header(tp, lbp); - xfs_dir2_leaf_log_ents(tp, lbp, lfloglow, lfloghigh); - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_hdr_to_disk(leaf, &leafhdr); + xfs_dir3_leaf_log_header(tp, lbp); + xfs_dir3_leaf_log_ents(tp, lbp, lfloglow, lfloghigh); + xfs_dir3_leaf_check(mp, lbp); xfs_dir3_data_check(dp, dbp); return 0; } -#ifdef DEBUG -/* - * Check the internal consistency of a leaf1 block. - * Pop an assert if something is wrong. - */ -STATIC void -xfs_dir2_leaf_check( - struct xfs_inode *dp, /* incore directory inode */ - struct xfs_buf *bp) /* leaf's buffer */ -{ - int i; /* leaf index */ - xfs_dir2_leaf_t *leaf; /* leaf structure */ - xfs_dir2_leaf_tail_t *ltp; /* leaf tail pointer */ - xfs_mount_t *mp; /* filesystem mount point */ - int stale; /* count of stale leaves */ - - leaf = bp->b_addr; - mp = dp->i_mount; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)); - /* - * This value is not restrictive enough. - * Should factor in the size of the bests table as well. - * We can deduce a value for that from di_size. - */ - ASSERT(be16_to_cpu(leaf->hdr.count) <= xfs_dir2_max_leaf_ents(mp)); - ltp = xfs_dir2_leaf_tail_p(mp, leaf); - /* - * Leaves and bests don't overlap. - */ - ASSERT((char *)&leaf->ents[be16_to_cpu(leaf->hdr.count)] <= - (char *)xfs_dir2_leaf_bests_p(ltp)); - /* - * Check hash value order, count stale entries. - */ - for (i = stale = 0; i < be16_to_cpu(leaf->hdr.count); i++) { - if (i + 1 < be16_to_cpu(leaf->hdr.count)) - ASSERT(be32_to_cpu(leaf->ents[i].hashval) <= - be32_to_cpu(leaf->ents[i + 1].hashval)); - if (leaf->ents[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) - stale++; - } - ASSERT(be16_to_cpu(leaf->hdr.stale) == stale); -} -#endif /* DEBUG */ - /* * Compact out any stale entries in the leaf. * Log the header and changed leaf entries, if any. */ void -xfs_dir2_leaf_compact( +xfs_dir3_leaf_compact( xfs_da_args_t *args, /* operation arguments */ + struct xfs_dir3_icleaf_hdr *leafhdr, struct xfs_buf *bp) /* leaf buffer */ { int from; /* source leaf index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ int loglow; /* first leaf entry to log */ int to; /* target leaf index */ + struct xfs_dir2_leaf_entry *ents; leaf = bp->b_addr; - if (!leaf->hdr.stale) { + if (!leafhdr->stale) return; - } + /* * Compress out the stale entries in place. */ - for (from = to = 0, loglow = -1; from < be16_to_cpu(leaf->hdr.count); from++) { - if (leaf->ents[from].address == - cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) + ents = xfs_dir3_leaf_ents_p(leaf); + for (from = to = 0, loglow = -1; from < leafhdr->count; from++) { + if (ents[from].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) continue; /* * Only actually copy the entries that are different. @@ -714,19 +939,21 @@ xfs_dir2_leaf_compact( if (from > to) { if (loglow == -1) loglow = to; - leaf->ents[to] = leaf->ents[from]; + ents[to] = ents[from]; } to++; } /* * Update and log the header, log the leaf entries. */ - ASSERT(be16_to_cpu(leaf->hdr.stale) == from - to); - be16_add_cpu(&leaf->hdr.count, -(be16_to_cpu(leaf->hdr.stale))); - leaf->hdr.stale = 0; - xfs_dir2_leaf_log_header(args->trans, bp); + ASSERT(leafhdr->stale == from - to); + leafhdr->count -= leafhdr->stale; + leafhdr->stale = 0; + + xfs_dir3_leaf_hdr_to_disk(leaf, leafhdr); + xfs_dir3_leaf_log_header(args->trans, bp); if (loglow != -1) - xfs_dir2_leaf_log_ents(args->trans, bp, loglow, to - 1); + xfs_dir3_leaf_log_ents(args->trans, bp, loglow, to - 1); } /* @@ -738,8 +965,9 @@ xfs_dir2_leaf_compact( * and leaf logging indices. */ void -xfs_dir2_leaf_compact_x1( - struct xfs_buf *bp, /* leaf buffer */ +xfs_dir3_leaf_compact_x1( + struct xfs_dir3_icleaf_hdr *leafhdr, + struct xfs_dir2_leaf_entry *ents, int *indexp, /* insertion index */ int *lowstalep, /* out: stale entry before us */ int *highstalep, /* out: stale entry after us */ @@ -750,22 +978,20 @@ xfs_dir2_leaf_compact_x1( int highstale; /* stale entry at/after index */ int index; /* insertion index */ int keepstale; /* source index of kept stale */ - xfs_dir2_leaf_t *leaf; /* leaf structure */ int lowstale; /* stale entry before index */ int newindex=0; /* new insertion index */ int to; /* destination copy index */ - leaf = bp->b_addr; - ASSERT(be16_to_cpu(leaf->hdr.stale) > 1); + ASSERT(leafhdr->stale > 1); index = *indexp; - xfs_dir2_leaf_find_stale(leaf, index, &lowstale, &highstale); + xfs_dir3_leaf_find_stale(leafhdr, ents, index, &lowstale, &highstale); /* * Pick the better of lowstale and highstale. */ if (lowstale >= 0 && - (highstale == be16_to_cpu(leaf->hdr.count) || + (highstale == leafhdr->count || index - lowstale <= highstale - index)) keepstale = lowstale; else @@ -774,15 +1000,14 @@ xfs_dir2_leaf_compact_x1( * Copy the entries in place, removing all the stale entries * except keepstale. */ - for (from = to = 0; from < be16_to_cpu(leaf->hdr.count); from++) { + for (from = to = 0; from < leafhdr->count; from++) { /* * Notice the new value of index. */ if (index == from) newindex = to; if (from != keepstale && - leaf->ents[from].address == - cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) { + ents[from].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) { if (from == to) *lowlogp = to; continue; @@ -796,7 +1021,7 @@ xfs_dir2_leaf_compact_x1( * Copy only the entries that have moved. */ if (from > to) - leaf->ents[to] = leaf->ents[from]; + ents[to] = ents[from]; to++; } ASSERT(from > to); @@ -810,8 +1035,8 @@ xfs_dir2_leaf_compact_x1( /* * Adjust the leaf header values. */ - be16_add_cpu(&leaf->hdr.count, -(from - to)); - leaf->hdr.stale = cpu_to_be16(1); + leafhdr->count -= from - to; + leafhdr->stale = 1; /* * Remember the low/high stale value only in the "right" * direction. @@ -819,75 +1044,18 @@ xfs_dir2_leaf_compact_x1( if (lowstale >= newindex) lowstale = -1; else - highstale = be16_to_cpu(leaf->hdr.count); - *highlogp = be16_to_cpu(leaf->hdr.count) - 1; + highstale = leafhdr->count; + *highlogp = leafhdr->count - 1; *lowstalep = lowstale; *highstalep = highstale; } -/* - * Initialize a new leaf block, leaf1 or leafn magic accepted. - */ -int -xfs_dir2_leaf_init( - xfs_da_args_t *args, /* operation arguments */ - xfs_dir2_db_t bno, /* directory block number */ - struct xfs_buf **bpp, /* out: leaf buffer */ - int magic) /* magic number for block */ -{ - struct xfs_buf *bp; /* leaf buffer */ - xfs_inode_t *dp; /* incore directory inode */ - int error; /* error return code */ - xfs_dir2_leaf_t *leaf; /* leaf structure */ - xfs_dir2_leaf_tail_t *ltp; /* leaf tail structure */ - xfs_mount_t *mp; /* filesystem mount point */ - xfs_trans_t *tp; /* transaction pointer */ - - dp = args->dp; - ASSERT(dp != NULL); - tp = args->trans; - mp = dp->i_mount; - ASSERT(bno >= XFS_DIR2_LEAF_FIRSTDB(mp) && - bno < XFS_DIR2_FREE_FIRSTDB(mp)); - /* - * Get the buffer for the block. - */ - error = xfs_da_get_buf(tp, dp, xfs_dir2_db_to_da(mp, bno), -1, &bp, - XFS_DATA_FORK); - if (error) - return error; - - /* - * Initialize the header. - */ - leaf = bp->b_addr; - leaf->hdr.info.magic = cpu_to_be16(magic); - leaf->hdr.info.forw = 0; - leaf->hdr.info.back = 0; - leaf->hdr.count = 0; - leaf->hdr.stale = 0; - xfs_dir2_leaf_log_header(tp, bp); - /* - * If it's a leaf-format directory initialize the tail. - * In this case our caller has the real bests table to copy into - * the block. - */ - if (magic == XFS_DIR2_LEAF1_MAGIC) { - bp->b_ops = &xfs_dir2_leaf1_buf_ops; - ltp = xfs_dir2_leaf_tail_p(mp, leaf); - ltp->bestcount = 0; - xfs_dir2_leaf_log_tail(tp, bp); - } else - bp->b_ops = &xfs_dir2_leafn_buf_ops; - *bpp = bp; - return 0; -} /* * Log the bests entries indicated from a leaf1 block. */ static void -xfs_dir2_leaf_log_bests( +xfs_dir3_leaf_log_bests( xfs_trans_t *tp, /* transaction pointer */ struct xfs_buf *bp, /* leaf buffer */ int first, /* first entry to log */ @@ -895,11 +1063,12 @@ xfs_dir2_leaf_log_bests( { __be16 *firstb; /* pointer to first entry */ __be16 *lastb; /* pointer to last entry */ - xfs_dir2_leaf_t *leaf; /* leaf structure */ + struct xfs_dir2_leaf *leaf = bp->b_addr; xfs_dir2_leaf_tail_t *ltp; /* leaf tail structure */ - leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)); + ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC)); + ltp = xfs_dir2_leaf_tail_p(tp->t_mountp, leaf); firstb = xfs_dir2_leaf_bests_p(ltp) + first; lastb = xfs_dir2_leaf_bests_p(ltp) + last; @@ -911,7 +1080,7 @@ xfs_dir2_leaf_log_bests( * Log the leaf entries indicated from a leaf1 or leafn block. */ void -xfs_dir2_leaf_log_ents( +xfs_dir3_leaf_log_ents( xfs_trans_t *tp, /* transaction pointer */ struct xfs_buf *bp, /* leaf buffer */ int first, /* first entry to log */ @@ -919,13 +1088,17 @@ xfs_dir2_leaf_log_ents( { xfs_dir2_leaf_entry_t *firstlep; /* pointer to first entry */ xfs_dir2_leaf_entry_t *lastlep; /* pointer to last entry */ - xfs_dir2_leaf_t *leaf; /* leaf structure */ + struct xfs_dir2_leaf *leaf = bp->b_addr; + struct xfs_dir2_leaf_entry *ents; - leaf = bp->b_addr; ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || - leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - firstlep = &leaf->ents[first]; - lastlep = &leaf->ents[last]; + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)); + + ents = xfs_dir3_leaf_ents_p(leaf); + firstlep = &ents[first]; + lastlep = &ents[last]; xfs_trans_log_buf(tp, bp, (uint)((char *)firstlep - (char *)leaf), (uint)((char *)lastlep - (char *)leaf + sizeof(*lastlep) - 1)); } @@ -934,34 +1107,38 @@ xfs_dir2_leaf_log_ents( * Log the header of the leaf1 or leafn block. */ void -xfs_dir2_leaf_log_header( +xfs_dir3_leaf_log_header( struct xfs_trans *tp, struct xfs_buf *bp) { - xfs_dir2_leaf_t *leaf; /* leaf structure */ + struct xfs_dir2_leaf *leaf = bp->b_addr; - leaf = bp->b_addr; ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || - leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)); + xfs_trans_log_buf(tp, bp, (uint)((char *)&leaf->hdr - (char *)leaf), - (uint)(sizeof(leaf->hdr) - 1)); + xfs_dir3_leaf_hdr_size(leaf) - 1); } /* * Log the tail of the leaf1 block. */ STATIC void -xfs_dir2_leaf_log_tail( +xfs_dir3_leaf_log_tail( struct xfs_trans *tp, struct xfs_buf *bp) { - xfs_dir2_leaf_t *leaf; /* leaf structure */ + struct xfs_dir2_leaf *leaf = bp->b_addr; xfs_dir2_leaf_tail_t *ltp; /* leaf tail structure */ - xfs_mount_t *mp; /* filesystem mount point */ + struct xfs_mount *mp = tp->t_mountp; + + ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || + leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)); - mp = tp->t_mountp; - leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)); ltp = xfs_dir2_leaf_tail_p(mp, leaf); xfs_trans_log_buf(tp, bp, (uint)((char *)ltp - (char *)leaf), (uint)(mp->m_dirblksize - 1)); @@ -985,6 +1162,7 @@ xfs_dir2_leaf_lookup( xfs_dir2_leaf_t *leaf; /* leaf structure */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_leaf_entry *ents; trace_xfs_dir2_leaf_lookup(args); @@ -996,12 +1174,14 @@ xfs_dir2_leaf_lookup( } tp = args->trans; dp = args->dp; - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_check(dp->i_mount, lbp); leaf = lbp->b_addr; + ents = xfs_dir3_leaf_ents_p(leaf); /* * Get to the leaf entry and contained data entry address. */ - lep = &leaf->ents[index]; + lep = &ents[index]; + /* * Point to the data entry. */ @@ -1045,18 +1225,23 @@ xfs_dir2_leaf_lookup_int( xfs_trans_t *tp; /* transaction pointer */ xfs_dir2_db_t cidb = -1; /* case match data block no. */ enum xfs_dacmp cmp; /* name compare result */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; dp = args->dp; tp = args->trans; mp = dp->i_mount; - error = xfs_dir2_leaf_read(tp, dp, mp->m_dirleafblk, -1, &lbp); + error = xfs_dir3_leaf_read(tp, dp, mp->m_dirleafblk, -1, &lbp); if (error) return error; *lbpp = lbp; leaf = lbp->b_addr; - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_check(mp, lbp); + ents = xfs_dir3_leaf_ents_p(leaf); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + /* * Look for the first leaf entry with our hash value. */ @@ -1065,9 +1250,9 @@ xfs_dir2_leaf_lookup_int( * Loop over all the entries with the right hash value * looking to match the name. */ - for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && - be32_to_cpu(lep->hashval) == args->hashval; - lep++, index++) { + for (lep = &ents[index]; + index < leafhdr.count && be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { /* * Skip over stale leaf entries. */ @@ -1172,6 +1357,8 @@ xfs_dir2_leaf_removename( xfs_dir2_data_off_t oldbest; /* old value of best free */ xfs_trans_t *tp; /* transaction pointer */ struct xfs_dir2_data_free *bf; /* bestfree table */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; trace_xfs_dir2_leaf_removename(args); @@ -1186,12 +1373,14 @@ xfs_dir2_leaf_removename( mp = dp->i_mount; leaf = lbp->b_addr; hdr = dbp->b_addr; - bf = xfs_dir3_data_bestfree_p(hdr); xfs_dir3_data_check(dp, dbp); + bf = xfs_dir3_data_bestfree_p(hdr); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); /* * Point to the leaf entry, use that to point to the data entry. */ - lep = &leaf->ents[index]; + lep = &ents[index]; db = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address)); dep = (xfs_dir2_data_entry_t *) ((char *)hdr + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); @@ -1209,10 +1398,13 @@ xfs_dir2_leaf_removename( /* * We just mark the leaf entry stale by putting a null in it. */ - be16_add_cpu(&leaf->hdr.stale, 1); - xfs_dir2_leaf_log_header(tp, lbp); + leafhdr.stale++; + xfs_dir3_leaf_hdr_to_disk(leaf, &leafhdr); + xfs_dir3_leaf_log_header(tp, lbp); + lep->address = cpu_to_be32(XFS_DIR2_NULL_DATAPTR); - xfs_dir2_leaf_log_ents(tp, lbp, index, index); + xfs_dir3_leaf_log_ents(tp, lbp, index, index); + /* * Scan the freespace in the data block again if necessary, * log the data block header if necessary. @@ -1227,7 +1419,7 @@ xfs_dir2_leaf_removename( */ if (be16_to_cpu(bf[0].length) != oldbest) { bestsp[db] = bf[0].length; - xfs_dir2_leaf_log_bests(tp, lbp, db, db); + xfs_dir3_leaf_log_bests(tp, lbp, db, db); } xfs_dir3_data_check(dp, dbp); /* @@ -1245,7 +1437,7 @@ xfs_dir2_leaf_removename( */ if (error == ENOSPC && args->total == 0) error = 0; - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_check(mp, lbp); return error; } dbp = NULL; @@ -1268,8 +1460,8 @@ xfs_dir2_leaf_removename( memmove(&bestsp[db - i], bestsp, (be32_to_cpu(ltp->bestcount) - (db - i)) * sizeof(*bestsp)); be32_add_cpu(<p->bestcount, -(db - i)); - xfs_dir2_leaf_log_tail(tp, lbp); - xfs_dir2_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); + xfs_dir3_leaf_log_tail(tp, lbp); + xfs_dir3_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); } else bestsp[db] = cpu_to_be16(NULLDATAOFF); } @@ -1279,7 +1471,7 @@ xfs_dir2_leaf_removename( else if (db != mp->m_dirdatablk) dbp = NULL; - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_check(mp, lbp); /* * See if we can convert to block form. */ @@ -1302,6 +1494,7 @@ xfs_dir2_leaf_replace( xfs_dir2_leaf_t *leaf; /* leaf structure */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_leaf_entry *ents; trace_xfs_dir2_leaf_replace(args); @@ -1313,10 +1506,11 @@ xfs_dir2_leaf_replace( } dp = args->dp; leaf = lbp->b_addr; + ents = xfs_dir3_leaf_ents_p(leaf); /* * Point to the leaf entry, get data address from it. */ - lep = &leaf->ents[index]; + lep = &ents[index]; /* * Point to the data entry. */ @@ -1330,7 +1524,7 @@ xfs_dir2_leaf_replace( dep->inumber = cpu_to_be64(args->inumber); tp = args->trans; xfs_dir2_data_log_entry(tp, dbp, dep); - xfs_dir2_leaf_check(dp, lbp); + xfs_dir3_leaf_check(dp->i_mount, lbp); xfs_trans_brelse(tp, lbp); return 0; } @@ -1352,17 +1546,22 @@ xfs_dir2_leaf_search_hash( xfs_dir2_leaf_t *leaf; /* leaf structure */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ int mid=0; /* current leaf index */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; leaf = lbp->b_addr; + ents = xfs_dir3_leaf_ents_p(leaf); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + #ifndef __KERNEL__ - if (!leaf->hdr.count) + if (!leafhdr.count) return 0; #endif /* * Note, the table cannot be empty, so we have to go through the loop. * Binary search the leaf entries looking for our hash value. */ - for (lep = leaf->ents, low = 0, high = be16_to_cpu(leaf->hdr.count) - 1, + for (lep = ents, low = 0, high = leafhdr.count - 1, hashwant = args->hashval; low <= high; ) { mid = (low + high) >> 1; @@ -1448,23 +1647,29 @@ xfs_dir2_leaf_trim_data( bestsp = xfs_dir2_leaf_bests_p(ltp); be32_add_cpu(<p->bestcount, -1); memmove(&bestsp[1], &bestsp[0], be32_to_cpu(ltp->bestcount) * sizeof(*bestsp)); - xfs_dir2_leaf_log_tail(tp, lbp); - xfs_dir2_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); + xfs_dir3_leaf_log_tail(tp, lbp); + xfs_dir3_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); return 0; } static inline size_t -xfs_dir2_leaf_size( - struct xfs_dir2_leaf_hdr *hdr, +xfs_dir3_leaf_size( + struct xfs_dir3_icleaf_hdr *hdr, int counts) { - int entries; + int entries; + int hdrsize; + + entries = hdr->count - hdr->stale; + if (hdr->magic == XFS_DIR2_LEAF1_MAGIC || + hdr->magic == XFS_DIR2_LEAFN_MAGIC) + hdrsize = sizeof(struct xfs_dir2_leaf_hdr); + else + hdrsize = sizeof(struct xfs_dir3_leaf_hdr); - entries = be16_to_cpu(hdr->count) - be16_to_cpu(hdr->stale); - return sizeof(xfs_dir2_leaf_hdr_t) + - entries * sizeof(xfs_dir2_leaf_entry_t) + - counts * sizeof(xfs_dir2_data_off_t) + - sizeof(xfs_dir2_leaf_tail_t); + return hdrsize + entries * sizeof(xfs_dir2_leaf_entry_t) + + counts * sizeof(xfs_dir2_data_off_t) + + sizeof(xfs_dir2_leaf_tail_t); } /* @@ -1488,6 +1693,7 @@ xfs_dir2_node_to_leaf( xfs_mount_t *mp; /* filesystem mount point */ int rval; /* successful free trim? */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir3_icleaf_hdr leafhdr; struct xfs_dir3_icfree_hdr freehdr; /* @@ -1538,7 +1744,11 @@ xfs_dir2_node_to_leaf( return 0; lbp = state->path.blk[0].bp; leaf = lbp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + + ASSERT(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || + leafhdr.magic == XFS_DIR3_LEAFN_MAGIC); + /* * Read the freespace block. */ @@ -1554,36 +1764,40 @@ xfs_dir2_node_to_leaf( * Now see if the leafn and free data will fit in a leaf1. * If not, release the buffer and give up. */ - if (xfs_dir2_leaf_size(&leaf->hdr, freehdr.nvalid) > mp->m_dirblksize) { + if (xfs_dir3_leaf_size(&leafhdr, freehdr.nvalid) > mp->m_dirblksize) { xfs_trans_brelse(tp, fbp); return 0; } /* * If the leaf has any stale entries in it, compress them out. - * The compact routine will log the header. */ - if (be16_to_cpu(leaf->hdr.stale)) - xfs_dir2_leaf_compact(args, lbp); - else - xfs_dir2_leaf_log_header(tp, lbp); + if (leafhdr.stale) + xfs_dir3_leaf_compact(args, &leafhdr, lbp); - lbp->b_ops = &xfs_dir2_leaf1_buf_ops; - leaf->hdr.info.magic = cpu_to_be16(XFS_DIR2_LEAF1_MAGIC); + lbp->b_ops = &xfs_dir3_leaf1_buf_ops; + leafhdr.magic = (leafhdr.magic == XFS_DIR2_LEAFN_MAGIC) + ? XFS_DIR2_LEAF1_MAGIC + : XFS_DIR3_LEAF1_MAGIC; /* * Set up the leaf tail from the freespace block. */ ltp = xfs_dir2_leaf_tail_p(mp, leaf); ltp->bestcount = cpu_to_be32(freehdr.nvalid); + /* * Set up the leaf bests table. */ memcpy(xfs_dir2_leaf_bests_p(ltp), xfs_dir3_free_bests_p(mp, free), freehdr.nvalid * sizeof(xfs_dir2_data_off_t)); - xfs_dir2_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); - xfs_dir2_leaf_log_tail(tp, lbp); - xfs_dir2_leaf_check(dp, lbp); + + xfs_dir3_leaf_hdr_to_disk(leaf, &leafhdr); + xfs_dir3_leaf_log_header(tp, lbp); + xfs_dir3_leaf_log_bests(tp, lbp, 0, be32_to_cpu(ltp->bestcount) - 1); + xfs_dir3_leaf_log_tail(tp, lbp); + xfs_dir3_leaf_check(mp, lbp); + /* * Get rid of the freespace block. */ diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index f87a245..9b93816 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -24,14 +24,6 @@ */ static int xfs_dir2_leafn_add(struct xfs_buf *bp, xfs_da_args_t *args, int index); -#ifdef DEBUG -static void xfs_dir2_leafn_check(struct xfs_inode *dp, struct xfs_buf *bp); -#else -#define xfs_dir2_leafn_check(dp, bp) -#endif -static void xfs_dir2_leafn_moveents(xfs_da_args_t *args, struct xfs_buf *bp_s, - int start_s, struct xfs_buf *bp_d, - int start_d, int count); static void xfs_dir2_leafn_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, xfs_da_state_blk_t *blk2); @@ -41,6 +33,39 @@ static int xfs_dir2_leafn_remove(xfs_da_args_t *args, struct xfs_buf *bp, static int xfs_dir2_node_addname_int(xfs_da_args_t *args, xfs_da_state_blk_t *fblk); +/* + * Check internal consistency of a leafn block. + */ +#ifdef DEBUG +#define xfs_dir3_leaf_check(mp, bp) \ +do { \ + if (!xfs_dir3_leafn_check((mp), (bp))) \ + ASSERT(0); \ +} while (0); + +static bool +xfs_dir3_leafn_check( + struct xfs_mount *mp, + struct xfs_buf *bp) +{ + struct xfs_dir2_leaf *leaf = bp->b_addr; + struct xfs_dir3_icleaf_hdr leafhdr; + + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + + if (leafhdr.magic == XFS_DIR3_LEAFN_MAGIC) { + struct xfs_dir3_leaf_hdr *leaf3 = bp->b_addr; + if (be64_to_cpu(leaf3->info.blkno) != bp->b_bn) + return false; + } else if (leafhdr.magic != XFS_DIR2_LEAFN_MAGIC) + return false; + + return xfs_dir3_leaf_check_int(mp, &leafhdr, leaf); +} +#else +#define xfs_dir3_leaf_check(mp, bp) +#endif + static bool xfs_dir3_free_verify( struct xfs_buf *bp) @@ -344,11 +369,19 @@ xfs_dir2_leaf_to_node( xfs_dir2_free_log_bests(tp, fbp, 0, freehdr.nvalid - 1); xfs_dir2_free_log_header(tp, fbp); - /* convert the leaf to a leafnode */ - leaf->hdr.info.magic = cpu_to_be16(XFS_DIR2_LEAFN_MAGIC); - lbp->b_ops = &xfs_dir2_leafn_buf_ops; - xfs_dir2_leaf_log_header(tp, lbp); - xfs_dir2_leafn_check(dp, lbp); + /* + * Converting the leaf to a leafnode is just a matter of changing the + * magic number and the ops. Do the change directly to the buffer as + * it's less work (and less code) than decoding the header to host + * format and back again. + */ + if (leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC)) + leaf->hdr.info.magic = cpu_to_be16(XFS_DIR2_LEAFN_MAGIC); + else + leaf->hdr.info.magic = cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); + lbp->b_ops = &xfs_dir3_leafn_buf_ops; + xfs_dir3_leaf_log_header(tp, lbp); + xfs_dir3_leaf_check(mp, lbp); return 0; } @@ -372,6 +405,8 @@ xfs_dir2_leafn_add( int lowstale; /* previous stale entry */ xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir3_icleaf_hdr leafhdr; + struct xfs_dir2_leaf_entry *ents; trace_xfs_dir2_leafn_add(args, index); @@ -379,6 +414,8 @@ xfs_dir2_leafn_add( mp = dp->i_mount; tp = args->trans; leaf = bp->b_addr; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); /* * Quick check just to make sure we are not going to index @@ -394,15 +431,15 @@ xfs_dir2_leafn_add( * a compact. */ - if (be16_to_cpu(leaf->hdr.count) == xfs_dir2_max_leaf_ents(mp)) { - if (!leaf->hdr.stale) + if (leafhdr.count == xfs_dir3_max_leaf_ents(mp, leaf)) { + if (!leafhdr.stale) return XFS_ERROR(ENOSPC); - compact = be16_to_cpu(leaf->hdr.stale) > 1; + compact = leafhdr.stale > 1; } else compact = 0; - ASSERT(index == 0 || be32_to_cpu(leaf->ents[index - 1].hashval) <= args->hashval); - ASSERT(index == be16_to_cpu(leaf->hdr.count) || - be32_to_cpu(leaf->ents[index].hashval) >= args->hashval); + ASSERT(index == 0 || be32_to_cpu(ents[index - 1].hashval) <= args->hashval); + ASSERT(index == leafhdr.count || + be32_to_cpu(ents[index].hashval) >= args->hashval); if (args->op_flags & XFS_DA_OP_JUSTCHECK) return 0; @@ -411,62 +448,35 @@ xfs_dir2_leafn_add( * Compact out all but one stale leaf entry. Leaves behind * the entry closest to index. */ - if (compact) { - xfs_dir2_leaf_compact_x1(bp, &index, &lowstale, &highstale, - &lfloglow, &lfloghigh); - } - /* - * Set impossible logging indices for this case. - */ - else if (leaf->hdr.stale) { - lfloglow = be16_to_cpu(leaf->hdr.count); + if (compact) + xfs_dir3_leaf_compact_x1(&leafhdr, ents, &index, &lowstale, + &highstale, &lfloglow, &lfloghigh); + else if (leafhdr.stale) { + /* + * Set impossible logging indices for this case. + */ + lfloglow = leafhdr.count; lfloghigh = -1; } /* * Insert the new entry, log everything. */ - lep = xfs_dir2_leaf_find_entry(leaf, index, compact, lowstale, + lep = xfs_dir3_leaf_find_entry(&leafhdr, ents, index, compact, lowstale, highstale, &lfloglow, &lfloghigh); lep->hashval = cpu_to_be32(args->hashval); lep->address = cpu_to_be32(xfs_dir2_db_off_to_dataptr(mp, args->blkno, args->index)); - xfs_dir2_leaf_log_header(tp, bp); - xfs_dir2_leaf_log_ents(tp, bp, lfloglow, lfloghigh); - xfs_dir2_leafn_check(dp, bp); + + xfs_dir3_leaf_hdr_to_disk(leaf, &leafhdr); + xfs_dir3_leaf_log_header(tp, bp); + xfs_dir3_leaf_log_ents(tp, bp, lfloglow, lfloghigh); + xfs_dir3_leaf_check(mp, bp); return 0; } #ifdef DEBUG -/* - * Check internal consistency of a leafn block. - */ -void -xfs_dir2_leafn_check( - struct xfs_inode *dp, - struct xfs_buf *bp) -{ - int i; /* leaf index */ - xfs_dir2_leaf_t *leaf; /* leaf structure */ - xfs_mount_t *mp; /* filesystem mount point */ - int stale; /* count of stale leaves */ - - leaf = bp->b_addr; - mp = dp->i_mount; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - ASSERT(be16_to_cpu(leaf->hdr.count) <= xfs_dir2_max_leaf_ents(mp)); - for (i = stale = 0; i < be16_to_cpu(leaf->hdr.count); i++) { - if (i + 1 < be16_to_cpu(leaf->hdr.count)) { - ASSERT(be32_to_cpu(leaf->ents[i].hashval) <= - be32_to_cpu(leaf->ents[i + 1].hashval)); - } - if (leaf->ents[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) - stale++; - } - ASSERT(be16_to_cpu(leaf->hdr.stale) == stale); -} - static void xfs_dir2_free_hdr_check( struct xfs_mount *mp, @@ -494,15 +504,22 @@ xfs_dir2_leafn_lasthash( struct xfs_buf *bp, /* leaf buffer */ int *count) /* count of entries in leaf */ { - xfs_dir2_leaf_t *leaf; /* leaf structure */ + struct xfs_dir2_leaf *leaf = bp->b_addr; + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; + + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + + ASSERT(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || + leafhdr.magic == XFS_DIR3_LEAFN_MAGIC); - leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); if (count) - *count = be16_to_cpu(leaf->hdr.count); - if (!leaf->hdr.count) + *count = leafhdr.count; + if (!leafhdr.count) return 0; - return be32_to_cpu(leaf->ents[be16_to_cpu(leaf->hdr.count) - 1].hashval); + + ents = xfs_dir3_leaf_ents_p(leaf); + return be32_to_cpu(ents[leafhdr.count - 1].hashval); } /* @@ -531,16 +548,19 @@ xfs_dir2_leafn_lookup_for_addname( xfs_dir2_db_t newdb; /* new data block number */ xfs_dir2_db_t newfdb; /* new free block number */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; dp = args->dp; tp = args->trans; mp = dp->i_mount; leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); -#ifdef __KERNEL__ - ASSERT(be16_to_cpu(leaf->hdr.count) > 0); -#endif - xfs_dir2_leafn_check(dp, bp); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + + xfs_dir3_leaf_check(mp, bp); + ASSERT(leafhdr.count > 0); + /* * Look up the hash value in the leaf entries. */ @@ -560,9 +580,9 @@ xfs_dir2_leafn_lookup_for_addname( /* * Loop over leaf entries with the right hash value. */ - for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && - be32_to_cpu(lep->hashval) == args->hashval; - lep++, index++) { + for (lep = &ents[index]; + index < leafhdr.count && be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { /* * Skip stale leaf entries. */ @@ -678,16 +698,19 @@ xfs_dir2_leafn_lookup_for_entry( xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ enum xfs_dacmp cmp; /* comparison result */ + struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; dp = args->dp; tp = args->trans; mp = dp->i_mount; leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); -#ifdef __KERNEL__ - ASSERT(be16_to_cpu(leaf->hdr.count) > 0); -#endif - xfs_dir2_leafn_check(dp, bp); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + + xfs_dir3_leaf_check(mp, bp); + ASSERT(leafhdr.count > 0); + /* * Look up the hash value in the leaf entries. */ @@ -702,9 +725,9 @@ xfs_dir2_leafn_lookup_for_entry( /* * Loop over leaf entries with the right hash value. */ - for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && - be32_to_cpu(lep->hashval) == args->hashval; - lep++, index++) { + for (lep = &ents[index]; + index < leafhdr.count && be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { /* * Skip stale leaf entries. */ @@ -776,8 +799,7 @@ xfs_dir2_leafn_lookup_for_entry( return XFS_ERROR(EEXIST); } } - ASSERT(index == be16_to_cpu(leaf->hdr.count) || - (args->op_flags & XFS_DA_OP_OKNOENT)); + ASSERT(index == leafhdr.count || (args->op_flags & XFS_DA_OP_OKNOENT)); if (curbp) { if (args->cmpresult == XFS_CMP_DIFFERENT) { /* Giving back last used data block. */ @@ -822,52 +844,50 @@ xfs_dir2_leafn_lookup_int( * Log entries and headers. Stale entries are preserved. */ static void -xfs_dir2_leafn_moveents( - xfs_da_args_t *args, /* operation arguments */ - struct xfs_buf *bp_s, /* source leaf buffer */ - int start_s, /* source leaf index */ - struct xfs_buf *bp_d, /* destination leaf buffer */ - int start_d, /* destination leaf index */ - int count) /* count of leaves to copy */ +xfs_dir3_leafn_moveents( + xfs_da_args_t *args, /* operation arguments */ + struct xfs_buf *bp_s, /* source */ + struct xfs_dir3_icleaf_hdr *shdr, + struct xfs_dir2_leaf_entry *sents, + int start_s,/* source leaf index */ + struct xfs_buf *bp_d, /* destination */ + struct xfs_dir3_icleaf_hdr *dhdr, + struct xfs_dir2_leaf_entry *dents, + int start_d,/* destination leaf index */ + int count) /* count of leaves to copy */ { - xfs_dir2_leaf_t *leaf_d; /* destination leaf structure */ - xfs_dir2_leaf_t *leaf_s; /* source leaf structure */ - int stale; /* count stale leaves copied */ - xfs_trans_t *tp; /* transaction pointer */ + struct xfs_trans *tp = args->trans; + int stale; /* count stale leaves copied */ trace_xfs_dir2_leafn_moveents(args, start_s, start_d, count); /* * Silently return if nothing to do. */ - if (count == 0) { + if (count == 0) return; - } - tp = args->trans; - leaf_s = bp_s->b_addr; - leaf_d = bp_d->b_addr; + /* * If the destination index is not the end of the current * destination leaf entries, open up a hole in the destination * to hold the new entries. */ - if (start_d < be16_to_cpu(leaf_d->hdr.count)) { - memmove(&leaf_d->ents[start_d + count], &leaf_d->ents[start_d], - (be16_to_cpu(leaf_d->hdr.count) - start_d) * - sizeof(xfs_dir2_leaf_entry_t)); - xfs_dir2_leaf_log_ents(tp, bp_d, start_d + count, - count + be16_to_cpu(leaf_d->hdr.count) - 1); + if (start_d < dhdr->count) { + memmove(&dents[start_d + count], &dents[start_d], + (dhdr->count - start_d) * sizeof(xfs_dir2_leaf_entry_t)); + xfs_dir3_leaf_log_ents(tp, bp_d, start_d + count, + count + dhdr->count - 1); } /* * If the source has stale leaves, count the ones in the copy range * so we can update the header correctly. */ - if (leaf_s->hdr.stale) { + if (shdr->stale) { int i; /* temp leaf index */ for (i = start_s, stale = 0; i < start_s + count; i++) { - if (leaf_s->ents[i].address == - cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) + if (sents[i].address == + cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) stale++; } } else @@ -875,29 +895,27 @@ xfs_dir2_leafn_moveents( /* * Copy the leaf entries from source to destination. */ - memcpy(&leaf_d->ents[start_d], &leaf_s->ents[start_s], + memcpy(&dents[start_d], &sents[start_s], count * sizeof(xfs_dir2_leaf_entry_t)); - xfs_dir2_leaf_log_ents(tp, bp_d, start_d, start_d + count - 1); + xfs_dir3_leaf_log_ents(tp, bp_d, start_d, start_d + count - 1); + /* * If there are source entries after the ones we copied, * delete the ones we copied by sliding the next ones down. */ - if (start_s + count < be16_to_cpu(leaf_s->hdr.count)) { - memmove(&leaf_s->ents[start_s], &leaf_s->ents[start_s + count], + if (start_s + count < shdr->count) { + memmove(&sents[start_s], &sents[start_s + count], count * sizeof(xfs_dir2_leaf_entry_t)); - xfs_dir2_leaf_log_ents(tp, bp_s, start_s, start_s + count - 1); + xfs_dir3_leaf_log_ents(tp, bp_s, start_s, start_s + count - 1); } + /* * Update the headers and log them. */ - be16_add_cpu(&leaf_s->hdr.count, -(count)); - be16_add_cpu(&leaf_s->hdr.stale, -(stale)); - be16_add_cpu(&leaf_d->hdr.count, count); - be16_add_cpu(&leaf_d->hdr.stale, stale); - xfs_dir2_leaf_log_header(tp, bp_s); - xfs_dir2_leaf_log_header(tp, bp_d); - xfs_dir2_leafn_check(args->dp, bp_s); - xfs_dir2_leafn_check(args->dp, bp_d); + shdr->count -= count; + shdr->stale -= stale; + dhdr->count += count; + dhdr->stale += stale; } /* @@ -906,21 +924,25 @@ xfs_dir2_leafn_moveents( */ int /* sort order */ xfs_dir2_leafn_order( - struct xfs_buf *leaf1_bp, /* leaf1 buffer */ - struct xfs_buf *leaf2_bp) /* leaf2 buffer */ + struct xfs_buf *leaf1_bp, /* leaf1 buffer */ + struct xfs_buf *leaf2_bp) /* leaf2 buffer */ { - xfs_dir2_leaf_t *leaf1; /* leaf1 structure */ - xfs_dir2_leaf_t *leaf2; /* leaf2 structure */ - - leaf1 = leaf1_bp->b_addr; - leaf2 = leaf2_bp->b_addr; - ASSERT(leaf1->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - ASSERT(leaf2->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - if (be16_to_cpu(leaf1->hdr.count) > 0 && - be16_to_cpu(leaf2->hdr.count) > 0 && - (be32_to_cpu(leaf2->ents[0].hashval) < be32_to_cpu(leaf1->ents[0].hashval) || - be32_to_cpu(leaf2->ents[be16_to_cpu(leaf2->hdr.count) - 1].hashval) < - be32_to_cpu(leaf1->ents[be16_to_cpu(leaf1->hdr.count) - 1].hashval))) + struct xfs_dir2_leaf *leaf1 = leaf1_bp->b_addr; + struct xfs_dir2_leaf *leaf2 = leaf2_bp->b_addr; + struct xfs_dir2_leaf_entry *ents1; + struct xfs_dir2_leaf_entry *ents2; + struct xfs_dir3_icleaf_hdr hdr1; + struct xfs_dir3_icleaf_hdr hdr2; + + xfs_dir3_leaf_hdr_from_disk(&hdr1, leaf1); + xfs_dir3_leaf_hdr_from_disk(&hdr2, leaf2); + ents1 = xfs_dir3_leaf_ents_p(leaf1); + ents2 = xfs_dir3_leaf_ents_p(leaf2); + + if (hdr1.count > 0 && hdr2.count > 0 && + (be32_to_cpu(ents2[0].hashval) < be32_to_cpu(ents1[0].hashval) || + be32_to_cpu(ents2[hdr2.count - 1].hashval) < + be32_to_cpu(ents1[hdr1.count - 1].hashval))) return 1; return 0; } @@ -949,6 +971,10 @@ xfs_dir2_leafn_rebalance( #endif int oldsum; /* old total leaf count */ int swap; /* swapped leaf blocks */ + struct xfs_dir2_leaf_entry *ents1; + struct xfs_dir2_leaf_entry *ents2; + struct xfs_dir3_icleaf_hdr hdr1; + struct xfs_dir3_icleaf_hdr hdr2; args = state->args; /* @@ -963,11 +989,17 @@ xfs_dir2_leafn_rebalance( } leaf1 = blk1->bp->b_addr; leaf2 = blk2->bp->b_addr; - oldsum = be16_to_cpu(leaf1->hdr.count) + be16_to_cpu(leaf2->hdr.count); + xfs_dir3_leaf_hdr_from_disk(&hdr1, leaf1); + xfs_dir3_leaf_hdr_from_disk(&hdr2, leaf2); + ents1 = xfs_dir3_leaf_ents_p(leaf1); + ents2 = xfs_dir3_leaf_ents_p(leaf2); + + oldsum = hdr1.count + hdr2.count; #ifdef DEBUG - oldstale = be16_to_cpu(leaf1->hdr.stale) + be16_to_cpu(leaf2->hdr.stale); + oldstale = hdr1.stale + hdr2.stale; #endif mid = oldsum >> 1; + /* * If the old leaf count was odd then the new one will be even, * so we need to divide the new count evenly. @@ -975,10 +1007,10 @@ xfs_dir2_leafn_rebalance( if (oldsum & 1) { xfs_dahash_t midhash; /* middle entry hash value */ - if (mid >= be16_to_cpu(leaf1->hdr.count)) - midhash = be32_to_cpu(leaf2->ents[mid - be16_to_cpu(leaf1->hdr.count)].hashval); + if (mid >= hdr1.count) + midhash = be32_to_cpu(ents2[mid - hdr1.count].hashval); else - midhash = be32_to_cpu(leaf1->ents[mid].hashval); + midhash = be32_to_cpu(ents1[mid].hashval); isleft = args->hashval <= midhash; } /* @@ -992,30 +1024,42 @@ xfs_dir2_leafn_rebalance( * Calculate moved entry count. Positive means left-to-right, * negative means right-to-left. Then move the entries. */ - count = be16_to_cpu(leaf1->hdr.count) - mid + (isleft == 0); + count = hdr1.count - mid + (isleft == 0); if (count > 0) - xfs_dir2_leafn_moveents(args, blk1->bp, - be16_to_cpu(leaf1->hdr.count) - count, blk2->bp, 0, count); + xfs_dir3_leafn_moveents(args, blk1->bp, &hdr1, ents1, + hdr1.count - count, blk2->bp, + &hdr2, ents2, 0, count); else if (count < 0) - xfs_dir2_leafn_moveents(args, blk2->bp, 0, blk1->bp, - be16_to_cpu(leaf1->hdr.count), count); - ASSERT(be16_to_cpu(leaf1->hdr.count) + be16_to_cpu(leaf2->hdr.count) == oldsum); - ASSERT(be16_to_cpu(leaf1->hdr.stale) + be16_to_cpu(leaf2->hdr.stale) == oldstale); + xfs_dir3_leafn_moveents(args, blk2->bp, &hdr2, ents2, 0, + blk1->bp, &hdr1, ents1, + hdr1.count, count); + + ASSERT(hdr1.count + hdr2.count == oldsum); + ASSERT(hdr1.stale + hdr2.stale == oldstale); + + /* log the changes made when moving the entries */ + xfs_dir3_leaf_hdr_to_disk(leaf1, &hdr1); + xfs_dir3_leaf_hdr_to_disk(leaf2, &hdr2); + xfs_dir3_leaf_log_header(args->trans, blk1->bp); + xfs_dir3_leaf_log_header(args->trans, blk2->bp); + + xfs_dir3_leaf_check(args->dp->i_mount, blk1->bp); + xfs_dir3_leaf_check(args->dp->i_mount, blk2->bp); + /* * Mark whether we're inserting into the old or new leaf. */ - if (be16_to_cpu(leaf1->hdr.count) < be16_to_cpu(leaf2->hdr.count)) + if (hdr1.count < hdr2.count) state->inleaf = swap; - else if (be16_to_cpu(leaf1->hdr.count) > be16_to_cpu(leaf2->hdr.count)) + else if (hdr1.count > hdr2.count) state->inleaf = !swap; else - state->inleaf = - swap ^ (blk1->index <= be16_to_cpu(leaf1->hdr.count)); + state->inleaf = swap ^ (blk1->index <= hdr1.count); /* * Adjust the expected index for insertion. */ if (!state->inleaf) - blk2->index = blk1->index - be16_to_cpu(leaf1->hdr.count); + blk2->index = blk1->index - hdr1.count; /* * Finally sanity check just to make sure we are not returning a @@ -1137,6 +1181,8 @@ xfs_dir2_leafn_remove( int needscan; /* need to rescan data frees */ xfs_trans_t *tp; /* transaction pointer */ struct xfs_dir2_data_free *bf; /* bestfree table */ + struct xfs_dir3_icleaf_hdr leafhdr; + struct xfs_dir2_leaf_entry *ents; trace_xfs_dir2_leafn_remove(args, index); @@ -1144,11 +1190,14 @@ xfs_dir2_leafn_remove( tp = args->trans; mp = dp->i_mount; leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + /* * Point to the entry we're removing. */ - lep = &leaf->ents[index]; + lep = &ents[index]; + /* * Extract the data block and offset from the entry. */ @@ -1156,14 +1205,18 @@ xfs_dir2_leafn_remove( ASSERT(dblk->blkno == db); off = xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address)); ASSERT(dblk->index == off); + /* * Kill the leaf entry by marking it stale. * Log the leaf block changes. */ - be16_add_cpu(&leaf->hdr.stale, 1); - xfs_dir2_leaf_log_header(tp, bp); + leafhdr.stale++; + xfs_dir3_leaf_hdr_to_disk(leaf, &leafhdr); + xfs_dir3_leaf_log_header(tp, bp); + lep->address = cpu_to_be32(XFS_DIR2_NULL_DATAPTR); - xfs_dir2_leaf_log_ents(tp, bp, index, index); + xfs_dir3_leaf_log_ents(tp, bp, index, index); + /* * Make the data entry free. Keep track of the longest freespace * in the data block in case it changes. @@ -1252,15 +1305,13 @@ xfs_dir2_leafn_remove( return error; } - xfs_dir2_leafn_check(dp, bp); + xfs_dir3_leaf_check(mp, bp); /* * Return indication of whether this leaf block is empty enough * to justify trying to join it with a neighbor. */ - *rval = - ((uint)sizeof(leaf->hdr) + - (uint)sizeof(leaf->ents[0]) * - (be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale))) < + *rval = (xfs_dir3_leaf_hdr_size(leaf) + + (uint)sizeof(ents[0]) * (leafhdr.count - leafhdr.stale)) < mp->m_dir_magicpct; return 0; } @@ -1293,11 +1344,11 @@ xfs_dir2_leafn_split( /* * Initialize the new leaf block. */ - error = xfs_dir2_leaf_init(args, xfs_dir2_da_to_db(mp, blkno), - &newblk->bp, XFS_DIR2_LEAFN_MAGIC); - if (error) { + error = xfs_dir3_leaf_get_buf(args, xfs_dir2_da_to_db(mp, blkno), + &newblk->bp, XFS_DIR2_LEAFN_MAGIC); + if (error) return error; - } + newblk->blkno = blkno; newblk->magic = XFS_DIR2_LEAFN_MAGIC; /* @@ -1321,8 +1372,8 @@ xfs_dir2_leafn_split( */ oldblk->hashval = xfs_dir2_leafn_lasthash(oldblk->bp, NULL); newblk->hashval = xfs_dir2_leafn_lasthash(newblk->bp, NULL); - xfs_dir2_leafn_check(args->dp, oldblk->bp); - xfs_dir2_leafn_check(args->dp, newblk->bp); + xfs_dir3_leaf_check(mp, oldblk->bp); + xfs_dir3_leaf_check(mp, newblk->bp); return error; } @@ -1348,9 +1399,10 @@ xfs_dir2_leafn_toosmall( int error; /* error return value */ int forward; /* sibling block direction */ int i; /* sibling counter */ - xfs_da_blkinfo_t *info; /* leaf block header */ xfs_dir2_leaf_t *leaf; /* leaf structure */ int rval; /* result from path_shift */ + struct xfs_dir3_icleaf_hdr leafhdr; + struct xfs_dir2_leaf_entry *ents; /* * Check for the degenerate case of the block being over 50% full. @@ -1358,11 +1410,13 @@ xfs_dir2_leafn_toosmall( * to coalesce with a sibling. */ blk = &state->path.blk[state->path.active - 1]; - info = blk->bp->b_addr; - ASSERT(info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - leaf = (xfs_dir2_leaf_t *)info; - count = be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale); - bytes = (uint)sizeof(leaf->hdr) + count * (uint)sizeof(leaf->ents[0]); + leaf = blk->bp->b_addr; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + xfs_dir3_leaf_check(mp, blk->bp); + + count = leafhdr.count - leafhdr.stale; + bytes = xfs_dir3_leaf_hdr_size(leaf) + count * sizeof(ents[0]); if (bytes > (state->blocksize >> 1)) { /* * Blk over 50%, don't try to join. @@ -1381,7 +1435,7 @@ xfs_dir2_leafn_toosmall( * Make altpath point to the block we want to keep and * path point to the block we want to drop (this one). */ - forward = (info->forw != 0); + forward = (leafhdr.forw != 0); memcpy(&state->altpath, &state->path, sizeof(state->path)); error = xfs_da_path_shift(state, &state->altpath, forward, 0, &rval); @@ -1397,15 +1451,17 @@ xfs_dir2_leafn_toosmall( * We prefer coalescing with the lower numbered sibling so as * to shrink a directory over time. */ - forward = be32_to_cpu(info->forw) < be32_to_cpu(info->back); + forward = leafhdr.forw < leafhdr.back; for (i = 0, bp = NULL; i < 2; forward = !forward, i++) { - blkno = forward ? be32_to_cpu(info->forw) : be32_to_cpu(info->back); + struct xfs_dir3_icleaf_hdr hdr2; + + blkno = forward ? leafhdr.forw : leafhdr.back; if (blkno == 0) continue; /* * Read the sibling leaf block. */ - error = xfs_dir2_leafn_read(state->args->trans, state->args->dp, + error = xfs_dir3_leafn_read(state->args->trans, state->args->dp, blkno, -1, &bp); if (error) return error; @@ -1413,13 +1469,15 @@ xfs_dir2_leafn_toosmall( /* * Count bytes in the two blocks combined. */ - leaf = (xfs_dir2_leaf_t *)info; - count = be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale); + count = leafhdr.count - leafhdr.stale; bytes = state->blocksize - (state->blocksize >> 2); + leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - count += be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale); - bytes -= count * (uint)sizeof(leaf->ents[0]); + xfs_dir3_leaf_hdr_from_disk(&hdr2, leaf); + ents = xfs_dir3_leaf_ents_p(leaf); + count += hdr2.count - hdr2.stale; + bytes -= count * sizeof(ents[0]); + /* * Fits with at least 25% to spare. */ @@ -1466,34 +1524,53 @@ xfs_dir2_leafn_unbalance( xfs_da_args_t *args; /* operation arguments */ xfs_dir2_leaf_t *drop_leaf; /* dead leaf structure */ xfs_dir2_leaf_t *save_leaf; /* surviving leaf structure */ + struct xfs_dir3_icleaf_hdr savehdr; + struct xfs_dir3_icleaf_hdr drophdr; + struct xfs_dir2_leaf_entry *sents; + struct xfs_dir2_leaf_entry *dents; args = state->args; ASSERT(drop_blk->magic == XFS_DIR2_LEAFN_MAGIC); ASSERT(save_blk->magic == XFS_DIR2_LEAFN_MAGIC); drop_leaf = drop_blk->bp->b_addr; save_leaf = save_blk->bp->b_addr; - ASSERT(drop_leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); - ASSERT(save_leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC)); + + xfs_dir3_leaf_hdr_from_disk(&savehdr, save_leaf); + xfs_dir3_leaf_hdr_from_disk(&drophdr, drop_leaf); + sents = xfs_dir3_leaf_ents_p(save_leaf); + dents = xfs_dir3_leaf_ents_p(drop_leaf); + /* * If there are any stale leaf entries, take this opportunity * to purge them. */ - if (drop_leaf->hdr.stale) - xfs_dir2_leaf_compact(args, drop_blk->bp); - if (save_leaf->hdr.stale) - xfs_dir2_leaf_compact(args, save_blk->bp); + if (drophdr.stale) + xfs_dir3_leaf_compact(args, &drophdr, drop_blk->bp); + if (savehdr.stale) + xfs_dir3_leaf_compact(args, &savehdr, save_blk->bp); + /* * Move the entries from drop to the appropriate end of save. */ - drop_blk->hashval = be32_to_cpu(drop_leaf->ents[be16_to_cpu(drop_leaf->hdr.count) - 1].hashval); + drop_blk->hashval = be32_to_cpu(dents[drophdr.count - 1].hashval); if (xfs_dir2_leafn_order(save_blk->bp, drop_blk->bp)) - xfs_dir2_leafn_moveents(args, drop_blk->bp, 0, save_blk->bp, 0, - be16_to_cpu(drop_leaf->hdr.count)); + xfs_dir3_leafn_moveents(args, drop_blk->bp, &drophdr, dents, 0, + save_blk->bp, &savehdr, sents, 0, + drophdr.count); else - xfs_dir2_leafn_moveents(args, drop_blk->bp, 0, save_blk->bp, - be16_to_cpu(save_leaf->hdr.count), be16_to_cpu(drop_leaf->hdr.count)); - save_blk->hashval = be32_to_cpu(save_leaf->ents[be16_to_cpu(save_leaf->hdr.count) - 1].hashval); - xfs_dir2_leafn_check(args->dp, save_blk->bp); + xfs_dir3_leafn_moveents(args, drop_blk->bp, &drophdr, dents, 0, + save_blk->bp, &savehdr, sents, + savehdr.count, drophdr.count); + save_blk->hashval = be32_to_cpu(sents[savehdr.count - 1].hashval); + + /* log the changes made when moving the entries */ + xfs_dir3_leaf_hdr_to_disk(save_leaf, &savehdr); + xfs_dir3_leaf_hdr_to_disk(drop_leaf, &drophdr); + xfs_dir3_leaf_log_header(args->trans, save_blk->bp); + xfs_dir3_leaf_log_header(args->trans, drop_blk->bp); + + xfs_dir3_leaf_check(args->dp->i_mount, save_blk->bp); + xfs_dir3_leaf_check(args->dp->i_mount, drop_blk->bp); } /* @@ -2098,13 +2175,15 @@ xfs_dir2_node_replace( * and locked it. But paranoia is good. */ if (rval == EEXIST) { + struct xfs_dir2_leaf_entry *ents; /* * Find the leaf entry. */ blk = &state->path.blk[state->path.active - 1]; ASSERT(blk->magic == XFS_DIR2_LEAFN_MAGIC); leaf = blk->bp->b_addr; - lep = &leaf->ents[blk->index]; + ents = xfs_dir3_leaf_ents_p(leaf); + lep = &ents[blk->index]; ASSERT(state->extravalid); /* * Point to the data entry. diff --git a/libxfs/xfs_dir2_priv.h b/libxfs/xfs_dir2_priv.h index 910e644..932565d 100644 --- a/libxfs/xfs_dir2_priv.h +++ b/libxfs/xfs_dir2_priv.h @@ -77,24 +77,25 @@ extern void xfs_dir2_data_use_free(struct xfs_trans *tp, struct xfs_buf *bp, xfs_dir2_data_aoff_t len, int *needlogp, int *needscanp); /* xfs_dir2_leaf.c */ -extern const struct xfs_buf_ops xfs_dir2_leafn_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_leafn_buf_ops; -extern int xfs_dir2_leafn_read(struct xfs_trans *tp, struct xfs_inode *dp, +extern int xfs_dir3_leafn_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t fbno, xfs_daddr_t mappedbno, struct xfs_buf **bpp); extern int xfs_dir2_block_to_leaf(struct xfs_da_args *args, struct xfs_buf *dbp); extern int xfs_dir2_leaf_addname(struct xfs_da_args *args); -extern void xfs_dir2_leaf_compact(struct xfs_da_args *args, - struct xfs_buf *bp); -extern void xfs_dir2_leaf_compact_x1(struct xfs_buf *bp, int *indexp, +extern void xfs_dir3_leaf_compact(struct xfs_da_args *args, + struct xfs_dir3_icleaf_hdr *leafhdr, struct xfs_buf *bp); +extern void xfs_dir3_leaf_compact_x1(struct xfs_dir3_icleaf_hdr *leafhdr, + struct xfs_dir2_leaf_entry *ents, int *indexp, int *lowstalep, int *highstalep, int *lowlogp, int *highlogp); extern int xfs_dir2_leaf_getdents(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -extern int xfs_dir2_leaf_init(struct xfs_da_args *args, xfs_dir2_db_t bno, - struct xfs_buf **bpp, int magic); -extern void xfs_dir2_leaf_log_ents(struct xfs_trans *tp, struct xfs_buf *bp, +extern int xfs_dir3_leaf_get_buf(struct xfs_da_args *args, xfs_dir2_db_t bno, + struct xfs_buf **bpp, __uint16_t magic); +extern void xfs_dir3_leaf_log_ents(struct xfs_trans *tp, struct xfs_buf *bp, int first, int last); -extern void xfs_dir2_leaf_log_header(struct xfs_trans *tp, +extern void xfs_dir3_leaf_log_header(struct xfs_trans *tp, struct xfs_buf *bp); extern int xfs_dir2_leaf_lookup(struct xfs_da_args *args); extern int xfs_dir2_leaf_removename(struct xfs_da_args *args); @@ -104,11 +105,18 @@ extern int xfs_dir2_leaf_search_hash(struct xfs_da_args *args, extern int xfs_dir2_leaf_trim_data(struct xfs_da_args *args, struct xfs_buf *lbp, xfs_dir2_db_t db); extern struct xfs_dir2_leaf_entry * -xfs_dir2_leaf_find_entry(struct xfs_dir2_leaf *leaf, int index, int compact, - int lowstale, int highstale, - int *lfloglow, int *lfloghigh); +xfs_dir3_leaf_find_entry(struct xfs_dir3_icleaf_hdr *leafhdr, + struct xfs_dir2_leaf_entry *ents, int index, int compact, + int lowstale, int highstale, int *lfloglow, int *lfloghigh); extern int xfs_dir2_node_to_leaf(struct xfs_da_state *state); +extern void xfs_dir3_leaf_hdr_from_disk(struct xfs_dir3_icleaf_hdr *to, + struct xfs_dir2_leaf *from); +extern void xfs_dir3_leaf_hdr_to_disk(struct xfs_dir2_leaf *to, + struct xfs_dir3_icleaf_hdr *from); +extern bool xfs_dir3_leaf_check_int(struct xfs_mount *mp, + struct xfs_dir3_icleaf_hdr *hdr, struct xfs_dir2_leaf *leaf); + /* xfs_dir2_node.c */ extern int xfs_dir2_leaf_to_node(struct xfs_da_args *args, struct xfs_buf *lbp); diff --git a/repair/dir2.c b/repair/dir2.c index c01e0bc..9f1d50b 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -1627,24 +1627,26 @@ process_leaf_block_dir2( { int i; int stale; + struct xfs_dir2_leaf_entry *ents; + + ents = xfs_dir3_leaf_ents_p(leaf); for (i = stale = 0; i < be16_to_cpu(leaf->hdr.count); i++) { - if ((char *)&leaf->ents[i] >= (char *)leaf + mp->m_dirblksize) { + if ((char *)&ents[i] >= (char *)leaf + mp->m_dirblksize) { do_warn( _("bad entry count in block %u of directory inode %" PRIu64 "\n"), da_bno, ino); return 1; } - if (be32_to_cpu(leaf->ents[i].address) == XFS_DIR2_NULL_DATAPTR) + if (be32_to_cpu(ents[i].address) == XFS_DIR2_NULL_DATAPTR) stale++; - else if (be32_to_cpu(leaf->ents[i].hashval) < last_hashval) { + else if (be32_to_cpu(ents[i].hashval) < last_hashval) { do_warn( _("bad hash ordering in block %u of directory inode %" PRIu64 "\n"), da_bno, ino); return 1; } - *next_hashval = last_hashval = - be32_to_cpu(leaf->ents[i].hashval); + *next_hashval = last_hashval = be32_to_cpu(ents[i].hashval); } if (stale != be16_to_cpu(leaf->hdr.stale)) { do_warn( diff --git a/repair/phase6.c b/repair/phase6.c index 4c65acf..bd1fad4 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1826,6 +1826,7 @@ longform_dir2_check_leaf( xfs_dir2_leaf_t *leaf; xfs_dir2_leaf_tail_t *ltp; int seeval; + struct xfs_dir2_leaf_entry *ents; da_bno = mp->m_dirleafblk; if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bp, XFS_DATA_FORK, NULL)) { @@ -1835,6 +1836,7 @@ longform_dir2_check_leaf( /* NOTREACHED */ } leaf = bp->b_addr; + ents = xfs_dir3_leaf_ents_p(leaf); ltp = xfs_dir2_leaf_tail_p(mp, leaf); bestsp = xfs_dir2_leaf_bests_p(ltp); if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAF1_MAGIC || @@ -1843,8 +1845,8 @@ longform_dir2_check_leaf( be16_to_cpu(leaf->hdr.count) < be16_to_cpu(leaf->hdr.stale) || be16_to_cpu(leaf->hdr.count) > - xfs_dir2_max_leaf_ents(mp) || - (char *)&leaf->ents[be16_to_cpu( + xfs_dir3_max_leaf_ents(mp, leaf) || + (char *)&ents[be16_to_cpu( leaf->hdr.count)] > (char *)bestsp) { do_warn( _("leaf block %u for directory inode %" PRIu64 " bad header\n"), @@ -1852,7 +1854,7 @@ longform_dir2_check_leaf( libxfs_putbuf(bp); return 1; } - seeval = dir_hash_see_all(hashtab, leaf->ents, + seeval = dir_hash_see_all(hashtab, ents, be16_to_cpu(leaf->hdr.count), be16_to_cpu(leaf->hdr.stale)); if (dir_hash_check(hashtab, ip, seeval)) { @@ -1895,6 +1897,7 @@ longform_dir2_check_node( xfs_fileoff_t next_da_bno; int seeval = 0; int used; + struct xfs_dir2_leaf_entry *ents; for (da_bno = mp->m_dirleafblk, next_da_bno = 0; next_da_bno != NULLFILEOFF && da_bno < mp->m_dirfreeblk; @@ -1910,6 +1913,7 @@ longform_dir2_check_node( return 1; } leaf = bp->b_addr; + ents = xfs_dir3_leaf_ents_p(leaf); if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAFN_MAGIC) { if (be16_to_cpu(leaf->hdr.info.magic) == XFS_DA_NODE_MAGIC) { @@ -1923,7 +1927,7 @@ longform_dir2_check_node( libxfs_putbuf(bp); return 1; } - if (be16_to_cpu(leaf->hdr.count) > xfs_dir2_max_leaf_ents(mp) || + if (be16_to_cpu(leaf->hdr.count) > xfs_dir3_max_leaf_ents(mp, leaf) || be16_to_cpu(leaf->hdr.count) < be16_to_cpu(leaf->hdr.stale)) { do_warn( @@ -1932,7 +1936,7 @@ longform_dir2_check_node( libxfs_putbuf(bp); return 1; } - seeval = dir_hash_see_all(hashtab, leaf->ents, + seeval = dir_hash_see_all(hashtab, ents, be16_to_cpu(leaf->hdr.count), be16_to_cpu(leaf->hdr.stale)); libxfs_putbuf(bp); -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6DDF629E14 for ; Fri, 17 May 2013 06:14:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id C36FBAC002 for ; Fri, 17 May 2013 04:14:04 -0700 (PDT) X-ASG-Debug-ID: 1368789233-04cb6c53a2352210001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id vvGdSOX64qwR6587 for ; Fri, 17 May 2013 04:13:54 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoBDC8zCBgxOQMbGYgLvQCOAoR5A5NniW+LIoMiKoEuJA Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:44 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbX-0008Rs-4o for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbN-0005Ei-2G for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:33 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 14/30] xfs: add CRCs to dir2/da node blocks Date: Fri, 17 May 2013 21:13:09 +1000 X-ASG-Orig-Subj: [PATCH 14/30] xfs: add CRCs to dir2/da node blocks Message-Id: <1368789205-19969-15-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789233 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- db/attr.c | 4 +- db/check.c | 8 +- db/dir2.c | 4 +- include/xfs_da_btree.h | 106 +++- libxfs/xfs_attr.c | 24 +- libxfs/xfs_attr_leaf.c | 17 +- libxfs/xfs_da_btree.c | 1393 +++++++++++++++++++++++++++++------------------- libxfs/xfs_dir2_node.c | 26 +- repair/attr_repair.c | 88 +-- repair/dir2.c | 96 ++-- 10 files changed, 1066 insertions(+), 700 deletions(-) diff --git a/db/attr.c b/db/attr.c index 74bf411..a5087b8 100644 --- a/db/attr.c +++ b/db/attr.c @@ -54,7 +54,7 @@ const field_t attr_flds[] = { FLD_COUNT, TYP_NONE }, { "entries", FLDT_ATTR_LEAF_ENTRY, OI(LOFF(entries)), attr_leaf_entries_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, - { "btree", FLDT_ATTR_NODE_ENTRY, OI(NOFF(btree)), attr_node_btree_count, + { "btree", FLDT_ATTR_NODE_ENTRY, OI(NOFF(__btree)), attr_node_btree_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, { "nvlist", FLDT_ATTR_LEAF_NAME, attr_leaf_nvlist_offset, attr_leaf_nvlist_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, @@ -144,7 +144,7 @@ const field_t attr_node_entry_flds[] = { const field_t attr_node_hdr_flds[] = { { "info", FLDT_ATTR_BLKINFO, OI(HOFF(info)), C1, 0, TYP_NONE }, { "count", FLDT_UINT16D, OI(HOFF(count)), C1, 0, TYP_NONE }, - { "level", FLDT_UINT16D, OI(HOFF(level)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(HOFF(__level)), C1, 0, TYP_NONE }, { NULL } }; diff --git a/db/check.c b/db/check.c index 27107a0..5b7498f 100644 --- a/db/check.c +++ b/db/check.c @@ -3072,6 +3072,7 @@ process_leaf_node_dir_v2_int( xfs_dir2_leaf_tail_t *ltp; xfs_da_intnode_t *node; int stale; + struct xfs_da3_icnode_hdr nodehdr; leaf = iocur_top->data; switch (be16_to_cpu(leaf->hdr.info.magic)) { @@ -3120,13 +3121,12 @@ process_leaf_node_dir_v2_int( break; case XFS_DA_NODE_MAGIC: node = iocur_top->data; - if (be16_to_cpu(node->hdr.level) < 1 || - be16_to_cpu(node->hdr.level) > - XFS_DA_NODE_MAXDEPTH) { + xfs_da3_node_hdr_from_disk(&nodehdr, node); + if (nodehdr.level < 1 || nodehdr.level > XFS_DA_NODE_MAXDEPTH) { if (!sflag || v) dbprintf(_("bad node block level %d for dir ino " "%lld block %d\n"), - be16_to_cpu(node->hdr.level), id->ino, + nodehdr.level, id->ino, dabno); error++; } diff --git a/db/dir2.c b/db/dir2.c index 176bdab..590e993 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -86,7 +86,7 @@ const field_t dir2_flds[] = { dir2_leaf_tail_count, FLD_OFFSET|FLD_COUNT, TYP_NONE }, { "nhdr", FLDT_DA_NODE_HDR, OI(NOFF(hdr)), dir2_node_hdr_count, FLD_COUNT, TYP_NONE }, - { "nbtree", FLDT_DA_NODE_ENTRY, OI(NOFF(btree)), dir2_node_btree_count, + { "nbtree", FLDT_DA_NODE_ENTRY, OI(NOFF(__btree)), dir2_node_btree_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, { "fhdr", FLDT_DIR2_FREE_HDR, OI(FOFF(hdr)), dir2_free_hdr_count, FLD_COUNT, TYP_NONE }, @@ -185,7 +185,7 @@ const field_t da_node_entry_flds[] = { const field_t da_node_hdr_flds[] = { { "info", FLDT_DA_BLKINFO, OI(HOFF(info)), C1, 0, TYP_NONE }, { "count", FLDT_UINT16D, OI(HOFF(count)), C1, 0, TYP_NONE }, - { "level", FLDT_UINT16D, OI(HOFF(level)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(HOFF(__level)), C1, 0, TYP_NONE }, { NULL } }; diff --git a/include/xfs_da_btree.h b/include/xfs_da_btree.h index 0854b95..6bedb3c 100644 --- a/include/xfs_da_btree.h +++ b/include/xfs_da_btree.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2000,2002,2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -20,7 +21,6 @@ struct xfs_bmap_free; struct xfs_inode; -struct xfs_mount; struct xfs_trans; struct zone; @@ -50,8 +50,11 @@ typedef struct xfs_da_blkinfo { * CRC enabled directory structure types * * The headers change size for the additional verification information, but - * otherwise the tree layouts and contents are unchanged. + * otherwise the tree layouts and contents are unchanged. Hence the da btree + * code can use the struct xfs_da_blkinfo for manipulating the tree links and + * magic numbers without modification for both v2 and v3 nodes. */ +#define XFS_DA3_NODE_MAGIC 0x3ebe /* magic number: non-leaf blocks */ #define XFS_DIR3_LEAF1_MAGIC 0x3df1 /* magic number: v2 dirlf single blks */ #define XFS_DIR3_LEAFN_MAGIC 0x3dff /* magic number: v2 dirlf multi blks */ @@ -80,19 +83,76 @@ struct xfs_da3_blkinfo { */ #define XFS_DA_NODE_MAXDEPTH 5 /* max depth of Btree */ +typedef struct xfs_da_node_hdr { + struct xfs_da_blkinfo info; /* block type, links, etc. */ + __be16 count; /* count of active entries */ + __be16 __level; /* level above leaves (leaf == 0) */ +} xfs_da_node_hdr_t; + +struct xfs_da3_node_hdr { + struct xfs_da3_blkinfo info; /* block type, links, etc. */ + __be16 count; /* count of active entries */ + __be16 __level; /* level above leaves (leaf == 0) */ + __be32 __pad32; +}; + +#define XFS_DA3_NODE_CRC_OFF (offsetof(struct xfs_da3_node_hdr, info.crc)) + +typedef struct xfs_da_node_entry { + __be32 hashval; /* hash value for this descendant */ + __be32 before; /* Btree block before this key */ +} xfs_da_node_entry_t; + typedef struct xfs_da_intnode { - struct xfs_da_node_hdr { /* constant-structure header block */ - xfs_da_blkinfo_t info; /* block type, links, etc. */ - __be16 count; /* count of active entries */ - __be16 level; /* level above leaves (leaf == 0) */ - } hdr; - struct xfs_da_node_entry { - __be32 hashval; /* hash value for this descendant */ - __be32 before; /* Btree block before this key */ - } btree[1]; /* variable sized array of keys */ + struct xfs_da_node_hdr hdr; + struct xfs_da_node_entry __btree[]; } xfs_da_intnode_t; -typedef struct xfs_da_node_hdr xfs_da_node_hdr_t; -typedef struct xfs_da_node_entry xfs_da_node_entry_t; + +struct xfs_da3_intnode { + struct xfs_da3_node_hdr hdr; + struct xfs_da_node_entry __btree[]; +}; + +/* + * In-core version of the node header to abstract the differences in the v2 and + * v3 disk format of the headers. Callers need to convert to/from disk format as + * appropriate. + */ +struct xfs_da3_icnode_hdr { + __uint32_t forw; + __uint32_t back; + __uint16_t magic; + __uint16_t count; + __uint16_t level; +}; + +extern void xfs_da3_node_hdr_from_disk(struct xfs_da3_icnode_hdr *to, + struct xfs_da_intnode *from); +extern void xfs_da3_node_hdr_to_disk(struct xfs_da_intnode *to, + struct xfs_da3_icnode_hdr *from); + +static inline int +xfs_da3_node_hdr_size(struct xfs_da_intnode *dap) +{ + if (dap->hdr.info.magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)) + return sizeof(struct xfs_da3_node_hdr); + return sizeof(struct xfs_da_node_hdr); +} + +static inline struct xfs_da_node_entry * +xfs_da3_node_tree_p(struct xfs_da_intnode *dap) +{ + if (dap->hdr.info.magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)) { + struct xfs_da3_intnode *dap3 = (struct xfs_da3_intnode *)dap; + return dap3->__btree; + } + return dap->__btree; +} + +extern void xfs_da3_intnode_from_disk(struct xfs_da3_icnode_hdr *to, + struct xfs_da_intnode *from); +extern void xfs_da3_intnode_to_disk(struct xfs_da_intnode *to, + struct xfs_da3_icnode_hdr *from); #define XFS_LBSIZE(mp) (mp)->m_sb.sb_blocksize @@ -214,29 +274,29 @@ struct xfs_nameops { /* * Routines used for growing the Btree. */ -int xfs_da_node_create(xfs_da_args_t *args, xfs_dablk_t blkno, int level, - struct xfs_buf **bpp, int whichfork); -int xfs_da_split(xfs_da_state_t *state); +int xfs_da3_node_create(struct xfs_da_args *args, xfs_dablk_t blkno, + int level, struct xfs_buf **bpp, int whichfork); +int xfs_da3_split(xfs_da_state_t *state); /* * Routines used for shrinking the Btree. */ -int xfs_da_join(xfs_da_state_t *state); -void xfs_da_fixhashpath(xfs_da_state_t *state, - xfs_da_state_path_t *path_to_to_fix); +int xfs_da3_join(xfs_da_state_t *state); +void xfs_da3_fixhashpath(struct xfs_da_state *state, + struct xfs_da_state_path *path_to_to_fix); /* * Routines used for finding things in the Btree. */ -int xfs_da_node_lookup_int(xfs_da_state_t *state, int *result); -int xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, +int xfs_da3_node_lookup_int(xfs_da_state_t *state, int *result); +int xfs_da3_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, int forward, int release, int *result); /* * Utility routines. */ -int xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, +int xfs_da3_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, xfs_da_state_blk_t *new_blk); -int xfs_da_node_read(struct xfs_trans *tp, struct xfs_inode *dp, +int xfs_da3_node_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mappedbno, struct xfs_buf **bpp, int which_fork); diff --git a/libxfs/xfs_attr.c b/libxfs/xfs_attr.c index 2adf92b..bb2ccf2 100644 --- a/libxfs/xfs_attr.c +++ b/libxfs/xfs_attr.c @@ -967,7 +967,7 @@ restart: * Search to see if name already exists, and get back a pointer * to where it should go. */ - error = xfs_da_node_lookup_int(state, &retval); + error = xfs_da3_node_lookup_int(state, &retval); if (error) goto out; blk = &state->path.blk[ state->path.active-1 ]; @@ -1038,7 +1038,7 @@ restart: * in the index2/blkno2/rmtblkno2/rmtblkcnt2 fields. */ xfs_bmap_init(args->flist, args->firstblock); - error = xfs_da_split(state); + error = xfs_da3_split(state); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, &committed); @@ -1060,7 +1060,7 @@ restart: /* * Addition succeeded, update Btree hashvals. */ - xfs_da_fixhashpath(state, &state->path); + xfs_da3_fixhashpath(state, &state->path); } /* @@ -1131,7 +1131,7 @@ restart: state->blocksize = state->mp->m_sb.sb_blocksize; state->node_ents = state->mp->m_attr_node_ents; state->inleaf = 0; - error = xfs_da_node_lookup_int(state, &retval); + error = xfs_da3_node_lookup_int(state, &retval); if (error) goto out; @@ -1141,14 +1141,14 @@ restart: blk = &state->path.blk[ state->path.active-1 ]; ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC); error = xfs_attr_leaf_remove(blk->bp, args); - xfs_da_fixhashpath(state, &state->path); + xfs_da3_fixhashpath(state, &state->path); /* * Check to see if the tree needs to be collapsed. */ if (retval && (state->path.active > 1)) { xfs_bmap_init(args->flist, args->firstblock); - error = xfs_da_join(state); + error = xfs_da3_join(state); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, @@ -1226,7 +1226,7 @@ xfs_attr_node_removename(xfs_da_args_t *args) /* * Search to see if name exists, and get back a pointer to it. */ - error = xfs_da_node_lookup_int(state, &retval); + error = xfs_da3_node_lookup_int(state, &retval); if (error || (retval != EEXIST)) { if (error == 0) error = retval; @@ -1277,14 +1277,14 @@ xfs_attr_node_removename(xfs_da_args_t *args) blk = &state->path.blk[ state->path.active-1 ]; ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC); retval = xfs_attr_leaf_remove(blk->bp, args); - xfs_da_fixhashpath(state, &state->path); + xfs_da3_fixhashpath(state, &state->path); /* * Check to see if the tree needs to be collapsed. */ if (retval && (state->path.active > 1)) { xfs_bmap_init(args->flist, args->firstblock); - error = xfs_da_join(state); + error = xfs_da3_join(state); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, &committed); @@ -1430,7 +1430,7 @@ xfs_attr_refillstate(xfs_da_state_t *state) ASSERT((path->active >= 0) && (path->active < XFS_DA_NODE_MAXDEPTH)); for (blk = path->blk, level = 0; level < path->active; blk++, level++) { if (blk->disk_blkno) { - error = xfs_da_node_read(state->args->trans, + error = xfs_da3_node_read(state->args->trans, state->args->dp, blk->blkno, blk->disk_blkno, &blk->bp, XFS_ATTR_FORK); @@ -1449,7 +1449,7 @@ xfs_attr_refillstate(xfs_da_state_t *state) ASSERT((path->active >= 0) && (path->active < XFS_DA_NODE_MAXDEPTH)); for (blk = path->blk, level = 0; level < path->active; blk++, level++) { if (blk->disk_blkno) { - error = xfs_da_node_read(state->args->trans, + error = xfs_da3_node_read(state->args->trans, state->args->dp, blk->blkno, blk->disk_blkno, &blk->bp, XFS_ATTR_FORK); @@ -1489,7 +1489,7 @@ xfs_attr_node_get(xfs_da_args_t *args) /* * Search to see if name exists, and get back a pointer to it. */ - error = xfs_da_node_lookup_int(state, &retval); + error = xfs_da3_node_lookup_int(state, &retval); if (error) { retval = error; } else if (retval == EEXIST) { diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index 85cb31d..cb37198 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -703,6 +703,7 @@ xfs_attr_leaf_to_node(xfs_da_args_t *args) struct xfs_buf *bp1, *bp2; xfs_dablk_t blkno; int error; + struct xfs_da_node_entry *btree; trace_xfs_attr_leaf_to_node(args); @@ -728,16 +729,16 @@ xfs_attr_leaf_to_node(xfs_da_args_t *args) /* * Set up the new root node. */ - error = xfs_da_node_create(args, 0, 1, &bp1, XFS_ATTR_FORK); + error = xfs_da3_node_create(args, 0, 1, &bp1, XFS_ATTR_FORK); if (error) goto out; node = bp1->b_addr; leaf = bp2->b_addr; ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); /* both on-disk, don't endian-flip twice */ - node->btree[0].hashval = - leaf->entries[be16_to_cpu(leaf->hdr.count)-1 ].hashval; - node->btree[0].before = cpu_to_be32(blkno); + btree = xfs_da3_node_tree_p(node); + btree[0].hashval = leaf->entries[be16_to_cpu(leaf->hdr.count)-1 ].hashval; + btree[0].before = cpu_to_be32(blkno); node->hdr.count = cpu_to_be16(1); xfs_trans_log_buf(args->trans, bp1, 0, XFS_LBSIZE(dp->i_mount) - 1); error = 0; @@ -825,7 +826,7 @@ xfs_attr_leaf_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * NOTE: rebalance() currently depends on the 2nd block being empty. */ xfs_attr_leaf_rebalance(state, oldblk, newblk); - error = xfs_da_blk_link(state, oldblk, newblk); + error = xfs_da3_blk_link(state, oldblk, newblk); if (error) return(error); @@ -1453,7 +1454,7 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) */ forward = (info->forw != 0); memcpy(&state->altpath, &state->path, sizeof(state->path)); - error = xfs_da_path_shift(state, &state->altpath, forward, + error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &retval); if (error) return(error); @@ -1510,10 +1511,10 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) */ memcpy(&state->altpath, &state->path, sizeof(state->path)); if (blkno < blk->blkno) { - error = xfs_da_path_shift(state, &state->altpath, forward, + error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &retval); } else { - error = xfs_da_path_shift(state, &state->path, forward, + error = xfs_da3_path_shift(state, &state->path, forward, 0, &retval); } if (error) diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index 63cd299..3176626 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -31,69 +32,195 @@ /* * Routines used for growing the Btree. */ -STATIC int xfs_da_root_split(xfs_da_state_t *state, +STATIC int xfs_da3_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *existing_root, xfs_da_state_blk_t *new_child); -STATIC int xfs_da_node_split(xfs_da_state_t *state, +STATIC int xfs_da3_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *existing_blk, xfs_da_state_blk_t *split_blk, xfs_da_state_blk_t *blk_to_add, int treelevel, int *result); -STATIC void xfs_da_node_rebalance(xfs_da_state_t *state, +STATIC void xfs_da3_node_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *node_blk_1, xfs_da_state_blk_t *node_blk_2); -STATIC void xfs_da_node_add(xfs_da_state_t *state, +STATIC void xfs_da3_node_add(xfs_da_state_t *state, xfs_da_state_blk_t *old_node_blk, xfs_da_state_blk_t *new_node_blk); /* * Routines used for shrinking the Btree. */ -STATIC int xfs_da_root_join(xfs_da_state_t *state, +STATIC int xfs_da3_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk); -STATIC int xfs_da_node_toosmall(xfs_da_state_t *state, int *retval); -STATIC void xfs_da_node_remove(xfs_da_state_t *state, +STATIC int xfs_da3_node_toosmall(xfs_da_state_t *state, int *retval); +STATIC void xfs_da3_node_remove(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk); -STATIC void xfs_da_node_unbalance(xfs_da_state_t *state, +STATIC void xfs_da3_node_unbalance(xfs_da_state_t *state, xfs_da_state_blk_t *src_node_blk, xfs_da_state_blk_t *dst_node_blk); /* * Utility routines. */ -STATIC uint xfs_da_node_lasthash(struct xfs_buf *bp, int *count); -STATIC int xfs_da_node_order(struct xfs_buf *node1_bp, - struct xfs_buf *node2_bp); -STATIC int xfs_da_blk_unlink(xfs_da_state_t *state, +STATIC int xfs_da3_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, xfs_da_state_blk_t *save_blk); -STATIC void xfs_da_state_kill_altpath(xfs_da_state_t *state); -static void -xfs_da_node_verify( + +kmem_zone_t *xfs_da_state_zone; /* anchor for state struct zone */ + +/* + * Allocate a dir-state structure. + * We don't put them on the stack since they're large. + */ +xfs_da_state_t * +xfs_da_state_alloc(void) +{ + return kmem_zone_zalloc(xfs_da_state_zone, KM_NOFS); +} + +/* + * Kill the altpath contents of a da-state structure. + */ +STATIC void +xfs_da_state_kill_altpath(xfs_da_state_t *state) +{ + int i; + + for (i = 0; i < state->altpath.active; i++) + state->altpath.blk[i].bp = NULL; + state->altpath.active = 0; +} + +/* + * Free a da-state structure. + */ +void +xfs_da_state_free(xfs_da_state_t *state) +{ + xfs_da_state_kill_altpath(state); +#ifdef DEBUG + memset((char *)state, 0, sizeof(*state)); +#endif /* DEBUG */ + kmem_zone_free(xfs_da_state_zone, state); +} + +void +xfs_da3_node_hdr_from_disk( + struct xfs_da3_icnode_hdr *to, + struct xfs_da_intnode *from) +{ + ASSERT(from->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || + from->hdr.info.magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)); + + if (from->hdr.info.magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)) { + struct xfs_da3_node_hdr *hdr3 = (struct xfs_da3_node_hdr *)from; + + to->forw = be32_to_cpu(hdr3->info.hdr.forw); + to->back = be32_to_cpu(hdr3->info.hdr.back); + to->magic = be16_to_cpu(hdr3->info.hdr.magic); + to->count = be16_to_cpu(hdr3->count); + to->level = be16_to_cpu(hdr3->__level); + return; + } + to->forw = be32_to_cpu(from->hdr.info.forw); + to->back = be32_to_cpu(from->hdr.info.back); + to->magic = be16_to_cpu(from->hdr.info.magic); + to->count = be16_to_cpu(from->hdr.count); + to->level = be16_to_cpu(from->hdr.__level); +} + +void +xfs_da3_node_hdr_to_disk( + struct xfs_da_intnode *to, + struct xfs_da3_icnode_hdr *from) +{ + ASSERT(from->magic == XFS_DA_NODE_MAGIC || + from->magic == XFS_DA3_NODE_MAGIC); + + if (from->magic == XFS_DA3_NODE_MAGIC) { + struct xfs_da3_node_hdr *hdr3 = (struct xfs_da3_node_hdr *)to; + + hdr3->info.hdr.forw = cpu_to_be32(from->forw); + hdr3->info.hdr.back = cpu_to_be32(from->back); + hdr3->info.hdr.magic = cpu_to_be16(from->magic); + hdr3->count = cpu_to_be16(from->count); + hdr3->__level = cpu_to_be16(from->level); + return; + } + to->hdr.info.forw = cpu_to_be32(from->forw); + to->hdr.info.back = cpu_to_be32(from->back); + to->hdr.info.magic = cpu_to_be16(from->magic); + to->hdr.count = cpu_to_be16(from->count); + to->hdr.__level = cpu_to_be16(from->level); +} + +static bool +xfs_da3_node_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_da_node_hdr *hdr = bp->b_addr; - int block_ok = 0; - - block_ok = hdr->info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC); - block_ok = block_ok && - be16_to_cpu(hdr->level) > 0 && - be16_to_cpu(hdr->count) > 0 ; - if (!block_ok) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); - xfs_buf_ioerror(bp, EFSCORRUPTED); + struct xfs_da_intnode *hdr = bp->b_addr; + struct xfs_da3_icnode_hdr ichdr; + + xfs_da3_node_hdr_from_disk(&ichdr, hdr); + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_da3_node_hdr *hdr3 = bp->b_addr; + + if (ichdr.magic != XFS_DA3_NODE_MAGIC) + return false; + + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) + return false; + if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) + return false; + } else { + if (ichdr.magic != XFS_DA_NODE_MAGIC) + return false; } + if (ichdr.level == 0) + return false; + if (ichdr.level > XFS_DA_NODE_MAXDEPTH) + return false; + if (ichdr.count == 0) + return false; + + /* + * we don't know if the node is for and attribute or directory tree, + * so only fail if the count is outside both bounds + */ + if (ichdr.count > mp->m_dir_node_ents && + ichdr.count > mp->m_attr_node_ents) + return false; + + /* XXX: hash order check? */ + return true; } static void -xfs_da_node_write_verify( +xfs_da3_node_write_verify( struct xfs_buf *bp) { - xfs_da_node_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + struct xfs_da3_node_hdr *hdr3 = bp->b_addr; + + if (!xfs_da3_node_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + hdr3->info.lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_DA3_NODE_CRC_OFF); } /* @@ -103,16 +230,22 @@ xfs_da_node_write_verify( * format of the block being read. */ static void -xfs_da_node_read_verify( +xfs_da3_node_read_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_da_blkinfo *info = bp->b_addr; switch (be16_to_cpu(info->magic)) { + case XFS_DA3_NODE_MAGIC: + if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_DA3_NODE_CRC_OFF)) + break; + /* fall through */ case XFS_DA_NODE_MAGIC: - xfs_da_node_verify(bp); - break; + if (!xfs_da3_node_verify(bp)) + break; + return; case XFS_ATTR_LEAF_MAGIC: bp->b_ops = &xfs_attr_leaf_buf_ops; bp->b_ops->verify_read(bp); @@ -123,21 +256,22 @@ xfs_da_node_read_verify( bp->b_ops->verify_read(bp); return; default: - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, - mp, info); - xfs_buf_ioerror(bp, EFSCORRUPTED); break; } + + /* corrupt block */ + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); } -const struct xfs_buf_ops xfs_da_node_buf_ops = { - .verify_read = xfs_da_node_read_verify, - .verify_write = xfs_da_node_write_verify, +const struct xfs_buf_ops xfs_da3_node_buf_ops = { + .verify_read = xfs_da3_node_read_verify, + .verify_write = xfs_da3_node_write_verify, }; int -xfs_da_node_read( +xfs_da3_node_read( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, @@ -146,7 +280,7 @@ xfs_da_node_read( int which_fork) { return xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, - which_fork, &xfs_da_node_buf_ops); + which_fork, &xfs_da3_node_buf_ops); } /*======================================================================== @@ -157,33 +291,45 @@ xfs_da_node_read( * Create the initial contents of an intermediate node. */ int -xfs_da_node_create(xfs_da_args_t *args, xfs_dablk_t blkno, int level, - struct xfs_buf **bpp, int whichfork) +xfs_da3_node_create( + struct xfs_da_args *args, + xfs_dablk_t blkno, + int level, + struct xfs_buf **bpp, + int whichfork) { - xfs_da_intnode_t *node; - struct xfs_buf *bp; - int error; - xfs_trans_t *tp; + struct xfs_da_intnode *node; + struct xfs_trans *tp = args->trans; + struct xfs_mount *mp = tp->t_mountp; + struct xfs_da3_icnode_hdr ichdr = {0}; + struct xfs_buf *bp; + int error; trace_xfs_da_node_create(args); + ASSERT(level <= XFS_DA_NODE_MAXDEPTH); - tp = args->trans; error = xfs_da_get_buf(tp, args->dp, blkno, -1, &bp, whichfork); if (error) return(error); - ASSERT(bp != NULL); node = bp->b_addr; - node->hdr.info.forw = 0; - node->hdr.info.back = 0; - node->hdr.info.magic = cpu_to_be16(XFS_DA_NODE_MAGIC); - node->hdr.info.pad = 0; - node->hdr.count = 0; - node->hdr.level = cpu_to_be16(level); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_da3_node_hdr *hdr3 = bp->b_addr; + + ichdr.magic = XFS_DA3_NODE_MAGIC; + hdr3->info.blkno = cpu_to_be64(bp->b_bn); + hdr3->info.owner = cpu_to_be64(args->dp->i_ino); + uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_uuid); + } else { + ichdr.magic = XFS_DA_NODE_MAGIC; + } + ichdr.level = level; + + xfs_da3_node_hdr_to_disk(node, &ichdr); xfs_trans_log_buf(tp, bp, - XFS_DA_LOGRANGE(node, &node->hdr, sizeof(node->hdr))); + XFS_DA_LOGRANGE(node, &node->hdr, xfs_da3_node_hdr_size(node))); - bp->b_ops = &xfs_da_node_buf_ops; + bp->b_ops = &xfs_da3_node_buf_ops; *bpp = bp; return(0); } @@ -193,12 +339,18 @@ xfs_da_node_create(xfs_da_args_t *args, xfs_dablk_t blkno, int level, * intermediate nodes, rebalance, etc. */ int /* error */ -xfs_da_split(xfs_da_state_t *state) +xfs_da3_split( + struct xfs_da_state *state) { - xfs_da_state_blk_t *oldblk, *newblk, *addblk; - xfs_da_intnode_t *node; - struct xfs_buf *bp; - int max, action, error, i; + struct xfs_da_state_blk *oldblk; + struct xfs_da_state_blk *newblk; + struct xfs_da_state_blk *addblk; + struct xfs_da_intnode *node; + struct xfs_buf *bp; + int max; + int action; + int error; + int i; trace_xfs_da_split(state->args); @@ -260,7 +412,7 @@ xfs_da_split(xfs_da_state_t *state) addblk = newblk; break; case XFS_DA_NODE_MAGIC: - error = xfs_da_node_split(state, oldblk, newblk, addblk, + error = xfs_da3_node_split(state, oldblk, newblk, addblk, max - i, &action); addblk->bp = NULL; if (error) @@ -278,7 +430,7 @@ xfs_da_split(xfs_da_state_t *state) /* * Update the btree to show the new hashval for this child. */ - xfs_da_fixhashpath(state, &state->path); + xfs_da3_fixhashpath(state, &state->path); } if (!addblk) return(0); @@ -288,7 +440,7 @@ xfs_da_split(xfs_da_state_t *state) */ ASSERT(state->path.active == 0); oldblk = &state->path.blk[0]; - error = xfs_da_root_split(state, oldblk, addblk); + error = xfs_da3_root_split(state, oldblk, addblk); if (error) { addblk->bp = NULL; return(error); /* GROT: dir is inconsistent */ @@ -299,8 +451,10 @@ xfs_da_split(xfs_da_state_t *state) * just got bumped because of the addition of a new root node. * There might be three blocks involved if a double split occurred, * and the original block 0 could be at any position in the list. + * + * Note: the info structures being modified here for both v2 and v3 da + * headers, so we can do this linkage just using the v2 structures. */ - node = oldblk->bp->b_addr; if (node->hdr.info.forw) { if (be32_to_cpu(node->hdr.info.forw) == addblk->blkno) { @@ -339,18 +493,25 @@ xfs_da_split(xfs_da_state_t *state) * the EOF, extending the inode in process. */ STATIC int /* error */ -xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, - xfs_da_state_blk_t *blk2) +xfs_da3_root_split( + struct xfs_da_state *state, + struct xfs_da_state_blk *blk1, + struct xfs_da_state_blk *blk2) { - xfs_da_intnode_t *node, *oldroot; - xfs_da_args_t *args; - xfs_dablk_t blkno; - struct xfs_buf *bp; - int error, size; - xfs_inode_t *dp; - xfs_trans_t *tp; - xfs_mount_t *mp; - xfs_dir2_leaf_t *leaf; + struct xfs_da_intnode *node; + struct xfs_da_intnode *oldroot; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; + struct xfs_da_args *args; + struct xfs_buf *bp; + struct xfs_inode *dp; + struct xfs_trans *tp; + struct xfs_mount *mp; + struct xfs_dir2_leaf *leaf; + xfs_dablk_t blkno; + int level; + int error; + int size; trace_xfs_da_root_split(state->args); @@ -359,22 +520,26 @@ xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * to a free space somewhere. */ args = state->args; - ASSERT(args != NULL); error = xfs_da_grow_inode(args, &blkno); if (error) - return(error); + return error; + dp = args->dp; tp = args->trans; mp = state->mp; error = xfs_da_get_buf(tp, dp, blkno, -1, &bp, args->whichfork); if (error) - return(error); - ASSERT(bp != NULL); + return error; node = bp->b_addr; oldroot = blk1->bp->b_addr; - if (oldroot->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)) { - size = (int)((char *)&oldroot->btree[be16_to_cpu(oldroot->hdr.count)] - - (char *)oldroot); + if (oldroot->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || + oldroot->hdr.info.magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)) { + struct xfs_da3_icnode_hdr nodehdr; + + xfs_da3_node_hdr_from_disk(&nodehdr, oldroot); + btree = xfs_da3_node_tree_p(oldroot); + size = (int)((char *)&btree[nodehdr.count] - (char *)oldroot); + level = nodehdr.level; } else { struct xfs_dir3_icleaf_hdr leafhdr; struct xfs_dir2_leaf_entry *ents; @@ -386,9 +551,22 @@ xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, ASSERT(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || leafhdr.magic == XFS_DIR3_LEAFN_MAGIC); size = (int)((char *)&ents[leafhdr.count] - (char *)leaf); + level = 0; } - /* XXX: can't just copy CRC headers from one block to another */ + + /* + * we can copy most of the information in the node from one block to + * another, but for CRC enabled headers we have to make sure that the + * block specific identifiers are kept intact. We update the buffer + * directly for this. + */ memcpy(node, oldroot, size); + if (oldroot->hdr.info.magic == cpu_to_be16(XFS_DA3_NODE_MAGIC) || + oldroot->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)) { + struct xfs_da3_intnode *node3 = (struct xfs_da3_intnode *)node; + + node3->hdr.info.blkno = cpu_to_be64(bp->b_bn); + } xfs_trans_log_buf(tp, bp, 0, size - 1); bp->b_ops = blk1->bp->b_ops; @@ -398,17 +576,21 @@ xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, /* * Set up the new root node. */ - error = xfs_da_node_create(args, + error = xfs_da3_node_create(args, (args->whichfork == XFS_DATA_FORK) ? mp->m_dirleafblk : 0, - be16_to_cpu(node->hdr.level) + 1, &bp, args->whichfork); + level + 1, &bp, args->whichfork); if (error) - return(error); + return error; + node = bp->b_addr; - node->btree[0].hashval = cpu_to_be32(blk1->hashval); - node->btree[0].before = cpu_to_be32(blk1->blkno); - node->btree[1].hashval = cpu_to_be32(blk2->hashval); - node->btree[1].before = cpu_to_be32(blk2->blkno); - node->hdr.count = cpu_to_be16(2); + xfs_da3_node_hdr_from_disk(&nodehdr, node); + btree = xfs_da3_node_tree_p(node); + btree[0].hashval = cpu_to_be32(blk1->hashval); + btree[0].before = cpu_to_be32(blk1->blkno); + btree[1].hashval = cpu_to_be32(blk2->hashval); + btree[1].before = cpu_to_be32(blk2->blkno); + nodehdr.count = 2; + xfs_da3_node_hdr_to_disk(node, &nodehdr); #ifdef DEBUG if (oldroot->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || @@ -422,30 +604,34 @@ xfs_da_root_split(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, /* Header is already logged by xfs_da_node_create */ xfs_trans_log_buf(tp, bp, - XFS_DA_LOGRANGE(node, node->btree, - sizeof(xfs_da_node_entry_t) * 2)); + XFS_DA_LOGRANGE(node, btree, sizeof(xfs_da_node_entry_t) * 2)); - return(0); + return 0; } /* * Split the node, rebalance, then add the new entry. */ STATIC int /* error */ -xfs_da_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, - xfs_da_state_blk_t *newblk, - xfs_da_state_blk_t *addblk, - int treelevel, int *result) +xfs_da3_node_split( + struct xfs_da_state *state, + struct xfs_da_state_blk *oldblk, + struct xfs_da_state_blk *newblk, + struct xfs_da_state_blk *addblk, + int treelevel, + int *result) { - xfs_da_intnode_t *node; - xfs_dablk_t blkno; - int newcount, error; - int useextra; + struct xfs_da_intnode *node; + struct xfs_da3_icnode_hdr nodehdr; + xfs_dablk_t blkno; + int newcount; + int error; + int useextra; trace_xfs_da_node_split(state->args); node = oldblk->bp->b_addr; - ASSERT(node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); + xfs_da3_node_hdr_from_disk(&nodehdr, node); /* * With V2 dirs the extra block is data or freespace. @@ -455,7 +641,7 @@ xfs_da_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, /* * Do we have to split the node? */ - if ((be16_to_cpu(node->hdr.count) + newcount) > state->node_ents) { + if (nodehdr.count + newcount > state->node_ents) { /* * Allocate a new node, add to the doubly linked chain of * nodes, then move some of our excess entries into it. @@ -464,14 +650,14 @@ xfs_da_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, if (error) return(error); /* GROT: dir is inconsistent */ - error = xfs_da_node_create(state->args, blkno, treelevel, + error = xfs_da3_node_create(state->args, blkno, treelevel, &newblk->bp, state->args->whichfork); if (error) return(error); /* GROT: dir is inconsistent */ newblk->blkno = blkno; newblk->magic = XFS_DA_NODE_MAGIC; - xfs_da_node_rebalance(state, oldblk, newblk); - error = xfs_da_blk_link(state, oldblk, newblk); + xfs_da3_node_rebalance(state, oldblk, newblk); + error = xfs_da3_blk_link(state, oldblk, newblk); if (error) return(error); *result = 1; @@ -483,7 +669,7 @@ xfs_da_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * Insert the new entry(s) into the correct block * (updating last hashval in the process). * - * xfs_da_node_add() inserts BEFORE the given index, + * xfs_da3_node_add() inserts BEFORE the given index, * and as a result of using node_lookup_int() we always * point to a valid entry (not after one), but a split * operation always results in a new block whose hashvals @@ -492,22 +678,23 @@ xfs_da_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * If we had double-split op below us, then add the extra block too. */ node = oldblk->bp->b_addr; - if (oldblk->index <= be16_to_cpu(node->hdr.count)) { + xfs_da3_node_hdr_from_disk(&nodehdr, node); + if (oldblk->index <= nodehdr.count) { oldblk->index++; - xfs_da_node_add(state, oldblk, addblk); + xfs_da3_node_add(state, oldblk, addblk); if (useextra) { if (state->extraafter) oldblk->index++; - xfs_da_node_add(state, oldblk, &state->extrablk); + xfs_da3_node_add(state, oldblk, &state->extrablk); state->extravalid = 0; } } else { newblk->index++; - xfs_da_node_add(state, newblk, addblk); + xfs_da3_node_add(state, newblk, addblk); if (useextra) { if (state->extraafter) newblk->index++; - xfs_da_node_add(state, newblk, &state->extrablk); + xfs_da3_node_add(state, newblk, &state->extrablk); state->extravalid = 0; } } @@ -522,33 +709,53 @@ xfs_da_node_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * NOTE: if blk2 is empty, then it will get the upper half of blk1. */ STATIC void -xfs_da_node_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, - xfs_da_state_blk_t *blk2) +xfs_da3_node_rebalance( + struct xfs_da_state *state, + struct xfs_da_state_blk *blk1, + struct xfs_da_state_blk *blk2) { - xfs_da_intnode_t *node1, *node2, *tmpnode; - xfs_da_node_entry_t *btree_s, *btree_d; - int count, tmp; - xfs_trans_t *tp; + struct xfs_da_intnode *node1; + struct xfs_da_intnode *node2; + struct xfs_da_intnode *tmpnode; + struct xfs_da_node_entry *btree1; + struct xfs_da_node_entry *btree2; + struct xfs_da_node_entry *btree_s; + struct xfs_da_node_entry *btree_d; + struct xfs_da3_icnode_hdr nodehdr1; + struct xfs_da3_icnode_hdr nodehdr2; + struct xfs_trans *tp; + int count; + int tmp; + int swap = 0; trace_xfs_da_node_rebalance(state->args); node1 = blk1->bp->b_addr; node2 = blk2->bp->b_addr; + xfs_da3_node_hdr_from_disk(&nodehdr1, node1); + xfs_da3_node_hdr_from_disk(&nodehdr2, node2); + btree1 = xfs_da3_node_tree_p(node1); + btree2 = xfs_da3_node_tree_p(node2); + /* * Figure out how many entries need to move, and in which direction. * Swap the nodes around if that makes it simpler. */ - if ((be16_to_cpu(node1->hdr.count) > 0) && (be16_to_cpu(node2->hdr.count) > 0) && - ((be32_to_cpu(node2->btree[0].hashval) < be32_to_cpu(node1->btree[0].hashval)) || - (be32_to_cpu(node2->btree[be16_to_cpu(node2->hdr.count)-1].hashval) < - be32_to_cpu(node1->btree[be16_to_cpu(node1->hdr.count)-1].hashval)))) { + if (nodehdr1.count > 0 && nodehdr2.count > 0 && + ((be32_to_cpu(btree2[0].hashval) < be32_to_cpu(btree1[0].hashval)) || + (be32_to_cpu(btree2[nodehdr2.count - 1].hashval) < + be32_to_cpu(btree1[nodehdr1.count - 1].hashval)))) { tmpnode = node1; node1 = node2; node2 = tmpnode; + xfs_da3_node_hdr_from_disk(&nodehdr1, node1); + xfs_da3_node_hdr_from_disk(&nodehdr2, node2); + btree1 = xfs_da3_node_tree_p(node1); + btree2 = xfs_da3_node_tree_p(node2); + swap = 1; } - ASSERT(node1->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - ASSERT(node2->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - count = (be16_to_cpu(node1->hdr.count) - be16_to_cpu(node2->hdr.count)) / 2; + + count = (nodehdr1.count - nodehdr2.count) / 2; if (count == 0) return; tp = state->args->trans; @@ -559,10 +766,11 @@ xfs_da_node_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, /* * Move elements in node2 up to make a hole. */ - if ((tmp = be16_to_cpu(node2->hdr.count)) > 0) { + tmp = nodehdr2.count; + if (tmp > 0) { tmp *= (uint)sizeof(xfs_da_node_entry_t); - btree_s = &node2->btree[0]; - btree_d = &node2->btree[count]; + btree_s = &btree2[0]; + btree_d = &btree2[count]; memmove(btree_d, btree_s, tmp); } @@ -570,12 +778,12 @@ xfs_da_node_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * Move the req'd B-tree elements from high in node1 to * low in node2. */ - be16_add_cpu(&node2->hdr.count, count); + nodehdr2.count += count; tmp = count * (uint)sizeof(xfs_da_node_entry_t); - btree_s = &node1->btree[be16_to_cpu(node1->hdr.count) - count]; - btree_d = &node2->btree[0]; + btree_s = &btree1[nodehdr1.count- count]; + btree_d = &btree2[0]; memcpy(btree_d, btree_s, tmp); - be16_add_cpu(&node1->hdr.count, -count); + nodehdr1.count -= count; } else { /* * Move the req'd B-tree elements from low in node2 to @@ -583,49 +791,60 @@ xfs_da_node_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, */ count = -count; tmp = count * (uint)sizeof(xfs_da_node_entry_t); - btree_s = &node2->btree[0]; - btree_d = &node1->btree[be16_to_cpu(node1->hdr.count)]; + btree_s = &btree2[0]; + btree_d = &btree1[nodehdr1.count]; memcpy(btree_d, btree_s, tmp); - be16_add_cpu(&node1->hdr.count, count); + nodehdr1.count += count; + xfs_trans_log_buf(tp, blk1->bp, XFS_DA_LOGRANGE(node1, btree_d, tmp)); /* * Move elements in node2 down to fill the hole. */ - tmp = be16_to_cpu(node2->hdr.count) - count; + tmp = nodehdr2.count - count; tmp *= (uint)sizeof(xfs_da_node_entry_t); - btree_s = &node2->btree[count]; - btree_d = &node2->btree[0]; + btree_s = &btree2[count]; + btree_d = &btree2[0]; memmove(btree_d, btree_s, tmp); - be16_add_cpu(&node2->hdr.count, -count); + nodehdr2.count -= count; } /* * Log header of node 1 and all current bits of node 2. */ + xfs_da3_node_hdr_to_disk(node1, &nodehdr1); xfs_trans_log_buf(tp, blk1->bp, - XFS_DA_LOGRANGE(node1, &node1->hdr, sizeof(node1->hdr))); + XFS_DA_LOGRANGE(node1, &node1->hdr, + xfs_da3_node_hdr_size(node1))); + + xfs_da3_node_hdr_to_disk(node2, &nodehdr2); xfs_trans_log_buf(tp, blk2->bp, XFS_DA_LOGRANGE(node2, &node2->hdr, - sizeof(node2->hdr) + - sizeof(node2->btree[0]) * be16_to_cpu(node2->hdr.count))); + xfs_da3_node_hdr_size(node2) + + (sizeof(btree2[0]) * nodehdr2.count))); /* * Record the last hashval from each block for upward propagation. * (note: don't use the swapped node pointers) */ - node1 = blk1->bp->b_addr; - node2 = blk2->bp->b_addr; - blk1->hashval = be32_to_cpu(node1->btree[be16_to_cpu(node1->hdr.count)-1].hashval); - blk2->hashval = be32_to_cpu(node2->btree[be16_to_cpu(node2->hdr.count)-1].hashval); + if (swap) { + node1 = blk1->bp->b_addr; + node2 = blk2->bp->b_addr; + xfs_da3_node_hdr_from_disk(&nodehdr1, node1); + xfs_da3_node_hdr_from_disk(&nodehdr2, node2); + btree1 = xfs_da3_node_tree_p(node1); + btree2 = xfs_da3_node_tree_p(node2); + } + blk1->hashval = be32_to_cpu(btree1[nodehdr1.count - 1].hashval); + blk2->hashval = be32_to_cpu(btree2[nodehdr2.count - 1].hashval); /* * Adjust the expected index for insertion. */ - if (blk1->index >= be16_to_cpu(node1->hdr.count)) { - blk2->index = blk1->index - be16_to_cpu(node1->hdr.count); - blk1->index = be16_to_cpu(node1->hdr.count) + 1; /* make it invalid */ + if (blk1->index >= nodehdr1.count) { + blk2->index = blk1->index - nodehdr1.count; + blk1->index = nodehdr1.count + 1; /* make it invalid */ } } @@ -633,18 +852,23 @@ xfs_da_node_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * Add a new entry to an intermediate node. */ STATIC void -xfs_da_node_add(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, - xfs_da_state_blk_t *newblk) +xfs_da3_node_add( + struct xfs_da_state *state, + struct xfs_da_state_blk *oldblk, + struct xfs_da_state_blk *newblk) { - xfs_da_intnode_t *node; - xfs_da_node_entry_t *btree; - int tmp; + struct xfs_da_intnode *node; + struct xfs_da3_icnode_hdr nodehdr; + struct xfs_da_node_entry *btree; + int tmp; trace_xfs_da_node_add(state->args); node = oldblk->bp->b_addr; - ASSERT(node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - ASSERT((oldblk->index >= 0) && (oldblk->index <= be16_to_cpu(node->hdr.count))); + xfs_da3_node_hdr_from_disk(&nodehdr, node); + btree = xfs_da3_node_tree_p(node); + + ASSERT(oldblk->index >= 0 && oldblk->index <= nodehdr.count); ASSERT(newblk->blkno != 0); if (state->args->whichfork == XFS_DATA_FORK) ASSERT(newblk->blkno >= state->mp->m_dirleafblk && @@ -654,23 +878,25 @@ xfs_da_node_add(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * We may need to make some room before we insert the new node. */ tmp = 0; - btree = &node->btree[ oldblk->index ]; - if (oldblk->index < be16_to_cpu(node->hdr.count)) { - tmp = (be16_to_cpu(node->hdr.count) - oldblk->index) * (uint)sizeof(*btree); - memmove(btree + 1, btree, tmp); + if (oldblk->index < nodehdr.count) { + tmp = (nodehdr.count - oldblk->index) * (uint)sizeof(*btree); + memmove(&btree[oldblk->index + 1], &btree[oldblk->index], tmp); } - btree->hashval = cpu_to_be32(newblk->hashval); - btree->before = cpu_to_be32(newblk->blkno); + btree[oldblk->index].hashval = cpu_to_be32(newblk->hashval); + btree[oldblk->index].before = cpu_to_be32(newblk->blkno); xfs_trans_log_buf(state->args->trans, oldblk->bp, - XFS_DA_LOGRANGE(node, btree, tmp + sizeof(*btree))); - be16_add_cpu(&node->hdr.count, 1); + XFS_DA_LOGRANGE(node, &btree[oldblk->index], + tmp + sizeof(*btree))); + + nodehdr.count += 1; + xfs_da3_node_hdr_to_disk(node, &nodehdr); xfs_trans_log_buf(state->args->trans, oldblk->bp, - XFS_DA_LOGRANGE(node, &node->hdr, sizeof(node->hdr))); + XFS_DA_LOGRANGE(node, &node->hdr, xfs_da3_node_hdr_size(node))); /* * Copy the last hash value from the oldblk to propagate upwards. */ - oldblk->hashval = be32_to_cpu(node->btree[be16_to_cpu(node->hdr.count)-1 ].hashval); + oldblk->hashval = be32_to_cpu(btree[nodehdr.count - 1].hashval); } /*======================================================================== @@ -682,14 +908,16 @@ xfs_da_node_add(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * possibly deallocating that block, etc... */ int -xfs_da_join(xfs_da_state_t *state) +xfs_da3_join( + struct xfs_da_state *state) { - xfs_da_state_blk_t *drop_blk, *save_blk; - int action, error; + struct xfs_da_state_blk *drop_blk; + struct xfs_da_state_blk *save_blk; + int action = 0; + int error; trace_xfs_da_join(state->args); - action = 0; drop_blk = &state->path.blk[ state->path.active-1 ]; save_blk = &state->altpath.blk[ state->path.active-1 ]; ASSERT(state->path.blk[0].magic == XFS_DA_NODE_MAGIC); @@ -730,18 +958,18 @@ xfs_da_join(xfs_da_state_t *state) * Remove the offending node, fixup hashvals, * check for a toosmall neighbor. */ - xfs_da_node_remove(state, drop_blk); - xfs_da_fixhashpath(state, &state->path); - error = xfs_da_node_toosmall(state, &action); + xfs_da3_node_remove(state, drop_blk); + xfs_da3_fixhashpath(state, &state->path); + error = xfs_da3_node_toosmall(state, &action); if (error) return(error); if (action == 0) return 0; - xfs_da_node_unbalance(state, drop_blk, save_blk); + xfs_da3_node_unbalance(state, drop_blk, save_blk); break; } - xfs_da_fixhashpath(state, &state->altpath); - error = xfs_da_blk_unlink(state, drop_blk, save_blk); + xfs_da3_fixhashpath(state, &state->altpath); + error = xfs_da3_blk_unlink(state, drop_blk, save_blk); xfs_da_state_kill_altpath(state); if (error) return(error); @@ -756,9 +984,9 @@ xfs_da_join(xfs_da_state_t *state) * we only have one entry in the root, make the child block * the new root. */ - xfs_da_node_remove(state, drop_blk); - xfs_da_fixhashpath(state, &state->path); - error = xfs_da_root_join(state, &state->path.blk[0]); + xfs_da3_node_remove(state, drop_blk); + xfs_da3_fixhashpath(state, &state->path); + error = xfs_da3_root_join(state, &state->path.blk[0]); return(error); } @@ -772,8 +1000,10 @@ xfs_da_blkinfo_onlychild_validate(struct xfs_da_blkinfo *blkinfo, __u16 level) ASSERT(magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC) || magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - } else - ASSERT(magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); + } else { + ASSERT(magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || + magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)); + } ASSERT(!blkinfo->forw); ASSERT(!blkinfo->back); } @@ -786,52 +1016,60 @@ xfs_da_blkinfo_onlychild_validate(struct xfs_da_blkinfo *blkinfo, __u16 level) * the old root to block 0 as the new root node. */ STATIC int -xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk) +xfs_da3_root_join( + struct xfs_da_state *state, + struct xfs_da_state_blk *root_blk) { - xfs_da_intnode_t *oldroot; - xfs_da_args_t *args; - xfs_dablk_t child; - struct xfs_buf *bp; - int error; + struct xfs_da_intnode *oldroot; + struct xfs_da_args *args; + xfs_dablk_t child; + struct xfs_buf *bp; + struct xfs_da3_icnode_hdr oldroothdr; + struct xfs_da_node_entry *btree; + int error; trace_xfs_da_root_join(state->args); - args = state->args; - ASSERT(args != NULL); ASSERT(root_blk->magic == XFS_DA_NODE_MAGIC); + + args = state->args; oldroot = root_blk->bp->b_addr; - ASSERT(oldroot->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - ASSERT(!oldroot->hdr.info.forw); - ASSERT(!oldroot->hdr.info.back); + xfs_da3_node_hdr_from_disk(&oldroothdr, oldroot); + ASSERT(oldroothdr.forw == 0); + ASSERT(oldroothdr.back == 0); /* * If the root has more than one child, then don't do anything. */ - if (be16_to_cpu(oldroot->hdr.count) > 1) - return(0); + if (oldroothdr.count > 1) + return 0; /* * Read in the (only) child block, then copy those bytes into * the root block's buffer and free the original child block. */ - child = be32_to_cpu(oldroot->btree[0].before); + btree = xfs_da3_node_tree_p(oldroot); + child = be32_to_cpu(btree[0].before); ASSERT(child != 0); - error = xfs_da_node_read(args->trans, args->dp, child, -1, &bp, + error = xfs_da3_node_read(args->trans, args->dp, child, -1, &bp, args->whichfork); if (error) - return(error); - ASSERT(bp != NULL); - xfs_da_blkinfo_onlychild_validate(bp->b_addr, - be16_to_cpu(oldroot->hdr.level)); + return error; + xfs_da_blkinfo_onlychild_validate(bp->b_addr, oldroothdr.level); /* * This could be copying a leaf back into the root block in the case of * there only being a single leaf block left in the tree. Hence we have * to update the b_ops pointer as well to match the buffer type change - * that could occur. + * that could occur. For dir3 blocks we also need to update the block + * number in the buffer header. */ memcpy(root_blk->bp->b_addr, bp->b_addr, state->blocksize); root_blk->bp->b_ops = bp->b_ops; + if (oldroothdr.magic == XFS_DA3_NODE_MAGIC) { + struct xfs_da3_blkinfo *da3 = root_blk->bp->b_addr; + da3->blkno = cpu_to_be64(root_blk->bp->b_bn); + } xfs_trans_log_buf(args->trans, root_blk->bp, 0, state->blocksize - 1); error = xfs_da_shrink_inode(args, child, bp); return(error); @@ -847,14 +1085,21 @@ xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk) * If nothing can be done, return 0. */ STATIC int -xfs_da_node_toosmall(xfs_da_state_t *state, int *action) +xfs_da3_node_toosmall( + struct xfs_da_state *state, + int *action) { - xfs_da_intnode_t *node; - xfs_da_state_blk_t *blk; - xfs_da_blkinfo_t *info; - int count, forward, error, retval, i; - xfs_dablk_t blkno; - struct xfs_buf *bp; + struct xfs_da_intnode *node; + struct xfs_da_state_blk *blk; + struct xfs_da_blkinfo *info; + xfs_dablk_t blkno; + struct xfs_buf *bp; + struct xfs_da3_icnode_hdr nodehdr; + int count; + int forward; + int error; + int retval; + int i; trace_xfs_da_node_toosmall(state->args); @@ -865,10 +1110,9 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action) */ blk = &state->path.blk[ state->path.active-1 ]; info = blk->bp->b_addr; - ASSERT(info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); node = (xfs_da_intnode_t *)info; - count = be16_to_cpu(node->hdr.count); - if (count > (state->node_ents >> 1)) { + xfs_da3_node_hdr_from_disk(&nodehdr, node); + if (nodehdr.count > (state->node_ents >> 1)) { *action = 0; /* blk over 50%, don't try to join */ return(0); /* blk over 50%, don't try to join */ } @@ -879,14 +1123,14 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action) * coalesce it with a sibling block. We choose (arbitrarily) * to merge with the forward block unless it is NULL. */ - if (count == 0) { + if (nodehdr.count == 0) { /* * Make altpath point to the block we want to keep and * path point to the block we want to drop (this one). */ forward = (info->forw != 0); memcpy(&state->altpath, &state->path, sizeof(state->path)); - error = xfs_da_path_shift(state, &state->altpath, forward, + error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &retval); if (error) return(error); @@ -905,35 +1149,34 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action) * We prefer coalescing with the lower numbered sibling so as * to shrink a directory over time. */ + count = state->node_ents; + count -= state->node_ents >> 2; + count -= nodehdr.count; + /* start with smaller blk num */ - forward = (be32_to_cpu(info->forw) < be32_to_cpu(info->back)); + forward = nodehdr.forw < nodehdr.back; for (i = 0; i < 2; forward = !forward, i++) { if (forward) - blkno = be32_to_cpu(info->forw); + blkno = nodehdr.forw; else - blkno = be32_to_cpu(info->back); + blkno = nodehdr.back; if (blkno == 0) continue; - error = xfs_da_node_read(state->args->trans, state->args->dp, + error = xfs_da3_node_read(state->args->trans, state->args->dp, blkno, -1, &bp, state->args->whichfork); if (error) return(error); - ASSERT(bp != NULL); - node = (xfs_da_intnode_t *)info; - count = state->node_ents; - count -= state->node_ents >> 2; - count -= be16_to_cpu(node->hdr.count); node = bp->b_addr; - ASSERT(node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - count -= be16_to_cpu(node->hdr.count); + xfs_da3_node_hdr_from_disk(&nodehdr, node); xfs_trans_brelse(state->args->trans, bp); - if (count >= 0) + + if (count - nodehdr.count >= 0) break; /* fits with at least 25% to spare */ } if (i >= 2) { *action = 0; - return(0); + return 0; } /* @@ -942,28 +1185,42 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action) */ memcpy(&state->altpath, &state->path, sizeof(state->path)); if (blkno < blk->blkno) { - error = xfs_da_path_shift(state, &state->altpath, forward, + error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &retval); - if (error) { - return(error); - } - if (retval) { - *action = 0; - return(0); - } } else { - error = xfs_da_path_shift(state, &state->path, forward, + error = xfs_da3_path_shift(state, &state->path, forward, 0, &retval); - if (error) { - return(error); - } - if (retval) { - *action = 0; - return(0); - } + } + if (error) + return error; + if (retval) { + *action = 0; + return 0; } *action = 1; - return(0); + return 0; +} + +/* + * Pick up the last hashvalue from an intermediate node. + */ +STATIC uint +xfs_da3_node_lasthash( + struct xfs_buf *bp, + int *count) +{ + struct xfs_da_intnode *node; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; + + node = bp->b_addr; + xfs_da3_node_hdr_from_disk(&nodehdr, node); + if (count) + *count = nodehdr.count; + if (!nodehdr.count) + return 0; + btree = xfs_da3_node_tree_p(node); + return be32_to_cpu(btree[nodehdr.count - 1].hashval); } /* @@ -971,13 +1228,16 @@ xfs_da_node_toosmall(xfs_da_state_t *state, int *action) * when we stop making changes, return. */ void -xfs_da_fixhashpath(xfs_da_state_t *state, xfs_da_state_path_t *path) +xfs_da3_fixhashpath( + struct xfs_da_state *state, + struct xfs_da_state_path *path) { - xfs_da_state_blk_t *blk; - xfs_da_intnode_t *node; - xfs_da_node_entry_t *btree; - xfs_dahash_t lasthash=0; - int level, count; + struct xfs_da_state_blk *blk; + struct xfs_da_intnode *node; + struct xfs_da_node_entry *btree; + xfs_dahash_t lasthash=0; + int level; + int count; trace_xfs_da_fixhashpath(state->args); @@ -995,23 +1255,26 @@ xfs_da_fixhashpath(xfs_da_state_t *state, xfs_da_state_path_t *path) return; break; case XFS_DA_NODE_MAGIC: - lasthash = xfs_da_node_lasthash(blk->bp, &count); + lasthash = xfs_da3_node_lasthash(blk->bp, &count); if (count == 0) return; break; } for (blk--, level--; level >= 0; blk--, level--) { + struct xfs_da3_icnode_hdr nodehdr; + node = blk->bp->b_addr; - ASSERT(node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - btree = &node->btree[ blk->index ]; + xfs_da3_node_hdr_from_disk(&nodehdr, node); + btree = xfs_da3_node_tree_p(node); if (be32_to_cpu(btree->hashval) == lasthash) break; blk->hashval = lasthash; - btree->hashval = cpu_to_be32(lasthash); + btree[blk->index].hashval = cpu_to_be32(lasthash); xfs_trans_log_buf(state->args->trans, blk->bp, - XFS_DA_LOGRANGE(node, btree, sizeof(*btree))); + XFS_DA_LOGRANGE(node, &btree[blk->index], + sizeof(*btree))); - lasthash = be32_to_cpu(node->btree[be16_to_cpu(node->hdr.count)-1].hashval); + lasthash = be32_to_cpu(btree[nodehdr.count - 1].hashval); } } @@ -1019,104 +1282,119 @@ xfs_da_fixhashpath(xfs_da_state_t *state, xfs_da_state_path_t *path) * Remove an entry from an intermediate node. */ STATIC void -xfs_da_node_remove(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk) +xfs_da3_node_remove( + struct xfs_da_state *state, + struct xfs_da_state_blk *drop_blk) { - xfs_da_intnode_t *node; - xfs_da_node_entry_t *btree; - int tmp; + struct xfs_da_intnode *node; + struct xfs_da3_icnode_hdr nodehdr; + struct xfs_da_node_entry *btree; + int index; + int tmp; trace_xfs_da_node_remove(state->args); node = drop_blk->bp->b_addr; - ASSERT(drop_blk->index < be16_to_cpu(node->hdr.count)); + xfs_da3_node_hdr_from_disk(&nodehdr, node); + ASSERT(drop_blk->index < nodehdr.count); ASSERT(drop_blk->index >= 0); /* * Copy over the offending entry, or just zero it out. */ - btree = &node->btree[drop_blk->index]; - if (drop_blk->index < (be16_to_cpu(node->hdr.count)-1)) { - tmp = be16_to_cpu(node->hdr.count) - drop_blk->index - 1; + index = drop_blk->index; + btree = xfs_da3_node_tree_p(node); + if (index < nodehdr.count - 1) { + tmp = nodehdr.count - index - 1; tmp *= (uint)sizeof(xfs_da_node_entry_t); - memmove(btree, btree + 1, tmp); + memmove(&btree[index], &btree[index + 1], tmp); xfs_trans_log_buf(state->args->trans, drop_blk->bp, - XFS_DA_LOGRANGE(node, btree, tmp)); - btree = &node->btree[be16_to_cpu(node->hdr.count)-1]; + XFS_DA_LOGRANGE(node, &btree[index], tmp)); + index = nodehdr.count - 1; } - memset((char *)btree, 0, sizeof(xfs_da_node_entry_t)); + memset(&btree[index], 0, sizeof(xfs_da_node_entry_t)); xfs_trans_log_buf(state->args->trans, drop_blk->bp, - XFS_DA_LOGRANGE(node, btree, sizeof(*btree))); - be16_add_cpu(&node->hdr.count, -1); + XFS_DA_LOGRANGE(node, &btree[index], sizeof(btree[index]))); + nodehdr.count -= 1; + xfs_da3_node_hdr_to_disk(node, &nodehdr); xfs_trans_log_buf(state->args->trans, drop_blk->bp, - XFS_DA_LOGRANGE(node, &node->hdr, sizeof(node->hdr))); + XFS_DA_LOGRANGE(node, &node->hdr, xfs_da3_node_hdr_size(node))); /* * Copy the last hash value from the block to propagate upwards. */ - btree--; - drop_blk->hashval = be32_to_cpu(btree->hashval); + drop_blk->hashval = be32_to_cpu(btree[index - 1].hashval); } /* - * Unbalance the btree elements between two intermediate nodes, + * Unbalance the elements between two intermediate nodes, * move all Btree elements from one node into another. */ STATIC void -xfs_da_node_unbalance(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, - xfs_da_state_blk_t *save_blk) +xfs_da3_node_unbalance( + struct xfs_da_state *state, + struct xfs_da_state_blk *drop_blk, + struct xfs_da_state_blk *save_blk) { - xfs_da_intnode_t *drop_node, *save_node; - xfs_da_node_entry_t *btree; - int tmp; - xfs_trans_t *tp; + struct xfs_da_intnode *drop_node; + struct xfs_da_intnode *save_node; + struct xfs_da_node_entry *dbtree; + struct xfs_da_node_entry *sbtree; + struct xfs_da3_icnode_hdr dhdr; + struct xfs_da3_icnode_hdr shdr; + struct xfs_trans *tp; + int sindex; + int tmp; trace_xfs_da_node_unbalance(state->args); drop_node = drop_blk->bp->b_addr; save_node = save_blk->bp->b_addr; - ASSERT(drop_node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - ASSERT(save_node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); + xfs_da3_node_hdr_from_disk(&dhdr, drop_node); + xfs_da3_node_hdr_from_disk(&shdr, save_node); + dbtree = xfs_da3_node_tree_p(drop_node); + sbtree = xfs_da3_node_tree_p(save_node); tp = state->args->trans; /* * If the dying block has lower hashvals, then move all the * elements in the remaining block up to make a hole. */ - if ((be32_to_cpu(drop_node->btree[0].hashval) < be32_to_cpu(save_node->btree[ 0 ].hashval)) || - (be32_to_cpu(drop_node->btree[be16_to_cpu(drop_node->hdr.count)-1].hashval) < - be32_to_cpu(save_node->btree[be16_to_cpu(save_node->hdr.count)-1].hashval))) - { - btree = &save_node->btree[be16_to_cpu(drop_node->hdr.count)]; - tmp = be16_to_cpu(save_node->hdr.count) * (uint)sizeof(xfs_da_node_entry_t); - memmove(btree, &save_node->btree[0], tmp); - btree = &save_node->btree[0]; + if ((be32_to_cpu(dbtree[0].hashval) < be32_to_cpu(sbtree[ 0 ].hashval)) || + (be32_to_cpu(dbtree[dhdr.count - 1].hashval) < + be32_to_cpu(sbtree[shdr.count - 1].hashval))) { + /* XXX: check this - is memmove dst correct? */ + tmp = shdr.count * (uint)sizeof(xfs_da_node_entry_t); + memmove(&sbtree[dhdr.count], &sbtree[0], tmp); + + sindex = 0; xfs_trans_log_buf(tp, save_blk->bp, - XFS_DA_LOGRANGE(save_node, btree, - (be16_to_cpu(save_node->hdr.count) + be16_to_cpu(drop_node->hdr.count)) * - sizeof(xfs_da_node_entry_t))); + XFS_DA_LOGRANGE(save_node, &sbtree[0], + (shdr.count + dhdr.count) * + sizeof(xfs_da_node_entry_t))); } else { - btree = &save_node->btree[be16_to_cpu(save_node->hdr.count)]; + sindex = shdr.count; xfs_trans_log_buf(tp, save_blk->bp, - XFS_DA_LOGRANGE(save_node, btree, - be16_to_cpu(drop_node->hdr.count) * - sizeof(xfs_da_node_entry_t))); + XFS_DA_LOGRANGE(save_node, &sbtree[sindex], + dhdr.count * sizeof(xfs_da_node_entry_t))); } /* * Move all the B-tree elements from drop_blk to save_blk. */ - tmp = be16_to_cpu(drop_node->hdr.count) * (uint)sizeof(xfs_da_node_entry_t); - memcpy(btree, &drop_node->btree[0], tmp); - be16_add_cpu(&save_node->hdr.count, be16_to_cpu(drop_node->hdr.count)); + tmp = dhdr.count * (uint)sizeof(xfs_da_node_entry_t); + memcpy(&sbtree[sindex], &dbtree[0], tmp); + shdr.count += dhdr.count; + xfs_da3_node_hdr_to_disk(save_node, &shdr); xfs_trans_log_buf(tp, save_blk->bp, XFS_DA_LOGRANGE(save_node, &save_node->hdr, - sizeof(save_node->hdr))); + xfs_da3_node_hdr_size(save_node))); /* * Save the last hashval in the remaining block for upward propagation. */ - save_blk->hashval = be32_to_cpu(save_node->btree[be16_to_cpu(save_node->hdr.count)-1].hashval); + save_blk->hashval = be32_to_cpu(sbtree[shdr.count - 1].hashval); } /*======================================================================== @@ -1135,16 +1413,24 @@ xfs_da_node_unbalance(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, * pruned depth-first tree search. */ int /* error */ -xfs_da_node_lookup_int(xfs_da_state_t *state, int *result) +xfs_da3_node_lookup_int( + struct xfs_da_state *state, + int *result) { - xfs_da_state_blk_t *blk; - xfs_da_blkinfo_t *curr; - xfs_da_intnode_t *node; - xfs_da_node_entry_t *btree; - xfs_dablk_t blkno; - int probe, span, max, error, retval; - xfs_dahash_t hashval, btreehashval; - xfs_da_args_t *args; + struct xfs_da_state_blk *blk; + struct xfs_da_blkinfo *curr; + struct xfs_da_intnode *node; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; + struct xfs_da_args *args; + xfs_dablk_t blkno; + xfs_dahash_t hashval; + xfs_dahash_t btreehashval; + int probe; + int span; + int max; + int error; + int retval; args = state->args; @@ -1160,7 +1446,7 @@ xfs_da_node_lookup_int(xfs_da_state_t *state, int *result) * Read the next node down in the tree. */ blk->blkno = blkno; - error = xfs_da_node_read(args->trans, args->dp, blkno, + error = xfs_da3_node_read(args->trans, args->dp, blkno, -1, &blk->bp, args->whichfork); if (error) { blk->blkno = 0; @@ -1169,66 +1455,73 @@ xfs_da_node_lookup_int(xfs_da_state_t *state, int *result) } curr = blk->bp->b_addr; blk->magic = be16_to_cpu(curr->magic); - ASSERT(blk->magic == XFS_DA_NODE_MAGIC || - blk->magic == XFS_DIR2_LEAFN_MAGIC || - blk->magic == XFS_ATTR_LEAF_MAGIC); + + if (blk->magic == XFS_ATTR_LEAF_MAGIC) { + blk->hashval = xfs_attr_leaf_lasthash(blk->bp, NULL); + break; + } + + if (blk->magic == XFS_DIR2_LEAFN_MAGIC || + blk->magic == XFS_DIR3_LEAFN_MAGIC) { + blk->magic = XFS_DIR2_LEAFN_MAGIC; + blk->hashval = xfs_dir2_leafn_lasthash(blk->bp, NULL); + break; + } + + blk->magic = XFS_DA_NODE_MAGIC; + /* * Search an intermediate node for a match. */ - if (blk->magic == XFS_DA_NODE_MAGIC) { - node = blk->bp->b_addr; - max = be16_to_cpu(node->hdr.count); - blk->hashval = be32_to_cpu(node->btree[max-1].hashval); + node = blk->bp->b_addr; + xfs_da3_node_hdr_from_disk(&nodehdr, node); + btree = xfs_da3_node_tree_p(node); - /* - * Binary search. (note: small blocks will skip loop) - */ - probe = span = max / 2; - hashval = args->hashval; - for (btree = &node->btree[probe]; span > 4; - btree = &node->btree[probe]) { - span /= 2; - btreehashval = be32_to_cpu(btree->hashval); - if (btreehashval < hashval) - probe += span; - else if (btreehashval > hashval) - probe -= span; - else - break; - } - ASSERT((probe >= 0) && (probe < max)); - ASSERT((span <= 4) || (be32_to_cpu(btree->hashval) == hashval)); + max = nodehdr.count; + blk->hashval = be32_to_cpu(btree[max - 1].hashval); - /* - * Since we may have duplicate hashval's, find the first - * matching hashval in the node. - */ - while ((probe > 0) && (be32_to_cpu(btree->hashval) >= hashval)) { - btree--; - probe--; - } - while ((probe < max) && (be32_to_cpu(btree->hashval) < hashval)) { - btree++; - probe++; - } + /* + * Binary search. (note: small blocks will skip loop) + */ + probe = span = max / 2; + hashval = args->hashval; + while (span > 4) { + span /= 2; + btreehashval = be32_to_cpu(btree[probe].hashval); + if (btreehashval < hashval) + probe += span; + else if (btreehashval > hashval) + probe -= span; + else + break; + } + ASSERT((probe >= 0) && (probe < max)); + ASSERT((span <= 4) || + (be32_to_cpu(btree[probe].hashval) == hashval)); - /* - * Pick the right block to descend on. - */ - if (probe == max) { - blk->index = max-1; - blkno = be32_to_cpu(node->btree[max-1].before); - } else { - blk->index = probe; - blkno = be32_to_cpu(btree->before); - } - } else if (blk->magic == XFS_ATTR_LEAF_MAGIC) { - blk->hashval = xfs_attr_leaf_lasthash(blk->bp, NULL); - break; - } else if (blk->magic == XFS_DIR2_LEAFN_MAGIC) { - blk->hashval = xfs_dir2_leafn_lasthash(blk->bp, NULL); - break; + /* + * Since we may have duplicate hashval's, find the first + * matching hashval in the node. + */ + while (probe > 0 && + be32_to_cpu(btree[probe].hashval) >= hashval) { + probe--; + } + while (probe < max && + be32_to_cpu(btree[probe].hashval) < hashval) { + probe++; + } + + /* + * Pick the right block to descend on. + */ + if (probe == max) { + blk->index = max - 1; + blkno = be32_to_cpu(btree[max - 1].before); + } else { + blk->index = probe; + blkno = be32_to_cpu(btree[probe].before); } } @@ -1252,7 +1545,7 @@ xfs_da_node_lookup_int(xfs_da_state_t *state, int *result) } if (((retval == ENOENT) || (retval == ENOATTR)) && (blk->hashval == args->hashval)) { - error = xfs_da_path_shift(state, &state->path, 1, 1, + error = xfs_da3_path_shift(state, &state->path, 1, 1, &retval); if (error) return(error); @@ -1274,16 +1567,52 @@ xfs_da_node_lookup_int(xfs_da_state_t *state, int *result) *========================================================================*/ /* + * Compare two intermediate nodes for "order". + */ +STATIC int +xfs_da3_node_order( + struct xfs_buf *node1_bp, + struct xfs_buf *node2_bp) +{ + struct xfs_da_intnode *node1; + struct xfs_da_intnode *node2; + struct xfs_da_node_entry *btree1; + struct xfs_da_node_entry *btree2; + struct xfs_da3_icnode_hdr node1hdr; + struct xfs_da3_icnode_hdr node2hdr; + + node1 = node1_bp->b_addr; + node2 = node2_bp->b_addr; + xfs_da3_node_hdr_from_disk(&node1hdr, node1); + xfs_da3_node_hdr_from_disk(&node2hdr, node2); + btree1 = xfs_da3_node_tree_p(node1); + btree2 = xfs_da3_node_tree_p(node2); + + if (node1hdr.count > 0 && node2hdr.count > 0 && + ((be32_to_cpu(btree2[0].hashval) < be32_to_cpu(btree1[0].hashval)) || + (be32_to_cpu(btree2[node2hdr.count - 1].hashval) < + be32_to_cpu(btree1[node1hdr.count - 1].hashval)))) { + return 1; + } + return 0; +} + +/* * Link a new block into a doubly linked list of blocks (of whatever type). */ int /* error */ -xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, - xfs_da_state_blk_t *new_blk) +xfs_da3_blk_link( + struct xfs_da_state *state, + struct xfs_da_state_blk *old_blk, + struct xfs_da_state_blk *new_blk) { - xfs_da_blkinfo_t *old_info, *new_info, *tmp_info; - xfs_da_args_t *args; - int before=0, error; - struct xfs_buf *bp; + struct xfs_da_blkinfo *old_info; + struct xfs_da_blkinfo *new_info; + struct xfs_da_blkinfo *tmp_info; + struct xfs_da_args *args; + struct xfs_buf *bp; + int before = 0; + int error; /* * Set up environment. @@ -1295,9 +1624,6 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, ASSERT(old_blk->magic == XFS_DA_NODE_MAGIC || old_blk->magic == XFS_DIR2_LEAFN_MAGIC || old_blk->magic == XFS_ATTR_LEAF_MAGIC); - ASSERT(old_blk->magic == be16_to_cpu(old_info->magic)); - ASSERT(new_blk->magic == be16_to_cpu(new_info->magic)); - ASSERT(old_blk->magic == new_blk->magic); switch (old_blk->magic) { case XFS_ATTR_LEAF_MAGIC: @@ -1307,7 +1633,7 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, before = xfs_dir2_leafn_order(old_blk->bp, new_blk->bp); break; case XFS_DA_NODE_MAGIC: - before = xfs_da_node_order(old_blk->bp, new_blk->bp); + before = xfs_da3_node_order(old_blk->bp, new_blk->bp); break; } @@ -1322,14 +1648,14 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, new_info->forw = cpu_to_be32(old_blk->blkno); new_info->back = old_info->back; if (old_info->back) { - error = xfs_da_node_read(args->trans, args->dp, + error = xfs_da3_node_read(args->trans, args->dp, be32_to_cpu(old_info->back), -1, &bp, args->whichfork); if (error) return(error); ASSERT(bp != NULL); tmp_info = bp->b_addr; - ASSERT(be16_to_cpu(tmp_info->magic) == be16_to_cpu(old_info->magic)); + ASSERT(tmp_info->magic == old_info->magic); ASSERT(be32_to_cpu(tmp_info->forw) == old_blk->blkno); tmp_info->forw = cpu_to_be32(new_blk->blkno); xfs_trans_log_buf(args->trans, bp, 0, sizeof(*tmp_info)-1); @@ -1343,7 +1669,7 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, new_info->forw = old_info->forw; new_info->back = cpu_to_be32(old_blk->blkno); if (old_info->forw) { - error = xfs_da_node_read(args->trans, args->dp, + error = xfs_da3_node_read(args->trans, args->dp, be32_to_cpu(old_info->forw), -1, &bp, args->whichfork); if (error) @@ -1364,59 +1690,20 @@ xfs_da_blk_link(xfs_da_state_t *state, xfs_da_state_blk_t *old_blk, } /* - * Compare two intermediate nodes for "order". - */ -STATIC int -xfs_da_node_order( - struct xfs_buf *node1_bp, - struct xfs_buf *node2_bp) -{ - xfs_da_intnode_t *node1, *node2; - - node1 = node1_bp->b_addr; - node2 = node2_bp->b_addr; - ASSERT(node1->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC) && - node2->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - if ((be16_to_cpu(node1->hdr.count) > 0) && (be16_to_cpu(node2->hdr.count) > 0) && - ((be32_to_cpu(node2->btree[0].hashval) < - be32_to_cpu(node1->btree[0].hashval)) || - (be32_to_cpu(node2->btree[be16_to_cpu(node2->hdr.count)-1].hashval) < - be32_to_cpu(node1->btree[be16_to_cpu(node1->hdr.count)-1].hashval)))) { - return(1); - } - return(0); -} - -/* - * Pick up the last hashvalue from an intermediate node. - */ -STATIC uint -xfs_da_node_lasthash( - struct xfs_buf *bp, - int *count) -{ - xfs_da_intnode_t *node; - - node = bp->b_addr; - ASSERT(node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - if (count) - *count = be16_to_cpu(node->hdr.count); - if (!node->hdr.count) - return(0); - return be32_to_cpu(node->btree[be16_to_cpu(node->hdr.count)-1].hashval); -} - -/* * Unlink a block from a doubly linked list of blocks. */ STATIC int /* error */ -xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, - xfs_da_state_blk_t *save_blk) +xfs_da3_blk_unlink( + struct xfs_da_state *state, + struct xfs_da_state_blk *drop_blk, + struct xfs_da_state_blk *save_blk) { - xfs_da_blkinfo_t *drop_info, *save_info, *tmp_info; - xfs_da_args_t *args; - struct xfs_buf *bp; - int error; + struct xfs_da_blkinfo *drop_info; + struct xfs_da_blkinfo *save_info; + struct xfs_da_blkinfo *tmp_info; + struct xfs_da_args *args; + struct xfs_buf *bp; + int error; /* * Set up environment. @@ -1428,8 +1715,6 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, ASSERT(save_blk->magic == XFS_DA_NODE_MAGIC || save_blk->magic == XFS_DIR2_LEAFN_MAGIC || save_blk->magic == XFS_ATTR_LEAF_MAGIC); - ASSERT(save_blk->magic == be16_to_cpu(save_info->magic)); - ASSERT(drop_blk->magic == be16_to_cpu(drop_info->magic)); ASSERT(save_blk->magic == drop_blk->magic); ASSERT((be32_to_cpu(save_info->forw) == drop_blk->blkno) || (be32_to_cpu(save_info->back) == drop_blk->blkno)); @@ -1443,7 +1728,7 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, trace_xfs_da_unlink_back(args); save_info->back = drop_info->back; if (drop_info->back) { - error = xfs_da_node_read(args->trans, args->dp, + error = xfs_da3_node_read(args->trans, args->dp, be32_to_cpu(drop_info->back), -1, &bp, args->whichfork); if (error) @@ -1460,7 +1745,7 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, trace_xfs_da_unlink_forward(args); save_info->forw = drop_info->forw; if (drop_info->forw) { - error = xfs_da_node_read(args->trans, args->dp, + error = xfs_da3_node_read(args->trans, args->dp, be32_to_cpu(drop_info->forw), -1, &bp, args->whichfork); if (error) @@ -1488,15 +1773,22 @@ xfs_da_blk_unlink(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, * the new bottom and the root. */ int /* error */ -xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, - int forward, int release, int *result) +xfs_da3_path_shift( + struct xfs_da_state *state, + struct xfs_da_state_path *path, + int forward, + int release, + int *result) { - xfs_da_state_blk_t *blk; - xfs_da_blkinfo_t *info; - xfs_da_intnode_t *node; - xfs_da_args_t *args; - xfs_dablk_t blkno=0; - int level, error; + struct xfs_da_state_blk *blk; + struct xfs_da_blkinfo *info; + struct xfs_da_intnode *node; + struct xfs_da_args *args; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; + xfs_dablk_t blkno = 0; + int level; + int error; trace_xfs_da_path_shift(state->args); @@ -1511,16 +1803,17 @@ xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, ASSERT((path->active > 0) && (path->active < XFS_DA_NODE_MAXDEPTH)); level = (path->active-1) - 1; /* skip bottom layer in path */ for (blk = &path->blk[level]; level >= 0; blk--, level--) { - ASSERT(blk->bp != NULL); node = blk->bp->b_addr; - ASSERT(node->hdr.info.magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); - if (forward && (blk->index < be16_to_cpu(node->hdr.count)-1)) { + xfs_da3_node_hdr_from_disk(&nodehdr, node); + btree = xfs_da3_node_tree_p(node); + + if (forward && (blk->index < nodehdr.count - 1)) { blk->index++; - blkno = be32_to_cpu(node->btree[blk->index].before); + blkno = be32_to_cpu(btree[blk->index].before); break; } else if (!forward && (blk->index > 0)) { blk->index--; - blkno = be32_to_cpu(node->btree[blk->index].before); + blkno = be32_to_cpu(btree[blk->index].before); break; } } @@ -1546,47 +1839,58 @@ xfs_da_path_shift(xfs_da_state_t *state, xfs_da_state_path_t *path, * Read the next child block. */ blk->blkno = blkno; - error = xfs_da_node_read(args->trans, args->dp, blkno, -1, + error = xfs_da3_node_read(args->trans, args->dp, blkno, -1, &blk->bp, args->whichfork); if (error) return(error); - ASSERT(blk->bp != NULL); info = blk->bp->b_addr; ASSERT(info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || + info->magic == cpu_to_be16(XFS_DA3_NODE_MAGIC) || info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || info->magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC) || info->magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - blk->magic = be16_to_cpu(info->magic); - if (blk->magic == XFS_DA_NODE_MAGIC) { + + + /* + * Note: we flatten the magic number to a single type so we + * don't have to compare against crc/non-crc types elsewhere. + */ + switch (be16_to_cpu(info->magic)) { + case XFS_DA_NODE_MAGIC: + case XFS_DA3_NODE_MAGIC: + blk->magic = XFS_DA_NODE_MAGIC; node = (xfs_da_intnode_t *)info; - blk->hashval = be32_to_cpu(node->btree[be16_to_cpu(node->hdr.count)-1].hashval); + xfs_da3_node_hdr_from_disk(&nodehdr, node); + btree = xfs_da3_node_tree_p(node); + blk->hashval = be32_to_cpu(btree[nodehdr.count - 1].hashval); if (forward) blk->index = 0; else - blk->index = be16_to_cpu(node->hdr.count)-1; - blkno = be32_to_cpu(node->btree[blk->index].before); - } else { + blk->index = nodehdr.count - 1; + blkno = be32_to_cpu(btree[blk->index].before); + break; + case XFS_ATTR_LEAF_MAGIC: + blk->magic = XFS_ATTR_LEAF_MAGIC; ASSERT(level == path->active-1); blk->index = 0; - switch(blk->magic) { - case XFS_ATTR_LEAF_MAGIC: - blk->hashval = xfs_attr_leaf_lasthash(blk->bp, - NULL); - break; - case XFS_DIR2_LEAFN_MAGIC: - case XFS_DIR3_LEAFN_MAGIC: - blk->magic = XFS_DIR2_LEAFN_MAGIC; - blk->hashval = xfs_dir2_leafn_lasthash(blk->bp, - NULL); - break; - default: - ASSERT(0); - break; - } + blk->hashval = xfs_attr_leaf_lasthash(blk->bp, + NULL); + break; + case XFS_DIR2_LEAFN_MAGIC: + case XFS_DIR3_LEAFN_MAGIC: + blk->magic = XFS_DIR2_LEAFN_MAGIC; + ASSERT(level == path->active-1); + blk->index = 0; + blk->hashval = xfs_dir2_leafn_lasthash(blk->bp, + NULL); + break; + default: + ASSERT(0); + break; } } *result = 0; - return(0); + return 0; } @@ -1773,22 +2077,36 @@ xfs_da_grow_inode( * a bmap btree split to do that. */ STATIC int -xfs_da_swap_lastblock( - xfs_da_args_t *args, - xfs_dablk_t *dead_blknop, - struct xfs_buf **dead_bufp) +xfs_da3_swap_lastblock( + struct xfs_da_args *args, + xfs_dablk_t *dead_blknop, + struct xfs_buf **dead_bufp) { - xfs_dablk_t dead_blkno, last_blkno, sib_blkno, par_blkno; - struct xfs_buf *dead_buf, *last_buf, *sib_buf, *par_buf; - xfs_fileoff_t lastoff; - xfs_inode_t *ip; - xfs_trans_t *tp; - xfs_mount_t *mp; - int error, w, entno, level, dead_level; - xfs_da_blkinfo_t *dead_info, *sib_info; - xfs_da_intnode_t *par_node, *dead_node; - xfs_dir2_leaf_t *dead_leaf2; - xfs_dahash_t dead_hash; + struct xfs_da_blkinfo *dead_info; + struct xfs_da_blkinfo *sib_info; + struct xfs_da_intnode *par_node; + struct xfs_da_intnode *dead_node; + struct xfs_dir2_leaf *dead_leaf2; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr par_hdr; + struct xfs_inode *ip; + struct xfs_trans *tp; + struct xfs_mount *mp; + struct xfs_buf *dead_buf; + struct xfs_buf *last_buf; + struct xfs_buf *sib_buf; + struct xfs_buf *par_buf; + xfs_dahash_t dead_hash; + xfs_fileoff_t lastoff; + xfs_dablk_t dead_blkno; + xfs_dablk_t last_blkno; + xfs_dablk_t sib_blkno; + xfs_dablk_t par_blkno; + int error; + int w; + int entno; + int level; + int dead_level; trace_xfs_da_swap_lastblock(args); @@ -1812,7 +2130,7 @@ xfs_da_swap_lastblock( * Read the last block in the btree space. */ last_blkno = (xfs_dablk_t)lastoff - mp->m_dirblkfsbs; - error = xfs_da_node_read(tp, ip, last_blkno, -1, &last_buf, w); + error = xfs_da3_node_read(tp, ip, last_blkno, -1, &last_buf, w); if (error) return error; /* @@ -1835,17 +2153,22 @@ xfs_da_swap_lastblock( dead_level = 0; dead_hash = be32_to_cpu(ents[leafhdr.count - 1].hashval); } else { - ASSERT(dead_info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC)); + struct xfs_da3_icnode_hdr deadhdr; + + ASSERT(dead_info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || + dead_info->magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)); dead_node = (xfs_da_intnode_t *)dead_info; - dead_level = be16_to_cpu(dead_node->hdr.level); - dead_hash = be32_to_cpu(dead_node->btree[be16_to_cpu(dead_node->hdr.count) - 1].hashval); + xfs_da3_node_hdr_from_disk(&deadhdr, dead_node); + btree = xfs_da3_node_tree_p(dead_node); + dead_level = deadhdr.level; + dead_hash = be32_to_cpu(btree[deadhdr.count - 1].hashval); } sib_buf = par_buf = NULL; /* * If the moved block has a left sibling, fix up the pointers. */ if ((sib_blkno = be32_to_cpu(dead_info->back))) { - error = xfs_da_node_read(tp, ip, sib_blkno, -1, &sib_buf, w); + error = xfs_da3_node_read(tp, ip, sib_blkno, -1, &sib_buf, w); if (error) goto done; sib_info = sib_buf->b_addr; @@ -1867,7 +2190,7 @@ xfs_da_swap_lastblock( * If the moved block has a right sibling, fix up the pointers. */ if ((sib_blkno = be32_to_cpu(dead_info->forw))) { - error = xfs_da_node_read(tp, ip, sib_blkno, -1, &sib_buf, w); + error = xfs_da3_node_read(tp, ip, sib_blkno, -1, &sib_buf, w); if (error) goto done; sib_info = sib_buf->b_addr; @@ -1891,31 +2214,31 @@ xfs_da_swap_lastblock( * Walk down the tree looking for the parent of the moved block. */ for (;;) { - error = xfs_da_node_read(tp, ip, par_blkno, -1, &par_buf, w); + error = xfs_da3_node_read(tp, ip, par_blkno, -1, &par_buf, w); if (error) goto done; par_node = par_buf->b_addr; - if (unlikely(par_node->hdr.info.magic != - cpu_to_be16(XFS_DA_NODE_MAGIC) || - (level >= 0 && level != be16_to_cpu(par_node->hdr.level) + 1))) { + xfs_da3_node_hdr_from_disk(&par_hdr, par_node); + if (level >= 0 && level != par_hdr.level + 1) { XFS_ERROR_REPORT("xfs_da_swap_lastblock(4)", XFS_ERRLEVEL_LOW, mp); error = XFS_ERROR(EFSCORRUPTED); goto done; } - level = be16_to_cpu(par_node->hdr.level); + level = par_hdr.level; + btree = xfs_da3_node_tree_p(par_node); for (entno = 0; - entno < be16_to_cpu(par_node->hdr.count) && - be32_to_cpu(par_node->btree[entno].hashval) < dead_hash; + entno < par_hdr.count && + be32_to_cpu(btree[entno].hashval) < dead_hash; entno++) continue; - if (unlikely(entno == be16_to_cpu(par_node->hdr.count))) { + if (entno == par_hdr.count) { XFS_ERROR_REPORT("xfs_da_swap_lastblock(5)", XFS_ERRLEVEL_LOW, mp); error = XFS_ERROR(EFSCORRUPTED); goto done; } - par_blkno = be32_to_cpu(par_node->btree[entno].before); + par_blkno = be32_to_cpu(btree[entno].before); if (level == dead_level + 1) break; xfs_trans_brelse(tp, par_buf); @@ -1927,13 +2250,13 @@ xfs_da_swap_lastblock( */ for (;;) { for (; - entno < be16_to_cpu(par_node->hdr.count) && - be32_to_cpu(par_node->btree[entno].before) != last_blkno; + entno < par_hdr.count && + be32_to_cpu(btree[entno].before) != last_blkno; entno++) continue; - if (entno < be16_to_cpu(par_node->hdr.count)) + if (entno < par_hdr.count) break; - par_blkno = be32_to_cpu(par_node->hdr.info.forw); + par_blkno = par_hdr.forw; xfs_trans_brelse(tp, par_buf); par_buf = NULL; if (unlikely(par_blkno == 0)) { @@ -1942,27 +2265,27 @@ xfs_da_swap_lastblock( error = XFS_ERROR(EFSCORRUPTED); goto done; } - error = xfs_da_node_read(tp, ip, par_blkno, -1, &par_buf, w); + error = xfs_da3_node_read(tp, ip, par_blkno, -1, &par_buf, w); if (error) goto done; par_node = par_buf->b_addr; - if (unlikely( - be16_to_cpu(par_node->hdr.level) != level || - par_node->hdr.info.magic != cpu_to_be16(XFS_DA_NODE_MAGIC))) { + xfs_da3_node_hdr_from_disk(&par_hdr, par_node); + if (par_hdr.level != level) { XFS_ERROR_REPORT("xfs_da_swap_lastblock(7)", XFS_ERRLEVEL_LOW, mp); error = XFS_ERROR(EFSCORRUPTED); goto done; } + btree = xfs_da3_node_tree_p(par_node); entno = 0; } /* * Update the parent entry pointing to the moved block. */ - par_node->btree[entno].before = cpu_to_be32(dead_blkno); + btree[entno].before = cpu_to_be32(dead_blkno); xfs_trans_log_buf(tp, par_buf, - XFS_DA_LOGRANGE(par_node, &par_node->btree[entno].before, - sizeof(par_node->btree[entno].before))); + XFS_DA_LOGRANGE(par_node, &btree[entno].before, + sizeof(btree[entno].before))); *dead_blknop = last_blkno; *dead_bufp = last_buf; return 0; @@ -2004,14 +2327,15 @@ xfs_da_shrink_inode( * Remove extents. If we get ENOSPC for a dir we have to move * the last block to the place we want to kill. */ - if ((error = xfs_bunmapi(tp, dp, dead_blkno, count, - xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA, - 0, args->firstblock, args->flist, - &done)) == ENOSPC) { + error = xfs_bunmapi(tp, dp, dead_blkno, count, + xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA, + 0, args->firstblock, args->flist, &done); + if (error == ENOSPC) { if (w != XFS_DATA_FORK) break; - if ((error = xfs_da_swap_lastblock(args, &dead_blkno, - &dead_buf))) + error = xfs_da3_swap_lastblock(args, &dead_blkno, + &dead_buf); + if (error) break; } else { break; @@ -2276,6 +2600,7 @@ xfs_da_read_buf( magic1 = be32_to_cpu(hdr->magic); if (unlikely( XFS_TEST_ERROR((magic != XFS_DA_NODE_MAGIC) && + (magic != XFS_DA3_NODE_MAGIC) && (magic != XFS_ATTR_LEAF_MAGIC) && (magic != XFS_DIR2_LEAF1_MAGIC) && (magic != XFS_DIR3_LEAF1_MAGIC) && @@ -2346,41 +2671,3 @@ out_free: return -1; return mappedbno; } - -kmem_zone_t *xfs_da_state_zone; /* anchor for state struct zone */ - -/* - * Allocate a dir-state structure. - * We don't put them on the stack since they're large. - */ -xfs_da_state_t * -xfs_da_state_alloc(void) -{ - return kmem_zone_zalloc(xfs_da_state_zone, KM_NOFS); -} - -/* - * Kill the altpath contents of a da-state structure. - */ -STATIC void -xfs_da_state_kill_altpath(xfs_da_state_t *state) -{ - int i; - - for (i = 0; i < state->altpath.active; i++) - state->altpath.blk[i].bp = NULL; - state->altpath.active = 0; -} - -/* - * Free a da-state structure. - */ -void -xfs_da_state_free(xfs_da_state_t *state) -{ - xfs_da_state_kill_altpath(state); -#ifdef DEBUG - memset((char *)state, 0, sizeof(*state)); -#endif /* DEBUG */ - kmem_zone_free(xfs_da_state_zone, state); -} diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index 9b93816..9e75553 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -1356,7 +1356,7 @@ xfs_dir2_leafn_split( * block into the leaves. */ xfs_dir2_leafn_rebalance(state, oldblk, newblk); - error = xfs_da_blk_link(state, oldblk, newblk); + error = xfs_da3_blk_link(state, oldblk, newblk); if (error) { return error; } @@ -1437,7 +1437,7 @@ xfs_dir2_leafn_toosmall( */ forward = (leafhdr.forw != 0); memcpy(&state->altpath, &state->path, sizeof(state->path)); - error = xfs_da_path_shift(state, &state->altpath, forward, 0, + error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &rval); if (error) return error; @@ -1499,10 +1499,10 @@ xfs_dir2_leafn_toosmall( */ memcpy(&state->altpath, &state->path, sizeof(state->path)); if (blkno < blk->blkno) - error = xfs_da_path_shift(state, &state->altpath, forward, 0, + error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &rval); else - error = xfs_da_path_shift(state, &state->path, forward, 0, + error = xfs_da3_path_shift(state, &state->path, forward, 0, &rval); if (error) { return error; @@ -1599,7 +1599,7 @@ xfs_dir2_node_addname( * Look up the name. We're not supposed to find it, but * this gives us the insertion point. */ - error = xfs_da_node_lookup_int(state, &rval); + error = xfs_da3_node_lookup_int(state, &rval); if (error) rval = error; if (rval != ENOENT) { @@ -1625,7 +1625,7 @@ xfs_dir2_node_addname( * It worked, fix the hash values up the btree. */ if (!(args->op_flags & XFS_DA_OP_JUSTCHECK)) - xfs_da_fixhashpath(state, &state->path); + xfs_da3_fixhashpath(state, &state->path); } else { /* * It didn't work, we need to split the leaf block. @@ -1637,7 +1637,7 @@ xfs_dir2_node_addname( /* * Split the leaf block and insert the new entry. */ - rval = xfs_da_split(state); + rval = xfs_da3_split(state); } done: xfs_da_state_free(state); @@ -2015,7 +2015,7 @@ xfs_dir2_node_addname_int( /* * Lookup an entry in a node-format directory. - * All the real work happens in xfs_da_node_lookup_int. + * All the real work happens in xfs_da3_node_lookup_int. * The only real output is the inode number of the entry. */ int /* error */ @@ -2040,7 +2040,7 @@ xfs_dir2_node_lookup( /* * Fill in the path to the entry in the cursor. */ - error = xfs_da_node_lookup_int(state, &rval); + error = xfs_da3_node_lookup_int(state, &rval); if (error) rval = error; else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { @@ -2095,7 +2095,7 @@ xfs_dir2_node_removename( /* * Look up the entry we're deleting, set up the cursor. */ - error = xfs_da_node_lookup_int(state, &rval); + error = xfs_da3_node_lookup_int(state, &rval); if (error) rval = error; /* @@ -2119,12 +2119,12 @@ xfs_dir2_node_removename( /* * Fix the hash values up the btree. */ - xfs_da_fixhashpath(state, &state->path); + xfs_da3_fixhashpath(state, &state->path); /* * If we need to join leaf blocks, do it. */ if (rval && state->path.active > 1) - error = xfs_da_join(state); + error = xfs_da3_join(state); /* * If no errors so far, try conversion to leaf format. */ @@ -2166,7 +2166,7 @@ xfs_dir2_node_replace( /* * Lookup the entry to change in the btree. */ - error = xfs_da_node_lookup_int(state, &rval); + error = xfs_da3_node_lookup_int(state, &rval); if (error) { rval = error; } diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 758e492..4897fba 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -147,6 +147,8 @@ traverse_int_dablock(xfs_mount_t *mp, xfs_da_intnode_t *node; xfs_dfsbno_t fsbno; xfs_buf_t *bp; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; /* * traverse down left-side of tree until we hit the @@ -182,20 +184,22 @@ traverse_int_dablock(xfs_mount_t *mp, } node = (xfs_da_intnode_t *)XFS_BUF_PTR(bp); + btree = xfs_da3_node_tree_p(node); + xfs_da3_node_hdr_from_disk(&nodehdr, node); - if (be16_to_cpu(node->hdr.info.magic) != XFS_DA_NODE_MAGIC) { + if (nodehdr.magic != XFS_DA_NODE_MAGIC) { do_warn(_("bad dir/attr magic number in inode %" PRIu64 ", " "file bno = %u, fsbno = %" PRIu64 "\n"), da_cursor->ino, bno, fsbno); libxfs_putbuf(bp); goto error_out; } - if (be16_to_cpu(node->hdr.count) > - mp->m_dir_node_ents) { + + if (nodehdr.count > mp->m_dir_node_ents) { do_warn(_("bad record count in inode %" PRIu64 ", " "count = %d, max = %d\n"), da_cursor->ino, - be16_to_cpu(node->hdr.count), + nodehdr.count, mp->m_dir_node_ents); libxfs_putbuf(bp); goto error_out; @@ -205,9 +209,9 @@ traverse_int_dablock(xfs_mount_t *mp, * maintain level counter */ if (i == -1) - i = da_cursor->active = be16_to_cpu(node->hdr.level); + i = da_cursor->active = nodehdr.level; else { - if (be16_to_cpu(node->hdr.level) == i - 1) { + if (nodehdr.level == i - 1) { i--; } else { if (whichfork == XFS_DATA_FORK) @@ -223,8 +227,7 @@ traverse_int_dablock(xfs_mount_t *mp, } } - da_cursor->level[i].hashval = be32_to_cpu( - node->btree[0].hashval); + da_cursor->level[i].hashval = be32_to_cpu(btree[0].hashval); da_cursor->level[i].bp = bp; da_cursor->level[i].bno = bno; da_cursor->level[i].index = 0; @@ -235,7 +238,7 @@ traverse_int_dablock(xfs_mount_t *mp, /* * set up new bno for next level down */ - bno = be32_to_cpu(node->btree[0].before); + bno = be32_to_cpu(btree[0].before); } while (node != NULL && i > 1); /* @@ -319,6 +322,8 @@ verify_final_da_path(xfs_mount_t *mp, int bad = 0; int entry; int this_level = p_level + 1; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; #ifdef XR_DIR_TRACE fprintf(stderr, "in verify_final_da_path, this_level = %d\n", @@ -330,32 +335,35 @@ verify_final_da_path(xfs_mount_t *mp, */ entry = cursor->level[this_level].index; node = (xfs_da_intnode_t *)XFS_BUF_PTR(cursor->level[this_level].bp); + btree = xfs_da3_node_tree_p(node); + xfs_da3_node_hdr_from_disk(&nodehdr, node); + /* * check internal block consistency on this level -- ensure * that all entries are used, encountered and expected hashvals * match, etc. */ - if (entry != be16_to_cpu(node->hdr.count) - 1) { + if (entry != nodehdr.count - 1) { do_warn(_("directory/attribute block used/count " "inconsistency - %d/%hu\n"), - entry, be16_to_cpu(node->hdr.count)); + entry, nodehdr.count); bad++; } /* * hash values monotonically increasing ??? */ if (cursor->level[this_level].hashval >= - be32_to_cpu(node->btree[entry].hashval)) { + be32_to_cpu(btree[entry].hashval)) { do_warn(_("directory/attribute block hashvalue inconsistency, " "expected > %u / saw %u\n"), cursor->level[this_level].hashval, - be32_to_cpu(node->btree[entry].hashval)); + be32_to_cpu(btree[entry].hashval)); bad++; } - if (be32_to_cpu(node->hdr.info.forw) != 0) { + if (nodehdr.forw != 0) { do_warn(_("bad directory/attribute forward block pointer, " "expected 0, saw %u\n"), - be32_to_cpu(node->hdr.info.forw)); + nodehdr.forw); bad++; } if (bad) { @@ -373,12 +381,11 @@ verify_final_da_path(xfs_mount_t *mp, /* * ok, now check descendant block number against this level */ - if (cursor->level[p_level].bno != be32_to_cpu( - node->btree[entry].before)) { + if (cursor->level[p_level].bno != be32_to_cpu(btree[entry].before)) { #ifdef XR_DIR_TRACE fprintf(stderr, "bad directory btree pointer, child bno should " "be %d, block bno is %d, hashval is %u\n", - be16_to_cpu(node->btree[entry].before), + be16_to_cpu(btree[entry].before), cursor->level[p_level].bno, cursor->level[p_level].hashval); fprintf(stderr, "verify_final_da_path returns 1 (bad) #1a\n"); @@ -386,14 +393,13 @@ verify_final_da_path(xfs_mount_t *mp, return(1); } - if (cursor->level[p_level].hashval != be32_to_cpu( - node->btree[entry].hashval)) { + if (cursor->level[p_level].hashval != be32_to_cpu(btree[entry].hashval)) { if (!no_modify) { do_warn(_("correcting bad hashval in non-leaf " "dir/attr block\n\tin (level %d) in " "inode %" PRIu64 ".\n"), this_level, cursor->ino); - node->btree[entry].hashval = cpu_to_be32( + btree[entry].hashval = cpu_to_be32( cursor->level[p_level].hashval); cursor->level[this_level].dirty++; } else { @@ -408,7 +414,7 @@ verify_final_da_path(xfs_mount_t *mp, * Note: squirrel hashval away _before_ releasing the * buffer, preventing a use-after-free problem. */ - hashval = be32_to_cpu(node->btree[entry].hashval); + hashval = be32_to_cpu(btree[entry].hashval); /* * release/write buffer @@ -492,6 +498,8 @@ verify_da_path(xfs_mount_t *mp, int bad; int entry; int this_level = p_level + 1; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; /* * index is currently set to point to the entry that @@ -499,20 +507,22 @@ verify_da_path(xfs_mount_t *mp, */ entry = cursor->level[this_level].index; node = (xfs_da_intnode_t *)XFS_BUF_PTR(cursor->level[this_level].bp); + btree = xfs_da3_node_tree_p(node); + xfs_da3_node_hdr_from_disk(&nodehdr, node); /* * if this block is out of entries, validate this * block and move on to the next block. * and update cursor value for said level */ - if (entry >= be16_to_cpu(node->hdr.count)) { + if (entry >= nodehdr.count) { /* * update the hash value for this level before * validating it. bno value should be ok since * it was set when the block was first read in. */ cursor->level[this_level].hashval = - be32_to_cpu(node->btree[entry - 1].hashval); + be32_to_cpu(btree[entry - 1].hashval); /* * keep track of greatest block # -- that gets @@ -530,7 +540,7 @@ verify_da_path(xfs_mount_t *mp, /* * ok, now get the next buffer and check sibling pointers */ - dabno = be32_to_cpu(node->hdr.info.forw); + dabno = nodehdr.forw; ASSERT(dabno != 0); fsbno = blkmap_get(cursor->blkmap, dabno); @@ -551,36 +561,37 @@ verify_da_path(xfs_mount_t *mp, } newnode = (xfs_da_intnode_t *)XFS_BUF_PTR(bp); + btree = xfs_da3_node_tree_p(node); + xfs_da3_node_hdr_from_disk(&nodehdr, newnode); /* * verify magic number and back pointer, sanity-check * entry count, verify level */ bad = 0; - if (XFS_DA_NODE_MAGIC != be16_to_cpu(newnode->hdr.info.magic)) { + if (XFS_DA_NODE_MAGIC != nodehdr.magic) { do_warn( _("bad magic number %x in block %u (%" PRIu64 ") for directory inode %" PRIu64 "\n"), - be16_to_cpu(newnode->hdr.info.magic), + nodehdr.magic, dabno, fsbno, cursor->ino); bad++; } - if (be32_to_cpu(newnode->hdr.info.back) != - cursor->level[this_level].bno) { + if (nodehdr.back != cursor->level[this_level].bno) { do_warn( _("bad back pointer in block %u (%"PRIu64 ") for directory inode %" PRIu64 "\n"), dabno, fsbno, cursor->ino); bad++; } - if (be16_to_cpu(newnode->hdr.count) > mp->m_dir_node_ents) { + if (nodehdr.count > mp->m_dir_node_ents) { do_warn( _("entry count %d too large in block %u (%" PRIu64 ") for directory inode %" PRIu64 "\n"), - be16_to_cpu(newnode->hdr.count), + nodehdr.count, dabno, fsbno, cursor->ino); bad++; } - if (be16_to_cpu(newnode->hdr.level) != this_level) { + if (nodehdr.level != this_level) { do_warn( _("bad level %d in block %u (%" PRIu64 ") for directory inode %" PRIu64 "\n"), - be16_to_cpu(newnode->hdr.level), + nodehdr.level, dabno, fsbno, cursor->ino); bad++; } @@ -606,7 +617,7 @@ verify_da_path(xfs_mount_t *mp, cursor->level[this_level].dirty = 0; cursor->level[this_level].bno = dabno; cursor->level[this_level].hashval = - be32_to_cpu(newnode->btree[0].hashval); + be32_to_cpu(btree[0].hashval); #ifdef XR_DIR_TRACE cursor->level[this_level].n = newnode; #endif @@ -617,12 +628,11 @@ verify_da_path(xfs_mount_t *mp, /* * ditto for block numbers */ - if (cursor->level[p_level].bno != - be32_to_cpu(node->btree[entry].before)) { + if (cursor->level[p_level].bno != be32_to_cpu(btree[entry].before)) { #ifdef XR_DIR_TRACE fprintf(stderr, "bad directory btree pointer, child bno " "should be %d, block bno is %d, hashval is %u\n", - be32_to_cpu(node->btree[entry].before), + be32_to_cpu(btree[entry].before), cursor->level[p_level].bno, cursor->level[p_level].hashval); fprintf(stderr, "verify_da_path returns 1 (bad) #1a\n"); @@ -634,13 +644,13 @@ verify_da_path(xfs_mount_t *mp, * block against the hashval in the current entry */ if (cursor->level[p_level].hashval != - be32_to_cpu(node->btree[entry].hashval)) { + be32_to_cpu(btree[entry].hashval)) { if (!no_modify) { do_warn(_("correcting bad hashval in interior " "dir/attr block\n\tin (level %d) in " "inode %" PRIu64 ".\n"), this_level, cursor->ino); - node->btree[entry].hashval = cpu_to_be32( + btree[entry].hashval = cpu_to_be32( cursor->level[p_level].hashval); cursor->level[this_level].dirty++; } else { diff --git a/repair/dir2.c b/repair/dir2.c index 2f13864..ae80a6b 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -147,9 +147,10 @@ traverse_int_dir2block(xfs_mount_t *mp, struct xfs_buf *bp; int i; int nex; - xfs_da_blkinfo_t *info; xfs_da_intnode_t *node; bmap_ext_t lbmp; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; /* * traverse down left-side of tree until we hit the @@ -158,7 +159,7 @@ traverse_int_dir2block(xfs_mount_t *mp, */ bno = mp->m_dirleafblk; i = -1; - info = NULL; + node = NULL; da_cursor->active = 0; do { @@ -181,9 +182,10 @@ _("can't read block %u for directory inode %" PRIu64 "\n"), goto error_out; } - info = bp->b_addr; + node = bp->b_addr; + xfs_da3_node_hdr_from_disk(&nodehdr, node); - if (be16_to_cpu(info->magic) == XFS_DIR2_LEAFN_MAGIC) { + if (nodehdr.magic == XFS_DIR2_LEAFN_MAGIC) { if ( i != -1 ) { do_warn( _("found non-root LEAFN node in inode %" PRIu64 " bno = %u\n"), @@ -192,20 +194,21 @@ _("found non-root LEAFN node in inode %" PRIu64 " bno = %u\n"), *rbno = 0; libxfs_putbuf(bp); return(1); - } else if (be16_to_cpu(info->magic) != XFS_DA_NODE_MAGIC) { + } else if (nodehdr.magic != XFS_DA_NODE_MAGIC) { libxfs_putbuf(bp); do_warn( _("bad dir magic number 0x%x in inode %" PRIu64 " bno = %u\n"), - be16_to_cpu(info->magic), + nodehdr.magic, da_cursor->ino, bno); goto error_out; } - node = (xfs_da_intnode_t*)info; - if (be16_to_cpu(node->hdr.count) > mp->m_dir_node_ents) { + btree = xfs_da3_node_tree_p(node); + if (nodehdr.count > mp->m_dir_node_ents) { libxfs_putbuf(bp); do_warn( -_("bad record count in inode %" PRIu64 ", count = %d, max = %d\n"), da_cursor->ino, - be16_to_cpu(node->hdr.count), +_("bad record count in inode %" PRIu64 ", count = %d, max = %d\n"), + da_cursor->ino, + nodehdr.count, mp->m_dir_node_ents); goto error_out; } @@ -213,7 +216,7 @@ _("bad record count in inode %" PRIu64 ", count = %d, max = %d\n"), da_cursor->i * maintain level counter */ if (i == -1) { - i = da_cursor->active = be16_to_cpu(node->hdr.level); + i = da_cursor->active = nodehdr.level; if (i >= XFS_DA_NODE_MAXDEPTH) { do_warn( _("bad header depth for directory inode %" PRIu64 "\n"), @@ -223,7 +226,7 @@ _("bad header depth for directory inode %" PRIu64 "\n"), goto error_out; } } else { - if (be16_to_cpu(node->hdr.level) == i - 1) { + if (nodehdr.level == i - 1) { i--; } else { do_warn( @@ -234,8 +237,7 @@ _("bad directory btree for directory inode %" PRIu64 "\n"), } } - da_cursor->level[i].hashval = - be32_to_cpu(node->btree[0].hashval); + da_cursor->level[i].hashval = be32_to_cpu(btree[0].hashval); da_cursor->level[i].bp = bp; da_cursor->level[i].bno = bno; da_cursor->level[i].index = 0; @@ -243,8 +245,8 @@ _("bad directory btree for directory inode %" PRIu64 "\n"), /* * set up new bno for next level down */ - bno = be32_to_cpu(node->btree[0].before); - } while (info != NULL && i > 1); + bno = be32_to_cpu(btree[0].before); + } while (node != NULL && i > 1); /* * now return block number and get out @@ -326,6 +328,8 @@ verify_final_dir2_path(xfs_mount_t *mp, int bad = 0; int entry; int this_level = p_level + 1; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; /* * the index should point to the next "unprocessed" entry @@ -333,32 +337,34 @@ verify_final_dir2_path(xfs_mount_t *mp, */ entry = cursor->level[this_level].index; node = (xfs_da_intnode_t *)(cursor->level[this_level].bp->b_addr); + btree = xfs_da3_node_tree_p(node); + xfs_da3_node_hdr_from_disk(&nodehdr, node); /* * check internal block consistency on this level -- ensure * that all entries are used, encountered and expected hashvals * match, etc. */ - if (entry != be16_to_cpu(node->hdr.count) - 1) { + if (entry != nodehdr.count - 1) { do_warn( _("directory block used/count inconsistency - %d / %hu\n"), - entry, be16_to_cpu(node->hdr.count)); + entry, nodehdr.count); bad++; } /* * hash values monotonically increasing ??? */ if (cursor->level[this_level].hashval >= - be32_to_cpu(node->btree[entry].hashval)) { + be32_to_cpu(btree[entry].hashval)) { do_warn(_("directory/attribute block hashvalue inconsistency, " "expected > %u / saw %u\n"), cursor->level[this_level].hashval, - be32_to_cpu(node->btree[entry].hashval)); + be32_to_cpu(btree[entry].hashval)); bad++; } - if (be32_to_cpu(node->hdr.info.forw) != 0) { + if (nodehdr.forw != 0) { do_warn(_("bad directory/attribute forward block pointer, " "expected 0, saw %u\n"), - be32_to_cpu(node->hdr.info.forw)); + nodehdr.forw); bad++; } if (bad) { @@ -375,18 +381,17 @@ verify_final_dir2_path(xfs_mount_t *mp, /* * ok, now check descendant block number against this level */ - if (cursor->level[p_level].bno != - be32_to_cpu(node->btree[entry].before)) + if (cursor->level[p_level].bno != be32_to_cpu(btree[entry].before)) return(1); if (cursor->level[p_level].hashval != - be32_to_cpu(node->btree[entry].hashval)) { + be32_to_cpu(btree[entry].hashval)) { if (!no_modify) { do_warn( _("correcting bad hashval in non-leaf dir block\n" "\tin (level %d) in inode %" PRIu64 ".\n"), this_level, cursor->ino); - node->btree[entry].hashval = cpu_to_be32( + btree[entry].hashval = cpu_to_be32( cursor->level[p_level].hashval); cursor->level[this_level].dirty++; } else { @@ -419,8 +424,7 @@ _("would correct bad hashval in non-leaf dir block\n" * set hashvalue to correctl reflect the now-validated * last entry in this block and continue upwards validation */ - cursor->level[this_level].hashval = - be32_to_cpu(node->btree[entry].hashval); + cursor->level[this_level].hashval = be32_to_cpu(btree[entry].hashval); return(verify_final_dir2_path(mp, cursor, this_level)); } @@ -479,6 +483,8 @@ verify_dir2_path(xfs_mount_t *mp, bmap_ext_t *bmp; int nex; bmap_ext_t lbmp; + struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr nodehdr; /* * index is currently set to point to the entry that @@ -486,20 +492,22 @@ verify_dir2_path(xfs_mount_t *mp, */ entry = cursor->level[this_level].index; node = cursor->level[this_level].bp->b_addr; + btree = xfs_da3_node_tree_p(node); + xfs_da3_node_hdr_from_disk(&nodehdr, node); /* * if this block is out of entries, validate this * block and move on to the next block. * and update cursor value for said level */ - if (entry >= be16_to_cpu(node->hdr.count)) { + if (entry >= nodehdr.count) { /* * update the hash value for this level before * validating it. bno value should be ok since * it was set when the block was first read in. */ cursor->level[this_level].hashval = - be32_to_cpu(node->btree[entry - 1].hashval); + be32_to_cpu(btree[entry - 1].hashval); /* * keep track of greatest block # -- that gets @@ -517,7 +525,7 @@ verify_dir2_path(xfs_mount_t *mp, /* * ok, now get the next buffer and check sibling pointers */ - dabno = be32_to_cpu(node->hdr.info.forw); + dabno = nodehdr.forw; ASSERT(dabno != 0); nex = blkmap_getn(cursor->blkmap, dabno, mp->m_dirblkfsbs, &bmp, &lbmp); @@ -540,36 +548,37 @@ _("can't read block %u for directory inode %" PRIu64 "\n"), } newnode = bp->b_addr; + btree = xfs_da3_node_tree_p(newnode); + xfs_da3_node_hdr_from_disk(&nodehdr, node); /* * verify magic number and back pointer, sanity-check * entry count, verify level */ bad = 0; - if (XFS_DA_NODE_MAGIC != be16_to_cpu(newnode->hdr.info.magic)) { + if (XFS_DA_NODE_MAGIC != nodehdr.magic) { do_warn( _("bad magic number %x in block %u for directory inode %" PRIu64 "\n"), - be16_to_cpu(newnode->hdr.info.magic), + nodehdr.magic, dabno, cursor->ino); bad++; } - if (be32_to_cpu(newnode->hdr.info.back) != - cursor->level[this_level].bno) { + if (nodehdr.back != cursor->level[this_level].bno) { do_warn( _("bad back pointer in block %u for directory inode %" PRIu64 "\n"), dabno, cursor->ino); bad++; } - if (be16_to_cpu(newnode->hdr.count) > mp->m_dir_node_ents) { + if (nodehdr.count > mp->m_dir_node_ents) { do_warn( _("entry count %d too large in block %u for directory inode %" PRIu64 "\n"), - be16_to_cpu(newnode->hdr.count), + nodehdr.count, dabno, cursor->ino); bad++; } - if (be16_to_cpu(newnode->hdr.level) != this_level) { + if (nodehdr.level != this_level) { do_warn( _("bad level %d in block %u for directory inode %" PRIu64 "\n"), - be16_to_cpu(newnode->hdr.level), + nodehdr.level, dabno, cursor->ino); bad++; } @@ -592,7 +601,7 @@ _("bad level %d in block %u for directory inode %" PRIu64 "\n"), cursor->level[this_level].dirty = 0; cursor->level[this_level].bno = dabno; cursor->level[this_level].hashval = - be32_to_cpu(newnode->btree[0].hashval); + be32_to_cpu(btree[0].hashval); node = newnode; entry = cursor->level[this_level].index = 0; @@ -600,21 +609,20 @@ _("bad level %d in block %u for directory inode %" PRIu64 "\n"), /* * ditto for block numbers */ - if (cursor->level[p_level].bno != - be32_to_cpu(node->btree[entry].before)) + if (cursor->level[p_level].bno != be32_to_cpu(btree[entry].before)) return(1); /* * ok, now validate last hashvalue in the descendant * block against the hashval in the current entry */ if (cursor->level[p_level].hashval != - be32_to_cpu(node->btree[entry].hashval)) { + be32_to_cpu(btree[entry].hashval)) { if (!no_modify) { do_warn( _("correcting bad hashval in interior dir block\n" "\tin (level %d) in inode %" PRIu64 ".\n"), this_level, cursor->ino); - node->btree[entry].hashval = cpu_to_be32( + btree[entry].hashval = cpu_to_be32( cursor->level[p_level].hashval); cursor->level[this_level].dirty++; } else { -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CD11929E3B for ; Fri, 17 May 2013 06:14:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8CC028F8035 for ; Fri, 17 May 2013 04:14:07 -0700 (PDT) X-ASG-Debug-ID: 1368789242-04bdf04224359fa0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id dIPKGrgt5G8hx5jj for ; Fri, 17 May 2013 04:14:06 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKBOoM/A6FThyWDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:05 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbm-0008Sx-TU for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbm-0005Fq-O4 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 26/30] xfsprogs: disable xfs_check for CRC enabled filesystems Date: Fri, 17 May 2013 21:13:21 +1000 X-ASG-Orig-Subj: [PATCH 26/30] xfsprogs: disable xfs_check for CRC enabled filesystems Message-Id: <1368789205-19969-27-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789245 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Until xfs_db has full metadata CRC support, xfs_check will not be able to fully verify filesystems in this format. Don't even bother trying right now, and to make it simple to test full xfsprogs installs with xfstests, just silently succeed. Signed-off-by: Dave Chinner --- db/check.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/db/check.c b/db/check.c index 5b7498f..dadfa97 100644 --- a/db/check.c +++ b/db/check.c @@ -788,6 +788,20 @@ blockget_f( dbprintf(_("already have block usage information\n")); return 0; } + + /* + * XXX: check does not support CRC enabled filesystems. Return + * immediately, silently, with success but without doing anything here + * initially so that xfstests can run without modification on metadata + * enabled filesystems. + * + * XXX: ultimately we need to dump an error message here that xfstests + * filters out, or we need to actually do the work to make check support + * crc enabled filesystems. + */ + if (xfs_sb_version_hascrc(&mp->m_sb)) + return 0; + if (!init(argc, argv)) { if (serious_error) exitcode = 3; -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2E13F29E47 for ; Fri, 17 May 2013 06:14:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9F7DCAC002 for ; Fri, 17 May 2013 04:14:07 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0006-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id U63k0npgVJOjY3yn for ; Fri, 17 May 2013 04:14:04 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABRCoMIwg4Eehd0gh8BAQUnLzMIGDE5AxsZiAu9AI1jH4R5A6h4gyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:04 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbh-0008Sa-He for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbX-0005F0-63 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 17/30] xfs: add CRC protection to remote attributes Date: Fri, 17 May 2013 21:13:12 +1000 X-ASG-Orig-Subj: [PATCH 17/30] xfs: add CRC protection to remote attributes Message-Id: <1368789205-19969-18-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789242 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner There are two ways of doing this - the first is to add a CRC to the remote attribute entry in the attribute block. The second is to treat them similar to the remote symlink, where each fragment has it's own header and identifies fragment location in the attribute. The problem with the CRC in the remote attr entry is that we cannot identify the owner of the metadata from the metadata blocks themselves, or where the blocks fit into the remote attribute. The down side to this approach is that we never know when the attribute has been read from disk or not and so we have to verify it every time it is read, and we must calculate it during the create transaction and log it. We do not log CRCs for any other metadata, and so this creates a unique set of coherency problems that, in general, are best avoided. Adding an identifying header to each allocated block allows us to identify each fragment and where in the attribute it is located. It enables us to rebuild the remote attribute from just the raw blocks containing the attribute. It also provides us to do per-block CRCs verification at IO time rather than during the transaction context that creates it or every time it is read into a user buffer. Hence it avoids all the problems that an external, logged CRC has, and provides all the benefits of self identifying metadata. The only complexity is that we have to add a header per fragment, and we don't know how many fragments will be needed prior to allocations. If we take the symlink example, the header is 56 bytes and hence for a 4k block size filesystem, in the worst case 16 headers requires 1 extra block for the 64k attribute data. For 512 byte filesystems the worst case is an extra block for every 9 fragments (i.e. 16 extra blocks in the worse case). This will be very rare and so it's not really a major concern. Because allocation is done in two steps - the first finds a hole large enough in the attribute file, the second does the allocation - we only need to find a hole big enough for a worst case allocation. We only need to allocate enough extra blocks for number of headers required by the fragments, and we can calculate that as we go.... Hence it really only makes sense to use the same model as for symlinks - it doesn't add that much complexity, does not require an attribute tree format change, and does not require logging calculated CRC values. Signed-off-by: Dave Chinner --- include/xfs_attr_remote.h | 19 +++ libxfs/xfs_attr_remote.c | 321 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 290 insertions(+), 50 deletions(-) diff --git a/include/xfs_attr_remote.h b/include/xfs_attr_remote.h index b4be90e..9e71edf 100644 --- a/include/xfs_attr_remote.h +++ b/include/xfs_attr_remote.h @@ -24,6 +24,25 @@ #ifndef __XFS_ATTR_REMOTE_H__ #define __XFS_ATTR_REMOTE_H__ +#define XFS_ATTR3_RMT_MAGIC 0x5841524d /* XARM */ + +struct xfs_attr3_rmt_hdr { + __be32 rm_magic; + __be32 rm_offset; + __be32 rm_bytes; + __be32 rm_crc; + uuid_t rm_uuid; + __be64 rm_owner; + __be64 rm_blkno; + __be64 rm_lsn; +}; + +#define XFS_ATTR3_RMT_CRC_OFF offsetof(struct xfs_attr3_rmt_hdr, rm_crc) + +#define XFS_ATTR3_RMT_BUF_SPACE(mp, bufsize) \ + ((bufsize) - (xfs_sb_version_hascrc(&(mp)->m_sb) ? \ + sizeof(struct xfs_attr3_rmt_hdr) : 0)) + int xfs_attr_rmtval_get(struct xfs_da_args *args); int xfs_attr_rmtval_set(struct xfs_da_args *args); int xfs_attr_rmtval_remove(struct xfs_da_args *args); diff --git a/libxfs/xfs_attr_remote.c b/libxfs/xfs_attr_remote.c index 36f8b5d..fa112ad 100644 --- a/libxfs/xfs_attr_remote.c +++ b/libxfs/xfs_attr_remote.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -20,58 +21,226 @@ #define ATTR_RMTVALUE_MAPSIZE 1 /* # of map entries at once */ /* + * Each contiguous block has a header, so it is not just a simple attribute + * length to FSB conversion. + */ +static int +xfs_attr3_rmt_blocks( + struct xfs_mount *mp, + int attrlen) +{ + int fsblocks = 0; + int len = attrlen; + + do { + fsblocks++; + len -= XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); + } while (len > 0); + + return fsblocks; +} + +static bool +xfs_attr3_rmt_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (rmt->rm_magic != cpu_to_be32(XFS_ATTR3_RMT_MAGIC)) + return false; + if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) + return false; + if (bp->b_bn != be64_to_cpu(rmt->rm_blkno)) + return false; + if (be32_to_cpu(rmt->rm_offset) + + be32_to_cpu(rmt->rm_bytes) >= MAXPATHLEN) + return false; + if (rmt->rm_owner == 0) + return false; + + return true; +} + +static void +xfs_attr3_rmt_read_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + + /* no verification of non-crc buffers */ + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_ATTR3_RMT_CRC_OFF) || + !xfs_attr3_rmt_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } +} + +static void +xfs_attr3_rmt_write_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + + /* no verification of non-crc buffers */ + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (!xfs_attr3_rmt_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (bip) { + struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); + } + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_ATTR3_RMT_CRC_OFF); +} + +const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { + .verify_read = xfs_attr3_rmt_read_verify, + .verify_write = xfs_attr3_rmt_write_verify, +}; + +static int +xfs_attr3_rmt_hdr_set( + struct xfs_mount *mp, + xfs_ino_t ino, + uint32_t offset, + uint32_t size, + struct xfs_buf *bp) +{ + struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return 0; + + rmt->rm_magic = cpu_to_be32(XFS_ATTR3_RMT_MAGIC); + rmt->rm_offset = cpu_to_be32(offset); + rmt->rm_bytes = cpu_to_be32(size); + uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); + rmt->rm_owner = cpu_to_be64(ino); + rmt->rm_blkno = cpu_to_be64(bp->b_bn); + bp->b_ops = &xfs_attr3_rmt_buf_ops; + + return sizeof(struct xfs_attr3_rmt_hdr); +} + +/* + * Checking of the remote attribute header is split into two parts. the verifier + * does CRC, location and bounds checking, the unpacking function checks the + * attribute parameters and owner. + */ +static bool +xfs_attr3_rmt_hdr_ok( + struct xfs_mount *mp, + xfs_ino_t ino, + uint32_t offset, + uint32_t size, + struct xfs_buf *bp) +{ + struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + + if (offset != be32_to_cpu(rmt->rm_offset)) + return false; + if (size != be32_to_cpu(rmt->rm_bytes)) + return false; + if (ino != be64_to_cpu(rmt->rm_owner)) + return false; + + /* ok */ + return true; + +} + +/* * Read the value associated with an attribute from the out-of-line buffer * that we stored it in. */ int -xfs_attr_rmtval_get(xfs_da_args_t *args) +xfs_attr_rmtval_get( + struct xfs_da_args *args) { - xfs_bmbt_irec_t map[ATTR_RMTVALUE_MAPSIZE]; - xfs_mount_t *mp; - xfs_daddr_t dblkno; - void *dst; - xfs_buf_t *bp; - int nmap, error, tmp, valuelen, blkcnt, i; - xfs_dablk_t lblkno; + struct xfs_bmbt_irec map[ATTR_RMTVALUE_MAPSIZE]; + struct xfs_mount *mp = args->dp->i_mount; + struct xfs_buf *bp; + xfs_daddr_t dblkno; + xfs_dablk_t lblkno = args->rmtblkno; + void *dst = args->value; + int valuelen = args->valuelen; + int nmap; + int error; + int blkcnt; + int i; + int offset = 0; trace_xfs_attr_rmtval_get(args); ASSERT(!(args->flags & ATTR_KERNOVAL)); - mp = args->dp->i_mount; - dst = args->value; - valuelen = args->valuelen; - lblkno = args->rmtblkno; while (valuelen > 0) { nmap = ATTR_RMTVALUE_MAPSIZE; error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, args->rmtblkcnt, map, &nmap, XFS_BMAPI_ATTRFORK); if (error) - return(error); + return error; ASSERT(nmap >= 1); for (i = 0; (i < nmap) && (valuelen > 0); i++) { + int byte_cnt; + char *src; + ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && (map[i].br_startblock != HOLESTARTBLOCK)); dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, - dblkno, blkcnt, 0, &bp, NULL); + dblkno, blkcnt, 0, &bp, + &xfs_attr3_rmt_buf_ops); if (error) - return(error); + return error; + + byte_cnt = min_t(int, valuelen, BBTOB(bp->b_length)); + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); - tmp = min_t(int, valuelen, BBTOB(bp->b_length)); - xfs_buf_iomove(bp, 0, tmp, dst, XBRW_READ); + src = bp->b_addr; + if (xfs_sb_version_hascrc(&mp->m_sb)) { + if (!xfs_attr3_rmt_hdr_ok(mp, args->dp->i_ino, + offset, byte_cnt, bp)) { + xfs_alert(mp, +"remote attribute header does not match required off/len/owner (0x%x/Ox%x,0x%llx)", + offset, byte_cnt, args->dp->i_ino); + xfs_buf_relse(bp); + return EFSCORRUPTED; + + } + + src += sizeof(struct xfs_attr3_rmt_hdr); + } + + memcpy(dst, src, byte_cnt); xfs_buf_relse(bp); - dst += tmp; - valuelen -= tmp; + + offset += byte_cnt; + dst += byte_cnt; + valuelen -= byte_cnt; lblkno += map[i].br_blockcount; } } ASSERT(valuelen == 0); - return(0); + return 0; } /* @@ -79,35 +248,49 @@ xfs_attr_rmtval_get(xfs_da_args_t *args) * that we have defined for it. */ int -xfs_attr_rmtval_set(xfs_da_args_t *args) +xfs_attr_rmtval_set( + struct xfs_da_args *args) { - xfs_mount_t *mp; - xfs_fileoff_t lfileoff; - xfs_inode_t *dp; - xfs_bmbt_irec_t map; - xfs_daddr_t dblkno; - void *src; - xfs_buf_t *bp; - xfs_dablk_t lblkno; - int blkcnt, valuelen, nmap, error, tmp, committed; + struct xfs_inode *dp = args->dp; + struct xfs_mount *mp = dp->i_mount; + struct xfs_bmbt_irec map; + struct xfs_buf *bp; + xfs_daddr_t dblkno; + xfs_dablk_t lblkno; + xfs_fileoff_t lfileoff = 0; + void *src = args->value; + int blkcnt; + int valuelen; + int nmap; + int error; + int hdrcnt = 0; + bool crcs = xfs_sb_version_hascrc(&mp->m_sb); + int offset = 0; trace_xfs_attr_rmtval_set(args); - dp = args->dp; - mp = dp->i_mount; - src = args->value; - /* * Find a "hole" in the attribute address space large enough for - * us to drop the new attribute's value into. + * us to drop the new attribute's value into. Because CRC enable + * attributes have headers, we can't just do a straight byte to FSB + * conversion. We calculate the worst case block count in this case + * and we may not need that many, so we have to handle this when + * allocating the blocks below. */ - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); - lfileoff = 0; + if (!crcs) + blkcnt = XFS_B_TO_FSB(mp, args->valuelen); + else + blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); + error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, XFS_ATTR_FORK); - if (error) { - return(error); - } + if (error) + return error; + + /* Start with the attribute data. We'll allocate the rest afterwards. */ + if (crcs) + blkcnt = XFS_B_TO_FSB(mp, args->valuelen); + args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; args->rmtblkcnt = blkcnt; @@ -115,6 +298,8 @@ xfs_attr_rmtval_set(xfs_da_args_t *args) * Roll through the "value", allocating blocks on disk as required. */ while (blkcnt > 0) { + int committed; + /* * Allocate a single extent, up to the size of the value. */ @@ -148,6 +333,27 @@ xfs_attr_rmtval_set(xfs_da_args_t *args) (map.br_startblock != HOLESTARTBLOCK)); lblkno += map.br_blockcount; blkcnt -= map.br_blockcount; + hdrcnt++; + + /* + * If we have enough blocks for the attribute data, calculate + * how many extra blocks we need for headers. We might run + * through this multiple times in the case that the additional + * headers in the blocks needed for the data fragments spills + * into requiring more blocks. e.g. for 512 byte blocks, we'll + * spill for another block every 9 headers we require in this + * loop. + */ + + if (crcs && blkcnt == 0) { + int total_len; + + total_len = args->valuelen + + hdrcnt * sizeof(struct xfs_attr3_rmt_hdr); + blkcnt = XFS_B_TO_FSB(mp, total_len); + blkcnt -= args->rmtblkcnt; + args->rmtblkcnt += blkcnt; + } /* * Start the next trans in the chain. @@ -166,7 +372,8 @@ xfs_attr_rmtval_set(xfs_da_args_t *args) lblkno = args->rmtblkno; valuelen = args->valuelen; while (valuelen > 0) { - int buflen; + int byte_cnt; + char *buf; /* * Try to remember where we decided to put the value. @@ -188,24 +395,38 @@ xfs_attr_rmtval_set(xfs_da_args_t *args) bp = xfs_buf_get(mp->m_ddev_targp, dblkno, blkcnt, 0); if (!bp) return ENOMEM; + bp->b_ops = &xfs_attr3_rmt_buf_ops; + + byte_cnt = BBTOB(bp->b_length); + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); + if (valuelen < byte_cnt) { + byte_cnt = valuelen; + } + + buf = bp->b_addr; + buf += xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, + byte_cnt, bp); + memcpy(buf, src, byte_cnt); - buflen = BBTOB(bp->b_length); - tmp = min_t(int, valuelen, buflen); - xfs_buf_iomove(bp, 0, tmp, src, XBRW_WRITE); - if (tmp < buflen) - xfs_buf_zero(bp, tmp, buflen - tmp); + if (byte_cnt < BBTOB(bp->b_length)) + xfs_buf_zero(bp, byte_cnt, + BBTOB(bp->b_length) - byte_cnt); error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ xfs_buf_relse(bp); if (error) return error; - src += tmp; - valuelen -= tmp; + + src += byte_cnt; + valuelen -= byte_cnt; + offset += byte_cnt; + hdrcnt--; lblkno += map.br_blockcount; } ASSERT(valuelen == 0); - return(0); + ASSERT(hdrcnt == 0); + return 0; } /* @@ -284,7 +505,7 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) ASSERT(committed); args->trans = NULL; xfs_bmap_cancel(args->flist); - return(error); + return error; } /* -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 615DE29E37 for ; Fri, 17 May 2013 06:14:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9C822AC001 for ; Fri, 17 May 2013 04:14:06 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0005-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Cyn5Gac038lLj5Ko for ; Fri, 17 May 2013 04:13:58 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhUMACUQllF5LDbs/2dsb2JhbABbgwg3wVcEehd0gh8BAQUaAQIKLzMIGBgZOQMbGYgLvQCOAoEug0sDk2eEepAXgyIqgSwk Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:45 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbX-0008SG-96 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbN-0005Em-3j for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:33 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 15/30] xfs: add CRCs to attr leaf blocks Date: Fri, 17 May 2013 21:13:10 +1000 X-ASG-Orig-Subj: [PATCH 15/30] xfs: add CRCs to attr leaf blocks Message-Id: <1368789205-19969-16-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789238 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- db/attr.c | 16 +- db/dir2.c | 4 +- db/metadump.c | 4 +- include/xfs_attr_leaf.h | 122 +++- include/xfs_da_btree.h | 5 +- libxfs/xfs_attr.c | 66 +- libxfs/xfs_attr_leaf.c | 1529 +++++++++++++++++++++++++++-------------------- libxfs/xfs_da_btree.c | 35 +- repair/attr_repair.c | 4 +- 9 files changed, 1034 insertions(+), 751 deletions(-) diff --git a/db/attr.c b/db/attr.c index a5087b8..05049ba 100644 --- a/db/attr.c +++ b/db/attr.c @@ -143,7 +143,7 @@ const field_t attr_node_entry_flds[] = { #define HOFF(f) bitize(offsetof(xfs_da_node_hdr_t, f)) const field_t attr_node_hdr_flds[] = { { "info", FLDT_ATTR_BLKINFO, OI(HOFF(info)), C1, 0, TYP_NONE }, - { "count", FLDT_UINT16D, OI(HOFF(count)), C1, 0, TYP_NONE }, + { "count", FLDT_UINT16D, OI(HOFF(__count)), C1, 0, TYP_NONE }, { "level", FLDT_UINT16D, OI(HOFF(__level)), C1, 0, TYP_NONE }, { NULL } }; @@ -219,7 +219,7 @@ attr_leaf_name_local_name_count( e = &block->entries[i]; if (be16_to_cpu(e->nameidx) == off) { if (e->flags & XFS_ATTR_LOCAL) { - l = xfs_attr_leaf_name_local(block, i); + l = xfs_attr3_leaf_name_local(block, i); return l->namelen; } else return 0; @@ -248,7 +248,7 @@ attr_leaf_name_local_value_count( e = &block->entries[i]; if (be16_to_cpu(e->nameidx) == off) { if (e->flags & XFS_ATTR_LOCAL) { - l = xfs_attr_leaf_name_local(block, i); + l = xfs_attr3_leaf_name_local(block, i); return be16_to_cpu(l->valuelen); } else return 0; @@ -285,7 +285,7 @@ attr_leaf_name_local_value_offset( if (i >= be16_to_cpu(block->hdr.count)) return 0; - l = xfs_attr_leaf_name_local(block, i); + l = xfs_attr3_leaf_name_local(block, i); vp = (char *)&l->nameval[l->namelen]; return (int)bitize(vp - (char *)l); } @@ -333,7 +333,7 @@ attr_leaf_name_remote_name_count( e = &block->entries[i]; if (be16_to_cpu(e->nameidx) == off) { if (!(e->flags & XFS_ATTR_LOCAL)) { - r = xfs_attr_leaf_name_remote(block, i); + r = xfs_attr3_leaf_name_remote(block, i); return r->namelen; } else return 0; @@ -360,11 +360,11 @@ attr_leaf_name_size( return 0; e = &block->entries[idx]; if (e->flags & XFS_ATTR_LOCAL) { - l = xfs_attr_leaf_name_local(block, idx); + l = xfs_attr3_leaf_name_local(block, idx); return (int)bitize(xfs_attr_leaf_entsize_local(l->namelen, be16_to_cpu(l->valuelen))); } else { - r = xfs_attr_leaf_name_remote(block, idx); + r = xfs_attr3_leaf_name_remote(block, idx); return (int)bitize(xfs_attr_leaf_entsize_remote(r->namelen)); } } @@ -412,7 +412,7 @@ attr_node_btree_count( block = obj; if (be16_to_cpu(block->hdr.info.magic) != XFS_DA_NODE_MAGIC) return 0; - return be16_to_cpu(block->hdr.count); + return be16_to_cpu(block->hdr.__count); } /*ARGSUSED*/ diff --git a/db/dir2.c b/db/dir2.c index 590e993..7094a83 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -184,7 +184,7 @@ const field_t da_node_entry_flds[] = { #define HOFF(f) bitize(offsetof(xfs_da_node_hdr_t, f)) const field_t da_node_hdr_flds[] = { { "info", FLDT_DA_BLKINFO, OI(HOFF(info)), C1, 0, TYP_NONE }, - { "count", FLDT_UINT16D, OI(HOFF(count)), C1, 0, TYP_NONE }, + { "count", FLDT_UINT16D, OI(HOFF(__count)), C1, 0, TYP_NONE }, { "level", FLDT_UINT16D, OI(HOFF(__level)), C1, 0, TYP_NONE }, { NULL } }; @@ -707,7 +707,7 @@ dir2_node_btree_count( node = obj; if (be16_to_cpu(node->hdr.info.magic) != XFS_DA_NODE_MAGIC) return 0; - return be16_to_cpu(node->hdr.count); + return be16_to_cpu(node->hdr.__count); } /*ARGSUSED*/ diff --git a/db/metadump.c b/db/metadump.c index 0635e7b..44e7162 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -1282,7 +1282,7 @@ obfuscate_attr_blocks( break; } if (entry->flags & XFS_ATTR_LOCAL) { - local = xfs_attr_leaf_name_local(leaf, i); + local = xfs_attr3_leaf_name_local(leaf, i); if (local->namelen == 0) { if (show_warnings) print_warning("zero length for " @@ -1295,7 +1295,7 @@ obfuscate_attr_blocks( memset(&local->nameval[local->namelen], 0, be16_to_cpu(local->valuelen)); } else { - remote = xfs_attr_leaf_name_remote(leaf, i); + remote = xfs_attr3_leaf_name_remote(leaf, i); if (remote->namelen == 0 || remote->valueblk == 0) { if (show_warnings) diff --git a/include/xfs_attr_leaf.h b/include/xfs_attr_leaf.h index 77de139..f9d7846 100644 --- a/include/xfs_attr_leaf.h +++ b/include/xfs_attr_leaf.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2000,2002-2003,2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -89,7 +90,7 @@ typedef struct xfs_attr_leaf_hdr { /* constant-structure header block */ typedef struct xfs_attr_leaf_entry { /* sorted on key, not name */ __be32 hashval; /* hash value of name */ - __be16 nameidx; /* index into buffer of name/value */ + __be16 nameidx; /* index into buffer of name/value */ __u8 flags; /* LOCAL/ROOT/SECURE/INCOMPLETE flag */ __u8 pad2; /* unused pad byte */ } xfs_attr_leaf_entry_t; @@ -115,6 +116,54 @@ typedef struct xfs_attr_leafblock { } xfs_attr_leafblock_t; /* + * CRC enabled leaf structures. Called "version 3" structures to match the + * version number of the directory and dablk structures for this feature, and + * attr2 is already taken by the variable inode attribute fork size feature. + */ +struct xfs_attr3_leaf_hdr { + struct xfs_da3_blkinfo info; + __be16 count; + __be16 usedbytes; + __be16 firstused; + __u8 holes; + __u8 pad1; + struct xfs_attr_leaf_map freemap[XFS_ATTR_LEAF_MAPSIZE]; +}; + +#define XFS_ATTR3_LEAF_CRC_OFF (offsetof(struct xfs_attr3_leaf_hdr, info.crc)) + +struct xfs_attr3_leafblock { + struct xfs_attr3_leaf_hdr hdr; + struct xfs_attr_leaf_entry entries[1]; + + /* + * The rest of the block contains the following structures after the + * leaf entries, growing from the bottom up. The variables are never + * referenced, the locations accessed purely from helper functions. + * + * struct xfs_attr_leaf_name_local + * struct xfs_attr_leaf_name_remote + */ +}; + +/* + * incore, neutral version of the attribute leaf header + */ +struct xfs_attr3_icleaf_hdr { + __uint32_t forw; + __uint32_t back; + __uint16_t magic; + __uint16_t count; + __uint16_t usedbytes; + __uint16_t firstused; + __u8 holes; + struct { + __uint16_t base; + __uint16_t size; + } freemap[XFS_ATTR_LEAF_MAPSIZE]; +}; + +/* * Flags used in the leaf_entry[i].flags field. * NOTE: the INCOMPLETE bit must not collide with the flags bits specified * on the system call, they are "or"ed together for various operations. @@ -147,26 +196,43 @@ typedef struct xfs_attr_leafblock { */ #define XFS_ATTR_LEAF_NAME_ALIGN ((uint)sizeof(xfs_dablk_t)) +static inline int +xfs_attr3_leaf_hdr_size(struct xfs_attr_leafblock *leafp) +{ + if (leafp->hdr.info.magic == cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)) + return sizeof(struct xfs_attr3_leaf_hdr); + return sizeof(struct xfs_attr_leaf_hdr); +} + +static inline struct xfs_attr_leaf_entry * +xfs_attr3_leaf_entryp(xfs_attr_leafblock_t *leafp) +{ + if (leafp->hdr.info.magic == cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)) + return &((struct xfs_attr3_leafblock *)leafp)->entries[0]; + return &leafp->entries[0]; +} + /* * Cast typed pointers for "local" and "remote" name/value structs. */ -static inline xfs_attr_leaf_name_remote_t * -xfs_attr_leaf_name_remote(xfs_attr_leafblock_t *leafp, int idx) +static inline char * +xfs_attr3_leaf_name(xfs_attr_leafblock_t *leafp, int idx) { - return (xfs_attr_leaf_name_remote_t *) - &((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)]; + struct xfs_attr_leaf_entry *entries = xfs_attr3_leaf_entryp(leafp); + + return &((char *)leafp)[be16_to_cpu(entries[idx].nameidx)]; } -static inline xfs_attr_leaf_name_local_t * -xfs_attr_leaf_name_local(xfs_attr_leafblock_t *leafp, int idx) +static inline xfs_attr_leaf_name_remote_t * +xfs_attr3_leaf_name_remote(xfs_attr_leafblock_t *leafp, int idx) { - return (xfs_attr_leaf_name_local_t *) - &((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)]; + return (xfs_attr_leaf_name_remote_t *)xfs_attr3_leaf_name(leafp, idx); } -static inline char *xfs_attr_leaf_name(xfs_attr_leafblock_t *leafp, int idx) +static inline xfs_attr_leaf_name_local_t * +xfs_attr3_leaf_name_local(xfs_attr_leafblock_t *leafp, int idx) { - return &((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)]; + return (xfs_attr_leaf_name_local_t *)xfs_attr3_leaf_name(leafp, idx); } /* @@ -221,37 +287,37 @@ int xfs_attr_shortform_bytesfit(xfs_inode_t *dp, int bytes); /* * Internal routines when attribute fork size == XFS_LBSIZE(mp). */ -int xfs_attr_leaf_to_node(struct xfs_da_args *args); -int xfs_attr_leaf_to_shortform(struct xfs_buf *bp, +int xfs_attr3_leaf_to_node(struct xfs_da_args *args); +int xfs_attr3_leaf_to_shortform(struct xfs_buf *bp, struct xfs_da_args *args, int forkoff); -int xfs_attr_leaf_clearflag(struct xfs_da_args *args); -int xfs_attr_leaf_setflag(struct xfs_da_args *args); -int xfs_attr_leaf_flipflags(xfs_da_args_t *args); +int xfs_attr3_leaf_clearflag(struct xfs_da_args *args); +int xfs_attr3_leaf_setflag(struct xfs_da_args *args); +int xfs_attr3_leaf_flipflags(struct xfs_da_args *args); /* * Routines used for growing the Btree. */ -int xfs_attr_leaf_split(struct xfs_da_state *state, +int xfs_attr3_leaf_split(struct xfs_da_state *state, struct xfs_da_state_blk *oldblk, struct xfs_da_state_blk *newblk); -int xfs_attr_leaf_lookup_int(struct xfs_buf *leaf, +int xfs_attr3_leaf_lookup_int(struct xfs_buf *leaf, struct xfs_da_args *args); -int xfs_attr_leaf_getvalue(struct xfs_buf *bp, struct xfs_da_args *args); -int xfs_attr_leaf_add(struct xfs_buf *leaf_buffer, +int xfs_attr3_leaf_getvalue(struct xfs_buf *bp, struct xfs_da_args *args); +int xfs_attr3_leaf_add(struct xfs_buf *leaf_buffer, struct xfs_da_args *args); -int xfs_attr_leaf_remove(struct xfs_buf *leaf_buffer, +int xfs_attr3_leaf_remove(struct xfs_buf *leaf_buffer, struct xfs_da_args *args); -int xfs_attr_leaf_list_int(struct xfs_buf *bp, +int xfs_attr3_leaf_list_int(struct xfs_buf *bp, struct xfs_attr_list_context *context); /* * Routines used for shrinking the Btree. */ -int xfs_attr_leaf_toosmall(struct xfs_da_state *state, int *retval); -void xfs_attr_leaf_unbalance(struct xfs_da_state *state, +int xfs_attr3_leaf_toosmall(struct xfs_da_state *state, int *retval); +void xfs_attr3_leaf_unbalance(struct xfs_da_state *state, struct xfs_da_state_blk *drop_blk, struct xfs_da_state_blk *save_blk); -int xfs_attr_root_inactive(struct xfs_trans **trans, struct xfs_inode *dp); +int xfs_attr3_root_inactive(struct xfs_trans **trans, struct xfs_inode *dp); /* * Utility routines. @@ -261,10 +327,12 @@ int xfs_attr_leaf_order(struct xfs_buf *leaf1_bp, struct xfs_buf *leaf2_bp); int xfs_attr_leaf_newentsize(int namelen, int valuelen, int blocksize, int *local); -int xfs_attr_leaf_read(struct xfs_trans *tp, struct xfs_inode *dp, +int xfs_attr3_leaf_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mappedbno, struct xfs_buf **bpp); +void xfs_attr3_leaf_hdr_from_disk(struct xfs_attr3_icleaf_hdr *to, + struct xfs_attr_leafblock *from); -extern const struct xfs_buf_ops xfs_attr_leaf_buf_ops; +extern const struct xfs_buf_ops xfs_attr3_leaf_buf_ops; #endif /* __XFS_ATTR_LEAF_H__ */ diff --git a/include/xfs_da_btree.h b/include/xfs_da_btree.h index 6bedb3c..0e8182c 100644 --- a/include/xfs_da_btree.h +++ b/include/xfs_da_btree.h @@ -55,6 +55,7 @@ typedef struct xfs_da_blkinfo { * magic numbers without modification for both v2 and v3 nodes. */ #define XFS_DA3_NODE_MAGIC 0x3ebe /* magic number: non-leaf blocks */ +#define XFS_ATTR3_LEAF_MAGIC 0x3bee /* magic number: attribute leaf blks */ #define XFS_DIR3_LEAF1_MAGIC 0x3df1 /* magic number: v2 dirlf single blks */ #define XFS_DIR3_LEAFN_MAGIC 0x3dff /* magic number: v2 dirlf multi blks */ @@ -85,13 +86,13 @@ struct xfs_da3_blkinfo { typedef struct xfs_da_node_hdr { struct xfs_da_blkinfo info; /* block type, links, etc. */ - __be16 count; /* count of active entries */ + __be16 __count; /* count of active entries */ __be16 __level; /* level above leaves (leaf == 0) */ } xfs_da_node_hdr_t; struct xfs_da3_node_hdr { struct xfs_da3_blkinfo info; /* block type, links, etc. */ - __be16 count; /* count of active entries */ + __be16 __count; /* count of active entries */ __be16 __level; /* level above leaves (leaf == 0) */ __be32 __pad32; }; diff --git a/libxfs/xfs_attr.c b/libxfs/xfs_attr.c index bb2ccf2..4429cb7 100644 --- a/libxfs/xfs_attr.c +++ b/libxfs/xfs_attr.c @@ -659,7 +659,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) */ dp = args->dp; args->blkno = 0; - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); if (error) return error; @@ -667,14 +667,14 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) * Look up the given attribute in the leaf block. Figure out if * the given flags produce an error or call for an atomic rename. */ - retval = xfs_attr_leaf_lookup_int(bp, args); + retval = xfs_attr3_leaf_lookup_int(bp, args); if ((args->flags & ATTR_REPLACE) && (retval == ENOATTR)) { xfs_trans_brelse(args->trans, bp); - return(retval); + return retval; } else if (retval == EEXIST) { if (args->flags & ATTR_CREATE) { /* pure create op */ xfs_trans_brelse(args->trans, bp); - return(retval); + return retval; } trace_xfs_attr_leaf_replace(args); @@ -690,7 +690,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) * Add the attribute to the leaf block, transitioning to a Btree * if required. */ - retval = xfs_attr_leaf_add(bp, args); + retval = xfs_attr3_leaf_add(bp, args); if (retval == ENOSPC) { /* * Promote the attribute list to the Btree format, then @@ -698,7 +698,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) * can manage its own transactions. */ xfs_bmap_init(args->flist, args->firstblock); - error = xfs_attr_leaf_to_node(args); + error = xfs_attr3_leaf_to_node(args); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, &committed); @@ -763,7 +763,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) * In a separate transaction, set the incomplete flag on the * "old" attr and clear the incomplete flag on the "new" attr. */ - error = xfs_attr_leaf_flipflags(args); + error = xfs_attr3_leaf_flipflags(args); if (error) return(error); @@ -785,19 +785,19 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) * Read in the block containing the "old" attr, then * remove the "old" attr from that block (neat, huh!) */ - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); if (error) return error; - xfs_attr_leaf_remove(bp, args); + xfs_attr3_leaf_remove(bp, args); /* * If the result is small enough, shrink it all into the inode. */ if ((forkoff = xfs_attr_shortform_allfit(bp, dp))) { xfs_bmap_init(args->flist, args->firstblock); - error = xfs_attr_leaf_to_shortform(bp, args, forkoff); + error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); /* bp is gone due to xfs_da_shrink_inode */ if (!error) { error = xfs_bmap_finish(&args->trans, @@ -829,9 +829,9 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) /* * Added a "remote" value, just clear the incomplete flag. */ - error = xfs_attr_leaf_clearflag(args); + error = xfs_attr3_leaf_clearflag(args); } - return(error); + return error; } /* @@ -854,24 +854,24 @@ xfs_attr_leaf_removename(xfs_da_args_t *args) */ dp = args->dp; args->blkno = 0; - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); if (error) return error; - error = xfs_attr_leaf_lookup_int(bp, args); + error = xfs_attr3_leaf_lookup_int(bp, args); if (error == ENOATTR) { xfs_trans_brelse(args->trans, bp); return(error); } - xfs_attr_leaf_remove(bp, args); + xfs_attr3_leaf_remove(bp, args); /* * If the result is small enough, shrink it all into the inode. */ if ((forkoff = xfs_attr_shortform_allfit(bp, dp))) { xfs_bmap_init(args->flist, args->firstblock); - error = xfs_attr_leaf_to_shortform(bp, args, forkoff); + error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); /* bp is gone due to xfs_da_shrink_inode */ if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, @@ -881,7 +881,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args) ASSERT(committed); args->trans = NULL; xfs_bmap_cancel(args->flist); - return(error); + return error; } /* @@ -891,7 +891,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args) if (committed) xfs_trans_ijoin(args->trans, dp, 0); } - return(0); + return 0; } /* @@ -909,21 +909,21 @@ xfs_attr_leaf_get(xfs_da_args_t *args) trace_xfs_attr_leaf_get(args); args->blkno = 0; - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); if (error) return error; - error = xfs_attr_leaf_lookup_int(bp, args); + error = xfs_attr3_leaf_lookup_int(bp, args); if (error != EEXIST) { xfs_trans_brelse(args->trans, bp); - return(error); + return error; } - error = xfs_attr_leaf_getvalue(bp, args); + error = xfs_attr3_leaf_getvalue(bp, args); xfs_trans_brelse(args->trans, bp); if (!error && (args->rmtblkno > 0) && !(args->flags & ATTR_KERNOVAL)) { error = xfs_attr_rmtval_get(args); } - return(error); + return error; } /*======================================================================== @@ -989,7 +989,7 @@ restart: args->rmtblkcnt = 0; } - retval = xfs_attr_leaf_add(blk->bp, state->args); + retval = xfs_attr3_leaf_add(blk->bp, state->args); if (retval == ENOSPC) { if (state->path.active == 1) { /* @@ -999,7 +999,7 @@ restart: */ xfs_da_state_free(state); xfs_bmap_init(args->flist, args->firstblock); - error = xfs_attr_leaf_to_node(args); + error = xfs_attr3_leaf_to_node(args); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, @@ -1101,7 +1101,7 @@ restart: * In a separate transaction, set the incomplete flag on the * "old" attr and clear the incomplete flag on the "new" attr. */ - error = xfs_attr_leaf_flipflags(args); + error = xfs_attr3_leaf_flipflags(args); if (error) goto out; @@ -1140,7 +1140,7 @@ restart: */ blk = &state->path.blk[ state->path.active-1 ]; ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC); - error = xfs_attr_leaf_remove(blk->bp, args); + error = xfs_attr3_leaf_remove(blk->bp, args); xfs_da3_fixhashpath(state, &state->path); /* @@ -1181,7 +1181,7 @@ restart: /* * Added a "remote" value, just clear the incomplete flag. */ - error = xfs_attr_leaf_clearflag(args); + error = xfs_attr3_leaf_clearflag(args); if (error) goto out; } @@ -1255,7 +1255,7 @@ xfs_attr_node_removename(xfs_da_args_t *args) * Mark the attribute as INCOMPLETE, then bunmapi() the * remote value. */ - error = xfs_attr_leaf_setflag(args); + error = xfs_attr3_leaf_setflag(args); if (error) goto out; error = xfs_attr_rmtval_remove(args); @@ -1276,7 +1276,7 @@ xfs_attr_node_removename(xfs_da_args_t *args) */ blk = &state->path.blk[ state->path.active-1 ]; ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC); - retval = xfs_attr_leaf_remove(blk->bp, args); + retval = xfs_attr3_leaf_remove(blk->bp, args); xfs_da3_fixhashpath(state, &state->path); /* @@ -1322,13 +1322,13 @@ xfs_attr_node_removename(xfs_da_args_t *args) ASSERT(state->path.blk[0].bp); state->path.blk[0].bp = NULL; - error = xfs_attr_leaf_read(args->trans, args->dp, 0, -1, &bp); + error = xfs_attr3_leaf_read(args->trans, args->dp, 0, -1, &bp); if (error) goto out; if ((forkoff = xfs_attr_shortform_allfit(bp, dp))) { xfs_bmap_init(args->flist, args->firstblock); - error = xfs_attr_leaf_to_shortform(bp, args, forkoff); + error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); /* bp is gone due to xfs_da_shrink_inode */ if (!error) { error = xfs_bmap_finish(&args->trans, @@ -1500,7 +1500,7 @@ xfs_attr_node_get(xfs_da_args_t *args) /* * Get the value, local or "remote" */ - retval = xfs_attr_leaf_getvalue(blk->bp, args); + retval = xfs_attr3_leaf_getvalue(blk->bp, args); if (!retval && (args->rmtblkno > 0) && !(args->flags & ATTR_KERNOVAL)) { retval = xfs_attr_rmtval_get(args); diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index cb37198..9de2244 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2000-2005 Silicon Graphics, Inc. + * Copyright (c) 2013 Red Hat, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -31,68 +32,204 @@ /* * Routines used for growing the Btree. */ -STATIC int xfs_attr_leaf_create(xfs_da_args_t *args, xfs_dablk_t which_block, - struct xfs_buf **bpp); -STATIC int xfs_attr_leaf_add_work(struct xfs_buf *leaf_buffer, - xfs_da_args_t *args, int freemap_index); -STATIC void xfs_attr_leaf_compact(struct xfs_da_args *args, - struct xfs_buf *leaf_buffer); -STATIC void xfs_attr_leaf_rebalance(xfs_da_state_t *state, +STATIC int xfs_attr3_leaf_create(struct xfs_da_args *args, + xfs_dablk_t which_block, struct xfs_buf **bpp); +STATIC int xfs_attr3_leaf_add_work(struct xfs_buf *leaf_buffer, + struct xfs_attr3_icleaf_hdr *ichdr, + struct xfs_da_args *args, int freemap_index); +STATIC void xfs_attr3_leaf_compact(struct xfs_da_args *args, + struct xfs_attr3_icleaf_hdr *ichdr, + struct xfs_buf *leaf_buffer); +STATIC void xfs_attr3_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, xfs_da_state_blk_t *blk2); -STATIC int xfs_attr_leaf_figure_balance(xfs_da_state_t *state, - xfs_da_state_blk_t *leaf_blk_1, - xfs_da_state_blk_t *leaf_blk_2, - int *number_entries_in_blk1, - int *number_usedbytes_in_blk1); +STATIC int xfs_attr3_leaf_figure_balance(xfs_da_state_t *state, + xfs_da_state_blk_t *leaf_blk_1, + struct xfs_attr3_icleaf_hdr *ichdr1, + xfs_da_state_blk_t *leaf_blk_2, + struct xfs_attr3_icleaf_hdr *ichdr2, + int *number_entries_in_blk1, + int *number_usedbytes_in_blk1); /* * Utility routines. */ -STATIC void xfs_attr_leaf_moveents(xfs_attr_leafblock_t *src_leaf, - int src_start, - xfs_attr_leafblock_t *dst_leaf, - int dst_start, int move_count, - xfs_mount_t *mp); +STATIC void xfs_attr3_leaf_moveents(struct xfs_attr_leafblock *src_leaf, + struct xfs_attr3_icleaf_hdr *src_ichdr, int src_start, + struct xfs_attr_leafblock *dst_leaf, + struct xfs_attr3_icleaf_hdr *dst_ichdr, int dst_start, + int move_count, struct xfs_mount *mp); STATIC int xfs_attr_leaf_entsize(xfs_attr_leafblock_t *leaf, int index); -static void -xfs_attr_leaf_verify( +void +xfs_attr3_leaf_hdr_from_disk( + struct xfs_attr3_icleaf_hdr *to, + struct xfs_attr_leafblock *from) +{ + int i; + + ASSERT(from->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) || + from->hdr.info.magic == cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)); + + if (from->hdr.info.magic == cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)) { + struct xfs_attr3_leaf_hdr *hdr3 = (struct xfs_attr3_leaf_hdr *)from; + + to->forw = be32_to_cpu(hdr3->info.hdr.forw); + to->back = be32_to_cpu(hdr3->info.hdr.back); + to->magic = be16_to_cpu(hdr3->info.hdr.magic); + to->count = be16_to_cpu(hdr3->count); + to->usedbytes = be16_to_cpu(hdr3->usedbytes); + to->firstused = be16_to_cpu(hdr3->firstused); + to->holes = hdr3->holes; + + for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; i++) { + to->freemap[i].base = be16_to_cpu(hdr3->freemap[i].base); + to->freemap[i].size = be16_to_cpu(hdr3->freemap[i].size); + } + return; + } + to->forw = be32_to_cpu(from->hdr.info.forw); + to->back = be32_to_cpu(from->hdr.info.back); + to->magic = be16_to_cpu(from->hdr.info.magic); + to->count = be16_to_cpu(from->hdr.count); + to->usedbytes = be16_to_cpu(from->hdr.usedbytes); + to->firstused = be16_to_cpu(from->hdr.firstused); + to->holes = from->hdr.holes; + + for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; i++) { + to->freemap[i].base = be16_to_cpu(from->hdr.freemap[i].base); + to->freemap[i].size = be16_to_cpu(from->hdr.freemap[i].size); + } +} + +void +xfs_attr3_leaf_hdr_to_disk( + struct xfs_attr_leafblock *to, + struct xfs_attr3_icleaf_hdr *from) +{ + int i; + + ASSERT(from->magic == XFS_ATTR_LEAF_MAGIC || + from->magic == XFS_ATTR3_LEAF_MAGIC); + + if (from->magic == XFS_ATTR3_LEAF_MAGIC) { + struct xfs_attr3_leaf_hdr *hdr3 = (struct xfs_attr3_leaf_hdr *)to; + + hdr3->info.hdr.forw = cpu_to_be32(from->forw); + hdr3->info.hdr.back = cpu_to_be32(from->back); + hdr3->info.hdr.magic = cpu_to_be16(from->magic); + hdr3->count = cpu_to_be16(from->count); + hdr3->usedbytes = cpu_to_be16(from->usedbytes); + hdr3->firstused = cpu_to_be16(from->firstused); + hdr3->holes = from->holes; + hdr3->pad1 = 0; + + for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; i++) { + hdr3->freemap[i].base = cpu_to_be16(from->freemap[i].base); + hdr3->freemap[i].size = cpu_to_be16(from->freemap[i].size); + } + return; + } + to->hdr.info.forw = cpu_to_be32(from->forw); + to->hdr.info.back = cpu_to_be32(from->back); + to->hdr.info.magic = cpu_to_be16(from->magic); + to->hdr.count = cpu_to_be16(from->count); + to->hdr.usedbytes = cpu_to_be16(from->usedbytes); + to->hdr.firstused = cpu_to_be16(from->firstused); + to->hdr.holes = from->holes; + to->hdr.pad1 = 0; + + for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; i++) { + to->hdr.freemap[i].base = cpu_to_be16(from->freemap[i].base); + to->hdr.freemap[i].size = cpu_to_be16(from->freemap[i].size); + } +} + +static bool +xfs_attr3_leaf_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_attr_leaf_hdr *hdr = bp->b_addr; - int block_ok = 0; + struct xfs_attr_leafblock *leaf = bp->b_addr; + struct xfs_attr3_icleaf_hdr ichdr; - block_ok = hdr->info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC); - if (!block_ok) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, hdr); - xfs_buf_ioerror(bp, EFSCORRUPTED); + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_da3_node_hdr *hdr3 = bp->b_addr; + + if (ichdr.magic != XFS_ATTR3_LEAF_MAGIC) + return false; + + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) + return false; + if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) + return false; + } else { + if (ichdr.magic != XFS_ATTR_LEAF_MAGIC) + return false; } + if (ichdr.count == 0) + return false; + + /* XXX: need to range check rest of attr header values */ + /* XXX: hash order check? */ + + return true; } static void -xfs_attr_leaf_read_verify( +xfs_attr3_leaf_write_verify( struct xfs_buf *bp) { - xfs_attr_leaf_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + struct xfs_attr3_leaf_hdr *hdr3 = bp->b_addr; + + if (!xfs_attr3_leaf_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + hdr3->info.lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), XFS_ATTR3_LEAF_CRC_OFF); } +/* + * leaf/node format detection on trees is sketchy, so a node read can be done on + * leaf level blocks when detection identifies the tree as a node format tree + * incorrectly. In this case, we need to swap the verifier to match the correct + * format of the block being read. + */ static void -xfs_attr_leaf_write_verify( - struct xfs_buf *bp) +xfs_attr3_leaf_read_verify( + struct xfs_buf *bp) { - xfs_attr_leaf_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + + if ((xfs_sb_version_hascrc(&mp->m_sb) && + !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), + XFS_ATTR3_LEAF_CRC_OFF)) || + !xfs_attr3_leaf_verify(bp)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + } } -const struct xfs_buf_ops xfs_attr_leaf_buf_ops = { - .verify_read = xfs_attr_leaf_read_verify, - .verify_write = xfs_attr_leaf_write_verify, +const struct xfs_buf_ops xfs_attr3_leaf_buf_ops = { + .verify_read = xfs_attr3_leaf_read_verify, + .verify_write = xfs_attr3_leaf_write_verify, }; int -xfs_attr_leaf_read( +xfs_attr3_leaf_read( struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, @@ -100,7 +237,7 @@ xfs_attr_leaf_read( struct xfs_buf **bpp) { return xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, - XFS_ATTR_FORK, &xfs_attr_leaf_buf_ops); + XFS_ATTR_FORK, &xfs_attr3_leaf_buf_ops); } /*======================================================================== @@ -528,7 +665,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args) } ASSERT(blkno == 0); - error = xfs_attr_leaf_create(args, blkno, &bp); + error = xfs_attr3_leaf_create(args, blkno, &bp); if (error) { error = xfs_da_shrink_inode(args, 0, bp); bp = NULL; @@ -557,9 +694,9 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args) nargs.hashval = xfs_da_hashname(sfe->nameval, sfe->namelen); nargs.flags = XFS_ATTR_NSP_ONDISK_TO_ARGS(sfe->flags); - error = xfs_attr_leaf_lookup_int(bp, &nargs); /* set a->index */ + error = xfs_attr3_leaf_lookup_int(bp, &nargs); /* set a->index */ ASSERT(error == ENOATTR); - error = xfs_attr_leaf_add(bp, &nargs); + error = xfs_attr3_leaf_add(bp, &nargs); ASSERT(error != ENOSPC); if (error) goto out; @@ -596,7 +733,7 @@ xfs_attr_shortform_allfit( continue; /* don't copy partial entries */ if (!(entry->flags & XFS_ATTR_LOCAL)) return(0); - name_loc = xfs_attr_leaf_name_local(leaf, i); + name_loc = xfs_attr3_leaf_name_local(leaf, i); if (name_loc->namelen >= XFS_ATTR_SF_ENTSIZE_MAX) return(0); if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) @@ -616,29 +753,34 @@ xfs_attr_shortform_allfit( * Convert a leaf attribute list to shortform attribute list */ int -xfs_attr_leaf_to_shortform( - struct xfs_buf *bp, - xfs_da_args_t *args, - int forkoff) +xfs_attr3_leaf_to_shortform( + struct xfs_buf *bp, + struct xfs_da_args *args, + int forkoff) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_entry_t *entry; - xfs_attr_leaf_name_local_t *name_loc; - xfs_da_args_t nargs; - xfs_inode_t *dp; - char *tmpbuffer; - int error, i; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_attr_leaf_entry *entry; + struct xfs_attr_leaf_name_local *name_loc; + struct xfs_da_args nargs; + struct xfs_inode *dp = args->dp; + char *tmpbuffer; + int error; + int i; trace_xfs_attr_leaf_to_sf(args); - dp = args->dp; tmpbuffer = kmem_alloc(XFS_LBSIZE(dp->i_mount), KM_SLEEP); - ASSERT(tmpbuffer != NULL); + if (!tmpbuffer) + return ENOMEM; - ASSERT(bp != NULL); memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(dp->i_mount)); + leaf = (xfs_attr_leafblock_t *)tmpbuffer; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + entry = xfs_attr3_leaf_entryp(leaf); + + /* XXX (dgc): buffer is about to be marked stale - why zero it? */ memset(bp->b_addr, 0, XFS_LBSIZE(dp->i_mount)); /* @@ -668,14 +810,14 @@ xfs_attr_leaf_to_shortform( nargs.whichfork = XFS_ATTR_FORK; nargs.trans = args->trans; nargs.op_flags = XFS_DA_OP_OKNOENT; - entry = &leaf->entries[0]; - for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) { + + for (i = 0; i < ichdr.count; entry++, i++) { if (entry->flags & XFS_ATTR_INCOMPLETE) continue; /* don't copy partial entries */ if (!entry->nameidx) continue; ASSERT(entry->flags & XFS_ATTR_LOCAL); - name_loc = xfs_attr_leaf_name_local(leaf, i); + name_loc = xfs_attr3_leaf_name_local(leaf, i); nargs.name = name_loc->nameval; nargs.namelen = name_loc->namelen; nargs.value = &name_loc->nameval[nargs.namelen]; @@ -688,43 +830,50 @@ xfs_attr_leaf_to_shortform( out: kmem_free(tmpbuffer); - return(error); + return error; } /* * Convert from using a single leaf to a root node and a leaf. */ int -xfs_attr_leaf_to_node(xfs_da_args_t *args) +xfs_attr3_leaf_to_node( + struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf; - xfs_da_intnode_t *node; - xfs_inode_t *dp; - struct xfs_buf *bp1, *bp2; - xfs_dablk_t blkno; - int error; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr icleafhdr; + struct xfs_attr_leaf_entry *entries; struct xfs_da_node_entry *btree; + struct xfs_da3_icnode_hdr icnodehdr; + struct xfs_da_intnode *node; + struct xfs_inode *dp = args->dp; + struct xfs_mount *mp = dp->i_mount; + struct xfs_buf *bp1 = NULL; + struct xfs_buf *bp2 = NULL; + xfs_dablk_t blkno; + int error; trace_xfs_attr_leaf_to_node(args); - dp = args->dp; - bp1 = bp2 = NULL; error = xfs_da_grow_inode(args, &blkno); if (error) goto out; - error = xfs_attr_leaf_read(args->trans, args->dp, 0, -1, &bp1); + error = xfs_attr3_leaf_read(args->trans, dp, 0, -1, &bp1); if (error) goto out; - bp2 = NULL; - error = xfs_da_get_buf(args->trans, args->dp, blkno, -1, &bp2, - XFS_ATTR_FORK); + error = xfs_da_get_buf(args->trans, dp, blkno, -1, &bp2, XFS_ATTR_FORK); if (error) goto out; + + /* copy leaf to new buffer, update identifiers */ bp2->b_ops = bp1->b_ops; - memcpy(bp2->b_addr, bp1->b_addr, XFS_LBSIZE(dp->i_mount)); - bp1 = NULL; - xfs_trans_log_buf(args->trans, bp2, 0, XFS_LBSIZE(dp->i_mount) - 1); + memcpy(bp2->b_addr, bp1->b_addr, XFS_LBSIZE(mp)); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_da3_blkinfo *hdr3 = bp2->b_addr; + hdr3->blkno = cpu_to_be64(bp2->b_bn); + } + xfs_trans_log_buf(args->trans, bp2, 0, XFS_LBSIZE(mp) - 1); /* * Set up the new root node. @@ -733,17 +882,22 @@ xfs_attr_leaf_to_node(xfs_da_args_t *args) if (error) goto out; node = bp1->b_addr; + xfs_da3_node_hdr_from_disk(&icnodehdr, node); + btree = xfs_da3_node_tree_p(node); + leaf = bp2->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); + xfs_attr3_leaf_hdr_from_disk(&icleafhdr, leaf); + entries = xfs_attr3_leaf_entryp(leaf); + /* both on-disk, don't endian-flip twice */ - btree = xfs_da3_node_tree_p(node); - btree[0].hashval = leaf->entries[be16_to_cpu(leaf->hdr.count)-1 ].hashval; + btree[0].hashval = entries[icleafhdr.count - 1].hashval; btree[0].before = cpu_to_be32(blkno); - node->hdr.count = cpu_to_be16(1); - xfs_trans_log_buf(args->trans, bp1, 0, XFS_LBSIZE(dp->i_mount) - 1); + icnodehdr.count = 1; + xfs_da3_node_hdr_to_disk(node, &icnodehdr); + xfs_trans_log_buf(args->trans, bp1, 0, XFS_LBSIZE(mp) - 1); error = 0; out: - return(error); + return error; } @@ -756,52 +910,62 @@ out: * or a leaf in a node attribute list. */ STATIC int -xfs_attr_leaf_create( - xfs_da_args_t *args, - xfs_dablk_t blkno, - struct xfs_buf **bpp) +xfs_attr3_leaf_create( + struct xfs_da_args *args, + xfs_dablk_t blkno, + struct xfs_buf **bpp) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_hdr_t *hdr; - xfs_inode_t *dp; - struct xfs_buf *bp; - int error; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_inode *dp = args->dp; + struct xfs_mount *mp = dp->i_mount; + struct xfs_buf *bp; + int error; trace_xfs_attr_leaf_create(args); - dp = args->dp; - ASSERT(dp != NULL); error = xfs_da_get_buf(args->trans, args->dp, blkno, -1, &bp, XFS_ATTR_FORK); if (error) - return(error); - bp->b_ops = &xfs_attr_leaf_buf_ops; + return error; + bp->b_ops = &xfs_attr3_leaf_buf_ops; leaf = bp->b_addr; - memset((char *)leaf, 0, XFS_LBSIZE(dp->i_mount)); - hdr = &leaf->hdr; - hdr->info.magic = cpu_to_be16(XFS_ATTR_LEAF_MAGIC); - hdr->firstused = cpu_to_be16(XFS_LBSIZE(dp->i_mount)); - if (!hdr->firstused) { - hdr->firstused = cpu_to_be16( - XFS_LBSIZE(dp->i_mount) - XFS_ATTR_LEAF_NAME_ALIGN); - } + memset(leaf, 0, XFS_LBSIZE(mp)); + + memset(&ichdr, 0, sizeof(ichdr)); + ichdr.firstused = XFS_LBSIZE(mp); + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + struct xfs_da3_blkinfo *hdr3 = bp->b_addr; - hdr->freemap[0].base = cpu_to_be16(sizeof(xfs_attr_leaf_hdr_t)); - hdr->freemap[0].size = cpu_to_be16(be16_to_cpu(hdr->firstused) - - sizeof(xfs_attr_leaf_hdr_t)); + ichdr.magic = XFS_ATTR3_LEAF_MAGIC; + + hdr3->blkno = cpu_to_be64(bp->b_bn); + hdr3->owner = cpu_to_be64(dp->i_ino); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + + ichdr.freemap[0].base = sizeof(struct xfs_attr3_leaf_hdr); + } else { + ichdr.magic = XFS_ATTR_LEAF_MAGIC; + ichdr.freemap[0].base = sizeof(struct xfs_attr_leaf_hdr); + } + ichdr.freemap[0].size = ichdr.firstused - ichdr.freemap[0].base; - xfs_trans_log_buf(args->trans, bp, 0, XFS_LBSIZE(dp->i_mount) - 1); + xfs_attr3_leaf_hdr_to_disk(leaf, &ichdr); + xfs_trans_log_buf(args->trans, bp, 0, XFS_LBSIZE(mp) - 1); *bpp = bp; - return(0); + return 0; } /* * Split the leaf node, rebalance, then add the new entry. */ int -xfs_attr_leaf_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, - xfs_da_state_blk_t *newblk) +xfs_attr3_leaf_split( + struct xfs_da_state *state, + struct xfs_da_state_blk *oldblk, + struct xfs_da_state_blk *newblk) { xfs_dablk_t blkno; int error; @@ -815,7 +979,7 @@ xfs_attr_leaf_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, error = xfs_da_grow_inode(state->args, &blkno); if (error) return(error); - error = xfs_attr_leaf_create(state->args, blkno, &newblk->bp); + error = xfs_attr3_leaf_create(state->args, blkno, &newblk->bp); if (error) return(error); newblk->blkno = blkno; @@ -825,7 +989,7 @@ xfs_attr_leaf_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * Rebalance the entries across the two leaves. * NOTE: rebalance() currently depends on the 2nd block being empty. */ - xfs_attr_leaf_rebalance(state, oldblk, newblk); + xfs_attr3_leaf_rebalance(state, oldblk, newblk); error = xfs_da3_blk_link(state, oldblk, newblk); if (error) return(error); @@ -839,10 +1003,10 @@ xfs_attr_leaf_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, */ if (state->inleaf) { trace_xfs_attr_leaf_add_old(state->args); - error = xfs_attr_leaf_add(oldblk->bp, state->args); + error = xfs_attr3_leaf_add(oldblk->bp, state->args); } else { trace_xfs_attr_leaf_add_new(state->args); - error = xfs_attr_leaf_add(newblk->bp, state->args); + error = xfs_attr3_leaf_add(newblk->bp, state->args); } /* @@ -857,22 +1021,23 @@ xfs_attr_leaf_split(xfs_da_state_t *state, xfs_da_state_blk_t *oldblk, * Add a name to the leaf attribute list structure. */ int -xfs_attr_leaf_add( +xfs_attr3_leaf_add( struct xfs_buf *bp, struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_hdr_t *hdr; - xfs_attr_leaf_map_t *map; - int tablesize, entsize, sum, tmp, i; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + int tablesize; + int entsize; + int sum; + int tmp; + int i; trace_xfs_attr_leaf_add(args); leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT((args->index >= 0) - && (args->index <= be16_to_cpu(leaf->hdr.count))); - hdr = &leaf->hdr; + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + ASSERT(args->index >= 0 && args->index <= ichdr.count); entsize = xfs_attr_leaf_newentsize(args->namelen, args->valuelen, args->trans->t_mountp->m_sb.sb_blocksize, NULL); @@ -880,25 +1045,23 @@ xfs_attr_leaf_add( * Search through freemap for first-fit on new name length. * (may need to figure in size of entry struct too) */ - tablesize = (be16_to_cpu(hdr->count) + 1) - * sizeof(xfs_attr_leaf_entry_t) - + sizeof(xfs_attr_leaf_hdr_t); - map = &hdr->freemap[XFS_ATTR_LEAF_MAPSIZE-1]; - for (sum = 0, i = XFS_ATTR_LEAF_MAPSIZE-1; i >= 0; map--, i--) { - if (tablesize > be16_to_cpu(hdr->firstused)) { - sum += be16_to_cpu(map->size); + tablesize = (ichdr.count + 1) * sizeof(xfs_attr_leaf_entry_t) + + xfs_attr3_leaf_hdr_size(leaf); + for (sum = 0, i = XFS_ATTR_LEAF_MAPSIZE - 1; i >= 0; i--) { + if (tablesize > ichdr.firstused) { + sum += ichdr.freemap[i].size; continue; } - if (!map->size) + if (!ichdr.freemap[i].size) continue; /* no space in this map */ tmp = entsize; - if (be16_to_cpu(map->base) < be16_to_cpu(hdr->firstused)) + if (ichdr.freemap[i].base < ichdr.firstused) tmp += sizeof(xfs_attr_leaf_entry_t); - if (be16_to_cpu(map->size) >= tmp) { - tmp = xfs_attr_leaf_add_work(bp, args, i); - return(tmp); + if (ichdr.freemap[i].size >= tmp) { + tmp = xfs_attr3_leaf_add_work(bp, &ichdr, args, i); + goto out_log_hdr; } - sum += be16_to_cpu(map->size); + sum += ichdr.freemap[i].size; } /* @@ -906,82 +1069,90 @@ xfs_attr_leaf_add( * and we don't have enough freespace, then compaction will do us * no good and we should just give up. */ - if (!hdr->holes && (sum < entsize)) - return(XFS_ERROR(ENOSPC)); + if (!ichdr.holes && sum < entsize) + return XFS_ERROR(ENOSPC); /* * Compact the entries to coalesce free space. * This may change the hdr->count via dropping INCOMPLETE entries. */ - xfs_attr_leaf_compact(args, bp); + xfs_attr3_leaf_compact(args, &ichdr, bp); /* * After compaction, the block is guaranteed to have only one * free region, in freemap[0]. If it is not big enough, give up. */ - if (be16_to_cpu(hdr->freemap[0].size) - < (entsize + sizeof(xfs_attr_leaf_entry_t))) - return(XFS_ERROR(ENOSPC)); + if (ichdr.freemap[0].size < (entsize + sizeof(xfs_attr_leaf_entry_t))) { + tmp = ENOSPC; + goto out_log_hdr; + } + + tmp = xfs_attr3_leaf_add_work(bp, &ichdr, args, 0); - return(xfs_attr_leaf_add_work(bp, args, 0)); +out_log_hdr: + xfs_attr3_leaf_hdr_to_disk(leaf, &ichdr); + xfs_trans_log_buf(args->trans, bp, + XFS_DA_LOGRANGE(leaf, &leaf->hdr, + xfs_attr3_leaf_hdr_size(leaf))); + return tmp; } /* * Add a name to a leaf attribute list structure. */ STATIC int -xfs_attr_leaf_add_work( - struct xfs_buf *bp, - xfs_da_args_t *args, - int mapindex) +xfs_attr3_leaf_add_work( + struct xfs_buf *bp, + struct xfs_attr3_icleaf_hdr *ichdr, + struct xfs_da_args *args, + int mapindex) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_hdr_t *hdr; - xfs_attr_leaf_entry_t *entry; - xfs_attr_leaf_name_local_t *name_loc; - xfs_attr_leaf_name_remote_t *name_rmt; - xfs_attr_leaf_map_t *map; - xfs_mount_t *mp; - int tmp, i; + struct xfs_attr_leafblock *leaf; + struct xfs_attr_leaf_entry *entry; + struct xfs_attr_leaf_name_local *name_loc; + struct xfs_attr_leaf_name_remote *name_rmt; + struct xfs_attr_leaf_map *map; + struct xfs_mount *mp; + int tmp; + int i; trace_xfs_attr_leaf_add_work(args); leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - hdr = &leaf->hdr; - ASSERT((mapindex >= 0) && (mapindex < XFS_ATTR_LEAF_MAPSIZE)); - ASSERT((args->index >= 0) && (args->index <= be16_to_cpu(hdr->count))); + ASSERT(mapindex >= 0 && mapindex < XFS_ATTR_LEAF_MAPSIZE); + ASSERT(args->index >= 0 && args->index <= ichdr->count); /* * Force open some space in the entry array and fill it in. */ - entry = &leaf->entries[args->index]; - if (args->index < be16_to_cpu(hdr->count)) { - tmp = be16_to_cpu(hdr->count) - args->index; + entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; + if (args->index < ichdr->count) { + tmp = ichdr->count - args->index; tmp *= sizeof(xfs_attr_leaf_entry_t); - memmove((char *)(entry+1), (char *)entry, tmp); + memmove(entry + 1, entry, tmp); xfs_trans_log_buf(args->trans, bp, XFS_DA_LOGRANGE(leaf, entry, tmp + sizeof(*entry))); } - be16_add_cpu(&hdr->count, 1); + ichdr->count++; /* * Allocate space for the new string (at the end of the run). */ - map = &hdr->freemap[mapindex]; mp = args->trans->t_mountp; - ASSERT(be16_to_cpu(map->base) < XFS_LBSIZE(mp)); - ASSERT((be16_to_cpu(map->base) & 0x3) == 0); - ASSERT(be16_to_cpu(map->size) >= + ASSERT(ichdr->freemap[mapindex].base < XFS_LBSIZE(mp)); + ASSERT((ichdr->freemap[mapindex].base & 0x3) == 0); + ASSERT(ichdr->freemap[mapindex].size >= xfs_attr_leaf_newentsize(args->namelen, args->valuelen, mp->m_sb.sb_blocksize, NULL)); - ASSERT(be16_to_cpu(map->size) < XFS_LBSIZE(mp)); - ASSERT((be16_to_cpu(map->size) & 0x3) == 0); - be16_add_cpu(&map->size, - -xfs_attr_leaf_newentsize(args->namelen, args->valuelen, - mp->m_sb.sb_blocksize, &tmp)); - entry->nameidx = cpu_to_be16(be16_to_cpu(map->base) + - be16_to_cpu(map->size)); + ASSERT(ichdr->freemap[mapindex].size < XFS_LBSIZE(mp)); + ASSERT((ichdr->freemap[mapindex].size & 0x3) == 0); + + ichdr->freemap[mapindex].size -= + xfs_attr_leaf_newentsize(args->namelen, args->valuelen, + mp->m_sb.sb_blocksize, &tmp); + + entry->nameidx = cpu_to_be16(ichdr->freemap[mapindex].base + + ichdr->freemap[mapindex].size); entry->hashval = cpu_to_be32(args->hashval); entry->flags = tmp ? XFS_ATTR_LOCAL : 0; entry->flags |= XFS_ATTR_NSP_ARGS_TO_ONDISK(args->flags); @@ -996,7 +1167,7 @@ xfs_attr_leaf_add_work( XFS_DA_LOGRANGE(leaf, entry, sizeof(*entry))); ASSERT((args->index == 0) || (be32_to_cpu(entry->hashval) >= be32_to_cpu((entry-1)->hashval))); - ASSERT((args->index == be16_to_cpu(hdr->count)-1) || + ASSERT((args->index == ichdr->count - 1) || (be32_to_cpu(entry->hashval) <= be32_to_cpu((entry+1)->hashval))); /* @@ -1007,14 +1178,14 @@ xfs_attr_leaf_add_work( * as part of this transaction (a split operation for example). */ if (entry->flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf, args->index); + name_loc = xfs_attr3_leaf_name_local(leaf, args->index); name_loc->namelen = args->namelen; name_loc->valuelen = cpu_to_be16(args->valuelen); memcpy((char *)name_loc->nameval, args->name, args->namelen); memcpy((char *)&name_loc->nameval[args->namelen], args->value, be16_to_cpu(name_loc->valuelen)); } else { - name_rmt = xfs_attr_leaf_name_remote(leaf, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); name_rmt->namelen = args->namelen; memcpy((char *)name_rmt->name, args->name, args->namelen); entry->flags |= XFS_ATTR_INCOMPLETE; @@ -1025,44 +1196,41 @@ xfs_attr_leaf_add_work( args->rmtblkcnt = XFS_B_TO_FSB(mp, args->valuelen); } xfs_trans_log_buf(args->trans, bp, - XFS_DA_LOGRANGE(leaf, xfs_attr_leaf_name(leaf, args->index), + XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), xfs_attr_leaf_entsize(leaf, args->index))); /* * Update the control info for this leaf node */ - if (be16_to_cpu(entry->nameidx) < be16_to_cpu(hdr->firstused)) { - /* both on-disk, don't endian-flip twice */ - hdr->firstused = entry->nameidx; - } - ASSERT(be16_to_cpu(hdr->firstused) >= - ((be16_to_cpu(hdr->count) * sizeof(*entry)) + sizeof(*hdr))); - tmp = (be16_to_cpu(hdr->count)-1) * sizeof(xfs_attr_leaf_entry_t) - + sizeof(xfs_attr_leaf_hdr_t); - map = &hdr->freemap[0]; + if (be16_to_cpu(entry->nameidx) < ichdr->firstused) + ichdr->firstused = be16_to_cpu(entry->nameidx); + + ASSERT(ichdr->firstused >= ichdr->count * sizeof(xfs_attr_leaf_entry_t) + + xfs_attr3_leaf_hdr_size(leaf)); + tmp = (ichdr->count - 1) * sizeof(xfs_attr_leaf_entry_t) + + xfs_attr3_leaf_hdr_size(leaf); + for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; map++, i++) { - if (be16_to_cpu(map->base) == tmp) { - be16_add_cpu(&map->base, sizeof(xfs_attr_leaf_entry_t)); - be16_add_cpu(&map->size, - -((int)sizeof(xfs_attr_leaf_entry_t))); + if (ichdr->freemap[i].base == tmp) { + ichdr->freemap[i].base += sizeof(xfs_attr_leaf_entry_t); + ichdr->freemap[i].size -= sizeof(xfs_attr_leaf_entry_t); } } - be16_add_cpu(&hdr->usedbytes, xfs_attr_leaf_entsize(leaf, args->index)); - xfs_trans_log_buf(args->trans, bp, - XFS_DA_LOGRANGE(leaf, hdr, sizeof(*hdr))); - return(0); + ichdr->usedbytes += xfs_attr_leaf_entsize(leaf, args->index); + return 0; } /* * Garbage collect a leaf attribute list block by copying it to a new buffer. */ STATIC void -xfs_attr_leaf_compact( +xfs_attr3_leaf_compact( struct xfs_da_args *args, + struct xfs_attr3_icleaf_hdr *ichdr_d, struct xfs_buf *bp) { xfs_attr_leafblock_t *leaf_s, *leaf_d; - xfs_attr_leaf_hdr_t *hdr_s, *hdr_d; + struct xfs_attr3_icleaf_hdr ichdr_s; struct xfs_trans *trans = args->trans; struct xfs_mount *mp = trans->t_mountp; char *tmpbuffer; @@ -1079,34 +1247,69 @@ xfs_attr_leaf_compact( */ leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; leaf_d = bp->b_addr; - hdr_s = &leaf_s->hdr; - hdr_d = &leaf_d->hdr; - hdr_d->info = hdr_s->info; /* struct copy */ - hdr_d->firstused = cpu_to_be16(XFS_LBSIZE(mp)); - /* handle truncation gracefully */ - if (!hdr_d->firstused) { - hdr_d->firstused = cpu_to_be16( - XFS_LBSIZE(mp) - XFS_ATTR_LEAF_NAME_ALIGN); - } - hdr_d->usedbytes = 0; - hdr_d->count = 0; - hdr_d->holes = 0; - hdr_d->freemap[0].base = cpu_to_be16(sizeof(xfs_attr_leaf_hdr_t)); - hdr_d->freemap[0].size = cpu_to_be16(be16_to_cpu(hdr_d->firstused) - - sizeof(xfs_attr_leaf_hdr_t)); + ichdr_s = *ichdr_d; /* struct copy */ + ichdr_d->firstused = XFS_LBSIZE(mp); + ichdr_d->usedbytes = 0; + ichdr_d->count = 0; + ichdr_d->holes = 0; + ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); + ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; /* * Copy all entry's in the same (sorted) order, * but allocate name/value pairs packed and in sequence. */ - xfs_attr_leaf_moveents(leaf_s, 0, leaf_d, 0, - be16_to_cpu(hdr_s->count), mp); + xfs_attr3_leaf_moveents(leaf_s, &ichdr_s, 0, leaf_d, ichdr_d, 0, + ichdr_s.count, mp); + /* + * this logs the entire buffer, but the caller must write the header + * back to the buffer when it is finished modifying it. + */ xfs_trans_log_buf(trans, bp, 0, XFS_LBSIZE(mp) - 1); kmem_free(tmpbuffer); } /* + * Compare two leaf blocks "order". + * Return 0 unless leaf2 should go before leaf1. + */ +static int +xfs_attr3_leaf_order( + struct xfs_buf *leaf1_bp, + struct xfs_attr3_icleaf_hdr *leaf1hdr, + struct xfs_buf *leaf2_bp, + struct xfs_attr3_icleaf_hdr *leaf2hdr) +{ + struct xfs_attr_leaf_entry *entries1; + struct xfs_attr_leaf_entry *entries2; + + entries1 = xfs_attr3_leaf_entryp(leaf1_bp->b_addr); + entries2 = xfs_attr3_leaf_entryp(leaf2_bp->b_addr); + if (leaf1hdr->count > 0 && leaf2hdr->count > 0 && + ((be32_to_cpu(entries2[0].hashval) < + be32_to_cpu(entries1[0].hashval)) || + (be32_to_cpu(entries2[leaf2hdr->count - 1].hashval) < + be32_to_cpu(entries1[leaf1hdr->count - 1].hashval)))) { + return 1; + } + return 0; +} + +int +xfs_attr_leaf_order( + struct xfs_buf *leaf1_bp, + struct xfs_buf *leaf2_bp) +{ + struct xfs_attr3_icleaf_hdr ichdr1; + struct xfs_attr3_icleaf_hdr ichdr2; + + xfs_attr3_leaf_hdr_from_disk(&ichdr1, leaf1_bp->b_addr); + xfs_attr3_leaf_hdr_from_disk(&ichdr2, leaf2_bp->b_addr); + return xfs_attr3_leaf_order(leaf1_bp, &ichdr1, leaf2_bp, &ichdr2); +} + +/* * Redistribute the attribute list entries between two leaf nodes, * taking into account the size of the new entry. * @@ -1119,14 +1322,23 @@ xfs_attr_leaf_compact( * the "new" and "old" values can end up in different blocks. */ STATIC void -xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, - xfs_da_state_blk_t *blk2) +xfs_attr3_leaf_rebalance( + struct xfs_da_state *state, + struct xfs_da_state_blk *blk1, + struct xfs_da_state_blk *blk2) { - xfs_da_args_t *args; - xfs_da_state_blk_t *tmp_blk; - xfs_attr_leafblock_t *leaf1, *leaf2; - xfs_attr_leaf_hdr_t *hdr1, *hdr2; - int count, totallen, max, space, swap; + struct xfs_da_args *args; + struct xfs_attr_leafblock *leaf1; + struct xfs_attr_leafblock *leaf2; + struct xfs_attr3_icleaf_hdr ichdr1; + struct xfs_attr3_icleaf_hdr ichdr2; + struct xfs_attr_leaf_entry *entries1; + struct xfs_attr_leaf_entry *entries2; + int count; + int totallen; + int max; + int space; + int swap; /* * Set up environment. @@ -1135,9 +1347,9 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, ASSERT(blk2->magic == XFS_ATTR_LEAF_MAGIC); leaf1 = blk1->bp->b_addr; leaf2 = blk2->bp->b_addr; - ASSERT(leaf1->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT(leaf2->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT(leaf2->hdr.count == 0); + xfs_attr3_leaf_hdr_from_disk(&ichdr1, leaf1); + xfs_attr3_leaf_hdr_from_disk(&ichdr2, leaf2); + ASSERT(ichdr2.count == 0); args = state->args; trace_xfs_attr_leaf_rebalance(args); @@ -1149,16 +1361,23 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * second block, this code should never set "swap". */ swap = 0; - if (xfs_attr_leaf_order(blk1->bp, blk2->bp)) { + if (xfs_attr3_leaf_order(blk1->bp, &ichdr1, blk2->bp, &ichdr2)) { + struct xfs_da_state_blk *tmp_blk; + struct xfs_attr3_icleaf_hdr tmp_ichdr; + tmp_blk = blk1; blk1 = blk2; blk2 = tmp_blk; + + /* struct copies to swap them rather than reconverting */ + tmp_ichdr = ichdr1; + ichdr1 = ichdr2; + ichdr2 = tmp_ichdr; + leaf1 = blk1->bp->b_addr; leaf2 = blk2->bp->b_addr; swap = 1; } - hdr1 = &leaf1->hdr; - hdr2 = &leaf2->hdr; /* * Examine entries until we reduce the absolute difference in @@ -1168,41 +1387,39 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * "inleaf" is true if the new entry should be inserted into blk1. * If "swap" is also true, then reverse the sense of "inleaf". */ - state->inleaf = xfs_attr_leaf_figure_balance(state, blk1, blk2, - &count, &totallen); + state->inleaf = xfs_attr3_leaf_figure_balance(state, blk1, &ichdr1, + blk2, &ichdr2, + &count, &totallen); if (swap) state->inleaf = !state->inleaf; /* * Move any entries required from leaf to leaf: */ - if (count < be16_to_cpu(hdr1->count)) { + if (count < ichdr1.count) { /* * Figure the total bytes to be added to the destination leaf. */ /* number entries being moved */ - count = be16_to_cpu(hdr1->count) - count; - space = be16_to_cpu(hdr1->usedbytes) - totallen; + count = ichdr1.count - count; + space = ichdr1.usedbytes - totallen; space += count * sizeof(xfs_attr_leaf_entry_t); /* * leaf2 is the destination, compact it if it looks tight. */ - max = be16_to_cpu(hdr2->firstused) - - sizeof(xfs_attr_leaf_hdr_t); - max -= be16_to_cpu(hdr2->count) * sizeof(xfs_attr_leaf_entry_t); + max = ichdr2.firstused - xfs_attr3_leaf_hdr_size(leaf1); + max -= ichdr2.count * sizeof(xfs_attr_leaf_entry_t); if (space > max) - xfs_attr_leaf_compact(args, blk2->bp); + xfs_attr3_leaf_compact(args, &ichdr2, blk2->bp); /* * Move high entries from leaf1 to low end of leaf2. */ - xfs_attr_leaf_moveents(leaf1, be16_to_cpu(hdr1->count) - count, - leaf2, 0, count, state->mp); + xfs_attr3_leaf_moveents(leaf1, &ichdr1, ichdr1.count - count, + leaf2, &ichdr2, 0, count, state->mp); - xfs_trans_log_buf(args->trans, blk1->bp, 0, state->blocksize-1); - xfs_trans_log_buf(args->trans, blk2->bp, 0, state->blocksize-1); - } else if (count > be16_to_cpu(hdr1->count)) { + } else if (count > ichdr1.count) { /* * I assert that since all callers pass in an empty * second buffer, this code should never execute. @@ -1213,36 +1430,37 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * Figure the total bytes to be added to the destination leaf. */ /* number entries being moved */ - count -= be16_to_cpu(hdr1->count); - space = totallen - be16_to_cpu(hdr1->usedbytes); + count -= ichdr1.count; + space = totallen - ichdr1.usedbytes; space += count * sizeof(xfs_attr_leaf_entry_t); /* * leaf1 is the destination, compact it if it looks tight. */ - max = be16_to_cpu(hdr1->firstused) - - sizeof(xfs_attr_leaf_hdr_t); - max -= be16_to_cpu(hdr1->count) * sizeof(xfs_attr_leaf_entry_t); + max = ichdr1.firstused - xfs_attr3_leaf_hdr_size(leaf1); + max -= ichdr1.count * sizeof(xfs_attr_leaf_entry_t); if (space > max) - xfs_attr_leaf_compact(args, blk1->bp); + xfs_attr3_leaf_compact(args, &ichdr1, blk1->bp); /* * Move low entries from leaf2 to high end of leaf1. */ - xfs_attr_leaf_moveents(leaf2, 0, leaf1, - be16_to_cpu(hdr1->count), count, state->mp); - - xfs_trans_log_buf(args->trans, blk1->bp, 0, state->blocksize-1); - xfs_trans_log_buf(args->trans, blk2->bp, 0, state->blocksize-1); + xfs_attr3_leaf_moveents(leaf2, &ichdr2, 0, leaf1, &ichdr1, + ichdr1.count, count, state->mp); } + xfs_attr3_leaf_hdr_to_disk(leaf1, &ichdr1); + xfs_attr3_leaf_hdr_to_disk(leaf2, &ichdr2); + xfs_trans_log_buf(args->trans, blk1->bp, 0, state->blocksize-1); + xfs_trans_log_buf(args->trans, blk2->bp, 0, state->blocksize-1); + /* * Copy out last hashval in each block for B-tree code. */ - blk1->hashval = be32_to_cpu( - leaf1->entries[be16_to_cpu(leaf1->hdr.count)-1].hashval); - blk2->hashval = be32_to_cpu( - leaf2->entries[be16_to_cpu(leaf2->hdr.count)-1].hashval); + entries1 = xfs_attr3_leaf_entryp(leaf1); + entries2 = xfs_attr3_leaf_entryp(leaf2); + blk1->hashval = be32_to_cpu(entries1[ichdr1.count - 1].hashval); + blk2->hashval = be32_to_cpu(entries2[ichdr2.count - 1].hashval); /* * Adjust the expected index for insertion. @@ -1256,12 +1474,12 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * inserting. The index/blkno fields refer to the "old" entry, * while the index2/blkno2 fields refer to the "new" entry. */ - if (blk1->index > be16_to_cpu(leaf1->hdr.count)) { + if (blk1->index > ichdr1.count) { ASSERT(state->inleaf == 0); - blk2->index = blk1->index - be16_to_cpu(leaf1->hdr.count); + blk2->index = blk1->index - ichdr1.count; args->index = args->index2 = blk2->index; args->blkno = args->blkno2 = blk2->blkno; - } else if (blk1->index == be16_to_cpu(leaf1->hdr.count)) { + } else if (blk1->index == ichdr1.count) { if (state->inleaf) { args->index = blk1->index; args->blkno = blk1->blkno; @@ -1273,8 +1491,7 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * is already stored in blkno2/index2, so don't * overwrite it overwise we corrupt the tree. */ - blk2->index = blk1->index - - be16_to_cpu(leaf1->hdr.count); + blk2->index = blk1->index - ichdr1.count; args->index = blk2->index; args->blkno = blk2->blkno; if (!state->extravalid) { @@ -1302,42 +1519,40 @@ xfs_attr_leaf_rebalance(xfs_da_state_t *state, xfs_da_state_blk_t *blk1, * GROT: Do a double-split for this case? */ STATIC int -xfs_attr_leaf_figure_balance(xfs_da_state_t *state, - xfs_da_state_blk_t *blk1, - xfs_da_state_blk_t *blk2, - int *countarg, int *usedbytesarg) +xfs_attr3_leaf_figure_balance( + struct xfs_da_state *state, + struct xfs_da_state_blk *blk1, + struct xfs_attr3_icleaf_hdr *ichdr1, + struct xfs_da_state_blk *blk2, + struct xfs_attr3_icleaf_hdr *ichdr2, + int *countarg, + int *usedbytesarg) { - xfs_attr_leafblock_t *leaf1, *leaf2; - xfs_attr_leaf_hdr_t *hdr1, *hdr2; - xfs_attr_leaf_entry_t *entry; - int count, max, index, totallen, half; - int lastdelta, foundit, tmp; - - /* - * Set up environment. - */ - leaf1 = blk1->bp->b_addr; - leaf2 = blk2->bp->b_addr; - hdr1 = &leaf1->hdr; - hdr2 = &leaf2->hdr; - foundit = 0; - totallen = 0; + struct xfs_attr_leafblock *leaf1 = blk1->bp->b_addr; + struct xfs_attr_leafblock *leaf2 = blk2->bp->b_addr; + struct xfs_attr_leaf_entry *entry; + int count; + int max; + int index; + int totallen = 0; + int half; + int lastdelta; + int foundit = 0; + int tmp; /* * Examine entries until we reduce the absolute difference in * byte usage between the two blocks to a minimum. */ - max = be16_to_cpu(hdr1->count) + be16_to_cpu(hdr2->count); - half = (max+1) * sizeof(*entry); - half += be16_to_cpu(hdr1->usedbytes) + - be16_to_cpu(hdr2->usedbytes) + - xfs_attr_leaf_newentsize( - state->args->namelen, - state->args->valuelen, - state->blocksize, NULL); + max = ichdr1->count + ichdr2->count; + half = (max + 1) * sizeof(*entry); + half += ichdr1->usedbytes + ichdr2->usedbytes + + xfs_attr_leaf_newentsize(state->args->namelen, + state->args->valuelen, + state->blocksize, NULL); half /= 2; lastdelta = state->blocksize; - entry = &leaf1->entries[0]; + entry = xfs_attr3_leaf_entryp(leaf1); for (count = index = 0; count < max; entry++, index++, count++) { #define XFS_ATTR_ABS(A) (((A) < 0) ? -(A) : (A)) @@ -1360,9 +1575,9 @@ xfs_attr_leaf_figure_balance(xfs_da_state_t *state, /* * Wrap around into the second block if necessary. */ - if (count == be16_to_cpu(hdr1->count)) { + if (count == ichdr1->count) { leaf1 = leaf2; - entry = &leaf1->entries[0]; + entry = xfs_attr3_leaf_entryp(leaf1); index = 0; } @@ -1393,7 +1608,7 @@ xfs_attr_leaf_figure_balance(xfs_da_state_t *state, *countarg = count; *usedbytesarg = totallen; - return(foundit); + return foundit; } /*======================================================================== @@ -1412,14 +1627,20 @@ xfs_attr_leaf_figure_balance(xfs_da_state_t *state, * GROT: allow for INCOMPLETE entries in calculation. */ int -xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) +xfs_attr3_leaf_toosmall( + struct xfs_da_state *state, + int *action) { - xfs_attr_leafblock_t *leaf; - xfs_da_state_blk_t *blk; - xfs_da_blkinfo_t *info; - int count, bytes, forward, error, retval, i; - xfs_dablk_t blkno; - struct xfs_buf *bp; + struct xfs_attr_leafblock *leaf; + struct xfs_da_state_blk *blk; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_buf *bp; + xfs_dablk_t blkno; + int bytes; + int forward; + int error; + int retval; + int i; trace_xfs_attr_leaf_toosmall(state->args); @@ -1429,13 +1650,11 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) * to coalesce with a sibling. */ blk = &state->path.blk[ state->path.active-1 ]; - info = blk->bp->b_addr; - ASSERT(info->magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - leaf = (xfs_attr_leafblock_t *)info; - count = be16_to_cpu(leaf->hdr.count); - bytes = sizeof(xfs_attr_leaf_hdr_t) + - count * sizeof(xfs_attr_leaf_entry_t) + - be16_to_cpu(leaf->hdr.usedbytes); + leaf = blk->bp->b_addr; + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + bytes = xfs_attr3_leaf_hdr_size(leaf) + + ichdr.count * sizeof(xfs_attr_leaf_entry_t) + + ichdr.usedbytes; if (bytes > (state->blocksize >> 1)) { *action = 0; /* blk over 50%, don't try to join */ return(0); @@ -1447,12 +1666,12 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) * coalesce it with a sibling block. We choose (arbitrarily) * to merge with the forward block unless it is NULL. */ - if (count == 0) { + if (ichdr.count == 0) { /* * Make altpath point to the block we want to keep and * path point to the block we want to drop (this one). */ - forward = (info->forw != 0); + forward = (ichdr.forw != 0); memcpy(&state->altpath, &state->path, sizeof(state->path)); error = xfs_da3_path_shift(state, &state->altpath, forward, 0, &retval); @@ -1463,7 +1682,7 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) } else { *action = 2; } - return(0); + return 0; } /* @@ -1474,28 +1693,28 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) * to shrink an attribute list over time. */ /* start with smaller blk num */ - forward = (be32_to_cpu(info->forw) < be32_to_cpu(info->back)); + forward = ichdr.forw < ichdr.back; for (i = 0; i < 2; forward = !forward, i++) { + struct xfs_attr3_icleaf_hdr ichdr2; if (forward) - blkno = be32_to_cpu(info->forw); + blkno = ichdr.forw; else - blkno = be32_to_cpu(info->back); + blkno = ichdr.back; if (blkno == 0) continue; - error = xfs_attr_leaf_read(state->args->trans, state->args->dp, + error = xfs_attr3_leaf_read(state->args->trans, state->args->dp, blkno, -1, &bp); if (error) return(error); - leaf = (xfs_attr_leafblock_t *)info; - count = be16_to_cpu(leaf->hdr.count); - bytes = state->blocksize - (state->blocksize>>2); - bytes -= be16_to_cpu(leaf->hdr.usedbytes); - leaf = bp->b_addr; - count += be16_to_cpu(leaf->hdr.count); - bytes -= be16_to_cpu(leaf->hdr.usedbytes); - bytes -= count * sizeof(xfs_attr_leaf_entry_t); - bytes -= sizeof(xfs_attr_leaf_hdr_t); + xfs_attr3_leaf_hdr_from_disk(&ichdr2, bp->b_addr); + + bytes = state->blocksize - (state->blocksize >> 2) - + ichdr.usedbytes - ichdr2.usedbytes - + ((ichdr.count + ichdr2.count) * + sizeof(xfs_attr_leaf_entry_t)) - + xfs_attr3_leaf_hdr_size(leaf); + xfs_trans_brelse(state->args->trans, bp); if (bytes >= 0) break; /* fits with at least 25% to spare */ @@ -1534,32 +1753,35 @@ xfs_attr_leaf_toosmall(xfs_da_state_t *state, int *action) * If two leaves are 37% full, when combined they will leave 25% free. */ int -xfs_attr_leaf_remove( - struct xfs_buf *bp, - xfs_da_args_t *args) +xfs_attr3_leaf_remove( + struct xfs_buf *bp, + struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_hdr_t *hdr; - xfs_attr_leaf_map_t *map; - xfs_attr_leaf_entry_t *entry; - int before, after, smallest, entsize; - int tablesize, tmp, i; - xfs_mount_t *mp; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_attr_leaf_entry *entry; + struct xfs_mount *mp = args->trans->t_mountp; + int before; + int after; + int smallest; + int entsize; + int tablesize; + int tmp; + int i; trace_xfs_attr_leaf_remove(args); leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - hdr = &leaf->hdr; - mp = args->trans->t_mountp; - ASSERT((be16_to_cpu(hdr->count) > 0) - && (be16_to_cpu(hdr->count) < (XFS_LBSIZE(mp)/8))); - ASSERT((args->index >= 0) - && (args->index < be16_to_cpu(hdr->count))); - ASSERT(be16_to_cpu(hdr->firstused) >= - ((be16_to_cpu(hdr->count) * sizeof(*entry)) + sizeof(*hdr))); - entry = &leaf->entries[args->index]; - ASSERT(be16_to_cpu(entry->nameidx) >= be16_to_cpu(hdr->firstused)); + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + + ASSERT(ichdr.count > 0 && ichdr.count < XFS_LBSIZE(mp) / 8); + ASSERT(args->index >= 0 && args->index < ichdr.count); + ASSERT(ichdr.firstused >= ichdr.count * sizeof(*entry) + + xfs_attr3_leaf_hdr_size(leaf)); + + entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; + + ASSERT(be16_to_cpu(entry->nameidx) >= ichdr.firstused); ASSERT(be16_to_cpu(entry->nameidx) < XFS_LBSIZE(mp)); /* @@ -1568,30 +1790,28 @@ xfs_attr_leaf_remove( * find smallest free region in case we need to replace it, * adjust any map that borders the entry table, */ - tablesize = be16_to_cpu(hdr->count) * sizeof(xfs_attr_leaf_entry_t) - + sizeof(xfs_attr_leaf_hdr_t); - map = &hdr->freemap[0]; - tmp = be16_to_cpu(map->size); + tablesize = ichdr.count * sizeof(xfs_attr_leaf_entry_t) + + xfs_attr3_leaf_hdr_size(leaf); + tmp = ichdr.freemap[0].size; before = after = -1; smallest = XFS_ATTR_LEAF_MAPSIZE - 1; entsize = xfs_attr_leaf_entsize(leaf, args->index); - for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; map++, i++) { - ASSERT(be16_to_cpu(map->base) < XFS_LBSIZE(mp)); - ASSERT(be16_to_cpu(map->size) < XFS_LBSIZE(mp)); - if (be16_to_cpu(map->base) == tablesize) { - be16_add_cpu(&map->base, - -((int)sizeof(xfs_attr_leaf_entry_t))); - be16_add_cpu(&map->size, sizeof(xfs_attr_leaf_entry_t)); + for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; i++) { + ASSERT(ichdr.freemap[i].base < XFS_LBSIZE(mp)); + ASSERT(ichdr.freemap[i].size < XFS_LBSIZE(mp)); + if (ichdr.freemap[i].base == tablesize) { + ichdr.freemap[i].base -= sizeof(xfs_attr_leaf_entry_t); + ichdr.freemap[i].size += sizeof(xfs_attr_leaf_entry_t); } - if ((be16_to_cpu(map->base) + be16_to_cpu(map->size)) - == be16_to_cpu(entry->nameidx)) { + if (ichdr.freemap[i].base + ichdr.freemap[i].size == + be16_to_cpu(entry->nameidx)) { before = i; - } else if (be16_to_cpu(map->base) - == (be16_to_cpu(entry->nameidx) + entsize)) { + } else if (ichdr.freemap[i].base == + (be16_to_cpu(entry->nameidx) + entsize)) { after = i; - } else if (be16_to_cpu(map->size) < tmp) { - tmp = be16_to_cpu(map->size); + } else if (ichdr.freemap[i].size < tmp) { + tmp = ichdr.freemap[i].size; smallest = i; } } @@ -1602,36 +1822,30 @@ xfs_attr_leaf_remove( */ if ((before >= 0) || (after >= 0)) { if ((before >= 0) && (after >= 0)) { - map = &hdr->freemap[before]; - be16_add_cpu(&map->size, entsize); - be16_add_cpu(&map->size, - be16_to_cpu(hdr->freemap[after].size)); - hdr->freemap[after].base = 0; - hdr->freemap[after].size = 0; + ichdr.freemap[before].size += entsize; + ichdr.freemap[before].size += ichdr.freemap[after].size; + ichdr.freemap[after].base = 0; + ichdr.freemap[after].size = 0; } else if (before >= 0) { - map = &hdr->freemap[before]; - be16_add_cpu(&map->size, entsize); + ichdr.freemap[before].size += entsize; } else { - map = &hdr->freemap[after]; - /* both on-disk, don't endian flip twice */ - map->base = entry->nameidx; - be16_add_cpu(&map->size, entsize); + ichdr.freemap[after].base = be16_to_cpu(entry->nameidx); + ichdr.freemap[after].size += entsize; } } else { /* * Replace smallest region (if it is smaller than free'd entry) */ - map = &hdr->freemap[smallest]; - if (be16_to_cpu(map->size) < entsize) { - map->base = cpu_to_be16(be16_to_cpu(entry->nameidx)); - map->size = cpu_to_be16(entsize); + if (ichdr.freemap[smallest].size < entsize) { + ichdr.freemap[smallest].base = be16_to_cpu(entry->nameidx); + ichdr.freemap[smallest].size = entsize; } } /* * Did we remove the first entry? */ - if (be16_to_cpu(entry->nameidx) == be16_to_cpu(hdr->firstused)) + if (be16_to_cpu(entry->nameidx) == ichdr.firstused) smallest = 1; else smallest = 0; @@ -1639,20 +1853,20 @@ xfs_attr_leaf_remove( /* * Compress the remaining entries and zero out the removed stuff. */ - memset(xfs_attr_leaf_name(leaf, args->index), 0, entsize); - be16_add_cpu(&hdr->usedbytes, -entsize); + memset(xfs_attr3_leaf_name(leaf, args->index), 0, entsize); + ichdr.usedbytes -= entsize; xfs_trans_log_buf(args->trans, bp, - XFS_DA_LOGRANGE(leaf, xfs_attr_leaf_name(leaf, args->index), + XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), entsize)); - tmp = (be16_to_cpu(hdr->count) - args->index) - * sizeof(xfs_attr_leaf_entry_t); - memmove((char *)entry, (char *)(entry+1), tmp); - be16_add_cpu(&hdr->count, -1); + tmp = (ichdr.count - args->index) * sizeof(xfs_attr_leaf_entry_t); + memmove(entry, entry + 1, tmp); + ichdr.count--; xfs_trans_log_buf(args->trans, bp, - XFS_DA_LOGRANGE(leaf, entry, tmp + sizeof(*entry))); - entry = &leaf->entries[be16_to_cpu(hdr->count)]; - memset((char *)entry, 0, sizeof(xfs_attr_leaf_entry_t)); + XFS_DA_LOGRANGE(leaf, entry, tmp + sizeof(xfs_attr_leaf_entry_t))); + + entry = &xfs_attr3_leaf_entryp(leaf)[ichdr.count]; + memset(entry, 0, sizeof(xfs_attr_leaf_entry_t)); /* * If we removed the first entry, re-find the first used byte @@ -1662,130 +1876,130 @@ xfs_attr_leaf_remove( */ if (smallest) { tmp = XFS_LBSIZE(mp); - entry = &leaf->entries[0]; - for (i = be16_to_cpu(hdr->count)-1; i >= 0; entry++, i--) { - ASSERT(be16_to_cpu(entry->nameidx) >= - be16_to_cpu(hdr->firstused)); + entry = xfs_attr3_leaf_entryp(leaf); + for (i = ichdr.count - 1; i >= 0; entry++, i--) { + ASSERT(be16_to_cpu(entry->nameidx) >= ichdr.firstused); ASSERT(be16_to_cpu(entry->nameidx) < XFS_LBSIZE(mp)); if (be16_to_cpu(entry->nameidx) < tmp) tmp = be16_to_cpu(entry->nameidx); } - hdr->firstused = cpu_to_be16(tmp); - if (!hdr->firstused) { - hdr->firstused = cpu_to_be16( - tmp - XFS_ATTR_LEAF_NAME_ALIGN); - } + ichdr.firstused = tmp; + if (!ichdr.firstused) + ichdr.firstused = tmp - XFS_ATTR_LEAF_NAME_ALIGN; } else { - hdr->holes = 1; /* mark as needing compaction */ + ichdr.holes = 1; /* mark as needing compaction */ } + xfs_attr3_leaf_hdr_to_disk(leaf, &ichdr); xfs_trans_log_buf(args->trans, bp, - XFS_DA_LOGRANGE(leaf, hdr, sizeof(*hdr))); + XFS_DA_LOGRANGE(leaf, &leaf->hdr, + xfs_attr3_leaf_hdr_size(leaf))); /* * Check if leaf is less than 50% full, caller may want to * "join" the leaf with a sibling if so. */ - tmp = sizeof(xfs_attr_leaf_hdr_t); - tmp += be16_to_cpu(leaf->hdr.count) * sizeof(xfs_attr_leaf_entry_t); - tmp += be16_to_cpu(leaf->hdr.usedbytes); - return(tmp < mp->m_attr_magicpct); /* leaf is < 37% full */ + tmp = ichdr.usedbytes + xfs_attr3_leaf_hdr_size(leaf) + + ichdr.count * sizeof(xfs_attr_leaf_entry_t); + + return tmp < mp->m_attr_magicpct; /* leaf is < 37% full */ } /* * Move all the attribute list entries from drop_leaf into save_leaf. */ void -xfs_attr_leaf_unbalance(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, - xfs_da_state_blk_t *save_blk) +xfs_attr3_leaf_unbalance( + struct xfs_da_state *state, + struct xfs_da_state_blk *drop_blk, + struct xfs_da_state_blk *save_blk) { - xfs_attr_leafblock_t *drop_leaf, *save_leaf, *tmp_leaf; - xfs_attr_leaf_hdr_t *drop_hdr, *save_hdr, *tmp_hdr; - xfs_mount_t *mp; - char *tmpbuffer; + struct xfs_attr_leafblock *drop_leaf = drop_blk->bp->b_addr; + struct xfs_attr_leafblock *save_leaf = save_blk->bp->b_addr; + struct xfs_attr3_icleaf_hdr drophdr; + struct xfs_attr3_icleaf_hdr savehdr; + struct xfs_attr_leaf_entry *entry; + struct xfs_mount *mp = state->mp; trace_xfs_attr_leaf_unbalance(state->args); - /* - * Set up environment. - */ - mp = state->mp; - ASSERT(drop_blk->magic == XFS_ATTR_LEAF_MAGIC); - ASSERT(save_blk->magic == XFS_ATTR_LEAF_MAGIC); drop_leaf = drop_blk->bp->b_addr; save_leaf = save_blk->bp->b_addr; - ASSERT(drop_leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT(save_leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - drop_hdr = &drop_leaf->hdr; - save_hdr = &save_leaf->hdr; + xfs_attr3_leaf_hdr_from_disk(&drophdr, drop_leaf); + xfs_attr3_leaf_hdr_from_disk(&savehdr, save_leaf); + entry = xfs_attr3_leaf_entryp(drop_leaf); /* * Save last hashval from dying block for later Btree fixup. */ - drop_blk->hashval = be32_to_cpu( - drop_leaf->entries[be16_to_cpu(drop_leaf->hdr.count)-1].hashval); + drop_blk->hashval = be32_to_cpu(entry[drophdr.count - 1].hashval); /* * Check if we need a temp buffer, or can we do it in place. * Note that we don't check "leaf" for holes because we will * always be dropping it, toosmall() decided that for us already. */ - if (save_hdr->holes == 0) { + if (savehdr.holes == 0) { /* * dest leaf has no holes, so we add there. May need * to make some room in the entry array. */ - if (xfs_attr_leaf_order(save_blk->bp, drop_blk->bp)) { - xfs_attr_leaf_moveents(drop_leaf, 0, save_leaf, 0, - be16_to_cpu(drop_hdr->count), mp); + if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, + drop_blk->bp, &drophdr)) { + xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, + save_leaf, &savehdr, 0, + drophdr.count, mp); } else { - xfs_attr_leaf_moveents(drop_leaf, 0, save_leaf, - be16_to_cpu(save_hdr->count), - be16_to_cpu(drop_hdr->count), mp); + xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, + save_leaf, &savehdr, + savehdr.count, drophdr.count, mp); } } else { /* * Destination has holes, so we make a temporary copy * of the leaf and add them both to that. */ - tmpbuffer = kmem_alloc(state->blocksize, KM_SLEEP); - ASSERT(tmpbuffer != NULL); - memset(tmpbuffer, 0, state->blocksize); - tmp_leaf = (xfs_attr_leafblock_t *)tmpbuffer; - tmp_hdr = &tmp_leaf->hdr; - tmp_hdr->info = save_hdr->info; /* struct copy */ - tmp_hdr->count = 0; - tmp_hdr->firstused = cpu_to_be16(state->blocksize); - if (!tmp_hdr->firstused) { - tmp_hdr->firstused = cpu_to_be16( - state->blocksize - XFS_ATTR_LEAF_NAME_ALIGN); - } - tmp_hdr->usedbytes = 0; - if (xfs_attr_leaf_order(save_blk->bp, drop_blk->bp)) { - xfs_attr_leaf_moveents(drop_leaf, 0, tmp_leaf, 0, - be16_to_cpu(drop_hdr->count), mp); - xfs_attr_leaf_moveents(save_leaf, 0, tmp_leaf, - be16_to_cpu(tmp_leaf->hdr.count), - be16_to_cpu(save_hdr->count), mp); + struct xfs_attr_leafblock *tmp_leaf; + struct xfs_attr3_icleaf_hdr tmphdr; + + tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); + memset(tmp_leaf, 0, state->blocksize); + memset(&tmphdr, 0, sizeof(tmphdr)); + + tmphdr.magic = savehdr.magic; + tmphdr.forw = savehdr.forw; + tmphdr.back = savehdr.back; + tmphdr.firstused = state->blocksize; + if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, + drop_blk->bp, &drophdr)) { + xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, + tmp_leaf, &tmphdr, 0, + drophdr.count, mp); + xfs_attr3_leaf_moveents(save_leaf, &savehdr, 0, + tmp_leaf, &tmphdr, tmphdr.count, + savehdr.count, mp); } else { - xfs_attr_leaf_moveents(save_leaf, 0, tmp_leaf, 0, - be16_to_cpu(save_hdr->count), mp); - xfs_attr_leaf_moveents(drop_leaf, 0, tmp_leaf, - be16_to_cpu(tmp_leaf->hdr.count), - be16_to_cpu(drop_hdr->count), mp); + xfs_attr3_leaf_moveents(save_leaf, &savehdr, 0, + tmp_leaf, &tmphdr, 0, + savehdr.count, mp); + xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, + tmp_leaf, &tmphdr, tmphdr.count, + drophdr.count, mp); } - memcpy((char *)save_leaf, (char *)tmp_leaf, state->blocksize); - kmem_free(tmpbuffer); + memcpy(save_leaf, tmp_leaf, state->blocksize); + savehdr = tmphdr; /* struct copy */ + kmem_free(tmp_leaf); } + xfs_attr3_leaf_hdr_to_disk(save_leaf, &savehdr); xfs_trans_log_buf(state->args->trans, save_blk->bp, 0, state->blocksize - 1); /* * Copy out last hashval in each block for B-tree code. */ - save_blk->hashval = be32_to_cpu( - save_leaf->entries[be16_to_cpu(save_leaf->hdr.count)-1].hashval); + entry = xfs_attr3_leaf_entryp(save_leaf); + save_blk->hashval = be32_to_cpu(entry[savehdr.count - 1].hashval); } /*======================================================================== @@ -1806,31 +2020,33 @@ xfs_attr_leaf_unbalance(xfs_da_state_t *state, xfs_da_state_blk_t *drop_blk, * Don't change the args->value unless we find the attribute. */ int -xfs_attr_leaf_lookup_int( - struct xfs_buf *bp, - xfs_da_args_t *args) +xfs_attr3_leaf_lookup_int( + struct xfs_buf *bp, + struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_entry_t *entry; - xfs_attr_leaf_name_local_t *name_loc; - xfs_attr_leaf_name_remote_t *name_rmt; - int probe, span; - xfs_dahash_t hashval; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_attr_leaf_entry *entry; + struct xfs_attr_leaf_entry *entries; + struct xfs_attr_leaf_name_local *name_loc; + struct xfs_attr_leaf_name_remote *name_rmt; + xfs_dahash_t hashval; + int probe; + int span; trace_xfs_attr_leaf_lookup(args); leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT(be16_to_cpu(leaf->hdr.count) - < (XFS_LBSIZE(args->dp->i_mount)/8)); + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + entries = xfs_attr3_leaf_entryp(leaf); + ASSERT(ichdr.count < XFS_LBSIZE(args->dp->i_mount) / 8); /* * Binary search. (note: small blocks will skip this loop) */ hashval = args->hashval; - probe = span = be16_to_cpu(leaf->hdr.count) / 2; - for (entry = &leaf->entries[probe]; span > 4; - entry = &leaf->entries[probe]) { + probe = span = ichdr.count / 2; + for (entry = &entries[probe]; span > 4; entry = &entries[probe]) { span /= 2; if (be32_to_cpu(entry->hashval) < hashval) probe += span; @@ -1839,35 +2055,31 @@ xfs_attr_leaf_lookup_int( else break; } - ASSERT((probe >= 0) && - (!leaf->hdr.count - || (probe < be16_to_cpu(leaf->hdr.count)))); - ASSERT((span <= 4) || (be32_to_cpu(entry->hashval) == hashval)); + ASSERT(probe >= 0 && (!ichdr.count || probe < ichdr.count)); + ASSERT(span <= 4 || be32_to_cpu(entry->hashval) == hashval); /* * Since we may have duplicate hashval's, find the first matching * hashval in the leaf. */ - while ((probe > 0) && (be32_to_cpu(entry->hashval) >= hashval)) { + while (probe > 0 && be32_to_cpu(entry->hashval) >= hashval) { entry--; probe--; } - while ((probe < be16_to_cpu(leaf->hdr.count)) && - (be32_to_cpu(entry->hashval) < hashval)) { + while (probe < ichdr.count && + be32_to_cpu(entry->hashval) < hashval) { entry++; probe++; } - if ((probe == be16_to_cpu(leaf->hdr.count)) || - (be32_to_cpu(entry->hashval) != hashval)) { + if (probe == ichdr.count || be32_to_cpu(entry->hashval) != hashval) { args->index = probe; - return(XFS_ERROR(ENOATTR)); + return XFS_ERROR(ENOATTR); } /* * Duplicate keys may be present, so search all of them for a match. */ - for ( ; (probe < be16_to_cpu(leaf->hdr.count)) && - (be32_to_cpu(entry->hashval) == hashval); + for (; probe < ichdr.count && (be32_to_cpu(entry->hashval) == hashval); entry++, probe++) { /* * GROT: Add code to remove incomplete entries. @@ -1881,21 +2093,22 @@ xfs_attr_leaf_lookup_int( continue; } if (entry->flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf, probe); + name_loc = xfs_attr3_leaf_name_local(leaf, probe); if (name_loc->namelen != args->namelen) continue; - if (memcmp(args->name, (char *)name_loc->nameval, args->namelen) != 0) + if (memcmp(args->name, name_loc->nameval, + args->namelen) != 0) continue; if (!xfs_attr_namesp_match(args->flags, entry->flags)) continue; args->index = probe; - return(XFS_ERROR(EEXIST)); + return XFS_ERROR(EEXIST); } else { - name_rmt = xfs_attr_leaf_name_remote(leaf, probe); + name_rmt = xfs_attr3_leaf_name_remote(leaf, probe); if (name_rmt->namelen != args->namelen) continue; - if (memcmp(args->name, (char *)name_rmt->name, - args->namelen) != 0) + if (memcmp(args->name, name_rmt->name, + args->namelen) != 0) continue; if (!xfs_attr_namesp_match(args->flags, entry->flags)) continue; @@ -1903,11 +2116,11 @@ xfs_attr_leaf_lookup_int( args->rmtblkno = be32_to_cpu(name_rmt->valueblk); args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, be32_to_cpu(name_rmt->valuelen)); - return(XFS_ERROR(EEXIST)); + return XFS_ERROR(EEXIST); } } args->index = probe; - return(XFS_ERROR(ENOATTR)); + return XFS_ERROR(ENOATTR); } /* @@ -1915,40 +2128,40 @@ xfs_attr_leaf_lookup_int( * list structure. */ int -xfs_attr_leaf_getvalue( - struct xfs_buf *bp, - xfs_da_args_t *args) +xfs_attr3_leaf_getvalue( + struct xfs_buf *bp, + struct xfs_da_args *args) { - int valuelen; - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_entry_t *entry; - xfs_attr_leaf_name_local_t *name_loc; - xfs_attr_leaf_name_remote_t *name_rmt; + struct xfs_attr_leafblock *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_attr_leaf_entry *entry; + struct xfs_attr_leaf_name_local *name_loc; + struct xfs_attr_leaf_name_remote *name_rmt; + int valuelen; leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT(be16_to_cpu(leaf->hdr.count) - < (XFS_LBSIZE(args->dp->i_mount)/8)); - ASSERT(args->index < be16_to_cpu(leaf->hdr.count)); + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + ASSERT(ichdr.count < XFS_LBSIZE(args->dp->i_mount) / 8); + ASSERT(args->index < ichdr.count); - entry = &leaf->entries[args->index]; + entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; if (entry->flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf, args->index); + name_loc = xfs_attr3_leaf_name_local(leaf, args->index); ASSERT(name_loc->namelen == args->namelen); ASSERT(memcmp(args->name, name_loc->nameval, args->namelen) == 0); valuelen = be16_to_cpu(name_loc->valuelen); if (args->flags & ATTR_KERNOVAL) { args->valuelen = valuelen; - return(0); + return 0; } if (args->valuelen < valuelen) { args->valuelen = valuelen; - return(XFS_ERROR(ERANGE)); + return XFS_ERROR(ERANGE); } args->valuelen = valuelen; memcpy(args->value, &name_loc->nameval[args->namelen], valuelen); } else { - name_rmt = xfs_attr_leaf_name_remote(leaf, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); ASSERT(name_rmt->namelen == args->namelen); ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0); valuelen = be32_to_cpu(name_rmt->valuelen); @@ -1956,15 +2169,15 @@ xfs_attr_leaf_getvalue( args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, valuelen); if (args->flags & ATTR_KERNOVAL) { args->valuelen = valuelen; - return(0); + return 0; } if (args->valuelen < valuelen) { args->valuelen = valuelen; - return(XFS_ERROR(ERANGE)); + return XFS_ERROR(ERANGE); } args->valuelen = valuelen; } - return(0); + return 0; } /*======================================================================== @@ -1977,13 +2190,21 @@ xfs_attr_leaf_getvalue( */ /*ARGSUSED*/ STATIC void -xfs_attr_leaf_moveents(xfs_attr_leafblock_t *leaf_s, int start_s, - xfs_attr_leafblock_t *leaf_d, int start_d, - int count, xfs_mount_t *mp) +xfs_attr3_leaf_moveents( + struct xfs_attr_leafblock *leaf_s, + struct xfs_attr3_icleaf_hdr *ichdr_s, + int start_s, + struct xfs_attr_leafblock *leaf_d, + struct xfs_attr3_icleaf_hdr *ichdr_d, + int start_d, + int count, + struct xfs_mount *mp) { - xfs_attr_leaf_hdr_t *hdr_s, *hdr_d; - xfs_attr_leaf_entry_t *entry_s, *entry_d; - int desti, tmp, i; + struct xfs_attr_leaf_entry *entry_s; + struct xfs_attr_leaf_entry *entry_d; + int desti; + int tmp; + int i; /* * Check for nothing to do. @@ -1994,45 +2215,41 @@ xfs_attr_leaf_moveents(xfs_attr_leafblock_t *leaf_s, int start_s, /* * Set up environment. */ - ASSERT(leaf_s->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - ASSERT(leaf_d->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - hdr_s = &leaf_s->hdr; - hdr_d = &leaf_d->hdr; - ASSERT((be16_to_cpu(hdr_s->count) > 0) && - (be16_to_cpu(hdr_s->count) < (XFS_LBSIZE(mp)/8))); - ASSERT(be16_to_cpu(hdr_s->firstused) >= - ((be16_to_cpu(hdr_s->count) - * sizeof(*entry_s))+sizeof(*hdr_s))); - ASSERT(be16_to_cpu(hdr_d->count) < (XFS_LBSIZE(mp)/8)); - ASSERT(be16_to_cpu(hdr_d->firstused) >= - ((be16_to_cpu(hdr_d->count) - * sizeof(*entry_d))+sizeof(*hdr_d))); - - ASSERT(start_s < be16_to_cpu(hdr_s->count)); - ASSERT(start_d <= be16_to_cpu(hdr_d->count)); - ASSERT(count <= be16_to_cpu(hdr_s->count)); + ASSERT(ichdr_s->magic == XFS_ATTR_LEAF_MAGIC || + ichdr_s->magic == XFS_ATTR3_LEAF_MAGIC); + ASSERT(ichdr_s->magic == ichdr_d->magic); + ASSERT(ichdr_s->count > 0 && ichdr_s->count < XFS_LBSIZE(mp) / 8); + ASSERT(ichdr_s->firstused >= (ichdr_s->count * sizeof(*entry_s)) + + xfs_attr3_leaf_hdr_size(leaf_s)); + ASSERT(ichdr_d->count < XFS_LBSIZE(mp) / 8); + ASSERT(ichdr_d->firstused >= (ichdr_d->count * sizeof(*entry_d)) + + xfs_attr3_leaf_hdr_size(leaf_d)); + + ASSERT(start_s < ichdr_s->count); + ASSERT(start_d <= ichdr_d->count); + ASSERT(count <= ichdr_s->count); + /* * Move the entries in the destination leaf up to make a hole? */ - if (start_d < be16_to_cpu(hdr_d->count)) { - tmp = be16_to_cpu(hdr_d->count) - start_d; + if (start_d < ichdr_d->count) { + tmp = ichdr_d->count - start_d; tmp *= sizeof(xfs_attr_leaf_entry_t); - entry_s = &leaf_d->entries[start_d]; - entry_d = &leaf_d->entries[start_d + count]; - memmove((char *)entry_d, (char *)entry_s, tmp); + entry_s = &xfs_attr3_leaf_entryp(leaf_d)[start_d]; + entry_d = &xfs_attr3_leaf_entryp(leaf_d)[start_d + count]; + memmove(entry_d, entry_s, tmp); } /* * Copy all entry's in the same (sorted) order, * but allocate attribute info packed and in sequence. */ - entry_s = &leaf_s->entries[start_s]; - entry_d = &leaf_d->entries[start_d]; + entry_s = &xfs_attr3_leaf_entryp(leaf_s)[start_s]; + entry_d = &xfs_attr3_leaf_entryp(leaf_d)[start_d]; desti = start_d; for (i = 0; i < count; entry_s++, entry_d++, desti++, i++) { - ASSERT(be16_to_cpu(entry_s->nameidx) - >= be16_to_cpu(hdr_s->firstused)); + ASSERT(be16_to_cpu(entry_s->nameidx) >= ichdr_s->firstused); tmp = xfs_attr_leaf_entsize(leaf_s, start_s + i); #ifdef GROT /* @@ -2041,36 +2258,34 @@ xfs_attr_leaf_moveents(xfs_attr_leafblock_t *leaf_s, int start_s, * off for 6.2, should be revisited later. */ if (entry_s->flags & XFS_ATTR_INCOMPLETE) { /* skip partials? */ - memset(xfs_attr_leaf_name(leaf_s, start_s + i), 0, tmp); - be16_add_cpu(&hdr_s->usedbytes, -tmp); - be16_add_cpu(&hdr_s->count, -1); + memset(xfs_attr3_leaf_name(leaf_s, start_s + i), 0, tmp); + ichdr_s->usedbytes -= tmp; + ichdr_s->count -= 1; entry_d--; /* to compensate for ++ in loop hdr */ desti--; if ((start_s + i) < offset) result++; /* insertion index adjustment */ } else { #endif /* GROT */ - be16_add_cpu(&hdr_d->firstused, -tmp); + ichdr_d->firstused -= tmp; /* both on-disk, don't endian flip twice */ entry_d->hashval = entry_s->hashval; - /* both on-disk, don't endian flip twice */ - entry_d->nameidx = hdr_d->firstused; + entry_d->nameidx = cpu_to_be16(ichdr_d->firstused); entry_d->flags = entry_s->flags; ASSERT(be16_to_cpu(entry_d->nameidx) + tmp <= XFS_LBSIZE(mp)); - memmove(xfs_attr_leaf_name(leaf_d, desti), - xfs_attr_leaf_name(leaf_s, start_s + i), tmp); + memmove(xfs_attr3_leaf_name(leaf_d, desti), + xfs_attr3_leaf_name(leaf_s, start_s + i), tmp); ASSERT(be16_to_cpu(entry_s->nameidx) + tmp <= XFS_LBSIZE(mp)); - memset(xfs_attr_leaf_name(leaf_s, start_s + i), 0, tmp); - be16_add_cpu(&hdr_s->usedbytes, -tmp); - be16_add_cpu(&hdr_d->usedbytes, tmp); - be16_add_cpu(&hdr_s->count, -1); - be16_add_cpu(&hdr_d->count, 1); - tmp = be16_to_cpu(hdr_d->count) - * sizeof(xfs_attr_leaf_entry_t) - + sizeof(xfs_attr_leaf_hdr_t); - ASSERT(be16_to_cpu(hdr_d->firstused) >= tmp); + memset(xfs_attr3_leaf_name(leaf_s, start_s + i), 0, tmp); + ichdr_s->usedbytes -= tmp; + ichdr_d->usedbytes += tmp; + ichdr_s->count -= 1; + ichdr_d->count += 1; + tmp = ichdr_d->count * sizeof(xfs_attr_leaf_entry_t) + + xfs_attr3_leaf_hdr_size(leaf_d); + ASSERT(ichdr_d->firstused >= tmp); #ifdef GROT } #endif /* GROT */ @@ -2079,71 +2294,40 @@ xfs_attr_leaf_moveents(xfs_attr_leafblock_t *leaf_s, int start_s, /* * Zero out the entries we just copied. */ - if (start_s == be16_to_cpu(hdr_s->count)) { + if (start_s == ichdr_s->count) { tmp = count * sizeof(xfs_attr_leaf_entry_t); - entry_s = &leaf_s->entries[start_s]; + entry_s = &xfs_attr3_leaf_entryp(leaf_s)[start_s]; ASSERT(((char *)entry_s + tmp) <= ((char *)leaf_s + XFS_LBSIZE(mp))); - memset((char *)entry_s, 0, tmp); + memset(entry_s, 0, tmp); } else { /* * Move the remaining entries down to fill the hole, * then zero the entries at the top. */ - tmp = be16_to_cpu(hdr_s->count) - count; - tmp *= sizeof(xfs_attr_leaf_entry_t); - entry_s = &leaf_s->entries[start_s + count]; - entry_d = &leaf_s->entries[start_s]; - memmove((char *)entry_d, (char *)entry_s, tmp); + tmp = (ichdr_s->count - count) - sizeof(xfs_attr_leaf_entry_t); + entry_s = &xfs_attr3_leaf_entryp(leaf_s)[start_s + count]; + entry_d = &xfs_attr3_leaf_entryp(leaf_s)[start_s]; + memmove(entry_d, entry_s, tmp); tmp = count * sizeof(xfs_attr_leaf_entry_t); - entry_s = &leaf_s->entries[be16_to_cpu(hdr_s->count)]; + entry_s = &xfs_attr3_leaf_entryp(leaf_s)[ichdr_s->count]; ASSERT(((char *)entry_s + tmp) <= ((char *)leaf_s + XFS_LBSIZE(mp))); - memset((char *)entry_s, 0, tmp); + memset(entry_s, 0, tmp); } /* * Fill in the freemap information */ - hdr_d->freemap[0].base = cpu_to_be16(sizeof(xfs_attr_leaf_hdr_t)); - be16_add_cpu(&hdr_d->freemap[0].base, be16_to_cpu(hdr_d->count) * - sizeof(xfs_attr_leaf_entry_t)); - hdr_d->freemap[0].size = cpu_to_be16(be16_to_cpu(hdr_d->firstused) - - be16_to_cpu(hdr_d->freemap[0].base)); - hdr_d->freemap[1].base = 0; - hdr_d->freemap[2].base = 0; - hdr_d->freemap[1].size = 0; - hdr_d->freemap[2].size = 0; - hdr_s->holes = 1; /* leaf may not be compact */ -} - -/* - * Compare two leaf blocks "order". - * Return 0 unless leaf2 should go before leaf1. - */ -int -xfs_attr_leaf_order( - struct xfs_buf *leaf1_bp, - struct xfs_buf *leaf2_bp) -{ - xfs_attr_leafblock_t *leaf1, *leaf2; - - leaf1 = leaf1_bp->b_addr; - leaf2 = leaf2_bp->b_addr; - ASSERT((leaf1->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)) && - (leaf2->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC))); - if ((be16_to_cpu(leaf1->hdr.count) > 0) && - (be16_to_cpu(leaf2->hdr.count) > 0) && - ((be32_to_cpu(leaf2->entries[0].hashval) < - be32_to_cpu(leaf1->entries[0].hashval)) || - (be32_to_cpu(leaf2->entries[ - be16_to_cpu(leaf2->hdr.count)-1].hashval) < - be32_to_cpu(leaf1->entries[ - be16_to_cpu(leaf1->hdr.count)-1].hashval)))) { - return(1); - } - return(0); + ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_d); + ichdr_d->freemap[0].base += ichdr_d->count * sizeof(xfs_attr_leaf_entry_t); + ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; + ichdr_d->freemap[1].base = 0; + ichdr_d->freemap[2].base = 0; + ichdr_d->freemap[1].size = 0; + ichdr_d->freemap[2].size = 0; + ichdr_s->holes = 1; /* leaf may not be compact */ } /* @@ -2154,15 +2338,16 @@ xfs_attr_leaf_lasthash( struct xfs_buf *bp, int *count) { - xfs_attr_leafblock_t *leaf; + struct xfs_attr3_icleaf_hdr ichdr; + struct xfs_attr_leaf_entry *entries; - leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); + xfs_attr3_leaf_hdr_from_disk(&ichdr, bp->b_addr); + entries = xfs_attr3_leaf_entryp(bp->b_addr); if (count) - *count = be16_to_cpu(leaf->hdr.count); - if (!leaf->hdr.count) - return(0); - return be32_to_cpu(leaf->entries[be16_to_cpu(leaf->hdr.count)-1].hashval); + *count = ichdr.count; + if (!ichdr.count) + return 0; + return be32_to_cpu(entries[ichdr.count - 1].hashval); } /* @@ -2172,20 +2357,21 @@ xfs_attr_leaf_lasthash( STATIC int xfs_attr_leaf_entsize(xfs_attr_leafblock_t *leaf, int index) { + struct xfs_attr_leaf_entry *entries; xfs_attr_leaf_name_local_t *name_loc; xfs_attr_leaf_name_remote_t *name_rmt; int size; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); - if (leaf->entries[index].flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf, index); + entries = xfs_attr3_leaf_entryp(leaf); + if (entries[index].flags & XFS_ATTR_LOCAL) { + name_loc = xfs_attr3_leaf_name_local(leaf, index); size = xfs_attr_leaf_entsize_local(name_loc->namelen, be16_to_cpu(name_loc->valuelen)); } else { - name_rmt = xfs_attr_leaf_name_remote(leaf, index); + name_rmt = xfs_attr3_leaf_name_remote(leaf, index); size = xfs_attr_leaf_entsize_remote(name_rmt->namelen); } - return(size); + return size; } /* @@ -2210,7 +2396,7 @@ xfs_attr_leaf_newentsize(int namelen, int valuelen, int blocksize, int *local) *local = 0; } } - return(size); + return size; } /*======================================================================== @@ -2221,14 +2407,16 @@ xfs_attr_leaf_newentsize(int namelen, int valuelen, int blocksize, int *local) * Clear the INCOMPLETE flag on an entry in a leaf block. */ int -xfs_attr_leaf_clearflag(xfs_da_args_t *args) +xfs_attr3_leaf_clearflag( + struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_entry_t *entry; - xfs_attr_leaf_name_remote_t *name_rmt; - struct xfs_buf *bp; - int error; + struct xfs_attr_leafblock *leaf; + struct xfs_attr_leaf_entry *entry; + struct xfs_attr_leaf_name_remote *name_rmt; + struct xfs_buf *bp; + int error; #ifdef DEBUG + struct xfs_attr3_icleaf_hdr ichdr; xfs_attr_leaf_name_local_t *name_loc; int namelen; char *name; @@ -2238,23 +2426,25 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args) /* * Set up the operation. */ - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); if (error) return(error); leaf = bp->b_addr; - ASSERT(args->index < be16_to_cpu(leaf->hdr.count)); - ASSERT(args->index >= 0); - entry = &leaf->entries[ args->index ]; + entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; ASSERT(entry->flags & XFS_ATTR_INCOMPLETE); #ifdef DEBUG + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + ASSERT(args->index < ichdr.count); + ASSERT(args->index >= 0); + if (entry->flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf, args->index); + name_loc = xfs_attr3_leaf_name_local(leaf, args->index); namelen = name_loc->namelen; name = (char *)name_loc->nameval; } else { - name_rmt = xfs_attr_leaf_name_remote(leaf, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); namelen = name_rmt->namelen; name = (char *)name_rmt->name; } @@ -2269,7 +2459,7 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args) if (args->rmtblkno) { ASSERT((entry->flags & XFS_ATTR_LOCAL) == 0); - name_rmt = xfs_attr_leaf_name_remote(leaf, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); name_rmt->valueblk = cpu_to_be32(args->rmtblkno); name_rmt->valuelen = cpu_to_be32(args->valuelen); xfs_trans_log_buf(args->trans, bp, @@ -2286,34 +2476,41 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args) * Set the INCOMPLETE flag on an entry in a leaf block. */ int -xfs_attr_leaf_setflag(xfs_da_args_t *args) +xfs_attr3_leaf_setflag( + struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_entry_t *entry; - xfs_attr_leaf_name_remote_t *name_rmt; - struct xfs_buf *bp; + struct xfs_attr_leafblock *leaf; + struct xfs_attr_leaf_entry *entry; + struct xfs_attr_leaf_name_remote *name_rmt; + struct xfs_buf *bp; int error; +#ifdef DEBUG + struct xfs_attr3_icleaf_hdr ichdr; +#endif trace_xfs_attr_leaf_setflag(args); /* * Set up the operation. */ - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); if (error) return(error); leaf = bp->b_addr; - ASSERT(args->index < be16_to_cpu(leaf->hdr.count)); +#ifdef DEBUG + xfs_attr3_leaf_hdr_from_disk(&ichdr, leaf); + ASSERT(args->index < ichdr.count); ASSERT(args->index >= 0); - entry = &leaf->entries[ args->index ]; +#endif + entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; ASSERT((entry->flags & XFS_ATTR_INCOMPLETE) == 0); entry->flags |= XFS_ATTR_INCOMPLETE; xfs_trans_log_buf(args->trans, bp, XFS_DA_LOGRANGE(leaf, entry, sizeof(*entry))); if ((entry->flags & XFS_ATTR_LOCAL) == 0) { - name_rmt = xfs_attr_leaf_name_remote(leaf, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); name_rmt->valueblk = 0; name_rmt->valuelen = 0; xfs_trans_log_buf(args->trans, bp, @@ -2334,14 +2531,20 @@ xfs_attr_leaf_setflag(xfs_da_args_t *args) * Note that they could be in different blocks, or in the same block. */ int -xfs_attr_leaf_flipflags(xfs_da_args_t *args) +xfs_attr3_leaf_flipflags( + struct xfs_da_args *args) { - xfs_attr_leafblock_t *leaf1, *leaf2; - xfs_attr_leaf_entry_t *entry1, *entry2; - xfs_attr_leaf_name_remote_t *name_rmt; - struct xfs_buf *bp1, *bp2; + struct xfs_attr_leafblock *leaf1; + struct xfs_attr_leafblock *leaf2; + struct xfs_attr_leaf_entry *entry1; + struct xfs_attr_leaf_entry *entry2; + struct xfs_attr_leaf_name_remote *name_rmt; + struct xfs_buf *bp1; + struct xfs_buf *bp2; int error; #ifdef DEBUG + struct xfs_attr3_icleaf_hdr ichdr1; + struct xfs_attr3_icleaf_hdr ichdr2; xfs_attr_leaf_name_local_t *name_loc; int namelen1, namelen2; char *name1, *name2; @@ -2352,7 +2555,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) /* * Read the block containing the "old" attr */ - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno, -1, &bp1); + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp1); if (error) return error; @@ -2360,7 +2563,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) * Read the block containing the "new" attr, if it is different */ if (args->blkno2 != args->blkno) { - error = xfs_attr_leaf_read(args->trans, args->dp, args->blkno2, + error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno2, -1, &bp2); if (error) return error; @@ -2369,31 +2572,35 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) } leaf1 = bp1->b_addr; - ASSERT(args->index < be16_to_cpu(leaf1->hdr.count)); - ASSERT(args->index >= 0); - entry1 = &leaf1->entries[ args->index ]; + entry1 = &xfs_attr3_leaf_entryp(leaf1)[args->index]; leaf2 = bp2->b_addr; - ASSERT(args->index2 < be16_to_cpu(leaf2->hdr.count)); - ASSERT(args->index2 >= 0); - entry2 = &leaf2->entries[ args->index2 ]; + entry2 = &xfs_attr3_leaf_entryp(leaf2)[args->index2]; #ifdef DEBUG + xfs_attr3_leaf_hdr_from_disk(&ichdr1, leaf1); + ASSERT(args->index < ichdr1.count); + ASSERT(args->index >= 0); + + xfs_attr3_leaf_hdr_from_disk(&ichdr2, leaf2); + ASSERT(args->index2 < ichdr2.count); + ASSERT(args->index2 >= 0); + if (entry1->flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf1, args->index); + name_loc = xfs_attr3_leaf_name_local(leaf1, args->index); namelen1 = name_loc->namelen; name1 = (char *)name_loc->nameval; } else { - name_rmt = xfs_attr_leaf_name_remote(leaf1, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf1, args->index); namelen1 = name_rmt->namelen; name1 = (char *)name_rmt->name; } if (entry2->flags & XFS_ATTR_LOCAL) { - name_loc = xfs_attr_leaf_name_local(leaf2, args->index2); + name_loc = xfs_attr3_leaf_name_local(leaf2, args->index2); namelen2 = name_loc->namelen; name2 = (char *)name_loc->nameval; } else { - name_rmt = xfs_attr_leaf_name_remote(leaf2, args->index2); + name_rmt = xfs_attr3_leaf_name_remote(leaf2, args->index2); namelen2 = name_rmt->namelen; name2 = (char *)name_rmt->name; } @@ -2410,7 +2617,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) XFS_DA_LOGRANGE(leaf1, entry1, sizeof(*entry1))); if (args->rmtblkno) { ASSERT((entry1->flags & XFS_ATTR_LOCAL) == 0); - name_rmt = xfs_attr_leaf_name_remote(leaf1, args->index); + name_rmt = xfs_attr3_leaf_name_remote(leaf1, args->index); name_rmt->valueblk = cpu_to_be32(args->rmtblkno); name_rmt->valuelen = cpu_to_be32(args->valuelen); xfs_trans_log_buf(args->trans, bp1, @@ -2421,7 +2628,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) xfs_trans_log_buf(args->trans, bp2, XFS_DA_LOGRANGE(leaf2, entry2, sizeof(*entry2))); if ((entry2->flags & XFS_ATTR_LOCAL) == 0) { - name_rmt = xfs_attr_leaf_name_remote(leaf2, args->index2); + name_rmt = xfs_attr3_leaf_name_remote(leaf2, args->index2); name_rmt->valueblk = 0; name_rmt->valuelen = 0; xfs_trans_log_buf(args->trans, bp2, @@ -2433,5 +2640,5 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args) */ error = xfs_trans_roll(&args->trans, args->dp); - return(error); + return error; } diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index 3176626..5db94db 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -120,14 +120,14 @@ xfs_da3_node_hdr_from_disk( to->forw = be32_to_cpu(hdr3->info.hdr.forw); to->back = be32_to_cpu(hdr3->info.hdr.back); to->magic = be16_to_cpu(hdr3->info.hdr.magic); - to->count = be16_to_cpu(hdr3->count); + to->count = be16_to_cpu(hdr3->__count); to->level = be16_to_cpu(hdr3->__level); return; } to->forw = be32_to_cpu(from->hdr.info.forw); to->back = be32_to_cpu(from->hdr.info.back); to->magic = be16_to_cpu(from->hdr.info.magic); - to->count = be16_to_cpu(from->hdr.count); + to->count = be16_to_cpu(from->hdr.__count); to->level = be16_to_cpu(from->hdr.__level); } @@ -145,14 +145,14 @@ xfs_da3_node_hdr_to_disk( hdr3->info.hdr.forw = cpu_to_be32(from->forw); hdr3->info.hdr.back = cpu_to_be32(from->back); hdr3->info.hdr.magic = cpu_to_be16(from->magic); - hdr3->count = cpu_to_be16(from->count); + hdr3->__count = cpu_to_be16(from->count); hdr3->__level = cpu_to_be16(from->level); return; } to->hdr.info.forw = cpu_to_be32(from->forw); to->hdr.info.back = cpu_to_be32(from->back); to->hdr.info.magic = cpu_to_be16(from->magic); - to->hdr.count = cpu_to_be16(from->count); + to->hdr.__count = cpu_to_be16(from->count); to->hdr.__level = cpu_to_be16(from->level); } @@ -247,7 +247,8 @@ xfs_da3_node_read_verify( break; return; case XFS_ATTR_LEAF_MAGIC: - bp->b_ops = &xfs_attr_leaf_buf_ops; + case XFS_ATTR3_LEAF_MAGIC: + bp->b_ops = &xfs_attr3_leaf_buf_ops; bp->b_ops->verify_read(bp); return; case XFS_DIR2_LEAFN_MAGIC: @@ -378,7 +379,7 @@ xfs_da3_split( */ switch (oldblk->magic) { case XFS_ATTR_LEAF_MAGIC: - error = xfs_attr_leaf_split(state, oldblk, newblk); + error = xfs_attr3_leaf_split(state, oldblk, newblk); if ((error != 0) && (error != ENOSPC)) { return(error); /* GROT: attr is inconsistent */ } @@ -393,12 +394,12 @@ xfs_da3_split( if (state->inleaf) { state->extraafter = 0; /* before newblk */ trace_xfs_attr_leaf_split_before(state->args); - error = xfs_attr_leaf_split(state, oldblk, + error = xfs_attr3_leaf_split(state, oldblk, &state->extrablk); } else { state->extraafter = 1; /* after newblk */ trace_xfs_attr_leaf_split_after(state->args); - error = xfs_attr_leaf_split(state, newblk, + error = xfs_attr3_leaf_split(state, newblk, &state->extrablk); } if (error) @@ -938,12 +939,12 @@ xfs_da3_join( */ switch (drop_blk->magic) { case XFS_ATTR_LEAF_MAGIC: - error = xfs_attr_leaf_toosmall(state, &action); + error = xfs_attr3_leaf_toosmall(state, &action); if (error) return(error); if (action == 0) return(0); - xfs_attr_leaf_unbalance(state, drop_blk, save_blk); + xfs_attr3_leaf_unbalance(state, drop_blk, save_blk); break; case XFS_DIR2_LEAFN_MAGIC: error = xfs_dir2_leafn_toosmall(state, &action); @@ -999,7 +1000,8 @@ xfs_da_blkinfo_onlychild_validate(struct xfs_da_blkinfo *blkinfo, __u16 level) if (level == 1) { ASSERT(magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC) || - magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); + magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) || + magic == cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)); } else { ASSERT(magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || magic == cpu_to_be16(XFS_DA3_NODE_MAGIC)); @@ -1456,7 +1458,9 @@ xfs_da3_node_lookup_int( curr = blk->bp->b_addr; blk->magic = be16_to_cpu(curr->magic); - if (blk->magic == XFS_ATTR_LEAF_MAGIC) { + if (blk->magic == XFS_ATTR_LEAF_MAGIC || + blk->magic == XFS_ATTR3_LEAF_MAGIC) { + blk->magic = XFS_ATTR_LEAF_MAGIC; blk->hashval = xfs_attr_leaf_lasthash(blk->bp, NULL); break; } @@ -1536,7 +1540,7 @@ xfs_da3_node_lookup_int( retval = xfs_dir2_leafn_lookup_int(blk->bp, args, &blk->index, state); } else if (blk->magic == XFS_ATTR_LEAF_MAGIC) { - retval = xfs_attr_leaf_lookup_int(blk->bp, args); + retval = xfs_attr3_leaf_lookup_int(blk->bp, args); blk->index = args->index; args->blkno = blk->blkno; } else { @@ -1848,7 +1852,8 @@ xfs_da3_path_shift( info->magic == cpu_to_be16(XFS_DA3_NODE_MAGIC) || info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || info->magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC) || - info->magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); + info->magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) || + info->magic == cpu_to_be16(XFS_ATTR3_LEAF_MAGIC)); /* @@ -1870,6 +1875,7 @@ xfs_da3_path_shift( blkno = be32_to_cpu(btree[blk->index].before); break; case XFS_ATTR_LEAF_MAGIC: + case XFS_ATTR3_LEAF_MAGIC: blk->magic = XFS_ATTR_LEAF_MAGIC; ASSERT(level == path->active-1); blk->index = 0; @@ -2602,6 +2608,7 @@ xfs_da_read_buf( XFS_TEST_ERROR((magic != XFS_DA_NODE_MAGIC) && (magic != XFS_DA3_NODE_MAGIC) && (magic != XFS_ATTR_LEAF_MAGIC) && + (magic != XFS_ATTR3_LEAF_MAGIC) && (magic != XFS_DIR2_LEAF1_MAGIC) && (magic != XFS_DIR3_LEAF1_MAGIC) && (magic != XFS_DIR2_LEAFN_MAGIC) && diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 4897fba..331cbb3 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -1023,7 +1023,7 @@ process_leaf_attr_local( { xfs_attr_leaf_name_local_t *local; - local = xfs_attr_leaf_name_local(leaf, i); + local = xfs_attr3_leaf_name_local(leaf, i); if (local->namelen == 0 || namecheck((char *)&local->nameval[0], local->namelen)) { do_warn( @@ -1077,7 +1077,7 @@ process_leaf_attr_remote( xfs_attr_leaf_name_remote_t *remotep; char* value; - remotep = xfs_attr_leaf_name_remote(leaf, i); + remotep = xfs_attr3_leaf_name_remote(leaf, i); if (remotep->namelen == 0 || namecheck((char *)&remotep->name[0], remotep->namelen) || -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7A1D129E4A for ; Fri, 17 May 2013 06:14:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1B5FF8F8035 for ; Fri, 17 May 2013 04:14:08 -0700 (PDT) X-ASG-Debug-ID: 1368789242-04bdf04224359fa0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id D5QDtbq2Fz6WhRYW for ; Fri, 17 May 2013 04:14:02 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoBDC8zCBgxOQMbGYgLvQCOAoR5A5NnlRGDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:43:59 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbh-0008Sh-U9 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbh-0005FW-FI for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 22/30] xfsprogs: Add verifiers to libxfs buffer interfaces. Date: Fri, 17 May 2013 21:13:17 +1000 X-ASG-Orig-Subj: [PATCH 22/30] xfsprogs: Add verifiers to libxfs buffer interfaces. Message-Id: <1368789205-19969-23-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789242 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Verifiers need to be used everywhere to enable calculation of CRCs during writeback of modified metadata. Add then to the libxfs buffer interfaces conver the internal use of devices to be buftarg aware. Verifiers also require that the buffer has a back pointer to the struct xfs_mount. To make this source level comaptible between kernel and userspace, convert userspace to pass struct xfs_buftargs around rather than a "device". Signed-off-by: Dave Chinner --- copy/xfs_copy.c | 4 +- db/sb.c | 8 +- include/libxfs.h | 96 ++++++++++++++---------- include/libxlog.h | 2 +- include/xfs_dir2.h | 7 ++ libxfs/init.c | 84 ++++++++++++++++++--- libxfs/logitem.c | 4 +- libxfs/rdwr.c | 195 ++++++++++++++++++++++++++++++++---------------- libxfs/trans.c | 16 ++-- libxfs/xfs.h | 11 +-- libxfs/xfs_dir2_priv.h | 8 -- logprint/logprint.c | 4 +- mkfs/proto.c | 4 +- mkfs/xfs_mkfs.c | 56 ++++++++------ repair/attr_repair.c | 10 +-- repair/dino_chunks.c | 8 +- repair/dinode.c | 10 ++- repair/dir2.c | 15 ++-- repair/phase2.c | 7 +- repair/phase3.c | 2 +- repair/phase6.c | 13 ++-- repair/prefetch.c | 4 +- repair/rt.c | 4 +- repair/scan.c | 15 ++-- repair/xfs_repair.c | 6 +- 25 files changed, 381 insertions(+), 212 deletions(-) diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c index 7f65de3..39517da 100644 --- a/copy/xfs_copy.c +++ b/copy/xfs_copy.c @@ -674,8 +674,10 @@ main(int argc, char **argv) /* prepare the mount structure */ - sbp = libxfs_readbuf(xargs.ddev, XFS_SB_DADDR, 1, 0); memset(&mbuf, 0, sizeof(xfs_mount_t)); + libxfs_buftarg_init(&mbuf, xargs.ddev, xargs.logdev, xargs.rtdev); + sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, 1, 0, + &xfs_sb_buf_ops); sb = &mbuf.m_sb; libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbp)); diff --git a/db/sb.c b/db/sb.c index 4da1f6a..54ca7dd 100644 --- a/db/sb.c +++ b/db/sb.c @@ -231,15 +231,14 @@ sb_logcheck(void) } memset(&log, 0, sizeof(log)); - if (!x.logdev) - x.logdev = x.ddev; + libxfs_buftarg_init(mp, x.ddev, x.logdev, x.rtdev); x.logBBsize = XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks); x.logBBstart = XFS_FSB_TO_DADDR(mp, mp->m_sb.sb_logstart); x.lbsize = BBSIZE; if (xfs_sb_version_hassector(&mp->m_sb)) x.lbsize <<= (mp->m_sb.sb_logsectlog - BBSHIFT); - log.l_dev = (mp->m_sb.sb_logstart == 0) ? x.logdev : x.ddev; + log.l_dev = mp->m_logdev_targp; log.l_logsize = BBTOB(log.l_logBBsize); log.l_logBBsize = x.logBBsize; log.l_logBBstart = x.logBBstart; @@ -271,8 +270,7 @@ sb_logzero(uuid_t *uuidp) dbprintf(_("Clearing log and setting UUID\n")); - if (libxfs_log_clear( - (mp->m_sb.sb_logstart == 0) ? x.logdev : x.ddev, + if (libxfs_log_clear(mp->m_logdev_targp, XFS_FSB_TO_DADDR(mp, mp->m_sb.sb_logstart), (xfs_extlen_t)XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks), uuidp, diff --git a/include/libxfs.h b/include/libxfs.h index 972d850..d5131c1 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -116,12 +116,25 @@ typedef struct { #define LIBXFS_EXCLUSIVELY 0x0010 /* disallow other accesses (O_EXCL) */ #define LIBXFS_DIRECT 0x0020 /* can use direct I/O, not buffered */ +/* + * IO verifier callbacks need the xfs_mount pointer, so we have to behave + * somewhat like the kernel now for userspace IO in terms of having buftarg + * based devices... + */ +struct xfs_buftarg { + struct xfs_mount *bt_mount; + dev_t dev; +}; + +extern void libxfs_buftarg_init(struct xfs_mount *mp, dev_t ddev, + dev_t logdev, dev_t rtdev); + extern char *progname; extern int libxfs_init (libxfs_init_t *); extern void libxfs_destroy (void); extern int libxfs_device_to_fd (dev_t); extern dev_t libxfs_device_open (char *, int, int, int); -extern void libxfs_device_zero (dev_t, xfs_daddr_t, uint); +extern void libxfs_device_zero(struct xfs_buftarg *, xfs_daddr_t, uint); extern void libxfs_device_close (dev_t); extern int libxfs_device_alignment (void); extern void libxfs_report(FILE *); @@ -130,11 +143,12 @@ extern void platform_findsizes(char *path, int fd, long long *sz, int *bsz); /* check or write log footer: specify device, log size in blocks & uuid */ typedef xfs_caddr_t (libxfs_get_block_t)(xfs_caddr_t, int, void *); -extern int libxfs_log_clear (dev_t, xfs_daddr_t, uint, uuid_t *, - int, int, int); +extern int libxfs_log_clear (struct xfs_buftarg *, xfs_daddr_t, uint, + uuid_t *, int, int, int); extern int libxfs_log_header (xfs_caddr_t, uuid_t *, int, int, int, libxfs_get_block_t *, void *); + /* * Define a user-level mount structure with all we need * in order to make use of the numerous XFS_* macros. @@ -151,9 +165,12 @@ typedef struct xfs_mount { struct xfs_inode *m_rbmip; /* pointer to bitmap inode */ struct xfs_inode *m_rsumip; /* pointer to summary inode */ struct xfs_inode *m_rootip; /* pointer to root directory */ - dev_t m_dev; - dev_t m_logdev; - dev_t m_rtdev; + struct xfs_buftarg *m_ddev_targp; + struct xfs_buftarg *m_logdev_targp; + struct xfs_buftarg *m_rtdev_targp; +#define m_dev m_ddev_targp +#define m_logdev m_logdev_targp +#define m_rtdev m_rtdev_targp __uint8_t m_dircook_elog; /* log d-cookie entry bits */ __uint8_t m_blkbit_log; /* blocklog + NBBY */ __uint8_t m_blkbb_log; /* blocklog - BBSHIFT */ @@ -218,11 +235,6 @@ extern void libxfs_rtmount_destroy (xfs_mount_t *); /* * Simple I/O interface */ -typedef struct xfs_buftarg { - struct xfs_mount *bt_mount; - dev_t dev; -} xfs_buftarg_t; - #define XB_PAGES 2 struct xfs_buf_map { @@ -244,7 +256,8 @@ typedef struct xfs_buf { xfs_daddr_t b_bn; unsigned b_bcount; unsigned int b_length; - dev_t b_dev; + struct xfs_buftarg *b_target; +#define b_dev b_target->dev pthread_mutex_t b_lock; pthread_t b_holder; unsigned int b_recur; @@ -254,7 +267,6 @@ typedef struct xfs_buf { void *b_addr; int b_error; const struct xfs_buf_ops *b_ops; - struct xfs_buftarg *b_target; struct xfs_perag *b_pag; struct xfs_buf_map *b_map; int b_nmaps; @@ -315,12 +327,12 @@ extern struct cache_operations libxfs_bcache_operations; #ifdef XFS_BUF_TRACING -#define libxfs_readbuf(dev, daddr, len, flags) \ +#define libxfs_readbuf(dev, daddr, len, flags, ops) \ libxfs_trace_readbuf(__FUNCTION__, __FILE__, __LINE__, \ - (dev), (daddr), (len), (flags)) -#define libxfs_readbuf_map(dev, map, nmaps, flags) \ + (dev), (daddr), (len), (flags), (ops)) +#define libxfs_readbuf_map(dev, map, nmaps, flags, ops) \ libxfs_trace_readbuf_map(__FUNCTION__, __FILE__, __LINE__, \ - (dev), (map), (nmaps), (flags)) + (dev), (map), (nmaps), (flags), (ops)) #define libxfs_writebuf(buf, flags) \ libxfs_trace_writebuf(__FUNCTION__, __FILE__, __LINE__, \ (buf), (flags)) @@ -337,28 +349,34 @@ extern struct cache_operations libxfs_bcache_operations; libxfs_trace_putbuf(__FUNCTION__, __FILE__, __LINE__, (buf)) extern xfs_buf_t *libxfs_trace_readbuf(const char *, const char *, int, - dev_t, xfs_daddr_t, int, int); + struct xfs_buftarg *, xfs_daddr_t, int, int, + const struct xfs_buf_ops *); extern xfs_buf_t *libxfs_trace_readbuf_map(const char *, const char *, int, - dev_t, struct xfs_buf_map *, int, int); + struct xfs_buftarg *, struct xfs_buf_map *, int, int, + const struct xfs_buf_ops *); extern int libxfs_trace_writebuf(const char *, const char *, int, xfs_buf_t *, int); extern xfs_buf_t *libxfs_trace_getbuf(const char *, const char *, int, - dev_t, xfs_daddr_t, int); + struct xfs_buftarg *, xfs_daddr_t, int); extern xfs_buf_t *libxfs_trace_getbuf_map(const char *, const char *, int, - dev_t, struct xfs_buf_map *, int); + struct xfs_buftarg *, struct xfs_buf_map *, int); extern xfs_buf_t *libxfs_trace_getbuf_flags(const char *, const char *, int, - dev_t, xfs_daddr_t, int, unsigned int); + struct xfs_buftarg *, xfs_daddr_t, int, unsigned int); extern void libxfs_trace_putbuf (const char *, const char *, int, xfs_buf_t *); #else -extern xfs_buf_t *libxfs_readbuf(dev_t, xfs_daddr_t, int, int); -extern xfs_buf_t *libxfs_readbuf_map(dev_t, struct xfs_buf_map *, int, int); +extern xfs_buf_t *libxfs_readbuf(struct xfs_buftarg *, xfs_daddr_t, int, int, + const struct xfs_buf_ops *); +extern xfs_buf_t *libxfs_readbuf_map(struct xfs_buftarg *, struct xfs_buf_map *, + int, int, const struct xfs_buf_ops *); extern int libxfs_writebuf(xfs_buf_t *, int); -extern xfs_buf_t *libxfs_getbuf(dev_t, xfs_daddr_t, int); -extern xfs_buf_t *libxfs_getbuf_map(dev_t, struct xfs_buf_map *, int); -extern xfs_buf_t *libxfs_getbuf_flags(dev_t, xfs_daddr_t, int, unsigned int); +extern xfs_buf_t *libxfs_getbuf(struct xfs_buftarg *, xfs_daddr_t, int); +extern xfs_buf_t *libxfs_getbuf_map(struct xfs_buftarg *, + struct xfs_buf_map *, int); +extern xfs_buf_t *libxfs_getbuf_flags(struct xfs_buftarg *, xfs_daddr_t, + int, unsigned int); extern void libxfs_putbuf (xfs_buf_t *); #endif @@ -371,11 +389,11 @@ extern int libxfs_bcache_overflowed(void); extern int libxfs_bcache_usage(void); /* Buffer (Raw) Interfaces */ -extern xfs_buf_t *libxfs_getbufr(dev_t, xfs_daddr_t, int); +extern xfs_buf_t *libxfs_getbufr(struct xfs_buftarg *, xfs_daddr_t, int); extern void libxfs_putbufr(xfs_buf_t *); extern int libxfs_writebuf_int(xfs_buf_t *, int); -extern int libxfs_readbufr(dev_t, xfs_daddr_t, xfs_buf_t *, int, int); +extern int libxfs_readbufr(struct xfs_buftarg *, xfs_daddr_t, xfs_buf_t *, int, int); extern int libxfs_bhash_size; extern int libxfs_ihash_size; @@ -461,24 +479,26 @@ extern int libxfs_trans_read_buf (xfs_mount_t *, xfs_trans_t *, dev_t, xfs_daddr_t, int, uint, struct xfs_buf **); */ -struct xfs_buf *libxfs_trans_get_buf_map(struct xfs_trans *tp, dev_t dev, - struct xfs_buf_map *map, int nmaps, - uint flags); +struct xfs_buf *libxfs_trans_get_buf_map(struct xfs_trans *tp, + struct xfs_buftarg *btp, + struct xfs_buf_map *map, int nmaps, + uint flags); static inline struct xfs_buf * libxfs_trans_get_buf( struct xfs_trans *tp, - dev_t dev, + struct xfs_buftarg *btp, xfs_daddr_t blkno, int numblks, uint flags) { DEFINE_SINGLE_BUF_MAP(map, blkno, numblks); - return libxfs_trans_get_buf_map(tp, dev, &map, 1, flags); + return libxfs_trans_get_buf_map(tp, btp, &map, 1, flags); } int libxfs_trans_read_buf_map(struct xfs_mount *mp, - struct xfs_trans *tp, dev_t dev, + struct xfs_trans *tp, + struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps, uint flags, struct xfs_buf **bpp, const struct xfs_buf_ops *ops); @@ -487,7 +507,7 @@ static inline int libxfs_trans_read_buf( struct xfs_mount *mp, struct xfs_trans *tp, - dev_t dev, + struct xfs_buftarg *btp, xfs_daddr_t blkno, int numblks, uint flags, @@ -495,7 +515,7 @@ libxfs_trans_read_buf( const struct xfs_buf_ops *ops) { DEFINE_SINGLE_BUF_MAP(map, blkno, numblks); - return libxfs_trans_read_buf_map(mp, tp, dev, &map, 1, + return libxfs_trans_read_buf_map(mp, tp, btp, &map, 1, flags, bpp, ops); } @@ -507,7 +527,7 @@ typedef struct xfs_inode { xfs_mount_t *i_mount; /* fs mount struct ptr */ xfs_ino_t i_ino; /* inode number (agno/agino) */ struct xfs_imap i_imap; /* location for xfs_imap() */ - dev_t i_dev; /* dev for this inode */ + struct xfs_buftarg i_dev; /* dev for this inode */ xfs_ifork_t *i_afp; /* attribute fork pointer */ xfs_ifork_t i_df; /* data fork */ xfs_trans_t *i_transp; /* ptr to owning transaction */ diff --git a/include/libxlog.h b/include/libxlog.h index 36ede59..b101a6e 100644 --- a/include/libxlog.h +++ b/include/libxlog.h @@ -28,7 +28,7 @@ struct xlog { xfs_lsn_t l_tail_lsn; /* lsn of 1st LR w/ unflush buffers */ xfs_lsn_t l_last_sync_lsn;/* lsn of last LR on disk */ xfs_mount_t *l_mp; /* mount point */ - dev_t l_dev; /* dev_t of log */ + struct xfs_buftarg *l_dev; /* dev_t of log */ xfs_daddr_t l_logBBstart; /* start block of log */ int l_logsize; /* size of log in bytes */ int l_logBBsize; /* size of log in 512 byte chunks */ diff --git a/include/xfs_dir2.h b/include/xfs_dir2.h index 8ab59b5..75e8596 100644 --- a/include/xfs_dir2.h +++ b/include/xfs_dir2.h @@ -104,4 +104,11 @@ extern void xfs_dir2_data_use_free(struct xfs_trans *tp, struct xfs_buf *bp, extern struct xfs_dir2_data_free *xfs_dir2_data_freefind( struct xfs_dir2_data_hdr *hdr, struct xfs_dir2_data_unused *dup); +extern const struct xfs_buf_ops xfs_dir3_block_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_leafn_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_leaf1_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_free_buf_ops; +extern const struct xfs_buf_ops xfs_dir3_data_buf_ops; + + #endif /* __XFS_DIR2_H__ */ diff --git a/libxfs/init.c b/libxfs/init.c index 71da69b..e62f26a 100644 --- a/libxfs/init.c +++ b/libxfs/init.c @@ -457,7 +457,7 @@ rtmount_init( sbp = &mp->m_sb; if (sbp->sb_rblocks == 0) return 0; - if (mp->m_rtdev == 0 && !(flags & LIBXFS_MOUNT_DEBUGGER)) { + if (mp->m_rtdev_targp->dev == 0 && !(flags & LIBXFS_MOUNT_DEBUGGER)) { fprintf(stderr, _("%s: filesystem has a realtime subvolume\n"), progname); return -1; @@ -486,7 +486,7 @@ rtmount_init( return -1; } bp = libxfs_readbuf(mp->m_rtdev, - d - XFS_FSB_TO_BB(mp, 1), XFS_FSB_TO_BB(mp, 1), 0); + d - XFS_FSB_TO_BB(mp, 1), XFS_FSB_TO_BB(mp, 1), 0, NULL); if (bp == NULL) { fprintf(stderr, _("%s: realtime size check failed\n"), progname); @@ -599,6 +599,72 @@ out_unwind: return error; } +static struct xfs_buftarg * +libxfs_buftarg_alloc( + struct xfs_mount *mp, + dev_t dev) +{ + struct xfs_buftarg *btp; + + btp = malloc(sizeof(*btp)); + if (!btp) { + fprintf(stderr, _("%s: buftarg init failed\n"), + progname); + exit(1); + } + btp->bt_mount = mp; + btp->dev = dev; + return btp; +} + +void +libxfs_buftarg_init( + struct xfs_mount *mp, + dev_t dev, + dev_t logdev, + dev_t rtdev) +{ + if (mp->m_ddev_targp) { + /* should already have all buftargs initialised */ + if (mp->m_ddev_targp->dev != dev || + mp->m_ddev_targp->bt_mount != mp) { + fprintf(stderr, + _("%s: bad buftarg reinit, ddev\n"), + progname); + exit(1); + } + if (!logdev || logdev == dev) { + if (mp->m_logdev_targp != mp->m_ddev_targp) { + fprintf(stderr, + _("%s: bad buftarg reinit, ldev mismatch\n"), + progname); + exit(1); + } + } else if (mp->m_logdev_targp->dev != logdev || + mp->m_logdev_targp->bt_mount != mp) { + fprintf(stderr, + _("%s: bad buftarg reinit, logdev\n"), + progname); + exit(1); + } + if (rtdev && (mp->m_rtdev_targp->dev != rtdev || + mp->m_rtdev_targp->bt_mount != mp)) { + fprintf(stderr, + _("%s: bad buftarg reinit, rtdev\n"), + progname); + exit(1); + } + return; + } + + mp->m_ddev_targp = libxfs_buftarg_alloc(mp, dev); + if (!logdev || logdev == dev) + mp->m_logdev_targp = mp->m_ddev_targp; + else + mp->m_logdev_targp = libxfs_buftarg_alloc(mp, logdev); + mp->m_rtdev_targp = libxfs_buftarg_alloc(mp, rtdev); +} + /* * Mount structure initialization, provides a filled-in xfs_mount_t * such that the numerous XFS_* macros can be used. If dev is zero, @@ -618,9 +684,8 @@ libxfs_mount( xfs_sb_t *sbp; int error; - mp->m_dev = dev; - mp->m_rtdev = rtdev; - mp->m_logdev = logdev; + libxfs_buftarg_init(mp, dev, logdev, rtdev); + mp->m_flags = (LIBXFS_MOUNT_32BITINODES|LIBXFS_MOUNT_32BITINOOPT); mp->m_sb = *sb; INIT_RADIX_TREE(&mp->m_perag_tree, GFP_KERNEL); @@ -705,7 +770,7 @@ libxfs_mount( bp = libxfs_readbuf(mp->m_dev, d - XFS_FSS_TO_BB(mp, 1), XFS_FSS_TO_BB(mp, 1), - !(flags & LIBXFS_MOUNT_DEBUGGER)); + !(flags & LIBXFS_MOUNT_DEBUGGER), NULL); if (!bp) { fprintf(stderr, _("%s: data size check failed\n"), progname); if (!(flags & LIBXFS_MOUNT_DEBUGGER)) @@ -713,13 +778,14 @@ libxfs_mount( } else libxfs_putbuf(bp); - if (mp->m_logdev && mp->m_logdev != mp->m_dev) { + if (mp->m_logdev_targp->dev && + mp->m_logdev_targp->dev != mp->m_ddev_targp->dev) { d = (xfs_daddr_t) XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks); if ( (XFS_BB_TO_FSB(mp, d) != mp->m_sb.sb_logblocks) || - (!(bp = libxfs_readbuf(mp->m_logdev, + (!(bp = libxfs_readbuf(mp->m_logdev_targp, d - XFS_FSB_TO_BB(mp, 1), XFS_FSB_TO_BB(mp, 1), - !(flags & LIBXFS_MOUNT_DEBUGGER)))) ) { + !(flags & LIBXFS_MOUNT_DEBUGGER), NULL))) ) { fprintf(stderr, _("%s: log size checks failed\n"), progname); if (!(flags & LIBXFS_MOUNT_DEBUGGER)) diff --git a/libxfs/logitem.c b/libxfs/logitem.c index 84e4c14..73d5a9e 100644 --- a/libxfs/logitem.c +++ b/libxfs/logitem.c @@ -32,7 +32,7 @@ kmem_zone_t *xfs_ili_zone; /* inode log item zone */ xfs_buf_t * xfs_trans_buf_item_match( xfs_trans_t *tp, - dev_t dev, + struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps) { @@ -47,7 +47,7 @@ xfs_trans_buf_item_match( list_for_each_entry(lidp, &tp->t_items, lid_trans) { blip = (struct xfs_buf_log_item *)lidp->lid_item; if (blip->bli_item.li_type == XFS_LI_BUF && - blip->bli_buf->b_dev == dev && + blip->bli_buf->b_target->dev == btp->dev && XFS_BUF_ADDR(blip->bli_buf) == map[0].bm_bn && blip->bli_buf->b_bcount == BBTOB(len)) { ASSERT(blip->bli_buf->b_map_count == nmaps); diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index e9cc7b1..f91a5d0 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -27,7 +27,7 @@ #define IO_BCOMPARE_CHECK void -libxfs_device_zero(dev_t dev, xfs_daddr_t start, uint len) +libxfs_device_zero(struct xfs_buftarg *btp, xfs_daddr_t start, uint len) { xfs_off_t start_offset, end_offset, offset; ssize_t zsize, bytes; @@ -43,7 +43,7 @@ libxfs_device_zero(dev_t dev, xfs_daddr_t start, uint len) } memset(z, 0, zsize); - fd = libxfs_device_to_fd(dev); + fd = libxfs_device_to_fd(btp->dev); start_offset = LIBXFS_BBTOOFF64(start); if ((lseek64(fd, start_offset, SEEK_SET)) < 0) { @@ -102,7 +102,7 @@ static xfs_caddr_t next(xfs_caddr_t ptr, int offset, void *private) int libxfs_log_clear( - dev_t device, + struct xfs_buftarg *btp, xfs_daddr_t start, uint length, uuid_t *fs_uuid, @@ -113,16 +113,16 @@ libxfs_log_clear( xfs_buf_t *bp; int len; - if (!device || !fs_uuid) + if (!btp->dev || !fs_uuid) return -EINVAL; /* first zero the log */ - libxfs_device_zero(device, start, length); + libxfs_device_zero(btp, start, length); /* then write a log record header */ len = ((version == 2) && sunit) ? BTOBB(sunit) : 2; len = MAX(len, 2); - bp = libxfs_getbufr(device, start, len); + bp = libxfs_getbufr(btp, start, len); libxfs_log_header(XFS_BUF_PTR(bp), fs_uuid, version, sunit, fmt, next, bp); bp->b_flags |= LIBXFS_B_DIRTY; @@ -200,12 +200,15 @@ libxfs_log_header( #undef libxfs_getbuf_flags #undef libxfs_putbuf -xfs_buf_t *libxfs_readbuf(dev_t, xfs_daddr_t, int, int); -xfs_buf_t *libxfs_readbuf_map(dev_t, struct xfs_buf_map *, int, int); +xfs_buf_t *libxfs_readbuf(struct xfs_buftarg *, xfs_daddr_t, int, int, + const struct xfs_buf_map *); +xfs_buf_t *libxfs_readbuf_map(struct xfs_buftarg *, struct xfs_buf_map *, + int, int, const struct xfs_buf_map *); int libxfs_writebuf(xfs_buf_t *, int); -xfs_buf_t *libxfs_getbuf(dev_t, xfs_daddr_t, int); -xfs_buf_t *libxfs_getbuf_map(dev_t, struct xfs_buf_map *, int); -xfs_buf_t *libxfs_getbuf_flags(dev_t, xfs_daddr_t, int, unsigned int); +xfs_buf_t *libxfs_getbuf(struct xfs_buftarg *, xfs_daddr_t, int); +xfs_buf_t *libxfs_getbuf_map(struct xfs_buftarg *, struct xfs_buf_map *, int); +xfs_buf_t *libxfs_getbuf_flags(struct xfs_buftarg *, xfs_daddr_t, int, + unsigned int); void libxfs_putbuf (xfs_buf_t *); #define __add_trace(bp, func, file, line) \ @@ -219,18 +222,20 @@ do { \ xfs_buf_t * libxfs_trace_readbuf(const char *func, const char *file, int line, - dev_t dev, xfs_daddr_t blkno, int len, int flags) + struct xfs_buftarg *btp, xfs_daddr_t blkno, int len, int flags, + const struct xfs_buf_ops *ops) { - xfs_buf_t *bp = libxfs_readbuf(dev, blkno, len, flags); + xfs_buf_t *bp = libxfs_readbuf(btp, blkno, len, flags, ops); __add_trace(bp, func, file, line); return bp; } xfs_buf_t * libxfs_trace_readbuf_map(const char *func, const char *file, int line, - dev_t dev, struct xfs_buf_map *map, int nmaps, int flags) + struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps, int flags, + const struct xfs_buf_ops *ops) { - xfs_buf_t *bp = libxfs_readbuf_map(dev, map, nmaps, flags); + xfs_buf_t *bp = libxfs_readbuf_map(btp, map, nmaps, flags, ops); __add_trace(bp, func, file, line); return bp; } @@ -244,27 +249,27 @@ libxfs_trace_writebuf(const char *func, const char *file, int line, xfs_buf_t *b xfs_buf_t * libxfs_trace_getbuf(const char *func, const char *file, int line, - dev_t device, xfs_daddr_t blkno, int len) + struct xfs_buftarg *btp, xfs_daddr_t blkno, int len) { - xfs_buf_t *bp = libxfs_getbuf(device, blkno, len); + xfs_buf_t *bp = libxfs_getbuf(btp, blkno, len); __add_trace(bp, func, file, line); return bp; } xfs_buf_t * libxfs_trace_getbuf_map(const char *func, const char *file, int line, - dev_t device, struct xfs_buf_map *map, int nmaps) + struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps) { - xfs_buf_t *bp = libxfs_getbuf_map(device, map, nmaps); + xfs_buf_t *bp = libxfs_getbuf_map(btp, map, nmaps); __add_trace(bp, func, file, line); return bp; } xfs_buf_t * libxfs_trace_getbuf_flags(const char *func, const char *file, int line, - dev_t device, xfs_daddr_t blkno, int len, unsigned int flags) + struct xfs_buftarg *btp, xfs_daddr_t blkno, int len, unsigned int flags) { - xfs_buf_t *bp = libxfs_getbuf_flags(device, blkno, len, flags); + xfs_buf_t *bp = libxfs_getbuf_flags(btp, blkno, len, flags); __add_trace(bp, func, file, line); return bp; } @@ -283,8 +288,8 @@ libxfs_trace_putbuf(const char *func, const char *file, int line, xfs_buf_t *bp) xfs_buf_t * libxfs_getsb(xfs_mount_t *mp, int flags) { - return libxfs_readbuf(mp->m_dev, XFS_SB_DADDR, - XFS_FSS_TO_BB(mp, 1), flags); + return libxfs_readbuf(mp->m_ddev_targp, XFS_SB_DADDR, + XFS_FSS_TO_BB(mp, 1), flags, &xfs_sb_buf_ops); } kmem_zone_t *xfs_buf_zone; @@ -302,7 +307,7 @@ static struct cache_mru xfs_buf_freelist = * buffer initialisation instead of a contiguous buffer. */ struct xfs_bufkey { - dev_t device; + struct xfs_buftarg *buftarg; xfs_daddr_t blkno; unsigned int bblen; struct xfs_buf_map *map; @@ -322,7 +327,7 @@ libxfs_bcompare(struct cache_node *node, cache_key_t key) struct xfs_bufkey *bkey = (struct xfs_bufkey *)key; #ifdef IO_BCOMPARE_CHECK - if (bp->b_dev == bkey->device && + if (bp->b_target->dev == bkey->buftarg->dev && bp->b_bn == bkey->blkno && bp->b_bcount != BBTOB(bkey->bblen)) fprintf(stderr, "%lx: Badness in key lookup (length)\n" @@ -332,7 +337,7 @@ libxfs_bcompare(struct cache_node *node, cache_key_t key) (unsigned long long)bkey->blkno, BBTOB(bkey->bblen)); #endif - return (bp->b_dev == bkey->device && + return (bp->b_target->dev == bkey->buftarg->dev && bp->b_bn == bkey->blkno && bp->b_bcount == BBTOB(bkey->bblen)); } @@ -346,13 +351,14 @@ libxfs_bprint(xfs_buf_t *bp) } static void -__initbuf(xfs_buf_t *bp, dev_t device, xfs_daddr_t bno, unsigned int bytes) +__initbuf(xfs_buf_t *bp, struct xfs_buftarg *btp, xfs_daddr_t bno, + unsigned int bytes) { bp->b_flags = 0; bp->b_bn = bno; bp->b_bcount = bytes; bp->b_length = BTOBB(bytes); - bp->b_dev = device; + bp->b_target = btp; bp->b_error = 0; if (!bp->b_addr) bp->b_addr = memalign(libxfs_device_alignment(), bytes); @@ -369,16 +375,19 @@ __initbuf(xfs_buf_t *bp, dev_t device, xfs_daddr_t bno, unsigned int bytes) pthread_mutex_init(&bp->b_lock, NULL); bp->b_holder = 0; bp->b_recur = 0; + bp->b_ops = NULL; } static void -libxfs_initbuf(xfs_buf_t *bp, dev_t device, xfs_daddr_t bno, unsigned int bytes) +libxfs_initbuf(xfs_buf_t *bp, struct xfs_buftarg *btp, xfs_daddr_t bno, + unsigned int bytes) { - __initbuf(bp, device, bno, bytes); + __initbuf(bp, btp, bno, bytes); } static void -libxfs_initbuf_map(xfs_buf_t *bp, dev_t device, struct xfs_buf_map *map, int nmaps) +libxfs_initbuf_map(xfs_buf_t *bp, struct xfs_buftarg *btp, + struct xfs_buf_map *map, int nmaps) { unsigned int bytes = 0; int i; @@ -401,7 +410,7 @@ libxfs_initbuf_map(xfs_buf_t *bp, dev_t device, struct xfs_buf_map *map, int nma bytes += BBTOB(map[i].bm_len); } - __initbuf(bp, device, map[0].bm_bn, bytes); + __initbuf(bp, btp, map[0].bm_bn, bytes); bp->b_flags |= LIBXFS_B_DISCONTIG; } @@ -441,14 +450,14 @@ __libxfs_getbufr(int blen) } xfs_buf_t * -libxfs_getbufr(dev_t device, xfs_daddr_t blkno, int bblen) +libxfs_getbufr(struct xfs_buftarg *btp, xfs_daddr_t blkno, int bblen) { xfs_buf_t *bp; int blen = BBTOB(bblen); bp =__libxfs_getbufr(blen); if (bp) - libxfs_initbuf(bp, device, blkno, blen); + libxfs_initbuf(bp, btp, blkno, blen); #ifdef IO_DEBUG printf("%lx: %s: allocated %u bytes buffer, key=0x%llx(0x%llx), %p\n", pthread_self(), __FUNCTION__, blen, @@ -459,7 +468,7 @@ libxfs_getbufr(dev_t device, xfs_daddr_t blkno, int bblen) } xfs_buf_t * -libxfs_getbufr_map(dev_t device, xfs_daddr_t blkno, int bblen, +libxfs_getbufr_map(struct xfs_buftarg *btp, xfs_daddr_t blkno, int bblen, struct xfs_buf_map *map, int nmaps) { xfs_buf_t *bp; @@ -481,7 +490,7 @@ libxfs_getbufr_map(dev_t device, xfs_daddr_t blkno, int bblen, bp =__libxfs_getbufr(blen); if (bp) - libxfs_initbuf_map(bp, device, map, nmaps); + libxfs_initbuf_map(bp, btp, map, nmaps); #ifdef IO_DEBUG printf("%lx: %s: allocated %u bytes buffer, key=0x%llx(0x%llx), %p\n", pthread_self(), __FUNCTION__, blen, @@ -552,11 +561,12 @@ out_put: } struct xfs_buf * -libxfs_getbuf_flags(dev_t device, xfs_daddr_t blkno, int len, unsigned int flags) +libxfs_getbuf_flags(struct xfs_buftarg *btp, xfs_daddr_t blkno, int len, + unsigned int flags) { struct xfs_bufkey key = {0}; - key.device = device; + key.buftarg = btp; key.blkno = blkno; key.bblen = len; @@ -564,18 +574,18 @@ libxfs_getbuf_flags(dev_t device, xfs_daddr_t blkno, int len, unsigned int flags } struct xfs_buf * -libxfs_getbuf(dev_t device, xfs_daddr_t blkno, int len) +libxfs_getbuf(struct xfs_buftarg *btp, xfs_daddr_t blkno, int len) { - return libxfs_getbuf_flags(device, blkno, len, 0); + return libxfs_getbuf_flags(btp, blkno, len, 0); } struct xfs_buf * -libxfs_getbuf_map(dev_t device, struct xfs_buf_map *map, int nmaps) +libxfs_getbuf_map(struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps) { struct xfs_bufkey key = {0}; int i; - key.device = device; + key.buftarg = btp; key.blkno = map[0].bm_bn; for (i = 0; i < nmaps; i++) { key.bblen += map[i].bm_len; @@ -612,9 +622,9 @@ libxfs_purgebuf(xfs_buf_t *bp) { struct xfs_bufkey key = {0}; - key.device = bp->b_dev; + key.buftarg = bp->b_target; key.blkno = bp->b_bn; - key.bblen = bp->b_bcount >> BBSHIFT; + key.bblen = bp->b_length; cache_node_purge(libxfs_bcache, &key, (struct cache_node *)bp); } @@ -626,10 +636,10 @@ libxfs_balloc(cache_key_t key) if (bufkey->map) return (struct cache_node *) - libxfs_getbufr_map(bufkey->device, + libxfs_getbufr_map(bufkey->buftarg, bufkey->blkno, bufkey->bblen, bufkey->map, bufkey->nmaps); - return (struct cache_node *)libxfs_getbufr(bufkey->device, + return (struct cache_node *)libxfs_getbufr(bufkey->buftarg, bufkey->blkno, bufkey->bblen); } @@ -658,9 +668,10 @@ __read_buf(int fd, void *buf, int len, off64_t offset, int flags) } int -libxfs_readbufr(dev_t dev, xfs_daddr_t blkno, xfs_buf_t *bp, int len, int flags) +libxfs_readbufr(struct xfs_buftarg *btp, xfs_daddr_t blkno, xfs_buf_t *bp, + int len, int flags) { - int fd = libxfs_device_to_fd(dev); + int fd = libxfs_device_to_fd(btp->dev); int bytes = BBTOB(len); int error; @@ -668,7 +679,7 @@ libxfs_readbufr(dev_t dev, xfs_daddr_t blkno, xfs_buf_t *bp, int len, int flags) error = __read_buf(fd, bp->b_addr, bytes, LIBXFS_BBTOOFF64(blkno), flags); if (!error && - bp->b_dev == dev && + bp->b_target->dev == btp->dev && bp->b_bn == blkno && bp->b_bcount == bytes) bp->b_flags |= LIBXFS_B_UPTODATE; @@ -681,22 +692,38 @@ libxfs_readbufr(dev_t dev, xfs_daddr_t blkno, xfs_buf_t *bp, int len, int flags) } xfs_buf_t * -libxfs_readbuf(dev_t dev, xfs_daddr_t blkno, int len, int flags) +libxfs_readbuf(struct xfs_buftarg *btp, xfs_daddr_t blkno, int len, int flags, + const struct xfs_buf_ops *ops) { xfs_buf_t *bp; int error; - bp = libxfs_getbuf(dev, blkno, len); - if (bp && !(bp->b_flags & (LIBXFS_B_UPTODATE|LIBXFS_B_DIRTY))) { - error = libxfs_readbufr(dev, blkno, bp, len, flags); - if (error) - bp->b_error = error; - } + bp = libxfs_getbuf(btp, blkno, len); + if (!bp) + return NULL; + if ((bp->b_flags & (LIBXFS_B_UPTODATE|LIBXFS_B_DIRTY))) + return bp; + + /* + * only set the ops on a cache miss (i.e. first physical read) as the + * verifier may change the ops to match the typ eof buffer it contains. + * A cache hit might reset the verifier to the original type if we set + * it again, but it won't get called again and set to match the buffer + * contents. *cough* xfs_da_node_buf_ops *cough*. + */ + bp->b_error = 0; + bp->b_ops = ops; + error = libxfs_readbufr(btp, blkno, bp, len, flags); + if (error) + bp->b_error = error; + else if (bp->b_ops) + bp->b_ops->verify_read(bp); return bp; } struct xfs_buf * -libxfs_readbuf_map(dev_t dev, struct xfs_buf_map *map, int nmaps, int flags) +libxfs_readbuf_map(struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps, + int flags, const struct xfs_buf_ops *ops) { xfs_buf_t *bp; int error = 0; @@ -705,15 +732,21 @@ libxfs_readbuf_map(dev_t dev, struct xfs_buf_map *map, int nmaps, int flags) char *buf; if (nmaps == 1) - return libxfs_readbuf(dev, map[0].bm_bn, map[0].bm_len, flags); + return libxfs_readbuf(btp, map[0].bm_bn, map[0].bm_len, + flags, ops); - bp = libxfs_getbuf_map(dev, map, nmaps); - if (!bp || (bp->b_flags & (LIBXFS_B_UPTODATE|LIBXFS_B_DIRTY))) + bp = libxfs_getbuf_map(btp, map, nmaps); + if (!bp) + return NULL; + + bp->b_error = 0; + bp->b_ops = ops; + if ((bp->b_flags & (LIBXFS_B_UPTODATE|LIBXFS_B_DIRTY))) return bp; ASSERT(bp->b_nmaps = nmaps); - fd = libxfs_device_to_fd(dev); + fd = libxfs_device_to_fd(btp->dev); buf = bp->b_addr; for (i = 0; i < bp->b_nmaps; i++) { off64_t offset = LIBXFS_BBTOOFF64(bp->b_map[i].bm_bn); @@ -731,8 +764,11 @@ libxfs_readbuf_map(dev_t dev, struct xfs_buf_map *map, int nmaps, int flags) offset += len; } - if (!error) + if (!error) { bp->b_flags |= LIBXFS_B_UPTODATE; + if (bp->b_ops) + bp->b_ops->verify_read(bp); + } #ifdef IO_DEBUG printf("%lx: %s: read %lu bytes, error %d, blkno=%llu(%llu), %p\n", pthread_self(), __FUNCTION__, buf - (char *)bp->b_addr, error, @@ -767,9 +803,42 @@ __write_buf(int fd, void *buf, int len, off64_t offset, int flags) int libxfs_writebufr(xfs_buf_t *bp) { - int fd = libxfs_device_to_fd(bp->b_dev); + int fd = libxfs_device_to_fd(bp->b_target->dev); int error = 0; + /* + * we never write buffers that are marked stale. This indicates they + * contain data that has been invalidated, and even if the buffer is + * dirty it must *never* be written. Verifiers are wonderful for finding + * bugs like this. Make sure the error is obvious as to the cause. + */ + if (bp->b_flags & LIBXFS_B_STALE) { + bp->b_error = ESTALE; + return bp->b_error; + } + + /* + * clear any pre-existing error status on the buffer. This can occur if + * the buffer is corrupt on disk and the repair process doesn't clear + * the error before fixing and writing it back. + */ + bp->b_error = 0; + if (bp->b_ops) { + bp->b_ops->verify_write(bp); + if (bp->b_error) { + fprintf(stderr, + _("%s: write verifer failed on bno 0x%llx/0x%x\n"), + __func__, (long long)bp->b_bn, bp->b_bcount); + return bp->b_error; + } + } + + if (bp->b_ops) { + bp->b_ops->verify_write(bp); + if (bp->b_error) + return bp->b_error; + } + if (!(bp->b_flags & LIBXFS_B_DISCONTIG)) { error = __write_buf(fd, bp->b_addr, bp->b_bcount, LIBXFS_BBTOOFF64(bp->b_bn), bp->b_flags); diff --git a/libxfs/trans.c b/libxfs/trans.c index 831e42a..97220e7 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -386,7 +386,7 @@ libxfs_trans_bhold( xfs_buf_t * libxfs_trans_get_buf_map( xfs_trans_t *tp, - dev_t dev, + struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps, uint f) @@ -395,9 +395,9 @@ libxfs_trans_get_buf_map( xfs_buf_log_item_t *bip; if (tp == NULL) - return libxfs_getbuf_map(dev, map, nmaps); + return libxfs_getbuf_map(btp, map, nmaps); - bp = xfs_trans_buf_item_match(tp, dev, map, nmaps); + bp = xfs_trans_buf_item_match(tp, btp, map, nmaps); if (bp != NULL) { ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); @@ -406,7 +406,7 @@ libxfs_trans_get_buf_map( return bp; } - bp = libxfs_getbuf_map(dev, map, nmaps); + bp = libxfs_getbuf_map(btp, map, nmaps); if (bp == NULL) return NULL; #ifdef XACT_DEBUG @@ -465,7 +465,7 @@ int libxfs_trans_read_buf_map( xfs_mount_t *mp, xfs_trans_t *tp, - dev_t dev, + struct xfs_buftarg *btp, struct xfs_buf_map *map, int nmaps, uint flags, @@ -479,7 +479,7 @@ libxfs_trans_read_buf_map( *bpp = NULL; if (tp == NULL) { - bp = libxfs_readbuf_map(dev, map, nmaps, flags); + bp = libxfs_readbuf_map(btp, map, nmaps, flags, ops); if (!bp) { return (flags & XBF_TRYLOCK) ? EAGAIN : XFS_ERROR(ENOMEM); @@ -489,7 +489,7 @@ libxfs_trans_read_buf_map( goto done; } - bp = xfs_trans_buf_item_match(tp, dev, map, nmaps); + bp = xfs_trans_buf_item_match(tp, btp, map, nmaps); if (bp != NULL) { ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); @@ -498,7 +498,7 @@ libxfs_trans_read_buf_map( goto done; } - bp = libxfs_readbuf_map(dev, map, nmaps, flags); + bp = libxfs_readbuf_map(btp, map, nmaps, flags, ops); if (!bp) { return (flags & XBF_TRYLOCK) ? EAGAIN : XFS_ERROR(ENOMEM); diff --git a/libxfs/xfs.h b/libxfs/xfs.h index 6bec18e..9246f36 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -55,9 +55,6 @@ typedef __uint32_t inst_t; /* an instruction */ #define EWRONGFS EINVAL #endif -#define m_ddev_targp m_dev -#define m_logdev_targp m_logdev -#define m_rtdev_targp m_rtdev #define xfs_error_level 0 #define STATIC static @@ -187,11 +184,7 @@ roundup_pow_of_two(uint v) NULL; \ }) #define xfs_buf_relse(bp) libxfs_putbuf(bp) -#define xfs_read_buf(mp,devp,blkno,len,f,bpp) \ - (*(bpp) = libxfs_readbuf((devp), \ - (blkno), (len), 1), 0) -#define xfs_buf_get(devp,blkno,len,f) \ - (libxfs_getbuf((devp), (blkno), (len))) +#define xfs_buf_get(devp,blkno,len,f) (libxfs_getbuf((devp), (blkno), (len))) #define xfs_bwrite(bp) libxfs_writebuf((bp), 0) #define XBRW_READ LIBXFS_BREAD @@ -372,7 +365,7 @@ void xfs_buf_item_init (xfs_buf_t *, xfs_mount_t *); void xfs_buf_item_log (xfs_buf_log_item_t *, uint, uint); /* xfs_trans_buf.c */ -xfs_buf_t *xfs_trans_buf_item_match(xfs_trans_t *, dev_t, +xfs_buf_t *xfs_trans_buf_item_match(xfs_trans_t *, struct xfs_buftarg *, struct xfs_buf_map *, int); /* local source files */ diff --git a/libxfs/xfs_dir2_priv.h b/libxfs/xfs_dir2_priv.h index 7cf573c..6743eda 100644 --- a/libxfs/xfs_dir2_priv.h +++ b/libxfs/xfs_dir2_priv.h @@ -30,8 +30,6 @@ extern int xfs_dir_cilookup_result(struct xfs_da_args *args, const unsigned char *name, int len); /* xfs_dir2_block.c */ -extern const struct xfs_buf_ops xfs_dir3_block_buf_ops; - extern int xfs_dir2_block_addname(struct xfs_da_args *args); extern int xfs_dir2_block_getdents(struct xfs_inode *dp, void *dirent, xfs_off_t *offset, filldir_t filldir); @@ -48,9 +46,6 @@ extern int xfs_dir2_leaf_to_block(struct xfs_da_args *args, #define xfs_dir3_data_check(dp,bp) #endif -extern const struct xfs_buf_ops xfs_dir3_data_buf_ops; -extern const struct xfs_buf_ops xfs_dir3_free_buf_ops; - extern int __xfs_dir3_data_check(struct xfs_inode *dp, struct xfs_buf *bp); extern int xfs_dir3_data_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t bno, xfs_daddr_t mapped_bno, struct xfs_buf **bpp); @@ -78,9 +73,6 @@ extern void xfs_dir2_data_use_free(struct xfs_trans *tp, struct xfs_buf *bp, xfs_dir2_data_aoff_t len, int *needlogp, int *needscanp); /* xfs_dir2_leaf.c */ -extern const struct xfs_buf_ops xfs_dir3_leaf1_buf_ops; -extern const struct xfs_buf_ops xfs_dir3_leafn_buf_ops; - extern int xfs_dir3_leafn_read(struct xfs_trans *tp, struct xfs_inode *dp, xfs_dablk_t fbno, xfs_daddr_t mappedbno, struct xfs_buf **bpp); extern int xfs_dir2_block_to_leaf(struct xfs_da_args *args, diff --git a/logprint/logprint.c b/logprint/logprint.c index 3fbcdba..7a56462 100644 --- a/logprint/logprint.c +++ b/logprint/logprint.c @@ -140,6 +140,7 @@ main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + memset(&mount, 0, sizeof(mount)); progname = basename(argv[0]); while ((c = getopt(argc, argv, "bC:cdefl:iqnors:tDVv")) != EOF) { @@ -220,6 +221,7 @@ main(int argc, char **argv) exit(1); logstat(&mount); + libxfs_buftarg_init(&mount, x.ddev, x.logdev, x.rtdev); logfd = (x.logfd < 0) ? x.dfd : x.logfd; @@ -236,7 +238,7 @@ main(int argc, char **argv) ASSERT(x.logBBsize <= INT_MAX); - log.l_dev = x.logdev; + log.l_dev = mount.m_logdev_targp; log.l_logsize = BBTOB(x.logBBsize); log.l_logBBstart = x.logBBstart; log.l_logBBsize = x.logBBsize; diff --git a/mkfs/proto.c b/mkfs/proto.c index f201096..ee84699 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -676,7 +676,7 @@ rtinit( error); } for (i = 0, ep = map; i < nmap; i++, ep++) { - libxfs_device_zero(mp->m_dev, + libxfs_device_zero(mp->m_ddev_targp, XFS_FSB_TO_DADDR(mp, ep->br_startblock), XFS_FSB_TO_BB(mp, ep->br_blockcount)); bno += ep->br_blockcount; @@ -713,7 +713,7 @@ rtinit( error); } for (i = 0, ep = map; i < nmap; i++, ep++) { - libxfs_device_zero(mp->m_dev, + libxfs_device_zero(mp->m_ddev_targp, XFS_FSB_TO_DADDR(mp, ep->br_startblock), XFS_FSB_TO_BB(mp, ep->br_blockcount)); bno += ep->br_blockcount; diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index a393607..3864932 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -2435,13 +2435,15 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), * swap (somewhere around the page size), jfs (32k), * ext[2,3] and reiserfs (64k) - and hopefully all else. */ - buf = libxfs_getbuf(xi.ddev, 0, BTOBB(WHACK_SIZE)); + libxfs_buftarg_init(mp, xi.ddev, xi.logdev, xi.rtdev); + buf = libxfs_getbuf(mp->m_ddev_targp, 0, BTOBB(WHACK_SIZE)); memset(XFS_BUF_PTR(buf), 0, WHACK_SIZE); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); libxfs_purgebuf(buf); /* OK, now write the superblock */ - buf = libxfs_getbuf(xi.ddev, XFS_SB_DADDR, XFS_FSS_TO_BB(mp, 1)); + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_SB_DADDR, XFS_FSS_TO_BB(mp, 1)); + buf->b_ops = &xfs_sb_buf_ops; memset(XFS_BUF_PTR(buf), 0, sectorsize); libxfs_sb_to_disk((void *)XFS_BUF_PTR(buf), sbp, XFS_SB_ALL_BITS); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2460,10 +2462,11 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * Zero out the end of the device, to obliterate any * old MD RAID (or other) metadata at the end of the device. - * (MD sb is ~64k from the end, take out a wider swath to be sure) + * (MD sb is ~64k from the end, take out a wider swath to be sure) */ if (!xi.disfile) { - buf = libxfs_getbuf(xi.ddev, (xi.dsize - BTOBB(WHACK_SIZE)), + buf = libxfs_getbuf(mp->m_ddev_targp, + (xi.dsize - BTOBB(WHACK_SIZE)), BTOBB(WHACK_SIZE)); memset(XFS_BUF_PTR(buf), 0, WHACK_SIZE); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2471,14 +2474,12 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), } /* - * Zero the log if there is one. + * Zero the log.... */ - if (loginternal) - xi.logdev = xi.ddev; - if (xi.logdev) - libxfs_log_clear(xi.logdev, XFS_FSB_TO_DADDR(mp, logstart), - (xfs_extlen_t)XFS_FSB_TO_BB(mp, logblocks), - &sbp->sb_uuid, logversion, lsunit, XLOG_FMT); + libxfs_log_clear(mp->m_logdev_targp, + XFS_FSB_TO_DADDR(mp, logstart), + (xfs_extlen_t)XFS_FSB_TO_BB(mp, logblocks), + &sbp->sb_uuid, logversion, lsunit, XLOG_FMT); mp = libxfs_mount(mp, sbp, xi.ddev, xi.logdev, xi.rtdev, 1); if (mp == NULL) { @@ -2487,13 +2488,19 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), exit(1); } + /* + * XXX: this code is effectively shared with the kernel growfs code. + * These initialisations should be pulled into libxfs to keep the + * kernel/userspace header initialisation code the same. + */ for (agno = 0; agno < agcount; agno++) { /* * Superblock. */ - buf = libxfs_getbuf(xi.ddev, + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_AG_DADDR(mp, agno, XFS_SB_DADDR), XFS_FSS_TO_BB(mp, 1)); + buf->b_ops = &xfs_sb_buf_ops; memset(XFS_BUF_PTR(buf), 0, sectorsize); libxfs_sb_to_disk((void *)XFS_BUF_PTR(buf), sbp, XFS_SB_ALL_BITS); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2501,9 +2508,10 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * AG header block: freespace */ - buf = libxfs_getbuf(mp->m_dev, + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)), XFS_FSS_TO_BB(mp, 1)); + buf->b_ops = &xfs_agf_buf_ops; agf = XFS_BUF_TO_AGF(buf); memset(agf, 0, sectorsize); if (agno == agcount - 1) @@ -2534,10 +2542,11 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * AG header block: inodes */ - buf = libxfs_getbuf(mp->m_dev, + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)), XFS_FSS_TO_BB(mp, 1)); agi = XFS_BUF_TO_AGI(buf); + buf->b_ops = &xfs_agi_buf_ops; memset(agi, 0, sectorsize); agi->agi_magicnum = cpu_to_be32(XFS_AGI_MAGIC); agi->agi_versionnum = cpu_to_be32(XFS_AGI_VERSION); @@ -2556,9 +2565,10 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * BNO btree root block */ - buf = libxfs_getbuf(mp->m_dev, + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_AGB_TO_DADDR(mp, agno, XFS_BNO_BLOCK(mp)), bsize); + buf->b_ops = &xfs_allocbt_buf_ops; block = XFS_BUF_TO_BLOCK(buf); memset(block, 0, blocksize); block->bb_magic = cpu_to_be32(XFS_ABTB_MAGIC); @@ -2608,9 +2618,10 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * CNT btree root block */ - buf = libxfs_getbuf(mp->m_dev, + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_AGB_TO_DADDR(mp, agno, XFS_CNT_BLOCK(mp)), bsize); + buf->b_ops = &xfs_allocbt_buf_ops; block = XFS_BUF_TO_BLOCK(buf); memset(block, 0, blocksize); block->bb_magic = cpu_to_be32(XFS_ABTC_MAGIC); @@ -2650,9 +2661,10 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * INO btree root block */ - buf = libxfs_getbuf(mp->m_dev, + buf = libxfs_getbuf(mp->m_ddev_targp, XFS_AGB_TO_DADDR(mp, agno, XFS_IBT_BLOCK(mp)), bsize); + buf->b_ops = &xfs_inobt_buf_ops; block = XFS_BUF_TO_BLOCK(buf); memset(block, 0, blocksize); block->bb_magic = cpu_to_be32(XFS_IBT_MAGIC); @@ -2666,7 +2678,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * Touch last block, make fs the right size if it's a file. */ - buf = libxfs_getbuf(mp->m_dev, + buf = libxfs_getbuf(mp->m_ddev_targp, (xfs_daddr_t)XFS_FSB_TO_BB(mp, dblocks - 1LL), bsize); memset(XFS_BUF_PTR(buf), 0, blocksize); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2674,8 +2686,8 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), /* * Make sure we can write the last block in the realtime area. */ - if (mp->m_rtdev && rtblocks > 0) { - buf = libxfs_getbuf(mp->m_rtdev, + if (mp->m_rtdev_targp->dev && rtblocks > 0) { + buf = libxfs_getbuf(mp->m_rtdev_targp, XFS_FSB_TO_BB(mp, rtblocks - 1LL), bsize); memset(XFS_BUF_PTR(buf), 0, blocksize); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2728,7 +2740,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), XFS_AGB_TO_DADDR(mp, mp->m_sb.sb_agcount-1, XFS_SB_DADDR), XFS_FSS_TO_BB(mp, 1), - LIBXFS_EXIT_ON_FAILURE); + LIBXFS_EXIT_ON_FAILURE, &xfs_sb_buf_ops); XFS_BUF_TO_SBP(buf)->sb_rootino = cpu_to_be64( mp->m_sb.sb_rootino); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2740,7 +2752,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), XFS_AGB_TO_DADDR(mp, (mp->m_sb.sb_agcount-1)/2, XFS_SB_DADDR), XFS_FSS_TO_BB(mp, 1), - LIBXFS_EXIT_ON_FAILURE); + LIBXFS_EXIT_ON_FAILURE, &xfs_sb_buf_ops); XFS_BUF_TO_SBP(buf)->sb_rootino = cpu_to_be64( mp->m_sb.sb_rootino); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 331cbb3..13e9034 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -170,7 +170,7 @@ traverse_int_dablock(xfs_mount_t *mp, goto error_out; bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, fsbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, &xfs_da3_node_buf_ops); if (!bp) { if (whichfork == XFS_DATA_FORK) do_warn( @@ -552,7 +552,7 @@ verify_da_path(xfs_mount_t *mp, } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, fsbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, &xfs_da3_node_buf_ops); if (!bp) { do_warn( _("can't read block %u (%" PRIu64 ") for directory inode %" PRIu64 "\n"), @@ -986,7 +986,7 @@ rmtval_get(xfs_mount_t *mp, xfs_ino_t ino, blkmap_t *blkmap, break; } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, bno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_warn( _("can't read remote block for attributes of inode %" PRIu64 "\n"), ino); @@ -1315,7 +1315,7 @@ process_leaf_attr_level(xfs_mount_t *mp, } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, dev_bno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_warn( _("can't read file block %u (fsbno %" PRIu64 ") for attribute fork of inode %" PRIu64 "\n"), @@ -1497,7 +1497,7 @@ process_longform_attr( } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, bno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_warn( _("can't read block 0 of inode %" PRIu64 " attribute fork\n"), diff --git a/repair/dino_chunks.c b/repair/dino_chunks.c index b625109..21078d0 100644 --- a/repair/dino_chunks.c +++ b/repair/dino_chunks.c @@ -52,7 +52,7 @@ check_aginode_block(xfs_mount_t *mp, * so no one else will overlap them. */ bp = libxfs_readbuf(mp->m_dev, XFS_AGB_TO_DADDR(mp, agno, agbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_warn(_("cannot read agbno (%u/%u), disk block %" PRId64 "\n"), agno, agbno, XFS_AGB_TO_DADDR(mp, agno, agbno)); @@ -65,6 +65,8 @@ check_aginode_block(xfs_mount_t *mp, XFS_OFFBNO_TO_AGINO(mp, agbno, i))) cnt++; } + if (cnt) + bp->b_ops = &xfs_inode_buf_ops; libxfs_putbuf(bp); return(cnt); @@ -625,7 +627,8 @@ process_inode_chunk( bplist[bp_index] = libxfs_readbuf(mp->m_dev, XFS_AGB_TO_DADDR(mp, agno, agbno), - XFS_FSB_TO_BB(mp, blks_per_cluster), 0); + XFS_FSB_TO_BB(mp, blks_per_cluster), 0, + NULL); if (!bplist[bp_index]) { do_warn(_("cannot read inode %" PRIu64 ", disk block %" PRId64 ", cnt %d\n"), XFS_AGINO_TO_INO(mp, agno, first_irec->ino_startnum), @@ -639,6 +642,7 @@ process_inode_chunk( return(1); } agbno += blks_per_cluster; + bplist[bp_index]->b_ops = &xfs_inode_buf_ops; pftrace("readbuf %p (%llu, %d) in AG %d", bplist[bp_index], (long long)XFS_BUF_ADDR(bplist[bp_index]), diff --git a/repair/dinode.c b/repair/dinode.c index 1906ceb..66eedc2 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -836,7 +836,8 @@ get_agino_buf(xfs_mount_t *mp, size = XFS_FSB_TO_BB(mp, MAX(1, XFS_INODES_PER_CHUNK/inodes_per_block)); bp = libxfs_readbuf(mp->m_dev, XFS_AGB_TO_DADDR(mp, agno, - XFS_AGINO_TO_AGBNO(mp, irec->ino_startnum)), size, 0); + XFS_AGINO_TO_AGBNO(mp, irec->ino_startnum)), size, 0, + &xfs_inode_buf_ops); if (!bp) { do_warn(_("cannot read inode (%u/%u), disk block %" PRIu64 "\n"), agno, irec->ino_startnum, @@ -947,7 +948,7 @@ getfunc_btree(xfs_mount_t *mp, ASSERT(verify_dfsbno(mp, fsbno)); bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, fsbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_error(_("cannot read bmap block %" PRIu64 "\n"), fsbno); return(NULLDFSBNO); @@ -1004,7 +1005,7 @@ _("- # of bmap records in inode %" PRIu64 " less than minimum (%u, min - %u), pr */ libxfs_putbuf(bp); bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, fsbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_error(_("cannot read bmap block %" PRIu64 "\n"), fsbno); @@ -1510,7 +1511,8 @@ process_symlink( if (fsbno != NULLDFSBNO) bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, fsbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, + &xfs_symlink_buf_ops); if (!bp || fsbno == NULLDFSBNO) { do_warn( _("cannot read inode %" PRIu64 ", file block %d, disk block %" PRIu64 "\n"), diff --git a/repair/dir2.c b/repair/dir2.c index ae80a6b..a71a276 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -103,7 +103,8 @@ static struct xfs_buf * da_read_buf( xfs_mount_t *mp, int nex, - bmap_ext_t *bmp) + bmap_ext_t *bmp, + const struct xfs_buf_ops *ops) { #define MAP_ARRAY_SZ 4 struct xfs_buf_map map_array[MAP_ARRAY_SZ]; @@ -125,7 +126,7 @@ da_read_buf( map[i].bm_bn = XFS_FSB_TO_DADDR(mp, bmp[i].startblock); map[i].bm_len = XFS_FSB_TO_BB(mp, bmp[i].blockcount); } - bp = libxfs_readbuf_map(mp->m_dev, map, nex, 0); + bp = libxfs_readbuf_map(mp->m_dev, map, nex, 0, ops); if (map != map_array) free(map); return bp; @@ -172,7 +173,7 @@ traverse_int_dir2block(xfs_mount_t *mp, if (nex == 0) goto error_out; - bp = da_read_buf(mp, nex, bmp); + bp = da_read_buf(mp, nex, bmp, &xfs_da3_node_buf_ops); if (bmp != &lbmp) free(bmp); if (bp == NULL) { @@ -536,7 +537,7 @@ _("can't get map info for block %u of directory inode %" PRIu64 "\n"), return(1); } - bp = da_read_buf(mp, nex, bmp); + bp = da_read_buf(mp, nex, bmp, &xfs_da3_node_buf_ops); if (bmp != &lbmp) free(bmp); @@ -1581,7 +1582,7 @@ _("block %u for directory inode %" PRIu64 " is missing\n"), mp->m_dirdatablk, ino); return 1; } - bp = da_read_buf(mp, nex, bmp); + bp = da_read_buf(mp, nex, bmp, &xfs_dir3_block_buf_ops); if (bmp != &lbmp) free(bmp); if (bp == NULL) { @@ -1711,7 +1712,7 @@ _("can't map block %u for directory inode %" PRIu64 "\n"), da_bno, ino); goto error_out; } - bp = da_read_buf(mp, nex, bmp); + bp = da_read_buf(mp, nex, bmp, &xfs_dir3_leafn_buf_ops); if (bmp != &lbmp) free(bmp); bmp = NULL; @@ -1897,7 +1898,7 @@ _("block %" PRIu64 " for directory inode %" PRIu64 " is missing\n"), dbno, ino); continue; } - bp = da_read_buf(mp, nex, bmp); + bp = da_read_buf(mp, nex, bmp, &xfs_dir3_data_buf_ops); if (bmp != &lbmp) free(bmp); if (bp == NULL) { diff --git a/repair/phase2.c b/repair/phase2.c index 382cd7b..2817fed 100644 --- a/repair/phase2.c +++ b/repair/phase2.c @@ -40,18 +40,15 @@ zero_log(xfs_mount_t *mp) int error; struct xlog log; xfs_daddr_t head_blk, tail_blk; - dev_t logdev = (mp->m_sb.sb_logstart == 0) ? x.logdev : x.ddev; memset(&log, 0, sizeof(log)); - if (!x.logdev) - x.logdev = x.ddev; x.logBBsize = XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks); x.logBBstart = XFS_FSB_TO_DADDR(mp, mp->m_sb.sb_logstart); x.lbsize = BBSIZE; if (xfs_sb_version_hassector(&mp->m_sb)) x.lbsize <<= (mp->m_sb.sb_logsectlog - BBSHIFT); - log.l_dev = logdev; + log.l_dev = mp->m_logdev_targp; log.l_logsize = BBTOB(x.logBBsize); log.l_logBBsize = x.logBBsize; log.l_logBBstart = x.logBBstart; @@ -96,7 +93,7 @@ zero_log(xfs_mount_t *mp) } } - libxfs_log_clear(logdev, + libxfs_log_clear(log.l_dev, XFS_FSB_TO_DADDR(mp, mp->m_sb.sb_logstart), (xfs_extlen_t)XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks), &mp->m_sb.sb_uuid, diff --git a/repair/phase3.c b/repair/phase3.c index 80c66b5..3e43938 100644 --- a/repair/phase3.c +++ b/repair/phase3.c @@ -40,7 +40,7 @@ process_agi_unlinked( bp = libxfs_readbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)), - mp->m_sb.sb_sectsize/BBSIZE, 0); + mp->m_sb.sb_sectsize/BBSIZE, 0, &xfs_agi_buf_ops); if (!bp) do_error(_("cannot read agi block %" PRId64 " for ag %u\n"), XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)), agno); diff --git a/repair/phase6.c b/repair/phase6.c index bd1fad4..8b8df10 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -510,7 +510,7 @@ mk_rbmino(xfs_mount_t *mp) error); } for (i = 0, ep = map; i < nmap; i++, ep++) { - libxfs_device_zero(mp->m_dev, + libxfs_device_zero(mp->m_ddev_targp, XFS_FSB_TO_DADDR(mp, ep->br_startblock), XFS_FSB_TO_BB(mp, ep->br_blockcount)); bno += ep->br_blockcount; @@ -765,7 +765,7 @@ mk_rsumino(xfs_mount_t *mp) error); } for (i = 0, ep = map; i < nmap; i++, ep++) { - libxfs_device_zero(mp->m_dev, + libxfs_device_zero(mp->m_ddev_targp, XFS_FSB_TO_DADDR(mp, ep->br_startblock), XFS_FSB_TO_BB(mp, ep->br_blockcount)); bno += ep->br_blockcount; @@ -1829,7 +1829,8 @@ longform_dir2_check_leaf( struct xfs_dir2_leaf_entry *ents; da_bno = mp->m_dirleafblk; - if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bp, XFS_DATA_FORK, NULL)) { + if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bp, XFS_DATA_FORK, + &xfs_dir3_leaf1_buf_ops)) { do_error( _("can't read block %u for directory inode %" PRIu64 "\n"), da_bno, ip->i_ino); @@ -1906,7 +1907,7 @@ longform_dir2_check_node( if (bmap_next_offset(NULL, ip, &next_da_bno, XFS_DATA_FORK)) break; if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bp, - XFS_DATA_FORK, NULL)) { + XFS_DATA_FORK, &xfs_dir3_leafn_buf_ops)) { do_warn( _("can't read leaf block %u for directory inode %" PRIu64 "\n"), da_bno, ip->i_ino); @@ -1953,7 +1954,7 @@ longform_dir2_check_node( if (bmap_next_offset(NULL, ip, &next_da_bno, XFS_DATA_FORK)) break; if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bp, - XFS_DATA_FORK, NULL)) { + XFS_DATA_FORK, &xfs_dir3_free_buf_ops)) { do_warn( _("can't read freespace block %u for directory inode %" PRIu64 "\n"), da_bno, ip->i_ino); @@ -2075,7 +2076,7 @@ longform_dir2_entry_check(xfs_mount_t *mp, num_bps * sizeof(struct xfs_buf*)); } if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bplist[db], - XFS_DATA_FORK, NULL)) { + XFS_DATA_FORK, &xfs_dir3_data_buf_ops)) { do_warn( _("can't read data block %u for directory inode %" PRIu64 "\n"), da_bno, ino); diff --git a/repair/prefetch.c b/repair/prefetch.c index 3a8177e..93b4146 100644 --- a/repair/prefetch.c +++ b/repair/prefetch.c @@ -221,7 +221,7 @@ pf_scan_lbtree( int rc; bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, dbno), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) return 0; @@ -720,7 +720,7 @@ init_prefetch( xfs_mount_t *pmp) { mp = pmp; - mp_fd = libxfs_device_to_fd(mp->m_dev); + mp_fd = libxfs_device_to_fd(mp->m_ddev_targp->dev); pf_max_bytes = sysconf(_SC_PAGE_SIZE) << 7; pf_max_bbs = pf_max_bytes >> BBSHIFT; pf_max_fsbs = pf_max_bytes >> mp->m_sb.sb_blocklog; diff --git a/repair/rt.c b/repair/rt.c index d6ecd56..042ff46 100644 --- a/repair/rt.c +++ b/repair/rt.c @@ -206,7 +206,7 @@ process_rtbitmap(xfs_mount_t *mp, continue; } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, bno), - XFS_FSB_TO_BB(mp, 1)); + XFS_FSB_TO_BB(mp, 1), NULL); if (!bp) { do_warn(_("can't read block %d for rtbitmap inode\n"), bmbno); @@ -268,7 +268,7 @@ process_rtsummary(xfs_mount_t *mp, continue; } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, bno), - XFS_FSB_TO_BB(mp, 1)); + XFS_FSB_TO_BB(mp, 1), NULL); if (!bp) { do_warn(_("can't read block %d for rtsummary inode\n"), sumbno); diff --git a/repair/scan.c b/repair/scan.c index f79342a..0b5ab1b 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -85,7 +85,7 @@ scan_sbtree( xfs_buf_t *bp; bp = libxfs_readbuf(mp->m_dev, XFS_AGB_TO_DADDR(mp, agno, root), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_error(_("can't read btree block %d/%d\n"), agno, root); return; @@ -130,7 +130,7 @@ scan_lbtree( int dirty = 0; bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, root), - XFS_FSB_TO_BB(mp, 1), 0); + XFS_FSB_TO_BB(mp, 1), 0, NULL); if (!bp) { do_error(_("can't read btree block %d/%d\n"), XFS_FSB_TO_AGNO(mp, root), @@ -1060,7 +1060,7 @@ scan_freelist( agflbuf = libxfs_readbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGFL_DADDR(mp)), - XFS_FSS_TO_BB(mp, 1), 0); + XFS_FSS_TO_BB(mp, 1), 0, &xfs_agfl_buf_ops); if (!agflbuf) { do_abort(_("can't read agfl block for ag %d\n"), agno); return; @@ -1207,7 +1207,7 @@ scan_ag( int status; sbbuf = libxfs_readbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_SB_DADDR), - XFS_FSS_TO_BB(mp, 1), 0); + XFS_FSS_TO_BB(mp, 1), 0, &xfs_sb_buf_ops); if (!sbbuf) { do_error(_("can't get root superblock for ag %d\n"), agno); return; @@ -1223,7 +1223,7 @@ scan_ag( agfbuf = libxfs_readbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)), - XFS_FSS_TO_BB(mp, 1), 0); + XFS_FSS_TO_BB(mp, 1), 0, &xfs_agf_buf_ops); if (!agfbuf) { do_error(_("can't read agf block for ag %d\n"), agno); libxfs_putbuf(sbbuf); @@ -1234,7 +1234,7 @@ scan_ag( agibuf = libxfs_readbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)), - XFS_FSS_TO_BB(mp, 1), 0); + XFS_FSS_TO_BB(mp, 1), 0, &xfs_agi_buf_ops); if (!agibuf) { do_error(_("can't read agi block for ag %d\n"), agno); libxfs_putbuf(agfbuf); @@ -1353,7 +1353,8 @@ scan_ags( } memset(agcnts, 0, mp->m_sb.sb_agcount * sizeof(*agcnts)); - create_work_queue(&wq, mp, scan_threads); + create_work_queue(&wq, mp, 1); + //create_work_queue(&wq, mp, scan_threads); for (i = 0; i < mp->m_sb.sb_agcount; i++) queue_work(&wq, scan_ag, i, &agcnts[i]); diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index 67a7446..7623560 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -558,9 +558,11 @@ main(int argc, char **argv) } /* prepare the mount structure */ - sbp = libxfs_readbuf(x.ddev, XFS_SB_DADDR, - 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0); memset(&xfs_m, 0, sizeof(xfs_mount_t)); + libxfs_buftarg_init(&xfs_m, x.ddev, x.logdev, x.rtdev); + sbp = libxfs_readbuf(xfs_m.m_ddev_targp, XFS_SB_DADDR, + 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0, + &xfs_sb_buf_ops); libxfs_sb_from_disk(&xfs_m.m_sb, XFS_BUF_TO_SBP(sbp)); /* -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B8BD629E4C for ; Fri, 17 May 2013 06:14:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6B008304059 for ; Fri, 17 May 2013 04:14:08 -0700 (PDT) X-ASG-Debug-ID: 1368789245-04bdf04225359fb0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id kjlMu7khwHdZNaGd for ; Fri, 17 May 2013 04:14:05 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjW8ThHkDk2eJb4sigyIqgS0 Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:04 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbh-0008SR-Ie for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbX-0005FE-BP for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 20/30] xfs: add CRC checks to the superblock Date: Fri, 17 May 2013 21:13:15 +1000 X-ASG-Orig-Subj: [PATCH 20/30] xfs: add CRC checks to the superblock Message-Id: <1368789205-19969-21-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789245 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner With the addition of CRCs, there is such a wide and varied change to the on disk format that it makes sense to bump the superblock version number rather than try to use feature bits for all the new functionality. This commit introduces all the new superblock fields needed for all the new functionality: feature masks similar to ext4, separate project quota inodes, a LSN field for recovery and the CRC field. This commit does not bump the superblock version number, however. That will be done as a separate commit at the end of the series after all the new functionality is present so we switch it all on in one commit. This means that we can slowly introduce the changes without them being active and hence maintain bisectability of the tree. This patch is based on a patch originally written by myself back from SGI days, which was subsequently modified by Christoph Hellwig. There is relatively little of that patch remaining, but the history of the patch still should be acknowledged here. Signed-off-by: Dave Chinner --- include/xfs_mount.h | 1 + include/xfs_sb.h | 100 ++++++++++++++++++++++++++++++++++++--------------- libxfs/xfs_mount.c | 92 +++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 153 insertions(+), 40 deletions(-) diff --git a/include/xfs_mount.h b/include/xfs_mount.h index 28bbf46..68c02a9 100644 --- a/include/xfs_mount.h +++ b/include/xfs_mount.h @@ -391,6 +391,7 @@ struct xfs_perag *xfs_perag_get_tag(struct xfs_mount *mp, xfs_agnumber_t agno, int tag); void xfs_perag_put(struct xfs_perag *pag); +extern void xfs_sb_calc_crc(struct xfs_buf *); extern void xfs_mod_sb(struct xfs_trans *, __int64_t); extern int xfs_initialize_perag(struct xfs_mount *, xfs_agnumber_t, xfs_agnumber_t *); diff --git a/include/xfs_sb.h b/include/xfs_sb.h index 6a7f8b0..d6709db 100644 --- a/include/xfs_sb.h +++ b/include/xfs_sb.h @@ -32,6 +32,7 @@ struct xfs_mount; #define XFS_SB_VERSION_2 2 /* 6.2 - attributes */ #define XFS_SB_VERSION_3 3 /* 6.2 - new inode version */ #define XFS_SB_VERSION_4 4 /* 6.2+ - bitmask version */ +#define XFS_SB_VERSION_5 5 /* CRC enabled filesystem */ #define XFS_SB_VERSION_NUMBITS 0x000f #define XFS_SB_VERSION_ALLFBITS 0xfff0 #define XFS_SB_VERSION_SASHFBITS 0xf000 @@ -161,6 +162,18 @@ typedef struct xfs_sb { */ __uint32_t sb_bad_features2; + /* version 5 superblock fields start here */ + + /* feature masks */ + __uint32_t sb_features_compat; + __uint32_t sb_features_ro_compat; + __uint32_t sb_features_incompat; + + __uint32_t sb_crc; /* superblock crc */ + + xfs_ino_t sb_pquotino; /* project quota inode */ + xfs_lsn_t sb_lsn; /* last write sequence */ + /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -229,7 +242,19 @@ typedef struct xfs_dsb { * for features2 bits. Easiest just to mark it bad and not use * it for anything else. */ - __be32 sb_bad_features2; + __be32 sb_bad_features2; + + /* version 5 superblock fields start here */ + + /* feature masks */ + __be32 sb_features_compat; + __be32 sb_features_ro_compat; + __be32 sb_features_incompat; + + __le32 sb_crc; /* superblock crc */ + + __be64 sb_pquotino; /* project quota inode */ + __be64 sb_lsn; /* last write sequence */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -250,7 +275,9 @@ typedef enum { XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, - XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_FEATURES_COMPAT, + XFS_SBS_FEATURES_RO_COMPAT, XFS_SBS_FEATURES_INCOMPAT, XFS_SBS_CRC, + XFS_SBS_PQUOTINO, XFS_SBS_LSN, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -276,6 +303,11 @@ typedef enum { #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) +#define XFS_SB_FEATURES_COMPAT XFS_SB_MVAL(FEATURES_COMPAT) +#define XFS_SB_FEATURES_RO_COMPAT XFS_SB_MVAL(FEATURES_RO_COMPAT) +#define XFS_SB_FEATURES_INCOMPAT XFS_SB_MVAL(FEATURES_INCOMPAT) +#define XFS_SB_CRC XFS_SB_MVAL(CRC) +#define XFS_SB_PQUOTINO XFS_SB_MVAL(PQUOTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) #define XFS_SB_MOD_BITS \ @@ -283,7 +315,8 @@ typedef enum { XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ - XFS_SB_BAD_FEATURES2) + XFS_SB_BAD_FEATURES2 | XFS_SB_FEATURES_COMPAT | \ + XFS_SB_FEATURES_RO_COMPAT | XFS_SB_FEATURES_INCOMPAT | XFS_SB_PQUOTINO) /* @@ -325,6 +358,8 @@ static inline int xfs_sb_good_version(xfs_sb_t *sbp) return 1; } + if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) + return 1; return 0; } @@ -365,7 +400,7 @@ static inline int xfs_sb_version_hasattr(xfs_sb_t *sbp) { return sbp->sb_versionnum == XFS_SB_VERSION_2 || sbp->sb_versionnum == XFS_SB_VERSION_3 || - (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && (sbp->sb_versionnum & XFS_SB_VERSION_ATTRBIT)); } @@ -373,7 +408,7 @@ static inline void xfs_sb_version_addattr(xfs_sb_t *sbp) { if (sbp->sb_versionnum == XFS_SB_VERSION_1) sbp->sb_versionnum = XFS_SB_VERSION_2; - else if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) + else if (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4) sbp->sb_versionnum |= XFS_SB_VERSION_ATTRBIT; else sbp->sb_versionnum = XFS_SB_VERSION_4 | XFS_SB_VERSION_ATTRBIT; @@ -382,7 +417,7 @@ static inline void xfs_sb_version_addattr(xfs_sb_t *sbp) static inline int xfs_sb_version_hasnlink(xfs_sb_t *sbp) { return sbp->sb_versionnum == XFS_SB_VERSION_3 || - (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && (sbp->sb_versionnum & XFS_SB_VERSION_NLINKBIT)); } @@ -396,13 +431,13 @@ static inline void xfs_sb_version_addnlink(xfs_sb_t *sbp) static inline int xfs_sb_version_hasquota(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + return XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && (sbp->sb_versionnum & XFS_SB_VERSION_QUOTABIT); } static inline void xfs_sb_version_addquota(xfs_sb_t *sbp) { - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) + if (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4) sbp->sb_versionnum |= XFS_SB_VERSION_QUOTABIT; else sbp->sb_versionnum = xfs_sb_version_tonew(sbp->sb_versionnum) | @@ -411,13 +446,14 @@ static inline void xfs_sb_version_addquota(xfs_sb_t *sbp) static inline int xfs_sb_version_hasalign(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && - (sbp->sb_versionnum & XFS_SB_VERSION_ALIGNBIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && + (sbp->sb_versionnum & XFS_SB_VERSION_ALIGNBIT)); } static inline int xfs_sb_version_hasdalign(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + return XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && (sbp->sb_versionnum & XFS_SB_VERSION_DALIGNBIT); } @@ -429,38 +465,42 @@ static inline int xfs_sb_version_hasshared(xfs_sb_t *sbp) static inline int xfs_sb_version_hasdirv2(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && - (sbp->sb_versionnum & XFS_SB_VERSION_DIRV2BIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + (sbp->sb_versionnum & XFS_SB_VERSION_DIRV2BIT)); } static inline int xfs_sb_version_haslogv2(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && - (sbp->sb_versionnum & XFS_SB_VERSION_LOGV2BIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && + (sbp->sb_versionnum & XFS_SB_VERSION_LOGV2BIT)); } static inline int xfs_sb_version_hasextflgbit(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && - (sbp->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + (sbp->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT)); } static inline int xfs_sb_version_hassector(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + return XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && (sbp->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } static inline int xfs_sb_version_hasasciici(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + return XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 && (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT); } static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && - (sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 && + (sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT)); } /* @@ -475,14 +515,16 @@ static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) static inline int xfs_sb_version_haslazysbcount(xfs_sb_t *sbp) { - return xfs_sb_version_hasmorebits(sbp) && - (sbp->sb_features2 & XFS_SB_VERSION2_LAZYSBCOUNTBIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_LAZYSBCOUNTBIT)); } static inline int xfs_sb_version_hasattr2(xfs_sb_t *sbp) { - return xfs_sb_version_hasmorebits(sbp) && - (sbp->sb_features2 & XFS_SB_VERSION2_ATTR2BIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_ATTR2BIT)); } static inline void xfs_sb_version_addattr2(xfs_sb_t *sbp) @@ -500,8 +542,9 @@ static inline void xfs_sb_version_removeattr2(xfs_sb_t *sbp) static inline int xfs_sb_version_hasprojid32bit(xfs_sb_t *sbp) { - return xfs_sb_version_hasmorebits(sbp) && - (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT); + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) || + (xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT)); } static inline void xfs_sb_version_addprojid32bit(xfs_sb_t *sbp) @@ -513,8 +556,7 @@ static inline void xfs_sb_version_addprojid32bit(xfs_sb_t *sbp) static inline int xfs_sb_version_hascrc(xfs_sb_t *sbp) { - return (xfs_sb_version_hasmorebits(sbp) && - (sbp->sb_features2 & XFS_SB_VERSION2_CRCBIT)); + return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5; } /* diff --git a/libxfs/xfs_mount.c b/libxfs/xfs_mount.c index 7ab3519..07b892b 100644 --- a/libxfs/xfs_mount.c +++ b/libxfs/xfs_mount.c @@ -70,6 +70,12 @@ static const struct { { offsetof(xfs_sb_t, sb_logsunit), 0 }, { offsetof(xfs_sb_t, sb_features2), 0 }, { offsetof(xfs_sb_t, sb_bad_features2), 0 }, + { offsetof(xfs_sb_t, sb_features_compat), 0 }, + { offsetof(xfs_sb_t, sb_features_ro_compat), 0 }, + { offsetof(xfs_sb_t, sb_features_incompat), 0 }, + { offsetof(xfs_sb_t, sb_crc), 0 }, + { offsetof(xfs_sb_t, sb_pquotino), 0 }, + { offsetof(xfs_sb_t, sb_lsn), 0 }, { sizeof(xfs_sb_t), 0 } }; @@ -127,11 +133,23 @@ xfs_mount_validate_sb( return XFS_ERROR(EWRONGFS); } + if (!xfs_sb_good_version(sbp)) { xfs_warn(mp, "bad version"); return XFS_ERROR(EWRONGFS); } + /* + * Do not allow Version 5 superblocks to mount right now, even though + * support is in place. We need to implement the proper feature masks + * first. + */ + if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { + xfs_alert(mp, + "Version 5 superblock detected. Experimental support not yet enabled!"); + return XFS_ERROR(EINVAL); + } + if (unlikely( sbp->sb_logstart == 0 && mp->m_logdev == mp->m_dev)) { xfs_warn(mp, @@ -264,6 +282,11 @@ xfs_sb_from_disk( to->sb_logsunit = be32_to_cpu(from->sb_logsunit); to->sb_features2 = be32_to_cpu(from->sb_features2); to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); + to->sb_features_compat = be32_to_cpu(from->sb_features_compat); + to->sb_features_ro_compat = be32_to_cpu(from->sb_features_ro_compat); + to->sb_features_incompat = be32_to_cpu(from->sb_features_incompat); + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); + to->sb_lsn = be64_to_cpu(from->sb_lsn); } /* @@ -319,13 +342,12 @@ xfs_sb_to_disk( } } -static void +static int xfs_sb_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_sb sb; - int error; xfs_sb_from_disk(&sb, XFS_BUF_TO_SBP(bp)); @@ -333,16 +355,46 @@ xfs_sb_verify( * Only check the in progress field for the primary superblock as * mkfs.xfs doesn't clear it from secondary superblocks. */ - error = xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); - if (error) - xfs_buf_ioerror(bp, error); + return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); } +/* + * If the superblock has the CRC feature bit set or the CRC field is non-null, + * check that the CRC is valid. We check the CRC field is non-null because a + * single bit error could clear the feature bit and unused parts of the + * superblock are supposed to be zero. Hence a non-null crc field indicates that + * we've potentially lost a feature bit and we should check it anyway. + */ static void xfs_sb_read_verify( struct xfs_buf *bp) { - xfs_sb_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_dsb *dsb = XFS_BUF_TO_SBP(bp); + int error; + + /* + * open code the version check to avoid needing to convert the entire + * superblock from disk order just to check the version number + */ + if (dsb->sb_magicnum == cpu_to_be32(XFS_SB_MAGIC) && + (((be16_to_cpu(dsb->sb_versionnum) & XFS_SB_VERSION_NUMBITS) == + XFS_SB_VERSION_5) || + dsb->sb_crc != 0)) { + + if (!xfs_verify_cksum(bp->b_addr, be16_to_cpu(dsb->sb_sectsize), + offsetof(struct xfs_sb, sb_crc))) { + error = EFSCORRUPTED; + goto out_error; + } + } + error = xfs_sb_verify(bp); + +out_error: + if (error) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, error); + } } /* @@ -355,11 +407,10 @@ static void xfs_sb_quiet_read_verify( struct xfs_buf *bp) { - struct xfs_sb sb; + struct xfs_dsb *dsb = XFS_BUF_TO_SBP(bp); - xfs_sb_from_disk(&sb, XFS_BUF_TO_SBP(bp)); - if (sb.sb_magicnum == XFS_SB_MAGIC) { + if (dsb->sb_magicnum == cpu_to_be32(XFS_SB_MAGIC)) { /* XFS filesystem, verify noisily! */ xfs_sb_read_verify(bp); return; @@ -370,9 +421,27 @@ xfs_sb_quiet_read_verify( static void xfs_sb_write_verify( - struct xfs_buf *bp) + struct xfs_buf *bp) { - xfs_sb_verify(bp); + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_buf_log_item *bip = bp->b_fspriv; + int error; + + error = xfs_sb_verify(bp); + if (error) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, error); + return; + } + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return; + + if (bip) + XFS_BUF_TO_SBP(bp)->sb_lsn = cpu_to_be64(bip->bli_item.li_lsn); + + xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), + offsetof(struct xfs_sb, sb_crc)); } const struct xfs_buf_ops xfs_sb_buf_ops = { @@ -525,5 +594,6 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) ASSERT((1LL << f) & XFS_SB_MOD_BITS); first = xfs_sb_info[f].offset; + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SB_BUF); xfs_trans_log_buf(tp, bp, first, last); } -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7725129E3C for ; Fri, 17 May 2013 06:14:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 648DB8F8035 for ; Fri, 17 May 2013 04:14:09 -0700 (PDT) X-ASG-Debug-ID: 1368789229-04cb6c53a13521f0007-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id jRVASy3Y1Qww0iaj for ; Fri, 17 May 2013 04:14:06 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoNLzMIGDE5AxsZiAu9AI4ChHkDoVOHJYMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:05 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbr-0008T9-SN for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:03 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbm-0005Fk-Mo for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 25/30] xfs_repair: update for dir/attr crc format changes. Date: Fri, 17 May 2013 21:13:20 +1000 X-ASG-Orig-Subj: [PATCH 25/30] xfs_repair: update for dir/attr crc format changes. Message-Id: <1368789205-19969-26-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789246 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- include/xfs_attr_leaf.h | 2 + include/xfs_dir2_format.h | 3 ++ libxfs/xfs_dir2_priv.h | 2 - repair/attr_repair.c | 77 +++++++++++++++++++++++---------------- repair/dir2.c | 43 +++++++++++++--------- repair/dir2.h | 6 +-- repair/phase6.c | 89 ++++++++++++++++++++++++--------------------- 7 files changed, 126 insertions(+), 96 deletions(-) diff --git a/include/xfs_attr_leaf.h b/include/xfs_attr_leaf.h index f9d7846..b3e93bb 100644 --- a/include/xfs_attr_leaf.h +++ b/include/xfs_attr_leaf.h @@ -332,6 +332,8 @@ int xfs_attr3_leaf_read(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_buf **bpp); void xfs_attr3_leaf_hdr_from_disk(struct xfs_attr3_icleaf_hdr *to, struct xfs_attr_leafblock *from); +void xfs_attr3_leaf_hdr_to_disk(struct xfs_attr_leafblock *to, + struct xfs_attr3_icleaf_hdr *from); extern const struct xfs_buf_ops xfs_attr3_leaf_buf_ops; diff --git a/include/xfs_dir2_format.h b/include/xfs_dir2_format.h index 6dc884a..47ef5f9 100644 --- a/include/xfs_dir2_format.h +++ b/include/xfs_dir2_format.h @@ -512,6 +512,9 @@ struct xfs_dir3_leaf { #define XFS_DIR3_LEAF_CRC_OFF offsetof(struct xfs_dir3_leaf_hdr, info.crc) +extern void xfs_dir3_leaf_hdr_from_disk(struct xfs_dir3_icleaf_hdr *to, + struct xfs_dir2_leaf *from); + static inline int xfs_dir3_leaf_hdr_size(struct xfs_dir2_leaf *lp) { diff --git a/libxfs/xfs_dir2_priv.h b/libxfs/xfs_dir2_priv.h index 6743eda..7af3e92 100644 --- a/libxfs/xfs_dir2_priv.h +++ b/libxfs/xfs_dir2_priv.h @@ -104,8 +104,6 @@ xfs_dir3_leaf_find_entry(struct xfs_dir3_icleaf_hdr *leafhdr, int lowstale, int highstale, int *lfloglow, int *lfloghigh); extern int xfs_dir2_node_to_leaf(struct xfs_da_state *state); -extern void xfs_dir3_leaf_hdr_from_disk(struct xfs_dir3_icleaf_hdr *to, - struct xfs_dir2_leaf *from); extern void xfs_dir3_leaf_hdr_to_disk(struct xfs_dir2_leaf *to, struct xfs_dir3_icleaf_hdr *from); extern bool xfs_dir3_leaf_check_int(struct xfs_mount *mp, diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 13e9034..d42b85f 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -187,7 +187,8 @@ traverse_int_dablock(xfs_mount_t *mp, btree = xfs_da3_node_tree_p(node); xfs_da3_node_hdr_from_disk(&nodehdr, node); - if (nodehdr.magic != XFS_DA_NODE_MAGIC) { + if (nodehdr.magic != XFS_DA_NODE_MAGIC && + nodehdr.magic != XFS_DA3_NODE_MAGIC) { do_warn(_("bad dir/attr magic number in inode %" PRIu64 ", " "file bno = %u, fsbno = %" PRIu64 "\n"), da_cursor->ino, bno, fsbno); @@ -568,7 +569,8 @@ verify_da_path(xfs_mount_t *mp, * entry count, verify level */ bad = 0; - if (XFS_DA_NODE_MAGIC != nodehdr.magic) { + if (nodehdr.magic != XFS_DA_NODE_MAGIC || + nodehdr.magic != XFS_DA3_NODE_MAGIC) { do_warn( _("bad magic number %x in block %u (%" PRIu64 ") for directory inode %" PRIu64 "\n"), nodehdr.magic, @@ -1139,27 +1141,29 @@ process_leaf_attr_block( xfs_attr_leaf_entry_t *entry; int i, start, stop, clearit, usedbs, firstb, thissize; da_freemap_t *attr_freemap; + struct xfs_attr3_icleaf_hdr leafhdr; + xfs_attr3_leaf_hdr_from_disk(&leafhdr, leaf); clearit = usedbs = 0; *repair = 0; firstb = mp->m_sb.sb_blocksize; - stop = sizeof(xfs_attr_leaf_hdr_t); + stop = xfs_attr3_leaf_hdr_size(leaf); /* does the count look sorta valid? */ - if (be16_to_cpu(leaf->hdr.count) * sizeof(xfs_attr_leaf_entry_t) - + sizeof(xfs_attr_leaf_hdr_t) > XFS_LBSIZE(mp)) { + if (leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop > + XFS_LBSIZE(mp)) { do_warn( _("bad attribute count %d in attr block %u, inode %" PRIu64 "\n"), - be16_to_cpu(leaf->hdr.count), da_bno, ino); - return (1); + leafhdr.count, da_bno, ino); + return 1; } attr_freemap = alloc_da_freemap(mp); (void) set_da_freemap(mp, attr_freemap, 0, stop); /* go thru each entry checking for problems */ - for (i = 0, entry = &leaf->entries[0]; - i < be16_to_cpu(leaf->hdr.count); i++, entry++) { + for (i = 0, entry = xfs_attr3_leaf_entryp(leaf); + i < leafhdr.count; i++, entry++) { /* check if index is within some boundary. */ if (be16_to_cpu(entry->nameidx) > XFS_LBSIZE(mp)) { @@ -1180,7 +1184,7 @@ process_leaf_attr_block( } /* mark the entry used */ - start = (__psint_t)&leaf->entries[i] - (__psint_t)leaf; + start = (__psint_t)entry - (__psint_t)leaf; stop = start + sizeof(xfs_attr_leaf_entry_t); if (set_da_freemap(mp, attr_freemap, start, stop)) { do_warn( @@ -1226,40 +1230,40 @@ process_leaf_attr_block( * since the block will get compacted anyhow by the kernel. */ - if ((leaf->hdr.holes == 0 && - firstb != be16_to_cpu(leaf->hdr.firstused)) || - be16_to_cpu(leaf->hdr.firstused) > firstb) { + if ((leafhdr.holes == 0 && + firstb != leafhdr.firstused) || + leafhdr.firstused > firstb) { if (!no_modify) { do_warn( _("- resetting first used heap value from %d to %d in " "block %u of attribute fork of inode %" PRIu64 "\n"), - be16_to_cpu(leaf->hdr.firstused), + leafhdr.firstused, firstb, da_bno, ino); - leaf->hdr.firstused = cpu_to_be16(firstb); + leafhdr.firstused = firstb; *repair = 1; } else { do_warn( _("- would reset first used value from %d to %d in " "block %u of attribute fork of inode %" PRIu64 "\n"), - be16_to_cpu(leaf->hdr.firstused), + leafhdr.firstused, firstb, da_bno, ino); } } - if (usedbs != be16_to_cpu(leaf->hdr.usedbytes)) { + if (usedbs != leafhdr.usedbytes) { if (!no_modify) { do_warn( _("- resetting usedbytes cnt from %d to %d in " "block %u of attribute fork of inode %" PRIu64 "\n"), - be16_to_cpu(leaf->hdr.usedbytes), + leafhdr.usedbytes, usedbs, da_bno, ino); - leaf->hdr.usedbytes = cpu_to_be16(usedbs); + leafhdr.usedbytes = usedbs; *repair = 1; } else { do_warn( _("- would reset usedbytes cnt from %d to %d in " "block %u of attribute fork of %" PRIu64 "\n"), - be16_to_cpu(leaf->hdr.usedbytes), + leafhdr.usedbytes, usedbs, da_bno, ino); } } @@ -1271,6 +1275,8 @@ process_leaf_attr_block( * we can add it then. */ } + if (*repair) + xfs_attr3_leaf_hdr_to_disk(leaf, &leafhdr); free(attr_freemap); return (clearit); /* and repair */ @@ -1293,6 +1299,7 @@ process_leaf_attr_level(xfs_mount_t *mp, xfs_dablk_t prev_bno; xfs_dahash_t current_hashval = 0; xfs_dahash_t greatest_hashval; + struct xfs_attr3_icleaf_hdr leafhdr; da_bno = da_cursor->level[0].bno; ino = da_cursor->ino; @@ -1323,13 +1330,15 @@ process_leaf_attr_level(xfs_mount_t *mp, goto error_out; } - leaf = (xfs_attr_leafblock_t *)XFS_BUF_PTR(bp); + leaf = bp->b_addr; + xfs_attr3_leaf_hdr_from_disk(&leafhdr, leaf); /* check magic number for leaf directory btree block */ - if (be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) { + if (!(leafhdr.magic == XFS_ATTR_LEAF_MAGIC || + leafhdr.magic == XFS_ATTR3_LEAF_MAGIC)) { do_warn( _("bad attribute leaf magic %#x for inode %" PRIu64 "\n"), - leaf->hdr.info.magic, ino); + leafhdr.magic, ino); libxfs_putbuf(bp); goto error_out; } @@ -1354,10 +1363,10 @@ process_leaf_attr_level(xfs_mount_t *mp, da_cursor->level[0].hashval = greatest_hashval; da_cursor->level[0].bp = bp; da_cursor->level[0].bno = da_bno; - da_cursor->level[0].index = be16_to_cpu(leaf->hdr.count); + da_cursor->level[0].index = leafhdr.count; da_cursor->level[0].dirty = repair; - if (be32_to_cpu(leaf->hdr.info.back) != prev_bno) { + if (leafhdr.back != prev_bno) { do_warn( _("bad sibling back pointer for block %u in attribute fork for inode %" PRIu64 "\n"), da_bno, ino); @@ -1366,7 +1375,7 @@ process_leaf_attr_level(xfs_mount_t *mp, } prev_bno = da_bno; - da_bno = be32_to_cpu(leaf->hdr.info.forw); + da_bno = leafhdr.forw; if (da_bno != 0 && verify_da_path(mp, da_cursor, 0)) { libxfs_putbuf(bp); @@ -1475,6 +1484,7 @@ process_longform_attr( xfs_buf_t *bp; xfs_dahash_t next_hashval; int repairlinks = 0; + struct xfs_attr3_icleaf_hdr leafhdr; *repair = 0; @@ -1497,7 +1507,7 @@ process_longform_attr( } bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, bno), - XFS_FSB_TO_BB(mp, 1), 0, NULL); + XFS_FSB_TO_BB(mp, 1), 0, &xfs_da3_node_buf_ops); if (!bp) { do_warn( _("can't read block 0 of inode %" PRIu64 " attribute fork\n"), @@ -1507,19 +1517,20 @@ process_longform_attr( /* verify leaf block */ leaf = (xfs_attr_leafblock_t *)XFS_BUF_PTR(bp); + xfs_attr3_leaf_hdr_from_disk(&leafhdr, leaf); /* check sibling pointers in leaf block or root block 0 before * we have to release the btree block */ - if (be32_to_cpu(leaf->hdr.info.forw) != 0 || - be32_to_cpu(leaf->hdr.info.back) != 0) { + if (leafhdr.forw != 0 || leafhdr.back != 0) { if (!no_modify) { do_warn( _("clearing forw/back pointers in block 0 for attributes in inode %" PRIu64 "\n"), ino); repairlinks = 1; - leaf->hdr.info.forw = cpu_to_be32(0); - leaf->hdr.info.back = cpu_to_be32(0); + leafhdr.forw = 0; + leafhdr.back = 0; + xfs_attr3_leaf_hdr_to_disk(leaf, &leafhdr); } else { do_warn( _("would clear forw/back pointers in block 0 for attributes in inode %" PRIu64 "\n"), ino); @@ -1531,8 +1542,9 @@ process_longform_attr( * it's possible to have a node or leaf attribute in either an * extent format or btree format attribute fork. */ - switch (be16_to_cpu(leaf->hdr.info.magic)) { + switch (leafhdr.magic) { case XFS_ATTR_LEAF_MAGIC: /* leaf-form attribute */ + case XFS_ATTR3_LEAF_MAGIC: if (process_leaf_attr_block(mp, leaf, 0, ino, blkmap, 0, &next_hashval, repair)) { /* the block is bad. lose the attribute fork. */ @@ -1543,6 +1555,7 @@ process_longform_attr( break; case XFS_DA_NODE_MAGIC: /* btree-form attribute */ + case XFS_DA3_NODE_MAGIC: /* must do this now, to release block 0 before the traversal */ if (repairlinks) { *repair = 1; diff --git a/repair/dir2.c b/repair/dir2.c index a71a276..e41c5f9 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -186,7 +186,8 @@ _("can't read block %u for directory inode %" PRIu64 "\n"), node = bp->b_addr; xfs_da3_node_hdr_from_disk(&nodehdr, node); - if (nodehdr.magic == XFS_DIR2_LEAFN_MAGIC) { + if (nodehdr.magic == XFS_DIR2_LEAFN_MAGIC || + nodehdr.magic == XFS_DIR3_LEAFN_MAGIC) { if ( i != -1 ) { do_warn( _("found non-root LEAFN node in inode %" PRIu64 " bno = %u\n"), @@ -195,7 +196,8 @@ _("found non-root LEAFN node in inode %" PRIu64 " bno = %u\n"), *rbno = 0; libxfs_putbuf(bp); return(1); - } else if (nodehdr.magic != XFS_DA_NODE_MAGIC) { + } else if (!(nodehdr.magic == XFS_DA_NODE_MAGIC || + nodehdr.magic == XFS_DA3_NODE_MAGIC)) { libxfs_putbuf(bp); do_warn( _("bad dir magic number 0x%x in inode %" PRIu64 " bno = %u\n"), @@ -556,7 +558,8 @@ _("can't read block %u for directory inode %" PRIu64 "\n"), * entry count, verify level */ bad = 0; - if (XFS_DA_NODE_MAGIC != nodehdr.magic) { + if (!(nodehdr.magic == XFS_DA_NODE_MAGIC || + nodehdr.magic == XFS_DA3_NODE_MAGIC)) { do_warn( _("bad magic number %x in block %u for directory inode %" PRIu64 "\n"), nodehdr.magic, @@ -1219,8 +1222,8 @@ process_dir2_data( xfs_ino_t ent_ino; d = bp->b_addr; - bf = d->hdr.bestfree; - ptr = (char *)d->u; + bf = xfs_dir3_data_bestfree_p(&d->hdr); + ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); badbest = lastfree = freeseen = 0; if (be16_to_cpu(bf[0].length) == 0) { badbest |= be16_to_cpu(bf[0].offset) != 0; @@ -1286,7 +1289,7 @@ process_dir2_data( do_warn(_("\twould junk block\n")); return 1; } - ptr = (char *)d->u; + ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); /* * Process the entries now. */ @@ -1595,7 +1598,8 @@ _("can't read block %u for directory inode %" PRIu64 "\n"), * Verify the block */ block = bp->b_addr; - if (be32_to_cpu(block->hdr.magic) != XFS_DIR2_BLOCK_MAGIC) + if (!(be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC || + be32_to_cpu(block->hdr.magic) == XFS_DIR3_BLOCK_MAGIC)) do_warn( _("bad directory block magic # %#x in block %u for directory inode %" PRIu64 "\n"), be32_to_cpu(block->hdr.magic), mp->m_dirdatablk, ino); @@ -1638,10 +1642,12 @@ process_leaf_block_dir2( int i; int stale; struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); ents = xfs_dir3_leaf_ents_p(leaf); - for (i = stale = 0; i < be16_to_cpu(leaf->hdr.count); i++) { + for (i = stale = 0; i < leafhdr.count; i++) { if ((char *)&ents[i] >= (char *)leaf + mp->m_dirblksize) { do_warn( _("bad entry count in block %u of directory inode %" PRIu64 "\n"), @@ -1658,7 +1664,7 @@ _("bad hash ordering in block %u of directory inode %" PRIu64 "\n"), } *next_hashval = last_hashval = be32_to_cpu(ents[i].hashval); } - if (stale != be16_to_cpu(leaf->hdr.stale)) { + if (stale != leafhdr.stale) { do_warn( _("bad stale count in block %u of directory inode %" PRIu64 "\n"), da_bno, ino); @@ -1687,6 +1693,7 @@ process_leaf_level_dir2( int nex; xfs_dablk_t prev_bno; bmap_ext_t lbmp; + struct xfs_dir3_icleaf_hdr leafhdr; da_bno = da_cursor->level[0].bno; ino = da_cursor->ino; @@ -1723,15 +1730,15 @@ _("can't read file block %u for directory inode %" PRIu64 "\n"), goto error_out; } leaf = bp->b_addr; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); /* * Check magic number for leaf directory btree block. */ - if (be16_to_cpu(leaf->hdr.info.magic) != - XFS_DIR2_LEAFN_MAGIC) { + if (!(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || + leafhdr.magic == XFS_DIR3_LEAFN_MAGIC)) { do_warn( _("bad directory leaf magic # %#x for directory inode %" PRIu64 " block %u\n"), - be16_to_cpu(leaf->hdr.info.magic), - ino, da_bno); + leafhdr.magic, ino, da_bno); libxfs_putbuf(bp); goto error_out; } @@ -1753,11 +1760,10 @@ _("bad directory leaf magic # %#x for directory inode %" PRIu64 " block %u\n"), da_cursor->level[0].hashval = greatest_hashval; da_cursor->level[0].bp = bp; da_cursor->level[0].bno = da_bno; - da_cursor->level[0].index = - be16_to_cpu(leaf->hdr.count); + da_cursor->level[0].index = leafhdr.count; da_cursor->level[0].dirty = buf_dirty; - if (be32_to_cpu(leaf->hdr.info.back) != prev_bno) { + if (leafhdr.back != prev_bno) { do_warn( _("bad sibling back pointer for block %u in directory inode %" PRIu64 "\n"), da_bno, ino); @@ -1765,7 +1771,7 @@ _("bad sibling back pointer for block %u in directory inode %" PRIu64 "\n"), goto error_out; } prev_bno = da_bno; - da_bno = be32_to_cpu(leaf->hdr.info.forw); + da_bno = leafhdr.forw; if (da_bno != 0) { if (verify_dir2_path(mp, da_cursor, 0)) { libxfs_putbuf(bp); @@ -1908,7 +1914,8 @@ _("can't read block %" PRIu64 " for directory inode %" PRIu64 "\n"), continue; } data = bp->b_addr; - if (be32_to_cpu(data->hdr.magic) != XFS_DIR2_DATA_MAGIC) + if (!(be32_to_cpu(data->hdr.magic) == XFS_DIR2_DATA_MAGIC || + be32_to_cpu(data->hdr.magic) == XFS_DIR3_DATA_MAGIC)) do_warn( _("bad directory block magic # %#x in block %" PRIu64 " for directory inode %" PRIu64 "\n"), be32_to_cpu(data->hdr.magic), dbno, ino); diff --git a/repair/dir2.h b/repair/dir2.h index 5162028..6ba96bb 100644 --- a/repair/dir2.h +++ b/repair/dir2.h @@ -33,13 +33,13 @@ typedef union { typedef struct xfs_dir2_data { xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_DATA_MAGIC */ - xfs_dir2_data_union_t u[1]; + xfs_dir2_data_union_t __u[1]; } xfs_dir2_data_t; typedef struct xfs_dir2_block { xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_BLOCK_MAGIC */ - xfs_dir2_data_union_t u[1]; - xfs_dir2_leaf_entry_t leaf[1]; + xfs_dir2_data_union_t __u[1]; + xfs_dir2_leaf_entry_t __leaf[1]; xfs_dir2_block_tail_t tail; } xfs_dir2_block_t; diff --git a/repair/phase6.c b/repair/phase6.c index 8b8df10..dc8145b 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1421,7 +1421,7 @@ longform_dir2_entry_check_data( bp = *bpp; d = bp->b_addr; - ptr = (char *)d->u; + ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); nbad = 0; needscan = needlog = 0; junkit = 0; @@ -1432,10 +1432,16 @@ longform_dir2_entry_check_data( endptr = (char *)blp; if (endptr > (char *)btp) endptr = (char *)btp; - wantmagic = XFS_DIR2_BLOCK_MAGIC; + if (xfs_sb_version_hascrc(&mp->m_sb)) + wantmagic = XFS_DIR3_BLOCK_MAGIC; + else + wantmagic = XFS_DIR2_BLOCK_MAGIC; } else { endptr = (char *)d + mp->m_dirblksize; - wantmagic = XFS_DIR2_DATA_MAGIC; + if (xfs_sb_version_hascrc(&mp->m_sb)) + wantmagic = XFS_DIR3_DATA_MAGIC; + else + wantmagic = XFS_DIR2_DATA_MAGIC; } db = xfs_dir2_da_to_db(mp, da_bno); @@ -1476,8 +1482,8 @@ longform_dir2_entry_check_data( break; /* check for block with no data entries */ - if ((ptr == (char *)d->u) && (ptr + - be16_to_cpu(dup->length) >= endptr)) { + if ((ptr == (char *)xfs_dir3_data_entry_p(&d->hdr)) && + (ptr + be16_to_cpu(dup->length) >= endptr)) { junkit = 1; *num_illegal += 1; break; @@ -1548,7 +1554,7 @@ longform_dir2_entry_check_data( do_warn(_("would fix magic # to %#x\n"), wantmagic); } lastfree = 0; - ptr = (char *)d->u; + ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); /* * look at each entry. reference inode pointed to by each * entry in the incore inode tree. @@ -1718,7 +1724,8 @@ longform_dir2_entry_check_data( if (ip->i_ino == inum) { ASSERT(dep->name[0] == '.' && dep->namelen == 1); add_inode_ref(current_irec, current_ino_offset); - if (da_bno != 0 || dep != (xfs_dir2_data_entry_t *)d->u) { + if (da_bno != 0 || + dep != xfs_dir3_data_entry_p(&d->hdr)) { /* "." should be the first entry */ nbad++; if (entry_junked( @@ -1827,6 +1834,7 @@ longform_dir2_check_leaf( xfs_dir2_leaf_tail_t *ltp; int seeval; struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; da_bno = mp->m_dirleafblk; if (libxfs_da_read_buf(NULL, ip, da_bno, -1, &bp, XFS_DATA_FORK, @@ -1837,27 +1845,24 @@ longform_dir2_check_leaf( /* NOTREACHED */ } leaf = bp->b_addr; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); ents = xfs_dir3_leaf_ents_p(leaf); ltp = xfs_dir2_leaf_tail_p(mp, leaf); bestsp = xfs_dir2_leaf_bests_p(ltp); - if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAF1_MAGIC || - be32_to_cpu(leaf->hdr.info.forw) || - be32_to_cpu(leaf->hdr.info.back) || - be16_to_cpu(leaf->hdr.count) < - be16_to_cpu(leaf->hdr.stale) || - be16_to_cpu(leaf->hdr.count) > + if (!(leafhdr.magic == XFS_DIR2_LEAF1_MAGIC || + leafhdr.magic == XFS_DIR3_LEAF1_MAGIC) || + leafhdr.forw || leafhdr.back || + leafhdr.count < leaf->hdr.stale || + leafhdr.count > xfs_dir3_max_leaf_ents(mp, leaf) || - (char *)&ents[be16_to_cpu( - leaf->hdr.count)] > (char *)bestsp) { + (char *)&ents[leafhdr.count] > (char *)bestsp) { do_warn( _("leaf block %u for directory inode %" PRIu64 " bad header\n"), da_bno, ip->i_ino); libxfs_putbuf(bp); return 1; } - seeval = dir_hash_see_all(hashtab, ents, - be16_to_cpu(leaf->hdr.count), - be16_to_cpu(leaf->hdr.stale)); + seeval = dir_hash_see_all(hashtab, ents, leafhdr.count, leafhdr.stale); if (dir_hash_check(hashtab, ip, seeval)) { libxfs_putbuf(bp); return 1; @@ -1899,6 +1904,9 @@ longform_dir2_check_node( int seeval = 0; int used; struct xfs_dir2_leaf_entry *ents; + struct xfs_dir3_icleaf_hdr leafhdr; + struct xfs_dir3_icfree_hdr freehdr; + __be16 *bests; for (da_bno = mp->m_dirleafblk, next_da_bno = 0; next_da_bno != NULLFILEOFF && da_bno < mp->m_dirfreeblk; @@ -1914,23 +1922,23 @@ longform_dir2_check_node( return 1; } leaf = bp->b_addr; + xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); ents = xfs_dir3_leaf_ents_p(leaf); - if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAFN_MAGIC) { - if (be16_to_cpu(leaf->hdr.info.magic) == - XFS_DA_NODE_MAGIC) { + if (!(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || + leafhdr.magic == XFS_DIR3_LEAFN_MAGIC)) { + if (leafhdr.magic == XFS_DA_NODE_MAGIC || + leafhdr.magic == XFS_DA3_NODE_MAGIC) { libxfs_putbuf(bp); continue; } do_warn( _("unknown magic number %#x for block %u in directory inode %" PRIu64 "\n"), - be16_to_cpu(leaf->hdr.info.magic), - da_bno, ip->i_ino); + leafhdr.magic, da_bno, ip->i_ino); libxfs_putbuf(bp); return 1; } - if (be16_to_cpu(leaf->hdr.count) > xfs_dir3_max_leaf_ents(mp, leaf) || - be16_to_cpu(leaf->hdr.count) < - be16_to_cpu(leaf->hdr.stale)) { + if (leafhdr.count > xfs_dir3_max_leaf_ents(mp, leaf) || + leafhdr.count < leafhdr.stale) { do_warn( _("leaf block %u for directory inode %" PRIu64 " bad header\n"), da_bno, ip->i_ino); @@ -1938,8 +1946,7 @@ longform_dir2_check_node( return 1; } seeval = dir_hash_see_all(hashtab, ents, - be16_to_cpu(leaf->hdr.count), - be16_to_cpu(leaf->hdr.stale)); + leafhdr.count, leafhdr.stale); libxfs_putbuf(bp); if (seeval != DIR_HASH_CK_OK) return 1; @@ -1961,35 +1968,35 @@ longform_dir2_check_node( return 1; } free = bp->b_addr; + xfs_dir3_free_hdr_from_disk(&freehdr, free); + bests = xfs_dir3_free_bests_p(mp, free); fdb = xfs_dir2_da_to_db(mp, da_bno); - if (be32_to_cpu(free->hdr.magic) != XFS_DIR2_FREE_MAGIC || - be32_to_cpu(free->hdr.firstdb) != + if (!(freehdr.magic == XFS_DIR2_FREE_MAGIC || + freehdr.magic == XFS_DIR3_FREE_MAGIC) || + freehdr.firstdb != (fdb - XFS_DIR2_FREE_FIRSTDB(mp)) * xfs_dir3_free_max_bests(mp) || - be32_to_cpu(free->hdr.nvalid) < - be32_to_cpu(free->hdr.nused)) { + freehdr.nvalid < freehdr.nused) { do_warn( _("free block %u for directory inode %" PRIu64 " bad header\n"), da_bno, ip->i_ino); libxfs_putbuf(bp); return 1; } - for (i = used = 0; i < be32_to_cpu(free->hdr.nvalid); i++) { - if (i + be32_to_cpu(free->hdr.firstdb) >= - freetab->nents || - freetab->ents[i + be32_to_cpu( - free->hdr.firstdb)].v != - be16_to_cpu(free->bests[i])) { + for (i = used = 0; i < freehdr.nvalid; i++) { + if (i + freehdr.firstdb >= freetab->nents || + freetab->ents[i + freehdr.firstdb].v != + be16_to_cpu(bests[i])) { do_warn( _("free block %u entry %i for directory ino %" PRIu64 " bad\n"), da_bno, i, ip->i_ino); libxfs_putbuf(bp); return 1; } - used += be16_to_cpu(free->bests[i]) != NULLDATAOFF; - freetab->ents[i + be32_to_cpu(free->hdr.firstdb)].s = 1; + used += be16_to_cpu(bests[i]) != NULLDATAOFF; + freetab->ents[i + freehdr.firstdb].s = 1; } - if (used != be32_to_cpu(free->hdr.nused)) { + if (used != freehdr.nused) { do_warn( _("free block %u for directory inode %" PRIu64 " bad nused\n"), da_bno, ip->i_ino); -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BF21029E06 for ; Fri, 17 May 2013 06:14:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 635BFAC001 for ; Fri, 17 May 2013 04:14:11 -0700 (PDT) X-ASG-Debug-ID: 1368789242-04bdf04224359fa0003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 1vvM5pjqHJVLlzgY for ; Fri, 17 May 2013 04:14:07 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhUMACUQllF5LDbs/2dsb2JhbABbgwg3wVcEehd0gh8BAQUaAQwvMwgYMTkDGxmIC70AjgKEeQOTZ4R6kBeDIiqBLiQ Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:05 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbi-0008So-41 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:54 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbh-0005Ff-LK for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 24/30] xfsprogs: add crc format support to repair Date: Fri, 17 May 2013 21:13:19 +1000 X-ASG-Orig-Subj: [PATCH 24/30] xfsprogs: add crc format support to repair Message-Id: <1368789205-19969-25-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789246 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- include/libxfs.h | 5 ++ include/xfs_alloc_btree.h | 2 +- include/xfs_bmap_btree.h | 2 +- include/xfs_btree.h | 5 +- include/xfs_ialloc_btree.h | 2 +- include/xfs_symlink.h | 2 + libxfs/rdwr.c | 19 ++++- libxfs/xfs.h | 12 ++- libxfs/xfs_alloc.c | 7 +- libxfs/xfs_btree.c | 20 +++-- repair/agheader.c | 36 ++++++++- repair/dino_chunks.c | 7 +- repair/dinode.c | 190 ++++++++++++++++++++++++++------------------ repair/phase2.c | 1 + repair/phase5.c | 152 ++++++++++++++++++++++++++--------- repair/prefetch.c | 7 +- repair/scan.c | 152 +++++++++++++++++++---------------- repair/scan.h | 12 ++- repair/versions.c | 2 +- repair/xfs_repair.c | 2 +- 20 files changed, 422 insertions(+), 215 deletions(-) diff --git a/include/libxfs.h b/include/libxfs.h index d5131c1..4bb4ad4 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -682,6 +682,7 @@ void xfs_bmbt_disk_get_all(xfs_bmbt_rec_t *r, xfs_bmbt_irec_t *s); #define libxfs_dinode_to_disk xfs_dinode_to_disk void xfs_dinode_from_disk(struct xfs_icdinode *, struct xfs_dinode *); +#define libxfs_dinode_calc_crc xfs_dinode_calc_crc #define libxfs_idata_realloc xfs_idata_realloc #define libxfs_idestroy_fork xfs_idestroy_fork @@ -690,6 +691,10 @@ void xfs_dinode_from_disk(struct xfs_icdinode *, #define libxfs_sb_from_disk xfs_sb_from_disk #define libxfs_sb_to_disk xfs_sb_to_disk +/* xfs_symlink.h */ +#define libxfs_symlink_blocks xfs_symlink_blocks +#define libxfs_symlink_hdr_ok xfs_symlink_hdr_ok + /* xfs_rtalloc.c */ int libxfs_rtfree_extent(struct xfs_trans *, xfs_rtblock_t, xfs_extlen_t); diff --git a/include/xfs_alloc_btree.h b/include/xfs_alloc_btree.h index 70c3ea0..e160339 100644 --- a/include/xfs_alloc_btree.h +++ b/include/xfs_alloc_btree.h @@ -64,7 +64,7 @@ typedef __be32 xfs_alloc_ptr_t; */ #define XFS_ALLOC_BLOCK_LEN(mp) \ (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ - XFS_BTREE_SBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD : \ + XFS_BTREE_SBLOCK_CRC_LEN : \ XFS_BTREE_SBLOCK_LEN) /* diff --git a/include/xfs_bmap_btree.h b/include/xfs_bmap_btree.h index 8a28b89..20d66b0 100644 --- a/include/xfs_bmap_btree.h +++ b/include/xfs_bmap_btree.h @@ -140,7 +140,7 @@ typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; */ #define XFS_BMBT_BLOCK_LEN(mp) \ (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ - XFS_BTREE_LBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD : \ + XFS_BTREE_LBLOCK_CRC_LEN : \ XFS_BTREE_LBLOCK_LEN) #define XFS_BMBT_REC_ADDR(mp, block, index) \ diff --git a/include/xfs_btree.h b/include/xfs_btree.h index 02f89d8..c0acbbf 100644 --- a/include/xfs_btree.h +++ b/include/xfs_btree.h @@ -83,7 +83,10 @@ struct xfs_btree_block { #define XFS_BTREE_SBLOCK_LEN 16 /* size of a short form block */ #define XFS_BTREE_LBLOCK_LEN 24 /* size of a long form block */ -#define XFS_BTREE_CRCBLOCK_ADD 32 /* size of blkno + crc + uuid */ + +/* sizes of CRC enabled btree blocks */ +#define XFS_BTREE_SBLOCK_CRC_LEN (XFS_BTREE_SBLOCK_LEN + 40) +#define XFS_BTREE_LBLOCK_CRC_LEN (XFS_BTREE_LBLOCK_LEN + 48) #define XFS_BTREE_SBLOCK_CRC_OFF \ offsetof(struct xfs_btree_block, bb_u.s.bb_crc) diff --git a/include/xfs_ialloc_btree.h b/include/xfs_ialloc_btree.h index a1bfa7a..7f5ae6b 100644 --- a/include/xfs_ialloc_btree.h +++ b/include/xfs_ialloc_btree.h @@ -80,7 +80,7 @@ typedef __be32 xfs_inobt_ptr_t; */ #define XFS_INOBT_BLOCK_LEN(mp) \ (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \ - XFS_BTREE_SBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD : \ + XFS_BTREE_SBLOCK_CRC_LEN : \ XFS_BTREE_SBLOCK_LEN) /* diff --git a/include/xfs_symlink.h b/include/xfs_symlink.h index bb21e6a..55f3f2d 100644 --- a/include/xfs_symlink.h +++ b/include/xfs_symlink.h @@ -29,6 +29,8 @@ struct xfs_dsymlink_hdr { sizeof(struct xfs_dsymlink_hdr) : 0)) int xfs_symlink_blocks(struct xfs_mount *mp, int pathlen); +bool xfs_symlink_hdr_ok(struct xfs_mount *mp, xfs_ino_t ino, uint32_t offset, + uint32_t size, struct xfs_buf *bp); extern const struct xfs_buf_ops xfs_symlink_buf_ops; diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index f91a5d0..c679f81 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -445,6 +445,7 @@ __libxfs_getbufr(int blen) } else bp = kmem_zone_zalloc(xfs_buf_zone, 0); pthread_mutex_unlock(&xfs_buf_freelist.cm_mutex); + bp->b_ops = NULL; return bp; } @@ -833,10 +834,20 @@ libxfs_writebufr(xfs_buf_t *bp) } } + /* + * clear any pre-existing error status on the buffer. This can occur if + * the buffer is corrupt on disk and the repair process doesn't clear + * the error before fixing and writing it back. + */ + bp->b_error = 0; if (bp->b_ops) { bp->b_ops->verify_write(bp); - if (bp->b_error) + if (bp->b_error) { + fprintf(stderr, + _("%s: write verifer failed on bno 0x%llx/0x%x\n"), + __func__, (long long)bp->b_bn, bp->b_bcount); return bp->b_error; + } } if (!(bp->b_flags & LIBXFS_B_DISCONTIG)) { @@ -883,6 +894,12 @@ libxfs_writebuf_int(xfs_buf_t *bp, int flags) int libxfs_writebuf(xfs_buf_t *bp, int flags) { +#ifdef IO_DEBUG + printf("%lx: %s: dirty blkno=%llu(%llu)\n", + pthread_self(), __FUNCTION__, + (long long)LIBXFS_BBTOOFF64(bp->b_bn), + (long long)bp->b_bn); +#endif bp->b_flags |= (LIBXFS_B_DIRTY | flags); libxfs_putbuf(bp); return 0; diff --git a/libxfs/xfs.h b/libxfs/xfs.h index 9246f36..aa71ecc 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -69,8 +69,16 @@ typedef __uint32_t inst_t; /* an instruction */ #define IHOLD(ip) ((void) 0) /* stop unused var warnings by assigning mp to itself */ -#define XFS_CORRUPTION_ERROR(e,l,mp,m) do { (mp) = (mp); } while (0) -#define XFS_ERROR_REPORT(e,l,mp) do { (mp) = (mp); } while (0) +#define XFS_CORRUPTION_ERROR(e,l,mp,m) do { \ + (mp) = (mp); \ + cmn_err(CE_ALERT, "%s: XFS_CORRUPTION_ERROR", (e)); \ +} while (0) + +#define XFS_ERROR_REPORT(e,l,mp) do { \ + (mp) = (mp); \ + cmn_err(CE_ALERT, "%s: XFS_ERROR_REPORT", (e)); \ +} while (0) + #define XFS_QM_DQATTACH(mp,ip,flags) 0 #define XFS_ERROR(e) (e) #define XFS_ERRLEVEL_LOW 1 diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index 1041f8f..1d7ea8f 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -2173,8 +2173,13 @@ xfs_agf_verify( struct xfs_agf *agf = XFS_BUF_TO_AGF(bp); if (xfs_sb_version_hascrc(&mp->m_sb) && - !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_uuid)) + !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_uuid)) { + char uu[64], uu2[64]; + platform_uuid_unparse(&agf->agf_uuid, uu); + platform_uuid_unparse(&mp->m_sb.sb_uuid, uu2); + return false; + } if (!(agf->agf_magicnum == cpu_to_be32(XFS_AGF_MAGIC) && XFS_AGF_GOOD_VERSION(be32_to_cpu(agf->agf_versionnum)) && diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index a613294..b11131c 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -391,17 +391,15 @@ xfs_btree_dup_cursor( */ static inline size_t xfs_btree_block_len(struct xfs_btree_cur *cur) { - size_t len; - - if (cur->bc_flags & XFS_BTREE_LONG_PTRS) - len = XFS_BTREE_LBLOCK_LEN; - else - len = XFS_BTREE_SBLOCK_LEN; + if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { + if (cur->bc_flags & XFS_BTREE_CRC_BLOCKS) + return XFS_BTREE_LBLOCK_CRC_LEN; + return XFS_BTREE_LBLOCK_LEN; + } if (cur->bc_flags & XFS_BTREE_CRC_BLOCKS) - len += XFS_BTREE_CRCBLOCK_ADD; - - return len; + return XFS_BTREE_SBLOCK_CRC_LEN; + return XFS_BTREE_SBLOCK_LEN; } /* @@ -1311,7 +1309,7 @@ xfs_btree_log_block( offsetof(struct xfs_btree_block, bb_u.s.bb_uuid), offsetof(struct xfs_btree_block, bb_u.s.bb_owner), offsetof(struct xfs_btree_block, bb_u.s.bb_crc), - XFS_BTREE_SBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD + XFS_BTREE_SBLOCK_CRC_LEN }; static const short loffsets[] = { /* table of offsets (long) */ offsetof(struct xfs_btree_block, bb_magic), @@ -1325,7 +1323,7 @@ xfs_btree_log_block( offsetof(struct xfs_btree_block, bb_u.l.bb_owner), offsetof(struct xfs_btree_block, bb_u.l.bb_crc), offsetof(struct xfs_btree_block, bb_u.l.bb_pad), - XFS_BTREE_LBLOCK_LEN + XFS_BTREE_CRCBLOCK_ADD + XFS_BTREE_LBLOCK_CRC_LEN }; XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); diff --git a/repair/agheader.c b/repair/agheader.c index 769022d..bc8b1bf 100644 --- a/repair/agheader.c +++ b/repair/agheader.c @@ -22,6 +22,11 @@ #include "protos.h" #include "err_protos.h" +/* + * XXX (dgc): WTF is the point of all the check and repair here when phase 5 + * recreates the AGF/AGI/AGFL completely from scratch? + */ + static int verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) { @@ -104,7 +109,20 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) /* don't check freespace btrees -- will be checked by caller */ - return(retval); + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return retval; + + if (platform_uuid_compare(&agf->agf_uuid, &mp->m_sb.sb_uuid)) { + char uu[64]; + + retval = XR_AG_AGF; + platform_uuid_unparse(&agf->agf_uuid, uu); + do_warn(_("bad uuid %s for agf %d\n"), uu, i); + + if (!no_modify) + platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); + } + return retval; } static int @@ -169,7 +187,21 @@ verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) /* don't check inode btree -- will be checked by caller */ - return(retval); + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return retval; + + if (platform_uuid_compare(&agi->agi_uuid, &mp->m_sb.sb_uuid)) { + char uu[64]; + + retval = XR_AG_AGI; + platform_uuid_unparse(&agi->agi_uuid, uu); + do_warn(_("bad uuid %s for agi %d\n"), uu, agno); + + if (!no_modify) + platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); + } + + return retval; } /* diff --git a/repair/dino_chunks.c b/repair/dino_chunks.c index 21078d0..d3c2236 100644 --- a/repair/dino_chunks.c +++ b/repair/dino_chunks.c @@ -628,7 +628,7 @@ process_inode_chunk( bplist[bp_index] = libxfs_readbuf(mp->m_dev, XFS_AGB_TO_DADDR(mp, agno, agbno), XFS_FSB_TO_BB(mp, blks_per_cluster), 0, - NULL); + &xfs_inode_buf_ops); if (!bplist[bp_index]) { do_warn(_("cannot read inode %" PRIu64 ", disk block %" PRId64 ", cnt %d\n"), XFS_AGINO_TO_INO(mp, agno, first_irec->ino_startnum), @@ -775,8 +775,11 @@ process_inode_chunk( extra_attr_check, &isa_dir, &parent); ASSERT(is_used != 3); - if (ino_dirty) + if (ino_dirty) { dirty = 1; + libxfs_dinode_calc_crc(mp, dino); + } + /* * XXX - if we want to try and keep * track of whether we need to bang on diff --git a/repair/dinode.c b/repair/dinode.c index 66eedc2..2df9a91 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -85,139 +85,127 @@ _("would have cleared inode %" PRIu64 " attributes\n"), ino_num); } static int -clear_dinode_core(xfs_dinode_t *dinoc, xfs_ino_t ino_num) +clear_dinode_core(struct xfs_mount *mp, xfs_dinode_t *dinoc, xfs_ino_t ino_num) { int dirty = 0; + int i; - if (be16_to_cpu(dinoc->di_magic) != XFS_DINODE_MAGIC) { - dirty = 1; - - if (no_modify) - return(1); +#define __dirty_no_modify_ret(dirty) \ + ({ (dirty) = 1; if (no_modify) return 1; }) + if (be16_to_cpu(dinoc->di_magic) != XFS_DINODE_MAGIC) { + __dirty_no_modify_ret(dirty); dinoc->di_magic = cpu_to_be16(XFS_DINODE_MAGIC); } if (!XFS_DINODE_GOOD_VERSION(dinoc->di_version) || (!fs_inode_nlink && dinoc->di_version > 1)) { - dirty = 1; - - if (no_modify) - return(1); - - dinoc->di_version = (fs_inode_nlink) ? 2 : 1; + __dirty_no_modify_ret(dirty); + if (xfs_sb_version_hascrc(&mp->m_sb)) + dinoc->di_version = 3; + else + dinoc->di_version = (fs_inode_nlink) ? 2 : 1; } if (be16_to_cpu(dinoc->di_mode) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_mode = 0; } if (be16_to_cpu(dinoc->di_flags) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_flags = 0; } if (be32_to_cpu(dinoc->di_dmevmask) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_dmevmask = 0; } if (dinoc->di_forkoff != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_forkoff = 0; } if (dinoc->di_format != XFS_DINODE_FMT_EXTENTS) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_format = XFS_DINODE_FMT_EXTENTS; } if (dinoc->di_aformat != XFS_DINODE_FMT_EXTENTS) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_aformat = XFS_DINODE_FMT_EXTENTS; } if (be64_to_cpu(dinoc->di_size) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_size = 0; } if (be64_to_cpu(dinoc->di_nblocks) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_nblocks = 0; } if (be16_to_cpu(dinoc->di_onlink) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_onlink = 0; } if (be32_to_cpu(dinoc->di_nextents) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_nextents = 0; } if (be16_to_cpu(dinoc->di_anextents) != 0) { - dirty = 1; - - if (no_modify) - return(1); - + __dirty_no_modify_ret(dirty); dinoc->di_anextents = 0; } if (dinoc->di_version > 1 && be32_to_cpu(dinoc->di_nlink) != 0) { - dirty = 1; + __dirty_no_modify_ret(dirty); + dinoc->di_nlink = 0; + } - if (no_modify) - return(1); + /* we are done for version 1/2 inodes */ + if (dinoc->di_version < 3) + return dirty; - dinoc->di_nlink = 0; + if (be64_to_cpu(dinoc->di_ino) != ino_num) { + __dirty_no_modify_ret(dirty); + dinoc->di_ino = cpu_to_be64(ino_num); } - return(dirty); + if (platform_uuid_compare(&dinoc->di_uuid, &mp->m_sb.sb_uuid)) { + __dirty_no_modify_ret(dirty); + platform_uuid_copy(&dinoc->di_uuid, &mp->m_sb.sb_uuid); + } + + for (i = 0; i < 16; i++) { + if (dinoc->di_pad[i] != 0) { + __dirty_no_modify_ret(dirty); + memset(dinoc->di_pad, 0, 16); + break; + } + } + + if (be64_to_cpu(dinoc->di_flags2) != 0) { + __dirty_no_modify_ret(dirty); + dinoc->di_flags2 = 0; + } + + if (be64_to_cpu(dinoc->di_lsn) != 0) { + __dirty_no_modify_ret(dirty); + dinoc->di_lsn = 0; + } + + if (be64_to_cpu(dinoc->di_changecount) != 0) { + __dirty_no_modify_ret(dirty); + dinoc->di_changecount = 0; + } + + return dirty; } static int @@ -243,7 +231,7 @@ clear_dinode(xfs_mount_t *mp, xfs_dinode_t *dino, xfs_ino_t ino_num) { int dirty; - dirty = clear_dinode_core(dino, ino_num); + dirty = clear_dinode_core(mp, dino, ino_num); dirty += clear_dinode_unlinked(mp, dino); /* and clear the forks */ @@ -1126,6 +1114,7 @@ process_btinode( int level; int numrecs; bmap_cursor_t cursor; + __uint64_t magic; dib = (xfs_bmdr_block_t *)XFS_DFORK_PTR(dip, whichfork); lino = XFS_AGINO_TO_INO(mp, agno, ino); @@ -1137,6 +1126,9 @@ process_btinode( else forkname = _("attr"); + magic = xfs_sb_version_hascrc(&mp->m_sb) ? XFS_BMAP_CRC_MAGIC + : XFS_BMAP_MAGIC; + level = be16_to_cpu(dib->bb_level); numrecs = be16_to_cpu(dib->bb_numrecs); @@ -1190,9 +1182,9 @@ _("bad numrecs 0 in inode %" PRIu64 " bmap btree root block\n"), return(1); } - if (scan_lbtree(be64_to_cpu(pp[i]), level, scanfunc_bmap, type, + if (scan_lbtree(be64_to_cpu(pp[i]), level, scan_bmapbt, type, whichfork, lino, tot, nex, blkmapp, &cursor, - 1, check_dups)) + 1, check_dups, magic, &xfs_bmbt_buf_ops)) return(1); /* * fix key (offset) mismatches between the keys in root @@ -1520,9 +1512,21 @@ _("cannot read inode %" PRIu64 ", file block %d, disk block %" PRIu64 "\n"), return(1); } + buf_data = (char *)XFS_BUF_PTR(bp); - size = MIN(be64_to_cpu(dino->di_size) - amountdone, - XFS_FSB_TO_BB(mp, 1) * BBSIZE); + size = MIN(be64_to_cpu(dino->di_size) - amountdone, + XFS_SYMLINK_BUF_SPACE(mp, + mp->m_sb.sb_blocksize)); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + if (!libxfs_symlink_hdr_ok(mp, lino, amountdone, + size, bp)) { + do_warn( +_("bad symlink header ino %" PRIu64 ", file block %d, disk block %" PRIu64 "\n"), + lino, i, fsbno); + return(1); + } + buf_data += sizeof(struct xfs_dsymlink_hdr); + } memmove(cptr, buf_data, size); cptr += size; amountdone += size; @@ -2484,7 +2488,8 @@ process_dinode_int(xfs_mount_t *mp, } if (!XFS_DINODE_GOOD_VERSION(dino->di_version) || - (!fs_inode_nlink && dino->di_version > 1)) { + (!fs_inode_nlink && dino->di_version > 1) || + (xfs_sb_version_hascrc(&mp->m_sb) && dino->di_version < 3) ) { retval = 1; if (!uncertain) do_warn(_("bad version number 0x%x on inode %" PRIu64 "%c"), @@ -2493,7 +2498,9 @@ process_dinode_int(xfs_mount_t *mp, if (!verify_mode) { if (!no_modify) { do_warn(_(" resetting version number\n")); - dino->di_version = (fs_inode_nlink) ? 2 : 1; + dino->di_version = + xfs_sb_version_hascrc(&mp->m_sb) ? 3 : + (fs_inode_nlink) ? 2 : 1; *dirty = 1; } else do_warn(_(" would reset version number\n")); @@ -2501,6 +2508,31 @@ process_dinode_int(xfs_mount_t *mp, } /* + * We don't bother checking the CRC here - we cannot guarantee that when + * we are called here that the inode has not already been modified in + * memory and hence invalidated the CRC. + */ + if (xfs_sb_version_hascrc(&mp->m_sb)) { + if (be64_to_cpu(dino->di_ino) != lino) { + if (!uncertain) + do_warn( +_("inode identifier %llu mismatch on inode %" PRIu64 "\n"), + be64_to_cpu(dino->di_ino), lino); + if (verify_mode) + return 1; + goto clear_bad_out; + } + if (platform_uuid_compare(&dino->di_uuid, &mp->m_sb.sb_uuid)) { + if (!uncertain) + do_warn( + _("UUID mismatch on inode %" PRIu64 "\n"), lino); + if (verify_mode) + return 1; + goto clear_bad_out; + } + } + + /* * blow out of here if the inode size is < 0 */ if ((xfs_fsize_t)be64_to_cpu(dino->di_size) < 0) { diff --git a/repair/phase2.c b/repair/phase2.c index 2817fed..a62854e 100644 --- a/repair/phase2.c +++ b/repair/phase2.c @@ -64,6 +64,7 @@ zero_log(xfs_mount_t *mp) ASSERT(mp->m_sb.sb_logsectlog >= BBSHIFT); } log.l_sectbb_mask = (1 << log.l_sectbb_log) - 1; + log.l_sectBBsize = 1 << mp->m_sb.sb_logsectlog; if ((error = xlog_find_tail(&log, &head_blk, &tail_blk))) { do_warn(_("zero_log: cannot find log head/tail " diff --git a/repair/phase5.c b/repair/phase5.c index c7cef4f..2eae42a 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -602,6 +602,12 @@ prop_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, xfs_alloc_ptr_t *bt_ptr; xfs_agblock_t agbno; bt_stat_level_t *lptr; + __uint32_t crc_magic; + + if (magic == XFS_ABTB_MAGIC) + crc_magic = XFS_ABTB_CRC_MAGIC; + else + crc_magic = XFS_ABTC_CRC_MAGIC; level++; @@ -650,14 +656,17 @@ prop_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, /* * initialize block header */ + lptr->buf_p->b_ops = &xfs_allocbt_buf_ops; bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p); memset(bt_hdr, 0, mp->m_sb.sb_blocksize); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, lptr->buf_p, crc_magic, level, + 0, agno, XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, lptr->buf_p, magic, level, + 0, agno, 0); - bt_hdr->bb_magic = cpu_to_be32(magic); - bt_hdr->bb_level = cpu_to_be16(level); bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno); - bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); - bt_hdr->bb_numrecs = 0; /* * propagate extent record for first extent in new block up @@ -699,6 +708,7 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno, extent_tree_node_t *ext_ptr; bt_stat_level_t *lptr; xfs_extlen_t freeblks; + __uint32_t crc_magic; #ifdef XR_BLD_FREE_TRACE fprintf(stderr, "in build_freespace_tree, agno = %d\n", agno); @@ -707,6 +717,10 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno, freeblks = 0; ASSERT(level > 0); + if (magic == XFS_ABTB_MAGIC) + crc_magic = XFS_ABTB_CRC_MAGIC; + else + crc_magic = XFS_ABTC_CRC_MAGIC; /* * initialize the first block on each btree level @@ -728,14 +742,15 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno, /* * initialize block header */ + lptr->buf_p->b_ops = &xfs_allocbt_buf_ops; bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p); memset(bt_hdr, 0, mp->m_sb.sb_blocksize); - - bt_hdr->bb_magic = cpu_to_be32(magic); - bt_hdr->bb_level = cpu_to_be16(i); - bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); - bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); - bt_hdr->bb_numrecs = 0; + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, lptr->buf_p, crc_magic, i, + 0, agno, XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, lptr->buf_p, magic, i, + 0, agno, 0); } /* * run along leaf, setting up records. as we have to switch @@ -759,13 +774,17 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno, /* * block initialization, lay in block header */ + lptr->buf_p->b_ops = &xfs_allocbt_buf_ops; bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p); memset(bt_hdr, 0, mp->m_sb.sb_blocksize); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, lptr->buf_p, crc_magic, 0, + 0, agno, XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, lptr->buf_p, magic, 0, + 0, agno, 0); - bt_hdr->bb_magic = cpu_to_be32(magic); - bt_hdr->bb_level = 0; bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno); - bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); bt_hdr->bb_numrecs = cpu_to_be16(lptr->num_recs_pb + (lptr->modulo > 0)); #ifdef XR_BLD_FREE_TRACE @@ -996,14 +1015,19 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, /* * initialize block header */ + lptr->buf_p->b_ops = &xfs_inobt_buf_ops; bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p); memset(bt_hdr, 0, mp->m_sb.sb_blocksize); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_CRC_MAGIC, + level, 0, agno, + XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_MAGIC, + level, 0, agno, 0); - bt_hdr->bb_magic = cpu_to_be32(XFS_IBT_MAGIC); - bt_hdr->bb_level = cpu_to_be16(level); bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno); - bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); - bt_hdr->bb_numrecs = 0; + /* * propagate extent record for first extent in new block up */ @@ -1024,6 +1048,9 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, *bt_ptr = cpu_to_be32(btree_curs->level[level-1].agbno); } +/* + * XXX: yet more code that can be shared with mkfs, growfs. + */ static void build_agi(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, xfs_agino_t first_agino, @@ -1036,6 +1063,7 @@ build_agi(xfs_mount_t *mp, xfs_agnumber_t agno, agi_buf = libxfs_getbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)), mp->m_sb.sb_sectsize/BBSIZE); + agi_buf->b_ops = &xfs_agi_buf_ops; agi = XFS_BUF_TO_AGI(agi_buf); memset(agi, 0, mp->m_sb.sb_sectsize); @@ -1057,6 +1085,9 @@ build_agi(xfs_mount_t *mp, xfs_agnumber_t agno, for (i = 0; i < XFS_AGI_UNLINKED_BUCKETS; i++) agi->agi_unlinked[i] = cpu_to_be32(NULLAGINO); + if (xfs_sb_version_hascrc(&mp->m_sb)) + platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); + libxfs_writebuf(agi_buf, 0); } @@ -1099,15 +1130,19 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno, /* * initialize block header */ + + lptr->buf_p->b_ops = &xfs_inobt_buf_ops; bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p); memset(bt_hdr, 0, mp->m_sb.sb_blocksize); - - bt_hdr->bb_magic = cpu_to_be32(XFS_IBT_MAGIC); - bt_hdr->bb_level = cpu_to_be16(i); - bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); - bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); - bt_hdr->bb_numrecs = 0; + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_CRC_MAGIC, + i, 0, agno, + XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_MAGIC, + i, 0, agno, 0); } + /* * run along leaf, setting up records. as we have to switch * blocks, call the prop_ino_cursor routine to set up the new @@ -1127,13 +1162,18 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno, /* * block initialization, lay in block header */ + lptr->buf_p->b_ops = &xfs_inobt_buf_ops; bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p); memset(bt_hdr, 0, mp->m_sb.sb_blocksize); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_CRC_MAGIC, + 0, 0, agno, + XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_MAGIC, + 0, 0, agno, 0); - bt_hdr->bb_magic = cpu_to_be32(XFS_IBT_MAGIC); - bt_hdr->bb_level = 0; bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno); - bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); bt_hdr->bb_numrecs = cpu_to_be16(lptr->num_recs_pb + (lptr->modulo > 0)); @@ -1192,7 +1232,9 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno, /* * build both the agf and the agfl for an agno given both - * btree cursors + * btree cursors. + * + * XXX: yet more common code that can be shared with mkfs/growfs. */ static void build_agf_agfl(xfs_mount_t *mp, @@ -1213,6 +1255,7 @@ build_agf_agfl(xfs_mount_t *mp, agf_buf = libxfs_getbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)), mp->m_sb.sb_sectsize/BBSIZE); + agf_buf->b_ops = &xfs_agf_buf_ops; agf = XFS_BUF_TO_AGF(agf_buf); memset(agf, 0, mp->m_sb.sb_sectsize); @@ -1266,22 +1309,34 @@ build_agf_agfl(xfs_mount_t *mp, XFS_BTNUM_CNT); #endif + if (xfs_sb_version_hascrc(&mp->m_sb)) + platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); + + /* initialise the AGFL, then fill it if there are blocks left over. */ + agfl_buf = libxfs_getbuf(mp->m_dev, + XFS_AG_DADDR(mp, agno, XFS_AGFL_DADDR(mp)), + mp->m_sb.sb_sectsize/BBSIZE); + agfl_buf->b_ops = &xfs_agfl_buf_ops; + agfl = XFS_BUF_TO_AGFL(agfl_buf); + + /* setting to 0xff results in initialisation to NULLAGBLOCK */ + memset(agfl, 0xff, mp->m_sb.sb_sectsize); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + agfl->agfl_magicnum = cpu_to_be32(XFS_AGFL_MAGIC); + agfl->agfl_seqno = cpu_to_be32(agno); + platform_uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_uuid); + for (i = 0; i < XFS_AGFL_SIZE(mp); i++) + agfl->agfl_bno[i] = cpu_to_be32(NULLAGBLOCK); + } + freelist = XFS_BUF_TO_AGFL_BNO(mp, agfl_buf); + /* * do we have left-over blocks in the btree cursors that should * be used to fill the AGFL? */ if (bno_bt->num_free_blocks > 0 || bcnt_bt->num_free_blocks > 0) { /* - * yes - grab the AGFL buffer - */ - agfl_buf = libxfs_getbuf(mp->m_dev, - XFS_AG_DADDR(mp, agno, XFS_AGFL_DADDR(mp)), - mp->m_sb.sb_sectsize/BBSIZE); - agfl = XFS_BUF_TO_AGFL(agfl_buf); - freelist = XFS_BUF_TO_AGFL_BNO(mp, agfl_buf); - memset(agfl, 0, mp->m_sb.sb_sectsize); - /* - * ok, now grab as many blocks as we can + * yes, now grab as many blocks as we can */ i = j = 0; while (bno_bt->num_free_blocks > 0 && i < XFS_AGFL_SIZE(mp)) { @@ -1326,13 +1381,14 @@ build_agf_agfl(xfs_mount_t *mp, fprintf(stderr, "writing agfl for ag %u\n", agno); #endif - libxfs_writebuf(agfl_buf, 0); } else { agf->agf_flfirst = 0; agf->agf_fllast = cpu_to_be32(XFS_AGFL_SIZE(mp) - 1); agf->agf_flcount = 0; } + libxfs_writebuf(agfl_buf, 0); + ext_ptr = findbiggest_bcnt_extent(agno); agf->agf_longest = cpu_to_be32((ext_ptr != NULL) ? ext_ptr->ex_blockcount : 0); @@ -1342,6 +1398,26 @@ build_agf_agfl(xfs_mount_t *mp, libxfs_writebuf(agf_buf, 0); + /* + * now fix up the free list appropriately + * XXX: code lifted from mkfs, shoul dbe shared. + */ + { + xfs_alloc_arg_t args; + xfs_trans_t *tp; + + memset(&args, 0, sizeof(args)); + args.tp = tp = libxfs_trans_alloc(mp, 0); + args.mp = mp; + args.agno = agno; + args.alignment = 1; + args.pag = xfs_perag_get(mp,agno); + libxfs_trans_reserve(tp, XFS_MIN_FREELIST(agf, mp), 0, 0, 0, 0); + libxfs_alloc_fix_freelist(&args, 0); + xfs_perag_put(args.pag); + libxfs_trans_commit(tp, 0); + } + #ifdef XR_BLD_FREE_TRACE fprintf(stderr, "wrote agf for ag %u, error = %d\n", agno, error); #endif diff --git a/repair/prefetch.c b/repair/prefetch.c index 93b4146..7529f5d 100644 --- a/repair/prefetch.c +++ b/repair/prefetch.c @@ -221,7 +221,7 @@ pf_scan_lbtree( int rc; bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, dbno), - XFS_FSB_TO_BB(mp, 1), 0, NULL); + XFS_FSB_TO_BB(mp, 1), 0, &xfs_bmbt_buf_ops); if (!bp) return 0; @@ -337,6 +337,11 @@ pf_read_inode_dirs( int hasdir = 0; int isadir; + bp->b_ops = &xfs_inode_buf_ops; + bp->b_ops->verify_read(bp); + if (bp->b_error) + return; + for (icnt = 0; icnt < (XFS_BUF_COUNT(bp) >> mp->m_sb.sb_inodelog); icnt++) { dino = xfs_make_iptr(mp, bp, icnt); diff --git a/repair/scan.c b/repair/scan.c index 0b5ab1b..d58d55a 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -48,17 +48,6 @@ struct aghdr_cnts { __uint64_t ifreecount; }; -static void -scanfunc_allocbt( - struct xfs_btree_block *block, - int level, - xfs_agblock_t bno, - xfs_agnumber_t agno, - int suspect, - int isroot, - __uint32_t magic, - struct aghdr_cnts *agcnts); - void set_mp(xfs_mount_t *mpp) { @@ -78,20 +67,23 @@ scan_sbtree( xfs_agnumber_t agno, int suspect, int isroot, + __uint32_t magic, void *priv), int isroot, - void *priv) + __uint32_t magic, + void *priv, + const struct xfs_buf_ops *ops) { xfs_buf_t *bp; bp = libxfs_readbuf(mp->m_dev, XFS_AGB_TO_DADDR(mp, agno, root), - XFS_FSB_TO_BB(mp, 1), 0, NULL); + XFS_FSB_TO_BB(mp, 1), 0, ops); if (!bp) { do_error(_("can't read btree block %d/%d\n"), agno, root); return; } (*func)(XFS_BUF_TO_BLOCK(bp), nlevels - 1, root, agno, suspect, - isroot, priv); + isroot, magic, priv); libxfs_putbuf(bp); } @@ -114,7 +106,8 @@ scan_lbtree( bmap_cursor_t *bm_cursor, int isroot, int check_dups, - int *dirty), + int *dirty, + __uint64_t magic), int type, int whichfork, xfs_ino_t ino, @@ -123,14 +116,16 @@ scan_lbtree( blkmap_t **blkmapp, bmap_cursor_t *bm_cursor, int isroot, - int check_dups) + int check_dups, + __uint64_t magic, + const struct xfs_buf_ops *ops) { xfs_buf_t *bp; int err; int dirty = 0; bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, root), - XFS_FSB_TO_BB(mp, 1), 0, NULL); + XFS_FSB_TO_BB(mp, 1), 0, ops); if (!bp) { do_error(_("can't read btree block %d/%d\n"), XFS_FSB_TO_AGNO(mp, root), @@ -139,7 +134,8 @@ scan_lbtree( } err = (*func)(XFS_BUF_TO_BLOCK(bp), nlevels - 1, type, whichfork, root, ino, tot, nex, blkmapp, - bm_cursor, isroot, check_dups, &dirty); + bm_cursor, isroot, check_dups, &dirty, + magic); ASSERT(dirty == 0 || (dirty && !no_modify)); @@ -152,7 +148,7 @@ scan_lbtree( } int -scanfunc_bmap( +scan_bmapbt( struct xfs_btree_block *block, int level, int type, @@ -165,7 +161,8 @@ scanfunc_bmap( bmap_cursor_t *bm_cursor, int isroot, int check_dups, - int *dirty) + int *dirty, + __uint64_t magic) { int i; int err; @@ -192,7 +189,7 @@ scanfunc_bmap( * another inode are claiming the same block but that's * highly unlikely. */ - if (be32_to_cpu(block->bb_magic) != XFS_BMAP_MAGIC) { + if (be32_to_cpu(block->bb_magic) != magic) { do_warn( _("bad magic # %#x in inode %" PRIu64 " (%s fork) bmbt block %" PRIu64 "\n"), be32_to_cpu(block->bb_magic), ino, forkname, bno); @@ -206,6 +203,16 @@ _("expected level %d got %d in inode %" PRIu64 ", (%s fork) bmbt block %" PRIu64 return(1); } + if (magic == XFS_BMAP_CRC_MAGIC) { + /* verify owner */ + if (be64_to_cpu(block->bb_u.l.bb_owner) != ino) { + do_warn( +_("expected owner inode %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"), + ino, be64_to_cpu(block->bb_u.l.bb_owner), bno); + return(1); + } + } + if (check_dups == 0) { /* * check sibling pointers. if bad we have a conflict @@ -408,9 +415,10 @@ _("bad bmap btree ptr 0x%llx in ino %" PRIu64 "\n"), return(1); } - err = scan_lbtree(be64_to_cpu(pp[i]), level, scanfunc_bmap, + err = scan_lbtree(be64_to_cpu(pp[i]), level, scan_bmapbt, type, whichfork, ino, tot, nex, blkmapp, - bm_cursor, 0, check_dups); + bm_cursor, 0, check_dups, magic, + &xfs_bmbt_buf_ops); if (err) return(1); @@ -481,35 +489,7 @@ _("bad fwd (right) sibling pointer (saw %" PRIu64 " should be NULLDFSBNO)\n" } static void -scanfunc_bno( - struct xfs_btree_block *block, - int level, - xfs_agblock_t bno, - xfs_agnumber_t agno, - int suspect, - int isroot, - void *agcnts) -{ - return scanfunc_allocbt(block, level, bno, agno, - suspect, isroot, XFS_ABTB_MAGIC, agcnts); -} - -static void -scanfunc_cnt( - struct xfs_btree_block *block, - int level, - xfs_agblock_t bno, - xfs_agnumber_t agno, - int suspect, - int isroot, - void *agcnts) -{ - return scanfunc_allocbt(block, level, bno, agno, - suspect, isroot, XFS_ABTC_MAGIC, agcnts); -} - -static void -scanfunc_allocbt( +scan_allocbt( struct xfs_btree_block *block, int level, xfs_agblock_t bno, @@ -517,8 +497,9 @@ scanfunc_allocbt( int suspect, int isroot, __uint32_t magic, - struct aghdr_cnts *agcnts) + void *priv) { + struct aghdr_cnts *agcnts = priv; const char *name; int i; xfs_alloc_ptr_t *pp; @@ -529,9 +510,19 @@ scanfunc_allocbt( xfs_extlen_t lastcount = 0; xfs_agblock_t lastblock = 0; - assert(magic == XFS_ABTB_MAGIC || magic == XFS_ABTC_MAGIC); - - name = (magic == XFS_ABTB_MAGIC) ? "bno" : "cnt"; + switch (magic) { + case XFS_ABTB_CRC_MAGIC: + case XFS_ABTB_MAGIC: + name = "bno"; + break; + case XFS_ABTC_CRC_MAGIC: + case XFS_ABTC_MAGIC: + name = "cnt"; + break; + default: + assert(0); + break; + } if (be32_to_cpu(block->bb_magic) != magic) { do_warn(_("bad magic # %#x in bt%s block %d/%d\n"), @@ -615,7 +606,8 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), continue; } - if (magic == XFS_ABTB_MAGIC) { + if (magic == XFS_ABTB_MAGIC || + magic == XFS_ABTB_CRC_MAGIC) { if (b <= lastblock) { do_warn(_( "out-of-order bno btree record %d (%u %u) block %u/%u\n"), @@ -648,7 +640,8 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), * no warning messages -- we'll catch * FREE1 blocks later */ - if (magic == XFS_ABTC_MAGIC) { + if (magic == XFS_ABTC_MAGIC || + magic == XFS_ABTC_CRC_MAGIC) { set_bmap_ext(agno, b, blen, XR_E_FREE); break; @@ -709,10 +702,20 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), * as possible. */ if (bno != 0 && verify_agbno(mp, agno, bno)) { - scan_sbtree(bno, level, agno, suspect, - (magic == XFS_ABTB_MAGIC) ? - scanfunc_bno : scanfunc_cnt, 0, - (void *)agcnts); + switch (magic) { + case XFS_ABTB_CRC_MAGIC: + case XFS_ABTB_MAGIC: + scan_sbtree(bno, level, agno, suspect, + scan_allocbt, 0, magic, priv, + &xfs_allocbt_buf_ops); + break; + case XFS_ABTC_CRC_MAGIC: + case XFS_ABTC_MAGIC: + scan_sbtree(bno, level, agno, suspect, + scan_allocbt, 0, magic, priv, + &xfs_allocbt_buf_ops); + break; + } } } } @@ -896,13 +899,14 @@ _("inode rec for ino %" PRIu64 " (%d/%d) overlaps existing rec (start %d/%d)\n") * that we aren't sure about go into the uncertain list. */ static void -scanfunc_ino( +scan_inobt( struct xfs_btree_block *block, int level, xfs_agblock_t bno, xfs_agnumber_t agno, int suspect, int isroot, + __uint32_t magic, void *priv) { struct aghdr_cnts *agcnts = priv; @@ -915,7 +919,7 @@ scanfunc_ino( hdr_errors = 0; - if (be32_to_cpu(block->bb_magic) != XFS_IBT_MAGIC) { + if (be32_to_cpu(block->bb_magic) != magic) { do_warn(_("bad magic # %#x in inobt block %d/%d\n"), be32_to_cpu(block->bb_magic), agno, bno); hdr_errors++; @@ -1032,7 +1036,8 @@ _("inode btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), if (be32_to_cpu(pp[i]) != 0 && verify_agbno(mp, agno, be32_to_cpu(pp[i]))) scan_sbtree(be32_to_cpu(pp[i]), level, agno, - suspect, scanfunc_ino, 0, priv); + suspect, scan_inobt, 0, magic, priv, + &xfs_inobt_buf_ops); } } @@ -1109,11 +1114,15 @@ validate_agf( struct aghdr_cnts *agcnts) { xfs_agblock_t bno; + __uint32_t magic; bno = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]); if (bno != 0 && verify_agbno(mp, agno, bno)) { + magic = xfs_sb_version_hascrc(&mp->m_sb) ? XFS_ABTB_CRC_MAGIC + : XFS_ABTB_MAGIC; scan_sbtree(bno, be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), - agno, 0, scanfunc_bno, 1, agcnts); + agno, 0, scan_allocbt, 1, magic, agcnts, + &xfs_allocbt_buf_ops); } else { do_warn(_("bad agbno %u for btbno root, agno %d\n"), bno, agno); @@ -1121,8 +1130,11 @@ validate_agf( bno = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]); if (bno != 0 && verify_agbno(mp, agno, bno)) { + magic = xfs_sb_version_hascrc(&mp->m_sb) ? XFS_ABTC_CRC_MAGIC + : XFS_ABTC_MAGIC; scan_sbtree(bno, be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), - agno, 0, scanfunc_cnt, 1, agcnts); + agno, 0, scan_allocbt, 1, magic, agcnts, + &xfs_allocbt_buf_ops); } else { do_warn(_("bad agbno %u for btbcnt root, agno %d\n"), bno, agno); @@ -1153,11 +1165,15 @@ validate_agi( { xfs_agblock_t bno; int i; + __uint32_t magic; bno = be32_to_cpu(agi->agi_root); if (bno != 0 && verify_agbno(mp, agno, bno)) { + magic = xfs_sb_version_hascrc(&mp->m_sb) ? XFS_IBT_CRC_MAGIC + : XFS_IBT_MAGIC; scan_sbtree(bno, be32_to_cpu(agi->agi_level), - agno, 0, scanfunc_ino, 1, agcnts); + agno, 0, scan_inobt, 1, magic, agcnts, + &xfs_inobt_buf_ops); } else { do_warn(_("bad agbno %u for inobt root, agno %d\n"), be32_to_cpu(agi->agi_root), agno); diff --git a/repair/scan.h b/repair/scan.h index 9f945cf..92593e9 100644 --- a/repair/scan.h +++ b/repair/scan.h @@ -35,7 +35,8 @@ int scan_lbtree( bmap_cursor_t *bm_cursor, int isroot, int check_dups, - int *dirty), + int *dirty, + __uint64_t magic), int type, int whichfork, xfs_ino_t ino, @@ -44,9 +45,11 @@ int scan_lbtree( struct blkmap **blkmapp, bmap_cursor_t *bm_cursor, int isroot, - int check_dups); + int check_dups, + __uint64_t magic, + const struct xfs_buf_ops *ops); -int scanfunc_bmap( +int scan_bmapbt( struct xfs_btree_block *block, int level, int type, @@ -59,7 +62,8 @@ int scanfunc_bmap( bmap_cursor_t *bm_cursor, int isroot, int check_dups, - int *dirty); + int *dirty, + __uint64_t magic); void scan_ags( diff --git a/repair/versions.c b/repair/versions.c index 957766a..c11a728 100644 --- a/repair/versions.c +++ b/repair/versions.c @@ -165,7 +165,7 @@ _("This filesystem contains features not understood by this program.\n")); return(1); } - if (XFS_SB_VERSION_NUM(sb) == XFS_SB_VERSION_4) { + if (XFS_SB_VERSION_NUM(sb) >= XFS_SB_VERSION_4) { if (!fs_sb_feature_bits_allowed) { if (!no_modify) { do_warn( diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index 7623560..4708c5c 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -611,7 +611,7 @@ main(int argc, char **argv) glob_agcount = mp->m_sb.sb_agcount; chunks_pblock = mp->m_sb.sb_inopblock / XFS_INODES_PER_CHUNK; - max_symlink_blocks = howmany(MAXPATHLEN - 1, mp->m_sb.sb_blocksize); + max_symlink_blocks = libxfs_symlink_blocks(mp, MAXPATHLEN); inodes_per_cluster = MAX(mp->m_sb.sb_inopblock, XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog); -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 929527F37 for ; Fri, 17 May 2013 06:14:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6134E304059 for ; Fri, 17 May 2013 04:14:13 -0700 (PDT) X-ASG-Debug-ID: 1368789250-04bdf04224359fb0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id B90cjrN0K9pHMsvd for ; Fri, 17 May 2013 04:14:11 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhEMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBVYzCBgxOQMbGYgLvQCOAoE6gz8DnVaDfYclgyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:10 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbw-0008Sy-Sj for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:08 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbm-0005Ft-PP for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 27/30] xfs_db: disable modification for CRC enabled filessytems. Date: Fri, 17 May 2013 21:13:22 +1000 X-ASG-Orig-Subj: [PATCH 27/30] xfs_db: disable modification for CRC enabled filessytems. Message-Id: <1368789205-19969-28-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789250 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_db does not have the IO infrastructure to calculate metadata CRCs after modifying metadata. Hence xfs_db can only run in read-only mode on filesystems with version 5 superblocks. To fix this, xfs_db needs to have it's IO engine converted to use the buffer based IO provided by libxfs rather than rolling it's own IO routines. That is future work, so until this conversion is done, only allow xfs_db to run in read-only mode on v5 filesystems. Signed-off-by: Dave Chinner --- db/init.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/db/init.c b/db/init.c index 0e9e1a2..1033f3a 100644 --- a/db/init.c +++ b/db/init.c @@ -132,6 +132,21 @@ init( exit(EXIT_FAILURE); } + /* + * Don't allow modifications to CRC enabled filesystems until we support + * CRC recalculation in the IO path. Unless, of course, the user is in + * the process of hitting us with a big hammer. + */ + if (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_5 && + !(x.isreadonly & LIBXFS_ISREADONLY)) { + fprintf(stderr, + _("%s: modifications to %s are not supported in thi version.\n" + "Use \"-r\" to run %s in read-only mode on this filesystem .\n"), + progname, fsdevice, progname); + if (!force) + exit(EXIT_FAILURE); + } + mp = libxfs_mount(&xmount, sbp, x.ddev, x.logdev, x.rtdev, LIBXFS_MOUNT_ROOTINOS | LIBXFS_MOUNT_DEBUGGER); if (!mp) { -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E06247F3F for ; Fri, 17 May 2013 06:14:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A2427304059 for ; Fri, 17 May 2013 04:14:13 -0700 (PDT) X-ASG-Debug-ID: 1368789251-04bdf04226359fd0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 1UCCpUDRAcn703pO for ; Fri, 17 May 2013 04:14:12 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOoeIMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:10 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbx-0008T0-9L for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:09 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbm-0005G2-Ss for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 29/30] xfsdb: support version 5 superblock in versionnum command Date: Fri, 17 May 2013 21:13:24 +1000 X-ASG-Orig-Subj: [PATCH 29/30] xfsdb: support version 5 superblock in versionnum command Message-Id: <1368789205-19969-30-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789251 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner While there, add visibility of the new superblock fields in the "sb" command. Signed-off-by: Dave Chinner --- db/sb.c | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/db/sb.c b/db/sb.c index 54ca7dd..d178f58 100644 --- a/db/sb.c +++ b/db/sb.c @@ -108,7 +108,19 @@ const field_t sb_flds[] = { { "logsectsize", FLDT_UINT16D, OI(OFF(logsectsize)), C1, 0, TYP_NONE }, { "logsunit", FLDT_UINT32D, OI(OFF(logsunit)), C1, 0, TYP_NONE }, { "features2", FLDT_UINT32X, OI(OFF(features2)), C1, 0, TYP_NONE }, - { "bad_features2", FLDT_UINT32X, OI(OFF(bad_features2)), C1, 0, TYP_NONE }, + { "bad_features2", FLDT_UINT32X, OI(OFF(bad_features2)), + C1, 0, TYP_NONE }, + { "features_compat", FLDT_UINT32X, OI(OFF(features_compat)), + C1, 0, TYP_NONE }, + { "features_ro_compat", FLDT_UINT32X, OI(OFF(features_ro_compat)), + C1, 0, TYP_NONE }, + { "features_incompat", FLDT_UINT32X, OI(OFF(features_incompat)), + C1, 0, TYP_NONE }, + { "features_log_incompat", FLDT_UINT32X, OI(OFF(features_log_incompat)), + C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(crc)), C1, 0, TYP_NONE }, + { "pquotino", FLDT_INO, OI(OFF(pquotino)), C1, 0, TYP_INODE }, + { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, { NULL } }; @@ -597,6 +609,8 @@ version_string( strcpy(s, "V3"); else if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) strcpy(s, "V4"); + else if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) + strcpy(s, "V5"); if (xfs_sb_version_hasattr(sbp)) strcat(s, ",ATTR"); @@ -628,9 +642,17 @@ version_string( strcat(s, ",LAZYSBCOUNT"); if (xfs_sb_version_hasprojid32bit(sbp)) strcat(s, ",PROJID32BIT"); + if (xfs_sb_version_hascrc(sbp)) + strcat(s, ",CRC"); return s; } +/* + * XXX: this only supports reading and writing to version 4 superblock fields. + * V5 superblocks always define certain V4 feature bits - they are blocked from + * being changed if a V5 sb is detected, but otherwise v5 superblock features + * are not handled here. + */ static int version_f( int argc, @@ -662,12 +684,16 @@ version_f( break; case XFS_SB_VERSION_4: if (xfs_sb_version_hasextflgbit(&mp->m_sb)) - dbprintf(_("unwritten extents flag" - " is already enabled\n")); + dbprintf( + _("unwritten extents flag is already enabled\n")); else version = mp->m_sb.sb_versionnum | XFS_SB_VERSION_EXTFLGBIT; break; + case XFS_SB_VERSION_5: + dbprintf( + _("unwritten extents always enabled for v5 superblocks.\n")); + break; } } else if (!strcasecmp(argv[1], "log2")) { switch (XFS_SB_VERSION_NUM(&mp->m_sb)) { @@ -682,14 +708,24 @@ version_f( break; case XFS_SB_VERSION_4: if (xfs_sb_version_haslogv2(&mp->m_sb)) - dbprintf(_("version 2 log format" - " is already in use\n")); + dbprintf( + _("version 2 log format is already in use\n")); else version = mp->m_sb.sb_versionnum | XFS_SB_VERSION_LOGV2BIT; break; + case XFS_SB_VERSION_5: + dbprintf( + _("Version 2 logs always enabled for v5 superblocks.\n")); + break; } + } else if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5) { + dbprintf( + _("%s: Cannot change %s on v5 superblocks.\n"), + progname, argv[1]); + return 0; } else if (!strcasecmp(argv[1], "attr1")) { + if (xfs_sb_version_hasattr2(&mp->m_sb)) { if (!(mp->m_sb.sb_features2 &= ~XFS_SB_VERSION2_ATTR2BIT)) -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DF10129E20 for ; Fri, 17 May 2013 06:14:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 923D68F8035 for ; Fri, 17 May 2013 04:14:12 -0700 (PDT) X-ASG-Debug-ID: 1368789242-04bdf04224359fa0004-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id A8Q0qBS7yj7AjrNp for ; Fri, 17 May 2013 04:14:09 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOoeIMiKg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:09 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbh-0008SK-Bz for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbX-0005Er-4s for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 16/30] xfs: split remote attribute code out Date: Fri, 17 May 2013 21:13:11 +1000 X-ASG-Orig-Subj: [PATCH 16/30] xfs: split remote attribute code out Message-Id: <1368789205-19969-17-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789249 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Adding CRC support to remote attributes adds a significant amount of remote attribute specific code. Split the existing remote attribute code out into it's own file so that all the relevant remote attribute code is in a single, easy to find place. Signed-off-by: Dave Chinner --- include/libxfs.h | 1 + include/xfs_attr_remote.h | 31 +++++ libxfs/Makefile | 2 +- libxfs/xfs.h | 9 +- libxfs/xfs_attr.c | 296 ------------------------------------------- libxfs/xfs_attr_remote.c | 306 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 346 insertions(+), 299 deletions(-) create mode 100644 include/xfs_attr_remote.h create mode 100644 libxfs/xfs_attr_remote.c diff --git a/include/libxfs.h b/include/libxfs.h index 41cb585..972d850 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -589,6 +589,7 @@ extern unsigned long libxfs_physmem(void); /* in kilobytes */ #include #include +#include #include #include #include diff --git a/include/xfs_attr_remote.h b/include/xfs_attr_remote.h new file mode 100644 index 0000000..b4be90e --- /dev/null +++ b/include/xfs_attr_remote.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2013 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2.1 of the GNU Lesser General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, + * USA. + */ +#ifndef __XFS_ATTR_REMOTE_H__ +#define __XFS_ATTR_REMOTE_H__ + +int xfs_attr_rmtval_get(struct xfs_da_args *args); +int xfs_attr_rmtval_set(struct xfs_da_args *args); +int xfs_attr_rmtval_remove(struct xfs_da_args *args); + +#endif /* __XFS_ATTR_REMOTE_H__ */ diff --git a/libxfs/Makefile b/libxfs/Makefile index 75f365c..d0b483d 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -16,7 +16,7 @@ CFILES = cache.c init.c kmem.c logitem.c radix-tree.c rdwr.c trans.c util.c \ xfs_ialloc_btree.c xfs_bmap_btree.c xfs_da_btree.c \ xfs_dir2.c xfs_dir2_leaf.c xfs_attr_leaf.c xfs_dir2_block.c \ xfs_dir2_node.c xfs_dir2_data.c xfs_dir2_sf.c xfs_bmap.c \ - xfs_mount.c xfs_rtalloc.c xfs_trans.c xfs_attr.c \ + xfs_mount.c xfs_rtalloc.c xfs_trans.c xfs_attr.c xfs_attr_remote.c \ crc32.c xfs_symlink.c CFILES += $(PKG_PLATFORM).c diff --git a/libxfs/xfs.h b/libxfs/xfs.h index b3b45bb..c69dc4a 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -180,14 +180,19 @@ roundup_pow_of_two(uint v) #define XFS_BUF_SET_VTYPE_REF(a,b,c) ((void) 0) #define XFS_BUF_SET_BDSTRAT_FUNC(a,b) ((void) 0) -#define xfs_incore(bt,blkno,len,lockit) 0 +/* avoid gcc warning */ +#define xfs_incore(bt,blkno,len,lockit) ({ \ + typeof(blkno) __foo = (blkno); \ + (blkno) = __foo; \ + NULL; \ +}) #define xfs_buf_relse(bp) libxfs_putbuf(bp) #define xfs_read_buf(mp,devp,blkno,len,f,bpp) \ (*(bpp) = libxfs_readbuf((devp), \ (blkno), (len), 1), 0) #define xfs_buf_get(devp,blkno,len,f) \ (libxfs_getbuf((devp), (blkno), (len))) -#define xfs_bwrite(mp,bp) libxfs_writebuf((bp), 0) +#define xfs_bwrite(bp) libxfs_writebuf((bp), 0) #define XBRW_READ LIBXFS_BREAD #define XBRW_WRITE LIBXFS_BWRITE diff --git a/libxfs/xfs_attr.c b/libxfs/xfs_attr.c index 4429cb7..cfc2f4b 100644 --- a/libxfs/xfs_attr.c +++ b/libxfs/xfs_attr.c @@ -49,13 +49,6 @@ STATIC int xfs_attr_node_removename(xfs_da_args_t *args); STATIC int xfs_attr_fillstate(xfs_da_state_t *state); STATIC int xfs_attr_refillstate(xfs_da_state_t *state); -/* - * Routines to manipulate out-of-line attribute values. - */ -STATIC int xfs_attr_rmtval_set(xfs_da_args_t *args); -STATIC int xfs_attr_rmtval_remove(xfs_da_args_t *args); - -#define ATTR_RMTVALUE_MAPSIZE 1 /* # of map entries at once */ STATIC int xfs_attr_name_to_xname( @@ -1518,292 +1511,3 @@ xfs_attr_node_get(xfs_da_args_t *args) xfs_da_state_free(state); return(retval); } - -/*======================================================================== - * External routines for manipulating out-of-line attribute values. - *========================================================================*/ - -/* - * Read the value associated with an attribute from the out-of-line buffer - * that we stored it in. - */ -int -xfs_attr_rmtval_get(xfs_da_args_t *args) -{ - xfs_bmbt_irec_t map[ATTR_RMTVALUE_MAPSIZE]; - xfs_mount_t *mp; - xfs_daddr_t dblkno; - void *dst; - xfs_buf_t *bp; - int nmap, error, tmp, valuelen, blkcnt, i; - xfs_dablk_t lblkno; - - trace_xfs_attr_rmtval_get(args); - - ASSERT(!(args->flags & ATTR_KERNOVAL)); - - mp = args->dp->i_mount; - dst = args->value; - valuelen = args->valuelen; - lblkno = args->rmtblkno; - while (valuelen > 0) { - nmap = ATTR_RMTVALUE_MAPSIZE; - error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, map, &nmap, - XFS_BMAPI_ATTRFORK); - if (error) - return(error); - ASSERT(nmap >= 1); - - for (i = 0; (i < nmap) && (valuelen > 0); i++) { - ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && - (map[i].br_startblock != HOLESTARTBLOCK)); - dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); - blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); - error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, - dblkno, blkcnt, 0, &bp, NULL); - if (error) - return(error); - - tmp = min_t(int, valuelen, BBTOB(bp->b_length)); - xfs_buf_iomove(bp, 0, tmp, dst, XBRW_READ); - xfs_buf_relse(bp); - dst += tmp; - valuelen -= tmp; - - lblkno += map[i].br_blockcount; - } - } - ASSERT(valuelen == 0); - return(0); -} - -/* - * Write the value associated with an attribute into the out-of-line buffer - * that we have defined for it. - */ -STATIC int -xfs_attr_rmtval_set(xfs_da_args_t *args) -{ - xfs_mount_t *mp; - xfs_fileoff_t lfileoff; - xfs_inode_t *dp; - xfs_bmbt_irec_t map; - xfs_daddr_t dblkno; - void *src; - xfs_buf_t *bp; - xfs_dablk_t lblkno; - int blkcnt, valuelen, nmap, error, tmp, committed; - - trace_xfs_attr_rmtval_set(args); - - dp = args->dp; - mp = dp->i_mount; - src = args->value; - - /* - * Find a "hole" in the attribute address space large enough for - * us to drop the new attribute's value into. - */ - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); - lfileoff = 0; - error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, - XFS_ATTR_FORK); - if (error) { - return(error); - } - args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; - args->rmtblkcnt = blkcnt; - - /* - * Roll through the "value", allocating blocks on disk as required. - */ - while (blkcnt > 0) { - /* - * Allocate a single extent, up to the size of the value. - */ - xfs_bmap_init(args->flist, args->firstblock); - nmap = 1; - error = xfs_bmapi_write(args->trans, dp, (xfs_fileoff_t)lblkno, - blkcnt, - XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, - args->firstblock, args->total, &map, &nmap, - args->flist); - if (!error) { - error = xfs_bmap_finish(&args->trans, args->flist, - &committed); - } - if (error) { - ASSERT(committed); - args->trans = NULL; - xfs_bmap_cancel(args->flist); - return(error); - } - - /* - * bmap_finish() may have committed the last trans and started - * a new one. We need the inode to be in all transactions. - */ - if (committed) - xfs_trans_ijoin(args->trans, dp, 0); - - ASSERT(nmap == 1); - ASSERT((map.br_startblock != DELAYSTARTBLOCK) && - (map.br_startblock != HOLESTARTBLOCK)); - lblkno += map.br_blockcount; - blkcnt -= map.br_blockcount; - - /* - * Start the next trans in the chain. - */ - error = xfs_trans_roll(&args->trans, dp); - if (error) - return (error); - } - - /* - * Roll through the "value", copying the attribute value to the - * already-allocated blocks. Blocks are written synchronously - * so that we can know they are all on disk before we turn off - * the INCOMPLETE flag. - */ - lblkno = args->rmtblkno; - valuelen = args->valuelen; - while (valuelen > 0) { - int buflen; - - /* - * Try to remember where we decided to put the value. - */ - xfs_bmap_init(args->flist, args->firstblock); - nmap = 1; - error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, &map, &nmap, - XFS_BMAPI_ATTRFORK); - if (error) - return(error); - ASSERT(nmap == 1); - ASSERT((map.br_startblock != DELAYSTARTBLOCK) && - (map.br_startblock != HOLESTARTBLOCK)); - - dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); - - bp = xfs_buf_get(mp->m_ddev_targp, dblkno, blkcnt, 0); - if (!bp) - return ENOMEM; - - buflen = BBTOB(bp->b_length); - tmp = min_t(int, valuelen, buflen); - xfs_buf_iomove(bp, 0, tmp, src, XBRW_WRITE); - if (tmp < buflen) - xfs_buf_zero(bp, tmp, buflen - tmp); - - error = xfs_bwrite(mp, bp); /* GROT: NOTE: synchronous write */ - xfs_buf_relse(bp); - if (error) - return error; - src += tmp; - valuelen -= tmp; - - lblkno += map.br_blockcount; - } - ASSERT(valuelen == 0); - return(0); -} - -/* - * Remove the value associated with an attribute by deleting the - * out-of-line buffer that it is stored on. - */ -STATIC int -xfs_attr_rmtval_remove(xfs_da_args_t *args) -{ - xfs_mount_t *mp; - xfs_bmbt_irec_t map; - xfs_buf_t *bp; - xfs_daddr_t dblkno; - xfs_dablk_t lblkno; - int valuelen, blkcnt, nmap, error, done, committed; - - trace_xfs_attr_rmtval_remove(args); - - mp = args->dp->i_mount; - - /* - * Roll through the "value", invalidating the attribute value's - * blocks. - */ - lblkno = args->rmtblkno; - valuelen = args->rmtblkcnt; - while (valuelen > 0) { - /* - * Try to remember where we decided to put the value. - */ - nmap = 1; - error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, &map, &nmap, - XFS_BMAPI_ATTRFORK); - if (error) - return(error); - ASSERT(nmap == 1); - ASSERT((map.br_startblock != DELAYSTARTBLOCK) && - (map.br_startblock != HOLESTARTBLOCK)); - - dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); - - /* - * If the "remote" value is in the cache, remove it. - */ - bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK); - if (bp) { - xfs_buf_stale(bp); - xfs_buf_relse(bp); - bp = NULL; - } - - valuelen -= map.br_blockcount; - - lblkno += map.br_blockcount; - } - - /* - * Keep de-allocating extents until the remote-value region is gone. - */ - lblkno = args->rmtblkno; - blkcnt = args->rmtblkcnt; - done = 0; - while (!done) { - xfs_bmap_init(args->flist, args->firstblock); - error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, - XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, - 1, args->firstblock, args->flist, - &done); - if (!error) { - error = xfs_bmap_finish(&args->trans, args->flist, - &committed); - } - if (error) { - ASSERT(committed); - args->trans = NULL; - xfs_bmap_cancel(args->flist); - return(error); - } - - /* - * bmap_finish() may have committed the last trans and started - * a new one. We need the inode to be in all transactions. - */ - if (committed) - xfs_trans_ijoin(args->trans, args->dp, 0); - - /* - * Close out trans and start the next one in the chain. - */ - error = xfs_trans_roll(&args->trans, args->dp); - if (error) - return (error); - } - return(0); -} diff --git a/libxfs/xfs_attr_remote.c b/libxfs/xfs_attr_remote.c new file mode 100644 index 0000000..36f8b5d --- /dev/null +++ b/libxfs/xfs_attr_remote.c @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2000-2005 Silicon Graphics, Inc. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include + +#define ATTR_RMTVALUE_MAPSIZE 1 /* # of map entries at once */ + +/* + * Read the value associated with an attribute from the out-of-line buffer + * that we stored it in. + */ +int +xfs_attr_rmtval_get(xfs_da_args_t *args) +{ + xfs_bmbt_irec_t map[ATTR_RMTVALUE_MAPSIZE]; + xfs_mount_t *mp; + xfs_daddr_t dblkno; + void *dst; + xfs_buf_t *bp; + int nmap, error, tmp, valuelen, blkcnt, i; + xfs_dablk_t lblkno; + + trace_xfs_attr_rmtval_get(args); + + ASSERT(!(args->flags & ATTR_KERNOVAL)); + + mp = args->dp->i_mount; + dst = args->value; + valuelen = args->valuelen; + lblkno = args->rmtblkno; + while (valuelen > 0) { + nmap = ATTR_RMTVALUE_MAPSIZE; + error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, + args->rmtblkcnt, map, &nmap, + XFS_BMAPI_ATTRFORK); + if (error) + return(error); + ASSERT(nmap >= 1); + + for (i = 0; (i < nmap) && (valuelen > 0); i++) { + ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && + (map[i].br_startblock != HOLESTARTBLOCK)); + dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); + blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); + error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, + dblkno, blkcnt, 0, &bp, NULL); + if (error) + return(error); + + tmp = min_t(int, valuelen, BBTOB(bp->b_length)); + xfs_buf_iomove(bp, 0, tmp, dst, XBRW_READ); + xfs_buf_relse(bp); + dst += tmp; + valuelen -= tmp; + + lblkno += map[i].br_blockcount; + } + } + ASSERT(valuelen == 0); + return(0); +} + +/* + * Write the value associated with an attribute into the out-of-line buffer + * that we have defined for it. + */ +int +xfs_attr_rmtval_set(xfs_da_args_t *args) +{ + xfs_mount_t *mp; + xfs_fileoff_t lfileoff; + xfs_inode_t *dp; + xfs_bmbt_irec_t map; + xfs_daddr_t dblkno; + void *src; + xfs_buf_t *bp; + xfs_dablk_t lblkno; + int blkcnt, valuelen, nmap, error, tmp, committed; + + trace_xfs_attr_rmtval_set(args); + + dp = args->dp; + mp = dp->i_mount; + src = args->value; + + /* + * Find a "hole" in the attribute address space large enough for + * us to drop the new attribute's value into. + */ + blkcnt = XFS_B_TO_FSB(mp, args->valuelen); + lfileoff = 0; + error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, + XFS_ATTR_FORK); + if (error) { + return(error); + } + args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; + args->rmtblkcnt = blkcnt; + + /* + * Roll through the "value", allocating blocks on disk as required. + */ + while (blkcnt > 0) { + /* + * Allocate a single extent, up to the size of the value. + */ + xfs_bmap_init(args->flist, args->firstblock); + nmap = 1; + error = xfs_bmapi_write(args->trans, dp, (xfs_fileoff_t)lblkno, + blkcnt, + XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, + args->firstblock, args->total, &map, &nmap, + args->flist); + if (!error) { + error = xfs_bmap_finish(&args->trans, args->flist, + &committed); + } + if (error) { + ASSERT(committed); + args->trans = NULL; + xfs_bmap_cancel(args->flist); + return(error); + } + + /* + * bmap_finish() may have committed the last trans and started + * a new one. We need the inode to be in all transactions. + */ + if (committed) + xfs_trans_ijoin(args->trans, dp, 0); + + ASSERT(nmap == 1); + ASSERT((map.br_startblock != DELAYSTARTBLOCK) && + (map.br_startblock != HOLESTARTBLOCK)); + lblkno += map.br_blockcount; + blkcnt -= map.br_blockcount; + + /* + * Start the next trans in the chain. + */ + error = xfs_trans_roll(&args->trans, dp); + if (error) + return (error); + } + + /* + * Roll through the "value", copying the attribute value to the + * already-allocated blocks. Blocks are written synchronously + * so that we can know they are all on disk before we turn off + * the INCOMPLETE flag. + */ + lblkno = args->rmtblkno; + valuelen = args->valuelen; + while (valuelen > 0) { + int buflen; + + /* + * Try to remember where we decided to put the value. + */ + xfs_bmap_init(args->flist, args->firstblock); + nmap = 1; + error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, + args->rmtblkcnt, &map, &nmap, + XFS_BMAPI_ATTRFORK); + if (error) + return(error); + ASSERT(nmap == 1); + ASSERT((map.br_startblock != DELAYSTARTBLOCK) && + (map.br_startblock != HOLESTARTBLOCK)); + + dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), + blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); + + bp = xfs_buf_get(mp->m_ddev_targp, dblkno, blkcnt, 0); + if (!bp) + return ENOMEM; + + buflen = BBTOB(bp->b_length); + tmp = min_t(int, valuelen, buflen); + xfs_buf_iomove(bp, 0, tmp, src, XBRW_WRITE); + if (tmp < buflen) + xfs_buf_zero(bp, tmp, buflen - tmp); + + error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ + xfs_buf_relse(bp); + if (error) + return error; + src += tmp; + valuelen -= tmp; + + lblkno += map.br_blockcount; + } + ASSERT(valuelen == 0); + return(0); +} + +/* + * Remove the value associated with an attribute by deleting the + * out-of-line buffer that it is stored on. + */ +int +xfs_attr_rmtval_remove(xfs_da_args_t *args) +{ + xfs_mount_t *mp; + xfs_bmbt_irec_t map; + xfs_buf_t *bp; + xfs_daddr_t dblkno; + xfs_dablk_t lblkno; + int valuelen, blkcnt, nmap, error, done, committed; + + trace_xfs_attr_rmtval_remove(args); + + mp = args->dp->i_mount; + + /* + * Roll through the "value", invalidating the attribute value's + * blocks. + */ + lblkno = args->rmtblkno; + valuelen = args->rmtblkcnt; + while (valuelen > 0) { + /* + * Try to remember where we decided to put the value. + */ + nmap = 1; + error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, + args->rmtblkcnt, &map, &nmap, + XFS_BMAPI_ATTRFORK); + if (error) + return(error); + ASSERT(nmap == 1); + ASSERT((map.br_startblock != DELAYSTARTBLOCK) && + (map.br_startblock != HOLESTARTBLOCK)); + + dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), + blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); + + /* + * If the "remote" value is in the cache, remove it. + */ + bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK); + if (bp) { + xfs_buf_stale(bp); + xfs_buf_relse(bp); + bp = NULL; + } + + valuelen -= map.br_blockcount; + + lblkno += map.br_blockcount; + } + + /* + * Keep de-allocating extents until the remote-value region is gone. + */ + lblkno = args->rmtblkno; + blkcnt = args->rmtblkcnt; + done = 0; + while (!done) { + xfs_bmap_init(args->flist, args->firstblock); + error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, + XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, + 1, args->firstblock, args->flist, + &done); + if (!error) { + error = xfs_bmap_finish(&args->trans, args->flist, + &committed); + } + if (error) { + ASSERT(committed); + args->trans = NULL; + xfs_bmap_cancel(args->flist); + return(error); + } + + /* + * bmap_finish() may have committed the last trans and started + * a new one. We need the inode to be in all transactions. + */ + if (committed) + xfs_trans_ijoin(args->trans, args->dp, 0); + + /* + * Close out trans and start the next one in the chain. + */ + error = xfs_trans_roll(&args->trans, args->dp); + if (error) + return (error); + } + return(0); +} + -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 359FF7F4C for ; Fri, 17 May 2013 06:14:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C5EC0AC001 for ; Fri, 17 May 2013 04:14:13 -0700 (PDT) X-ASG-Debug-ID: 1368789242-04bdf04224359fa0005-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 4zADMdYsXraVypfx for ; Fri, 17 May 2013 04:14:11 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjW8ThHkDqHiDIiqBLQEeBg Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:09 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbr-0008Sf-LY for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:03 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbh-0005FJ-CY for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 21/30] xfs: implement extended feature masks Date: Fri, 17 May 2013 21:13:16 +1000 X-ASG-Orig-Subj: [PATCH 21/30] xfs: implement extended feature masks Message-Id: <1368789205-19969-22-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789251 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The version 5 superblock has extended feature masks for compatible, incompatible and read-only compatible feature sets. Implement the masking and mount-time checking for these feature masks. Signed-off-by: Dave Chinner --- include/xfs_sb.h | 70 ++++++++++++++++++++++++++++++++++++++++++-- libxfs/xfs_mount.c | 53 ++++++++++++++++++++++++--------- logprint/log_print_trans.c | 18 ++++++++++++ 3 files changed, 125 insertions(+), 16 deletions(-) diff --git a/include/xfs_sb.h b/include/xfs_sb.h index d6709db..51db6f2 100644 --- a/include/xfs_sb.h +++ b/include/xfs_sb.h @@ -168,8 +168,10 @@ typedef struct xfs_sb { __uint32_t sb_features_compat; __uint32_t sb_features_ro_compat; __uint32_t sb_features_incompat; + __uint32_t sb_features_log_incompat; __uint32_t sb_crc; /* superblock crc */ + __uint32_t sb_pad; xfs_ino_t sb_pquotino; /* project quota inode */ xfs_lsn_t sb_lsn; /* last write sequence */ @@ -250,8 +252,10 @@ typedef struct xfs_dsb { __be32 sb_features_compat; __be32 sb_features_ro_compat; __be32 sb_features_incompat; + __be32 sb_features_log_incompat; __le32 sb_crc; /* superblock crc */ + __be32 sb_pad; __be64 sb_pquotino; /* project quota inode */ __be64 sb_lsn; /* last write sequence */ @@ -276,7 +280,8 @@ typedef enum { XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_FEATURES_COMPAT, - XFS_SBS_FEATURES_RO_COMPAT, XFS_SBS_FEATURES_INCOMPAT, XFS_SBS_CRC, + XFS_SBS_FEATURES_RO_COMPAT, XFS_SBS_FEATURES_INCOMPAT, + XFS_SBS_FEATURES_LOG_INCOMPAT, XFS_SBS_CRC, XFS_SBS_PAD, XFS_SBS_PQUOTINO, XFS_SBS_LSN, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -306,6 +311,7 @@ typedef enum { #define XFS_SB_FEATURES_COMPAT XFS_SB_MVAL(FEATURES_COMPAT) #define XFS_SB_FEATURES_RO_COMPAT XFS_SB_MVAL(FEATURES_RO_COMPAT) #define XFS_SB_FEATURES_INCOMPAT XFS_SB_MVAL(FEATURES_INCOMPAT) +#define XFS_SB_FEATURES_LOG_INCOMPAT XFS_SB_MVAL(FEATURES_LOG_INCOMPAT) #define XFS_SB_CRC XFS_SB_MVAL(CRC) #define XFS_SB_PQUOTINO XFS_SB_MVAL(PQUOTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) @@ -316,7 +322,8 @@ typedef enum { XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ XFS_SB_BAD_FEATURES2 | XFS_SB_FEATURES_COMPAT | \ - XFS_SB_FEATURES_RO_COMPAT | XFS_SB_FEATURES_INCOMPAT | XFS_SB_PQUOTINO) + XFS_SB_FEATURES_RO_COMPAT | XFS_SB_FEATURES_INCOMPAT | \ + XFS_SB_FEATURES_LOG_INCOMPAT | XFS_SB_PQUOTINO) /* @@ -559,6 +566,65 @@ static inline int xfs_sb_version_hascrc(xfs_sb_t *sbp) return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5; } + +/* + * Extended v5 superblock feature masks. These are to be used for new v5 + * superblock features only. + * + * Compat features are new features that old kernels will not notice or affect + * and so can mount read-write without issues. + * + * RO-Compat (read only) are features that old kernels can read but will break + * if they write. Hence only read-only mounts of such filesystems are allowed on + * kernels that don't support the feature bit. + * + * InCompat features are features which old kernels will not understand and so + * must not mount. + * + * Log-InCompat features are for changes to log formats or new transactions that + * can't be replayed on older kernels. The fields are set when the filesystem is + * mounted, and a clean unmount clears the fields. + */ +#define XFS_SB_FEAT_COMPAT_ALL 0 +#define XFS_SB_FEAT_COMPAT_UNKNOWN ~XFS_SB_FEAT_COMPAT_ALL +static inline bool +xfs_sb_has_compat_feature( + struct xfs_sb *sbp, + __uint32_t feature) +{ + return (sbp->sb_features_compat & feature) != 0; +} + +#define XFS_SB_FEAT_RO_COMPAT_ALL 0 +#define XFS_SB_FEAT_RO_COMPAT_UNKNOWN ~XFS_SB_FEAT_RO_COMPAT_ALL +static inline bool +xfs_sb_has_ro_compat_feature( + struct xfs_sb *sbp, + __uint32_t feature) +{ + return (sbp->sb_features_ro_compat & feature) != 0; +} + +#define XFS_SB_FEAT_INCOMPAT_ALL 0 +#define XFS_SB_FEAT_INCOMPAT_UNKNOWN ~XFS_SB_FEAT_INCOMPAT_ALL +static inline bool +xfs_sb_has_incompat_feature( + struct xfs_sb *sbp, + __uint32_t feature) +{ + return (sbp->sb_features_incompat & feature) != 0; +} + +#define XFS_SB_FEAT_INCOMPAT_LOG_ALL 0 +#define XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN ~XFS_SB_FEAT_INCOMPAT_LOG_ALL +static inline bool +xfs_sb_has_incompat_log_feature( + struct xfs_sb *sbp, + __uint32_t feature) +{ + return (sbp->sb_features_log_incompat & feature) != 0; +} + /* * end of superblock version macros */ diff --git a/libxfs/xfs_mount.c b/libxfs/xfs_mount.c index 07b892b..f66f63d 100644 --- a/libxfs/xfs_mount.c +++ b/libxfs/xfs_mount.c @@ -73,7 +73,9 @@ static const struct { { offsetof(xfs_sb_t, sb_features_compat), 0 }, { offsetof(xfs_sb_t, sb_features_ro_compat), 0 }, { offsetof(xfs_sb_t, sb_features_incompat), 0 }, + { offsetof(xfs_sb_t, sb_features_log_incompat), 0 }, { offsetof(xfs_sb_t, sb_crc), 0 }, + { offsetof(xfs_sb_t, sb_pad), 0 }, { offsetof(xfs_sb_t, sb_pquotino), 0 }, { offsetof(xfs_sb_t, sb_lsn), 0 }, { sizeof(xfs_sb_t), 0 } @@ -140,18 +142,44 @@ xfs_mount_validate_sb( } /* - * Do not allow Version 5 superblocks to mount right now, even though - * support is in place. We need to implement the proper feature masks - * first. + * Version 5 superblock feature mask validation. Reject combinations the + * kernel cannot support up front before checking anything else. */ - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { + if (check_inprogress && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { xfs_alert(mp, - "Version 5 superblock detected. Experimental support not yet enabled!"); - return XFS_ERROR(EINVAL); +"Version 5 superblock detected. xfsprogs has EXPERIMENTAL support enabled!\n" +"Use of these features is at your own risk!"); + + if (xfs_sb_has_compat_feature(sbp, + XFS_SB_FEAT_COMPAT_UNKNOWN)) { + xfs_warn(mp, +"Superblock has unknown compatible features (0x%x) enabled.\n" +"Using a more recent xfsprogs is recommended.", + (sbp->sb_features_compat & + XFS_SB_FEAT_COMPAT_UNKNOWN)); + } + + if (xfs_sb_has_ro_compat_feature(sbp, + XFS_SB_FEAT_RO_COMPAT_UNKNOWN)) { + xfs_warn(mp, +"Superblock has unknown read-only compatible features (0x%x) enabled.\n" +"Using a more recent xfsprogs is recommended.", + (sbp->sb_features_ro_compat & + XFS_SB_FEAT_RO_COMPAT_UNKNOWN)); + } + if (xfs_sb_has_incompat_feature(sbp, + XFS_SB_FEAT_INCOMPAT_UNKNOWN)) { + xfs_warn(mp, +"Superblock has unknown incompatible features (0x%x) enabled.\n" +"Filesystem can not be safely operated on by this xfsprogs installation", + (sbp->sb_features_incompat & + XFS_SB_FEAT_INCOMPAT_UNKNOWN)); + return XFS_ERROR(EINVAL); + } } if (unlikely( - sbp->sb_logstart == 0 && mp->m_logdev == mp->m_dev)) { + sbp->sb_logstart == 0 && mp->m_logdev_targp == mp->m_ddev_targp)) { xfs_warn(mp, "filesystem is marked as having an external log; " "specify logdev on the mount command line."); @@ -159,7 +187,7 @@ xfs_mount_validate_sb( } if (unlikely( - sbp->sb_logstart != 0 && mp->m_logdev != mp->m_dev)) { + sbp->sb_logstart != 0 && mp->m_logdev_targp != mp->m_ddev_targp)) { xfs_warn(mp, "filesystem is marked as having an internal log; " "do not specify logdev on the mount command line."); @@ -214,12 +242,6 @@ xfs_mount_validate_sb( return XFS_ERROR(ENOSYS); } - - if (check_inprogress && sbp->sb_inprogress) { - xfs_warn(mp, "Offline file system operation in progress!"); - return XFS_ERROR(EFSCORRUPTED); - } - /* * Version 1 directory format has never worked on Linux. */ @@ -285,6 +307,9 @@ xfs_sb_from_disk( to->sb_features_compat = be32_to_cpu(from->sb_features_compat); to->sb_features_ro_compat = be32_to_cpu(from->sb_features_ro_compat); to->sb_features_incompat = be32_to_cpu(from->sb_features_incompat); + to->sb_features_log_incompat = + be32_to_cpu(from->sb_features_log_incompat); + to->sb_pad = 0; to->sb_pquotino = be64_to_cpu(from->sb_pquotino); to->sb_lsn = be64_to_cpu(from->sb_lsn); } diff --git a/logprint/log_print_trans.c b/logprint/log_print_trans.c index 86e1c42..2dd3a10 100644 --- a/logprint/log_print_trans.c +++ b/logprint/log_print_trans.c @@ -68,6 +68,24 @@ xfs_log_print_trans( if (head_blk == tail_blk) return; + + /* + * Version 5 superblock log feature mask validation. We know the + * log is dirty so check if there are any unknown log features + * in what we need to recover. If there are unknown features + * (e.g. unsupported transactions) then warn about it. + */ + if (XFS_SB_VERSION_NUM(&log->l_mp->m_sb) == XFS_SB_VERSION_5 && + xfs_sb_has_incompat_log_feature(&log->l_mp->m_sb, + XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN)) { + printf(_( +"Superblock has unknown incompatible log features (0x%x) enabled.\n" +"Output may be incomplete or inaccurate. It is recommended that you\n" +"upgrade your xfsprogs installation to match the filesystem features.\n"), + (log->l_mp->m_sb.sb_features_log_incompat & + XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN)); + } + if ((error = xlog_do_recovery_pass(log, head_blk, tail_blk, XLOG_RECOVER_PASS1))) { fprintf(stderr, _("%s: failed in xfs_do_recovery_pass, error: %d\n"), progname, error); -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AFAF529E2F for ; Fri, 17 May 2013 06:14:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4B8B6AC006 for ; Fri, 17 May 2013 04:14:15 -0700 (PDT) X-ASG-Debug-ID: 1368789250-04bdf04224359fb0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id niFvvhnbLHtPTNlc for ; Fri, 17 May 2013 04:14:13 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhMMACUQllF5LDbs/2dsb2JhbABbgwi/GoJ0BHoXdIIgAQUnLzMISTkDG4gkvQCOAoR5A6h4gyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:10 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbi-0008Sl-0d for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:54 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbh-0005Fa-I8 for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:53 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 23/30] patch xfsprogs-mkfs-crc-support-2 Date: Fri, 17 May 2013 21:13:18 +1000 X-ASG-Orig-Subj: [PATCH 23/30] patch xfsprogs-mkfs-crc-support-2 Message-Id: <1368789205-19969-24-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789252 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_RULE_7580D X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.75 BSF_RULE_7580D Custom Rule 7580D --- libxfs/xfs_mount.c | 10 +++-- libxfs/xfs_symlink.c | 4 +- mkfs/maxtrres.c | 4 +- mkfs/xfs_mkfs.c | 114 ++++++++++++++++++++++++++++++++++++++++---------- mkfs/xfs_mkfs.h | 12 +++--- 5 files changed, 111 insertions(+), 33 deletions(-) diff --git a/libxfs/xfs_mount.c b/libxfs/xfs_mount.c index f66f63d..e7e7445 100644 --- a/libxfs/xfs_mount.c +++ b/libxfs/xfs_mount.c @@ -369,7 +369,8 @@ xfs_sb_to_disk( static int xfs_sb_verify( - struct xfs_buf *bp) + struct xfs_buf *bp, + bool verbose) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_sb sb; @@ -380,7 +381,8 @@ xfs_sb_verify( * Only check the in progress field for the primary superblock as * mkfs.xfs doesn't clear it from secondary superblocks. */ - return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); + return xfs_mount_validate_sb(mp, &sb, + verbose && bp->b_bn == XFS_SB_DADDR); } /* @@ -413,7 +415,7 @@ xfs_sb_read_verify( goto out_error; } } - error = xfs_sb_verify(bp); + error = xfs_sb_verify(bp, true); out_error: if (error) { @@ -452,7 +454,7 @@ xfs_sb_write_verify( struct xfs_buf_log_item *bip = bp->b_fspriv; int error; - error = xfs_sb_verify(bp); + error = xfs_sb_verify(bp, false); if (error) { XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); xfs_buf_ioerror(bp, error); diff --git a/libxfs/xfs_symlink.c b/libxfs/xfs_symlink.c index e018abc..a3da965 100644 --- a/libxfs/xfs_symlink.c +++ b/libxfs/xfs_symlink.c @@ -27,9 +27,9 @@ xfs_symlink_blocks( } /* - * XXX: this need to be used by mkfs/proto.c to create symlinks. + * This is used by mkfs/proto.c to create symlinks. */ -static int +int xfs_symlink_hdr_set( struct xfs_mount *mp, xfs_ino_t ino, diff --git a/mkfs/maxtrres.c b/mkfs/maxtrres.c index f12cc70..d571d77 100644 --- a/mkfs/maxtrres.c +++ b/mkfs/maxtrres.c @@ -67,6 +67,7 @@ max_trans_res_by_mount( int max_trans_res( + int crcs_enabled, int dirversion, int sectorlog, int blocklog, @@ -90,7 +91,8 @@ max_trans_res( sbp->sb_inodesize = 1 << inodelog; sbp->sb_inopblock = 1 << (blocklog - inodelog); sbp->sb_dirblklog = dirblocklog - blocklog; - sbp->sb_versionnum = XFS_SB_VERSION_4 | + sbp->sb_versionnum = + (crcs_enabled ? XFS_SB_VERSION_5 : XFS_SB_VERSION_4) | (dirversion == 2 ? XFS_SB_VERSION_DIRV2BIT : 0); libxfs_mount(&mount, sbp, 0,0,0,0); diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 3864932..291bab4 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -178,6 +178,12 @@ char *sopts[] = { NULL }; +char *mopts[] = { +#define M_CRC 0 + "crc", + NULL +}; + #define TERABYTES(count, blog) ((__uint64_t)(count) << (40 - (blog))) #define GIGABYTES(count, blog) ((__uint64_t)(count) << (30 - (blog))) #define MEGABYTES(count, blog) ((__uint64_t)(count) << (20 - (blog))) @@ -952,6 +958,7 @@ main( libxfs_init_t xi; struct fs_topology ft; int lazy_sb_counters; + int crcs_enabled; progname = basename(argv[0]); setlocale(LC_ALL, ""); @@ -983,13 +990,14 @@ main( force_overwrite = 0; worst_freelist = 0; lazy_sb_counters = 1; + crcs_enabled = 0; memset(&fsx, 0, sizeof(fsx)); memset(&xi, 0, sizeof(xi)); xi.isdirect = LIBXFS_DIRECT; xi.isreadonly = LIBXFS_EXCLUSIVELY; - while ((c = getopt(argc, argv, "b:d:i:l:L:n:KNp:qr:s:CfV")) != EOF) { + while ((c = getopt(argc, argv, "b:d:i:l:L:m:n:KNp:qr:s:CfV")) != EOF) { switch (c) { case 'C': case 'f': @@ -1455,6 +1463,25 @@ main( illegal(optarg, "L"); label = optarg; break; + case 'm': + p = optarg; + while (*p != '\0') { + char *value; + + switch (getsubopt(&p, (constpp)mopts, &value)) { + case M_CRC: + if (!value || *value == '\0') + reqval('m', mopts, M_CRC); + c = atoi(value); + if (c < 0 || c > 1) + illegal(value, "m crc"); + crcs_enabled = c; + break; + default: + unknown('m', value); + } + } + break; case 'n': p = optarg; while (*p != '\0') { @@ -1774,9 +1801,17 @@ _("block size %d cannot be smaller than logical sector size %d\n"), inodelog = blocklog - libxfs_highbit32(inopblock); isize = 1 << inodelog; } else if (!ilflag && !isflag) { - inodelog = XFS_DINODE_DFL_LOG; + inodelog = crcs_enabled ? XFS_DINODE_DFL_CRC_LOG + : XFS_DINODE_DFL_LOG; isize = 1 << inodelog; } + if (crcs_enabled && inodelog < XFS_DINODE_DFL_CRC_LOG) { + fprintf(stderr, + _("Minimum inode size for CRCs is %d bytes\n"), + 1 << XFS_DINODE_DFL_CRC_LOG); + usage(); + } + if (xi.lisfile && (!logsize || !xi.logname)) { fprintf(stderr, _("if -l file then -l name and -l size are required\n")); @@ -2025,7 +2060,7 @@ reported by the device (%u).\n"), sectorsize, xi.rtbsize); } - max_tr_res = max_trans_res(dirversion, + max_tr_res = max_trans_res(crcs_enabled, dirversion, sectorlog, blocklog, inodelog, dirblocklog); ASSERT(max_tr_res); min_logblocks = max_tr_res * XFS_MIN_LOG_FACTOR; @@ -2295,7 +2330,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), */ if (!logsize) { logblocks = MIN(logblocks, - agsize - XFS_PREALLOC_BLOCKS(mp)); + XFS_ALLOC_AG_MAX_USABLE(mp)); } if (logblocks > agsize - XFS_PREALLOC_BLOCKS(mp)) { fprintf(stderr, @@ -2338,6 +2373,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), printf(_( "meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n" " =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n" + " =%-22s crc=%-5u\n" "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n" " =%-22s sunit=%-6u swidth=%u blks\n" "naming =version %-14u bsize=%-6u ascii-ci=%d\n" @@ -2346,6 +2382,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), "realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"), dfile, isize, (long long)agcount, (long long)agsize, "", sectorsize, attrversion, projid32bit, + "", crcs_enabled, "", blocksize, (long long)dblocks, imaxpct, "", dsunit, dswidth, dirversion, dirblocksize, nci, @@ -2411,9 +2448,10 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), sbp->sb_logsectlog = 0; sbp->sb_logsectsize = 0; } - sbp->sb_features2 = XFS_SB_VERSION2_MKFS(lazy_sb_counters, + sbp->sb_features2 = XFS_SB_VERSION2_MKFS(crcs_enabled, lazy_sb_counters, attrversion == 2, projid32bit == 1, 0); - sbp->sb_versionnum = XFS_SB_VERSION_MKFS(iaflag, dsunit != 0, + sbp->sb_versionnum = XFS_SB_VERSION_MKFS(crcs_enabled, iaflag, + dsunit != 0, logversion == 2, attrversion == 1, (sectorsize != BBSIZE || lsectorsize != BBSIZE), @@ -2494,6 +2532,9 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), * kernel/userspace header initialisation code the same. */ for (agno = 0; agno < agcount; agno++) { + struct xfs_agfl *agfl; + int bucket; + /* * Superblock. */ @@ -2530,6 +2571,9 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), nbmblocks = (xfs_extlen_t)(agsize - XFS_PREALLOC_BLOCKS(mp)); agf->agf_freeblks = cpu_to_be32(nbmblocks); agf->agf_longest = cpu_to_be32(nbmblocks); + if (xfs_sb_version_hascrc(&mp->m_sb)) + platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); + if (loginternal && agno == logagno) { be32_add_cpu(&agf->agf_freeblks, -logblocks); agf->agf_longest = cpu_to_be32(agsize - @@ -2540,6 +2584,26 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); /* + * AG freelist header block + */ + buf = libxfs_getbuf(mp->m_ddev_targp, + XFS_AG_DADDR(mp, agno, XFS_AGFL_DADDR(mp)), + XFS_FSS_TO_BB(mp, 1)); + buf->b_ops = &xfs_agfl_buf_ops; + agfl = XFS_BUF_TO_AGFL(buf); + /* setting to 0xff results in initialisation to NULLAGBLOCK */ + memset(agfl, 0xff, sectorsize); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + agfl->agfl_magicnum = cpu_to_be32(XFS_AGFL_MAGIC); + agfl->agfl_seqno = cpu_to_be32(agno); + platform_uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_uuid); + for (bucket = 0; bucket < XFS_AGFL_SIZE(mp); bucket++) + agfl->agfl_bno[bucket] = cpu_to_be32(NULLAGBLOCK); + } + + libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); + + /* * AG header block: inodes */ buf = libxfs_getbuf(mp->m_ddev_targp, @@ -2558,6 +2622,8 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), agi->agi_freecount = 0; agi->agi_newino = cpu_to_be32(NULLAGINO); agi->agi_dirino = cpu_to_be32(NULLAGINO); + if (xfs_sb_version_hascrc(&mp->m_sb)) + platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); for (c = 0; c < XFS_AGI_UNLINKED_BUCKETS; c++) agi->agi_unlinked[c] = cpu_to_be32(NULLAGINO); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); @@ -2571,11 +2637,13 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), buf->b_ops = &xfs_allocbt_buf_ops; block = XFS_BUF_TO_BLOCK(buf); memset(block, 0, blocksize); - block->bb_magic = cpu_to_be32(XFS_ABTB_MAGIC); - block->bb_level = 0; - block->bb_numrecs = cpu_to_be16(1); - block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); - block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, buf, XFS_ABTB_CRC_MAGIC, 0, 1, + agno, XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, buf, XFS_ABTB_MAGIC, 0, 1, + agno, 0); + arec = XFS_ALLOC_REC_ADDR(mp, block, 1); arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp)); if (loginternal && agno == logagno) { @@ -2624,11 +2692,13 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), buf->b_ops = &xfs_allocbt_buf_ops; block = XFS_BUF_TO_BLOCK(buf); memset(block, 0, blocksize); - block->bb_magic = cpu_to_be32(XFS_ABTC_MAGIC); - block->bb_level = 0; - block->bb_numrecs = cpu_to_be16(1); - block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); - block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, buf, XFS_ABTC_CRC_MAGIC, 0, 1, + agno, XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, buf, XFS_ABTC_MAGIC, 0, 1, + agno, 0); + arec = XFS_ALLOC_REC_ADDR(mp, block, 1); arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp)); if (loginternal && agno == logagno) { @@ -2667,11 +2737,12 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), buf->b_ops = &xfs_inobt_buf_ops; block = XFS_BUF_TO_BLOCK(buf); memset(block, 0, blocksize); - block->bb_magic = cpu_to_be32(XFS_IBT_MAGIC); - block->bb_level = 0; - block->bb_numrecs = 0; - block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK); - block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK); + if (xfs_sb_version_hascrc(&mp->m_sb)) + xfs_btree_init_block(mp, buf, XFS_IBT_CRC_MAGIC, 0, 0, + agno, XFS_BTREE_CRC_BLOCKS); + else + xfs_btree_init_block(mp, buf, XFS_IBT_MAGIC, 0, 0, + agno, 0); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); } @@ -2908,6 +2979,7 @@ usage( void ) { fprintf(stderr, _("Usage: %s\n\ /* blocksize */ [-b log=n|size=num]\n\ +/* metadata */ [-m crc=[0|1]\n\ /* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num,\n\ (sunit=value,swidth=value|su=num,sw=num),\n\ sectlog=n|sectsize=num\n\ diff --git a/mkfs/xfs_mkfs.h b/mkfs/xfs_mkfs.h index f25a7f3..d10e444 100644 --- a/mkfs/xfs_mkfs.h +++ b/mkfs/xfs_mkfs.h @@ -23,9 +23,9 @@ XFS_SB_VERSION_EXTFLGBIT | \ XFS_SB_VERSION_DIRV2BIT) -#define XFS_SB_VERSION_MKFS(ia,dia,log2,attr1,sflag,ci,more) (\ - ((ia)||(dia)||(log2)||(attr1)||(sflag)||(ci)||(more)) ? \ - ( XFS_SB_VERSION_4 | \ +#define XFS_SB_VERSION_MKFS(crc,ia,dia,log2,attr1,sflag,ci,more) (\ + ((crc)||(ia)||(dia)||(log2)||(attr1)||(sflag)||(ci)||(more)) ? \ + (((crc) ? XFS_SB_VERSION_5 : XFS_SB_VERSION_4) | \ ((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) | \ ((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) | \ ((log2) ? XFS_SB_VERSION_LOGV2BIT : 0) | \ @@ -36,15 +36,17 @@ XFS_DFL_SB_VERSION_BITS | \ 0 ) : XFS_SB_VERSION_1 ) -#define XFS_SB_VERSION2_MKFS(lazycount, attr2, projid32bit, parent) (\ +#define XFS_SB_VERSION2_MKFS(crc, lazycount, attr2, projid32bit, parent) (\ ((lazycount) ? XFS_SB_VERSION2_LAZYSBCOUNTBIT : 0) | \ ((attr2) ? XFS_SB_VERSION2_ATTR2BIT : 0) | \ ((projid32bit) ? XFS_SB_VERSION2_PROJID32BIT : 0) | \ ((parent) ? XFS_SB_VERSION2_PARENTBIT : 0) | \ + ((crc) ? XFS_SB_VERSION2_CRCBIT : 0) | \ 0 ) #define XFS_DFL_BLOCKSIZE_LOG 12 /* 4096 byte blocks */ #define XFS_DINODE_DFL_LOG 8 /* 256 byte inodes */ +#define XFS_DINODE_DFL_CRC_LOG 9 /* 512 byte inodes for CRCs */ #define XFS_MIN_DATA_BLOCKS 100 #define XFS_MIN_INODE_PERBLOCK 2 /* min inodes per block */ #define XFS_DFL_IMAXIMUM_PCT 25 /* max % of space for inodes */ @@ -79,7 +81,7 @@ extern void parse_proto (xfs_mount_t *mp, struct fsxattr *fsx, char **pp); extern void res_failed (int err); /* maxtrres.c */ -extern int max_trans_res (int dirversion, +extern int max_trans_res (int crcs_enabled, int dirversion, int sectorlog, int blocklog, int inodelog, int dirblocklog); #endif /* __XFS_MKFS_H__ */ -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 882FB29E05 for ; Fri, 17 May 2013 06:14:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 583CC304032 for ; Fri, 17 May 2013 04:14:21 -0700 (PDT) X-ASG-Debug-ID: 1368789250-04bdf04224359fb0004-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Chl1xeFI78a8pvX5 for ; Fri, 17 May 2013 04:14:19 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOhU4clgViBSio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:19 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbr-0008Sz-Vu for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:04 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbm-0005Fx-RL for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 28/30] libxfs: determine inode size from version number, not struct xfs_dinode Date: Fri, 17 May 2013 21:13:23 +1000 X-ASG-Orig-Subj: [PATCH 28/30] libxfs: determine inode size from version number, not struct xfs_dinode Message-Id: <1368789205-19969-29-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789256 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_db does not use the same structure types as libxfs when checking inodes, and so cannot determine the size of the inode core by passing a struct xfs_dinode to a function. We do, however, know the raw version number, so we can pass that instead. Convert the code to passing the inode version rather than a structure. Note that this should probably be converted in the kernel code as well. Signed-off-by: Dave Chinner --- include/xfs_inode.h | 4 ++-- logprint/log_misc.c | 2 +- logprint/log_print_all.c | 4 ++-- repair/phase6.c | 9 +++------ 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/include/xfs_inode.h b/include/xfs_inode.h index cc14743..fdca7f7 100644 --- a/include/xfs_inode.h +++ b/include/xfs_inode.h @@ -169,9 +169,9 @@ typedef struct xfs_icdinode { /* structure must be padded to 64 bit alignment */ } xfs_icdinode_t; -static inline uint xfs_icdinode_size(struct xfs_icdinode *dicp) +static inline uint xfs_icdinode_size(int version) { - if (dicp->di_version == 3) + if (version == 3) return sizeof(struct xfs_icdinode); return offsetof(struct xfs_icdinode, di_next_unlinked); } diff --git a/logprint/log_misc.c b/logprint/log_misc.c index f368e5a..7012208 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -655,7 +655,7 @@ xlog_print_trans_inode(xfs_caddr_t *ptr, mode = dino.di_mode & S_IFMT; size = (int)dino.di_size; xlog_print_trans_inode_core(&dino); - *ptr += xfs_icdinode_size(&dino); + *ptr += xfs_icdinode_size(dino.di_version); if (*i == num_ops-1 && f->ilf_size == 3) { return 1; diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c index 70b0905..4626186 100644 --- a/logprint/log_print_all.c +++ b/logprint/log_print_all.c @@ -295,8 +295,8 @@ xlog_recover_print_inode( f->ilf_dsize); /* core inode comes 2nd */ - ASSERT(item->ri_buf[1].i_len == xfs_icdinode_size((xfs_icdinode_t *) - item->ri_buf[1].i_addr)); + ASSERT(item->ri_buf[1].i_len == xfs_icdinode_size(1) || + item->ri_buf[1].i_len == xfs_icdinode_size(3)); xlog_recover_print_inode_core((xfs_icdinode_t *) item->ri_buf[1].i_addr); diff --git a/repair/phase6.c b/repair/phase6.c index dc8145b..09052cc 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -446,8 +446,7 @@ mk_rbmino(xfs_mount_t *mp) } vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1; - ip->i_d.di_version = vers; - memset(&ip->i_d, 0, xfs_icdinode_size(&ip->i_d)); + memset(&ip->i_d, 0, xfs_icdinode_size(vers)); ip->i_d.di_magic = XFS_DINODE_MAGIC; ip->i_d.di_mode = S_IFREG; @@ -696,8 +695,7 @@ mk_rsumino(xfs_mount_t *mp) } vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1; - ip->i_d.di_version = vers; - memset(&ip->i_d, 0, xfs_icdinode_size(&ip->i_d)); + memset(&ip->i_d, 0, xfs_icdinode_size(vers)); ip->i_d.di_magic = XFS_DINODE_MAGIC; ip->i_d.di_mode = S_IFREG; @@ -813,8 +811,7 @@ mk_root_dir(xfs_mount_t *mp) * take care of the core -- initialization from xfs_ialloc() */ vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1; - ip->i_d.di_version = vers; - memset(&ip->i_d, 0, xfs_icdinode_size(&ip->i_d)); + memset(&ip->i_d, 0, xfs_icdinode_size(vers)); ip->i_d.di_magic = XFS_DINODE_MAGIC; ip->i_d.di_mode = (__uint16_t) mode|S_IFDIR; -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DCBAD29E41 for ; Fri, 17 May 2013 06:14:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8D55E8F8035 for ; Fri, 17 May 2013 04:14:17 -0700 (PDT) X-ASG-Debug-ID: 1368789250-04bdf04224359fb0003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id FAXVnPkvUGxdRhyc for ; Fri, 17 May 2013 04:14:14 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBScvMwgYMTkDGxmIC70AjgKEeQOhU4clgyIq Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:14 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbw-0008Sb-GN for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:08 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbX-0005FA-9T for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 19/30] xfs: buffer type overruns blf_flags field Date: Fri, 17 May 2013 21:13:14 +1000 X-ASG-Orig-Subj: [PATCH 19/30] xfs: buffer type overruns blf_flags field Message-Id: <1368789205-19969-20-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789254 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The buffer type passed to log recvoery in the buffer log item overruns the blf_flags field. I had assumed that flags field was a 32 bit value, and it turns out it is a unisgned short. Therefore having 19 flags doesn't really work. Convert the buffer type field to numeric value, and use the top 5 bits of the flags field for it. We currently have 17 types of buffers, so using 5 bits gives us plenty of room for expansion in future.... Signed-off-by: Dave Chinner --- include/xfs_buf_item.h | 92 +++++++++++++++++++++++++++-------------------- include/xfs_trans.h | 4 --- libxfs/trans.c | 2 +- libxfs/xfs_alloc.c | 4 +-- libxfs/xfs_attr_leaf.c | 6 ++-- libxfs/xfs_bmap.c | 2 +- libxfs/xfs_btree.c | 8 ++--- libxfs/xfs_da_btree.c | 12 +++---- libxfs/xfs_dir2_block.c | 4 +-- libxfs/xfs_dir2_data.c | 4 +-- libxfs/xfs_dir2_leaf.c | 12 +++---- libxfs/xfs_dir2_node.c | 10 +++--- libxfs/xfs_ialloc.c | 2 +- 13 files changed, 86 insertions(+), 76 deletions(-) diff --git a/include/xfs_buf_item.h b/include/xfs_buf_item.h index 640adcf..2573d2a 100644 --- a/include/xfs_buf_item.h +++ b/include/xfs_buf_item.h @@ -39,45 +39,6 @@ extern kmem_zone_t *xfs_buf_item_zone; #define XFS_BLF_PDQUOT_BUF (1<<3) #define XFS_BLF_GDQUOT_BUF (1<<4) -/* - * all buffers now need flags to tell recovery where the magic number - * is so that it can verify and calculate the CRCs on the buffer correctly - * once the changes have been replayed into the buffer. - */ -#define XFS_BLF_BTREE_BUF (1<<5) -#define XFS_BLF_AGF_BUF (1<<6) -#define XFS_BLF_AGFL_BUF (1<<7) -#define XFS_BLF_AGI_BUF (1<<8) -#define XFS_BLF_DINO_BUF (1<<9) -#define XFS_BLF_SYMLINK_BUF (1<<10) -#define XFS_BLF_DIR_BLOCK_BUF (1<<11) -#define XFS_BLF_DIR_DATA_BUF (1<<12) -#define XFS_BLF_DIR_FREE_BUF (1<<13) -#define XFS_BLF_DIR_LEAF1_BUF (1<<14) -#define XFS_BLF_DIR_LEAFN_BUF (1<<15) -#define XFS_BLF_DA_NODE_BUF (1<<16) -#define XFS_BLF_ATTR_LEAF_BUF (1<<17) -#define XFS_BLF_ATTR_RMT_BUF (1<<18) - -#define XFS_BLF_TYPE_MASK \ - (XFS_BLF_UDQUOT_BUF | \ - XFS_BLF_PDQUOT_BUF | \ - XFS_BLF_GDQUOT_BUF | \ - XFS_BLF_BTREE_BUF | \ - XFS_BLF_AGF_BUF | \ - XFS_BLF_AGFL_BUF | \ - XFS_BLF_AGI_BUF | \ - XFS_BLF_DINO_BUF | \ - XFS_BLF_SYMLINK_BUF | \ - XFS_BLF_DIR_BLOCK_BUF | \ - XFS_BLF_DIR_DATA_BUF | \ - XFS_BLF_DIR_FREE_BUF | \ - XFS_BLF_DIR_LEAF1_BUF | \ - XFS_BLF_DIR_LEAFN_BUF | \ - XFS_BLF_DA_NODE_BUF | \ - XFS_BLF_ATTR_LEAF_BUF | \ - XFS_BLF_ATTR_RMT_BUF) - #define XFS_BLF_CHUNK 128 #define XFS_BLF_SHIFT 7 #define BIT_TO_WORD_SHIFT 5 @@ -101,6 +62,55 @@ typedef struct xfs_buf_log_format { } xfs_buf_log_format_t; /* + * All buffers now need to tell recovery where the magic number + * is so that it can verify and calculate the CRCs on the buffer correctly + * once the changes have been replayed into the buffer. + * + * The type value is held in the upper 5 bits of the blf_flags field, which is + * an unsigned 16 bit field. Hence we need to shift it 11 bits up and down. + */ +#define XFS_BLFT_BITS 5 +#define XFS_BLFT_SHIFT 11 +#define XFS_BLFT_MASK (((1 << XFS_BLFT_BITS) - 1) << XFS_BLFT_SHIFT) + +enum xfs_blft { + XFS_BLFT_UNKNOWN_BUF = 0, + XFS_BLFT_UDQUOT_BUF, + XFS_BLFT_PDQUOT_BUF, + XFS_BLFT_GDQUOT_BUF, + XFS_BLFT_BTREE_BUF, + XFS_BLFT_AGF_BUF, + XFS_BLFT_AGFL_BUF, + XFS_BLFT_AGI_BUF, + XFS_BLFT_DINO_BUF, + XFS_BLFT_SYMLINK_BUF, + XFS_BLFT_DIR_BLOCK_BUF, + XFS_BLFT_DIR_DATA_BUF, + XFS_BLFT_DIR_FREE_BUF, + XFS_BLFT_DIR_LEAF1_BUF, + XFS_BLFT_DIR_LEAFN_BUF, + XFS_BLFT_DA_NODE_BUF, + XFS_BLFT_ATTR_LEAF_BUF, + XFS_BLFT_ATTR_RMT_BUF, + XFS_BLFT_SB_BUF, + XFS_BLFT_MAX_BUF = (1 << XFS_BLFT_BITS), +}; + +static inline void +xfs_blft_to_flags(struct xfs_buf_log_format *blf, enum xfs_blft type) +{ + ASSERT(type > XFS_BLFT_UNKNOWN_BUF && type < XFS_BLFT_MAX_BUF); + blf->blf_flags &= ~XFS_BLFT_MASK; + blf->blf_flags |= ((type << XFS_BLFT_SHIFT) & XFS_BLFT_MASK); +} + +static inline __uint16_t +xfs_blft_from_flags(struct xfs_buf_log_format *blf) +{ + return (blf->blf_flags & XFS_BLFT_MASK) >> XFS_BLFT_SHIFT; +} + +/* * buf log item flags */ #define XFS_BLI_HOLD 0x01 @@ -153,6 +163,10 @@ void xfs_buf_attach_iodone(struct xfs_buf *, void xfs_buf_iodone_callbacks(struct xfs_buf *); void xfs_buf_iodone(struct xfs_buf *, struct xfs_log_item *); +void xfs_trans_buf_set_type(struct xfs_trans *, struct xfs_buf *, + enum xfs_blft); +void xfs_trans_buf_copy_type(struct xfs_buf *dst_bp, struct xfs_buf *src_bp); + #endif /* __KERNEL__ */ #endif /* __XFS_BUF_ITEM_H__ */ diff --git a/include/xfs_trans.h b/include/xfs_trans.h index 9e145e9..acf1381 100644 --- a/include/xfs_trans.h +++ b/include/xfs_trans.h @@ -500,10 +500,6 @@ void xfs_trans_inode_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_stale_inode_buf(xfs_trans_t *, struct xfs_buf *); void xfs_trans_dquot_buf(xfs_trans_t *, struct xfs_buf *, uint); void xfs_trans_inode_alloc_buf(xfs_trans_t *, struct xfs_buf *); -void xfs_trans_buf_set_type(struct xfs_trans *, struct xfs_buf *, - uint); -void xfs_trans_buf_copy_type(struct xfs_buf *dst_bp, - struct xfs_buf *src_bp); void xfs_trans_ichgtime(struct xfs_trans *, struct xfs_inode *, int); void xfs_trans_ijoin(struct xfs_trans *, struct xfs_inode *, uint); void xfs_trans_log_buf(xfs_trans_t *, struct xfs_buf *, uint, uint); diff --git a/libxfs/trans.c b/libxfs/trans.c index 619aad1..831e42a 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -218,7 +218,7 @@ libxfs_trans_inode_alloc_buf( ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DINO_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DINO_BUF); } /* diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index 30fc5f4..1041f8f 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -2079,7 +2079,7 @@ xfs_alloc_log_agf( trace_xfs_agf(tp->t_mountp, XFS_BUF_TO_AGF(bp), fields, _RET_IP_); - xfs_trans_buf_set_type(tp, bp, XFS_BLF_AGF_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_AGF_BUF); xfs_btree_offsets(fields, offsets, XFS_AGF_NUM_BITS, &first, &last); xfs_trans_log_buf(tp, bp, (uint)first, (uint)last); @@ -2159,7 +2159,7 @@ xfs_alloc_put_freelist( xfs_alloc_log_agf(tp, agbp, logflags); - xfs_trans_buf_set_type(tp, agflbp, XFS_BLF_AGFL_BUF); + xfs_trans_buf_set_type(tp, agflbp, XFS_BLFT_AGFL_BUF); xfs_trans_log_buf(tp, agflbp, startoff, startoff + sizeof(xfs_agblock_t) - 1); return 0; diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index 7724781..b28266a 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -241,7 +241,7 @@ xfs_attr3_leaf_read( err = xfs_da_read_buf(tp, dp, bno, mappedbno, bpp, XFS_ATTR_FORK, &xfs_attr3_leaf_buf_ops); if (!err && tp) - xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_ATTR_LEAF_BUF); + xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_ATTR_LEAF_BUF); return err; } @@ -872,7 +872,7 @@ xfs_attr3_leaf_to_node( goto out; /* copy leaf to new buffer, update identifiers */ - xfs_trans_buf_set_type(args->trans, bp2, XFS_BLF_ATTR_LEAF_BUF); + xfs_trans_buf_set_type(args->trans, bp2, XFS_BLFT_ATTR_LEAF_BUF); bp2->b_ops = bp1->b_ops; memcpy(bp2->b_addr, bp1->b_addr, XFS_LBSIZE(mp)); if (xfs_sb_version_hascrc(&mp->m_sb)) { @@ -935,7 +935,7 @@ xfs_attr3_leaf_create( if (error) return error; bp->b_ops = &xfs_attr3_leaf_buf_ops; - xfs_trans_buf_set_type(args->trans, bp, XFS_BLF_ATTR_LEAF_BUF); + xfs_trans_buf_set_type(args->trans, bp, XFS_BLFT_ATTR_LEAF_BUF); leaf = bp->b_addr; memset(leaf, 0, XFS_LBSIZE(mp)); diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index 5e736a5..6664265 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -1217,7 +1217,7 @@ xfs_bmap_local_to_extents_init_fn( { bp->b_ops = &xfs_bmbt_buf_ops; memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); - xfs_trans_buf_set_type(tp, bp, XFS_BLF_BTREE_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_BTREE_BUF); } STATIC void diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index a7c19e9..a613294 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -1227,7 +1227,7 @@ xfs_btree_log_keys( XFS_BTREE_TRACE_ARGBII(cur, bp, first, last); if (bp) { - xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLFT_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, xfs_btree_key_offset(cur, first), xfs_btree_key_offset(cur, last + 1) - 1); @@ -1252,7 +1252,7 @@ xfs_btree_log_recs( XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); XFS_BTREE_TRACE_ARGBII(cur, bp, first, last); - xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLFT_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, xfs_btree_rec_offset(cur, first), xfs_btree_rec_offset(cur, last + 1) - 1); @@ -1277,7 +1277,7 @@ xfs_btree_log_ptrs( struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); int level = xfs_btree_get_level(block); - xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLFT_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, xfs_btree_ptr_offset(cur, first, level), xfs_btree_ptr_offset(cur, last + 1, level) - 1); @@ -1352,7 +1352,7 @@ xfs_btree_log_block( (cur->bc_flags & XFS_BTREE_LONG_PTRS) ? loffsets : soffsets, nbits, &first, &last); - xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLF_BTREE_BUF); + xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLFT_BTREE_BUF); xfs_trans_log_buf(cur->bc_tp, bp, first, last); } else { xfs_trans_log_inode(cur->bc_tp, cur->bc_private.b.ip, diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index ef443ae..a76962d 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -290,15 +290,15 @@ xfs_da3_node_read( switch (be16_to_cpu(info->magic)) { case XFS_DA3_NODE_MAGIC: case XFS_DA_NODE_MAGIC: - type = XFS_BLF_DA_NODE_BUF; + type = XFS_BLFT_DA_NODE_BUF; break; case XFS_ATTR_LEAF_MAGIC: case XFS_ATTR3_LEAF_MAGIC: - type = XFS_BLF_ATTR_LEAF_BUF; + type = XFS_BLFT_ATTR_LEAF_BUF; break; case XFS_DIR2_LEAFN_MAGIC: case XFS_DIR3_LEAFN_MAGIC: - type = XFS_BLF_DIR_LEAFN_BUF; + type = XFS_BLFT_DIR_LEAFN_BUF; break; default: type = 0; @@ -339,7 +339,7 @@ xfs_da3_node_create( if (error) return(error); bp->b_ops = &xfs_da3_node_buf_ops; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DA_NODE_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DA_NODE_BUF); node = bp->b_addr; if (xfs_sb_version_hascrc(&mp->m_sb)) { @@ -573,7 +573,7 @@ xfs_da3_root_split( * we are about to copy oldroot to bp, so set up the type * of bp while we know exactly what it will be. */ - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DA_NODE_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DA_NODE_BUF); } else { struct xfs_dir3_icleaf_hdr leafhdr; struct xfs_dir2_leaf_entry *ents; @@ -591,7 +591,7 @@ xfs_da3_root_split( * we are about to copy oldroot to bp, so set up the type * of bp while we know exactly what it will be. */ - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_LEAFN_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_LEAFN_BUF); } /* diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c index 574e414..dc69394 100644 --- a/libxfs/xfs_dir2_block.c +++ b/libxfs/xfs_dir2_block.c @@ -119,7 +119,7 @@ xfs_dir3_block_read( err = xfs_da_read_buf(tp, dp, mp->m_dirdatablk, -1, bpp, XFS_DATA_FORK, &xfs_dir3_block_buf_ops); if (!err && tp) - xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_BLOCK_BUF); + xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_DIR_BLOCK_BUF); return err; } @@ -133,7 +133,7 @@ xfs_dir3_block_init( struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; bp->b_ops = &xfs_dir3_block_buf_ops; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_BLOCK_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_BLOCK_BUF); if (xfs_sb_version_hascrc(&mp->m_sb)) { memset(hdr3, 0, sizeof(*hdr3)); diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c index 9752ae3..155352c 100644 --- a/libxfs/xfs_dir2_data.c +++ b/libxfs/xfs_dir2_data.c @@ -288,7 +288,7 @@ xfs_dir3_data_read( err = xfs_da_read_buf(tp, dp, bno, mapped_bno, bpp, XFS_DATA_FORK, &xfs_dir3_data_buf_ops); if (!err && tp) - xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_DATA_BUF); + xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_DIR_DATA_BUF); return err; } @@ -558,7 +558,7 @@ xfs_dir3_data_init( if (error) return error; bp->b_ops = &xfs_dir3_data_buf_ops; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_DATA_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_DATA_BUF); /* * Initialize the header. diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index 3d1ec23..a287bb1 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -284,7 +284,7 @@ xfs_dir3_leaf_read( err = xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, XFS_DATA_FORK, &xfs_dir3_leaf1_buf_ops); if (!err && tp) - xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_LEAF1_BUF); + xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_DIR_LEAF1_BUF); return err; } @@ -301,7 +301,7 @@ xfs_dir3_leafn_read( err = xfs_da_read_buf(tp, dp, fbno, mappedbno, bpp, XFS_DATA_FORK, &xfs_dir3_leafn_buf_ops); if (!err && tp) - xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_LEAFN_BUF); + xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_DIR_LEAFN_BUF); return err; } @@ -346,10 +346,10 @@ xfs_dir3_leaf_init( ltp = xfs_dir2_leaf_tail_p(mp, leaf); ltp->bestcount = 0; bp->b_ops = &xfs_dir3_leaf1_buf_ops; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_LEAF1_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_LEAF1_BUF); } else { bp->b_ops = &xfs_dir3_leafn_buf_ops; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_LEAFN_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_LEAFN_BUF); } } @@ -470,7 +470,7 @@ xfs_dir2_block_to_leaf( * Fix up the block header, make it a data block. */ dbp->b_ops = &xfs_dir3_data_buf_ops; - xfs_trans_buf_set_type(tp, dbp, XFS_BLF_DIR_DATA_BUF); + xfs_trans_buf_set_type(tp, dbp, XFS_BLFT_DIR_DATA_BUF); if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); else @@ -1791,7 +1791,7 @@ xfs_dir2_node_to_leaf( xfs_dir3_leaf_compact(args, &leafhdr, lbp); lbp->b_ops = &xfs_dir3_leaf1_buf_ops; - xfs_trans_buf_set_type(tp, lbp, XFS_BLF_DIR_LEAF1_BUF); + xfs_trans_buf_set_type(tp, lbp, XFS_BLFT_DIR_LEAF1_BUF); leafhdr.magic = (leafhdr.magic == XFS_DIR2_LEAFN_MAGIC) ? XFS_DIR2_LEAF1_MAGIC : XFS_DIR3_LEAF1_MAGIC; diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index a88049b..be955bf 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -151,7 +151,7 @@ __xfs_dir3_free_read( /* try read returns without an error or *bpp if it lands in a hole */ if (!err && tp && *bpp) - xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_FREE_BUF); + xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_DIR_FREE_BUF); return err; } @@ -239,7 +239,7 @@ xfs_dir3_free_get_buf( if (error) return error; - xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_FREE_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_FREE_BUF); bp->b_ops = &xfs_dir3_free_buf_ops; /* @@ -388,7 +388,7 @@ xfs_dir2_leaf_to_node( else leaf->hdr.info.magic = cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); lbp->b_ops = &xfs_dir3_leafn_buf_ops; - xfs_trans_buf_set_type(tp, lbp, XFS_BLF_DIR_LEAFN_BUF); + xfs_trans_buf_set_type(tp, lbp, XFS_BLFT_DIR_LEAFN_BUF); xfs_dir3_leaf_log_header(tp, lbp); xfs_dir3_leaf_check(mp, lbp); return 0; @@ -804,7 +804,7 @@ xfs_dir2_leafn_lookup_for_entry( (char *)curbp->b_addr); state->extrablk.magic = XFS_DIR2_DATA_MAGIC; curbp->b_ops = &xfs_dir3_data_buf_ops; - xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF); + xfs_trans_buf_set_type(tp, curbp, XFS_BLFT_DIR_DATA_BUF); if (cmp == XFS_CMP_EXACT) return XFS_ERROR(EEXIST); } @@ -819,7 +819,7 @@ xfs_dir2_leafn_lookup_for_entry( state->extrablk.blkno = curdb; state->extrablk.magic = XFS_DIR2_DATA_MAGIC; curbp->b_ops = &xfs_dir3_data_buf_ops; - xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF); + xfs_trans_buf_set_type(tp, curbp, XFS_BLFT_DIR_DATA_BUF); } else { /* If the curbp is not the CI match block, drop it */ if (state->extrablk.bp != curbp) diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index 57fbae2..76fdcea 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -1286,7 +1286,7 @@ xfs_ialloc_log_agi( /* * Log the allocation group inode header buffer. */ - xfs_trans_buf_set_type(tp, bp, XFS_BLF_AGI_BUF); + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_AGI_BUF); xfs_trans_log_buf(tp, bp, first, last); } -- 1.7.10.4 From dave@fromorbit.com Fri May 17 06:14:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3BBCE29E03 for ; Fri, 17 May 2013 06:14:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id F0EC28F8040 for ; Fri, 17 May 2013 04:14:23 -0700 (PDT) X-ASG-Debug-ID: 1368789250-04bdf04224359fb0005-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id IeVooA4hYbvQSEIf for ; Fri, 17 May 2013 04:14:21 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIMACUQllF5LDbs/2dsb2JhbABbgwjCDgR6F3SCHwEBBRoNLzMIGDE5AxsZiAu9AI4ChHkDqHiDIio Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 17 May 2013 20:44:20 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UdIbx-0008TD-Cv for xfs@oss.sgi.com; Fri, 17 May 2013 21:14:09 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UdIbm-0005G7-UF for xfs@oss.sgi.com; Fri, 17 May 2013 21:13:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 30/30] xfsprogs: add crc format support to db Date: Fri, 17 May 2013 21:13:25 +1000 X-ASG-Orig-Subj: [PATCH 30/30] xfsprogs: add crc format support to db Message-Id: <1368789205-19969-31-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368789260 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- db/agf.c | 3 ++ db/agfl.c | 16 +++++++ db/agfl.h | 2 + db/agi.c | 3 ++ db/btblock.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ db/btblock.h | 10 ++++ db/field.c | 16 +++++++ db/field.h | 8 ++++ db/freesp.c | 6 ++- db/init.c | 4 ++ db/inode.c | 27 +++++++++++ db/inode.h | 3 ++ db/type.c | 34 +++++++++++++- db/type.h | 3 +- libxfs/util.c | 1 - 15 files changed, 276 insertions(+), 5 deletions(-) diff --git a/db/agf.c b/db/agf.c index 668637a..389cb43 100644 --- a/db/agf.c +++ b/db/agf.c @@ -69,6 +69,9 @@ const field_t agf_flds[] = { { "freeblks", FLDT_EXTLEN, OI(OFF(freeblks)), C1, 0, TYP_NONE }, { "longest", FLDT_EXTLEN, OI(OFF(longest)), C1, 0, TYP_NONE }, { "btreeblks", FLDT_UINT32D, OI(OFF(btreeblks)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(uuid)), C1, 0, TYP_NONE }, + { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(crc)), C1, 0, TYP_NONE }, { NULL } }; diff --git a/db/agfl.c b/db/agfl.c index 72dca23..e2340e6 100644 --- a/db/agfl.c +++ b/db/agfl.c @@ -41,8 +41,24 @@ const field_t agfl_hfld[] = { { { NULL } }; +const field_t agfl_crc_hfld[] = { { + "", FLDT_AGFL_CRC, OI(0), C1, 0, TYP_NONE, }, + { NULL } +}; + #define OFF(f) bitize(offsetof(xfs_agfl_t, agfl_ ## f)) const field_t agfl_flds[] = { + { "bno", FLDT_AGBLOCKNZ, OI(OFF(magicnum)), agfl_bno_size, + FLD_ARRAY|FLD_COUNT, TYP_DATA }, + { NULL } +}; + +const field_t agfl_crc_flds[] = { + { "magicnum", FLDT_UINT32X, OI(OFF(magicnum)), C1, 0, TYP_NONE }, + { "seqno", FLDT_AGNUMBER, OI(OFF(seqno)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(uuid)), C1, 0, TYP_NONE }, + { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(crc)), C1, 0, TYP_NONE }, { "bno", FLDT_AGBLOCKNZ, OI(OFF(bno)), agfl_bno_size, FLD_ARRAY|FLD_COUNT, TYP_DATA }, { NULL } diff --git a/db/agfl.h b/db/agfl.h index 7b7631b..177ad41 100644 --- a/db/agfl.h +++ b/db/agfl.h @@ -18,6 +18,8 @@ extern const struct field agfl_flds[]; extern const struct field agfl_hfld[]; +extern const struct field agfl_crc_flds[]; +extern const struct field agfl_crc_hfld[]; extern void agfl_init(void); extern int agfl_size(void *obj, int startoff, int idx); diff --git a/db/agi.c b/db/agi.c index 02d5d30..6b2e889 100644 --- a/db/agi.c +++ b/db/agi.c @@ -54,6 +54,9 @@ const field_t agi_flds[] = { { "dirino", FLDT_AGINO, OI(OFF(dirino)), C1, 0, TYP_INODE }, { "unlinked", FLDT_AGINONN, OI(OFF(unlinked)), CI(XFS_AGI_UNLINKED_BUCKETS), FLD_ARRAY, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(uuid)), C1, 0, TYP_NONE }, + { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(crc)), C1, 0, TYP_NONE }, { NULL } }; diff --git a/db/btblock.c b/db/btblock.c index 2c199b2..37b9903 100644 --- a/db/btblock.c +++ b/db/btblock.c @@ -60,6 +60,31 @@ struct xfs_db_btree { sizeof(xfs_inobt_rec_t), sizeof(__be32), }, + [/*0x424d415*/8] = { /* BMAP_CRC */ + XFS_BTREE_LBLOCK_CRC_LEN, + sizeof(xfs_bmbt_key_t), + sizeof(xfs_bmbt_rec_t), + sizeof(__be64), + }, + [/*0x4142544*/0xa] = { /* ABTB_CRC */ + XFS_BTREE_SBLOCK_CRC_LEN, + sizeof(xfs_alloc_key_t), + sizeof(xfs_alloc_rec_t), + sizeof(__be32), + }, + [/*0x414254*/0xb] = { /* ABTC_CRC */ + XFS_BTREE_SBLOCK_CRC_LEN, + sizeof(xfs_alloc_key_t), + sizeof(xfs_alloc_rec_t), + sizeof(__be32), + }, + [/*0x4941425*/0xc] = { /* IABT_CRC */ + XFS_BTREE_SBLOCK_CRC_LEN, + sizeof(xfs_inobt_key_t), + sizeof(xfs_inobt_rec_t), + sizeof(__be32), + }, + }; /* @@ -208,6 +233,15 @@ const field_t bmapbtd_hfld[] = { { NULL } }; +const field_t bmapbta_crc_hfld[] = { + { "", FLDT_BMAPBTA_CRC, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; +const field_t bmapbtd_crc_hfld[] = { + { "", FLDT_BMAPBTD_CRC, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; + #define OFF(f) bitize(offsetof(struct xfs_btree_block, bb_ ## f)) const field_t bmapbta_flds[] = { { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, @@ -237,6 +271,45 @@ const field_t bmapbtd_flds[] = { FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_BMAPBTD }, { NULL } }; +/* crc enabled versions */ +const field_t bmapbta_crc_flds[] = { + { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(OFF(level)), C1, 0, TYP_NONE }, + { "numrecs", FLDT_UINT16D, OI(OFF(numrecs)), C1, 0, TYP_NONE }, + { "leftsib", FLDT_DFSBNO, OI(OFF(u.l.bb_leftsib)), C1, 0, TYP_BMAPBTA }, + { "rightsib", FLDT_DFSBNO, OI(OFF(u.l.bb_rightsib)), C1, 0, TYP_BMAPBTA }, + { "bno", FLDT_DFSBNO, OI(OFF(u.l.bb_blkno)), C1, 0, TYP_BMAPBTD }, + { "lsn", FLDT_UINT64X, OI(OFF(u.l.bb_lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(u.l.bb_uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_INO, OI(OFF(u.l.bb_owner)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(u.l.bb_crc)), C1, 0, TYP_NONE }, + { "recs", FLDT_BMAPBTAREC, btblock_rec_offset, btblock_rec_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "keys", FLDT_BMAPBTAKEY, btblock_key_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "ptrs", FLDT_BMAPBTAPTR, btblock_ptr_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_BMAPBTA }, + { NULL } +}; +const field_t bmapbtd_crc_flds[] = { + { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(OFF(level)), C1, 0, TYP_NONE }, + { "numrecs", FLDT_UINT16D, OI(OFF(numrecs)), C1, 0, TYP_NONE }, + { "leftsib", FLDT_DFSBNO, OI(OFF(u.l.bb_leftsib)), C1, 0, TYP_BMAPBTD }, + { "rightsib", FLDT_DFSBNO, OI(OFF(u.l.bb_rightsib)), C1, 0, TYP_BMAPBTD }, + { "bno", FLDT_DFSBNO, OI(OFF(u.l.bb_blkno)), C1, 0, TYP_BMAPBTD }, + { "lsn", FLDT_UINT64X, OI(OFF(u.l.bb_lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(u.l.bb_uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_INO, OI(OFF(u.l.bb_owner)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(u.l.bb_crc)), C1, 0, TYP_NONE }, + { "recs", FLDT_BMAPBTDREC, btblock_rec_offset, btblock_rec_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "keys", FLDT_BMAPBTDKEY, btblock_key_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "ptrs", FLDT_BMAPBTDPTR, btblock_ptr_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_BMAPBTD }, + { NULL } +}; #undef OFF #define KOFF(f) bitize(offsetof(xfs_bmbt_key_t, br_ ## f)) @@ -289,6 +362,11 @@ const field_t inobt_hfld[] = { { NULL } }; +const field_t inobt_crc_hfld[] = { + { "", FLDT_INOBT_CRC, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; + #define OFF(f) bitize(offsetof(struct xfs_btree_block, bb_ ## f)) const field_t inobt_flds[] = { { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, @@ -304,6 +382,25 @@ const field_t inobt_flds[] = { FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_INOBT }, { NULL } }; +const field_t inobt_crc_flds[] = { + { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(OFF(level)), C1, 0, TYP_NONE }, + { "numrecs", FLDT_UINT16D, OI(OFF(numrecs)), C1, 0, TYP_NONE }, + { "leftsib", FLDT_AGBLOCK, OI(OFF(u.s.bb_leftsib)), C1, 0, TYP_INOBT }, + { "rightsib", FLDT_AGBLOCK, OI(OFF(u.s.bb_rightsib)), C1, 0, TYP_INOBT }, + { "bno", FLDT_DFSBNO, OI(OFF(u.s.bb_blkno)), C1, 0, TYP_INOBT }, + { "lsn", FLDT_UINT64X, OI(OFF(u.s.bb_lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(u.s.bb_uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_AGNUMBER, OI(OFF(u.s.bb_owner)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(u.s.bb_crc)), C1, 0, TYP_NONE }, + { "recs", FLDT_INOBTREC, btblock_rec_offset, btblock_rec_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "keys", FLDT_INOBTKEY, btblock_key_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "ptrs", FLDT_INOBTPTR, btblock_ptr_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_INOBT }, + { NULL } +}; #undef OFF #define KOFF(f) bitize(offsetof(xfs_inobt_key_t, ir_ ## f)) @@ -331,6 +428,11 @@ const field_t bnobt_hfld[] = { { NULL } }; +const field_t bnobt_crc_hfld[] = { + { "", FLDT_BNOBT_CRC, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; + #define OFF(f) bitize(offsetof(struct xfs_btree_block, bb_ ## f)) const field_t bnobt_flds[] = { { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, @@ -346,6 +448,25 @@ const field_t bnobt_flds[] = { FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_BNOBT }, { NULL } }; +const field_t bnobt_crc_flds[] = { + { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(OFF(level)), C1, 0, TYP_NONE }, + { "numrecs", FLDT_UINT16D, OI(OFF(numrecs)), C1, 0, TYP_NONE }, + { "leftsib", FLDT_AGBLOCK, OI(OFF(u.s.bb_leftsib)), C1, 0, TYP_BNOBT }, + { "rightsib", FLDT_AGBLOCK, OI(OFF(u.s.bb_rightsib)), C1, 0, TYP_BNOBT }, + { "bno", FLDT_DFSBNO, OI(OFF(u.s.bb_blkno)), C1, 0, TYP_BNOBT }, + { "lsn", FLDT_UINT64X, OI(OFF(u.s.bb_lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(u.s.bb_uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_AGNUMBER, OI(OFF(u.s.bb_owner)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(u.s.bb_crc)), C1, 0, TYP_NONE }, + { "recs", FLDT_BNOBTREC, btblock_rec_offset, btblock_rec_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "keys", FLDT_BNOBTKEY, btblock_key_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "ptrs", FLDT_BNOBTPTR, btblock_ptr_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_BNOBT }, + { NULL } +}; #undef OFF #define KOFF(f) bitize(offsetof(xfs_alloc_key_t, ar_ ## f)) @@ -369,6 +490,11 @@ const field_t cntbt_hfld[] = { { NULL } }; +const field_t cntbt_crc_hfld[] = { + { "", FLDT_CNTBT_CRC, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; + #define OFF(f) bitize(offsetof(struct xfs_btree_block, bb_ ## f)) const field_t cntbt_flds[] = { { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, @@ -384,6 +510,25 @@ const field_t cntbt_flds[] = { FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_CNTBT }, { NULL } }; +const field_t cntbt_crc_flds[] = { + { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(OFF(level)), C1, 0, TYP_NONE }, + { "numrecs", FLDT_UINT16D, OI(OFF(numrecs)), C1, 0, TYP_NONE }, + { "leftsib", FLDT_AGBLOCK, OI(OFF(u.s.bb_leftsib)), C1, 0, TYP_CNTBT }, + { "rightsib", FLDT_AGBLOCK, OI(OFF(u.s.bb_rightsib)), C1, 0, TYP_CNTBT }, + { "bno", FLDT_DFSBNO, OI(OFF(u.s.bb_blkno)), C1, 0, TYP_CNTBT }, + { "lsn", FLDT_UINT64X, OI(OFF(u.s.bb_lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(OFF(u.s.bb_uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_AGNUMBER, OI(OFF(u.s.bb_owner)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(OFF(u.s.bb_crc)), C1, 0, TYP_NONE }, + { "recs", FLDT_CNTBTREC, btblock_rec_offset, btblock_rec_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "keys", FLDT_CNTBTKEY, btblock_key_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { "ptrs", FLDT_CNTBTPTR, btblock_ptr_offset, btblock_key_count, + FLD_ARRAY|FLD_ABASE1|FLD_COUNT|FLD_OFFSET, TYP_CNTBT }, + { NULL } +}; #undef OFF #define KOFF(f) bitize(offsetof(xfs_alloc_key_t, ar_ ## f)) diff --git a/db/btblock.h b/db/btblock.h index 0631e66..daee060 100644 --- a/db/btblock.h +++ b/db/btblock.h @@ -18,26 +18,36 @@ extern const struct field bmapbta_flds[]; extern const struct field bmapbta_hfld[]; +extern const struct field bmapbta_crc_flds[]; +extern const struct field bmapbta_crc_hfld[]; extern const struct field bmapbta_key_flds[]; extern const struct field bmapbta_rec_flds[]; extern const struct field bmapbtd_flds[]; extern const struct field bmapbtd_hfld[]; +extern const struct field bmapbtd_crc_flds[]; +extern const struct field bmapbtd_crc_hfld[]; extern const struct field bmapbtd_key_flds[]; extern const struct field bmapbtd_rec_flds[]; extern const struct field inobt_flds[]; extern const struct field inobt_hfld[]; +extern const struct field inobt_crc_flds[]; +extern const struct field inobt_crc_hfld[]; extern const struct field inobt_key_flds[]; extern const struct field inobt_rec_flds[]; extern const struct field bnobt_flds[]; extern const struct field bnobt_hfld[]; +extern const struct field bnobt_crc_flds[]; +extern const struct field bnobt_crc_hfld[]; extern const struct field bnobt_key_flds[]; extern const struct field bnobt_rec_flds[]; extern const struct field cntbt_flds[]; extern const struct field cntbt_hfld[]; +extern const struct field cntbt_crc_flds[]; +extern const struct field cntbt_crc_hfld[]; extern const struct field cntbt_key_flds[]; extern const struct field cntbt_rec_flds[]; diff --git a/db/field.c b/db/field.c index dc72563..510ad84 100644 --- a/db/field.c +++ b/db/field.c @@ -46,6 +46,8 @@ const ftattr_t ftattrtab[] = { agf_flds }, { FLDT_AGFL, "agfl", NULL, (char *)agfl_flds, agfl_size, FTARG_SIZE, NULL, agfl_flds }, + { FLDT_AGFL_CRC, "agfl", NULL, (char *)agfl_crc_flds, agfl_size, + FTARG_SIZE, NULL, agfl_crc_flds }, { FLDT_AGI, "agi", NULL, (char *)agi_flds, agi_size, FTARG_SIZE, NULL, agi_flds }, { FLDT_AGINO, "agino", fp_num, "%u", SI(bitsz(xfs_agino_t)), @@ -84,6 +86,8 @@ const ftattr_t ftattrtab[] = { attrshort_size, FTARG_SIZE, NULL, attr_shortform_flds }, { FLDT_BMAPBTA, "bmapbta", NULL, (char *)bmapbta_flds, btblock_size, FTARG_SIZE, NULL, bmapbta_flds }, + { FLDT_BMAPBTA_CRC, "bmapbta", NULL, (char *)bmapbta_crc_flds, + btblock_size, FTARG_SIZE, NULL, bmapbta_crc_flds }, { FLDT_BMAPBTAKEY, "bmapbtakey", fp_sarray, (char *)bmapbta_key_flds, SI(bitsz(xfs_bmbt_key_t)), 0, NULL, bmapbta_key_flds }, { FLDT_BMAPBTAPTR, "bmapbtaptr", fp_num, "%llu", @@ -92,6 +96,8 @@ const ftattr_t ftattrtab[] = { SI(bitsz(xfs_bmbt_rec_t)), 0, NULL, bmapbta_rec_flds }, { FLDT_BMAPBTD, "bmapbtd", NULL, (char *)bmapbtd_flds, btblock_size, FTARG_SIZE, NULL, bmapbtd_flds }, + { FLDT_BMAPBTD_CRC, "bmapbtd", NULL, (char *)bmapbtd_crc_flds, + btblock_size, FTARG_SIZE, NULL, bmapbtd_crc_flds }, { FLDT_BMAPBTDKEY, "bmapbtdkey", fp_sarray, (char *)bmapbtd_key_flds, SI(bitsz(xfs_bmbt_key_t)), 0, NULL, bmapbtd_key_flds }, { FLDT_BMAPBTDPTR, "bmapbtdptr", fp_num, "%llu", @@ -112,6 +118,8 @@ const ftattr_t ftattrtab[] = { SI(bitsz(xfs_bmdr_ptr_t)), 0, fa_dfsbno, NULL }, { FLDT_BNOBT, "bnobt", NULL, (char *)bnobt_flds, btblock_size, FTARG_SIZE, NULL, bnobt_flds }, + { FLDT_BNOBT_CRC, "bnobt", NULL, (char *)bnobt_crc_flds, btblock_size, + FTARG_SIZE, NULL, bnobt_crc_flds }, { FLDT_BNOBTKEY, "bnobtkey", fp_sarray, (char *)bnobt_key_flds, SI(bitsz(xfs_alloc_key_t)), 0, NULL, bnobt_key_flds }, { FLDT_BNOBTPTR, "bnobtptr", fp_num, "%u", SI(bitsz(xfs_alloc_ptr_t)), @@ -133,6 +141,8 @@ const ftattr_t ftattrtab[] = { { FLDT_CHARS, "chars", fp_num, "%c", SI(bitsz(char)), 0, NULL, NULL }, { FLDT_CNTBT, "cntbt", NULL, (char *)cntbt_flds, btblock_size, FTARG_SIZE, NULL, cntbt_flds }, + { FLDT_CNTBT_CRC, "cntbt", NULL, (char *)cntbt_crc_flds, btblock_size, + FTARG_SIZE, NULL, cntbt_crc_flds }, { FLDT_CNTBTKEY, "cntbtkey", fp_sarray, (char *)cntbt_key_flds, SI(bitsz(xfs_alloc_key_t)), 0, NULL, cntbt_key_flds }, { FLDT_CNTBTPTR, "cntbtptr", fp_num, "%u", SI(bitsz(xfs_alloc_ptr_t)), @@ -154,6 +164,8 @@ const ftattr_t ftattrtab[] = { SI(bitsz(__int8_t)), 0, NULL, NULL }, { FLDT_DINODE_U, "dinode_u", NULL, (char *)inode_u_flds, inode_u_size, FTARG_SIZE|FTARG_OKEMPTY, NULL, inode_u_flds }, + { FLDT_DINODE_V3, "dinode_v3", NULL, (char *)inode_v3_flds, + SI(bitsz(xfs_dinode_t)), 0, NULL, inode_v3_flds }, { FLDT_DIR2, "dir2", NULL, (char *)dir2_flds, dir2_size, FTARG_SIZE, NULL, dir2_flds }, { FLDT_DIR2_BLOCK_TAIL, "dir2_block_tail", NULL, @@ -224,6 +236,8 @@ const ftattr_t ftattrtab[] = { fa_ino, NULL }, { FLDT_INOBT, "inobt", NULL, (char *)inobt_flds, btblock_size, FTARG_SIZE, NULL, inobt_flds }, + { FLDT_INOBT_CRC, "inobt", NULL, (char *)inobt_crc_flds, btblock_size, + FTARG_SIZE, NULL, inobt_crc_flds }, { FLDT_INOBTKEY, "inobtkey", fp_sarray, (char *)inobt_key_flds, SI(bitsz(xfs_inobt_key_t)), 0, NULL, inobt_key_flds }, { FLDT_INOBTPTR, "inobtptr", fp_num, "%u", SI(bitsz(xfs_inobt_ptr_t)), @@ -232,6 +246,8 @@ const ftattr_t ftattrtab[] = { SI(bitsz(xfs_inobt_rec_t)), 0, NULL, inobt_rec_flds }, { FLDT_INODE, "inode", NULL, (char *)inode_flds, inode_size, FTARG_SIZE, NULL, inode_flds }, + { FLDT_INODE_CRC, "inode", NULL, (char *)inode_crc_flds, inode_size, + FTARG_SIZE, NULL, inode_crc_flds }, { FLDT_INOFREE, "inofree", fp_num, "%#llx", SI(bitsz(xfs_inofree_t)), 0, NULL, NULL }, { FLDT_INT16D, "int16d", fp_num, "%d", SI(bitsz(__int16_t)), diff --git a/db/field.h b/db/field.h index 72c225b..9b332f5 100644 --- a/db/field.h +++ b/db/field.h @@ -22,6 +22,7 @@ typedef enum fldt { FLDT_AGBLOCKNZ, FLDT_AGF, FLDT_AGFL, + FLDT_AGFL_CRC, FLDT_AGI, FLDT_AGINO, FLDT_AGINONN, @@ -39,10 +40,12 @@ typedef enum fldt { FLDT_ATTRBLOCK, FLDT_ATTRSHORT, FLDT_BMAPBTA, + FLDT_BMAPBTA_CRC, FLDT_BMAPBTAKEY, FLDT_BMAPBTAPTR, FLDT_BMAPBTAREC, FLDT_BMAPBTD, + FLDT_BMAPBTD_CRC, FLDT_BMAPBTDKEY, FLDT_BMAPBTDPTR, FLDT_BMAPBTDREC, @@ -53,6 +56,7 @@ typedef enum fldt { FLDT_BMROOTDKEY, FLDT_BMROOTDPTR, FLDT_BNOBT, + FLDT_BNOBT_CRC, FLDT_BNOBTKEY, FLDT_BNOBTPTR, FLDT_BNOBTREC, @@ -64,6 +68,7 @@ typedef enum fldt { FLDT_CHARNS, FLDT_CHARS, FLDT_CNTBT, + FLDT_CNTBT_CRC, FLDT_CNTBTKEY, FLDT_CNTBTPTR, FLDT_CNTBTREC, @@ -75,6 +80,7 @@ typedef enum fldt { FLDT_DINODE_CORE, FLDT_DINODE_FMT, FLDT_DINODE_U, + FLDT_DINODE_V3, FLDT_DIR2, FLDT_DIR2_BLOCK_TAIL, FLDT_DIR2_DATA_FREE, @@ -107,10 +113,12 @@ typedef enum fldt { FLDT_FSIZE, FLDT_INO, FLDT_INOBT, + FLDT_INOBT_CRC, FLDT_INOBTKEY, FLDT_INOBTPTR, FLDT_INOBTREC, FLDT_INODE, + FLDT_INODE_CRC, FLDT_INOFREE, FLDT_INT16D, FLDT_INT32D, diff --git a/db/freesp.c b/db/freesp.c index 228ca07..6f69eba 100644 --- a/db/freesp.c +++ b/db/freesp.c @@ -301,7 +301,8 @@ scanfunc_bno( xfs_alloc_ptr_t *pp; xfs_alloc_rec_t *rp; - if (be32_to_cpu(block->bb_magic) != XFS_ABTB_MAGIC) + if (!(be32_to_cpu(block->bb_magic) == XFS_ABTB_MAGIC || + be32_to_cpu(block->bb_magic) == XFS_ABTB_CRC_MAGIC)) return; if (level == 0) { @@ -328,7 +329,8 @@ scanfunc_cnt( xfs_alloc_ptr_t *pp; xfs_alloc_rec_t *rp; - if (be32_to_cpu(block->bb_magic) != XFS_ABTC_MAGIC) + if (!(be32_to_cpu(block->bb_magic) == XFS_ABTC_MAGIC || + be32_to_cpu(block->bb_magic) == XFS_ABTC_CRC_MAGIC)) return; if (level == 0) { diff --git a/db/init.c b/db/init.c index 1033f3a..2932e51 100644 --- a/db/init.c +++ b/db/init.c @@ -26,6 +26,7 @@ #include "sig.h" #include "output.h" #include "malloc.h" +#include "type.h" static char **cmdline; static int ncmdline; @@ -160,6 +161,9 @@ init( } blkbb = 1 << mp->m_blkbb_log; + if (xfs_sb_version_hascrc(&mp->m_sb)) + type_set_tab_crc(); + push_cur(); init_commands(); init_sig(); diff --git a/db/inode.c b/db/inode.c index c8cb7ac..68ef564 100644 --- a/db/inode.c +++ b/db/inode.c @@ -57,6 +57,10 @@ const field_t inode_hfld[] = { { "", FLDT_INODE, OI(0), C1, 0, TYP_NONE }, { NULL } }; +const field_t inode_crc_hfld[] = { + { "", FLDT_INODE_CRC, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; /* XXX: fix this up! */ #define OFF(f) bitize(offsetof(xfs_dinode_t, di_ ## f)) @@ -69,6 +73,17 @@ const field_t inode_flds[] = { FLD_COUNT|FLD_OFFSET, TYP_NONE }, { NULL } }; +const field_t inode_crc_flds[] = { + { "core", FLDT_DINODE_CORE, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "next_unlinked", FLDT_AGINO, OI(OFF(next_unlinked)), C1, 0, + TYP_INODE }, + { "v3", FLDT_DINODE_V3, OI(OFF(magic)), C1, 0, TYP_NONE }, + { "u", FLDT_DINODE_U, inode_u_offset, C1, FLD_OFFSET, TYP_NONE }, + { "a", FLDT_DINODE_A, inode_a_offset, inode_a_count, + FLD_COUNT|FLD_OFFSET, TYP_NONE }, + { NULL } +}; + #define COFF(f) bitize(offsetof(xfs_dinode_t, di_ ## f)) const field_t inode_core_flds[] = { @@ -151,6 +166,18 @@ const field_t inode_core_flds[] = { { NULL } }; +const field_t inode_v3_flds[] = { + { "crc", FLDT_UINT32X, OI(COFF(crc)), C1, 0, TYP_NONE }, + { "change_count", FLDT_UINT64D, OI(COFF(changecount)), C1, 0, TYP_NONE }, + { "lsn", FLDT_UINT64X, OI(COFF(lsn)), C1, 0, TYP_NONE }, + { "flags2", FLDT_UINT64X, OI(COFF(flags2)), C1, 0, TYP_NONE }, + { "crtime", FLDT_TIMESTAMP, OI(COFF(crtime)), C1, 0, TYP_NONE }, + { "inumber", FLDT_INO, OI(COFF(ino)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(COFF(uuid)), C1, 0, TYP_NONE }, + { NULL } +}; + + #define TOFF(f) bitize(offsetof(xfs_timestamp_t, t_ ## f)) const field_t timestamp_flds[] = { { "sec", FLDT_TIME, OI(TOFF(sec)), C1, 0, TYP_NONE }, diff --git a/db/inode.h b/db/inode.h index 6c1ac5c..1624f1d 100644 --- a/db/inode.h +++ b/db/inode.h @@ -18,8 +18,11 @@ extern const struct field inode_a_flds[]; extern const struct field inode_core_flds[]; +extern const struct field inode_v3_flds[]; extern const struct field inode_flds[]; +extern const struct field inode_crc_flds[]; extern const struct field inode_hfld[]; +extern const struct field inode_crc_hfld[]; extern const struct field inode_u_flds[]; extern const struct field timestamp_flds[]; diff --git a/db/type.c b/db/type.c index 529c9e7..97f3548 100644 --- a/db/type.c +++ b/db/type.c @@ -48,7 +48,7 @@ static const cmdinfo_t type_cmd = { "type", NULL, type_f, 0, 1, 1, N_("[newtype]"), N_("set/show current data type"), NULL }; -const typ_t typtab[] = { +static const typ_t __typtab[] = { { TYP_AGF, "agf", handle_struct, agf_hfld }, { TYP_AGFL, "agfl", handle_struct, agfl_hfld }, { TYP_AGI, "agi", handle_struct, agi_hfld }, @@ -72,6 +72,38 @@ const typ_t typtab[] = { { TYP_NONE, NULL } }; +static const typ_t __typtab_crc[] = { + { TYP_AGF, "agf", handle_struct, agf_hfld }, + { TYP_AGFL, "agfl", handle_struct, agfl_crc_hfld }, + { TYP_AGI, "agi", handle_struct, agi_hfld }, + { TYP_ATTR, "attr", handle_struct, attr_hfld }, + { TYP_BMAPBTA, "bmapbta", handle_struct, bmapbta_crc_hfld }, + { TYP_BMAPBTD, "bmapbtd", handle_struct, bmapbtd_crc_hfld }, + { TYP_BNOBT, "bnobt", handle_struct, bnobt_crc_hfld }, + { TYP_CNTBT, "cntbt", handle_struct, cntbt_crc_hfld }, + { TYP_DATA, "data", handle_block, NULL }, + { TYP_DIR2, "dir2", handle_struct, dir2_hfld }, + { TYP_DQBLK, "dqblk", handle_struct, dqblk_hfld }, + { TYP_INOBT, "inobt", handle_struct, inobt_crc_hfld }, + { TYP_INODATA, "inodata", NULL, NULL }, + { TYP_INODE, "inode", handle_struct, inode_crc_hfld }, + { TYP_LOG, "log", NULL, NULL }, + { TYP_RTBITMAP, "rtbitmap", NULL, NULL }, + { TYP_RTSUMMARY, "rtsummary", NULL, NULL }, + { TYP_SB, "sb", handle_struct, sb_hfld }, + { TYP_SYMLINK, "symlink", handle_string, NULL }, + { TYP_TEXT, "text", handle_text, NULL }, + { TYP_NONE, NULL } +}; + +const typ_t *typtab = __typtab; + +void +type_set_tab_crc(void) +{ + typtab = __typtab_crc; +} + static const typ_t * findtyp( char *name) diff --git a/db/type.h b/db/type.h index 4a1d328..c41aca4 100644 --- a/db/type.h +++ b/db/type.h @@ -43,9 +43,10 @@ typedef struct typ pfunc_t pfunc; const struct field *fields; } typ_t; -extern const typ_t typtab[], *cur_typ; +extern const typ_t *typtab, *cur_typ; extern void type_init(void); +extern void type_set_tab_crc(void); extern void handle_block(int action, const struct field *fields, int argc, char **argv); extern void handle_string(int action, const struct field *fields, int argc, diff --git a/libxfs/util.c b/libxfs/util.c index abe16cf..1d3113a 100644 --- a/libxfs/util.c +++ b/libxfs/util.c @@ -79,7 +79,6 @@ libxfs_ialloc( xfs_inode_t *ip; uint flags; int error; - int times; /* * Call the space management code to pick -- 1.7.10.4 From rjohnston@sgi.com Fri May 17 06:53:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7E0117F37 for ; Fri, 17 May 2013 06:53:02 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id D4D13AC001; Fri, 17 May 2013 04:53:01 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 17 May 2013 06:52:31 -0500 Message-ID: <51961A3F.90301@sgi.com> Date: Fri, 17 May 2013 06:53:35 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: Subject: Re: [PATCH 3/3] xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 References: <1368062501-15046-1-git-send-email-david@fromorbit.com> <1368062501-15046-4-git-send-email-david@fromorbit.com> In-Reply-To: <1368062501-15046-4-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/08/2013 08:21 PM, Dave Chinner wrote: > From: Dave Chinner > > Serenity lost. > Insanity looms darkly. > /etc/mtab > Fair enough Dave. Reviewed-by: Rich Johnston This has been committed: commit 1bd086437fac4007610ab0d42f75ae6701f6da1a Author: Dave Chinner Date: Thu May 16 06:53:05 2013 -0500 xfstests: generic/235 breaks /etc/mtab symlinks breaks xfs/189 Thanks --Rich From stan@hardwarefreak.com Fri May 17 06:56:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7957C7F37 for ; Fri, 17 May 2013 06:56:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5E1BB304043 for ; Fri, 17 May 2013 04:56:19 -0700 (PDT) X-ASG-Debug-ID: 1368791778-04cb6c53a33548a0001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id HUQTKlJR7ZBIfNX4 for ; Fri, 17 May 2013 04:56:18 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 2E7C96C0A7; Fri, 17 May 2013 06:56:18 -0500 (CDT) Message-ID: <51961AE6.1010106@hardwarefreak.com> Date: Fri, 17 May 2013 06:56:22 -0500 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: David Oostdyk , "linux-kernel@vger.kernel.org" , "xfs@oss.sgi.com" Subject: Re: high-speed disk I/O is CPU-bound? References: <518CFE7C.9080708@ll.mit.edu> <20130516005913.GE24635@dastard> <5194C4BB.9080406@hardwarefreak.com> <5194FCAC.1010300@ll.mit.edu> <20130516225656.GG24635@dastard> X-ASG-Orig-Subj: Re: high-speed disk I/O is CPU-bound? In-Reply-To: <20130516225656.GG24635@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1368791778 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/16/2013 5:56 PM, Dave Chinner wrote: > On Thu, May 16, 2013 at 11:35:08AM -0400, David Oostdyk wrote: >> On 05/16/13 07:36, Stan Hoeppner wrote: >>> On 5/15/2013 7:59 PM, Dave Chinner wrote: >>>> [cc xfs list, seeing as that's where all the people who use XFS in >>>> these sorts of configurations hang out. ] >>>> >>>> On Fri, May 10, 2013 at 10:04:44AM -0400, David Oostdyk wrote: >>>>> As a basic benchmark, I have an application >>>>> that simply writes the same buffer (say, 128MB) to disk repeatedly. >>>>> Alternatively you could use the "dd" utility. (For these >>>>> benchmarks, I set /proc/sys/vm/dirty_bytes to 512M or lower, since >>>>> these systems have a lot of RAM.) >>>>> >>>>> The basic observations are: >>>>> >>>>> 1. "single-threaded" writes, either a file on the mounted >>>>> filesystem or with a "dd" to the raw RAID device, seem to be limited >>>>> to 1200-1400MB/sec. These numbers vary slightly based on whether >>>>> TurboBoost is affecting the writing process or not. "top" will show >>>>> this process running at 100% CPU. >>>> Expected. You are using buffered IO. Write speed is limited by the >>>> rate at which your user process can memcpy data into the page cache. >>>> >>>>> 2. With two benchmarks running on the same device, I see aggregate >>>>> write speeds of up to ~2.4GB/sec, which is closer to what I'd expect >>>>> the drives of being able to deliver. This can either be with two >>>>> applications writing to separate files on the same mounted file >>>>> system, or two separate "dd" applications writing to distinct >>>>> locations on the raw device. >>> 2.4GB/s is the interface limit of quad lane 6G SAS. Coincidence? If >>> you've daisy chained the SAS expander backplanes within a server chassis >>> (9266-8i/72405), or between external enclosures (9285-8e/71685), and >>> have a single 4 lane cable (SFF-8087/8088/8643/8644) connected to your >>> RAID card, this would fully explain the 2.4GB/s wall, regardless of how >>> many parallel processes are writing, or any other software factor. >>> >>> But surely you already know this, and you're using more than one 4 lane >>> cable. Just covering all the bases here, due to seeing 2.4 GB/s as the >>> stated wall. This number is just too coincidental to ignore. >> >> We definitely have two 4-lane cables being used, but this is an >> interesting coincidence. I'd be surprised if anyone could really >> achieve the theoretical throughput on one cable, though. We have >> one JBOD that only takes a single 4-lane cable, and we seem to cap >> out at closer to 1450MB/sec on that unit. (This is just a single >> point of reference, and I don't have many tests where only one >> 4-lane cable was in use.) > > You can get pretty close to the theoretical limit on the back end > SAS cables - just like you can with FC. Yep. > What I'd suggest you do is look at the RAID card configuration - > often they default to active/passive failover configurations when > there are multiple channels to the same storage. Then hey only use > one of the cables for all traffic. Some RAID cards offer > ative/active or "load balanced" options where all back end paths are > used in redundant configurations rather than just one.... Also read the docs for your JBOD chassis. Some have a single expander module with 2 host ports while some have two such expanders for redundancy and have 4 total host ports. The latter requires dual ported drives. In this config you'd use one host port on each expander and configure the RAID HBA for multipathing. (It may be possible to use all 4 host ports in this setup but this requires a RAID HBA with 4 external 4 lane connectors. I'm not aware of any at this time, nut only two port models. So you'd have to use two non-RAID HBAs each with two 4 lane ports, SCSI multipath, and Linux md/RAID.) Most JBODs that use the LSI 2x36 expander ASIC will give you full b/w over two host ports in a single expander single chassis config. Other JBODs may direct wire one of the two host port to the expansion port so you may only get full 8 lane host bandwidth with an expansion unit attached. There are likely other configurations I'm not aware of. >> You guys hit the nail on the head! With O_DIRECT I can use a single >> writer thread and easily see the same throughput that I _ever_ saw >> in the multiple-writer case (~2.4GB/sec), and "top" shows the writer >> at 10% CPU usage. I've modified my application to use O_DIRECT and >> it makes a world of difference. > > Be aware that O_DIRECT is not a magic bullet. It can make your IO > go a lot slower on some worklaods and storage configs.... > >> [It's interesting that you see performance benefits for O_DIRECT >> even with a single SATA drive. The single SATA drive has little to do with it actually. It's the limited CPU/RAM bus b/w of the box. The reason O_DIRECT shows a 78% improvement in disk throughput is a direct result of dramatically decreased memory pressure, allowing full speed DMA from RAM to the HBA over the PCI bus. The pressure caused by the mem-mem copying of buffered IO causes every read in the CPU to be a cache miss, further exacerbating the load on the CPU/RAM buses. All the memory reads cause extra CPU bus snooping to update the L2s. The constant cache misses and resulting waits on memory reads are what drive the CPU to 98% utilization. >> The reason it took me so long to >> test O_DIRECT in this case, is that I never saw any significant >> benefit from using it in the past. But that is when I didn't have >> such fast storage, so I probably wasn't hitting the bottleneck with >> buffered I/O?] > > Right - for applications not designed to use direct IO from the > ground up, this is typically the case - buffered IO is faster right > up to the point where you run out of CPU.... Or memory bandwidth, which in turn runs you out of CPU. -- Stan From rjohnston@sgi.com Fri May 17 06:59:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9B9107F37 for ; Fri, 17 May 2013 06:59:58 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1B0A78F8037; Fri, 17 May 2013 04:59:58 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 17 May 2013 06:59:28 -0500 Message-ID: <51961BE0.2080708@sgi.com> Date: Fri, 17 May 2013 07:00:32 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: "xfs@oss.sgi.com" Subject: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 References: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> <5194E764.6030207@sgi.com> <20130516203035.GE1765@localhost.localdomain> In-Reply-To: <20130516203035.GE1765@localhost.localdomain> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/16/2013 03:30 PM, Josef Bacik wrote: > On Thu, May 16, 2013 at 08:04:20AM -0600, Rich Johnston wrote: >> On 05/15/2013 10:20 AM, Josef Bacik wrote: >>> Dave pointed out that xfs was having issues with 311 because of caching issues. >>> He suggested that I fsck the dm-flakey device to make sure we don't have this >>> problem. Make _check_scratch_fs take an optional argument to use as the device >>> to fsck. Thanks, >>> >>> Signed-off-by: Josef Bacik >>> --- >> Hi Josef, >> >> Looks like it fails test 19 , are we supposed to see failures for ext4 >> and xfs? >> > > Yeah that's what I was seeing, if you run the fsync tester without the reboot > option and look at the file itself it should match the md5sum thats in the good > output. Thanks, > > Josef > Looks good. Reviewed-by: Rich Johnston From lists@nerdbynature.de Fri May 17 07:02:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FROM_12LTRDOM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 13DB229DF8 for ; Fri, 17 May 2013 07:02:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 96AB0AC002 for ; Fri, 17 May 2013 05:02:26 -0700 (PDT) X-ASG-Debug-ID: 1368792143-04cbb05fe3354470001-NocioJ Received: from trent.utfs.org (trent.utfs.org [94.185.90.103]) by cuda.sgi.com with ESMTP id 74neLNnPwDjrHrI9 for ; Fri, 17 May 2013 05:02:24 -0700 (PDT) X-Barracuda-Envelope-From: lists@nerdbynature.de X-Barracuda-Apparent-Source-IP: 94.185.90.103 Received: by trent.utfs.org (Postfix, from userid 8) id 458233DD0B; Fri, 17 May 2013 14:02:23 +0200 (CEST) Received: from trent.utfs.org (localhost [127.0.0.1]) by trent.utfs.org (Postfix) with ESMTP id 3C7F13DB6F; Fri, 17 May 2013 14:02:22 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by trent.utfs.org (Postfix) with ESMTP id F12033DAC3; Fri, 17 May 2013 14:02:21 +0200 (CEST) Date: Fri, 17 May 2013 05:02:21 -0700 (PDT) From: Christian Kujau To: jfs-discussion@lists.sourceforge.net, linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org, reiserfs-devel@vger.kernel.org, xfs@oss.sgi.com Subject: xattr performance Message-ID: X-ASG-Orig-Subj: xattr performance User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-AV-Checked: ClamAV using ClamSMTP (127.0.0.1) X-Barracuda-Connect: trent.utfs.org[94.185.90.103] X-Barracuda-Start-Time: 1368792144 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, a while ago I was setting & reading extended attributes to ~25000 files in a directory structure on an XFS filesystem. The files were usually a few MB in size, but some where up to 2GB in size. Anyway, I *felt* that setting or reading these xattrs was going very slowly. While the storage may be not the fastest, stat()'ing these files was fine, but getfattr/setfattr took very long. I got curious and while it turned out that the slowness was related to the wrapper script I used to read/set those values, I created a little test suite to 1) create a few thousand files and 2) do xattr operations on them and see if xattr performance was filesystem specific: http://nerdbynature.de/bits/xattr/ Not very sophisticated, true. But it was interesting to see that ext3/ext4/xfs behaved kinda well for all these tests; btrfs/jfs/reiserfs sometimes took way longer than the others. Christian. -- BOFH excuse #43: boss forgot system password From rjohnston@sgi.com Fri May 17 07:02:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8462F29E06 for ; Fri, 17 May 2013 07:02:28 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id E1D83AC002; Fri, 17 May 2013 05:02:24 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 17 May 2013 07:01:55 -0500 Message-ID: <51961C72.4020306@sgi.com> Date: Fri, 17 May 2013 07:02:58 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josef Bacik CC: Subject: Re: [PATCH] xfstests: 311: fsck the dmflakey device instead of the real device V2 References: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> In-Reply-To: <1368631217-15511-1-git-send-email-jbacik@fusionio.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/15/2013 10:20 AM, Josef Bacik wrote: > Dave pointed out that xfs was having issues with 311 because of caching issues. > He suggested that I fsck the dm-flakey device to make sure we don't have this > problem. Make _check_scratch_fs take an optional argument to use as the device > to fsck. Thanks, > > Signed-off-by: Josef Bacik This has been committed: commit a8c25f0702254dfd504a6fa9c9db018729ebec53 Author: Josef Bacik Date: Thu May 16 08:48:03 2013 -0500 xfstests: 311: fsck the dmflakey device instead of the real device Thanks --Rich From jeff.liu@oracle.com Fri May 17 07:04:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A99B57F3F for ; Fri, 17 May 2013 07:04:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8779F30405F for ; Fri, 17 May 2013 05:04:23 -0700 (PDT) X-ASG-Debug-ID: 1368792262-04bdf0422535cb60001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id EKEnAje8nELM3iNw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 05:04:22 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4HC4IU3027654 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 May 2013 12:04:19 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4HC4JZd021969 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 17 May 2013 12:04:20 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4HC4JiW014140; Fri, 17 May 2013 12:04:19 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 17 May 2013 05:04:19 -0700 Message-ID: <51961CB5.4060101@oracle.com> Date: Fri, 17 May 2013 20:04:05 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: "xfs@oss.sgi.com" Subject: Re: [PATCH] xfsprogs: code sync up for log space reservation References: <5195F67F.5070101@oracle.com> <20130517105253.GU24635@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: code sync up for log space reservation In-Reply-To: <20130517105253.GU24635@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368792262 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Dave, On 05/17/2013 06:52 PM, Dave Chinner wrote: > On Fri, May 17, 2013 at 05:21:03PM +0800, Jeff Liu wrote: >> Hello, >> >> Here is a patch to sync up the kernel code changes regarding log space reservation >> to the xfsprogs. >> >> There have a couple of differences between the kernel and the user space. >> 1) A few transaction reservation item related to dquot are not synced because they >> are not being used in xfsprogs. >> 2) In xfs_log_rlimit.c, the xfs_log_validate_logspace() is not copied and the xfs_mkfs.c >> still use the default validate_log_space() to check the given log size. > > Hi Jeff, > > Just as a heads up, this is going to have conflicts with the CRC > patchset that I'm planning on posting in a few minutes. How do you > want to resolve them? > > From my perspective it's easier if we rebase your patch on top of my > patchset. If we go the other way around, I'll have to rebase 10-20 > patches that your patch has conflicts with.... Sure. It's ok to me since I only need to rebase one big patch. :) Thanks, -Jeff From rjohnston@sgi.com Fri May 17 07:17:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 90D0C29DFA for ; Fri, 17 May 2013 07:17:32 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5FC158F8037; Fri, 17 May 2013 05:17:29 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 17 May 2013 07:16:59 -0500 Message-ID: <51961FFB.5040605@sgi.com> Date: Fri, 17 May 2013 07:18:03 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Zheng Liu Subject: Re: [PATCH v2] xfstests: check falloc in 285 References: <1368351729-17778-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368351729-17778-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/12/2013 04:42 AM, Zheng Liu wrote: > From: Zheng Liu > > As linux 3.8, ext4 has supported the seek data/hole operation for > extent-based file and indirect-based file. But for indirect-based file > it can not support the fallocate(2). This causes test 285 to fail since > it assumes that all file systems which supports seek data/hole also > support fallocate. So here we need to check it. > > Signed-off-by: Zheng Liu > Cc: Rich Johnston > --- > tests/generic/285 | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/tests/generic/285 b/tests/generic/285 > index 22b4a08..d1a1baa 100644 > --- a/tests/generic/285 > +++ b/tests/generic/285 > @@ -40,6 +40,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > _supported_fs generic > _supported_os Linux > > +_require_xfs_io_falloc > + > BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile > > [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" > Looks good. Reviewed-by: Rich Johnston From rjohnston@sgi.com Fri May 17 07:19:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D88377F3F for ; Fri, 17 May 2013 07:19:59 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id C253030404E; Fri, 17 May 2013 05:19:59 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 17 May 2013 07:19:31 -0500 Message-ID: <51962091.1090307@sgi.com> Date: Fri, 17 May 2013 07:20:33 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zheng Liu CC: , Zheng Liu Subject: Re: [PATCH v2] xfstests: check falloc in 285 References: <1368351729-17778-1-git-send-email-wenqing.lz@taobao.com> In-Reply-To: <1368351729-17778-1-git-send-email-wenqing.lz@taobao.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/12/2013 04:42 AM, Zheng Liu wrote: > From: Zheng Liu > > As linux 3.8, ext4 has supported the seek data/hole operation for > extent-based file and indirect-based file. But for indirect-based file > it can not support the fallocate(2). This causes test 285 to fail since > it assumes that all file systems which supports seek data/hole also > support fallocate. So here we need to check it. > > Signed-off-by: Zheng Liu Zheng, this has been committed: commit fd0afdb443cae47a3963dd8a23fd9785f1f4aebc Author: Zheng Liu Date: Thu May 16 08:49:03 2013 -0500 xfstests: check falloc in 285 Thanks --Rich From admin@noreply.com Fri May 17 09:40:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=EMAIL_URI_PHISH,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C54097F50 for ; Fri, 17 May 2013 09:40:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 607E9AC001 for ; Fri, 17 May 2013 07:40:51 -0700 (PDT) X-ASG-Debug-ID: 1368801644-04bdf04224365d50001-w1Z2WR Received: from rs7.zol.co.zw (rs7.zol.co.zw [77.245.78.50]) by cuda.sgi.com with ESMTP id k2fZ8Ab5V0hMrMco (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 07:40:45 -0700 (PDT) X-Barracuda-Envelope-From: admin@noreply.com X-Barracuda-Apparent-Source-IP: 77.245.78.50 Received: from rs2.zol.co.zw (rs2.zol.co.zw [196.27.110.35]) by rs7.zol.co.zw (8.13.8/8.13.8) with ESMTP id r4HEegcO025724 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Fri, 17 May 2013 14:40:43 GMT Received: from rs11.zol.co.zw (rs11.zol.co.zw [196.27.100.151]) by rs2.zol.co.zw (8.13.1/8.13.8) with ESMTP id r4HEeNvj008730 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 17 May 2013 14:40:23 GMT Received: from rs11.zol.co.zw (localhost.localdomain [127.0.0.1]) by rs11.zol.co.zw (8.13.8/8.13.8) with ESMTP id r4HEeMB6028700; Fri, 17 May 2013 14:40:22 GMT Received: (from lshttpd@localhost) by rs11.zol.co.zw (8.13.8/8.13.8/Submit) id r4HEeClt028482; Fri, 17 May 2013 14:40:12 GMT Message-Id: <201305171440.r4HEeClt028482@rs11.zol.co.zw> From: "Admin" Date: Fri, 17 May 2013 14:40:12 +0000 To: admin@noreply.com Reply-To: admin@noreply.com Errors-To: admin@noreply.com MIME-Version: 1.0 X-Comment: Charset encoding changed from (utf-8) to (UTF-8) for compatibility with message contents. X-Comment: 52256-2786-4 Subject: Dear Email User Content-Type: multipart/mixed; boundary="------------------_Boundary_2407653.8783467"; charset="utf-8" X-ASG-Orig-Subj: Dear Email User X-sslZOL-Inbound-TLS: 1 X-Barracuda-Connect: rs7.zol.co.zw[77.245.78.50] X-Barracuda-Start-Time: 1368801645 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.42 X-Barracuda-Spam-Status: No, SCORE=1.42 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, FB_MORE_SIZE, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.42 FB_MORE_SIZE BODY: Phrase: more size 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format. If you cannot view the attachment(s), then your email client does not support MIME. --------------------_Boundary_2407653.8783467 Content-Type: multipart/alternative; boundary="-------------8920680.04213881" ---------------8920680.04213881 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Dear Email User, Your mailbox is about exceeding one or more size limit set by your=20 administrator. Pending this Error message, will affect the delivery of=20 incoming message(s) or your sent message will not be delivered. You are advice to re-validate and upgrade your Mailbox, by clicking on=20 below Email validation link to complete the details to upgrade your=20 email. http://mailupgradingpanel.webs.com/ Account may be disabled only if account owner refuses to revalidate and=20 upgrade account within 48hours of receiving this warning. Thank you. Postmaster. ---------------8920680.04213881 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
=0D
=0D
=0D  
=0D
=0D =0D
=0D  
=0D
=0D Dear Email User,
=0D
=0D Your mailbox is about exceeding one or more size limit set by your admini= strator. Pending this Error message, will affect the delivery of incoming m= essage(s) or your sent message will not be delivered.
=0D
=0D You are advice to re-validate and upgrade your Mailbox, by clicking on be= low Email validation link to complete the details to upgrade your email.=0D
=0D http://mailupgradingpanel.webs.com/
=0D
=0D Account may be disabled only if account owner refuses to revalidate and u= pgrade account within 48hours of receiving this warning.
=0D
=0D Thank you.
=0D Postmaster.
=0D
=0D ---------------8920680.04213881-- --------------------_Boundary_2407653.8783467-- From jeff.liu@oracle.com Fri May 17 10:18:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8844D7F3F for ; Fri, 17 May 2013 10:18:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4A623304066 for ; Fri, 17 May 2013 08:18:47 -0700 (PDT) X-ASG-Debug-ID: 1368803925-04bdf04223368c60001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id Bg2HzIdcfbk59eOd (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 08:18:45 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4HFIgb9032290 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 17 May 2013 15:18:43 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4HFIgO6019734 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Fri, 17 May 2013 15:18:43 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4HFIgOQ011707 for ; Fri, 17 May 2013 15:18:42 GMT Received: from [192.168.1.103] (/114.248.194.126) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 17 May 2013 08:18:41 -0700 Message-ID: <51964A4F.3070405@oracle.com> Date: Fri, 17 May 2013 23:18:39 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: Re: [PATCH v2 1/8] xfs: Introduce a new structure to hold transaction reservation items References: <5195C23F.3040406@oracle.com> X-ASG-Orig-Subj: Re: [PATCH v2 1/8] xfs: Introduce a new structure to hold transaction reservation items In-Reply-To: <5195C23F.3040406@oracle.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368803925 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131228 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/17/2013 01:38 PM, Jeff Liu wrote: > From: Jie Liu > > Introduce a new structure xfs_trans_res to hold transaction reservation > item info per log ticket. > > We also need to improve xfs_trans_init() by initializing the log count > as well as log flags for permanent log reservation. > > Signed-off-by: Jie Liu > > --- > fs/xfs/xfs_mount.h | 68 +++++++++++++++++------------ > fs/xfs/xfs_trans.c | 121 ++++++++++++++++++++++++++++++++++++++++------------ > fs/xfs/xfs_trans.h | 67 ++++++++++++++++------------- > 3 files changed, 171 insertions(+), 85 deletions(-) > > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index b004cec..474826e 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -18,35 +18,47 @@ > #ifndef __XFS_MOUNT_H__ > #define __XFS_MOUNT_H__ > > +struct xfs_trans_res { > + uint tr_logres; /* log space unit in bytes per log ticket */ > + int tr_logcount; /* number of log operations per log ticket */ > + int tr_logflags; /* log flags, currently only used for indicating > + * a reservation request is permanent or not */ > +}; > + > typedef struct xfs_trans_reservations { BTW, I'll remove "typedef xfs_trans_reservations_t" in next round post as it is only defined and used in this file. Thanks, -Jeff > - uint tr_write; /* extent alloc trans */ > - uint tr_itruncate; /* truncate trans */ > - uint tr_rename; /* rename trans */ > - uint tr_link; /* link trans */ > - uint tr_remove; /* unlink trans */ > - uint tr_symlink; /* symlink trans */ > - uint tr_create; /* create trans */ > - uint tr_mkdir; /* mkdir trans */ > - uint tr_ifree; /* inode free trans */ > - uint tr_ichange; /* inode update trans */ > - uint tr_growdata; /* fs data section grow trans */ > - uint tr_swrite; /* sync write inode trans */ > - uint tr_addafork; /* cvt inode to attributed trans */ > - uint tr_writeid; /* write setuid/setgid file */ > - uint tr_attrinval; /* attr fork buffer invalidation */ > - uint tr_attrsetm; /* set/create an attribute at mount time */ > - uint tr_attrsetrt; /* set/create an attribute at runtime */ > - uint tr_attrrm; /* remove an attribute */ > - uint tr_clearagi; /* clear bad agi unlinked ino bucket */ > - uint tr_growrtalloc; /* grow realtime allocations */ > - uint tr_growrtzero; /* grow realtime zeroing */ > - uint tr_growrtfree; /* grow realtime freeing */ > - uint tr_qm_sbchange; /* change quota flags */ > - uint tr_qm_setqlim; /* adjust quota limits */ > - uint tr_qm_dqalloc; /* allocate quota on disk */ > - uint tr_qm_quotaoff; /* turn quota off */ > - uint tr_qm_equotaoff;/* end of turn quota off */ > - uint tr_sb; /* modify superblock */ > + struct xfs_trans_res tr_write; /* extent alloc trans */ > + struct xfs_trans_res tr_itruncate; /* truncate trans */ > + struct xfs_trans_res tr_rename; /* rename trans */ > + struct xfs_trans_res tr_link; /* link trans */ > + struct xfs_trans_res tr_remove; /* unlink trans */ > + struct xfs_trans_res tr_symlink; /* symlink trans */ > + struct xfs_trans_res tr_create; /* create trans */ > + struct xfs_trans_res tr_mkdir; /* mkdir trans */ > + struct xfs_trans_res tr_ifree; /* inode free trans */ > + struct xfs_trans_res tr_ichange; /* inode update trans */ > + struct xfs_trans_res tr_growdata; /* fs data section grow trans */ > + struct xfs_trans_res tr_swrite; /* sync write inode trans */ > + struct xfs_trans_res tr_addafork; /* cvt inode to attributed > + * trans */ > + struct xfs_trans_res tr_writeid; /* write setuid/setgid file */ > + struct xfs_trans_res tr_attrinval; /* attr fork buffer > + * invalidation */ > + struct xfs_trans_res tr_attrsetm; /* set/create an attribute at > + * mount time */ > + struct xfs_trans_res tr_attrsetrt; /* set/create an attribute at > + * runtime */ > + struct xfs_trans_res tr_attrrm; /* remove an attribute */ > + struct xfs_trans_res tr_clearagi; /* clear bad agi unlinked ino > + * bucket */ > + struct xfs_trans_res tr_growrtalloc; /* grow realtime allocations */ > + struct xfs_trans_res tr_growrtzero; /* grow realtime zeroing */ > + struct xfs_trans_res tr_growrtfree; /* grow realtime freeing */ > + struct xfs_trans_res tr_qm_sbchange; /* change quota flags */ > + struct xfs_trans_res tr_qm_setqlim; /* adjust quota limits */ > + struct xfs_trans_res tr_qm_dqalloc; /* allocate quota on disk */ > + struct xfs_trans_res tr_qm_quotaoff; /* turn quota off */ > + struct xfs_trans_res tr_qm_equotaoff;/* end of turn quota off */ > + struct xfs_trans_res tr_sb; /* modify superblock */ > } xfs_trans_reservations_t; > > #ifndef __KERNEL__ > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > index 2fd7c1f..8f38901 100644 > --- a/fs/xfs/xfs_trans.c > +++ b/fs/xfs/xfs_trans.c > @@ -645,34 +645,99 @@ xfs_trans_init( > { > struct xfs_trans_reservations *resp = &mp->m_reservations; > > - resp->tr_write = xfs_calc_write_reservation(mp); > - resp->tr_itruncate = xfs_calc_itruncate_reservation(mp); > - resp->tr_rename = xfs_calc_rename_reservation(mp); > - resp->tr_link = xfs_calc_link_reservation(mp); > - resp->tr_remove = xfs_calc_remove_reservation(mp); > - resp->tr_symlink = xfs_calc_symlink_reservation(mp); > - resp->tr_create = xfs_calc_create_reservation(mp); > - resp->tr_mkdir = xfs_calc_mkdir_reservation(mp); > - resp->tr_ifree = xfs_calc_ifree_reservation(mp); > - resp->tr_ichange = xfs_calc_ichange_reservation(mp); > - resp->tr_growdata = xfs_calc_growdata_reservation(mp); > - resp->tr_swrite = xfs_calc_swrite_reservation(mp); > - resp->tr_writeid = xfs_calc_writeid_reservation(mp); > - resp->tr_addafork = xfs_calc_addafork_reservation(mp); > - resp->tr_attrinval = xfs_calc_attrinval_reservation(mp); > - resp->tr_attrsetm = xfs_calc_attrsetm_reservation(mp); > - resp->tr_attrsetrt = xfs_calc_attrsetrt_reservation(mp); > - resp->tr_attrrm = xfs_calc_attrrm_reservation(mp); > - resp->tr_clearagi = xfs_calc_clear_agi_bucket_reservation(mp); > - resp->tr_growrtalloc = xfs_calc_growrtalloc_reservation(mp); > - resp->tr_growrtzero = xfs_calc_growrtzero_reservation(mp); > - resp->tr_growrtfree = xfs_calc_growrtfree_reservation(mp); > - resp->tr_qm_sbchange = xfs_calc_qm_sbchange_reservation(mp); > - resp->tr_qm_setqlim = xfs_calc_qm_setqlim_reservation(mp); > - resp->tr_qm_dqalloc = xfs_calc_qm_dqalloc_reservation(mp); > - resp->tr_qm_quotaoff = xfs_calc_qm_quotaoff_reservation(mp); > - resp->tr_qm_equotaoff = xfs_calc_qm_quotaoff_end_reservation(mp); > - resp->tr_sb = xfs_calc_sb_reservation(mp); > + /* > + * The following transactions are logged in physical format and > + * require a permanent reservation on space. > + */ > + resp->tr_write.tr_logres = xfs_calc_write_reservation(mp); > + resp->tr_write.tr_logcount = XFS_WRITE_LOG_COUNT; > + resp->tr_write.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_itruncate.tr_logres = xfs_calc_itruncate_reservation(mp); > + resp->tr_itruncate.tr_logcount = XFS_ITRUNCATE_LOG_COUNT; > + resp->tr_itruncate.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_rename.tr_logres = xfs_calc_rename_reservation(mp); > + resp->tr_rename.tr_logcount = XFS_RENAME_LOG_COUNT; > + resp->tr_rename.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_link.tr_logres = xfs_calc_link_reservation(mp); > + resp->tr_link.tr_logcount = XFS_LINK_LOG_COUNT; > + resp->tr_link.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_remove.tr_logres = xfs_calc_remove_reservation(mp); > + resp->tr_remove.tr_logcount = XFS_REMOVE_LOG_COUNT; > + resp->tr_remove.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_symlink.tr_logres = xfs_calc_symlink_reservation(mp); > + resp->tr_symlink.tr_logcount = XFS_SYMLINK_LOG_COUNT; > + resp->tr_symlink.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_create.tr_logres = xfs_calc_create_reservation(mp); > + resp->tr_create.tr_logcount = XFS_CREATE_LOG_COUNT; > + resp->tr_create.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_mkdir.tr_logres = xfs_calc_mkdir_reservation(mp); > + resp->tr_mkdir.tr_logcount = XFS_MKDIR_LOG_COUNT; > + resp->tr_mkdir.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_ifree.tr_logres = xfs_calc_ifree_reservation(mp); > + resp->tr_ifree.tr_logcount = XFS_INACTIVE_LOG_COUNT; > + resp->tr_ifree.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_addafork.tr_logres = xfs_calc_addafork_reservation(mp); > + resp->tr_addafork.tr_logcount = XFS_ADDAFORK_LOG_COUNT; > + resp->tr_addafork.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_attrinval.tr_logres = xfs_calc_attrinval_reservation(mp); > + resp->tr_attrinval.tr_logcount = XFS_ATTRINVAL_LOG_COUNT; > + resp->tr_attrinval.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_attrsetm.tr_logres = xfs_calc_attrsetm_reservation(mp); > + resp->tr_attrsetm.tr_logcount = XFS_ATTRSET_LOG_COUNT; > + resp->tr_attrsetm.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_attrrm.tr_logres = xfs_calc_attrrm_reservation(mp); > + resp->tr_attrrm.tr_logcount = XFS_ATTRRM_LOG_COUNT; > + resp->tr_attrrm.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_growrtalloc.tr_logres = xfs_calc_growrtalloc_reservation(mp); > + resp->tr_growrtalloc.tr_logcount = XFS_DEFAULT_PERM_LOG_COUNT; > + resp->tr_growrtalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + resp->tr_qm_dqalloc.tr_logres = xfs_calc_qm_dqalloc_reservation(mp); > + resp->tr_qm_dqalloc.tr_logcount = XFS_WRITE_LOG_COUNT; > + resp->tr_qm_dqalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES; > + > + /* > + * The following transactions are logged in logical format with > + * a default log count. > + */ > + resp->tr_qm_sbchange.tr_logres = xfs_calc_qm_sbchange_reservation(mp); > + resp->tr_qm_sbchange.tr_logcount = XFS_DEFAULT_LOG_COUNT; > + > + resp->tr_qm_setqlim.tr_logres = xfs_calc_qm_setqlim_reservation(mp); > + resp->tr_qm_setqlim.tr_logcount = XFS_DEFAULT_LOG_COUNT; > + > + resp->tr_qm_quotaoff.tr_logres = xfs_calc_qm_quotaoff_reservation(mp); > + resp->tr_qm_quotaoff.tr_logcount = XFS_DEFAULT_LOG_COUNT; > + > + resp->tr_qm_equotaoff.tr_logres = > + xfs_calc_qm_quotaoff_end_reservation(mp); > + resp->tr_qm_equotaoff.tr_logcount = XFS_DEFAULT_LOG_COUNT; > + > + resp->tr_sb.tr_logres = xfs_calc_sb_reservation(mp); > + resp->tr_sb.tr_logcount = XFS_DEFAULT_LOG_COUNT; > + > + /* The following transaction are logged in logical format */ > + resp->tr_ichange.tr_logres = xfs_calc_ichange_reservation(mp); > + resp->tr_growdata.tr_logres = xfs_calc_growdata_reservation(mp); > + resp->tr_swrite.tr_logres = xfs_calc_swrite_reservation(mp); > + resp->tr_writeid.tr_logres = xfs_calc_writeid_reservation(mp); > + resp->tr_attrsetrt.tr_logres = xfs_calc_attrsetrt_reservation(mp); > + resp->tr_clearagi.tr_logres = xfs_calc_clear_agi_bucket_reservation(mp); > + resp->tr_growrtzero.tr_logres = xfs_calc_growrtzero_reservation(mp); > + resp->tr_growrtfree.tr_logres = xfs_calc_growrtfree_reservation(mp); > } > > /* > diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h > index a44dba5..15a6031 100644 > --- a/fs/xfs/xfs_trans.h > +++ b/fs/xfs/xfs_trans.h > @@ -232,39 +232,48 @@ struct xfs_log_item_desc { > XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1) > > > -#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write) > -#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate) > -#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename) > -#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link) > -#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove) > -#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink) > -#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create) > -#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir) > -#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree) > -#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange) > -#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata) > -#define XFS_GROWRTALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_growrtalloc) > -#define XFS_GROWRTZERO_LOG_RES(mp) ((mp)->m_reservations.tr_growrtzero) > -#define XFS_GROWRTFREE_LOG_RES(mp) ((mp)->m_reservations.tr_growrtfree) > -#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) > +#define XFS_WRITE_LOG_RES(mp) ((mp)->m_reservations.tr_write.tr_logres) > +#define XFS_RENAME_LOG_RES(mp) ((mp)->m_reservations.tr_rename.tr_logres) > +#define XFS_LINK_LOG_RES(mp) ((mp)->m_reservations.tr_link.tr_logres) > +#define XFS_REMOVE_LOG_RES(mp) ((mp)->m_reservations.tr_remove.tr_logres) > +#define XFS_SYMLINK_LOG_RES(mp) ((mp)->m_reservations.tr_symlink.tr_logres) > +#define XFS_CREATE_LOG_RES(mp) ((mp)->m_reservations.tr_create.tr_logres) > +#define XFS_MKDIR_LOG_RES(mp) ((mp)->m_reservations.tr_mkdir.tr_logres) > +#define XFS_IFREE_LOG_RES(mp) ((mp)->m_reservations.tr_ifree.tr_logres) > +#define XFS_ICHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_ichange.tr_logres) > +#define XFS_GROWDATA_LOG_RES(mp) ((mp)->m_reservations.tr_growdata.tr_logres) > +#define XFS_ITRUNCATE_LOG_RES(mp) ((mp)->m_reservations.tr_itruncate.tr_logres) > +#define XFS_GROWRTALLOC_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_growrtalloc.tr_logres) > +#define XFS_GROWRTZERO_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_growrtzero.tr_logres) > +#define XFS_GROWRTFREE_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_growrtfree.tr_logres) > +#define XFS_SWRITE_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) > /* > * Logging the inode timestamps on an fsync -- same as SWRITE > * as long as SWRITE logs the entire inode core > */ > -#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) > -#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite) > -#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork) > -#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval) > -#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm) > -#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt) > -#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm) > -#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp) ((mp)->m_reservations.tr_clearagi) > -#define XFS_QM_SBCHANGE_LOG_RES(mp) ((mp)->m_reservations.tr_qm_sbchange) > -#define XFS_QM_SETQLIM_LOG_RES(mp) ((mp)->m_reservations.tr_qm_setqlim) > -#define XFS_QM_DQALLOC_LOG_RES(mp) ((mp)->m_reservations.tr_qm_dqalloc) > -#define XFS_QM_QUOTAOFF_LOG_RES(mp) ((mp)->m_reservations.tr_qm_quotaoff) > -#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) ((mp)->m_reservations.tr_qm_equotaoff) > -#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb) > +#define XFS_FSYNC_TS_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) > +#define XFS_WRITEID_LOG_RES(mp) ((mp)->m_reservations.tr_swrite.tr_logres) > +#define XFS_ADDAFORK_LOG_RES(mp) ((mp)->m_reservations.tr_addafork.tr_logres) > +#define XFS_ATTRSETM_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetm.tr_logres) > +#define XFS_ATTRINVAL_LOG_RES(mp) ((mp)->m_reservations.tr_attrinval.tr_logres) > +#define XFS_ATTRSETRT_LOG_RES(mp) ((mp)->m_reservations.tr_attrsetrt.tr_logres) > +#define XFS_ATTRRM_LOG_RES(mp) ((mp)->m_reservations.tr_attrrm.tr_logres) > +#define XFS_SB_LOG_RES(mp) ((mp)->m_reservations.tr_sb.tr_logres) > +#define XFS_CLEAR_AGI_BUCKET_LOG_RES(mp)\ > + ((mp)->m_reservations.tr_clearagi.tr_logres) > +#define XFS_QM_SBCHANGE_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_qm_sbchange.tr_logres) > +#define XFS_QM_SETQLIM_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_qm_setqlim.tr_logres) > +#define XFS_QM_DQALLOC_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_qm_dqalloc.tr_logres) > +#define XFS_QM_QUOTAOFF_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_qm_quotaoff.tr_logres) > +#define XFS_QM_QUOTAOFF_END_LOG_RES(mp) \ > + ((mp)->m_reservations.tr_qm_equotaoff.tr_logres) > > /* > * Various log count values. > From bpm@sgi.com Fri May 17 10:44:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 69C9D7F4C for ; Fri, 17 May 2013 10:44:40 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id A5C5BAC007; Fri, 17 May 2013 08:44:36 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 4996E500B50; Fri, 17 May 2013 10:44:36 -0500 (CDT) Date: Fri, 17 May 2013 10:44:36 -0500 From: Ben Myers To: Christian Kujau Cc: jfs-discussion@lists.sourceforge.net, linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org, reiserfs-devel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: xattr performance Message-ID: <20130517154436.GW29359@sgi.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) Hey Christian, On Fri, May 17, 2013 at 05:02:21AM -0700, Christian Kujau wrote: > a while ago I was setting & reading extended attributes to ~25000 files > in a directory structure on an XFS filesystem. The files were usually a > few MB in size, but some where up to 2GB in size. > > Anyway, I *felt* that setting or reading these xattrs was going very > slowly. While the storage may be not the fastest, stat()'ing these > files was fine, but getfattr/setfattr took very long. > > I got curious and while it turned out that the slowness was related to the > wrapper script I used to read/set those values, I created a little test > suite to 1) create a few thousand files and 2) do xattr operations on > them and see if xattr performance was filesystem specific: > > http://nerdbynature.de/bits/xattr/ > > Not very sophisticated, true. But it was interesting to see that > ext3/ext4/xfs behaved kinda well for all these tests; btrfs/jfs/reiserfs > sometimes took way longer than the others. Very interesting results! One wrinkle that you might want to consider with XFS is the overall size of the attributes versus the size of the inode. You can choose inode sizes between 256 bytes and 2k in powers of two, and we always allocate them in chunks of 64. The 'literal' area is the space after the inode core and before the next one... it's best described here: http://xfs.org/docs/xfsdocs-xml-dev/XFS_Filesystem_Structure//tmp/en-US/html/On-disk_Inode.html The short version: inode core (96 bytes) + literal area == inode size The data and attribute forks share the literal area. If the attributes get too big to fit inside the literal area with the data fork they will go out of line and be stored elsewhere in the filesystem. The performance characteristics of inline vs out-of-line attributes are significantly different. That might be what you experienced when you felt that setting/reading xattrs was taking a long time. Anyway... If you're a heavy user of EAs you might benefit from using larger inodes. Just something to consider. Cool tests! ;) Regards, Ben From kdasu.kdev@gmail.com Fri May 17 11:17:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,LOTS_OF_MONEY, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 881C07F3F for ; Fri, 17 May 2013 11:17:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 11B80AC005 for ; Fri, 17 May 2013 09:17:06 -0700 (PDT) X-ASG-Debug-ID: 1368807420-04cb6c10c205ec0001-NocioJ Received: from mail-vc0-f176.google.com (mail-vc0-f176.google.com [209.85.220.176]) by cuda.sgi.com with ESMTP id UO9enYdztnckQbrC (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 09:17:00 -0700 (PDT) X-Barracuda-Envelope-From: kdasu.kdev@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.176 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.176] Received: by mail-vc0-f176.google.com with SMTP id ha11so711759vcb.7 for ; Fri, 17 May 2013 09:17:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.176] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.176] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=d2L/f2imvKgpyajqEf1PEahpKD5qFxK7znK+5Tyn6wY=; b=NyK9Oh5qg5bF0VKXJsUeHh9IRntgRV3H2ebd0mO59HShxFdmhU/LakVyvZWHxrGq6P lxchf4W01U51qYo00Bl+piWh0N2nCsV6mDArsYUCKXGbmRs6chcGyHBHVU4a5P7G/T/1 q6J7sV1y7eX8gjzMtXM+/TUWtS15QSDSGRBkW3x3ZOtTN860Inq4nA8gmApwhyX0tHB/ AUJw6xg2K5M828vjlhPMS1PowqWWLP1baZrYg4h9AW4faIcQ0DcHtigwGGrQknrcy25o lYrLEm03jeqv6blJLAwOwf92aph27tJELhyO9FTts90covWE8DftbXfXTEqr7yywIPwX iJ/w== MIME-Version: 1.0 X-Received: by 10.220.223.14 with SMTP id ii14mr30429107vcb.50.1368807420130; Fri, 17 May 2013 09:17:00 -0700 (PDT) Received: by 10.220.159.143 with HTTP; Fri, 17 May 2013 09:17:00 -0700 (PDT) Date: Fri, 17 May 2013 12:17:00 -0400 Message-ID: Subject: Kernel 3.3 XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0 From: Kamal Dasu X-ASG-Orig-Subj: Kernel 3.3 XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0 To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-vc0-f176.google.com[209.85.220.176] X-Barracuda-Start-Time: 1368807420 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131232 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi, obsering kernel 3.3. instability with When writing 3 realtime and 1 regular file on disk simultaneously (sync is blocking function). the rcu stall detection kicks in every time when 3rd-4th attempt. Just wanted understand the root cause of the problem This ithe info on the stack dumps without xfs debug and with cxfs debug enabled repectively. /dev/sda1 is XFS real time partition /dev/sda2 is XFS non-real time partition. count=1; while [ 1 ];do #create file on disk /dev/sda1 (-R realtime) xfs_io -c open -f -R "/opt/corefiles/$count" -c "pwrite 0 20000000" -c close >> /dev/null & let a=$count%3; if [ $a -eq 0 ]; then let count+=1; #create file on disk /dev/sda2 xfs_io -c open -f "/opt/corefiles/$count" -c "pwrite 0 200000" -c close >> /dev/null & echo "sync"; sync /opt; fi; let count+=1; done Oops Log: # ./xfs.sh sync INFO: rcu_sched detected stall on CPU 0 (t=60000 jiffies) Call Trace: [<805d3814>] dump_stack+0x8/0x34 [<80084398>] __rcu_pending+0x260/0x4c4 [<80084f00>] rcu_check_callbacks+0x118/0x180 [<80034ea0>] update_process_times+0x40/0x6c [<8006e324>] tick_sched_timer+0x74/0xe4 [<8004cc50>] __run_hrtimer.clone.30+0x64/0x140 [<8004dc20>] hrtimer_interrupt+0x19c/0x4bc [<8000bff8>] c0_compare_interrupt+0x50/0x88 [<8007c678>] handle_irq_event_percpu+0x5c/0x234 [<80080a74>] handle_percpu_irq+0x8c/0xc0 [<8007bd14>] generic_handle_irq+0x34/0x54 [<80006084>] do_IRQ+0x18/0x24 [<800034a4>] plat_irq_dispatch+0xd0/0x128 [<80004364>] ret_from_irq+0x0/0x4 [<8028b1c0>] xfs_inode_item_format_extents+0x1c/0xf0 [<8028b5a0>] xfs_inode_item_format+0x30c/0x320 [<80288fcc>] xfs_log_commit_cil+0xe0/0x564 [<8028346c>] xfs_trans_commit+0x148/0x2d0 [<8022ad40>] xfs_iomap_write_allocate+0x1b0/0x560 [<8021c12c>] xfs_map_blocks+0x224/0x278 [<8021d3d8>] xfs_vm_writepage+0x240/0x6ec [<80092690>] __writepage+0x18/0xc8 [<80092ae0>] write_cache_pages+0x264/0x4c0 [<80092d84>] generic_writepages+0x48/0x84 [<800f0234>] writeback_single_inode+0x160/0x390 [<800f08c4>] writeback_sb_inodes+0x1c0/0x2a4 [<800f0f08>] __writeback_inodes_wb+0xbc/0x114 [<800f132c>] wb_writeback+0x204/0x20c [<800f1cb4>] wb_do_writeback+0x29c/0x2a4 [<800f1d64>] bdi_writeback_thread+0xa8/0x1ac [<80047d0c>] kthread+0x90/0x98 [<8000636c>] kernel_thread_helper+0x10/0x18 INFO: rcu_sched detected stall on CPU 0 (t=240030 jiffies) Call Trace: [<805d3814>] dump_stack+0x8/0x34 [<80084398>] __rcu_pending+0x260/0x4c4 [<80084f00>] rcu_check_callbacks+0x118/0x180 [<80034ea0>] update_process_times+0x40/0x6c [<8006e324>] tick_sched_timer+0x74/0xe4 [<8004cc50>] __run_hrtimer.clone.30+0x64/0x140 [<8004dc20>] hrtimer_interrupt+0x19c/0x4bc [<8000bff8>] c0_compare_interrupt+0x50/0x88 [<8007c678>] handle_irq_event_percpu+0x5c/0x234 [<80080a74>] handle_percpu_irq+0x8c/0xc0 [<8007bd14>] generic_handle_irq+0x34/0x54 [<80006084>] do_IRQ+0x18/0x24 [<800034a4>] plat_irq_dispatch+0xd0/0x128 [<80004364>] ret_from_irq+0x0/0x4 [<802c7c88>] arch_local_irq_restore+0x18/0x30 [<800c2b7c>] kmem_cache_alloc+0x78/0xd0 [<80238a40>] kmem_zone_alloc+0xa4/0x130 [<80238ae4>] kmem_zone_zalloc+0x18/0x54 [<80282f08>] xfs_trans_add_item+0x28/0x64 [<8028c98c>] _xfs_trans_bjoin+0x6c/0xcc [<8028cddc>] xfs_trans_read_buf+0x234/0x304 [<8028d638>] xfs_rtbuf_get+0x148/0x168 [<8028df10>] xfs_rtmodify_summary+0x94/0x124 [<8028ed28>] xfs_rtallocate_range+0x180/0x328 [<8028f748>] xfs_rtallocate_extent_exact+0xc4/0x158 [<80290054>] xfs_rtallocate_extent_near+0xb0/0x448 [<80290ce4>] xfs_rtallocate_extent+0x1c8/0x1fc [<8024a9fc>] xfs_bmap_rtalloc+0x1bc/0x3f8 [<8024df20>] xfs_bmapi_allocate+0xec/0x354 [<8025139c>] xfs_bmapi_write+0x264/0x82c [<8022ad18>] xfs_iomap_write_allocate+0x188/0x560 [<8021c12c>] xfs_map_blocks+0x224/0x278 [<8021d3d8>] xfs_vm_writepage+0x240/0x6ec [<80092690>] __writepage+0x18/0xc8 [<80092ae0>] write_cache_pages+0x264/0x4c0 [<80092d84>] generic_writepages+0x48/0x84 [<800f0234>] writeback_single_inode+0x160/0x390 [<800f08c4>] writeback_sb_inodes+0x1c0/0x2a4 [<800f0f08>] __writeback_inodes_wb+0xbc/0x114 [<800f132c>] wb_writeback+0x204/0x20c [<800f1cb4>] wb_do_writeback+0x29c/0x2a4 [<800f1d64>] bdi_writeback_thread+0xa8/0x1ac [<80047d0c>] kthread+0x90/0x98 [<8000636c>] kernel_thread_helper+0x10/0x18 With the xfs debug enabled this is the assert I get : XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0, file: fs/xfs/xfs_bmap.c, line: 5203 Kernel bug detected[#1]: Cpu 0 $ 0 : 00000000 30008700 00000062 806b9dc4 $ 4 : 30008701 30008701 00000266 8032b24c $ 8 : 00000010 00000002 00000001 00000000 $12 : 00000102 000003ff 00000000 00000000 $16 : 00000000 00000000 00001fff cf9b1300 $20 : 00001313 cf7dc000 cf76e420 00000002 $24 : 00000010 8032a9d0 $28 : cf672000 cf673c50 806416c8 80230718 Hi : 00000000 Lo : b0f9b000 epc : 80230718 assfail+0x28/0x2c Not tainted ra : 80230718 assfail+0x28/0x2c Status: 30008703 KERNEL EXL IE Cause : 00800024 PrId : 00025a11 (Broadcom BMIPS5000) Modules linked in: Process xfs_io (pid: 602, threadinfo=cf672000, task=cfcba9d8, tls=7729f460) Stack : 817bc3a0 00000000 80642b64 806416c8 00001453 00000000 00000000 8025ab7c 00000d00 00000d00 cf76e400 00000000 00000000 cf673c9c cf673ca0 cf673cd8 cf673cf8 cf673d6c 00000000 00000001 00000002 00000000 cf673d98 80250778 ffffff83 000003ff 00001313 00000000 fffe0015 000fffff 00000ced 00000000 00000000 8023b9c4 00001000 00000000 fffe0015 000fffff 00001000 00000000 ... Call Trace: [<80230718>] assfail+0x28/0x2c [<8025ab7c>] xfs_bunmapi+0xcb8/0x12f8 [<80285144>] xfs_itruncate_extents+0x290/0x488 [<80237200>] xfs_free_eofblocks+0x2d4/0x354 [<80237c50>] xfs_release+0x1b8/0x294 [<80222fb0>] xfs_file_release+0x10/0x20 [<800c8978>] fput+0x104/0x288 [<800c3a50>] filp_close+0x6c/0xa0 [<800c3b50>] sys_close+0xcc/0x12c [<8000db5c>] stack_done+0x20/0x40 Code: afbf001c 0c08c0f6 00403021 <0200000d> 27bdffd8 afa40014 afa50018 3c04 8064 3c058062 ---[ end trace 8e5cc13475cfce38 ]--- Thank You Kamal From endries@cs.cornell.edu Fri May 17 11:36:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5AE377F3F for ; Fri, 17 May 2013 11:36:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3A63830407F for ; Fri, 17 May 2013 09:36:35 -0700 (PDT) X-ASG-Debug-ID: 1368808590-04bdf0422336ee10001-NocioJ Received: from limestone3.mail.cornell.edu (limestone3.mail.cornell.edu [128.253.83.163]) by cuda.sgi.com with ESMTP id ZWBh7nZOehRIZCIG for ; Fri, 17 May 2013 09:36:30 -0700 (PDT) X-Barracuda-Envelope-From: endries@cs.cornell.edu X-Barracuda-Apparent-Source-IP: 128.253.83.163 X-CornellRouted: This message has been Routed already. Received: from alva02.serverfarm.cornell.edu (alva02.serverfarm.cornell.edu [128.84.106.39]) by limestone3.mail.cornell.edu (8.14.4/8.14.4) with ESMTP id r4HGaOj6028486 for ; Fri, 17 May 2013 12:36:25 -0400 (EDT) Received: from sf-en-pub-002.serverfarm.cornell.edu (sf-en-pub-002.serverfarm.cornell.edu [132.236.207.16]) by alva02.serverfarm.cornell.edu (8.14.4/8.14.4) with ESMTP id r4HGaTZg019798 for ; Fri, 17 May 2013 12:36:29 -0400 Received: from sf-en-pub-002.serverfarm.cornell.edu (localhost [127.0.0.1]) by sf-en-pub-002.serverfarm.cornell.edu (Postfix) with ESMTP id 1D75D420A7 for ; Fri, 17 May 2013 12:36:29 -0400 (EDT) Received: from sf-en-pub-002.serverfarm.cornell.edu (localhost [127.0.0.1]) by sf-en-pub-002.serverfarm.cornell.edu (Postfix) with ESMTP id 11FF641F8A for ; Fri, 17 May 2013 12:36:29 -0400 (EDT) Date: Fri, 17 May 2013 12:36:29 -0400 (EDT) From: Josh Endries To: xfs@oss.sgi.com Message-ID: <731755347.10846.1368808589019.JavaMail.root@coecis.cornell.edu> In-Reply-To: <1601451892.10839.1368808313900.JavaMail.root@coecis.cornell.edu> Subject: Crash recovery/zero-byte file question MIME-Version: 1.0 X-ASG-Orig-Subj: Crash recovery/zero-byte file question Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [128.253.159.21] X-Mailer: Zimbra 8.0.2_GA_5569 (ZimbraWebClient - FF20 (Win)/8.0.2_GA_5569) Thread-Topic: Crash recovery/zero-byte file question Thread-Index: klJKOiN4NXqopKgKMn/7I6+eee6hmw== X-PMX-CORNELL: Alva02 X-Barracuda-Connect: limestone3.mail.cornell.edu[128.253.83.163] X-Barracuda-Start-Time: 1368808590 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131234 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hello, We have a RHEL 6.3 machine with a large XFS mount that suffered a power outage. When it came back up, it allegedly fixed itself, but now many files are zero bytes. I found a bug report/errata fix at RH that mentions something similar, which might be what we ran into. We are running a kernel that should have the fix as far as I can tell, but we definitely have zero byte files that shouldn't be. My question is: is there a way to restore this or fix it before going to backups? Is it worth it to unmount and run xfs_check or similar? Unfortunately, since the system came up and appeared to be working, some users have been using that mount point. Thanks, Josh From mlsemon35@gmail.com Fri May 17 14:31:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DA4EC7F3F for ; Fri, 17 May 2013 14:31:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id CA69630407B for ; Fri, 17 May 2013 12:31:35 -0700 (PDT) X-ASG-Debug-ID: 1368819091-04cb6c10c214760001-NocioJ Received: from mail-ie0-f179.google.com (mail-ie0-f179.google.com [209.85.223.179]) by cuda.sgi.com with ESMTP id bD6r7IeEHV8OnnRw (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 12:31:32 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] Received: by mail-ie0-f179.google.com with SMTP id c13so10032134ieb.38 for ; Fri, 17 May 2013 12:31:31 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=mHola31Hw/CUncc6pjlZzACwYms20E/mr5Gi3GC+30g=; b=XIr1yOEsJrbwmr0LEpuThitQNXZNDRQxoxeBb6nKGEYLop94CWZkMsu+aCvgl1Pf8t 20iw89gdl2Yva/XC1gfxDuDwIcT5RllYd9EsxgDxa0JC2+zqVPDcR7bfKhX0C33IZRlg XfkpRUIs/ieuZS4xWGztPoXr6mCacgwb0tW8SyqNEbpMo2+4KfNE7ldXNx8GPyG0V8AG SPGT45f58rF4RhQMW60ir1DiKVmr4ZBhfmq4WbA/M5tl8lw64B/HiiAqqIrtI9cSwstO OJ+qC9qzNrNBOD5Jjk2rM0/urJlr/EGpgl6fvjejG+B8a9GwAzWcjQ7nPl6/iRy6ULR8 4ddQ== X-Received: by 10.50.45.97 with SMTP id l1mr13587851igm.99.1368819091638; Fri, 17 May 2013 12:31:31 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id xf4sm11001907igb.8.2013.05.17.12.31.24 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 17 May 2013 12:31:30 -0700 (PDT) Message-ID: <51968577.2070603@gmail.com> Date: Fri, 17 May 2013 15:31:03 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jeff Liu CC: "xfs@oss.sgi.com" Subject: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] References: <5195C279.3060502@oracle.com> <5195EC13.2060502@gmail.com> <5195FB1B.9000803@oracle.com> X-ASG-Orig-Subj: Re: [PATCH v2 7/8] xfs: Add xfs_log_rlimit.[c|h] In-Reply-To: <5195FB1B.9000803@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f179.google.com[209.85.223.179] X-Barracuda-Start-Time: 1368819091 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131246 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) On 05/17/2013 05:40 AM, Jeff Liu wrote: > Hi Michael, > > Are you compiling kernel on 32-bit system? Yes, this is a 32-bit Pentium 4 system. > Looks this issue is regarding 64-bit division at roundup() on 32-bit if so. > > Could you please try below fix? > > diff --git a/fs/xfs/xfs_log_rlimit.c b/fs/xfs/xfs_log_rlimit.c > index 3e84d46..49a88cc 100644 > --- a/fs/xfs/xfs_log_rlimit.c > +++ b/fs/xfs/xfs_log_rlimit.c > @@ -127,7 +127,7 @@ xfs_log_validate_logspace( > * Also, the log size should be a multiple of the log stripe unit, round > * it up to lsunit boundary if lsunit is specified. > */ > - minlblks = lsunit ? (roundup(BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : > + minlblks = lsunit ? (roundup((int)BTOBB(maxlres), lsunit) + 2 * lsunit) * 2 : > BTOBB(maxlres) * 2; > > if (log->l_logBBsize < minlblks) { > > > Thanks, > -Jeff This code works, and my sysadmin-hack use of "const" was not needed after all. If you use Dave's suggestion to use roundup_64(), I'll be happy to apply another patch. Thanks! Michael From lists@nerdbynature.de Fri May 17 15:09:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 86EC37F3F for ; Fri, 17 May 2013 15:09:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 10327AC001 for ; Fri, 17 May 2013 13:09:42 -0700 (PDT) X-ASG-Debug-ID: 1368821380-04bdf0422637fbf0001-NocioJ Received: from trent.utfs.org (trent.utfs.org [94.185.90.103]) by cuda.sgi.com with ESMTP id 4BguFYEXyPEZLGLC for ; Fri, 17 May 2013 13:09:41 -0700 (PDT) X-Barracuda-Envelope-From: lists@nerdbynature.de X-Barracuda-Apparent-Source-IP: 94.185.90.103 Received: by trent.utfs.org (Postfix, from userid 8) id 80D893DDBB; Fri, 17 May 2013 22:09:40 +0200 (CEST) Received: from trent.utfs.org (localhost [127.0.0.1]) by trent.utfs.org (Postfix) with ESMTP id 6E2E83DB67; Fri, 17 May 2013 22:09:39 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by trent.utfs.org (Postfix) with ESMTP id 52DCF3DABB; Fri, 17 May 2013 22:09:39 +0200 (CEST) Date: Fri, 17 May 2013 13:09:39 -0700 (PDT) From: Christian Kujau To: Ben Myers cc: jfs-discussion@lists.sourceforge.net, linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org, reiserfs-devel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: xattr performance In-Reply-To: <20130517154436.GW29359@sgi.com> X-ASG-Orig-Subj: Re: xattr performance Message-ID: References: <20130517154436.GW29359@sgi.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-AV-Checked: ClamAV using ClamSMTP (127.0.0.1) X-Barracuda-Connect: trent.utfs.org[94.185.90.103] X-Barracuda-Start-Time: 1368821381 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131248 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, 17 May 2013 at 10:44, Ben Myers wrote: > The short version: > inode core (96 bytes) + literal area == inode size Ah, yes indeed. I had another issue earlier on the same filesystem and Christoph told me[0] that I may have run out of inode attributes. xfs_info reports isize=256 for this filesystem and now that I'm using xattr even more (I'm storing sha256 checksum plus the filename in each file's xattr) this looks like it might exceed the literal area after all. > Anyway... If you're a heavy user of EAs you might benefit from using larger > inodes. Just something to consider. Cool tests! ;) Yeah, next time I'll have to take this into consideration, but the fs was created long ago and I didn't plan to use xattr. Now I do but mkfs is not an option right now. Thanks for the insight, Christian. [0] http://oss.sgi.com/archives/xfs/2012-07/msg00116.html -- BOFH excuse #247: Due to Federal Budget problems we have been forced to cut back on the number of users able to access the system at one time. (namely none allowed....) From alex@volshebnoe-foto.com.ua Fri May 17 15:33:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.3 required=5.0 tests=FSL_CTYPE_WIN1251,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 037827F3F for ; Fri, 17 May 2013 15:33:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CAE438F807A for ; Fri, 17 May 2013 13:33:31 -0700 (PDT) X-ASG-Debug-ID: 1368822807-04bdf04226381590001-w1Z2WR Received: from mx-out-3.ukraine.com.ua (mx-out-3.ukraine.com.ua [91.206.200.98]) by cuda.sgi.com with ESMTP id EKEk5Wo5GKPECiDo (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 13:33:29 -0700 (PDT) X-Barracuda-Envelope-From: alex@volshebnoe-foto.com.ua X-Barracuda-Apparent-Source-IP: 91.206.200.98 Received: from VIRTUALXP-43101 (unknown [178.137.229.76]) by mx-out-3.ukraine.com.ua (Postfix) with ESMTPA id 04211200015 for ; Fri, 17 May 2013 23:33:26 +0300 (EEST) From: "alexss" Subject: hallo To: "linux-xfs@o" X-ASG-Orig-Subj: hallo Content-Type: multipart/alternative; charset="Windows-1251"; boundary="viwNwzsCwFMGdEeEiAHCB=_g88tDRA4uqC" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Date: Fri, 17 May 2013 23:33:30 +0300 X-Delta-Virus-Check: ok X-Delta-Spam-Symbols: Symbols: ONCE_RECEIVED(1.00), MISSING_MID(3.00); X-Delta-Spam-Score: 4 X-Barracuda-Connect: mx-out-3.ukraine.com.ua[91.206.200.98] X-Barracuda-Start-Time: 1368822809 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.14 X-Barracuda-Spam-Status: No, SCORE=0.14 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_MID X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131250 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 HTML_MESSAGE BODY: HTML included in message Message-Id: <20130517203331.4DECAA42172@cuda.sgi.com> This is a multi-part message in MIME format --viwNwzsCwFMGdEeEiAHCB=_g88tDRA4uqC Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Wenn Sie sich nicht an den http://opportunities7.webnode.com/ , spare= n Sie 70 Dollar! Aber verlieren Sie die Chance, das beste Projekt des = Net kommen. Jede Einladung zu der Gold Line International System ist w= ie immer eine Tute mit Geld als Geschenk. Dies ist ein globales virtue= lles Spiel, das nicht irgendwelche Analoga. Amerika, England, Russland= , Malaysia, Brasilien, Usbekistan, Kasachstan und der Ukraine haben be= reits mit uns! Es ist nicht eine finanzielle Pyramide! Es gibt keine "= Zinsen", superior "Manager" oder "golden Chefs". Es ist allerdings in = keiner Relation fur jedes Unternehmen - nur eine gegenseitige finanzie= lle Unterstutzung! Registriert die schonsten finanziellen Spiel des 21= =2E Jahrhunderts schon heute! --viwNwzsCwFMGdEeEiAHCB=_g88tDRA4uqC Content-Type: text/html Content-Transfer-Encoding: quoted-printable

 Wenn Sie sich nicht an den http://opportunities7.webnode.com/ , sparen Sie&= nbsp;70 Dollar! Aber verlieren Sie die Chance, das beste Projekt des N= et kommen. Jede Einladung zu der Gold Line International System ist wi= e immer eine Tute mit Geld als Geschenk. Dies ist ein globales virtuel= les Spiel, das nicht irgendwelche Analoga. Amerika, England, Russland,= Malaysia, Brasilien, Usbekistan, Kasachstan und der Ukraine haben ber= eits mit uns! Es ist nicht eine finanzielle Pyramide! Es gibt keine "Z= insen", superior "Manager" oder "golden Chefs". Es ist allerdings in k= einer Relation fur jedes Unternehmen - nur eine gegenseitige finanziel= le Unterstutzung! Registriert die schonsten finanziellen Spiel des 21.= Jahrhunderts schon heute!

--viwNwzsCwFMGdEeEiAHCB=_g88tDRA4uqC-- From mlsemon35@gmail.com Fri May 17 15:55:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 082187F3F for ; Fri, 17 May 2013 15:55:16 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id ECD31304066 for ; Fri, 17 May 2013 13:55:12 -0700 (PDT) X-ASG-Debug-ID: 1368824111-04cb6c10ba1a240001-NocioJ Received: from mail-ia0-f177.google.com (mail-ia0-f177.google.com [209.85.210.177]) by cuda.sgi.com with ESMTP id 8QAMAwUP3tjCReCe (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 13:55:11 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.177 X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.177] Received: by mail-ia0-f177.google.com with SMTP id z13so5361205iaz.22 for ; Fri, 17 May 2013 13:55:11 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.177] X-Barracuda-IPDD: Level1 [gmail.com/209.85.210.177] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=TBbV58DptiwbvP9f0KQHL7K7RnFrFcKKMOhz9jDr+wc=; b=x5am4Dt45+3jEk+65sQLORWSInlYRbikUIp8CtcMjK308RAt0c9+JpMn2QzCf84qTF 6/n2mAgDAlsJs1NWqLF14nfPXBxKggwL/hRWBpebQkEa+EDW/FFtTNu/3cGZYvoz6NOl uDor6Q1et+kbAvPmpfLBPbAyOHdq0/EG0D6ddqqg4KRDhUgAPg6HXuHL8NP+jK/oKoGb SK7hxIJLB4qwYk890uTukrn64vaaYvAsnkQu6ZgIg7pCVM/mU1Ls7CdYGZArlFtp9HTi JOv0Mon60Eulg5R3gRFxu0y/dxi2c9eWfpkLin43WzKImZ8zl4bmvub2U2CwWofJNdrv c42Q== X-Received: by 10.50.178.172 with SMTP id cz12mr10063igc.48.1368824111558; Fri, 17 May 2013 13:55:11 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id wn10sm102228igb.2.2013.05.17.13.55.03 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 17 May 2013 13:55:10 -0700 (PDT) Message-ID: <51969917.2080209@gmail.com> Date: Fri, 17 May 2013 16:54:47 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ia0-f177.google.com[209.85.210.177] X-Barracuda-Start-Time: 1368824111 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131252 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/17/2013 07:12 AM, Dave Chinner wrote: > Hi Folks, > > This is the first real "works ok" CRC patchset for xfsprogs. It > provides full support for mkfs.xfs and xfs_repair, and partial > read-only support for xfs_db. > > For mkfs.xfs, it does everything properly, and filesystems that are > freshly made also run cleanly through xfs_repair and mount and run > just fine. > > For xfs_repair, it reads and writes all metadata with CRC checks, > calculations and validation just like the kernel code does, but it > currently silently ignores the validation done in the IO layer. > Enabling that is future work - it involves adding buffer error checking to > every libxfs_readbuf() call that is made, and we do none of that > right now. It does, however, fully validate all the non-CRC format > metadata just as it does for non-CRC filesystems, and so the > coverage it has is the same for both CRC and non-CRC filesystems. > > For xfs_db, there is read-only support for looking at the filesystem > as the xfs_db IO stack does not support CRCs at all. We need to > convert xfs_db to use the libxfs infrastructure to enable that. > Apart from that, xfs_db has partial support for the extended > metadata fields - the directory/attribute blocks don't have extended > support yet, but everything else does. > > xfs_check is made special. It currently detects a version 5 > superblock, and immediately exits with success. Hence it always says > CRC enabled filesystems are OK. This is a temporary change that > enables running xfstests without full support in xfs_db for all the > new metadata structures (like headers in remote symlink and > attribute blocks). Depending on if we want to keep xfs-check useful > for xfstests, we can revisit this bypass hack once xfs_db has been > converted to use the libxfs IO engine. > > Overall, xfstests is now running enough to start to find bugs in the > kernel CRC code - I'm mainly hitting remote attribute block bugs > right now (generic/117!) but there's certainly less problems being > reported than I expected. > > Oh, and I've tested it with external log devices and real time > devices, too. > > Comments, thoughts, flames, and testing all welcome! > > Cheers, > > Dave. OK. The basics look good so far. The patchset applied without need for additional work with vi and patch. Whitespace errors were reported for Patches 8, 14, 16, 17, 24, 25, and 27. xfsprogs built with no additional errors over a normal xfsprogs build. That all stated, the `tar -xvf qt-source.tar.xz` still fails on a CRC-enabled filesystem. Worse, until I return home, I won't be able to do serial-console capture of hard oopses. However, the initial oops I got was a soft one, so it is included after my closing. The kernel is this... last night's kernel git last night's xfs-oss/master some of your recent patches (didn't apply your 6_5 patch yet) J. Liu's most recent patchset + 2 older bitness patches Chandra's v8 pquota/gquota patchset + one E-mail fix Shaggy's JFS patch to make it through the old xfstests #068 on JFS an NILFS2 patch to address broken bmap handling, lurked from the NILFS2 mailing list one local removed assert to make it through the old xfstests #111 maybe one or two XFS patches beyond this ...all on a 32-bit Pentium 4. What I'm trying to state is that a lot is in there, but the PC is spinning like a top, and xfstests results are really good right now. However, if I feel the need to provide a fresh environment, patch management is taking some time. Great job on a fine patchset so far, and good luck! Michael [ 6188.126012] XFS: Assertion failed: first <= last && last < BBTOB(bp->b_length), file: fs/xfs/xfs_trans_buf.c, line: 569 [ 6188.137663] ------------[ cut here ]------------ [ 6188.143109] kernel BUG at fs/xfs/xfs_message.c:108! [ 6188.147632] invalid opcode: 0000 [#1] [ 6188.147632] CPU: 0 PID: 12676 Comm: tar Not tainted 3.10.0-rc1+ #25 [ 6188.147632] Hardware name: Dell Computer Corporation Dimension 2350/07W080, BIOS A01 12/17/2002 [ 6188.147632] task: e0ef53e0 ti: ea330000 task.ti: ea330000 [ 6188.147632] EIP: 0060:[] EFLAGS: 00010282 CPU: 0 [ 6188.147632] EIP is at assfail+0x26/0x28 [ 6188.147632] EAX: 0000006b EBX: ea042630 ECX: 00000000 EDX: c1689820 [ 6188.147632] ESI: d94a3900 EDI: ea347aa8 EBP: ea331bf0 ESP: ea331bdc [ 6188.147632] DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 [ 6188.147632] CR0: 8005003b CR2: b74f0000 CR3: 1964e000 CR4: 000007d0 [ 6188.147632] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000 [ 6188.147632] DR6: ffff0ff0 DR7: 00000400 [ 6188.147632] Stack: [ 6188.147632] 00000000 c160a688 c1613b74 c15fe01d 00000239 ea331c08 c11c6d67 00001ff6 [ 6188.147632] d94a5ffc d94a5000 d94a3900 ea331c24 c11a0653 00001ff7 ea347aa8 d94a5ffc [ 6188.147632] 00000ffc d94a5000 ea331c54 c11a0e45 d94a3900 ea347aa8 01ff0034 d94a5030 [ 6188.147632] Call Trace: [ 6188.147632] [] xfs_trans_log_buf+0x64/0x11b [ 6188.147632] [] xfs_dir2_data_log_unused+0x7b/0x83 [ 6188.147632] [] xfs_dir2_data_use_free+0x1bf/0x41a [ 6188.147632] [] xfs_dir2_leaf_addname+0x307/0x6f2 [ 6188.147632] [] xfs_dir_createname+0x113/0x129 [ 6188.147632] [] xfs_create+0x3e0/0x4fb [ 6188.147632] [] xfs_vn_mknod+0x8f/0x15a [ 6188.147632] [] ? xfs_vn_mknod+0x15a/0x15a [ 6188.147632] [] xfs_vn_create+0x15/0x17 [ 6188.147632] [] vfs_create+0x68/0xeb [ 6188.147632] [] do_last+0x85c/0xc45 [ 6188.147632] [] ? inode_permission+0x11/0x3e [ 6188.147632] [] ? link_path_walk+0x4f/0x67f [ 6188.147632] [] path_openat+0x9f/0x38d [ 6188.147632] [] do_filp_open+0x26/0x6b [ 6188.147632] [] ? tty_write_unlock+0x2d/0x33 [ 6188.147632] [] ? getname_flags+0x86/0x118 [ 6188.147632] [] do_sys_open+0xf0/0x1ae [ 6188.147632] [] SyS_openat+0x1b/0x1d [ 6188.147632] [] syscall_call+0x7/0xb [ 6188.147632] [] ? spurious_fault+0xbf/0xc2 [ 6188.147632] Code: 56 eb ff c9 c3 55 89 e5 83 ec 14 89 4c 24 10 89 54 24 0c 89 44 24 08 c7 44 24 04 88 a6 60 c1 c7 04 24 00 00 00 00 e8 e4 fd ff ff <0f> 0b 55 89 e5 83 ec 14 c7 44 24 10 01 00 00 00 89 54 24 0c 89 [ 6188.147632] EIP: [] assfail+0x26/0x28 SS:ESP 0068:ea331bdc [ 6188.415714] ---[ end trace c213c626812e5949 ]--- [ 6211.447695] XFS (sdb5): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! [ 6211.447695] Use of these features in this kernel is at your own risk! From sekharan@us.ibm.com Fri May 17 16:16:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DA2CD7F3F for ; Fri, 17 May 2013 16:16:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C8CC48F8068 for ; Fri, 17 May 2013 14:16:09 -0700 (PDT) X-ASG-Debug-ID: 1368825368-04cbb05fe537a170001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id wxJdrFXpPsucDQ4u (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 14:16:08 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 17 May 2013 15:16:08 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 17 May 2013 15:16:06 -0600 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 9A74B3E4004E for ; Fri, 17 May 2013 15:15:49 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4HLFrMp135552 for ; Fri, 17 May 2013 15:15:53 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4HLFquP031121 for ; Fri, 17 May 2013 15:15:53 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4HLFiX5029861; Fri, 17 May 2013 15:15:44 -0600 Subject: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. Reply-To: sekharan@us.ibm.com To: Jeff Liu Cc: xfs@oss.sgi.com In-Reply-To: <51906528.3030307@oracle.com> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> <51906528.3030307@oracle.com> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 17 May 2013 16:15:44 -0500 Message-ID: <1368825344.10223.30.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13051721-3620-0000-0000-0000028DD7FC X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1368825368 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, 2013-05-13 at 11:59 +0800, Jeff Liu wrote: > Hi, > > On 05/11/2013 05:21 AM, Chandra Seetharaman wrote: > > Add project quota changes to all the places where group quota field > > is used: > > * add separate project quota members into various structures > > * split project quota and group quotas so that instead of overriding > > the group quota members incore, the new project quota members are > > used instead > > * get rid of usage of the OQUOTA flag incore, in favor of separate > > * group > > and project quota flags. > > * add a project dquot argument to various functions. > > > > No externally visible interfaces changed. > > > > Signed-off-by: Chandra Seetharaman > > @@ -409,7 +421,10 @@ xfs_qm_dqattach_one( > > * be reclaimed as long as we have a ref from inode and we > > * hold the ilock. > > */ > > - dqp = udqhint->q_gdquot; > > + if (type == XFS_DQ_GROUP) > > + dqp = udqhint->q_gdquot; > > + else > > + dqp = udqhint->q_pdquot; > Maybe it's better to: > dqp = "type == XFS_DQ_GROUP" ? udqhint->q_gdquot : > udqhint->q_pdquot; Jeff, "if else" construct is preferred for readability than "? :" construct. So, I am leaving it as is. From bpm@sgi.com Fri May 17 16:43:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CAA637F3F for ; Fri, 17 May 2013 16:43:31 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id B46F58F8074; Fri, 17 May 2013 14:43:28 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 5A560500B50; Fri, 17 May 2013 16:43:28 -0500 (CDT) Date: Fri, 17 May 2013 16:43:28 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 0/5] xfs: fixes for 3.10-rc2 Message-ID: <20130517214328.GX29359@sgi.com> References: <1368753029-9977-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1368753029-9977-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Dave, On Fri, May 17, 2013 at 11:10:24AM +1000, Dave Chinner wrote: > The following patches are fixing regressions, data integrity > problems and lockdep reports. They are all candidates for 3.10-rc2. > Please consider them for 3.10-rc2. I'll take a look, thanks. -Ben From sandeen@sandeen.net Fri May 17 16:44:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EFB797F3F for ; Fri, 17 May 2013 16:44:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C6E9630406B for ; Fri, 17 May 2013 14:44:10 -0700 (PDT) X-ASG-Debug-ID: 1368827049-04bdf04225386150001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 2AqNB0YxFKOSjLop for ; Fri, 17 May 2013 14:44:09 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id CE43760EB65C; Fri, 17 May 2013 16:44:08 -0500 (CDT) Message-ID: <5196A4A7.6010805@sandeen.net> Date: Fri, 17 May 2013 16:44:07 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Josh Endries CC: xfs@oss.sgi.com Subject: Re: Crash recovery/zero-byte file question References: <731755347.10846.1368808589019.JavaMail.root@coecis.cornell.edu> X-ASG-Orig-Subj: Re: Crash recovery/zero-byte file question In-Reply-To: <731755347.10846.1368808589019.JavaMail.root@coecis.cornell.edu> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1368827049 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131254 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/17/13 11:36 AM, Josh Endries wrote: > Hello, Hi Josh - > We have a RHEL 6.3 machine with a large XFS mount that suffered a > power outage. For starters, have you engaged your RH support folks? > When it came back up, it allegedly fixed itself, but > now many files are zero bytes. I found a bug report/errata fix at RH > that mentions something similar, which might be what we ran into. Which one? RH support can probably help you decide if that bug report applies, and where/when it was fixed. > We > are running a kernel that should have the fix as far as I can tell, > but we definitely have zero byte files that shouldn't be. shouldn't be because they had all been properly synced to disk before the power loss, or? (just in general, files not fsynced aren't guaranteed to be in any particular state if you lose power, though of course there are certain expectations of timely flushing). > My question is: is there a way to restore this or fix it before going > to backups? Is it worth it to unmount and run xfs_check or similar? > Unfortunately, since the system came up and appeared to be working, > some users have been using that mount point. If you have backups that's probably the best option. -Eric p.s. xfs_check is deprecated in favor of xfs_repair [-n] > Thanks, Josh > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > From david@fromorbit.com Fri May 17 22:25:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5D7D67F3F for ; Fri, 17 May 2013 22:25:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id E149EAC002 for ; Fri, 17 May 2013 20:25:13 -0700 (PDT) X-ASG-Debug-ID: 1368847510-04cb6c10c22eee0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id tnBTkrDnmBPVuC9e for ; Fri, 17 May 2013 20:25:11 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah0QAHbzllF5LDbs/2dsb2JhbABbgwiDArldhRsEAYEFF3SCHwEBBAEnExwYCwULCAMYCSUPBSUDIROIBgW+ARaNWRWBHQeCc2EDlzeRQYMhKoEsAgcXBAI Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 18 May 2013 12:55:09 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdXlb-00027i-51; Sat, 18 May 2013 13:25:07 +1000 Date: Sat, 18 May 2013 13:25:07 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support Message-ID: <20130518032507.GA6495@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51969917.2080209@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368847510 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131278 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Fri, May 17, 2013 at 04:54:47PM -0400, Michael L. Semon wrote: > On 05/17/2013 07:12 AM, Dave Chinner wrote: > >Hi Folks, > > > >This is the first real "works ok" CRC patchset for xfsprogs. It > >provides full support for mkfs.xfs and xfs_repair, and partial > >read-only support for xfs_db. > > > >For mkfs.xfs, it does everything properly, and filesystems that are > >freshly made also run cleanly through xfs_repair and mount and run > >just fine. > > > >For xfs_repair, it reads and writes all metadata with CRC checks, > >calculations and validation just like the kernel code does, but it > >currently silently ignores the validation done in the IO layer. > >Enabling that is future work - it involves adding buffer error checking to > >every libxfs_readbuf() call that is made, and we do none of that > >right now. It does, however, fully validate all the non-CRC format > >metadata just as it does for non-CRC filesystems, and so the > >coverage it has is the same for both CRC and non-CRC filesystems. > > > >For xfs_db, there is read-only support for looking at the filesystem > >as the xfs_db IO stack does not support CRCs at all. We need to > >convert xfs_db to use the libxfs infrastructure to enable that. > >Apart from that, xfs_db has partial support for the extended > >metadata fields - the directory/attribute blocks don't have extended > >support yet, but everything else does. > > > >xfs_check is made special. It currently detects a version 5 > >superblock, and immediately exits with success. Hence it always says > >CRC enabled filesystems are OK. This is a temporary change that > >enables running xfstests without full support in xfs_db for all the > >new metadata structures (like headers in remote symlink and > >attribute blocks). Depending on if we want to keep xfs-check useful > >for xfstests, we can revisit this bypass hack once xfs_db has been > >converted to use the libxfs IO engine. > > > >Overall, xfstests is now running enough to start to find bugs in the > >kernel CRC code - I'm mainly hitting remote attribute block bugs > >right now (generic/117!) but there's certainly less problems being > >reported than I expected. > > > >Oh, and I've tested it with external log devices and real time > >devices, too. > > > >Comments, thoughts, flames, and testing all welcome! > > > >Cheers, > > > >Dave. > > OK. The basics look good so far. The patchset applied without need > for additional work with vi and patch. Whitespace errors were > reported for Patches 8, 14, 16, 17, 24, 25, and 27. xfsprogs built > with no additional errors over a normal xfsprogs build. Can you send me the output indicating where the whitespace errors are? I don't get any warnings from guilt about them when I apply the patchset here... > That all stated, the `tar -xvf qt-source.tar.xz` still fails on a > CRC-enabled filesystem. Not surprising - I haven't got a crc enabled filesystem all the way through xfstests yet. remote attributes are the current piece I'm working on getting fixed. > Worse, until I return home, I won't be able > to do serial-console capture of hard oopses. However, the initial > oops I got was a soft one, so it is included after my closing. The > kernel is this... > > last night's kernel git > > last night's xfs-oss/master > > some of your recent patches (didn't apply your 6_5 patch yet) > > J. Liu's most recent patchset + 2 older bitness patches > > Chandra's v8 pquota/gquota patchset + one E-mail fix > > Shaggy's JFS patch to make it through the old xfstests #068 on JFS > > an NILFS2 patch to address broken bmap handling, lurked from the > NILFS2 mailing list > > one local removed assert to make it through the old xfstests #111 > > maybe one or two XFS patches beyond this > > ...all on a 32-bit Pentium 4. And reporting bugs :) > What I'm trying to state is that a lot is in there, but the PC is > spinning like a top, and xfstests results are really good right now. > However, if I feel the need to provide a fresh environment, patch > management is taking some time. How are you managing patches right now? When taking in a new patchset from a mailing list, I save them all in a mbox file, then use git-am to apply them to a temporary git branch. I then move to my real working branch, and do a 'guilt import-commit x..y' to convert the commits in the temporary branch to a set of guilt patches, and then go from there.... The worst step for me is, by far, the git-am step. Resolving patch conflicts is painful because you have to manually apply the patch, then remember to git add all the files modified by the patch, etc. It'd be really cool if guilt could do the import directly from the mbox file without applying the patches, so the normal guilt force-push-fix-and-refresh method of solving patch conflicts could be used instead of git-am. /me wonders if #jeffpc is listening here.... > Great job on a fine patchset so far, and good luck! Keep the bug reports rolling in, Michael. ;) > > Michael > > [ 6188.126012] XFS: Assertion failed: first <= last && last < > BBTOB(bp->b_length), file: fs/xfs/xfs_trans_buf.c, line: 569 Hmmm - that seems familiar - I thought I'd already fixed a bug like that previously... > [ 6188.147632] [] xfs_trans_log_buf+0x64/0x11b > [ 6188.147632] [] xfs_dir2_data_log_unused+0x7b/0x83 > [ 6188.147632] [] xfs_dir2_data_use_free+0x1bf/0x41a > [ 6188.147632] [] xfs_dir2_leaf_addname+0x307/0x6f2 > [ 6188.147632] [] xfs_dir_createname+0x113/0x129 > [ 6188.147632] [] xfs_create+0x3e0/0x4fb I'll look into that further - it's a different problem to what I'm stuck on at the moment... Cheers, Dave. -- Dave Chinner david@fromorbit.com From jeff.liu@oracle.com Sat May 18 00:07:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AD7817F3F for ; Sat, 18 May 2013 00:07:41 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 90C138F8068 for ; Fri, 17 May 2013 22:07:38 -0700 (PDT) X-ASG-Debug-ID: 1368853657-04cbb05fe2391fc0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id PgNSooLvb1hSwIKS (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 May 2013 22:07:37 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4I57X4l009234 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 18 May 2013 05:07:34 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4I57W7O024538 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Sat, 18 May 2013 05:07:33 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4I57Wus024532; Sat, 18 May 2013 05:07:32 GMT Received: from [192.168.1.103] (/123.119.106.19) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 17 May 2013 22:07:32 -0700 Message-ID: <51970C90.5050005@oracle.com> Date: Sat, 18 May 2013 13:07:28 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: "Michael L. Semon" , xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <20130518032507.GA6495@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368853657 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131284 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/18/2013 11:25 AM, Dave Chinner wrote: > On Fri, May 17, 2013 at 04:54:47PM -0400, Michael L. Semon wrote: >> On 05/17/2013 07:12 AM, Dave Chinner wrote: >>> Hi Folks, >>> >>> This is the first real "works ok" CRC patchset for xfsprogs. It >>> provides full support for mkfs.xfs and xfs_repair, and partial >>> read-only support for xfs_db. >>> >>> For mkfs.xfs, it does everything properly, and filesystems that are >>> freshly made also run cleanly through xfs_repair and mount and run >>> just fine. >>> >>> For xfs_repair, it reads and writes all metadata with CRC checks, >>> calculations and validation just like the kernel code does, but it >>> currently silently ignores the validation done in the IO layer. >>> Enabling that is future work - it involves adding buffer error checking to >>> every libxfs_readbuf() call that is made, and we do none of that >>> right now. It does, however, fully validate all the non-CRC format >>> metadata just as it does for non-CRC filesystems, and so the >>> coverage it has is the same for both CRC and non-CRC filesystems. >>> >>> For xfs_db, there is read-only support for looking at the filesystem >>> as the xfs_db IO stack does not support CRCs at all. We need to >>> convert xfs_db to use the libxfs infrastructure to enable that. >>> Apart from that, xfs_db has partial support for the extended >>> metadata fields - the directory/attribute blocks don't have extended >>> support yet, but everything else does. >>> >>> xfs_check is made special. It currently detects a version 5 >>> superblock, and immediately exits with success. Hence it always says >>> CRC enabled filesystems are OK. This is a temporary change that >>> enables running xfstests without full support in xfs_db for all the >>> new metadata structures (like headers in remote symlink and >>> attribute blocks). Depending on if we want to keep xfs-check useful >>> for xfstests, we can revisit this bypass hack once xfs_db has been >>> converted to use the libxfs IO engine. >>> >>> Overall, xfstests is now running enough to start to find bugs in the >>> kernel CRC code - I'm mainly hitting remote attribute block bugs >>> right now (generic/117!) but there's certainly less problems being >>> reported than I expected. >>> >>> Oh, and I've tested it with external log devices and real time >>> devices, too. >>> >>> Comments, thoughts, flames, and testing all welcome! >>> >>> Cheers, >>> >>> Dave. >> >> OK. The basics look good so far. The patchset applied without need >> for additional work with vi and patch. Whitespace errors were >> reported for Patches 8, 14, 16, 17, 24, 25, and 27. xfsprogs built >> with no additional errors over a normal xfsprogs build. > > Can you send me the output indicating where the whitespace errors > are? I don't get any warnings from guilt about them when I apply the > patchset here... > >> That all stated, the `tar -xvf qt-source.tar.xz` still fails on a >> CRC-enabled filesystem. > > Not surprising - I haven't got a crc enabled filesystem all the way > through xfstests yet. remote attributes are the current piece I'm > working on getting fixed. > >> Worse, until I return home, I won't be able >> to do serial-console capture of hard oopses. However, the initial >> oops I got was a soft one, so it is included after my closing. The >> kernel is this... >> >> last night's kernel git >> >> last night's xfs-oss/master >> >> some of your recent patches (didn't apply your 6_5 patch yet) >> >> J. Liu's most recent patchset + 2 older bitness patches >> >> Chandra's v8 pquota/gquota patchset + one E-mail fix >> >> Shaggy's JFS patch to make it through the old xfstests #068 on JFS >> >> an NILFS2 patch to address broken bmap handling, lurked from the >> NILFS2 mailing list >> >> one local removed assert to make it through the old xfstests #111 >> >> maybe one or two XFS patches beyond this >> >> ...all on a 32-bit Pentium 4. > > And reporting bugs :) > >> What I'm trying to state is that a lot is in there, but the PC is >> spinning like a top, and xfstests results are really good right now. >> However, if I feel the need to provide a fresh environment, patch >> management is taking some time. > > How are you managing patches right now? When taking in a new > patchset from a mailing list, I save them all in a mbox file, > then use git-am to apply them to a temporary git branch. I then move > to my real working branch, and do a 'guilt import-commit x..y' to > convert the commits in the temporary branch to a set of guilt > patches, and then go from there.... > > The worst step for me is, by far, the git-am step. Resolving patch > conflicts is painful because you have to manually apply the patch, > then remember to git add all the files modified by the patch, etc. > > It'd be really cool if guilt could do the import directly from the > mbox file without applying the patches, so the normal guilt > force-push-fix-and-refresh method of solving patch conflicts could > be used instead of git-am. > > /me wonders if #jeffpc is listening here.... Ah? #jeffpc == me ? #jeffpc is up and listening... : just ignore; Looks our test for 32-bit system is insufficient. There has another bug reports regarding 32-bit yesterday: http://oss.sgi.com/archives/xfs/2013-05/msg00494.html So I'm going to setup a 32-bit test environment for such tests together with Michael. Thanks, -Jeff > >> Great job on a fine patchset so far, and good luck! > > Keep the bug reports rolling in, Michael. ;) > >> >> Michael >> >> [ 6188.126012] XFS: Assertion failed: first <= last && last < >> BBTOB(bp->b_length), file: fs/xfs/xfs_trans_buf.c, line: 569 > > Hmmm - that seems familiar - I thought I'd already fixed a bug like > that previously... > >> [ 6188.147632] [] xfs_trans_log_buf+0x64/0x11b >> [ 6188.147632] [] xfs_dir2_data_log_unused+0x7b/0x83 >> [ 6188.147632] [] xfs_dir2_data_use_free+0x1bf/0x41a >> [ 6188.147632] [] xfs_dir2_leaf_addname+0x307/0x6f2 >> [ 6188.147632] [] xfs_dir_createname+0x113/0x129 >> [ 6188.147632] [] xfs_create+0x3e0/0x4fb > > I'll look into that further - it's a different problem to what I'm > stuck on at the moment... > > Cheers, > > Dave. > From david@fromorbit.com Sat May 18 00:39:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 624BB7F3F for ; Sat, 18 May 2013 00:39:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id B6B74AC002 for ; Fri, 17 May 2013 22:39:42 -0700 (PDT) X-ASG-Debug-ID: 1368855579-04cb6c10ba35760001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id csqr4acHq7gPdOQH for ; Fri, 17 May 2013 22:39:39 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmoRAEMTl1F5LDbs/2dsb2JhbABbgwgwglK5XYUbBAGBAhd0gh8BAQQBOhwYCwULCAMYCSUPBSUDIROIBgUNvUIWjVkVgR0HgnNhA5c3kUGDISqBLAIHFwQC Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 18 May 2013 15:09:38 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdZrk-0002K7-Jg; Sat, 18 May 2013 15:39:36 +1000 Date: Sat, 18 May 2013 15:39:36 +1000 From: Dave Chinner To: Jeff Liu Cc: "Michael L. Semon" , xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support Message-ID: <20130518053936.GC6495@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> <51970C90.5050005@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51970C90.5050005@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368855579 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 18, 2013 at 01:07:28PM +0800, Jeff Liu wrote: > On 05/18/2013 11:25 AM, Dave Chinner wrote: > > On Fri, May 17, 2013 at 04:54:47PM -0400, Michael L. Semon wrote: > >> On 05/17/2013 07:12 AM, Dave Chinner wrote: > >>> Hi Folks, > >>> > >>> This is the first real "works ok" CRC patchset for xfsprogs. It > >>> provides full support for mkfs.xfs and xfs_repair, and partial > >>> read-only support for xfs_db. > >>> > >>> For mkfs.xfs, it does everything properly, and filesystems that are > >>> freshly made also run cleanly through xfs_repair and mount and run > >>> just fine. > >>> > >>> For xfs_repair, it reads and writes all metadata with CRC checks, > >>> calculations and validation just like the kernel code does, but it > >>> currently silently ignores the validation done in the IO layer. > >>> Enabling that is future work - it involves adding buffer error checking to > >>> every libxfs_readbuf() call that is made, and we do none of that > >>> right now. It does, however, fully validate all the non-CRC format > >>> metadata just as it does for non-CRC filesystems, and so the > >>> coverage it has is the same for both CRC and non-CRC filesystems. > >>> > >>> For xfs_db, there is read-only support for looking at the filesystem > >>> as the xfs_db IO stack does not support CRCs at all. We need to > >>> convert xfs_db to use the libxfs infrastructure to enable that. > >>> Apart from that, xfs_db has partial support for the extended > >>> metadata fields - the directory/attribute blocks don't have extended > >>> support yet, but everything else does. > >>> > >>> xfs_check is made special. It currently detects a version 5 > >>> superblock, and immediately exits with success. Hence it always says > >>> CRC enabled filesystems are OK. This is a temporary change that > >>> enables running xfstests without full support in xfs_db for all the > >>> new metadata structures (like headers in remote symlink and > >>> attribute blocks). Depending on if we want to keep xfs-check useful > >>> for xfstests, we can revisit this bypass hack once xfs_db has been > >>> converted to use the libxfs IO engine. > >>> > >>> Overall, xfstests is now running enough to start to find bugs in the > >>> kernel CRC code - I'm mainly hitting remote attribute block bugs > >>> right now (generic/117!) but there's certainly less problems being > >>> reported than I expected. > >>> > >>> Oh, and I've tested it with external log devices and real time > >>> devices, too. > >>> > >>> Comments, thoughts, flames, and testing all welcome! > >>> > >>> Cheers, > >>> > >>> Dave. > >> > >> OK. The basics look good so far. The patchset applied without need > >> for additional work with vi and patch. Whitespace errors were > >> reported for Patches 8, 14, 16, 17, 24, 25, and 27. xfsprogs built > >> with no additional errors over a normal xfsprogs build. > > > > Can you send me the output indicating where the whitespace errors > > are? I don't get any warnings from guilt about them when I apply the > > patchset here... > > > >> That all stated, the `tar -xvf qt-source.tar.xz` still fails on a > >> CRC-enabled filesystem. > > > > Not surprising - I haven't got a crc enabled filesystem all the way > > through xfstests yet. remote attributes are the current piece I'm > > working on getting fixed. > > > >> Worse, until I return home, I won't be able > >> to do serial-console capture of hard oopses. However, the initial > >> oops I got was a soft one, so it is included after my closing. The > >> kernel is this... > >> > >> last night's kernel git > >> > >> last night's xfs-oss/master > >> > >> some of your recent patches (didn't apply your 6_5 patch yet) > >> > >> J. Liu's most recent patchset + 2 older bitness patches > >> > >> Chandra's v8 pquota/gquota patchset + one E-mail fix > >> > >> Shaggy's JFS patch to make it through the old xfstests #068 on JFS > >> > >> an NILFS2 patch to address broken bmap handling, lurked from the > >> NILFS2 mailing list > >> > >> one local removed assert to make it through the old xfstests #111 > >> > >> maybe one or two XFS patches beyond this > >> > >> ...all on a 32-bit Pentium 4. > > > > And reporting bugs :) > > > >> What I'm trying to state is that a lot is in there, but the PC is > >> spinning like a top, and xfstests results are really good right now. > >> However, if I feel the need to provide a fresh environment, patch > >> management is taking some time. > > > > How are you managing patches right now? When taking in a new > > patchset from a mailing list, I save them all in a mbox file, > > then use git-am to apply them to a temporary git branch. I then move > > to my real working branch, and do a 'guilt import-commit x..y' to > > convert the commits in the temporary branch to a set of guilt > > patches, and then go from there.... > > > > The worst step for me is, by far, the git-am step. Resolving patch > > conflicts is painful because you have to manually apply the patch, > > then remember to git add all the files modified by the patch, etc. > > > > It'd be really cool if guilt could do the import directly from the > > mbox file without applying the patches, so the normal guilt > > force-push-fix-and-refresh method of solving patch conflicts could > > be used instead of git-am. > > > > /me wonders if #jeffpc is listening here.... > Ah? #jeffpc == me ? #jeffpc is up and listening... : just ignore; No, #jeffpc is Josef Sipek. Author of guilt and many other useful things. > Looks our test for 32-bit system is insufficient. There has another bug > reports regarding 32-bit yesterday: > http://oss.sgi.com/archives/xfs/2013-05/msg00494.html > > So I'm going to setup a 32-bit test environment for such tests together > with Michael. Sounds good to me ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlsemon35@gmail.com Sat May 18 00:41:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4AB5929DF8 for ; Sat, 18 May 2013 00:41:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B35C8AC002 for ; Fri, 17 May 2013 22:41:07 -0700 (PDT) X-ASG-Debug-ID: 1368855665-04cbb05fe5393720001-NocioJ Received: from mail-ie0-f177.google.com (mail-ie0-f177.google.com [209.85.223.177]) by cuda.sgi.com with ESMTP id LzYLFzrfdF9cWEPK (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 22:41:05 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.177 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] Received: by mail-ie0-f177.google.com with SMTP id 9so10937185iec.36 for ; Fri, 17 May 2013 22:41:05 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=S2NanKNcfvr7hhXprHOYMt4usFhfAGBZVqa1EaGi2rk=; b=ZDPkY0Ua6JpG/G/5XbWsuIZAwNGwIUDm46kUP9Ot11vPu7/IhdXC27rrpB1uRamn3h Eh+WlGRhug4Yp1HyA8h9AXSs+9pgyhxBi+jh29FolnHrhHMyinp9NiKtAMhQS4Ffsmbi K4EsHyjVldSpQX51Y52slI7mBrKCG+9qI1EuxuWr8AgyEkyXb0QuA41aS0RHctsimy1U CvsoYGP1Bv4Ys8o3Oz7U9U4RbROXirUPxZrnAaCDHHiDrLXhSRAGU71Hp7Z83fAchvqY TZgthOxWZ46P1YCEQNBIQEDjYZPrwFGpoIurAP8ijQIbBxkhx0e0EcimM8mAjgliO/6G skWg== X-Received: by 10.42.70.147 with SMTP id f19mr965093icj.30.1368855665526; Fri, 17 May 2013 22:41:05 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id ij6sm1103074igb.1.2013.05.17.22.40.55 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 17 May 2013 22:41:04 -0700 (PDT) Message-ID: <51971457.7060903@gmail.com> Date: Sat, 18 May 2013 01:40:39 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <20130518032507.GA6495@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f177.google.com[209.85.223.177] X-Barracuda-Start-Time: 1368855665 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/17/2013 11:25 PM, Dave Chinner wrote: > On Fri, May 17, 2013 at 04:54:47PM -0400, Michael L. Semon wrote: >> On 05/17/2013 07:12 AM, Dave Chinner wrote: >>> Hi Folks, >>> >>> This is the first real "works ok" CRC patchset for xfsprogs. It >>> provides full support for mkfs.xfs and xfs_repair, and partial >>> read-only support for xfs_db. >>> >>> For mkfs.xfs, it does everything properly, and filesystems that are >>> freshly made also run cleanly through xfs_repair and mount and run >>> just fine. >>> >>> For xfs_repair, it reads and writes all metadata with CRC checks, >>> calculations and validation just like the kernel code does, but it >>> currently silently ignores the validation done in the IO layer. >>> Enabling that is future work - it involves adding buffer error checking to >>> every libxfs_readbuf() call that is made, and we do none of that >>> right now. It does, however, fully validate all the non-CRC format >>> metadata just as it does for non-CRC filesystems, and so the >>> coverage it has is the same for both CRC and non-CRC filesystems. >>> >>> For xfs_db, there is read-only support for looking at the filesystem >>> as the xfs_db IO stack does not support CRCs at all. We need to >>> convert xfs_db to use the libxfs infrastructure to enable that. >>> Apart from that, xfs_db has partial support for the extended >>> metadata fields - the directory/attribute blocks don't have extended >>> support yet, but everything else does. >>> >>> xfs_check is made special. It currently detects a version 5 >>> superblock, and immediately exits with success. Hence it always says >>> CRC enabled filesystems are OK. This is a temporary change that >>> enables running xfstests without full support in xfs_db for all the >>> new metadata structures (like headers in remote symlink and >>> attribute blocks). Depending on if we want to keep xfs-check useful >>> for xfstests, we can revisit this bypass hack once xfs_db has been >>> converted to use the libxfs IO engine. >>> >>> Overall, xfstests is now running enough to start to find bugs in the >>> kernel CRC code - I'm mainly hitting remote attribute block bugs >>> right now (generic/117!) but there's certainly less problems being >>> reported than I expected. >>> >>> Oh, and I've tested it with external log devices and real time >>> devices, too. >>> >>> Comments, thoughts, flames, and testing all welcome! >>> >>> Cheers, >>> >>> Dave. >> >> OK. The basics look good so far. The patchset applied without need >> for additional work with vi and patch. Whitespace errors were >> reported for Patches 8, 14, 16, 17, 24, 25, and 27. xfsprogs built >> with no additional errors over a normal xfsprogs build. > > Can you send me the output indicating where the whitespace errors > are? I don't get any warnings from guilt about them when I apply the > patchset here... If it makes any difference at all, I'm saving these patches using Thunderbird... The pre-patchset xfsprogs has been saved as a tarball, so I can provide a non-git patch session if necessary. Sorry so vague last time: I was overjoyed that everything went through git so cleanly. This is the result of the patches about which `git am` complained: PATCH 08: Applying: libxfs: add support for crc headers on remote symlinks /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:282: new blank line at EOF. + PATCH 14: Applying: xfs: add CRCs to dir2/da node blocks /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:61: trailing whitespace. nodehdr.level, id->ino, warning: 1 line adds whitespace errors. PATCH 16: Applying: xfs: split remote attribute code out /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:722: new blank line at EOF. + warning: 1 line adds whitespace errors. PATCH 17: Applying: xfs: add CRC protection to remote attributes /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:340: trailing whitespace. * allocating the blocks below. warning: 1 line adds whitespace errors. PATCH 24: Applying: xfsprogs: add crc format support to repair /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:574: trailing whitespace. if (scan_lbtree(be64_to_cpu(pp[i]), level, scan_bmapbt, type, warning: 1 line adds whitespace errors. PATCH 25: Applying: xfs_repair: update for dir/attr crc format changes. /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:128: trailing whitespace. if ((leafhdr.holes == 0 && /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:130: space before tab in indent. leafhdr.firstused > firstb) { /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:136: trailing whitespace. leafhdr.firstused, /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:146: trailing whitespace. leafhdr.firstused, /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:158: trailing whitespace. leafhdr.usedbytes, warning: squelched 1 whitespace error warning: 6 lines add whitespace errors. PATCH 27: Applying: xfs_db: disable modification for CRC enabled filessytems. /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:20: trailing whitespace. fprintf(stderr, warning: 1 line adds whitespace errors. >> That all stated, the `tar -xvf qt-source.tar.xz` still fails on a >> CRC-enabled filesystem. > > Not surprising - I haven't got a crc enabled filesystem all the way > through xfstests yet. remote attributes are the current piece I'm > working on getting fixed. > >> Worse, until I return home, I won't be able >> to do serial-console capture of hard oopses. However, the initial >> oops I got was a soft one, so it is included after my closing. The >> kernel is this... >> >> last night's kernel git >> >> last night's xfs-oss/master >> >> some of your recent patches (didn't apply your 6_5 patch yet) >> >> J. Liu's most recent patchset + 2 older bitness patches >> >> Chandra's v8 pquota/gquota patchset + one E-mail fix >> >> Shaggy's JFS patch to make it through the old xfstests #068 on JFS >> >> an NILFS2 patch to address broken bmap handling, lurked from the >> NILFS2 mailing list >> >> one local removed assert to make it through the old xfstests #111 >> >> maybe one or two XFS patches beyond this >> >> ...all on a 32-bit Pentium 4. > > And reporting bugs :) > >> What I'm trying to state is that a lot is in there, but the PC is >> spinning like a top, and xfstests results are really good right now. >> However, if I feel the need to provide a fresh environment, patch >> management is taking some time. > > How are you managing patches right now? When taking in a new > patchset from a mailing list, I save them all in a mbox file, > then use git-am to apply them to a temporary git branch. I then move > to my real working branch, and do a 'guilt import-commit x..y' to > convert the commits in the temporary branch to a set of guilt > patches, and then go from there.... The patches themselves are stored as individual files, in case they need to be applied again. Separate git branches are used for kernel patches, but for the XFS suite, I keep backup tarballs and work directly off of master. A new branch is started at strategic points. If you mention "this is based on 3.9.2 + xfsdev", kernel 3.9.2 is checked out into a new branch, xfs-oss/master is updated and merged, and the patches are reapplied. It takes time but is the best way, until I can find the `git --backout-this-patch-cleanly --i-really-mean-it-this-time --do-not-bother-to-suggest-git-am-resolved-if-it-cannot-be-done` command. The trick is to remember which patches to apply, so I might have a directory that has five great patches and one that no longer applies. > The worst step for me is, by far, the git-am step. Resolving patch > conflicts is painful because you have to manually apply the patch, > then remember to git add all the files modified by the patch, etc. I don't know how to use git to properly back out a patch that was made at some time in the past. Disaster management in particular has left me to backup at strategic points. On these older PCs, restore operations can be much faster than git recovery attempts. `git am` is hard because that diagnostic "Patch does not apply" is not helpful, and the --ignore-whitespace option can cause trouble very quickly. Any patches that don't apply by `git am` are reduced from E-mail to ordinary diffs and sent through `git apply`. If that doesn't work, they go through patch; vimdiff is used to help splice the patches in by hand. `git add` is then used to add the files. > It'd be really cool if guilt could do the import directly from the > mbox file without applying the patches, so the normal guilt > force-push-fix-and-refresh method of solving patch conflicts could > be used instead of git-am. > > /me wonders if #jeffpc is listening here.... > >> Great job on a fine patchset so far, and good luck! > Keep the bug reports rolling in, Michael. ;) Thanks! It's all good fun :-) >> >> Michael >> >> [ 6188.126012] XFS: Assertion failed: first <= last && last < >> BBTOB(bp->b_length), file: fs/xfs/xfs_trans_buf.c, line: 569 > > Hmmm - that seems familiar - I thought I'd already fixed a bug like > that previously... You may have fixed it already. If there's a patch, either I don't have it, or it's stuck on my main xfstests PC at home. Was this the issue that was triggered easily by xfstests xfs/017? >> [ 6188.147632] [] xfs_trans_log_buf+0x64/0x11b >> [ 6188.147632] [] xfs_dir2_data_log_unused+0x7b/0x83 >> [ 6188.147632] [] xfs_dir2_data_use_free+0x1bf/0x41a >> [ 6188.147632] [] xfs_dir2_leaf_addname+0x307/0x6f2 >> [ 6188.147632] [] xfs_dir_createname+0x113/0x129 >> [ 6188.147632] [] xfs_create+0x3e0/0x4fb > > I'll look into that further - it's a different problem to what I'm > stuck on at the moment... > > Cheers, > > Dave. > No worries. It will take a while to compile an initial xfstests report with CRC-enabled filesystems. Thanks again! Michael From david@fromorbit.com Sat May 18 01:27:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 016EC7F3F for ; Sat, 18 May 2013 01:27:33 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D72F98F8052 for ; Fri, 17 May 2013 23:27:29 -0700 (PDT) X-ASG-Debug-ID: 1368858440-04cb6c10c1378a0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id ZpfjACLDyJlvLVHh for ; Fri, 17 May 2013 23:27:21 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah0QAOYel1F5LDbs/2dsb2JhbABbgwiDArldhRsEAYEAF3SCHwEBBAEnExwYCwULCAMYCSUPBSUDIROIBgW9OhaNQAkQFYEdB4JzYQOTZ4NQkUGDISqBLAkXBA Received: from ppp121-44-54-236.lns20.syd6.internode.on.net (HELO dastard) ([121.44.54.236]) by ipmail06.adl2.internode.on.net with ESMTP; 18 May 2013 15:57:20 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Udabv-0002PD-1v; Sat, 18 May 2013 16:27:19 +1000 Date: Sat, 18 May 2013 16:27:19 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support Message-ID: <20130518062718.GD6495@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> <51971457.7060903@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51971457.7060903@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368858440 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131290 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sat, May 18, 2013 at 01:40:39AM -0400, Michael L. Semon wrote: > On 05/17/2013 11:25 PM, Dave Chinner wrote: > >On Fri, May 17, 2013 at 04:54:47PM -0400, Michael L. Semon wrote: > >>On 05/17/2013 07:12 AM, Dave Chinner wrote: > >>>Hi Folks, > >>> > >>>This is the first real "works ok" CRC patchset for xfsprogs. It > >>>provides full support for mkfs.xfs and xfs_repair, and partial > >>>read-only support for xfs_db. .... > >>OK. The basics look good so far. The patchset applied without need > >>for additional work with vi and patch. Whitespace errors were > >>reported for Patches 8, 14, 16, 17, 24, 25, and 27. xfsprogs built > >>with no additional errors over a normal xfsprogs build. > > > >Can you send me the output indicating where the whitespace errors > >are? I don't get any warnings from guilt about them when I apply the > >patchset here... > > If it makes any difference at all, I'm saving these patches using > Thunderbird... It shouldn't. > The pre-patchset xfsprogs has been saved as a tarball, so I can > provide a non-git patch session if necessary. Sorry so vague last > time: I was overjoyed that everything went through git so cleanly. > > This is the result of the patches about which `git am` complained: > > PATCH 08: .... Thanks, i'll have a look at them on monday... > >>What I'm trying to state is that a lot is in there, but the PC is > >>spinning like a top, and xfstests results are really good right now. > >>However, if I feel the need to provide a fresh environment, patch > >>management is taking some time. > > > >How are you managing patches right now? When taking in a new > >patchset from a mailing list, I save them all in a mbox file, > >then use git-am to apply them to a temporary git branch. I then move > >to my real working branch, and do a 'guilt import-commit x..y' to > >convert the commits in the temporary branch to a set of guilt > >patches, and then go from there.... > > The patches themselves are stored as individual files, in case they > need to be applied again. Separate git branches are used for kernel > patches, but for the XFS suite, I keep backup tarballs and work > directly off of master. > > A new branch is started at strategic points. If you mention "this > is based on 3.9.2 + xfsdev", kernel 3.9.2 is checked out into a new > branch, xfs-oss/master is updated and merged, and the patches are > reapplied. It takes time but is the best way, until I can find the > `git --backout-this-patch-cleanly --i-really-mean-it-this-time > --do-not-bother-to-suggest-git-am-resolved-if-it-cannot-be-done` > command. Being able to add and remove patches and reorder them easily is exactly why I use guilt. The raw git workflow is, well, less than optimal IMO. > The trick is to remember which patches to apply, so I might have a > directory that has five great patches and one that no longer > applies. > > >The worst step for me is, by far, the git-am step. Resolving patch > >conflicts is painful because you have to manually apply the patch, > >then remember to git add all the files modified by the patch, etc. > > I don't know how to use git to properly back out a patch that was > made at some time in the past. Disaster management in particular > has left me to backup at strategic points. On these older PCs, > restore operations can be much faster than git recovery attempts. So, once I've have a patch series imported into git as a guilt stack, it's managed as a series of patches rather than as individual patches or commits. The order is kept in a series file. So, updating the underlying release for a specific patch set is effectively: $ guilt checkout working # go to base tree branch $ guilt pop -a # remove all patches in the branch $ git reset --hard v3.10-rc1 # reset branch to known clean state $ git remote update $ git merge origin/master # linus tree $ git merge xfs-oss/master # xfs tree $ guilt push -a # push all local patches back into branch At this point I have an up-to-date linus + xfs + local patches branch. Say now I want add a new patchset in from the list. I save it as an mbox file "saved-patches". Then I create a new branch from the xfs tree so I know that it will apply cleanly: $ git checkout -b imports xfs-oss/master # create a new branch from the xfs tree $ git am saved-patches ..... Now all patches are applied to the imports branch. Get all the commit ids, switch back to the working branch, and import them into guilt to track them as patches: $ git log --oneline -n yyyy last commit .... xxxx commit prior to first in new series $ git checkout working $ guilt import-commit xxxx..yyyy # import the commits onto the tail # of the current patch series $ guilt push -a # apply the patchset to the current branch $ git branch -D imports # remove the temp import branch. At this point, all the patches in the series you just pulled down from the list are applied to your tree. You can now push and pop them out of the tree, reorder them, etc as though you are just managing a series of patches.... If any of the patches in the inew series fail to apply, then guilt won't apply it. If you force apply it, guilt outputs the result of applying the patch, same as if you ran patch. The difference is that for all the modified files and the files that need to be editted to fix conflicts, you don't need to git add them. just "guilt refresh" and you're ready to push the next patch in the series onto the stack... > `git am` is hard because that diagnostic "Patch does not apply" is > not helpful, and the --ignore-whitespace option can cause trouble > very quickly. Right, so you have to go to .git/rebase-apply/patchNNNN to find the patch that didn't apply, and run: $ patch --dry-run -p1 < .git/rebase-apply/patchNNNN to find out why it didn't apply. > Any patches that don't apply by `git am` are reduced from E-mail to > ordinary diffs and sent through `git apply`. If that doesn't work, > they go through patch; vimdiff is used to help splice the patches in > by hand. `git add` is then used to add the files. Yes, it's painful, isn't it? That's why I try to apply the patches to an otherwise unmodified tree so I can avoid this pain and use guilt to resolve any conflicts. However, if you do have git-am failures, skipping straight to the above patch that git has already stripped from the email will make it a bit faster for you. It's still annoying having to manually use git add, though. > >>[ 6188.126012] XFS: Assertion failed: first <= last && last < > >>BBTOB(bp->b_length), file: fs/xfs/xfs_trans_buf.c, line: 569 > > > >Hmmm - that seems familiar - I thought I'd already fixed a bug like > >that previously... > > You may have fixed it already. If there's a patch, either I don't > have it, or it's stuck on my main xfstests PC at home. Was this the > issue that was triggered easily by xfstests xfs/017? Might have been. It was a while back. If it's still there once I've got it through xfstests here and you've applied the patches I send out to get that far then I'll need to look deeper... Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlsemon35@gmail.com Sat May 18 01:28:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D22C97F3F for ; Sat, 18 May 2013 01:28:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C3D8F304077 for ; Fri, 17 May 2013 23:28:23 -0700 (PDT) X-ASG-Debug-ID: 1368858502-04cb6c10b837950001-NocioJ Received: from mail-ie0-f180.google.com (mail-ie0-f180.google.com [209.85.223.180]) by cuda.sgi.com with ESMTP id e9D6kL4ex6oT0JKi (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 May 2013 23:28:22 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.180 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.180] Received: by mail-ie0-f180.google.com with SMTP id ar20so10539913iec.25 for ; Fri, 17 May 2013 23:28:22 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.180] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.180] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=2tiaisr5Uq+cH6EnUykXVnAaYPWYLBXWyIbe1+x/JAQ=; b=YefzCAXA3URfld4E99kIYCNXDPzWFMl+Fg8Q6KK6V/rZ+bwoIyWEo+s6bCvtE5/6dQ R/0G6M/BJttZhFBn4N9qjbMdqSZxQbd4VJ1kaCs8uW0vF/ES93dYcvXhSz7L41YHPI7X +1grxEDwfSXtZmO+TDsWBG/u0VpaR0yzTSxqbCufPdsJy7jbj1jgquomIFzqYTnk/dv+ FH/s4C4VRlJaIkPuwsKP2szjC/x5sdNFI4PCaeALCQoG1IrReunBcQhVYnwOA6tPrE70 Hx4PyB2UfRQH/vMMR9Buq6w1R4hVnlYBQpL2x1FVu6PZg9N7yRO5b9yqS37jcuYgDvM7 ZE8g== X-Received: by 10.50.102.67 with SMTP id fm3mr491475igb.5.1368858502560; Fri, 17 May 2013 23:28:22 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id xf4sm1145133igb.8.2013.05.17.23.28.10 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 17 May 2013 23:28:21 -0700 (PDT) Message-ID: <51971F47.2020905@gmail.com> Date: Sat, 18 May 2013 02:27:19 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jeff Liu CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> <51970C90.5050005@oracle.com> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <51970C90.5050005@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f180.google.com[209.85.223.180] X-Barracuda-Start-Time: 1368858502 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131290 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/18/2013 01:07 AM, Jeff Liu wrote: > Looks our test for 32-bit system is insufficient. There has another bug > reports regarding 32-bit yesterday: > http://oss.sgi.com/archives/xfs/2013-05/msg00494.html I read this and did not chime in because I don't know about the "no space left on device" error. The first issue the customer had, though, was one I had on a 2.8GHz Pentium 4. The idea of using a tunable to increase vmalloc space made me think, "What, am I using FreeBSD or something? Why didn't Linux auto-tune this?" so I dug deeper. [Disclaimer: I use FreeBSD and find value in it, but it requires at least some sysctl tuning for things that Linux will tune automatically.] Basically, I had vmalloc space to have an environment set up perfectly in 768 MB of RAM. Then I added another 512 MB, and Linux saw only 896 MB for lack of highmem support. At that point I enabled highmem support, Linux decided to auto-tune my vmalloc space down to 128 MB, which was not enough to handle an xfsdump of a 30 GB device-mapper crypt partition. The PC, when left alone, could develop those same oops-y messages while doing incremental xfsdumps overnight, and if left alone for days, even simple cp commands could cause issues. My resolution was to use the CONFIG_VMSPLIT_2G kernel option and reduce the things reported by /proc/vmallocinfo that are vmalloc items. Some ioremap items in /proc/vmallocinfo were removed where convenient. Despite warnings on the Internet like "this breaks ELF" and "this breaks binary modules," I've had no issues with it in the nine months in which the kernel has operated this way. [Note: I don't use binary modules. For that matter, only that PC uses modules at all.] Ultimately, I got rid of the crypts as well, but not before verifying that the above setup did indeed solve the problem at hand. It's only my two cents, one person trying to balance Internet research against what actually works in testing on one PC. If the solution is sane sane to you, feel free to forward this story to your customer to see if anything in it will help. > So I'm going to setup a 32-bit test environment for such tests together > with Michael. Excellent! Let me know a little about your test environment and whether it's a VM or bare metal. Michael From mlsemon35@gmail.com Sat May 18 02:43:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 712917F3F for ; Sat, 18 May 2013 02:43:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D67F5AC001 for ; Sat, 18 May 2013 00:43:17 -0700 (PDT) X-ASG-Debug-ID: 1368862993-04cbb05fe3399710001-NocioJ Received: from mail-ie0-f173.google.com (mail-ie0-f173.google.com [209.85.223.173]) by cuda.sgi.com with ESMTP id m8ndXA0jgQpdPP9J (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 18 May 2013 00:43:13 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.173 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.173] Received: by mail-ie0-f173.google.com with SMTP id k5so10995449iea.18 for ; Sat, 18 May 2013 00:43:13 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.173] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.173] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=FhA3r605/xu360GNVU5HM1qRjZuqlUX6LRPWDevou/g=; b=SrX2Cuw1HdSMQnNFUgSO4CYuSrpxTyOXRoGQuh/21EDF2xHsNFwYkfydL0d0rwltUG lg7PlZSB6Ruol9VXH9Kpx+gqRGEw7Ad8uTqPbeV96snbwZYjR3u+rj1Rozs2Q87STC0D yX93kTQnBNIjDyPM5Lh7CdoMfBMgQJl6ms1/SAocviP+EniyPw5yoEiq8IbeLsWMUr8G l122UDQP3WmiCjd1qzZ72wVeStj5VFWYNjxN0sTv16lCOjHQX68jxpgFsicXMEWSb+VS it00oHt1nW9l79FuoW26wKZiZl+PUrjb9/+AaRMO1PFzGUSMlIhzWWYON7De72Bl0z0x FrdA== X-Received: by 10.50.115.42 with SMTP id jl10mr535087igb.71.1368862993280; Sat, 18 May 2013 00:43:13 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id d19sm1349844igo.6.2013.05.18.00.43.03 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 18 May 2013 00:43:12 -0700 (PDT) Message-ID: <519730FD.7050200@gmail.com> Date: Sat, 18 May 2013 03:42:53 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> <51971457.7060903@gmail.com> <20130518062718.GD6495@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <20130518062718.GD6495@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f173.google.com[209.85.223.173] X-Barracuda-Start-Time: 1368862993 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131294 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/18/2013 02:27 AM, Dave Chinner wrote: > On Sat, May 18, 2013 at 01:40:39AM -0400, Michael L. Semon wrote: >> On 05/17/2013 11:25 PM, Dave Chinner wrote: >>> On Fri, May 17, 2013 at 04:54:47PM -0400, Michael L. Semon wrote: >>>> On 05/17/2013 07:12 AM, Dave Chinner wrote: > Being able to add and remove patches and reorder them easily is > exactly why I use guilt. The raw git workflow is, well, less than > optimal IMO. > >> The trick is to remember which patches to apply, so I might have a >> directory that has five great patches and one that no longer >> applies. >> >>> The worst step for me is, by far, the git-am step. Resolving patch >>> conflicts is painful because you have to manually apply the patch, >>> then remember to git add all the files modified by the patch, etc. >> >> I don't know how to use git to properly back out a patch that was >> made at some time in the past. Disaster management in particular >> has left me to backup at strategic points. On these older PCs, >> restore operations can be much faster than git recovery attempts. > > So, once I've have a patch series imported into git as a guilt > stack, it's managed as a series of patches rather than as individual > patches or commits. The order is kept in a series file. So, updating > the underlying release for a specific patch set is effectively: > > $ guilt checkout working # go to base tree branch > $ guilt pop -a # remove all patches in the branch > $ git reset --hard v3.10-rc1 # reset branch to known clean state > $ git remote update > $ git merge origin/master # linus tree > $ git merge xfs-oss/master # xfs tree > $ guilt push -a # push all local patches back into branch > > At this point I have an up-to-date linus + xfs + local patches > branch. > > Say now I want add a new patchset in from the list. I save it as an > mbox file "saved-patches". Then I create a new branch from the xfs > tree so I know that it will apply cleanly: > > $ git checkout -b imports xfs-oss/master > # create a new branch from the xfs tree > $ git am saved-patches > ..... > > Now all patches are applied to the imports branch. Get all the > commit ids, switch back to the working branch, and import them into > guilt to track them as patches: > > $ git log --oneline -n > yyyy last commit > .... > xxxx commit prior to first in new series > $ git checkout working > $ guilt import-commit xxxx..yyyy # import the commits onto the tail > # of the current patch series > $ guilt push -a # apply the patchset to the current branch > $ git branch -D imports # remove the temp import branch. > > At this point, all the patches in the series you just pulled down > from the list are applied to your tree. You can now push and pop > them out of the tree, reorder them, etc as though you are just > managing a series of patches.... > > If any of the patches in the inew series fail to apply, then guilt > won't apply it. If you force apply it, guilt outputs the result of > applying the patch, same as if you ran patch. The difference is that > for all the modified files and the files that need to be editted to > fix conflicts, you don't need to git add them. just "guilt refresh" > and you're ready to push the next patch in the series onto the > stack... Ah, excellent explanation! guilt sounds awesome. Not finding anything that looked like an official site for guilt that worked, I grabbed the guilt source from the wheezy section at packages.debian.org. At the next opportunity, I will learn it, live it, love it. Michael From jeff.liu@oracle.com Sat May 18 03:43:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0928B7F3F for ; Sat, 18 May 2013 03:43:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id E7811304032 for ; Sat, 18 May 2013 01:43:55 -0700 (PDT) X-ASG-Debug-ID: 1368866634-04cbb05fe339c320001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id pDThf818H9hMEYnh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 18 May 2013 01:43:54 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4I8hrUd030136 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 18 May 2013 08:43:53 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4I8hqvq029144 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Sat, 18 May 2013 08:43:52 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4I8hpNf009226; Sat, 18 May 2013 08:43:51 GMT Received: from [192.168.1.103] (/123.119.110.176) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sat, 18 May 2013 01:43:51 -0700 Message-ID: <51973F43.4090205@oracle.com> Date: Sat, 18 May 2013 16:43:47 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Paolo Pisati CC: xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages In-Reply-To: <20130517104529.GA12490@luxor.wired.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1368866634 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131298 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/17/2013 06:45 PM, Paolo Pisati wrote: > While exercising swift on a single node 32bit armhf system running a 3.5 kernel, > i got this when i hit ~25% of fs space usage: > > dmesg: > ... > [ 3037.399406] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3037.399442] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3037.399469] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3037.399485] XFS (sda5): xfs_buf_get: failed to map pages > [ 3037.399485] > [ 3037.399501] XFS (sda5): Internal error xfs_trans_cancel at line 1466 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Caller 0xbf0235e0 > [ 3037.399501] > [ 3037.413789] [] (unwind_backtrace+0x0/0x104) from [] (dump_stack+0x20/0x24) > [ 3037.413985] [] (dump_stack+0x20/0x24) from [] (xfs_error_report+0x60/0x6c [xfs]) > [ 3037.414321] [] (xfs_error_report+0x60/0x6c [xfs]) from [] (xfs_trans_cancel+0xfc/0x11c [xfs]) > [ 3037.414654] [] (xfs_trans_cancel+0xfc/0x11c [xfs]) from [] (xfs_create+0x228/0x558 [xfs]) > [ 3037.414953] [] (xfs_create+0x228/0x558 [xfs]) from [] (xfs_vn_mknod+0x9c/0x180 [xfs]) > [ 3037.415239] [] (xfs_vn_mknod+0x9c/0x180 [xfs]) from [] (xfs_vn_mkdir+0x20/0x24 [xfs]) > [ 3037.415393] [] (xfs_vn_mkdir+0x20/0x24 [xfs]) from [] (vfs_mkdir+0xc4/0x13c) > [ 3037.415410] [] (vfs_mkdir+0xc4/0x13c) from [] (sys_mkdirat+0xdc/0xe4) > [ 3037.415422] [] (sys_mkdirat+0xdc/0xe4) from [] (sys_mkdir+0x24/0x28) > [ 3037.415437] [] (sys_mkdir+0x24/0x28) from [] (ret_fast_syscall+0x0/0x30) > [ 3037.415452] XFS (sda5): xfs_do_force_shutdown(0x8) called from line 1467 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Return address = 0xbf06340c > [ 3037.416892] XFS (sda5): Corruption of in-memory data detected. Shutting down filesystem > [ 3037.425008] XFS (sda5): Please umount the filesystem and rectify the problem(s) > [ 3047.912480] XFS (sda5): xfs_log_force: error 5 returned. > > flag@c13:~$ df -h > Filesystem Size Used Avail Use% Mounted on > /dev/sda2 225G 2.1G 212G 1% / > none 4.0K 0 4.0K 0% /sys/fs/cgroup > udev 2.0G 4.0K 2.0G 1% /dev > tmpfs 405M 260K 404M 1% /run > none 5.0M 0 5.0M 0% /run/lock > none 2.0G 0 2.0G 0% /run/shm > none 100M 0 100M 0% /run/user > /dev/sda1 228M 30M 186M 14% /boot > /dev/sda5 2.0G 569M 1.5G 28% /mnt/sdb1 > > flag@c13:~$ df -i > Filesystem Inodes IUsed IFree IUse% Mounted on > /dev/sda2 14958592 74462 14884130 1% / > none 182027 1 182026 1% /sys/fs/cgroup > udev 177378 1361 176017 1% /dev > tmpfs 182027 807 181220 1% /run > none 182027 3 182024 1% /run/lock > none 182027 1 182026 1% /run/shm > none 182027 1 182026 1% /run/user > /dev/sda1 124496 35 124461 1% /boot > /dev/sda5 524288 237184 287104 46% /mnt/sdb1 > > the vmalloc space is ~256M usually on this box, so i enlarged it: > > flag@c13:~$ dmesg | grep vmalloc > Kernel command line: console=ttyAMA0 nosplash vmalloc=512M > vmalloc : 0xdf800000 - 0xff000000 ( 504 MB) > > and while i didn't hit the warning above, still after ~25% of usage, the storage > node died with: > > May 17 06:26:00 c13 container-server ERROR __call__ error with PUT /sdb1/123172/AUTH_test/3b3d078015304a41b76b0ab083b7863a_5 : [Errno 28] No space > left on device: '/srv/1/node/sdb1/containers/123172' (txn: tx8ea3ce392ee94df096b16-00519605b0) > > > flag@c13:~$ df -h > Filesystem Size Used Avail Use% Mounted on > /dev/sda2 225G 3.9G 210G 2% / > none 4.0K 0 4.0K 0% /sys/fs/cgroup > udev 2.0G 4.0K 2.0G 1% /dev > tmpfs 405M 260K 404M 1% /run > none 5.0M 0 5.0M 0% /run/lock > none 2.0G 0 2.0G 0% /run/shm > none 100M 0 100M 0% /run/user > /dev/sda1 228M 25M 192M 12% /boot > /dev/sda5 2.0G 564M 1.5G 28% /mnt/sdb1 > > flag@c13:~$ df -i > Filesystem Inodes IUsed IFree IUse% Mounted on > /dev/sda2 14958592 124409 14834183 1% / > none 114542 1 114541 1% /sys/fs/cgroup > udev 103895 1361 102534 2% /dev > tmpfs 114542 806 113736 1% /run > none 114542 3 114539 1% /run/lock > none 114542 1 114541 1% /run/shm > none 114542 1 114541 1% /run/user > /dev/sda1 124496 33 124463 1% /boot > /dev/sda5 524288 234880 289408 45% /mnt/sdb1 > > > any idea what else shall i tune to workaround this? or is it a know problem that > involves 32bit arch and xfs? I tried to reproduce this issue against the latest upstream tree on 32-bit system but no luck. Could you please supply the following info: 1) xfs_db -r "-c freesp -s" /dev/sda5 2) xfs_info /mnt/sdb1 Thanks, -Jeff From jeff.liu@oracle.com Sat May 18 03:46:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7CFDE7F3F for ; Sat, 18 May 2013 03:46:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 481EB304039 for ; Sat, 18 May 2013 01:46:15 -0700 (PDT) X-ASG-Debug-ID: 1368866773-04bdf042243a7650001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id ZkOOTvmGmatrjiJQ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 18 May 2013 01:46:14 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4I8kACs015527 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 18 May 2013 08:46:11 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4I8kBN5018903 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Sat, 18 May 2013 08:46:12 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4I8kB9u004846; Sat, 18 May 2013 08:46:11 GMT Received: from [192.168.1.103] (/123.119.110.176) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sat, 18 May 2013 01:46:10 -0700 Message-ID: <51973FD0.5020602@oracle.com> Date: Sat, 18 May 2013 16:46:08 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <51969917.2080209@gmail.com> <20130518032507.GA6495@dastard> <51970C90.5050005@oracle.com> <51971F47.2020905@gmail.com> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <51971F47.2020905@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1368866774 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131298 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 05/18/2013 02:27 PM, Michael L. Semon wrote: > On 05/18/2013 01:07 AM, Jeff Liu wrote: > >> Looks our test for 32-bit system is insufficient. There has another bug >> reports regarding 32-bit yesterday: >> http://oss.sgi.com/archives/xfs/2013-05/msg00494.html > > I read this and did not chime in because I don't know about the "no > space left on device" error. > > The first issue the customer had, though, was one I had on a 2.8GHz > Pentium 4. The idea of using a tunable to increase vmalloc space made > me think, "What, am I using FreeBSD or something? Why didn't Linux > auto-tune this?" so I dug deeper. [Disclaimer: I use FreeBSD and find > value in it, but it requires at least some sysctl tuning for things that > Linux will tune automatically.] > > Basically, I had vmalloc space to have an environment set up perfectly > in 768 MB of RAM. Then I added another 512 MB, and Linux saw only 896 > MB for lack of highmem support. At that point I enabled highmem > support, Linux decided to auto-tune my vmalloc space down to 128 MB, > which was not enough to handle an xfsdump of a 30 GB device-mapper crypt > partition. The PC, when left alone, could develop those same oops-y > messages while doing incremental xfsdumps overnight, and if left alone > for days, even simple cp commands could cause issues. My resolution was > to use the CONFIG_VMSPLIT_2G kernel option and reduce the things > reported by /proc/vmallocinfo that are vmalloc items. Some ioremap > items in /proc/vmallocinfo were removed where convenient. Despite > warnings on the Internet like "this breaks ELF" and "this breaks binary > modules," I've had no issues with it in the nine months in which the > kernel has operated this way. [Note: I don't use binary modules. For > that matter, only that PC uses modules at all.] Ultimately, I got rid > of the crypts as well, but not before verifying that the above setup did > indeed solve the problem at hand. > > It's only my two cents, one person trying to balance Internet research > against what actually works in testing on one PC. If the solution is > sane sane to you, feel free to forward this story to your customer to > see if anything in it will help. > >> So I'm going to setup a 32-bit test environment for such tests together >> with Michael. > > Excellent! Let me know a little about your test environment and whether > it's a VM or bare metal. VM running via virtual box. The kernel is based on the updated xfs-next tree. root@linux32bit:/home/jeff# uname -a Linux linux32bit 3.10.0-rc1+ #1 SMP Sat May 18 15:30:11 CST 2013 i686 i686 i386 GNU/Linux Thanks, -Jeff From bounces2@triskelwebdesign.com Sat May 18 05:17:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 30A017F3F for ; Sat, 18 May 2013 05:17:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0F4A4304032 for ; Sat, 18 May 2013 03:17:49 -0700 (PDT) X-ASG-Debug-ID: 1368872267-04cbb05fe53a2640001-NocioJ Received: from triskel.fbyneserv.com (agencia-nzuri.info [69.194.202.164]) by cuda.sgi.com with ESMTP id EV6GlqBZfCqEgEpB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 18 May 2013 03:17:47 -0700 (PDT) X-Barracuda-Envelope-From: bounces2@triskelwebdesign.com X-Barracuda-Apparent-Source-IP: 69.194.202.164 Received: from nzuri by triskel.fbyneserv.com with local (Exim 4.80) (envelope-from ) id 1UdeCw-0005V0-Tq for xfs@oss.sgi.com; Sat, 18 May 2013 06:17:46 -0400 To: xfs@oss.sgi.com Subject: Crie seu Site na Internet Date: Sat, 18 May 2013 06:17:46 -0400 X-ASG-Orig-Subj: Crie seu Site na Internet From: Juliana Message-ID: X-Priority: 3 X-Mailer: PHPMailer [version 1.73] X-Mailer: phplist v2.10.18 X-MessageID: 111 X-ListMember: xfs@oss.sgi.com Errors-To: bounces2@triskelwebdesign.com MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="b1_c5d2c343dd89bbc662c324d05afa88e7" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - triskel.fbyneserv.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [502 500] / [47 12] X-AntiAbuse: Sender Address Domain - triskelwebdesign.com X-Get-Message-Sender-Via: triskel.fbyneserv.com: authenticated_id: nzuri/from_h X-Barracuda-Connect: agencia-nzuri.info[69.194.202.164] X-Barracuda-Start-Time: 1368872267 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=EXTRA_MPART_TYPE, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131304 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 HTML_MESSAGE BODY: HTML included in message --b1_c5d2c343dd89bbc662c324d05afa88e7 Content-Type: multipart/alternative; boundary="b2_c5d2c343dd89bbc662c324d05afa88e7" --b2_c5d2c343dd89bbc662c324d05afa88e7 Content-Type: text/plain; charset = "UTF-8" Content-Transfer-Encoding: 8bit Olá, Gostaríamos de convidar-lhe a conhecer o nosso trabalho. A Agência Triskel oferece serviço de criação de um site moderno para você ou para sua empresa. Pedimos que visite o nosso portfólio em nosso web site: http://www.triskelwebdesign.com Poderá com isto verificar a qualidade do nosso trabalho. Criamos sites gerenciáveis, que você mesmo poderá administrar, atualizando e modificando as informações com grande facilidade. Criamos sites com a sua cara, o design é personalizado, sempre moderno e elegante, único, buscando atender e satisfazer os seus interesses. Por que a criação de um site é algo importante para você? Já passou o tempo em que web sites eram complicados e parte pequena do marketing de uma empresa. Com o crescimento substancial da internet, o marketing virtual tem se tornado imprescindível. Aumente suas chances de crescimento pessoal e profissional, invista em si mesmo e nos seus empreendimentos! Apresentamos algumas propostas como exemplificação de nossos serviços. Proposta 1 - Site gerenciável, com painel de controle para fácil administração. (Wordpress ou Joomla) - Design único e personalizado - Otimização para os sites de busca (SEO) - Integração com as redes sociais - Ferramenta de monitoramento de visitantes Valor: 1.250 reais Proposta 2 - Site gerenciável, com painel de controle para fácil administração (Wordpress ou Joomla) - Visual com template escolhido pelo cliente, ao qual realizamos alterações - Otimização para os sites de busca (SEO) - Integração com as redes sociais - Ferramenta de monitoramento de visitantes Valor: 950 reais Aceitamos pagamento por cartão de crédito em até 12x através do intermediário PagSeguro. Utilizando os gerenciadores mais modernos (Wordpress e Joomla), você terá todos os recursos para aumentar efetivamente seu marketing na web, com total controle sobre o seu site e dispondo de estatísticas complexas sobre seu desempenho. Oferecemos nossos serviços a todas as regiões. Temos ainda soluções de E-Commerce para a criação de lojas virtuais. Para solicitar um orçamento específico, basta responder a este email. Agradecemos a atenção, esperamos que possa contar com nossos serviços para a criação de um belo web site, Att, Juliana Conceicao. Agencia Triskel. www.triskelwebdesign.com -- powered by phpList, www.phplist.com -- --b2_c5d2c343dd89bbc662c324d05afa88e7 Content-Type: text/html; charset = "UTF-8" Content-Transfer-Encoding: 8bit

 Olá, 

Gostaríamos de convidar-lhe a conhecer o nosso trabalho. A Agência Triskel oferece serviço de criação de um site moderno para você ou para sua empresa.


Pedimos que visite o nosso portfólio em nosso web site:

http://www.triskelwebdesign.com

Poderá com isto verificar a qualidade do nosso trabalho.

Criamos sites gerenciáveis, que você mesmo poderá administrar, atualizando e modificando as informações com grande facilidade.

Criamos sites com a sua cara, o design é personalizado, sempre moderno e elegante, único, buscando atender e satisfazer os seus interesses.

 

Por que a criação de um site é algo importante para você? 

 

Já passou o tempo em que web sites eram complicados e parte pequena do marketing de uma empresa. Com o crescimento substancial da internet, o marketing virtual tem se tornado imprescindível. Aumente suas chances de crescimento pessoal e profissional, invista em si mesmo e nos seus empreendimentos!

 

Apresentamos algumas propostas como exemplificação de nossos serviços.

 

Proposta 1

- Site gerenciável, com painel de controle para fácil administração. (Wordpress ou Joomla)

- Design único e personalizado

- Otimização para os sites de busca (SEO)

- Integração com as redes sociais

- Ferramenta de monitoramento de visitantes

Valor: 1.250 reais


Proposta 2

- Site gerenciável, com painel de controle para fácil administração (Wordpress ou Joomla)

- Visual com template escolhido pelo cliente, ao qual realizamos alterações

- Otimização para os sites de busca (SEO)

- Integração com as redes sociais

- Ferramenta de monitoramento de visitantes

Valor: 950 reais 

 

Aceitamos pagamento por cartão de crédito em até 12x através do intermediário PagSeguro.


Utilizando os gerenciadores mais modernos (Wordpress e Joomla), você terá todos os recursos para aumentar efetivamente seu marketing na web, com total controle sobre o seu site e dispondo de estatísticas complexas sobre seu desempenho.

Oferecemos nossos serviços a todas as regiões.

Temos ainda soluções de E-Commerce para a criação de lojas
virtuais.


Para solicitar um orçamento específico, basta responder a este email.

 

Agradecemos a atenção, esperamos que possa contar com nossos serviços para a criação de um belo web site,



Att,

Juliana Conceicao.
Agencia Triskel.
www.triskelwebdesign.com

powered by phpList2.10.18,
© phpList ltd

--b2_c5d2c343dd89bbc662c324d05afa88e7-- --b1_c5d2c343dd89bbc662c324d05afa88e7 Content-Type: image/png; name="powerphplist.png" Content-Transfer-Encoding: base64 Content-ID: <810a22c957a9537e5c9018d5be8e579f> Content-Disposition: inline; filename="powerphplist.png" iVBORw0KGgoAAAANSUhEUgAAAEYAAAAeCAMAAACmLZgsAAADAFBMVEXYx6fmfGXfnmCchGd3VDPi pmrouYIHBwe3qpNlVkTmcWHdmFrfRTeojW3IpXn25L7mo3TaGhe6mXLCmm+7lGnntn7sx5Sxh1us k3akdEfBiFPtyJfgo2bjqW7krnTjqnDproK1pInvODRRTEKFemnuzaAtIRXenF7KqIHfn2KHcVjt yZjnqHrnknLhpGjnt4HeMyzlnnHr1rLkmW3WAADllGuUfmPcKSMcFxLnuICUd1f037kqJiDqv47s xZLYAQHLtJLfOTI7KhrInnHqwY7hTUHz2rGDbVTz27Xkr3XJvKPng3HuypzouoPrwo/hXk3x1qzq wIvizavrwpDu0atqYVTqnoBdTz7QlFvqtYbgST14cWPar33hYkrw0qZKQjjdml12XkPSv52NhHPo vIjjrHLZDQz03bbsxZHcq3fgQjsUEg92YUmUinjgpGbvz6PZtYjcp3Tr2bWEaUzz3LXx1KhFOi7p vojy2K314rzjvYzjf2EwLCbw0qRvUzb25MBoSi3gomXdmFvlsXhBOzIiHxrw06i8oHzx1qrqwIvm jWt4aVaFXjnopHzuy5724r/supM5Myzeml3qv4rx1Kbou4bmuYTosoHhyaTipWngoWTmtHvms3rj rXLmsn2yf07OkFf137zsx5bw1KvmsXjoq33uzqTsxpTouojdl1vlZlvswpDy16rDtZrkbFq3jmHh UUXhpmrbHxriX0/lsnrirnf14r/ty6BZPiXouYflsnjmsXvimmZaQSjiqGvipmnhpmn2473msnjo vIbtx5nem13w0aRKNCDipWrrw5TsvY7qvokODArhWUnqwI/ip2vemVzlpnTrw5Hjq3Dy17Dihl/x SUPvbl3Nu53gUEPfQDPhpWnlh2nwi3ToiXDouYXt27n03LO1nX3bFBHjlmbaCAnroHXYCAfBs5fW qXXsxZbnwIzjYFPrw5Ddwp3pvYyUaD7On27RpnjXpXDswJTWpG/gsn3lwJHy4Lv037jiaFbdmVzc l1kDAgEEAwIAAACJJzCsAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1F B9MKFQolCwe/95QAAAXuSURBVHicrZF5XJJ3HMdVHodmZhcmCqbzRFNRSbGpCHk2tF46y6yQyiup 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 3G0AAAAASUVORK5CYII= --b1_c5d2c343dd89bbc662c324d05afa88e7-- From rjevskiy@gmail.com Sat May 18 07:13:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D42D47F3F for ; Sat, 18 May 2013 07:13:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C3F85304032 for ; Sat, 18 May 2013 05:13:31 -0700 (PDT) X-ASG-Debug-ID: 1368879209-04cb6c10c149da0001-NocioJ Received: from mail-la0-f48.google.com (mail-la0-f48.google.com [209.85.215.48]) by cuda.sgi.com with ESMTP id ceXaElQM9wJzHMn5 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 18 May 2013 05:13:30 -0700 (PDT) X-Barracuda-Envelope-From: rjevskiy@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.48 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.48] Received: by mail-la0-f48.google.com with SMTP id fs12so5065951lab.21 for ; Sat, 18 May 2013 05:13:29 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.48] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.48] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version:content-type; bh=wXAbQk9RJGgoHk1V+4c+TmsGyTuR4A98defWLVQ0p58=; b=UHd1cdtKIMgidp2s88OKjHnIefaMK4D37o3T/FwnM7lUm5MhRJ8NkJtJbpaKJEDB8R CzNYyDtMkRo36ZqVQfboJC0C1eBmN2rzBj0GL2kVshDf+TutmaE+T+EEsur2DpKVW8dt Kn+lMHU0peggHjPvyZY/PY9DwdHw9qTpclUFOsnMxX0VeIKbILRi2n6o4fxOuz9DGeSU FqhfFGiLIzzxMKcejFL0gnKm0By9UgXhIyCB4VeSe2a3zpyKTHi0R37z/t+OW3lqVoW+ BpxeKmcYzdB050s7YFFVzQp6mCF9eSf5u16E9ARQ+oatbxAb/dwYQSWht9Xg13QHbAH9 wKDg== X-Received: by 10.112.74.45 with SMTP id q13mr1089472lbv.73.1368879209136; Sat, 18 May 2013 05:13:29 -0700 (PDT) Received: from smtp.gmail.com (swsoft-msk-nat.sw.ru. [195.214.232.10]) by mx.google.com with ESMTPSA id mp1sm6432942lbb.5.2013.05.18.05.13.26 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 18 May 2013 05:13:27 -0700 (PDT) Sender: Dmitry Monakhov From: Dmitry Monakhov To: Dave Chinner Cc: xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] xfstests: test data integrity under disk failure In-Reply-To: <20130516233153.GI24635@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: test data integrity under disk failure References: <1368706052-24391-1-git-send-email-dmonakhov@openvz.org> <20130516233153.GI24635@dastard> User-Agent: Notmuch/0.6.1 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-redhat-linux-gnu) Date: Sat, 18 May 2013 16:13:25 +0400 Message-ID: <878v3cv63e.fsf@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Barracuda-Connect: mail-la0-f48.google.com[209.85.215.48] X-Barracuda-Start-Time: 1368879210 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131312 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Fri, 17 May 2013 09:31:53 +1000, Dave Chinner wrote: > On Thu, May 16, 2013 at 04:07:32PM +0400, Dmitry Monakhov wrote: > > Parallels team have old good tool called hwflush-check which is server/client > > application for testing data integrity under system/disk failure conditions. > > Usually we run hwflush-check on two different hosts and use PMU to trigger real > > power failure of the client as a whole unit. This tests may be used for > > SSD checking (some of them are known to have probelms with hwflush). > > I hope it will be good to share it with community. > > > > This tests simulate just one disk failure while client system should > > survive this failure. This test extend idea of shared/305. > > 1) Run hwflush-check server and client on same host as usual > > 2) Simulare disk failure via blkdev failt injection API aka 'make-it-fail' > > 3) Umount failed device > > 4) Makes disk operatable again > > 5) Mount filesystem > > 3) Check data integrity > > So, for local disk failure, why do we need a client/server network > architecture? That just complicates the code, and AFAICT > > all the client does is send report report packets to server which > contain an id number that is kept in memory. If on restart of the > client after failure the ID in the report packet doesn't match what > the server wants, then it fails the test. > > So, why is the server needed here? Just dump the IDs the client > writes to the file on a device not being tested, and either diff > them against a golden image or run a check to see all the IDs are > monotonically increasing. That removes all the networking code from > the test, the need for a client/server architecture, etc, and makes > the test far easier to review In fact the reason is quite simple. Initially the this tool was designed for real disk cache testing under power failure conditions. And want to share it with community. Off course it is possible to simplify things for 'one hose' case but it is not too big. Let's review it one and keep it simple but useful not just for local but also for real power failure tests. Fairly to say that initial idea was to add persistent state to FIO. But logic starts to getting too complex so we write hwflush-check. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > -- > To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From mlsemon35@gmail.com Sat May 18 13:13:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2291D7F3F for ; Sat, 18 May 2013 13:13:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0377D30405F for ; Sat, 18 May 2013 11:13:47 -0700 (PDT) X-ASG-Debug-ID: 1368900824-04cbb05fe23bd4f0001-NocioJ Received: from mail-ie0-f176.google.com (mail-ie0-f176.google.com [209.85.223.176]) by cuda.sgi.com with ESMTP id 6HCMc5EFf9cTrfYw (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 18 May 2013 11:13:44 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.176 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.176] Received: by mail-ie0-f176.google.com with SMTP id at1so11423397iec.35 for ; Sat, 18 May 2013 11:13:43 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.176] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.176] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=vzxLwQmAacFbMuuRWnmgD2rS3WutRCMBKGgjP7MKLms=; b=IF9QckV/cNRbox7QeREZnvrQRl5R6KD8oPJ9CAwyRzpXlFS8za/bTPo0Xb9dG4pdXD 6+Swmh1G6D+M8cNCWtRq7AWQ2YA3/cOesmqyt7iipMQvOME+yfkgnx02LOxMWdtDhzGK QxMbMwygPhdLOuuU8RXiGE6lwq7yga69GxLw5w533Qk7zAbyouNRpWGhLreCubkRXCNH UEMD9e9DOYJ3u60t3qliNIKZAGZAvxXI53joQe3vcyfhEfS38I9BiZgAUBPxFVn9kvei 4s7CEZwGzy1k6OV4A/VvTHdC9GU89pmn/i1JWh6g45D7iHwfkrrgH7EDvAsoO2eQD5JO QGvQ== X-Received: by 10.50.87.71 with SMTP id v7mr1612670igz.29.1368900823918; Sat, 18 May 2013 11:13:43 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id ij6sm3330703igb.1.2013.05.18.11.13.35 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 18 May 2013 11:13:43 -0700 (PDT) Message-ID: <5197C4C1.4050009@gmail.com> Date: Sat, 18 May 2013 14:13:21 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 00/30] xfsprogs: Initial CRC support References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 00/30] xfsprogs: Initial CRC support In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f176.google.com[209.85.223.176] X-Barracuda-Start-Time: 1368900824 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131336 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/17/2013 07:12 AM, Dave Chinner wrote: > Hi Folks, > > This is the first real "works ok" CRC patchset for xfsprogs. It > provides full support for mkfs.xfs and xfs_repair, and partial > read-only support for xfs_db. > > For mkfs.xfs, it does everything properly, and filesystems that are > freshly made also run cleanly through xfs_repair and mount and run > just fine. This seemed to be worthy of early note: xfs/031 30s ...[ 587.843478] XFS (sdb6): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! [ 587.843478] Use of these features in this kernel is at your own risk! *** Error in `/sbin/mkfs.xfs': malloc(): smallbin double linked list corrupted: 0x0907f7d0 *** The test doesn't seem to finish, but Ctrl-c ends the test cleanly. No dmesg stuff is added, and strace doesn't show anything between the mount message and the error message. I'll need to re-enable tracers to provide a trace...and as traces can be huge, I'll wait on your advice. [BTW, the "30s" reference time is from the non-CRC run of your patched xfsprogs. The non-CRC run looked good.] Thanks! Michael From kornos@mail.com Sat May 18 13:39:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 21CBD7F3F for ; Sat, 18 May 2013 13:39:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B8A5BAC002 for ; Sat, 18 May 2013 11:39:25 -0700 (PDT) X-ASG-Debug-ID: 1368902361-04bdf042243c6b80001-NocioJ Received: from mout.gmx.net (mout.gmx.net [74.208.4.200]) by cuda.sgi.com with ESMTP id Kq1M4N7EdQiA8BdL for ; Sat, 18 May 2013 11:39:21 -0700 (PDT) X-Barracuda-Envelope-From: kornos@mail.com X-Barracuda-Apparent-Source-IP: 74.208.4.200 Received: from mailout-us.gmx.com ([172.19.198.46]) by mrigmx.server.lan (mrigmxus001) with ESMTP (Nemesis) id 0LcBiz-1UBu0r2Yg1-00jZEI for ; Sat, 18 May 2013 20:39:20 +0200 Received: (qmail 18580 invoked by uid 0); 18 May 2013 18:39:20 -0000 Received: from 86.107.101.181 by rms-us017 with HTTP Content-Type: multipart/mixed; boundary="========GMX100501368902359384367" Date: Sat, 18 May 2013 14:39:19 -0400 From: "Punk Rider" Message-ID: <20130518183919.100500@gmx.com> MIME-Version: 1.0 Subject: XFS hangup - Failed to recover EFIs To: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS hangup - Failed to recover EFIs X-Flags: 0001 X-Mailer: GMX.com Web Mailer x-registered: 0 X-GMX-UID: gK/lcSZG3zOl2H7M/nAh4QB+IGRvb4DE X-Barracuda-Connect: mout.gmx.net[74.208.4.200] X-Barracuda-Start-Time: 1368902361 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131338 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --========GMX100501368902359384367 Content-Type: multipart/alternative; boundary="========GMXBoundary100501368902359384591" --========GMXBoundary100501368902359384591 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Hello After upgrading my laptop from Ubuntu 12.04 LTS to Ubuntu 13.04 Raring i noticed that my Linux would not boot again. So after inserting Ubuntu 13.04 boot disk , this is what i've found out: ubuntu@ubuntu:~$ uname -a Linux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ubuntu@ubuntu:~$ sudo xfs_repair -v /dev/sda3 Phase 1 - find and verify superblock... - block cache size set to 363760 entries Phase 2 - using internal log - zero log... zero_log: head block 32468 tail block 31799 ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and unmount it before re-running xfs_repair. If you are unable to mount the filesystem, then use the -L option to destroy the log and attempt a repair. Note that destroying the log may cause corruption -- please attempt a mount of the filesystem before doing this. ubuntu@ubuntu:~$ ls /mnt/ ubuntu@ubuntu:~$ sudo mount /dev/sda3 /mnt ^C^C -> mount command hang indefinetely On other terminal (output from dmeg): [ 418.414325] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled [ 418.428026] XFS (sda3): Mounting Filesystem [ 418.511943] XFS (sda3): Starting recovery (logdev: internal) [ 425.070536] XFS: Internal error XFS_WANT_CORRUPTED_GOTO at line 1557 of file /build/buildd/linux-3.8.0/fs/xfs/xfs_alloc.c. Caller 0xffffffffa06dae36 [ 425.070536] [ 425.070552] Pid: 5671, comm: mount Tainted: GF 3.8.0-19-generic #29-Ubuntu [ 425.070556] Call Trace: [ 425.070605] [] xfs_error_report+0x3c/0x40 [xfs] [ 425.070646] [] ? xfs_free_extent+0xd6/0x120 [xfs] [ 425.070682] [] xfs_free_ag_extent+0x2d6/0x740 [xfs] [ 425.070717] [] xfs_free_extent+0xd6/0x120 [xfs] [ 425.070751] [] ? kmem_zone_alloc+0x67/0xe0 [xfs] [ 425.070797] [] xlog_recover_process_efi+0x170/0x1b0 [xfs] [ 425.070830] [] ? xfs_iget+0x36f/0x690 [xfs] [ 425.070869] [] xlog_recover_process_efis.isra.8+0x66/0xc0 [xfs] [ 425.070908] [] xlog_recover_finish+0x2a/0xd0 [xfs] [ 425.070951] [] xfs_log_mount_finish+0x34/0x50 [xfs] [ 425.070991] [] xfs_mountfs+0x42d/0x690 [xfs] [ 425.071026] [] xfs_fs_fill_super+0x2bf/0x340 [xfs] [ 425.071037] [] mount_bdev+0x1cd/0x210 [ 425.071070] [] ? xfs_parseargs+0xc10/0xc10 [xfs] [ 425.071103] [] xfs_fs_mount+0x15/0x20 [xfs] [ 425.071110] [] mount_fs+0x43/0x1b0 [ 425.071119] [] ? alloc_vfsmnt+0xd7/0x1b0 [ 425.071127] [] vfs_kern_mount+0x74/0x110 [ 425.071135] [] do_mount+0x21f/0xac0 [ 425.071145] [] ? strndup_user+0x5b/0x80 [ 425.071153] [] sys_mount+0x8e/0xe0 [ 425.071165] [] system_call_fastpath+0x1a/0x1f [ 425.071189] XFS (sda3): Failed to recover EFIs [ 425.071194] XFS (sda3): log mount finish failed Before attempting mounting with -L flag , do you want me to do other things to assist in tracking this bug down? I've attached dmesg output. If there is anything else i can help with,please let me know. Best regards Victor --========GMXBoundary100501368902359384591 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable  He= llo
=C2=A0
After upgrading my laptop  from Ubuntu 12.04 LTS to Ubuntu 13.= 04 Raring i noticed that my Linux would not boot again.
So after inserting Ubuntu 13.04 boot disk , this is w= hat i've found out:
=C2=A0
ubuntu@ubuntu:~$ uname -a
Linux ubuntu 3.8.0-19-generic #= 29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
=C2=A0
ubuntu@ub= untu:~$ sudo xfs_repair -v /dev/sda3
Phase 1 - find and verify superbl= ock...
        - block cache size s= et to 363760 entries
Phase 2 - using internal log
  &nb= sp;     - zero log...
zero_log: head block 32468 t= ail block 31799
ERROR: The filesystem has valuable metadata changes in= a log which needs to
be replayed.  Mount the filesystem to repla= y the log, and unmount it before
re-running xfs_repair.  If you a= re unable to mount the filesystem, then use
the -L option to destroy t= he log and attempt a repair.
Note that destroying the log may cause co= rruption -- please attempt a mount
of the filesystem before doing this= .
ubuntu@ubuntu:~$ ls /mnt/
ubuntu@ubuntu:~$ sudo mount /dev/sda3= /mnt
 ^C^C  -> mount command hang indefinetely
=C2=A0
=C2=A0
=C2=A0
On other terminal (output from dmeg):
=C2=A0
[  418.414325] SGI= XFS with ACLs, security attributes, realtime, large block/inode numbers, n= o debug enabled
[  418.428026] XFS (sda3): Mounting Filesystem[  418.511943] XFS (sda3): Starting recovery (logdev: internal)
[  425.070536] XFS: Internal error XFS_WANT_CORRUPTED_GOTO at line 1= 557 of file /build/buildd/linux-3.8.0/fs/xfs/xfs_alloc.c.  Caller 0xff= ffffffa06dae36
[  425.070536]
[  425.070552] Pid: 5671,= comm: mount Tainted: GF        &nb= sp;   3.8.0-19-generic #29-Ubuntu
[  425.070556] Call T= race:
[  425.070605]  [<ffffffffa06c311c>] xfs_error_r= eport+0x3c/0x40 [xfs]
[  425.070646]  [<ffffffffa06dae36&= gt;] ? xfs_free_extent+0xd6/0x120 [xfs]
[  425.070682]  [<= ;ffffffffa06d8556>] xfs_free_ag_extent+0x2d6/0x740 [xfs]
[  42= 5.070717]  [<ffffffffa06dae36>] xfs_free_extent+0xd6/0x120 [xfs]=
[  425.070751]  [<ffffffffa06d7137>] ? kmem_zone_allo= c+0x67/0xe0 [xfs]
[  425.070797]  [<ffffffffa0709b50>]= xlog_recover_process_efi+0x170/0x1b0 [xfs]
[  425.070830]  = [<ffffffffa06c904f>] ? xfs_iget+0x36f/0x690 [xfs]
[  425.07= 0869]  [<ffffffffa070b376>] xlog_recover_process_efis.isra.8+0x6= 6/0xc0 [xfs]
[  425.070908]  [<ffffffffa070e91a>] xlog= _recover_finish+0x2a/0xd0 [xfs]
[  425.070951]  [<fffffff= fa0715e54>] xfs_log_mount_finish+0x34/0x50 [xfs]
[  425.070991= ]  [<ffffffffa071145d>] xfs_mountfs+0x42d/0x690 [xfs]
[&nbs= p; 425.071026]  [<ffffffffa06d2c6f>] xfs_fs_fill_super+0x2bf/0x3= 40 [xfs]
[  425.071037]  [<ffffffff81196ebd>] mount_bd= ev+0x1cd/0x210
[  425.071070]  [<ffffffffa06d29b0>] ? = xfs_parseargs+0xc10/0xc10 [xfs]
[  425.071103]  [<fffffff= fa06d0ec5>] xfs_fs_mount+0x15/0x20 [xfs]
[  425.071110]  = [<ffffffff81197bf3>] mount_fs+0x43/0x1b0
[  425.071119]&nbs= p; [<ffffffff811b2407>] ? alloc_vfsmnt+0xd7/0x1b0
[  425.07= 1127]  [<ffffffff811b2594>] vfs_kern_mount+0x74/0x110
[&nbs= p; 425.071135]  [<ffffffff811b490f>] do_mount+0x21f/0xac0
[=   425.071145]  [<ffffffff8114a41b>] ? strndup_user+0x5b/0x8= 0
[  425.071153]  [<ffffffff811b523e>] sys_mount+0x8e/= 0xe0
[  425.071165]  [<ffffffff816d379d>] system_call_= fastpath+0x1a/0x1f
[  425.071189] XFS (sda3): Failed to recover E= FIs
[  425.071194] XFS (sda3): log mount finish failed
=C2=A0
=C2=A0
Before attempting mounting with -L flag , do you want me t= o do other things to assist in tracking this bug down?
=C2=A0
I've attached dmesg output.
<= div style=3D"color:rgb(0, 0, 0);font-size:16px;background-color:transparent= ;font-style:normal;">If there is anything else i can help with,please let m= e know.
=C2=A0
Best r= egards
Victor

=C2=A0
=C2=A0

=C2=A0

=C2=A0

--========GMXBoundary100501368902359384591-- --========GMX100501368902359384367 Content-Type: text/plain; charset="us-ascii"; name="dmesg.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dmesg.txt" WyAgICAwLjAwMDAwMF0gSW5pdGlhbGl6aW5nIGNncm91cCBzdWJzeXMgY3B1c2V0ClsgICAgMC4w MDAwMDBdIEluaXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGNwdQpbICAgIDAuMDAwMDAwXSBMaW51 eCB2ZXJzaW9uIDMuOC4wLTE5LWdlbmVyaWMgKGJ1aWxkZEBhbGxzcGljZSkgKGdjYyB2ZXJzaW9u IDQuNy4zIChVYnVudHUvTGluYXJvIDQuNy4zLTF1YnVudHUxKSApICMyOS1VYnVudHUgU01QIFdl ZCBBcHIgMTcgMTg6MTY6MjggVVRDIDIwMTMgKFVidW50dSAzLjguMC0xOS4yOS1nZW5lcmljIDMu OC44KQpbICAgIDAuMDAwMDAwXSBDb21tYW5kIGxpbmU6IGZpbGU9L2Nkcm9tL3ByZXNlZWQvdWJ1 bnR1LnNlZWQgYm9vdD1jYXNwZXIgaW5pdHJkPS9jYXNwZXIvaW5pdHJkLmx6IHF1aWV0IHNwbGFz aCAtLSBtYXliZS11YmlxdWl0eQpbICAgIDAuMDAwMDAwXSBLRVJORUwgc3VwcG9ydGVkIGNwdXM6 ClsgICAgMC4wMDAwMDBdICAgSW50ZWwgR2VudWluZUludGVsClsgICAgMC4wMDAwMDBdICAgQU1E IEF1dGhlbnRpY0FNRApbICAgIDAuMDAwMDAwXSAgIENlbnRhdXIgQ2VudGF1ckhhdWxzClsgICAg MC4wMDAwMDBdIGU4MjA6IEJJT1MtcHJvdmlkZWQgcGh5c2ljYWwgUkFNIG1hcDoKWyAgICAwLjAw MDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDAwMDAwMDAwMC0weDAwMDAwMDAwMDAwOWU3 ZmZdIHVzYWJsZQpbICAgIDAuMDAwMDAwXSBCSU9TLWU4MjA6IFttZW0gMHgwMDAwMDAwMDAwMDll ODAwLTB4MDAwMDAwMDAwMDA5ZmZmZl0gcmVzZXJ2ZWQKWyAgICAwLjAwMDAwMF0gQklPUy1lODIw OiBbbWVtIDB4MDAwMDAwMDAwMDBlMDAwMC0weDAwMDAwMDAwMDAwZmZmZmZdIHJlc2VydmVkClsg ICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwMDAxMDAwMDAtMHgwMDAwMDAw MDFmZmZmZmZmXSB1c2FibGUKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAw MDAyMDAwMDAwMC0weDAwMDAwMDAwMjAxZmZmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJ T1MtZTgyMDogW21lbSAweDAwMDAwMDAwMjAyMDAwMDAtMHgwMDAwMDAwMDNmZmZmZmZmXSB1c2Fi bGUKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDA0MDAwMDAwMC0weDAw MDAwMDAwNDAxZmZmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAw eDAwMDAwMDAwNDAyMDAwMDAtMHgwMDAwMDAwMGFhZDFmZmZmXSB1c2FibGUKWyAgICAwLjAwMDAw MF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBhYWQyMDAwMC0weDAwMDAwMDAwYWFkOGRmZmZd IHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwYWFkOGUw MDAtMHgwMDAwMDAwMGFhZDk0ZmZmXSB1c2FibGUKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBb bWVtIDB4MDAwMDAwMDBhYWQ5NTAwMC0weDAwMDAwMDAwYWFkOTVmZmZdIHJlc2VydmVkClsgICAg MC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwYWFkOTYwMDAtMHgwMDAwMDAwMGFh ZDk2ZmZmXSB1c2FibGUKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBh YWQ5NzAwMC0weDAwMDAwMDAwYWFkYjdmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJT1Mt ZTgyMDogW21lbSAweDAwMDAwMDAwYWFkYjgwMDAtMHgwMDAwMDAwMGFhZGM1ZmZmXSB1c2FibGUK WyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBhYWRjNjAwMC0weDAwMDAw MDAwYWFkZTdmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAw MDAwMDAwYWFkZTgwMDAtMHgwMDAwMDAwMGFhZjIxZmZmXSB1c2FibGUKWyAgICAwLjAwMDAwMF0g QklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBhYWYyMjAwMC0weDAwMDAwMDAwYWFmODZmZmZdIEFD UEkgTlZTClsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwYWFmODcwMDAt MHgwMDAwMDAwMGFhZjg5ZmZmXSB1c2FibGUKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVt IDB4MDAwMDAwMDBhYWY4YTAwMC0weDAwMDAwMDAwYWFmZTdmZmZdIEFDUEkgTlZTClsgICAgMC4w MDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwYWFmZTgwMDAtMHgwMDAwMDAwMGFhZmZj ZmZmXSB1c2FibGUKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBhYWZm ZDAwMC0weDAwMDAwMDAwYWFmZmZmZmZdIEFDUEkgZGF0YQpbICAgIDAuMDAwMDAwXSBCSU9TLWU4 MjA6IFttZW0gMHgwMDAwMDAwMGFiMDAwMDAwLTB4MDAwMDAwMDBhZjlmZmZmZl0gcmVzZXJ2ZWQK WyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBlMDAwMDAwMC0weDAwMDAw MDAwZTNmZmZmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAw MDAwMDAwZmVjMDAwMDAtMHgwMDAwMDAwMGZlYzAwZmZmXSByZXNlcnZlZApbICAgIDAuMDAwMDAw XSBCSU9TLWU4MjA6IFttZW0gMHgwMDAwMDAwMGZlZDEwMDAwLTB4MDAwMDAwMDBmZWQxM2ZmZl0g cmVzZXJ2ZWQKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDBmZWQxODAw MC0weDAwMDAwMDAwZmVkMTlmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDog W21lbSAweDAwMDAwMDAwZmVkMWMwMDAtMHgwMDAwMDAwMGZlZDFmZmZmXSByZXNlcnZlZApbICAg IDAuMDAwMDAwXSBCSU9TLWU4MjA6IFttZW0gMHgwMDAwMDAwMGZlZTAwMDAwLTB4MDAwMDAwMDBm ZWUwMGZmZl0gcmVzZXJ2ZWQKWyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAw MDBmZjk4MDAwMC0weDAwMDAwMDAwZmZiZmZmZmZdIHJlc2VydmVkClsgICAgMC4wMDAwMDBdIEJJ T1MtZTgyMDogW21lbSAweDAwMDAwMDAwZmZkODAwMDAtMHgwMDAwMDAwMGZmZmZmZmZmXSByZXNl cnZlZApbICAgIDAuMDAwMDAwXSBCSU9TLWU4MjA6IFttZW0gMHgwMDAwMDAwMTAwMDAwMDAwLTB4 MDAwMDAwMDE0ZmRmZmZmZl0gdXNhYmxlClsgICAgMC4wMDAwMDBdIE5YIChFeGVjdXRlIERpc2Fi bGUpIHByb3RlY3Rpb246IGFjdGl2ZQpbICAgIDAuMDAwMDAwXSBTTUJJT1MgMi42IHByZXNlbnQu ClsgICAgMC4wMDAwMDBdIERNSTogQVNVU1RlSyBDb21wdXRlciBJbmMuIEs3M1NWL0s3M1NWLCBC SU9TIEs3M1NWLjIwOSAwOC8xNi8yMDExClsgICAgMC4wMDAwMDBdIGU4MjA6IHVwZGF0ZSBbbWVt IDB4MDAwMDAwMDAtMHgwMDAwZmZmZl0gdXNhYmxlID09PiByZXNlcnZlZApbICAgIDAuMDAwMDAw XSBlODIwOiByZW1vdmUgW21lbSAweDAwMGEwMDAwLTB4MDAwZmZmZmZdIHVzYWJsZQpbICAgIDAu MDAwMDAwXSBObyBBR1AgYnJpZGdlIGZvdW5kClsgICAgMC4wMDAwMDBdIGU4MjA6IGxhc3RfcGZu ID0gMHgxNGZlMDAgbWF4X2FyY2hfcGZuID0gMHg0MDAwMDAwMDAKWyAgICAwLjAwMDAwMF0gTVRS UiBkZWZhdWx0IHR5cGU6IHVuY2FjaGFibGUKWyAgICAwLjAwMDAwMF0gTVRSUiBmaXhlZCByYW5n ZXMgZW5hYmxlZDoKWyAgICAwLjAwMDAwMF0gICAwMDAwMC05RkZGRiB3cml0ZS1iYWNrClsgICAg MC4wMDAwMDBdICAgQTAwMDAtQkZGRkYgdW5jYWNoYWJsZQpbICAgIDAuMDAwMDAwXSAgIEMwMDAw LUNGRkZGIHdyaXRlLXByb3RlY3QKWyAgICAwLjAwMDAwMF0gICBEMDAwMC1FN0ZGRiB1bmNhY2hh YmxlClsgICAgMC4wMDAwMDBdICAgRTgwMDAtRkZGRkYgd3JpdGUtcHJvdGVjdApbICAgIDAuMDAw MDAwXSBNVFJSIHZhcmlhYmxlIHJhbmdlcyBlbmFibGVkOgpbICAgIDAuMDAwMDAwXSAgIDAgYmFz ZSAwMDAwMDAwMDAgbWFzayBGODAwMDAwMDAgd3JpdGUtYmFjawpbICAgIDAuMDAwMDAwXSAgIDEg YmFzZSAwODAwMDAwMDAgbWFzayBGRTAwMDAwMDAgd3JpdGUtYmFjawpbICAgIDAuMDAwMDAwXSAg IDIgYmFzZSAwQTAwMDAwMDAgbWFzayBGRjgwMDAwMDAgd3JpdGUtYmFjawpbICAgIDAuMDAwMDAw XSAgIDMgYmFzZSAwQTgwMDAwMDAgbWFzayBGRkMwMDAwMDAgd3JpdGUtYmFjawpbICAgIDAuMDAw MDAwXSAgIDQgYmFzZSAwQUIwMDAwMDAgbWFzayBGRkYwMDAwMDAgdW5jYWNoYWJsZQpbICAgIDAu MDAwMDAwXSAgIDUgYmFzZSAxMDAwMDAwMDAgbWFzayBGQzAwMDAwMDAgd3JpdGUtYmFjawpbICAg IDAuMDAwMDAwXSAgIDYgYmFzZSAxNDAwMDAwMDAgbWFzayBGRjAwMDAwMDAgd3JpdGUtYmFjawpb ICAgIDAuMDAwMDAwXSAgIDcgYmFzZSAxNEZFMDAwMDAgbWFzayBGRkZFMDAwMDAgdW5jYWNoYWJs ZQpbICAgIDAuMDAwMDAwXSAgIDggZGlzYWJsZWQKWyAgICAwLjAwMDAwMF0gICA5IGRpc2FibGVk ClsgICAgMC4wMDAwMDBdIHg4NiBQQVQgZW5hYmxlZDogY3B1IDAsIG9sZCAweDcwNDA2MDAwNzA0 MDYsIG5ldyAweDcwMTA2MDAwNzAxMDYKWyAgICAwLjAwMDAwMF0gb3JpZ2luYWwgdmFyaWFibGUg TVRSUnMKWyAgICAwLjAwMDAwMF0gcmVnIDAsIGJhc2U6IDBHQiwgcmFuZ2U6IDJHQiwgdHlwZSBX QgpbICAgIDAuMDAwMDAwXSByZWcgMSwgYmFzZTogMkdCLCByYW5nZTogNTEyTUIsIHR5cGUgV0IK WyAgICAwLjAwMDAwMF0gcmVnIDIsIGJhc2U6IDI1NjBNQiwgcmFuZ2U6IDEyOE1CLCB0eXBlIFdC ClsgICAgMC4wMDAwMDBdIHJlZyAzLCBiYXNlOiAyNjg4TUIsIHJhbmdlOiA2NE1CLCB0eXBlIFdC ClsgICAgMC4wMDAwMDBdIHJlZyA0LCBiYXNlOiAyNzM2TUIsIHJhbmdlOiAxNk1CLCB0eXBlIFVD ClsgICAgMC4wMDAwMDBdIHJlZyA1LCBiYXNlOiA0R0IsIHJhbmdlOiAxR0IsIHR5cGUgV0IKWyAg ICAwLjAwMDAwMF0gcmVnIDYsIGJhc2U6IDVHQiwgcmFuZ2U6IDI1Nk1CLCB0eXBlIFdCClsgICAg MC4wMDAwMDBdIHJlZyA3LCBiYXNlOiA1Mzc0TUIsIHJhbmdlOiAyTUIsIHR5cGUgVUMKWyAgICAw LjAwMDAwMF0gdG90YWwgUkFNIGNvdmVyZWQ6IDQwMTRNClsgICAgMC4wMDAwMDBdIEZvdW5kIG9w dGltYWwgc2V0dGluZyBmb3IgbXRyciBjbGVhbiB1cApbICAgIDAuMDAwMDAwXSAgZ3Jhbl9zaXpl OiA2NEsgCWNodW5rX3NpemU6IDRNIAludW1fcmVnOiA4ICAJbG9zZSBjb3ZlciBSQU06IDBHClsg ICAgMC4wMDAwMDBdIE5ldyB2YXJpYWJsZSBNVFJScwpbICAgIDAuMDAwMDAwXSByZWcgMCwgYmFz ZTogMEdCLCByYW5nZTogMkdCLCB0eXBlIFdCClsgICAgMC4wMDAwMDBdIHJlZyAxLCBiYXNlOiAy R0IsIHJhbmdlOiA1MTJNQiwgdHlwZSBXQgpbICAgIDAuMDAwMDAwXSByZWcgMiwgYmFzZTogMjU2 ME1CLCByYW5nZTogMTI4TUIsIHR5cGUgV0IKWyAgICAwLjAwMDAwMF0gcmVnIDMsIGJhc2U6IDI2 ODhNQiwgcmFuZ2U6IDMyTUIsIHR5cGUgV0IKWyAgICAwLjAwMDAwMF0gcmVnIDQsIGJhc2U6IDI3 MjBNQiwgcmFuZ2U6IDE2TUIsIHR5cGUgV0IKWyAgICAwLjAwMDAwMF0gcmVnIDUsIGJhc2U6IDRH QiwgcmFuZ2U6IDFHQiwgdHlwZSBXQgpbICAgIDAuMDAwMDAwXSByZWcgNiwgYmFzZTogNUdCLCBy YW5nZTogMjU2TUIsIHR5cGUgV0IKWyAgICAwLjAwMDAwMF0gcmVnIDcsIGJhc2U6IDUzNzRNQiwg cmFuZ2U6IDJNQiwgdHlwZSBVQwpbICAgIDAuMDAwMDAwXSBlODIwOiB1cGRhdGUgW21lbSAweGFi MDAwMDAwLTB4ZmZmZmZmZmZdIHVzYWJsZSA9PT4gcmVzZXJ2ZWQKWyAgICAwLjAwMDAwMF0gZTgy MDogbGFzdF9wZm4gPSAweGFhZmZkIG1heF9hcmNoX3BmbiA9IDB4NDAwMDAwMDAwClsgICAgMC4w MDAwMDBdIGZvdW5kIFNNUCBNUC10YWJsZSBhdCBbbWVtIDB4MDAwZmNjNDAtMHgwMDBmY2M0Zl0g bWFwcGVkIGF0IFtmZmZmODgwMDAwMGZjYzQwXQpbICAgIDAuMDAwMDAwXSBpbml0aWFsIG1lbW9y eSBtYXBwZWQ6IFttZW0gMHgwMDAwMDAwMC0weDFmZmZmZmZmXQpbICAgIDAuMDAwMDAwXSBCYXNl IG1lbW9yeSB0cmFtcG9saW5lIGF0IFtmZmZmODgwMDAwMDk4MDAwXSA5ODAwMCBzaXplIDI0NTc2 ClsgICAgMC4wMDAwMDBdIHJlc2VydmluZyBpbmFjY2Vzc2libGUgU05CIGdmeCBwYWdlcwpbICAg IDAuMDAwMDAwXSBpbml0X21lbW9yeV9tYXBwaW5nOiBbbWVtIDB4MDAwMDAwMDAtMHhhYWZmY2Zm Zl0KWyAgICAwLjAwMDAwMF0gIFttZW0gMHgwMDAwMDAwMC0weGFhZGZmZmZmXSBwYWdlIDJNClsg ICAgMC4wMDAwMDBdICBbbWVtIDB4YWFlMDAwMDAtMHhhYWZmY2ZmZl0gcGFnZSA0awpbICAgIDAu MDAwMDAwXSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzIHVwIHRvIDB4YWFmZmNmZmYgQCBb bWVtIDB4MWZmZmIwMDAtMHgxZmZmZmZmZl0KWyAgICAwLjAwMDAwMF0gaW5pdF9tZW1vcnlfbWFw cGluZzogW21lbSAweDEwMDAwMDAwMC0weDE0ZmRmZmZmZl0KWyAgICAwLjAwMDAwMF0gIFttZW0g MHgxMDAwMDAwMDAtMHgxNGZkZmZmZmZdIHBhZ2UgMk0KWyAgICAwLjAwMDAwMF0ga2VybmVsIGRp cmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAweDE0ZmRmZmZmZiBAIFttZW0gMHhhYWZmYTAwMC0w eGFhZmZjZmZmXQpbICAgIDAuMDAwMDAwXSBSQU1ESVNLOiBbbWVtIDB4N2VhYzcwMDAtMHg3ZmZm ZmZmZl0KWyAgICAwLjAwMDAwMF0gQUNQSTogUlNEUCAwMDAwMDAwMDAwMGYwNDMwIDAwMDI0ICh2 MDIgX0FTVVNfKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBYU0RUIDAwMDAwMDAwYWFmZmVlMTggMDAw NkMgKHYwMSBfQVNVU18gTm90ZWJvb2sgMDYyMjIwMDQgTVNGVCAwMDAxMDAxMykKWyAgICAwLjAw MDAwMF0gQUNQSTogRkFDUCAwMDAwMDAwMGFhZjlhZDk4IDAwMEY0ICh2MDQgX0FTVVNfIE5vdGVi b29rIDA2MjIyMDA0IE1TRlQgMDAwMTAwMTMpClsgICAgMC4wMDAwMDBdIEFDUEkgV2FybmluZzog MzIvNjQgRkFDUyBhZGRyZXNzIG1pc21hdGNoIGluIEZBRFQgLSB0d28gRkFDUyB0YWJsZXMhICgy MDEyMTAxOC90YmZhZHQtMzk0KQpbICAgIDAuMDAwMDAwXSBBQ1BJIEJJT1MgQnVnOiBXYXJuaW5n OiAzMi82NFggRkFDUyBhZGRyZXNzIG1pc21hdGNoIGluIEZBRFQgLSAweEFBRkU0RTQwLzB4MDAw MDAwMDBBQUZFNEQ0MCwgdXNpbmcgMzIgKDIwMTIxMDE4L3RiZmFkdC01MjEpClsgICAgMC4wMDAw MDBdIEFDUEk6IERTRFQgMDAwMDAwMDBhYWY2NzAxOCAxMkRGQSAodjAxIF9BU1VTXyBOb3RlYm9v ayAwMDAwMDAwMCBJTlRMIDIwMDkxMTEyKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBGQUNTIDAwMDAw MDAwYWFmZTRlNDAgMDAwNDAKWyAgICAwLjAwMDAwMF0gQUNQSTogQVBJQyAwMDAwMDAwMGFhZmZk ZjE4IDAwMENDICh2MDIgX0FTVVNfIE5vdGVib29rIDA2MjIyMDA0IE1TRlQgMDAwMTAwMTMpClsg ICAgMC4wMDAwMDBdIEFDUEk6IERCR1AgMDAwMDAwMDBhYWZmZmYxOCAwMDAzNCAodjAxIF9BU1VT XyBOb3RlYm9vayAwNjIyMjAwNCBNU0ZUIDAwMDEwMDEzKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBF Q0RUIDAwMDAwMDAwYWFmZTRiMTggMDAwQzEgKHYwMSBfQVNVU18gTm90ZWJvb2sgMDYyMjIwMDQg QU1JLiAwMDAwMDAwMykKWyAgICAwLjAwMDAwMF0gQUNQSTogSFBFVCAwMDAwMDAwMGFhZmU1ZDE4 IDAwMDM4ICh2MDEgX0FTVVNfIE5vdGVib29rIDA2MjIyMDA0IEFNSS4gMDAwMDAwMDMpClsgICAg MC4wMDAwMDBdIEFDUEk6IE1DRkcgMDAwMDAwMDBhYWZlNWM5OCAwMDAzQyAodjAxIF9BU1VTXyBO b3RlYm9vayAwNjIyMjAwNCBNU0ZUIDAwMDAwMDk3KQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBTU0RU IDAwMDAwMDAwYWFmODYwMTggMDA5MTMgKHYwMSAgUG1SZWYgIENwdTBJc3QgMDAwMDMwMDAgSU5U TCAyMDA5MTExMikKWyAgICAwLjAwMDAwMF0gQUNQSTogU1NEVCAwMDAwMDAwMGFhZjg1MDE4IDAw OTk2ICh2MDEgIFBtUmVmICAgIENwdVBtIDAwMDAzMDAwIElOVEwgMjAwOTExMTIpClsgICAgMC4w MDAwMDBdIEFDUEk6IEFTRiEgMDAwMDAwMDBhYWZlNGExOCAwMDBBMCAodjMyIElOVEVMICAgICAg IEhDRyAwMDAwMDAwMSBURlNNIDAwMEY0MjQwKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBMb2NhbCBB UElDIGFkZHJlc3MgMHhmZWUwMDAwMApbICAgIDAuMDAwMDAwXSBObyBOVU1BIGNvbmZpZ3VyYXRp b24gZm91bmQKWyAgICAwLjAwMDAwMF0gRmFraW5nIGEgbm9kZSBhdCBbbWVtIDB4MDAwMDAwMDAw MDAwMDAwMC0weDAwMDAwMDAxNGZkZmZmZmZdClsgICAgMC4wMDAwMDBdIEluaXRtZW0gc2V0dXAg bm9kZSAwIFttZW0gMHgwMDAwMDAwMC0weDE0ZmRmZmZmZl0KWyAgICAwLjAwMDAwMF0gICBOT0RF X0RBVEEgW21lbSAweDE0ZmRmYjAwMC0weDE0ZmRmZmZmZl0KWyAgICAwLjAwMDAwMF0gIFtmZmZm ZWEwMDAwMDAwMDAwLWZmZmZlYTAwMDUzZmZmZmZdIFBNRCAtPiBbZmZmZjg4MDE0YjQwMDAwMC1m ZmZmODgwMTRmM2ZmZmZmXSBvbiBub2RlIDAKWyAgICAwLjAwMDAwMF0gWm9uZSByYW5nZXM6Clsg ICAgMC4wMDAwMDBdICAgRE1BICAgICAgW21lbSAweDAwMDEwMDAwLTB4MDBmZmZmZmZdClsgICAg MC4wMDAwMDBdICAgRE1BMzIgICAgW21lbSAweDAxMDAwMDAwLTB4ZmZmZmZmZmZdClsgICAgMC4w MDAwMDBdICAgTm9ybWFsICAgW21lbSAweDEwMDAwMDAwMC0weDE0ZmRmZmZmZl0KWyAgICAwLjAw MDAwMF0gTW92YWJsZSB6b25lIHN0YXJ0IGZvciBlYWNoIG5vZGUKWyAgICAwLjAwMDAwMF0gRWFy bHkgbWVtb3J5IG5vZGUgcmFuZ2VzClsgICAgMC4wMDAwMDBdICAgbm9kZSAgIDA6IFttZW0gMHgw MDAxMDAwMC0weDAwMDlkZmZmXQpbICAgIDAuMDAwMDAwXSAgIG5vZGUgICAwOiBbbWVtIDB4MDAx MDAwMDAtMHgxZmZmZmZmZl0KWyAgICAwLjAwMDAwMF0gICBub2RlICAgMDogW21lbSAweDIwMjAw MDAwLTB4M2ZmZmZmZmZdClsgICAgMC4wMDAwMDBdICAgbm9kZSAgIDA6IFttZW0gMHg0MDIwMDAw MC0weGFhZDFmZmZmXQpbICAgIDAuMDAwMDAwXSAgIG5vZGUgICAwOiBbbWVtIDB4YWFkOGUwMDAt MHhhYWQ5NGZmZl0KWyAgICAwLjAwMDAwMF0gICBub2RlICAgMDogW21lbSAweGFhZDk2MDAwLTB4 YWFkOTZmZmZdClsgICAgMC4wMDAwMDBdICAgbm9kZSAgIDA6IFttZW0gMHhhYWRiODAwMC0weGFh ZGM1ZmZmXQpbICAgIDAuMDAwMDAwXSAgIG5vZGUgICAwOiBbbWVtIDB4YWFkZTgwMDAtMHhhYWYy MWZmZl0KWyAgICAwLjAwMDAwMF0gICBub2RlICAgMDogW21lbSAweGFhZjg3MDAwLTB4YWFmODlm ZmZdClsgICAgMC4wMDAwMDBdICAgbm9kZSAgIDA6IFttZW0gMHhhYWZlODAwMC0weGFhZmZjZmZm XQpbICAgIDAuMDAwMDAwXSAgIG5vZGUgICAwOiBbbWVtIDB4MTAwMDAwMDAwLTB4MTRmZGZmZmZm XQpbICAgIDAuMDAwMDAwXSBPbiBub2RlIDAgdG90YWxwYWdlczogMTAyNjA3MApbICAgIDAuMDAw MDAwXSAgIERNQSB6b25lOiA2NCBwYWdlcyB1c2VkIGZvciBtZW1tYXAKWyAgICAwLjAwMDAwMF0g ICBETUEgem9uZTogMTQyIHBhZ2VzIHJlc2VydmVkClsgICAgMC4wMDAwMDBdICAgRE1BIHpvbmU6 IDM3NzYgcGFnZXMsIExJRk8gYmF0Y2g6MApbICAgIDAuMDAwMDAwXSAgIERNQTMyIHpvbmU6IDEw ODU5IHBhZ2VzIHVzZWQgZm9yIG1lbW1hcApbICAgIDAuMDAwMDAwXSAgIERNQTMyIHpvbmU6IDY4 NDA2MSBwYWdlcywgTElGTyBiYXRjaDozMQpbICAgIDAuMDAwMDAwXSAgIE5vcm1hbCB6b25lOiA1 MTEyIHBhZ2VzIHVzZWQgZm9yIG1lbW1hcApbICAgIDAuMDAwMDAwXSAgIE5vcm1hbCB6b25lOiAz MjIwNTYgcGFnZXMsIExJRk8gYmF0Y2g6MzEKWyAgICAwLjAwMDAwMF0gQUNQSTogUE0tVGltZXIg SU8gUG9ydDogMHg0MDgKWyAgICAwLjAwMDAwMF0gQUNQSTogTG9jYWwgQVBJQyBhZGRyZXNzIDB4 ZmVlMDAwMDAKWyAgICAwLjAwMDAwMF0gQUNQSTogTEFQSUMgKGFjcGlfaWRbMHgwMV0gbGFwaWNf aWRbMHgwMF0gZW5hYmxlZCkKWyAgICAwLjAwMDAwMF0gQUNQSTogTEFQSUMgKGFjcGlfaWRbMHgw Ml0gbGFwaWNfaWRbMHgwMl0gZW5hYmxlZCkKWyAgICAwLjAwMDAwMF0gQUNQSTogTEFQSUMgKGFj cGlfaWRbMHgwM10gbGFwaWNfaWRbMHgwMV0gZW5hYmxlZCkKWyAgICAwLjAwMDAwMF0gQUNQSTog TEFQSUMgKGFjcGlfaWRbMHgwNF0gbGFwaWNfaWRbMHgwM10gZW5hYmxlZCkKWyAgICAwLjAwMDAw MF0gQUNQSTogTEFQSUMgKGFjcGlfaWRbMHgwNV0gbGFwaWNfaWRbMHgwNF0gZGlzYWJsZWQpClsg ICAgMC4wMDAwMDBdIEFDUEk6IExBUElDIChhY3BpX2lkWzB4MDZdIGxhcGljX2lkWzB4MDVdIGRp c2FibGVkKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBMQVBJQyAoYWNwaV9pZFsweDA3XSBsYXBpY19p ZFsweDA2XSBkaXNhYmxlZCkKWyAgICAwLjAwMDAwMF0gQUNQSTogTEFQSUMgKGFjcGlfaWRbMHgw OF0gbGFwaWNfaWRbMHgwN10gZGlzYWJsZWQpClsgICAgMC4wMDAwMDBdIEFDUEk6IExBUElDIChh Y3BpX2lkWzB4MDldIGxhcGljX2lkWzB4MDhdIGRpc2FibGVkKQpbICAgIDAuMDAwMDAwXSBBQ1BJ OiBMQVBJQyAoYWNwaV9pZFsweDBhXSBsYXBpY19pZFsweDA5XSBkaXNhYmxlZCkKWyAgICAwLjAw MDAwMF0gQUNQSTogTEFQSUMgKGFjcGlfaWRbMHgwYl0gbGFwaWNfaWRbMHgwYV0gZGlzYWJsZWQp ClsgICAgMC4wMDAwMDBdIEFDUEk6IExBUElDIChhY3BpX2lkWzB4MGNdIGxhcGljX2lkWzB4MGJd IGRpc2FibGVkKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBMQVBJQyAoYWNwaV9pZFsweDBkXSBsYXBp Y19pZFsweDBjXSBkaXNhYmxlZCkKWyAgICAwLjAwMDAwMF0gQUNQSTogTEFQSUMgKGFjcGlfaWRb MHgwZV0gbGFwaWNfaWRbMHgwZF0gZGlzYWJsZWQpClsgICAgMC4wMDAwMDBdIEFDUEk6IExBUElD IChhY3BpX2lkWzB4MGZdIGxhcGljX2lkWzB4MGVdIGRpc2FibGVkKQpbICAgIDAuMDAwMDAwXSBB Q1BJOiBMQVBJQyAoYWNwaV9pZFsweDEwXSBsYXBpY19pZFsweDBmXSBkaXNhYmxlZCkKWyAgICAw LjAwMDAwMF0gQUNQSTogSU9BUElDIChpZFsweDAyXSBhZGRyZXNzWzB4ZmVjMDAwMDBdIGdzaV9i YXNlWzBdKQpbICAgIDAuMDAwMDAwXSBJT0FQSUNbMF06IGFwaWNfaWQgMiwgdmVyc2lvbiAzMiwg YWRkcmVzcyAweGZlYzAwMDAwLCBHU0kgMC0yMwpbICAgIDAuMDAwMDAwXSBBQ1BJOiBJTlRfU1JD X09WUiAoYnVzIDAgYnVzX2lycSAwIGdsb2JhbF9pcnEgMiBkZmwgZGZsKQpbICAgIDAuMDAwMDAw XSBBQ1BJOiBJTlRfU1JDX09WUiAoYnVzIDAgYnVzX2lycSA5IGdsb2JhbF9pcnEgOSBoaWdoIGxl dmVsKQpbICAgIDAuMDAwMDAwXSBBQ1BJOiBJUlEwIHVzZWQgYnkgb3ZlcnJpZGUuClsgICAgMC4w MDAwMDBdIEFDUEk6IElSUTIgdXNlZCBieSBvdmVycmlkZS4KWyAgICAwLjAwMDAwMF0gQUNQSTog SVJROSB1c2VkIGJ5IG92ZXJyaWRlLgpbICAgIDAuMDAwMDAwXSBVc2luZyBBQ1BJIChNQURUKSBm b3IgU01QIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KWyAgICAwLjAwMDAwMF0gQUNQSTogSFBF VCBpZDogMHg4MDg2YTcwMSBiYXNlOiAweGZlZDAwMDAwClsgICAgMC4wMDAwMDBdIHNtcGJvb3Q6 IEFsbG93aW5nIDE2IENQVXMsIDEyIGhvdHBsdWcgQ1BVcwpbICAgIDAuMDAwMDAwXSBucl9pcnFz X2dzaTogNDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAw MDAwMDAwMDA5ZTAwMCAtIDAwMDAwMDAwMDAwOWYwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lz dGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDAwMDA5ZjAwMCAtIDAwMDAwMDAwMDAwYTAwMDAK WyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDAwMDBh MDAwMCAtIDAwMDAwMDAwMDAwZTAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9z YXZlIG1lbW9yeTogMDAwMDAwMDAwMDBlMDAwMCAtIDAwMDAwMDAwMDAxMDAwMDAKWyAgICAwLjAw MDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDAyMDAwMDAwMCAtIDAw MDAwMDAwMjAyMDAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9y eTogMDAwMDAwMDA0MDAwMDAwMCAtIDAwMDAwMDAwNDAyMDAwMDAKWyAgICAwLjAwMDAwMF0gUE06 IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBhYWQyMDAwMCAtIDAwMDAwMDAwYWFk OGUwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAw MDBhYWQ5NTAwMCAtIDAwMDAwMDAwYWFkOTYwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVy ZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBhYWQ5NzAwMCAtIDAwMDAwMDAwYWFkYjgwMDAKWyAg ICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBhYWRjNjAw MCAtIDAwMDAwMDAwYWFkZTgwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZl IG1lbW9yeTogMDAwMDAwMDBhYWYyMjAwMCAtIDAwMDAwMDAwYWFmODcwMDAKWyAgICAwLjAwMDAw MF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBhYWY4YTAwMCAtIDAwMDAw MDAwYWFmZTgwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTog MDAwMDAwMDBhYWZmZDAwMCAtIDAwMDAwMDAwYWIwMDAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJl Z2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBhYjAwMDAwMCAtIDAwMDAwMDAwYWZhMDAw MDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBh ZmEwMDAwMCAtIDAwMDAwMDAwZTAwMDAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQg bm9zYXZlIG1lbW9yeTogMDAwMDAwMDBlMDAwMDAwMCAtIDAwMDAwMDAwZTQwMDAwMDAKWyAgICAw LjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBlNDAwMDAwMCAt IDAwMDAwMDAwZmVjMDAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1l bW9yeTogMDAwMDAwMDBmZWMwMDAwMCAtIDAwMDAwMDAwZmVjMDEwMDAKWyAgICAwLjAwMDAwMF0g UE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZWMwMTAwMCAtIDAwMDAwMDAw ZmVkMTAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAw MDAwMDBmZWQxMDAwMCAtIDAwMDAwMDAwZmVkMTQwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lz dGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZWQxNDAwMCAtIDAwMDAwMDAwZmVkMTgwMDAK WyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZWQx ODAwMCAtIDAwMDAwMDAwZmVkMWEwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9z YXZlIG1lbW9yeTogMDAwMDAwMDBmZWQxYTAwMCAtIDAwMDAwMDAwZmVkMWMwMDAKWyAgICAwLjAw MDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZWQxYzAwMCAtIDAw MDAwMDAwZmVkMjAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9y eTogMDAwMDAwMDBmZWQyMDAwMCAtIDAwMDAwMDAwZmVlMDAwMDAKWyAgICAwLjAwMDAwMF0gUE06 IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZWUwMDAwMCAtIDAwMDAwMDAwZmVl MDEwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAw MDBmZWUwMTAwMCAtIDAwMDAwMDAwZmY5ODAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVy ZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZjk4MDAwMCAtIDAwMDAwMDAwZmZjMDAwMDAKWyAg ICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZlIG1lbW9yeTogMDAwMDAwMDBmZmMwMDAw MCAtIDAwMDAwMDAwZmZkODAwMDAKWyAgICAwLjAwMDAwMF0gUE06IFJlZ2lzdGVyZWQgbm9zYXZl IG1lbW9yeTogMDAwMDAwMDBmZmQ4MDAwMCAtIDAwMDAwMDAxMDAwMDAwMDAKWyAgICAwLjAwMDAw MF0gZTgyMDogW21lbSAweGFmYTAwMDAwLTB4ZGZmZmZmZmZdIGF2YWlsYWJsZSBmb3IgUENJIGRl dmljZXMKWyAgICAwLjAwMDAwMF0gQm9vdGluZyBwYXJhdmlydHVhbGl6ZWQga2VybmVsIG9uIGJh cmUgaGFyZHdhcmUKWyAgICAwLjAwMDAwMF0gc2V0dXBfcGVyY3B1OiBOUl9DUFVTOjI1NiBucl9j cHVtYXNrX2JpdHM6MjU2IG5yX2NwdV9pZHM6MTYgbnJfbm9kZV9pZHM6MQpbICAgIDAuMDAwMDAw XSBQRVJDUFU6IEVtYmVkZGVkIDI4IHBhZ2VzL2NwdSBAZmZmZjg4MDE0ZmEwMDAwMCBzODUwNTYg cjgxOTIgZDIxNDQwIHUxMzEwNzIKWyAgICAwLjAwMDAwMF0gcGNwdS1hbGxvYzogczg1MDU2IHI4 MTkyIGQyMTQ0MCB1MTMxMDcyIGFsbG9jPTEqMjA5NzE1MgpbICAgIDAuMDAwMDAwXSBwY3B1LWFs bG9jOiBbMF0gMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMDggMDkgMTAgMTEgMTIgMTMgMTQgMTUg ClsgICAgMC4wMDAwMDBdIEJ1aWx0IDEgem9uZWxpc3RzIGluIE5vZGUgb3JkZXIsIG1vYmlsaXR5 IGdyb3VwaW5nIG9uLiAgVG90YWwgcGFnZXM6IDEwMDk4OTMKWyAgICAwLjAwMDAwMF0gUG9saWN5 IHpvbmU6IE5vcm1hbApbICAgIDAuMDAwMDAwXSBLZXJuZWwgY29tbWFuZCBsaW5lOiBmaWxlPS9j ZHJvbS9wcmVzZWVkL3VidW50dS5zZWVkIGJvb3Q9Y2FzcGVyIGluaXRyZD0vY2FzcGVyL2luaXRy ZC5seiBxdWlldCBzcGxhc2ggLS0gbWF5YmUtdWJpcXVpdHkKWyAgICAwLjAwMDAwMF0gUElEIGhh c2ggdGFibGUgZW50cmllczogNDA5NiAob3JkZXI6IDMsIDMyNzY4IGJ5dGVzKQpbICAgIDAuMDAw MDAwXSBfX2V4X3RhYmxlIGFscmVhZHkgc29ydGVkLCBza2lwcGluZyBzb3J0ClsgICAgMC4wMDAw MDBdIHhzYXZlOiBlbmFibGVkIHhzdGF0ZV9idiAweDcsIGNudHh0IHNpemUgMHgzNDAKWyAgICAw LjAwMDAwMF0gQ2hlY2tpbmcgYXBlcnR1cmUuLi4KWyAgICAwLjAwMDAwMF0gTm8gQUdQIGJyaWRn ZSBmb3VuZApbICAgIDAuMDAwMDAwXSBDYWxnYXJ5OiBkZXRlY3RpbmcgQ2FsZ2FyeSB2aWEgQklP UyBFQkRBIGFyZWEKWyAgICAwLjAwMDAwMF0gQ2FsZ2FyeTogVW5hYmxlIHRvIGxvY2F0ZSBSaW8g R3JhbmRlIHRhYmxlIGluIEVCREEgLSBiYWlsaW5nIQpbICAgIDAuMDAwMDAwXSBNZW1vcnk6IDM5 MzI3ODBrLzU1MDI5NzZrIGF2YWlsYWJsZSAoNzAwNmsga2VybmVsIGNvZGUsIDEzOTg2OTZrIGFi c2VudCwgMTcxNTAwayByZXNlcnZlZCwgNjIzOGsgZGF0YSwgOTkyayBpbml0KQpbICAgIDAuMDAw MDAwXSBTTFVCOiBHZW5zbGFicz0xNSwgSFdhbGlnbj02NCwgT3JkZXI9MC0zLCBNaW5PYmplY3Rz PTAsIENQVXM9MTYsIE5vZGVzPTEKWyAgICAwLjAwMDAwMF0gSGllcmFyY2hpY2FsIFJDVSBpbXBs ZW1lbnRhdGlvbi4KWyAgICAwLjAwMDAwMF0gCVJDVSBkeW50aWNrLWlkbGUgZ3JhY2UtcGVyaW9k IGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkLgpbICAgIDAuMDAwMDAwXSAJUkNVIHJlc3RyaWN0aW5n IENQVXMgZnJvbSBOUl9DUFVTPTI1NiB0byBucl9jcHVfaWRzPTE2LgpbICAgIDAuMDAwMDAwXSBO Ul9JUlFTOjE2NjQwIG5yX2lycXM6ODA4IDE2ClsgICAgMC4wMDAwMDBdIEV4dGVuZGVkIENNT1Mg eWVhcjogMjAwMApbICAgIDAuMDAwMDAwXSBDb25zb2xlOiBjb2xvdXIgVkdBKyA4MHgyNQpbICAg IDAuMDAwMDAwXSBjb25zb2xlIFt0dHkwXSBlbmFibGVkClsgICAgMC4wMDAwMDBdIGFsbG9jYXRl ZCAxNjc3NzIxNiBieXRlcyBvZiBwYWdlX2Nncm91cApbICAgIDAuMDAwMDAwXSBwbGVhc2UgdHJ5 ICdjZ3JvdXBfZGlzYWJsZT1tZW1vcnknIG9wdGlvbiBpZiB5b3UgZG9uJ3Qgd2FudCBtZW1vcnkg Y2dyb3VwcwpbICAgIDAuMDAwMDAwXSBocGV0IGNsb2NrZXZlbnQgcmVnaXN0ZXJlZApbICAgIDAu MDAwMDAwXSB0c2M6IEZhc3QgVFNDIGNhbGlicmF0aW9uIHVzaW5nIFBJVApbICAgIDAuMDA0MDAw XSB0c2M6IERldGVjdGVkIDIwOTUuMzcxIE1IeiBwcm9jZXNzb3IKWyAgICAwLjAwMDAwNF0gQ2Fs aWJyYXRpbmcgZGVsYXkgbG9vcCAoc2tpcHBlZCksIHZhbHVlIGNhbGN1bGF0ZWQgdXNpbmcgdGlt ZXIgZnJlcXVlbmN5Li4gNDE5MC43NCBCb2dvTUlQUyAobHBqPTgzODE0ODQpClsgICAgMC4wMDAw MDZdIHBpZF9tYXg6IGRlZmF1bHQ6IDMyNzY4IG1pbmltdW06IDMwMQpbICAgIDAuMDAwMDM1XSBT ZWN1cml0eSBGcmFtZXdvcmsgaW5pdGlhbGl6ZWQKWyAgICAwLjAwMDA0N10gQXBwQXJtb3I6IEFw cEFybW9yIGluaXRpYWxpemVkClsgICAgMC4wMDAwNDhdIFlhbWE6IGJlY29taW5nIG1pbmRmdWwu ClsgICAgMC4wMDAzNzhdIERlbnRyeSBjYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDUyNDI4OCAo b3JkZXI6IDEwLCA0MTk0MzA0IGJ5dGVzKQpbICAgIDAuMDAxNDA4XSBJbm9kZS1jYWNoZSBoYXNo IHRhYmxlIGVudHJpZXM6IDI2MjE0NCAob3JkZXI6IDksIDIwOTcxNTIgYnl0ZXMpClsgICAgMC4w MDE4NTFdIE1vdW50LWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogMjU2ClsgICAgMC4wMDIwMzld IEluaXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGNwdWFjY3QKWyAgICAwLjAwMjA0MV0gSW5pdGlh bGl6aW5nIGNncm91cCBzdWJzeXMgbWVtb3J5ClsgICAgMC4wMDIwNDhdIEluaXRpYWxpemluZyBj Z3JvdXAgc3Vic3lzIGRldmljZXMKWyAgICAwLjAwMjA1MF0gSW5pdGlhbGl6aW5nIGNncm91cCBz dWJzeXMgZnJlZXplcgpbICAgIDAuMDAyMDUyXSBJbml0aWFsaXppbmcgY2dyb3VwIHN1YnN5cyBi bGtpbwpbICAgIDAuMDAyMDUzXSBJbml0aWFsaXppbmcgY2dyb3VwIHN1YnN5cyBwZXJmX2V2ZW50 ClsgICAgMC4wMDIwNTZdIEluaXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGh1Z2V0bGIKWyAgICAw LjAwMjA4MV0gQ1BVOiBQaHlzaWNhbCBQcm9jZXNzb3IgSUQ6IDAKWyAgICAwLjAwMjA4Ml0gQ1BV OiBQcm9jZXNzb3IgQ29yZSBJRDogMApbICAgIDAuMDAyMDg3XSBFTkVSR1lfUEVSRl9CSUFTOiBT ZXQgdG8gJ25vcm1hbCcsIHdhcyAncGVyZm9ybWFuY2UnClsgICAgMC4wMDIwODddIEVORVJHWV9Q RVJGX0JJQVM6IFZpZXcgYW5kIHVwZGF0ZSB3aXRoIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3koOCkK WyAgICAwLjAwMjA5MF0gbWNlOiBDUFUgc3VwcG9ydHMgNyBNQ0UgYmFua3MKWyAgICAwLjAwMjEw M10gQ1BVMDogVGhlcm1hbCBtb25pdG9yaW5nIGVuYWJsZWQgKFRNMSkKWyAgICAwLjAwMjExMV0g cHJvY2VzczogdXNpbmcgbXdhaXQgaW4gaWRsZSB0aHJlYWRzClsgICAgMC4wMDIxMTVdIExhc3Qg bGV2ZWwgaVRMQiBlbnRyaWVzOiA0S0IgNTEyLCAyTUIgMCwgNE1CIDAKWyAgICAwLjAwMjExNV0g TGFzdCBsZXZlbCBkVExCIGVudHJpZXM6IDRLQiA1MTIsIDJNQiAzMiwgNE1CIDMyClsgICAgMC4w MDIxMTVdIHRsYl9mbHVzaGFsbF9zaGlmdDogNQpbICAgIDAuMDAyMjc1XSBGcmVlaW5nIFNNUCBh bHRlcm5hdGl2ZXM6IDI0ayBmcmVlZApbICAgIDAuMDA1MTU1XSBBQ1BJOiBDb3JlIHJldmlzaW9u IDIwMTIxMDE4ClsgICAgMC4wMzg2NDZdIGZ0cmFjZTogYWxsb2NhdGluZyAyNjY4OSBlbnRyaWVz IGluIDEwNSBwYWdlcwpbICAgIDAuMDU0MDc2XSBTd2l0Y2hlZCBBUElDIHJvdXRpbmcgdG8gcGh5 c2ljYWwgZmxhdC4KWyAgICAwLjA1NDQ5M10gLi5USU1FUjogdmVjdG9yPTB4MzAgYXBpYzE9MCBw aW4xPTIgYXBpYzI9LTEgcGluMj0tMQpbICAgIDAuMDk0MTIxXSBzbXBib290OiBDUFUwOiBJbnRl bChSKSBDb3JlKFRNKSBpMy0yMzEwTSBDUFUgQCAyLjEwR0h6IChmYW06IDA2LCBtb2RlbDogMmEs IHN0ZXBwaW5nOiAwNykKWyAgICAwLjA5NDEzMF0gVFNDIGRlYWRsaW5lIHRpbWVyIGVuYWJsZWQK WyAgICAwLjA5NDEzNF0gUGVyZm9ybWFuY2UgRXZlbnRzOiBQRUJTIGZtdDErLCAxNi1kZWVwIExC UiwgU2FuZHlCcmlkZ2UgZXZlbnRzLCBJbnRlbCBQTVUgZHJpdmVyLgpbICAgIDAuMDk0MTQxXSBw ZXJmX2V2ZW50X2ludGVsOiBQRUJTIGRpc2FibGVkIGR1ZSB0byBDUFUgZXJyYXRhLCBwbGVhc2Ug dXBncmFkZSBtaWNyb2NvZGUKWyAgICAwLjA5NDE0M10gLi4uIHZlcnNpb246ICAgICAgICAgICAg ICAgIDMKWyAgICAwLjA5NDE0NF0gLi4uIGJpdCB3aWR0aDogICAgICAgICAgICAgIDQ4ClsgICAg MC4wOTQxNDVdIC4uLiBnZW5lcmljIHJlZ2lzdGVyczogICAgICA0ClsgICAgMC4wOTQxNDddIC4u LiB2YWx1ZSBtYXNrOiAgICAgICAgICAgICAwMDAwZmZmZmZmZmZmZmZmClsgICAgMC4wOTQxNDhd IC4uLiBtYXggcGVyaW9kOiAgICAgICAgICAgICAwMDAwMDAwMDdmZmZmZmZmClsgICAgMC4wOTQx NDldIC4uLiBmaXhlZC1wdXJwb3NlIGV2ZW50czogICAzClsgICAgMC4wOTQxNTBdIC4uLiBldmVu dCBtYXNrOiAgICAgICAgICAgICAwMDAwMDAwNzAwMDAwMDBmClsgICAgMC4xMDgzODhdIE5NSSB3 YXRjaGRvZzogZW5hYmxlZCBvbiBhbGwgQ1BVcywgcGVybWFuZW50bHkgY29uc3VtZXMgb25lIGh3 LVBNVSBjb3VudGVyLgpbICAgIDAuMDk1MjMxXSBzbXBib290OiBCb290aW5nIE5vZGUgICAwLCBQ cm9jZXNzb3JzICAjMSAjMiAjMwpbICAgIDAuMTM0ODI3XSBCcm91Z2h0IHVwIDQgQ1BVcwpbICAg IDAuMTM0ODMxXSBzbXBib290OiBUb3RhbCBvZiA0IHByb2Nlc3NvcnMgYWN0aXZhdGVkICgxNjc2 Mi45NiBCb2dvTUlQUykKWyAgICAwLjEzODUxMl0gZGV2dG1wZnM6IGluaXRpYWxpemVkClsgICAg MC4xMzkzNzddIEVWTTogc2VjdXJpdHkuc2VsaW51eApbICAgIDAuMTM5Mzc5XSBFVk06IHNlY3Vy aXR5LlNNQUNLNjQKWyAgICAwLjEzOTM4MF0gRVZNOiBzZWN1cml0eS5jYXBhYmlsaXR5ClsgICAg MC4xMzk0MzBdIFBNOiBSZWdpc3RlcmluZyBBQ1BJIE5WUyByZWdpb24gW21lbSAweGFhZjIyMDAw LTB4YWFmODZmZmZdICg0MTM2OTYgYnl0ZXMpClsgICAgMC4xMzk0NDBdIFBNOiBSZWdpc3Rlcmlu ZyBBQ1BJIE5WUyByZWdpb24gW21lbSAweGFhZjhhMDAwLTB4YWFmZTdmZmZdICgzODUwMjQgYnl0 ZXMpClsgICAgMC4xNDAyNTFdIHJlZ3VsYXRvci1kdW1teTogbm8gcGFyYW1ldGVycwpbICAgIDAu MTQwMzAyXSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDE2ClsgICAgMC4xNDA0NTJd IEFDUEkgRkFEVCBkZWNsYXJlcyB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBQQ0llIEFTUE0s IHNvIGRpc2FibGUgaXQKWyAgICAwLjE0MDQ1NV0gQUNQSTogYnVzIHR5cGUgcGNpIHJlZ2lzdGVy ZWQKWyAgICAwLjE0MDUyMF0gUENJOiBNTUNPTkZJRyBmb3IgZG9tYWluIDAwMDAgW2J1cyAwMC0z Zl0gYXQgW21lbSAweGUwMDAwMDAwLTB4ZTNmZmZmZmZdIChiYXNlIDB4ZTAwMDAwMDApClsgICAg MC4xNDA1MjNdIFBDSTogTU1DT05GSUcgYXQgW21lbSAweGUwMDAwMDAwLTB4ZTNmZmZmZmZdIHJl c2VydmVkIGluIEU4MjAKWyAgICAwLjE1MDk4Ml0gUENJOiBVc2luZyBjb25maWd1cmF0aW9uIHR5 cGUgMSBmb3IgYmFzZSBhY2Nlc3MKWyAgICAwLjE1MTg0M10gYmlvOiBjcmVhdGUgc2xhYiA8Ymlv LTA+IGF0IDAKWyAgICAwLjE1MTkzNF0gQUNQSTogQWRkZWQgX09TSShNb2R1bGUgRGV2aWNlKQpb ICAgIDAuMTUxOTM2XSBBQ1BJOiBBZGRlZCBfT1NJKFByb2Nlc3NvciBEZXZpY2UpClsgICAgMC4x NTE5MzhdIEFDUEk6IEFkZGVkIF9PU0koMy4wIF9TQ1AgRXh0ZW5zaW9ucykKWyAgICAwLjE1MTkz OV0gQUNQSTogQWRkZWQgX09TSShQcm9jZXNzb3IgQWdncmVnYXRvciBEZXZpY2UpClsgICAgMC4x NTQ0NjddIEFDUEk6IEVDOiBFQyBkZXNjcmlwdGlvbiB0YWJsZSBpcyBmb3VuZCwgY29uZmlndXJp bmcgYm9vdCBFQwpbICAgIDAuMTU0NDcyXSBBQ1BJOiBFQzogTG9vayB1cCBFQyBpbiBEU0RUClsg ICAgMC4xNTcxODRdIEFDUEk6IEV4ZWN1dGVkIDEgYmxvY2tzIG9mIG1vZHVsZS1sZXZlbCBleGVj dXRhYmxlIEFNTCBjb2RlClsgICAgMC4xNjA4MjZdIFtGaXJtd2FyZSBCdWddOiBBQ1BJOiBCSU9T IF9PU0koTGludXgpIHF1ZXJ5IGlnbm9yZWQKWyAgICAwLjI2Njg4Nl0gQUNQSTogU1NEVCAwMDAw MDAwMGFhZGNhNzE4IDAwNjk0ICh2MDEgIFBtUmVmICBDcHUwQ3N0IDAwMDAzMDAxIElOVEwgMjAw OTExMTIpClsgICAgMC4yNjc1MjFdIEFDUEk6IER5bmFtaWMgT0VNIFRhYmxlIExvYWQ6ClsgICAg MC4yNjc1MjNdIEFDUEk6IFNTRFQgICAgICAgICAgIChudWxsKSAwMDY5NCAodjAxICBQbVJlZiAg Q3B1MENzdCAwMDAwMzAwMSBJTlRMIDIwMDkxMTEyKQpbICAgIDAuMjY3ODAyXSBBQ1BJOiBTU0RU IDAwMDAwMDAwYWFkY2JhOTggMDAzMDMgKHYwMSAgUG1SZWYgICAgQXBJc3QgMDAwMDMwMDAgSU5U TCAyMDA5MTExMikKWyAgICAwLjI2ODQ2NF0gQUNQSTogRHluYW1pYyBPRU0gVGFibGUgTG9hZDoK WyAgICAwLjI2ODQ2Nl0gQUNQSTogU1NEVCAgICAgICAgICAgKG51bGwpIDAwMzAzICh2MDEgIFBt UmVmICAgIEFwSXN0IDAwMDAzMDAwIElOVEwgMjAwOTExMTIpClsgICAgMC4yNjg1OTRdIEFDUEk6 IFNTRFQgMDAwMDAwMDBhYWRjOWQ5OCAwMDExOSAodjAxICBQbVJlZiAgICBBcENzdCAwMDAwMzAw MCBJTlRMIDIwMDkxMTEyKQpbICAgIDAuMjY5MjIxXSBBQ1BJOiBEeW5hbWljIE9FTSBUYWJsZSBM b2FkOgpbICAgIDAuMjY5MjIzXSBBQ1BJOiBTU0RUICAgICAgICAgICAobnVsbCkgMDAxMTkgKHYw MSAgUG1SZWYgICAgQXBDc3QgMDAwMDMwMDAgSU5UTCAyMDA5MTExMikKWyAgICAwLjI2OTgxN10g QUNQSTogSW50ZXJwcmV0ZXIgZW5hYmxlZApbICAgIDAuMjY5ODIyXSBBQ1BJOiAoc3VwcG9ydHMg UzAgUzMgUzQgUzUpClsgICAgMC4yNjk4NDJdIEFDUEk6IFVzaW5nIElPQVBJQyBmb3IgaW50ZXJy dXB0IHJvdXRpbmcKWyAgICAwLjM3NjI4Ml0gQUNQSTogRUM6IEdQRSA9IDB4MWIsIEkvTzogY29t bWFuZC9zdGF0dXMgPSAweDY2LCBkYXRhID0gMHg2MgpbICAgIDAuMzc2NDQ1XSBBQ1BJOiBObyBk b2NrIGRldmljZXMgZm91bmQuClsgICAgMC4zNzY0NTBdIFBDSTogVXNpbmcgaG9zdCBicmlkZ2Ug d2luZG93cyBmcm9tIEFDUEk7IGlmIG5lY2Vzc2FyeSwgdXNlICJwY2k9bm9jcnMiIGFuZCByZXBv cnQgYSBidWcKWyAgICAwLjM3NjY3M10gQUNQSTogUENJIFJvb3QgQnJpZGdlIFtQQ0kwXSAoZG9t YWluIDAwMDAgW2J1cyAwMC0zZV0pClsgICAgMC4zNzY2NzZdIEFDUEk6IFBDSSBJbnRlcnJ1cHQg Um91dGluZyBUYWJsZSBbXF9TQl8uUENJMC5fUFJUXQpbICAgIDAuMzc2ODA5XSBcX1NCXy5QQ0kw Ol9PU0MgaW52YWxpZCBVVUlEClsgICAgMC4zNzY4MTFdIF9PU0MgcmVxdWVzdCBkYXRhOjEgOCAx ZiAKWyAgICAwLjM3NzIyNl0gUENJIGhvc3QgYnJpZGdlIHRvIGJ1cyAwMDAwOjAwClsgICAgMC4z NzcyMjldIHBjaV9idXMgMDAwMDowMDogcm9vdCBidXMgcmVzb3VyY2UgW2J1cyAwMC0zZV0KWyAg ICAwLjM3NzIzMV0gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJjZSBbaW8gIDB4MDAw MC0weDBjZjddClsgICAgMC4zNzcyMzNdIHBjaV9idXMgMDAwMDowMDogcm9vdCBidXMgcmVzb3Vy Y2UgW2lvICAweDBkMDAtMHhmZmZmXQpbICAgIDAuMzc3MjM2XSBwY2lfYnVzIDAwMDA6MDA6IHJv b3QgYnVzIHJlc291cmNlIFttZW0gMHgwMDBhMDAwMC0weDAwMGJmZmZmXQpbICAgIDAuMzc3MjM3 XSBwY2lfYnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNlIFttZW0gMHgwMDBkMDAwMC0weDAw MGQzZmZmXQpbICAgIDAuMzc3MjM5XSBwY2lfYnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNl IFttZW0gMHgwMDBkNDAwMC0weDAwMGQ3ZmZmXQpbICAgIDAuMzc3MjQxXSBwY2lfYnVzIDAwMDA6 MDA6IHJvb3QgYnVzIHJlc291cmNlIFttZW0gMHgwMDBkODAwMC0weDAwMGRiZmZmXQpbICAgIDAu Mzc3MjQzXSBwY2lfYnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNlIFttZW0gMHgwMDBkYzAw MC0weDAwMGRmZmZmXQpbICAgIDAuMzc3MjQ1XSBwY2lfYnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJl c291cmNlIFttZW0gMHgwMDBlMDAwMC0weDAwMGUzZmZmXQpbICAgIDAuMzc3MjQ3XSBwY2lfYnVz IDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNlIFttZW0gMHgwMDBlNDAwMC0weDAwMGU3ZmZmXQpb ICAgIDAuMzc3MjQ5XSBwY2lfYnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNlIFttZW0gMHhh ZmEwMDAwMC0weGZlYWZmZmZmXQpbICAgIDAuMzc3MjUxXSBwY2lfYnVzIDAwMDA6MDA6IHJvb3Qg YnVzIHJlc291cmNlIFttZW0gMHhmZWQ0MDAwMC0weGZlZDQ0ZmZmXQpbICAgIDAuMzc3MjYxXSBw Y2kgMDAwMDowMDowMC4wOiBbODA4NjowMTA0XSB0eXBlIDAwIGNsYXNzIDB4MDYwMDAwClsgICAg MC4zNzczMDFdIHBjaSAwMDAwOjAwOjAxLjA6IFs4MDg2OjAxMDFdIHR5cGUgMDEgY2xhc3MgMHgw NjA0MDAKWyAgICAwLjM3NzMzNl0gcGNpIDAwMDA6MDA6MDEuMDogUE1FIyBzdXBwb3J0ZWQgZnJv bSBEMCBEM2hvdCBEM2NvbGQKWyAgICAwLjM3NzM1OF0gcGNpIDAwMDA6MDA6MDIuMDogWzgwODY6 MDExNl0gdHlwZSAwMCBjbGFzcyAweDAzMDAwMApbICAgIDAuMzc3MzcwXSBwY2kgMDAwMDowMDow Mi4wOiByZWcgMTA6IFttZW0gMHhkZDQwMDAwMC0weGRkN2ZmZmZmIDY0Yml0XQpbICAgIDAuMzc3 Mzc3XSBwY2kgMDAwMDowMDowMi4wOiByZWcgMTg6IFttZW0gMHhiMDAwMDAwMC0weGJmZmZmZmZm IDY0Yml0IHByZWZdClsgICAgMC4zNzczODJdIHBjaSAwMDAwOjAwOjAyLjA6IHJlZyAyMDogW2lv ICAweGUwMDAtMHhlMDNmXQpbICAgIDAuMzc3NDQwXSBwY2kgMDAwMDowMDoxNi4wOiBbODA4Njox YzNhXSB0eXBlIDAwIGNsYXNzIDB4MDc4MDAwClsgICAgMC4zNzc0NjZdIHBjaSAwMDAwOjAwOjE2 LjA6IHJlZyAxMDogW21lbSAweGRmNjBiMDAwLTB4ZGY2MGIwMGYgNjRiaXRdClsgICAgMC4zNzc1 NDddIHBjaSAwMDAwOjAwOjE2LjA6IFBNRSMgc3VwcG9ydGVkIGZyb20gRDAgRDNob3QgRDNjb2xk ClsgICAgMC4zNzc1ODRdIHBjaSAwMDAwOjAwOjFhLjA6IFs4MDg2OjFjMmRdIHR5cGUgMDAgY2xh c3MgMHgwYzAzMjAKWyAgICAwLjM3NzYwN10gcGNpIDAwMDA6MDA6MWEuMDogcmVnIDEwOiBbbWVt IDB4ZGY2MDgwMDAtMHhkZjYwODNmZl0KWyAgICAwLjM3NzcwNF0gcGNpIDAwMDA6MDA6MWEuMDog UE1FIyBzdXBwb3J0ZWQgZnJvbSBEMCBEM2hvdCBEM2NvbGQKWyAgICAwLjM3NzczM10gcGNpIDAw MDA6MDA6MWIuMDogWzgwODY6MWMyMF0gdHlwZSAwMCBjbGFzcyAweDA0MDMwMApbICAgIDAuMzc3 NzUwXSBwY2kgMDAwMDowMDoxYi4wOiByZWcgMTA6IFttZW0gMHhkZjYwMDAwMC0weGRmNjAzZmZm IDY0Yml0XQpbICAgIDAuMzc3ODIzXSBwY2kgMDAwMDowMDoxYi4wOiBQTUUjIHN1cHBvcnRlZCBm cm9tIEQwIEQzaG90IEQzY29sZApbICAgIDAuMzc3ODQ5XSBwY2kgMDAwMDowMDoxYy4wOiBbODA4 NjoxYzEwXSB0eXBlIDAxIGNsYXNzIDB4MDYwNDAwClsgICAgMC4zNzc5MzNdIHBjaSAwMDAwOjAw OjFjLjA6IFBNRSMgc3VwcG9ydGVkIGZyb20gRDAgRDNob3QgRDNjb2xkClsgICAgMC4zNzc5NjFd IHBjaSAwMDAwOjAwOjFjLjE6IFs4MDg2OjFjMTJdIHR5cGUgMDEgY2xhc3MgMHgwNjA0MDAKWyAg ICAwLjM3ODA1Ml0gcGNpIDAwMDA6MDA6MWMuMTogUE1FIyBzdXBwb3J0ZWQgZnJvbSBEMCBEM2hv dCBEM2NvbGQKWyAgICAwLjM3ODA4Nl0gcGNpIDAwMDA6MDA6MWMuNTogWzgwODY6MWMxYV0gdHlw ZSAwMSBjbGFzcyAweDA2MDQwMApbICAgIDAuMzc4MTcyXSBwY2kgMDAwMDowMDoxYy41OiBQTUUj IHN1cHBvcnRlZCBmcm9tIEQwIEQzaG90IEQzY29sZApbICAgIDAuMzc4MjA4XSBwY2kgMDAwMDow MDoxZC4wOiBbODA4NjoxYzI2XSB0eXBlIDAwIGNsYXNzIDB4MGMwMzIwClsgICAgMC4zNzgyMzFd IHBjaSAwMDAwOjAwOjFkLjA6IHJlZyAxMDogW21lbSAweGRmNjA3MDAwLTB4ZGY2MDczZmZdClsg ICAgMC4zNzgzMjhdIHBjaSAwMDAwOjAwOjFkLjA6IFBNRSMgc3VwcG9ydGVkIGZyb20gRDAgRDNo b3QgRDNjb2xkClsgICAgMC4zNzgzNTddIHBjaSAwMDAwOjAwOjFmLjA6IFs4MDg2OjFjNDldIHR5 cGUgMDAgY2xhc3MgMHgwNjAxMDAKWyAgICAwLjM3ODQ4OV0gcGNpIDAwMDA6MDA6MWYuMjogWzgw ODY6MWMwM10gdHlwZSAwMCBjbGFzcyAweDAxMDYwMQpbICAgIDAuMzc4NTEwXSBwY2kgMDAwMDow MDoxZi4yOiByZWcgMTA6IFtpbyAgMHhlMGIwLTB4ZTBiN10KWyAgICAwLjM3ODUxOV0gcGNpIDAw MDA6MDA6MWYuMjogcmVnIDE0OiBbaW8gIDB4ZTBhMC0weGUwYTNdClsgICAgMC4zNzg1MjhdIHBj aSAwMDAwOjAwOjFmLjI6IHJlZyAxODogW2lvICAweGUwOTAtMHhlMDk3XQpbICAgIDAuMzc4NTM3 XSBwY2kgMDAwMDowMDoxZi4yOiByZWcgMWM6IFtpbyAgMHhlMDgwLTB4ZTA4M10KWyAgICAwLjM3 ODU0Nl0gcGNpIDAwMDA6MDA6MWYuMjogcmVnIDIwOiBbaW8gIDB4ZTA2MC0weGUwN2ZdClsgICAg MC4zNzg1NTVdIHBjaSAwMDAwOjAwOjFmLjI6IHJlZyAyNDogW21lbSAweGRmNjA2MDAwLTB4ZGY2 MDY3ZmZdClsgICAgMC4zNzg2MDVdIHBjaSAwMDAwOjAwOjFmLjI6IFBNRSMgc3VwcG9ydGVkIGZy b20gRDNob3QKWyAgICAwLjM3ODYzMF0gcGNpIDAwMDA6MDA6MWYuMzogWzgwODY6MWMyMl0gdHlw ZSAwMCBjbGFzcyAweDBjMDUwMApbICAgIDAuMzc4NjQ3XSBwY2kgMDAwMDowMDoxZi4zOiByZWcg MTA6IFttZW0gMHhkZjYwNTAwMC0weGRmNjA1MGZmIDY0Yml0XQpbICAgIDAuMzc4NjcwXSBwY2kg MDAwMDowMDoxZi4zOiByZWcgMjA6IFtpbyAgMHhlMDQwLTB4ZTA1Zl0KWyAgICAwLjM3ODczNV0g cGNpIDAwMDA6MDE6MDAuMDogWzEwZGU6MGRmNF0gdHlwZSAwMCBjbGFzcyAweDAzMDAwMApbICAg IDAuMzc4NzQ0XSBwY2kgMDAwMDowMTowMC4wOiByZWcgMTA6IFttZW0gMHhkYzAwMDAwMC0weGRj ZmZmZmZmXQpbICAgIDAuMzc4NzU0XSBwY2kgMDAwMDowMTowMC4wOiByZWcgMTQ6IFttZW0gMHhj MDAwMDAwMC0weGNmZmZmZmZmIDY0Yml0IHByZWZdClsgICAgMC4zNzg3NjNdIHBjaSAwMDAwOjAx OjAwLjA6IHJlZyAxYzogW21lbSAweGQwMDAwMDAwLTB4ZDFmZmZmZmYgNjRiaXQgcHJlZl0KWyAg ICAwLjM3ODc3MF0gcGNpIDAwMDA6MDE6MDAuMDogcmVnIDI0OiBbaW8gIDB4ZDAwMC0weGQwN2Zd ClsgICAgMC4zNzg3NzddIHBjaSAwMDAwOjAxOjAwLjA6IHJlZyAzMDogW21lbSAweGRkMDAwMDAw LTB4ZGQwN2ZmZmYgcHJlZl0KWyAgICAwLjM5MDA0NV0gcGNpIDAwMDA6MDA6MDEuMDogUENJIGJy aWRnZSB0byBbYnVzIDAxXQpbICAgIDAuMzkwMDU0XSBwY2kgMDAwMDowMDowMS4wOiAgIGJyaWRn ZSB3aW5kb3cgW2lvICAweGQwMDAtMHhkZmZmXQpbICAgIDAuMzkwMDYxXSBwY2kgMDAwMDowMDow MS4wOiAgIGJyaWRnZSB3aW5kb3cgW21lbSAweGRjMDAwMDAwLTB4ZGQwZmZmZmZdClsgICAgMC4z OTAwNzFdIHBjaSAwMDAwOjAwOjAxLjA6ICAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4YzAwMDAwMDAt MHhkMWZmZmZmZiA2NGJpdCBwcmVmXQpbICAgIDAuMzkwMTcyXSBwY2kgMDAwMDowMDoxYy4wOiBQ Q0kgYnJpZGdlIHRvIFtidXMgMDJdClsgICAgMC4zOTAxNzddIHBjaSAwMDAwOjAwOjFjLjA6ICAg YnJpZGdlIHdpbmRvdyBbaW8gIDB4YzAwMC0weGNmZmZdClsgICAgMC4zOTAxODFdIHBjaSAwMDAw OjAwOjFjLjA6ICAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4ZGVjMDAwMDAtMHhkZjVmZmZmZl0KWyAg ICAwLjM5MDE4OF0gcGNpIDAwMDA6MDA6MWMuMDogICBicmlkZ2Ugd2luZG93IFttZW0gMHhkMzcw MDAwMC0weGQ0MGZmZmZmIDY0Yml0IHByZWZdClsgICAgMC4zOTAyNThdIHBjaSAwMDAwOjAzOjAw LjA6IFsxNjhjOjAwMmJdIHR5cGUgMDAgY2xhc3MgMHgwMjgwMDAKWyAgICAwLjM5MDI4N10gcGNp IDAwMDA6MDM6MDAuMDogcmVnIDEwOiBbbWVtIDB4ZGUyMDAwMDAtMHhkZTIwZmZmZiA2NGJpdF0K WyAgICAwLjM5MDQyM10gcGNpIDAwMDA6MDM6MDAuMDogc3VwcG9ydHMgRDEKWyAgICAwLjM5MDQy NV0gcGNpIDAwMDA6MDM6MDAuMDogUE1FIyBzdXBwb3J0ZWQgZnJvbSBEMCBEMSBEM2hvdCBEM2Nv bGQKWyAgICAwLjM5ODA0NV0gcGNpIDAwMDA6MDA6MWMuMTogUENJIGJyaWRnZSB0byBbYnVzIDAz XQpbICAgIDAuMzk4MDU1XSBwY2kgMDAwMDowMDoxYy4xOiAgIGJyaWRnZSB3aW5kb3cgW2lvICAw eGIwMDAtMHhiZmZmXQpbICAgIDAuMzk4MDY0XSBwY2kgMDAwMDowMDoxYy4xOiAgIGJyaWRnZSB3 aW5kb3cgW21lbSAweGRlMjAwMDAwLTB4ZGViZmZmZmZdClsgICAgMC4zOTgwNzldIHBjaSAwMDAw OjAwOjFjLjE6ICAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4ZDJjMDAwMDAtMHhkMzVmZmZmZiA2NGJp dCBwcmVmXQpbICAgIDAuMzk4MTk1XSBwY2kgMDAwMDowNDowMC4wOiBbMTk2OToxMDgzXSB0eXBl IDAwIGNsYXNzIDB4MDIwMDAwClsgICAgMC4zOTgyMjVdIHBjaSAwMDAwOjA0OjAwLjA6IHJlZyAx MDogW21lbSAweGRkODAwMDAwLTB4ZGQ4M2ZmZmYgNjRiaXRdClsgICAgMC4zOTgyNDJdIHBjaSAw MDAwOjA0OjAwLjA6IHJlZyAxODogW2lvICAweGEwMDAtMHhhMDdmXQpbICAgIDAuMzk4Mzc1XSBw Y2kgMDAwMDowNDowMC4wOiBQTUUjIHN1cHBvcnRlZCBmcm9tIEQwIEQxIEQyIEQzaG90IEQzY29s ZApbICAgIDAuNDA2MDQyXSBwY2kgMDAwMDowMDoxYy41OiBQQ0kgYnJpZGdlIHRvIFtidXMgMDRd ClsgICAgMC40MDYwNTJdIHBjaSAwMDAwOjAwOjFjLjU6ICAgYnJpZGdlIHdpbmRvdyBbaW8gIDB4 YTAwMC0weGFmZmZdClsgICAgMC40MDYwNjJdIHBjaSAwMDAwOjAwOjFjLjU6ICAgYnJpZGdlIHdp bmRvdyBbbWVtIDB4ZGQ4MDAwMDAtMHhkZTFmZmZmZl0KWyAgICAwLjQwNjA3Nl0gcGNpIDAwMDA6 MDA6MWMuNTogICBicmlkZ2Ugd2luZG93IFttZW0gMHhkMjEwMDAwMC0weGQyYWZmZmZmIDY0Yml0 IHByZWZdClsgICAgMC40MDYxMzNdIEFDUEk6IFBDSSBJbnRlcnJ1cHQgUm91dGluZyBUYWJsZSBb XF9TQl8uUENJMC5QRUcwLl9QUlRdClsgICAgMC40MDYyMjZdIEFDUEk6IFBDSSBJbnRlcnJ1cHQg Um91dGluZyBUYWJsZSBbXF9TQl8uUENJMC5SUDAxLl9QUlRdClsgICAgMC40MDYyNTVdIEFDUEk6 IFBDSSBJbnRlcnJ1cHQgUm91dGluZyBUYWJsZSBbXF9TQl8uUENJMC5SUDAyLl9QUlRdClsgICAg MC40MDYyOTVdIEFDUEk6IFBDSSBJbnRlcnJ1cHQgUm91dGluZyBUYWJsZSBbXF9TQl8uUENJMC5S UDA2Ll9QUlRdClsgICAgMC40MDYzNjhdIFxfU0JfLlBDSTA6X09TQyBpbnZhbGlkIFVVSUQKWyAg ICAwLjQwNjM2OV0gX09TQyByZXF1ZXN0IGRhdGE6MSAxZiAxZiAKWyAgICAwLjQwNjM3M10gIHBj aTAwMDA6MDA6IEFDUEkgX09TQyBzdXBwb3J0IG5vdGlmaWNhdGlvbiBmYWlsZWQsIGRpc2FibGlu ZyBQQ0llIEFTUE0KWyAgICAwLjQwNjM3NV0gIHBjaTAwMDA6MDA6IFVuYWJsZSB0byByZXF1ZXN0 IF9PU0MgY29udHJvbCAoX09TQyBzdXBwb3J0IG1hc2s6IDB4MDgpClsgICAgMC40MDcwNjddIEFD UEk6IFBDSSBJbnRlcnJ1cHQgTGluayBbTE5LQV0gKElSUXMgMyA0IDUgNiA3IDEwICoxMSAxMikK WyAgICAwLjQwNzExM10gQUNQSTogUENJIEludGVycnVwdCBMaW5rIFtMTktCXSAoSVJRcyAzIDQg NSA2IDcgKjEwIDEyKQpbICAgIDAuNDA3MTU2XSBBQ1BJOiBQQ0kgSW50ZXJydXB0IExpbmsgW0xO S0NdIChJUlFzIDMgNCAqNSA2IDcgMTAgMTIpClsgICAgMC40MDcxOThdIEFDUEk6IFBDSSBJbnRl cnJ1cHQgTGluayBbTE5LRF0gKElSUXMgMyA0ICo1IDYgNyAxMCAxMikKWyAgICAwLjQwNzI0MF0g QUNQSTogUENJIEludGVycnVwdCBMaW5rIFtMTktFXSAoSVJRcyAzIDQgNSA2IDcgMTAgMTIpICow LCBkaXNhYmxlZC4KWyAgICAwLjQwNzI4Ml0gQUNQSTogUENJIEludGVycnVwdCBMaW5rIFtMTktG XSAoSVJRcyAzIDQgNSA2IDcgMTAgMTIpICowLCBkaXNhYmxlZC4KWyAgICAwLjQwNzMyNl0gQUNQ STogUENJIEludGVycnVwdCBMaW5rIFtMTktHXSAoSVJRcyAzIDQgKjUgNiA3IDEwIDEyKQpbICAg IDAuNDA3MzY3XSBBQ1BJOiBQQ0kgSW50ZXJydXB0IExpbmsgW0xOS0hdIChJUlFzICozIDQgNSA2 IDcgMTAgMTIpClsgICAgMC40MDc0NjFdIHZnYWFyYjogZGV2aWNlIGFkZGVkOiBQQ0k6MDAwMDow MDowMi4wLGRlY29kZXM9aW8rbWVtLG93bnM9aW8rbWVtLGxvY2tzPW5vbmUKWyAgICAwLjQwNzQ2 Nl0gdmdhYXJiOiBkZXZpY2UgYWRkZWQ6IFBDSTowMDAwOjAxOjAwLjAsZGVjb2Rlcz1pbyttZW0s b3ducz1ub25lLGxvY2tzPW5vbmUKWyAgICAwLjQwNzQ2OF0gdmdhYXJiOiBsb2FkZWQKWyAgICAw LjQwNzQ2OV0gdmdhYXJiOiBicmlkZ2UgY29udHJvbCBwb3NzaWJsZSAwMDAwOjAxOjAwLjAKWyAg ICAwLjQwNzQ3MF0gdmdhYXJiOiBubyBicmlkZ2UgY29udHJvbCBwb3NzaWJsZSAwMDAwOjAwOjAy LjAKWyAgICAwLjQwNzYyOV0gU0NTSSBzdWJzeXN0ZW0gaW5pdGlhbGl6ZWQKWyAgICAwLjQwNzYz MV0gQUNQSTogYnVzIHR5cGUgc2NzaSByZWdpc3RlcmVkClsgICAgMC40MDc2NzhdIGxpYmF0YSB2 ZXJzaW9uIDMuMDAgbG9hZGVkLgpbICAgIDAuNDA3Njk2XSBBQ1BJOiBidXMgdHlwZSB1c2IgcmVn aXN0ZXJlZApbICAgIDAuNDA3NzE4XSB1c2Jjb3JlOiByZWdpc3RlcmVkIG5ldyBpbnRlcmZhY2Ug ZHJpdmVyIHVzYmZzClsgICAgMC40MDc3MjZdIHVzYmNvcmU6IHJlZ2lzdGVyZWQgbmV3IGludGVy ZmFjZSBkcml2ZXIgaHViClsgICAgMC40MDc3NDddIHVzYmNvcmU6IHJlZ2lzdGVyZWQgbmV3IGRl dmljZSBkcml2ZXIgdXNiClsgICAgMC40MDc4MjVdIFBDSTogVXNpbmcgQUNQSSBmb3IgSVJRIHJv dXRpbmcKWyAgICAwLjQwOTQ1OV0gUENJOiBwY2lfY2FjaGVfbGluZV9zaXplIHNldCB0byA2NCBi eXRlcwpbICAgIDAuNDA5NTI2XSBlODIwOiByZXNlcnZlIFJBTSBidWZmZXIgW21lbSAweDAwMDll ODAwLTB4MDAwOWZmZmZdClsgICAgMC40MDk1MjhdIGU4MjA6IHJlc2VydmUgUkFNIGJ1ZmZlciBb bWVtIDB4YWFkMjAwMDAtMHhhYmZmZmZmZl0KWyAgICAwLjQwOTUzMF0gZTgyMDogcmVzZXJ2ZSBS QU0gYnVmZmVyIFttZW0gMHhhYWQ5NTAwMC0weGFiZmZmZmZmXQpbICAgIDAuNDA5NTMzXSBlODIw OiByZXNlcnZlIFJBTSBidWZmZXIgW21lbSAweGFhZDk3MDAwLTB4YWJmZmZmZmZdClsgICAgMC40 MDk1MzVdIGU4MjA6IHJlc2VydmUgUkFNIGJ1ZmZlciBbbWVtIDB4YWFkYzYwMDAtMHhhYmZmZmZm Zl0KWyAgICAwLjQwOTUzN10gZTgyMDogcmVzZXJ2ZSBSQU0gYnVmZmVyIFttZW0gMHhhYWYyMjAw MC0weGFiZmZmZmZmXQpbICAgIDAuNDA5NTM5XSBlODIwOiByZXNlcnZlIFJBTSBidWZmZXIgW21l bSAweGFhZjhhMDAwLTB4YWJmZmZmZmZdClsgICAgMC40MDk1NDFdIGU4MjA6IHJlc2VydmUgUkFN IGJ1ZmZlciBbbWVtIDB4YWFmZmQwMDAtMHhhYmZmZmZmZl0KWyAgICAwLjQwOTU0Ml0gZTgyMDog cmVzZXJ2ZSBSQU0gYnVmZmVyIFttZW0gMHgxNGZlMDAwMDAtMHgxNGZmZmZmZmZdClsgICAgMC40 MDk2MjFdIE5ldExhYmVsOiBJbml0aWFsaXppbmcKWyAgICAwLjQwOTYyM10gTmV0TGFiZWw6ICBk b21haW4gaGFzaCBzaXplID0gMTI4ClsgICAgMC40MDk2MjRdIE5ldExhYmVsOiAgcHJvdG9jb2xz ID0gVU5MQUJFTEVEIENJUFNPdjQKWyAgICAwLjQwOTYzNF0gTmV0TGFiZWw6ICB1bmxhYmVsZWQg dHJhZmZpYyBhbGxvd2VkIGJ5IGRlZmF1bHQKWyAgICAwLjQwOTY4OF0gaHBldDA6IGF0IE1NSU8g MHhmZWQwMDAwMCwgSVJRcyAyLCA4LCAwLCAwLCAwLCAwLCAwLCAwClsgICAgMC40MDk2OTRdIGhw ZXQwOiA4IGNvbXBhcmF0b3JzLCA2NC1iaXQgMTQuMzE4MTgwIE1IeiBjb3VudGVyClsgICAgMC40 MTE3MDVdIFN3aXRjaGluZyB0byBjbG9ja3NvdXJjZSBocGV0ClsgICAgMC40MTY4NzJdIEFwcEFy bW9yOiBBcHBBcm1vciBGaWxlc3lzdGVtIEVuYWJsZWQKWyAgICAwLjQxNjg5N10gcG5wOiBQblAg QUNQSSBpbml0ClsgICAgMC40MTY5MDldIEFDUEk6IGJ1cyB0eXBlIHBucCByZWdpc3RlcmVkClsg ICAgMC40Njc3NzhdIHBucCAwMDowMDogW2RtYSA0XQpbICAgIDAuNDY3ODAxXSBwbnAgMDA6MDA6 IFBsdWcgYW5kIFBsYXkgQUNQSSBkZXZpY2UsIElEcyBQTlAwMjAwIChhY3RpdmUpClsgICAgMC40 Njc4MjFdIHBucCAwMDowMTogUGx1ZyBhbmQgUGxheSBBQ1BJIGRldmljZSwgSURzIElOVDA4MDAg KGFjdGl2ZSkKWyAgICAwLjQ2NzkxOV0gcG5wIDAwOjAyOiBQbHVnIGFuZCBQbGF5IEFDUEkgZGV2 aWNlLCBJRHMgUE5QMDEwMyAoYWN0aXZlKQpbICAgIDAuNDY3OTUxXSBwbnAgMDA6MDM6IFBsdWcg YW5kIFBsYXkgQUNQSSBkZXZpY2UsIElEcyBQTlAwYzA0IChhY3RpdmUpClsgICAgMC40Njc5OTdd IHN5c3RlbSAwMDowNDogW2lvICAweDA2ODAtMHgwNjlmXSBoYXMgYmVlbiByZXNlcnZlZApbICAg IDAuNDY3OTk5XSBzeXN0ZW0gMDA6MDQ6IFtpbyAgMHgxMDAwLTB4MTAwZl0gaGFzIGJlZW4gcmVz ZXJ2ZWQKWyAgICAwLjQ2ODAwMl0gc3lzdGVtIDAwOjA0OiBbaW8gIDB4ZmZmZl0gaGFzIGJlZW4g cmVzZXJ2ZWQKWyAgICAwLjQ2ODAwNF0gc3lzdGVtIDAwOjA0OiBbaW8gIDB4ZmZmZl0gaGFzIGJl ZW4gcmVzZXJ2ZWQKWyAgICAwLjQ2ODAwNl0gc3lzdGVtIDAwOjA0OiBbaW8gIDB4MDQwMC0weDA0 NTNdIGhhcyBiZWVuIHJlc2VydmVkClsgICAgMC40NjgwMDhdIHN5c3RlbSAwMDowNDogW2lvICAw eDA0NTgtMHgwNDdmXSBoYXMgYmVlbiByZXNlcnZlZApbICAgIDAuNDY4MDEwXSBzeXN0ZW0gMDA6 MDQ6IFtpbyAgMHgwNTAwLTB4MDU3Zl0gaGFzIGJlZW4gcmVzZXJ2ZWQKWyAgICAwLjQ2ODAxMl0g c3lzdGVtIDAwOjA0OiBbaW8gIDB4MTY0ZS0weDE2NGZdIGhhcyBiZWVuIHJlc2VydmVkClsgICAg MC40NjgwMTVdIHN5c3RlbSAwMDowNDogUGx1ZyBhbmQgUGxheSBBQ1BJIGRldmljZSwgSURzIFBO UDBjMDIgKGFjdGl2ZSkKWyAgICAwLjQ2ODAzOF0gcG5wIDAwOjA1OiBQbHVnIGFuZCBQbGF5IEFD UEkgZGV2aWNlLCBJRHMgUE5QMGIwMCAoYWN0aXZlKQpbICAgIDAuNDY4MDc0XSBzeXN0ZW0gMDA6 MDY6IFtpbyAgMHgwNDU0LTB4MDQ1N10gaGFzIGJlZW4gcmVzZXJ2ZWQKWyAgICAwLjQ2ODA3N10g c3lzdGVtIDAwOjA2OiBQbHVnIGFuZCBQbGF5IEFDUEkgZGV2aWNlLCBJRHMgSU5UM2YwZCBQTlAw YzAyIChhY3RpdmUpClsgICAgMC40NjgxMDZdIHN5c3RlbSAwMDowNzogW2lvICAweDAyNDAtMHgw MjU5XSBoYXMgYmVlbiByZXNlcnZlZApbICAgIDAuNDY4MTA5XSBzeXN0ZW0gMDA6MDc6IFBsdWcg YW5kIFBsYXkgQUNQSSBkZXZpY2UsIElEcyBQTlAwYzAyIChhY3RpdmUpClsgICAgMC40NjgxNTZd IHBucCAwMDowODogUGx1ZyBhbmQgUGxheSBBQ1BJIGRldmljZSwgSURzIFNZTjBhMTcgU1lOMGEw MCBTWU4wMDAyIFBOUDBmMTMgKGFjdGl2ZSkKWyAgICAwLjQ2ODE4OV0gcG5wIDAwOjA5OiBQbHVn IGFuZCBQbGF5IEFDUEkgZGV2aWNlLCBJRHMgUE5QMDMwMyBQTlAwMzBiIChhY3RpdmUpClsgICAg MC40Njg0MjVdIHN5c3RlbSAwMDowYTogW21lbSAweGZlZDFjMDAwLTB4ZmVkMWZmZmZdIGhhcyBi ZWVuIHJlc2VydmVkClsgICAgMC40Njg0MjhdIHN5c3RlbSAwMDowYTogW21lbSAweGZlZDEwMDAw LTB4ZmVkMTdmZmZdIGNvdWxkIG5vdCBiZSByZXNlcnZlZApbICAgIDAuNDY4NDMwXSBzeXN0ZW0g MDA6MGE6IFttZW0gMHhmZWQxODAwMC0weGZlZDE4ZmZmXSBoYXMgYmVlbiByZXNlcnZlZApbICAg IDAuNDY4NDMyXSBzeXN0ZW0gMDA6MGE6IFttZW0gMHhmZWQxOTAwMC0weGZlZDE5ZmZmXSBoYXMg YmVlbiByZXNlcnZlZApbICAgIDAuNDY4NDM1XSBzeXN0ZW0gMDA6MGE6IFttZW0gMHhlMDAwMDAw MC0weGUzZmZmZmZmXSBoYXMgYmVlbiByZXNlcnZlZApbICAgIDAuNDY4NDM3XSBzeXN0ZW0gMDA6 MGE6IFttZW0gMHhmZWQyMDAwMC0weGZlZDNmZmZmXSBoYXMgYmVlbiByZXNlcnZlZApbICAgIDAu NDY4NDM5XSBzeXN0ZW0gMDA6MGE6IFttZW0gMHhmZWQ5MDAwMC0weGZlZDkzZmZmXSBoYXMgYmVl biByZXNlcnZlZApbICAgIDAuNDY4NDQxXSBzeXN0ZW0gMDA6MGE6IFttZW0gMHhmZWQ0NTAwMC0w eGZlZDhmZmZmXSBoYXMgYmVlbiByZXNlcnZlZApbICAgIDAuNDY4NDQzXSBzeXN0ZW0gMDA6MGE6 IFttZW0gMHhmZjAwMDAwMC0weGZmZmZmZmZmXSBjb3VsZCBub3QgYmUgcmVzZXJ2ZWQKWyAgICAw LjQ2ODQ0Nl0gc3lzdGVtIDAwOjBhOiBbbWVtIDB4ZmVlMDAwMDAtMHhmZWVmZmZmZl0gY291bGQg bm90IGJlIHJlc2VydmVkClsgICAgMC40Njg0NDhdIHN5c3RlbSAwMDowYTogUGx1ZyBhbmQgUGxh eSBBQ1BJIGRldmljZSwgSURzIFBOUDBjMDIgKGFjdGl2ZSkKWyAgICAwLjQ2ODUxOF0gc3lzdGVt IDAwOjBiOiBbbWVtIDB4YWZhMDAwMDAtMHhhZmEwMGZmZl0gaGFzIGJlZW4gcmVzZXJ2ZWQKWyAg ICAwLjQ2ODUyMV0gc3lzdGVtIDAwOjBiOiBQbHVnIGFuZCBQbGF5IEFDUEkgZGV2aWNlLCBJRHMg UE5QMGMwMiAoYWN0aXZlKQpbICAgIDAuNDY4NjUyXSBzeXN0ZW0gMDA6MGM6IFttZW0gMHgyMDAw MDAwMC0weDIwMWZmZmZmXSBoYXMgYmVlbiByZXNlcnZlZApbICAgIDAuNDY4NjU0XSBzeXN0ZW0g MDA6MGM6IFttZW0gMHg0MDAwMDAwMC0weDQwMWZmZmZmXSBoYXMgYmVlbiByZXNlcnZlZApbICAg IDAuNDY4NjU3XSBzeXN0ZW0gMDA6MGM6IFBsdWcgYW5kIFBsYXkgQUNQSSBkZXZpY2UsIElEcyBQ TlAwYzAxIChhY3RpdmUpClsgICAgMC40Njg2NzldIHBucDogUG5QIEFDUEk6IGZvdW5kIDEzIGRl dmljZXMKWyAgICAwLjQ2ODY4MV0gQUNQSTogQUNQSSBidXMgdHlwZSBwbnAgdW5yZWdpc3RlcmVk ClsgICAgMC40NzQ4MDddIHBjaSAwMDAwOjAwOjAxLjA6IFBDSSBicmlkZ2UgdG8gW2J1cyAwMV0K WyAgICAwLjQ3NDgxMV0gcGNpIDAwMDA6MDA6MDEuMDogICBicmlkZ2Ugd2luZG93IFtpbyAgMHhk MDAwLTB4ZGZmZl0KWyAgICAwLjQ3NDgxNF0gcGNpIDAwMDA6MDA6MDEuMDogICBicmlkZ2Ugd2lu ZG93IFttZW0gMHhkYzAwMDAwMC0weGRkMGZmZmZmXQpbICAgIDAuNDc0ODE3XSBwY2kgMDAwMDow MDowMS4wOiAgIGJyaWRnZSB3aW5kb3cgW21lbSAweGMwMDAwMDAwLTB4ZDFmZmZmZmYgNjRiaXQg cHJlZl0KWyAgICAwLjQ3NDgyMV0gcGNpIDAwMDA6MDA6MWMuMDogUENJIGJyaWRnZSB0byBbYnVz IDAyXQpbICAgIDAuNDc0ODI1XSBwY2kgMDAwMDowMDoxYy4wOiAgIGJyaWRnZSB3aW5kb3cgW2lv ICAweGMwMDAtMHhjZmZmXQpbICAgIDAuNDc0ODMxXSBwY2kgMDAwMDowMDoxYy4wOiAgIGJyaWRn ZSB3aW5kb3cgW21lbSAweGRlYzAwMDAwLTB4ZGY1ZmZmZmZdClsgICAgMC40NzQ4MzVdIHBjaSAw MDAwOjAwOjFjLjA6ICAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4ZDM3MDAwMDAtMHhkNDBmZmZmZiA2 NGJpdCBwcmVmXQpbICAgIDAuNDc0ODQzXSBwY2kgMDAwMDowMDoxYy4xOiBQQ0kgYnJpZGdlIHRv IFtidXMgMDNdClsgICAgMC40NzQ4NDddIHBjaSAwMDAwOjAwOjFjLjE6ICAgYnJpZGdlIHdpbmRv dyBbaW8gIDB4YjAwMC0weGJmZmZdClsgICAgMC40NzQ4NTJdIHBjaSAwMDAwOjAwOjFjLjE6ICAg YnJpZGdlIHdpbmRvdyBbbWVtIDB4ZGUyMDAwMDAtMHhkZWJmZmZmZl0KWyAgICAwLjQ3NDg1N10g cGNpIDAwMDA6MDA6MWMuMTogICBicmlkZ2Ugd2luZG93IFttZW0gMHhkMmMwMDAwMC0weGQzNWZm ZmZmIDY0Yml0IHByZWZdClsgICAgMC40NzQ4NjRdIHBjaSAwMDAwOjAwOjFjLjU6IFBDSSBicmlk Z2UgdG8gW2J1cyAwNF0KWyAgICAwLjQ3NDg2OF0gcGNpIDAwMDA6MDA6MWMuNTogICBicmlkZ2Ug d2luZG93IFtpbyAgMHhhMDAwLTB4YWZmZl0KWyAgICAwLjQ3NDg3NF0gcGNpIDAwMDA6MDA6MWMu NTogICBicmlkZ2Ugd2luZG93IFttZW0gMHhkZDgwMDAwMC0weGRlMWZmZmZmXQpbICAgIDAuNDc0 ODc4XSBwY2kgMDAwMDowMDoxYy41OiAgIGJyaWRnZSB3aW5kb3cgW21lbSAweGQyMTAwMDAwLTB4 ZDJhZmZmZmYgNjRiaXQgcHJlZl0KWyAgICAwLjQ3NDkxNF0gcGNpX2J1cyAwMDAwOjAwOiByZXNv dXJjZSA0IFtpbyAgMHgwMDAwLTB4MGNmN10KWyAgICAwLjQ3NDkxN10gcGNpX2J1cyAwMDAwOjAw OiByZXNvdXJjZSA1IFtpbyAgMHgwZDAwLTB4ZmZmZl0KWyAgICAwLjQ3NDkxOV0gcGNpX2J1cyAw MDAwOjAwOiByZXNvdXJjZSA2IFttZW0gMHgwMDBhMDAwMC0weDAwMGJmZmZmXQpbICAgIDAuNDc0 OTIxXSBwY2lfYnVzIDAwMDA6MDA6IHJlc291cmNlIDcgW21lbSAweDAwMGQwMDAwLTB4MDAwZDNm ZmZdClsgICAgMC40NzQ5MjNdIHBjaV9idXMgMDAwMDowMDogcmVzb3VyY2UgOCBbbWVtIDB4MDAw ZDQwMDAtMHgwMDBkN2ZmZl0KWyAgICAwLjQ3NDkyNV0gcGNpX2J1cyAwMDAwOjAwOiByZXNvdXJj ZSA5IFttZW0gMHgwMDBkODAwMC0weDAwMGRiZmZmXQpbICAgIDAuNDc0OTI2XSBwY2lfYnVzIDAw MDA6MDA6IHJlc291cmNlIDEwIFttZW0gMHgwMDBkYzAwMC0weDAwMGRmZmZmXQpbICAgIDAuNDc0 OTI4XSBwY2lfYnVzIDAwMDA6MDA6IHJlc291cmNlIDExIFttZW0gMHgwMDBlMDAwMC0weDAwMGUz ZmZmXQpbICAgIDAuNDc0OTMwXSBwY2lfYnVzIDAwMDA6MDA6IHJlc291cmNlIDEyIFttZW0gMHgw MDBlNDAwMC0weDAwMGU3ZmZmXQpbICAgIDAuNDc0OTMyXSBwY2lfYnVzIDAwMDA6MDA6IHJlc291 cmNlIDEzIFttZW0gMHhhZmEwMDAwMC0weGZlYWZmZmZmXQpbICAgIDAuNDc0OTM0XSBwY2lfYnVz IDAwMDA6MDA6IHJlc291cmNlIDE0IFttZW0gMHhmZWQ0MDAwMC0weGZlZDQ0ZmZmXQpbICAgIDAu NDc0OTM2XSBwY2lfYnVzIDAwMDA6MDE6IHJlc291cmNlIDAgW2lvICAweGQwMDAtMHhkZmZmXQpb ICAgIDAuNDc0OTM4XSBwY2lfYnVzIDAwMDA6MDE6IHJlc291cmNlIDEgW21lbSAweGRjMDAwMDAw LTB4ZGQwZmZmZmZdClsgICAgMC40NzQ5NDBdIHBjaV9idXMgMDAwMDowMTogcmVzb3VyY2UgMiBb bWVtIDB4YzAwMDAwMDAtMHhkMWZmZmZmZiA2NGJpdCBwcmVmXQpbICAgIDAuNDc0OTQyXSBwY2lf YnVzIDAwMDA6MDI6IHJlc291cmNlIDAgW2lvICAweGMwMDAtMHhjZmZmXQpbICAgIDAuNDc0OTQ0 XSBwY2lfYnVzIDAwMDA6MDI6IHJlc291cmNlIDEgW21lbSAweGRlYzAwMDAwLTB4ZGY1ZmZmZmZd ClsgICAgMC40NzQ5NDZdIHBjaV9idXMgMDAwMDowMjogcmVzb3VyY2UgMiBbbWVtIDB4ZDM3MDAw MDAtMHhkNDBmZmZmZiA2NGJpdCBwcmVmXQpbICAgIDAuNDc0OTQ4XSBwY2lfYnVzIDAwMDA6MDM6 IHJlc291cmNlIDAgW2lvICAweGIwMDAtMHhiZmZmXQpbICAgIDAuNDc0OTUwXSBwY2lfYnVzIDAw MDA6MDM6IHJlc291cmNlIDEgW21lbSAweGRlMjAwMDAwLTB4ZGViZmZmZmZdClsgICAgMC40NzQ5 NTJdIHBjaV9idXMgMDAwMDowMzogcmVzb3VyY2UgMiBbbWVtIDB4ZDJjMDAwMDAtMHhkMzVmZmZm ZiA2NGJpdCBwcmVmXQpbICAgIDAuNDc0OTU0XSBwY2lfYnVzIDAwMDA6MDQ6IHJlc291cmNlIDAg W2lvICAweGEwMDAtMHhhZmZmXQpbICAgIDAuNDc0OTU2XSBwY2lfYnVzIDAwMDA6MDQ6IHJlc291 cmNlIDEgW21lbSAweGRkODAwMDAwLTB4ZGUxZmZmZmZdClsgICAgMC40NzQ5NThdIHBjaV9idXMg MDAwMDowNDogcmVzb3VyY2UgMiBbbWVtIDB4ZDIxMDAwMDAtMHhkMmFmZmZmZiA2NGJpdCBwcmVm XQpbICAgIDAuNDc0OTkxXSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDIKWyAgICAw LjQ3NTE1MV0gVENQIGVzdGFibGlzaGVkIGhhc2ggdGFibGUgZW50cmllczogMzI3NjggKG9yZGVy OiA3LCA1MjQyODggYnl0ZXMpClsgICAgMC40NzUyOTBdIFRDUCBiaW5kIGhhc2ggdGFibGUgZW50 cmllczogMzI3NjggKG9yZGVyOiA3LCA1MjQyODggYnl0ZXMpClsgICAgMC40NzUzODhdIFRDUDog SGFzaCB0YWJsZXMgY29uZmlndXJlZCAoZXN0YWJsaXNoZWQgMzI3NjggYmluZCAzMjc2OCkKWyAg ICAwLjQ3NTQwOF0gVENQOiByZW5vIHJlZ2lzdGVyZWQKWyAgICAwLjQ3NTQxN10gVURQIGhhc2gg dGFibGUgZW50cmllczogMjA0OCAob3JkZXI6IDQsIDY1NTM2IGJ5dGVzKQpbICAgIDAuNDc1NDM1 XSBVRFAtTGl0ZSBoYXNoIHRhYmxlIGVudHJpZXM6IDIwNDggKG9yZGVyOiA0LCA2NTUzNiBieXRl cykKWyAgICAwLjQ3NTUwNV0gTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxClsgICAg MC40NzU1MThdIHBjaSAwMDAwOjAwOjAyLjA6IEJvb3QgdmlkZW8gZGV2aWNlClsgICAgMC43Mjcz MzBdIFBDSTogQ0xTIDY0IGJ5dGVzLCBkZWZhdWx0IDY0ClsgICAgMC43Mjc0MDJdIFRyeWluZyB0 byB1bnBhY2sgcm9vdGZzIGltYWdlIGFzIGluaXRyYW1mcy4uLgpbICAgIDUuODY0MDM2XSBGcmVl aW5nIGluaXRyZCBtZW1vcnk6IDIxNzMyayBmcmVlZApbICAgIDUuODY3MTkzXSBQQ0ktRE1BOiBV c2luZyBzb2Z0d2FyZSBib3VuY2UgYnVmZmVyaW5nIGZvciBJTyAoU1dJT1RMQikKWyAgICA1Ljg2 NzE5OV0gc29mdHdhcmUgSU8gVExCIFttZW0gMHhhNmQyMDAwMC0weGFhZDIwMDAwXSAoNjRNQikg bWFwcGVkIGF0IFtmZmZmODgwMGE2ZDIwMDAwLWZmZmY4ODAwYWFkMWZmZmZdClsgICAgNS44Njc2 NjRdIEluaXRpYWxpc2UgbW9kdWxlIHZlcmlmaWNhdGlvbgpbICAgIDUuODY3NzA3XSBhdWRpdDog aW5pdGlhbGl6aW5nIG5ldGxpbmsgc29ja2V0IChkaXNhYmxlZCkKWyAgICA1Ljg2NzcyM10gdHlw ZT0yMDAwIGF1ZGl0KDEzNjg3NDQxODEuODUyOjEpOiBpbml0aWFsaXplZApbICAgIDUuODk3MjUw XSBIdWdlVExCIHJlZ2lzdGVyZWQgMiBNQiBwYWdlIHNpemUsIHByZS1hbGxvY2F0ZWQgMCBwYWdl cwpbICAgIDUuODk4NTc0XSBWRlM6IERpc2sgcXVvdGFzIGRxdW90XzYuNS4yClsgICAgNS44OTg2 MTldIERxdW90LWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogNTEyIChvcmRlciAwLCA0MDk2IGJ5 dGVzKQpbICAgIDUuODk5MDYzXSBmdXNlIGluaXQgKEFQSSB2ZXJzaW9uIDcuMjApClsgICAgNS44 OTkxMzJdIG1zZ21uaSBoYXMgYmVlbiBzZXQgdG8gNzcyMwpbICAgIDUuODk5NjQ3XSBLZXkgdHlw ZSBhc3ltbWV0cmljIHJlZ2lzdGVyZWQKWyAgICA1Ljg5OTY0OV0gQXN5bW1ldHJpYyBrZXkgcGFy c2VyICd4NTA5JyByZWdpc3RlcmVkClsgICAgNS44OTk2ODddIEJsb2NrIGxheWVyIFNDU0kgZ2Vu ZXJpYyAoYnNnKSBkcml2ZXIgdmVyc2lvbiAwLjQgbG9hZGVkIChtYWpvciAyNTIpClsgICAgNS44 OTk3MThdIGlvIHNjaGVkdWxlciBub29wIHJlZ2lzdGVyZWQKWyAgICA1Ljg5OTcyMV0gaW8gc2No ZWR1bGVyIGRlYWRsaW5lIHJlZ2lzdGVyZWQgKGRlZmF1bHQpClsgICAgNS44OTk3MjhdIGlvIHNj aGVkdWxlciBjZnEgcmVnaXN0ZXJlZApbICAgIDUuODk5ODI1XSBwY2llcG9ydCAwMDAwOjAwOjAx LjA6IGlycSA0MCBmb3IgTVNJL01TSS1YClsgICAgNS44OTk5OTZdIHBjaV9ob3RwbHVnOiBQQ0kg SG90IFBsdWcgUENJIENvcmUgdmVyc2lvbjogMC41ClsgICAgNS45MDAwMDldIHBjaWVocDogUENJ IEV4cHJlc3MgSG90IFBsdWcgQ29udHJvbGxlciBEcml2ZXIgdmVyc2lvbjogMC40ClsgICAgNS45 MDAwNDVdIGludGVsX2lkbGU6IE1XQUlUIHN1YnN0YXRlczogMHgyMTEyMApbICAgIDUuOTAwMDQ2 XSBpbnRlbF9pZGxlOiB2MC40IG1vZGVsIDB4MkEKWyAgICA1LjkwMDA0OF0gaW50ZWxfaWRsZTog bGFwaWNfdGltZXJfcmVsaWFibGVfc3RhdGVzIDB4ZmZmZmZmZmYKWyAgICA1LjkwMDIyNF0gQUNQ STogQUMgQWRhcHRlciBbQUMwXSAob24tbGluZSkKWyAgICA1LjkwMDMxNF0gaW5wdXQ6IExpZCBT d2l0Y2ggYXMgL2RldmljZXMvTE5YU1lTVE06MDAvTE5YU1lCVVM6MDAvUE5QMEMwRDowMC9pbnB1 dC9pbnB1dDAKWyAgICA1LjkxNTcyN10gQUNQSTogTGlkIFN3aXRjaCBbTElEXQpbICAgIDUuOTE1 NzYyXSBpbnB1dDogU2xlZXAgQnV0dG9uIGFzIC9kZXZpY2VzL0xOWFNZU1RNOjAwL0xOWFNZQlVT OjAwL1BOUDBDMEU6MDAvaW5wdXQvaW5wdXQxClsgICAgNS45MTU3NjddIEFDUEk6IFNsZWVwIEJ1 dHRvbiBbU0xQQl0KWyAgICA1LjkxNTc5NV0gaW5wdXQ6IFBvd2VyIEJ1dHRvbiBhcyAvZGV2aWNl cy9MTlhTWVNUTTowMC9MTlhQV1JCTjowMC9pbnB1dC9pbnB1dDIKWyAgICA1LjkxNTc5N10gQUNQ STogUG93ZXIgQnV0dG9uIFtQV1JGXQpbICAgIDUuOTE1ODY0XSBBQ1BJOiBSZXF1ZXN0aW5nIGFj cGlfY3B1ZnJlcQpbICAgIDYuMDIxMDU0XSB0aGVybWFsIExOWFRIRVJNOjAwOiByZWdpc3RlcmVk IGFzIHRoZXJtYWxfem9uZTAKWyAgICA2LjAyMTA1N10gQUNQSTogVGhlcm1hbCBab25lIFtUSFJN XSAoNjAgQykKWyAgICA2LjAyMTA4M10gR0hFUzogSEVTVCBpcyBub3QgZW5hYmxlZCEKWyAgICA2 LjAyMTE1M10gU2VyaWFsOiA4MjUwLzE2NTUwIGRyaXZlciwgMzIgcG9ydHMsIElSUSBzaGFyaW5n IGVuYWJsZWQKWyAgICA2LjAyMjQ5Nl0gTGludXggYWdwZ2FydCBpbnRlcmZhY2UgdjAuMTAzClsg ICAgNi4wMjM3MjJdIGJyZDogbW9kdWxlIGxvYWRlZApbICAgIDYuMDI0MzQ1XSBsb29wOiBtb2R1 bGUgbG9hZGVkClsgICAgNi4wMjQ2MjFdIGxpYnBoeTogRml4ZWQgTURJTyBCdXM6IHByb2JlZApb ICAgIDYuMDI0NjcxXSB0dW46IFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIsIDEuNgpb ICAgIDYuMDI0NjcyXSB0dW46IChDKSAxOTk5LTIwMDQgTWF4IEtyYXNueWFuc2t5IDxtYXhrQHF1 YWxjb21tLmNvbT4KWyAgICA2LjAyNDcwN10gUFBQIGdlbmVyaWMgZHJpdmVyIHZlcnNpb24gMi40 LjIKWyAgICA2LjAyNDc1Ml0gZWhjaV9oY2Q6IFVTQiAyLjAgJ0VuaGFuY2VkJyBIb3N0IENvbnRy b2xsZXIgKEVIQ0kpIERyaXZlcgpbICAgIDYuMDI0NzUzXSBlaGNpLXBjaTogRUhDSSBQQ0kgcGxh dGZvcm0gZHJpdmVyClsgICAgNi4wMjQ3OTFdIGVoY2ktcGNpIDAwMDA6MDA6MWEuMDogc2V0dGlu ZyBsYXRlbmN5IHRpbWVyIHRvIDY0ClsgICAgNi4wMjQ3OTRdIGVoY2ktcGNpIDAwMDA6MDA6MWEu MDogRUhDSSBIb3N0IENvbnRyb2xsZXIKWyAgICA2LjAyNDgwMF0gZWhjaS1wY2kgMDAwMDowMDox YS4wOiBuZXcgVVNCIGJ1cyByZWdpc3RlcmVkLCBhc3NpZ25lZCBidXMgbnVtYmVyIDEKWyAgICA2 LjAyNDgxNV0gZWhjaS1wY2kgMDAwMDowMDoxYS4wOiBkZWJ1ZyBwb3J0IDIKWyAgICA2LjAyODcx Ml0gZWhjaS1wY2kgMDAwMDowMDoxYS4wOiBjYWNoZSBsaW5lIHNpemUgb2YgNjQgaXMgbm90IHN1 cHBvcnRlZApbICAgIDYuMDI4NzI4XSBlaGNpLXBjaSAwMDAwOjAwOjFhLjA6IGlycSAxNiwgaW8g bWVtIDB4ZGY2MDgwMDAKWyAgICA2LjAzMzc5Nl0gQUNQSTogQmF0dGVyeSBTbG90IFtCQVQwXSAo YmF0dGVyeSBwcmVzZW50KQpbICAgIDYuMDM5MzcxXSBlaGNpLXBjaSAwMDAwOjAwOjFhLjA6IFVT QiAyLjAgc3RhcnRlZCwgRUhDSSAxLjAwClsgICAgNi4wMzk0MjJdIHVzYiB1c2IxOiBOZXcgVVNC IGRldmljZSBmb3VuZCwgaWRWZW5kb3I9MWQ2YiwgaWRQcm9kdWN0PTAwMDIKWyAgICA2LjAzOTQy OF0gdXNiIHVzYjE6IE5ldyBVU0IgZGV2aWNlIHN0cmluZ3M6IE1mcj0zLCBQcm9kdWN0PTIsIFNl cmlhbE51bWJlcj0xClsgICAgNi4wMzk0MzNdIHVzYiB1c2IxOiBQcm9kdWN0OiBFSENJIEhvc3Qg Q29udHJvbGxlcgpbICAgIDYuMDM5NDM4XSB1c2IgdXNiMTogTWFudWZhY3R1cmVyOiBMaW51eCAz LjguMC0xOS1nZW5lcmljIGVoY2lfaGNkClsgICAgNi4wMzk0NDNdIHVzYiB1c2IxOiBTZXJpYWxO dW1iZXI6IDAwMDA6MDA6MWEuMApbICAgIDYuMDM5NTU4XSBodWIgMS0wOjEuMDogVVNCIGh1YiBm b3VuZApbICAgIDYuMDM5NTYyXSBodWIgMS0wOjEuMDogMiBwb3J0cyBkZXRlY3RlZApbICAgIDYu MDM5NjQ0XSBlaGNpLXBjaSAwMDAwOjAwOjFkLjA6IHNldHRpbmcgbGF0ZW5jeSB0aW1lciB0byA2 NApbICAgIDYuMDM5NjQ4XSBlaGNpLXBjaSAwMDAwOjAwOjFkLjA6IEVIQ0kgSG9zdCBDb250cm9s bGVyClsgICAgNi4wMzk2NTVdIGVoY2ktcGNpIDAwMDA6MDA6MWQuMDogbmV3IFVTQiBidXMgcmVn aXN0ZXJlZCwgYXNzaWduZWQgYnVzIG51bWJlciAyClsgICAgNi4wMzk2NjhdIGVoY2ktcGNpIDAw MDA6MDA6MWQuMDogZGVidWcgcG9ydCAyClsgICAgNi4wNDM1NDhdIGVoY2ktcGNpIDAwMDA6MDA6 MWQuMDogY2FjaGUgbGluZSBzaXplIG9mIDY0IGlzIG5vdCBzdXBwb3J0ZWQKWyAgICA2LjA0MzU2 Ml0gZWhjaS1wY2kgMDAwMDowMDoxZC4wOiBpcnEgMjMsIGlvIG1lbSAweGRmNjA3MDAwClsgICAg Ni4wNTUzNDFdIGVoY2ktcGNpIDAwMDA6MDA6MWQuMDogVVNCIDIuMCBzdGFydGVkLCBFSENJIDEu MDAKWyAgICA2LjA1NTM3M10gdXNiIHVzYjI6IE5ldyBVU0IgZGV2aWNlIGZvdW5kLCBpZFZlbmRv cj0xZDZiLCBpZFByb2R1Y3Q9MDAwMgpbICAgIDYuMDU1Mzc4XSB1c2IgdXNiMjogTmV3IFVTQiBk ZXZpY2Ugc3RyaW5nczogTWZyPTMsIFByb2R1Y3Q9MiwgU2VyaWFsTnVtYmVyPTEKWyAgICA2LjA1 NTM4M10gdXNiIHVzYjI6IFByb2R1Y3Q6IEVIQ0kgSG9zdCBDb250cm9sbGVyClsgICAgNi4wNTUz ODhdIHVzYiB1c2IyOiBNYW51ZmFjdHVyZXI6IExpbnV4IDMuOC4wLTE5LWdlbmVyaWMgZWhjaV9o Y2QKWyAgICA2LjA1NTM5M10gdXNiIHVzYjI6IFNlcmlhbE51bWJlcjogMDAwMDowMDoxZC4wClsg ICAgNi4wNTU1MDldIGh1YiAyLTA6MS4wOiBVU0IgaHViIGZvdW5kClsgICAgNi4wNTU1MTNdIGh1 YiAyLTA6MS4wOiAyIHBvcnRzIGRldGVjdGVkClsgICAgNi4wNTU1NzFdIGVoY2ktcGxhdGZvcm06 IEVIQ0kgZ2VuZXJpYyBwbGF0Zm9ybSBkcml2ZXIKWyAgICA2LjA1NTU3N10gb2hjaV9oY2Q6IFVT QiAxLjEgJ09wZW4nIEhvc3QgQ29udHJvbGxlciAoT0hDSSkgRHJpdmVyClsgICAgNi4wNTU1ODhd IHVoY2lfaGNkOiBVU0IgVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVy ClsgICAgNi4wNTU2NDFdIGk4MDQyOiBQTlA6IFBTLzIgQ29udHJvbGxlciBbUE5QMDMwMzpQUzJL LFBOUDBmMTM6UFMyTV0gYXQgMHg2MCwweDY0IGlycSAxLDEyClsgICAgNi4wNTczMDhdIGk4MDQy OiBEZXRlY3RlZCBhY3RpdmUgbXVsdGlwbGV4aW5nIGNvbnRyb2xsZXIsIHJldiAxLjEKWyAgICA2 LjA1ODA5MV0gc2VyaW86IGk4MDQyIEtCRCBwb3J0IGF0IDB4NjAsMHg2NCBpcnEgMQpbICAgIDYu MDU4MDk2XSBzZXJpbzogaTgwNDIgQVVYMCBwb3J0IGF0IDB4NjAsMHg2NCBpcnEgMTIKWyAgICA2 LjA1ODExNV0gc2VyaW86IGk4MDQyIEFVWDEgcG9ydCBhdCAweDYwLDB4NjQgaXJxIDEyClsgICAg Ni4wNTgxMzFdIHNlcmlvOiBpODA0MiBBVVgyIHBvcnQgYXQgMHg2MCwweDY0IGlycSAxMgpbICAg IDYuMDU4MTQ0XSBzZXJpbzogaTgwNDIgQVVYMyBwb3J0IGF0IDB4NjAsMHg2NCBpcnEgMTIKWyAg ICA2LjA1ODIyNF0gbW91c2VkZXY6IFBTLzIgbW91c2UgZGV2aWNlIGNvbW1vbiBmb3IgYWxsIG1p Y2UKWyAgICA2LjA1ODM1MV0gcnRjX2Ntb3MgMDA6MDU6IFJUQyBjYW4gd2FrZSBmcm9tIFM0Clsg ICAgNi4wNTg0NjldIHJ0Y19jbW9zIDAwOjA1OiBydGMgY29yZTogcmVnaXN0ZXJlZCBydGNfY21v cyBhcyBydGMwClsgICAgNi4wNTg0OTddIHJ0YzA6IGFsYXJtcyB1cCB0byBvbmUgeWVhciwgeTNr LCAyNDIgYnl0ZXMgbnZyYW0sIGhwZXQgaXJxcwpbICAgIDYuMDU4NTc1XSBkZXZpY2UtbWFwcGVy OiB1ZXZlbnQ6IHZlcnNpb24gMS4wLjMKWyAgICA2LjA1ODYyNV0gZGV2aWNlLW1hcHBlcjogaW9j dGw6IDQuMjMuMS1pb2N0bCAoMjAxMi0xMi0xOCkgaW5pdGlhbGlzZWQ6IGRtLWRldmVsQHJlZGhh dC5jb20KWyAgICA2LjA1ODY5NV0gY3B1aWRsZTogdXNpbmcgZ292ZXJub3IgbGFkZGVyClsgICAg Ni4wNTg3ODNdIGNwdWlkbGU6IHVzaW5nIGdvdmVybm9yIG1lbnUKWyAgICA2LjA1ODc5Ml0gbGVk dHJpZy1jcHU6IHJlZ2lzdGVyZWQgdG8gaW5kaWNhdGUgYWN0aXZpdHkgb24gQ1BVcwpbICAgIDYu MDU4NzkzXSBFRkkgVmFyaWFibGVzIEZhY2lsaXR5IHYwLjA4IDIwMDQtTWF5LTE3ClsgICAgNi4w NTg5NDZdIGFzaG1lbTogaW5pdGlhbGl6ZWQKWyAgICA2LjA1OTA1Nl0gVENQOiBjdWJpYyByZWdp c3RlcmVkClsgICAgNi4wNTkxNDNdIE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgMTAK WyAgICA2LjA1OTMxNV0gTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxNwpbICAgIDYu MDU5MzI3XSBLZXkgdHlwZSBkbnNfcmVzb2x2ZXIgcmVnaXN0ZXJlZApbICAgIDYuMDU5NTM1XSBM b2FkaW5nIG1vZHVsZSB2ZXJpZmljYXRpb24gY2VydGlmaWNhdGVzClsgICAgNi4wNjA1MzBdIE1P RFNJR046IExvYWRlZCBjZXJ0ICdNYWdyYXRoZWE6IEdsYWNpZXIgc2lnbmluZyBrZXk6IGQ0OTA3 NjNjYzQxOGUyOWRlNzlmNDBhNWFhN2Q5Nzc0N2VjODg4MmMnClsgICAgNi4wNjA1NDBdIHJlZ2lz dGVyZWQgdGFza3N0YXRzIHZlcnNpb24gMQpbICAgIDYuMDYyNzkyXSBLZXkgdHlwZSB0cnVzdGVk IHJlZ2lzdGVyZWQKWyAgICA2LjA2NDc5OV0gS2V5IHR5cGUgZW5jcnlwdGVkIHJlZ2lzdGVyZWQK WyAgICA2LjA2NzEyMV0gcnRjX2Ntb3MgMDA6MDU6IHNldHRpbmcgc3lzdGVtIGNsb2NrIHRvIDIw MTMtMDUtMTYgMjI6NDM6MDIgVVRDICgxMzY4NzQ0MTgyKQpbICAgIDYuMDY3ODk0XSBCSU9TIEVE RCBmYWNpbGl0eSB2MC4xNiAyMDA0LUp1bi0yNSwgMCBkZXZpY2VzIGZvdW5kClsgICAgNi4wNjc4 OTddIEVERCBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlLgpbICAgIDYuMDY5NTk0XSBGcmVlaW5n IHVudXNlZCBrZXJuZWwgbWVtb3J5OiA5OTJrIGZyZWVkClsgICAgNi4wNjk3MTZdIFdyaXRlIHBy b3RlY3RpbmcgdGhlIGtlcm5lbCByZWFkLW9ubHkgZGF0YTogMTIyODhrClsgICAgNi4wNzMyMTld IEZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6IDExNzZrIGZyZWVkClsgICAgNi4wNzYzNzdd IEZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6IDEwODBrIGZyZWVkClsgICAgNi4wODk2MTJd IHVkZXZkWzExMV06IHN0YXJ0aW5nIHZlcnNpb24gMTc1ClsgICAgNi4xMDMzNTJdIGlucHV0OiBB VCBUcmFuc2xhdGVkIFNldCAyIGtleWJvYXJkIGFzIC9kZXZpY2VzL3BsYXRmb3JtL2k4MDQyL3Nl cmlvMC9pbnB1dC9pbnB1dDMKWyAgICA2LjEzNTk4MV0gRGlzYWJsaW5nIGxvY2sgZGVidWdnaW5n IGR1ZSB0byBrZXJuZWwgdGFpbnQKWyAgICA2LjEzOTg0MV0gYWhjaSAwMDAwOjAwOjFmLjI6IHZl cnNpb24gMy4wClsgICAgNi4xMzk5MzZdIGFoY2kgMDAwMDowMDoxZi4yOiBpcnEgNDEgZm9yIE1T SS9NU0ktWApbICAgIDYuMTQ0ODU1XSBbZHJtXSBJbml0aWFsaXplZCBkcm0gMS4xLjAgMjAwNjA4 MTAKWyAgICA2LjE0NTIyM10gd21pOiBNYXBwZXIgbG9hZGVkClsgICAgNi4xNTUyMzhdIGFoY2kg MDAwMDowMDoxZi4yOiBBSENJIDAwMDEuMDMwMCAzMiBzbG90cyA2IHBvcnRzIDYgR2JwcyAweDUg aW1wbCBTQVRBIG1vZGUKWyAgICA2LjE1NTI0NV0gYWhjaSAwMDAwOjAwOjFmLjI6IGZsYWdzOiA2 NGJpdCBuY3Egc250ZiBwbSBsZWQgY2xvIHBpbyBzbHVtIHBhcnQgZW1zIGFwc3QgClsgICAgNi4x NTUyNTNdIGFoY2kgMDAwMDowMDoxZi4yOiBzZXR0aW5nIGxhdGVuY3kgdGltZXIgdG8gNjQKWyAg ICA2LjE2NDA0M10gc2NzaTAgOiBhaGNpClsgICAgNi4xNjQxNDVdIHNjc2kxIDogYWhjaQpbICAg IDYuMTY0MjE4XSBzY3NpMiA6IGFoY2kKWyAgICA2LjE2NDI4Nl0gc2NzaTMgOiBhaGNpClsgICAg Ni4xNjQzNTZdIHNjc2k0IDogYWhjaQpbICAgIDYuMTY0NDI0XSBzY3NpNSA6IGFoY2kKWyAgICA2 LjE2NDQ3NF0gYXRhMTogU0FUQSBtYXggVURNQS8xMzMgYWJhciBtMjA0OEAweGRmNjA2MDAwIHBv cnQgMHhkZjYwNjEwMCBpcnEgNDEKWyAgICA2LjE2NDQ3N10gYXRhMjogRFVNTVkKWyAgICA2LjE2 NDQ4MV0gYXRhMzogU0FUQSBtYXggVURNQS8xMzMgYWJhciBtMjA0OEAweGRmNjA2MDAwIHBvcnQg MHhkZjYwNjIwMCBpcnEgNDEKWyAgICA2LjE2NDQ4M10gYXRhNDogRFVNTVkKWyAgICA2LjE2NDQ4 NV0gYXRhNTogRFVNTVkKWyAgICA2LjE2NDQ4N10gYXRhNjogRFVNTVkKWyAgICA2LjE3NjM4NF0g YXRsMWMgMDAwMDowNDowMC4wOiB2ZXJzaW9uIDEuMC4xLjEtTkFQSQpbICAgIDYuMTgwNTA2XSBN WE06IEdVSUQgZGV0ZWN0ZWQgaW4gQklPUwpbICAgIDYuMTgwNTUwXSBBQ1BJIEVycm9yOiBOZWVk ZWQgW0J1ZmZlci9TdHJpbmcvUGFja2FnZV0sIGZvdW5kIFtJbnRlZ2VyXSBmZmZmODgwMTQxY2Qw MDkwICgyMDEyMTAxOC9leHJlc29wLTU5MCkKWyAgICA2LjE4MDU1NV0gQUNQSSBFeGNlcHRpb246 IEFFX0FNTF9PUEVSQU5EX1RZUEUsIFdoaWxlIHJlc29sdmluZyBvcGVyYW5kcyBmb3IgW09wY29k ZU5hbWUgdW5hdmFpbGFibGVdICgyMDEyMTAxOC9kc3dleGVjLTQ2MCkKWyAgICA2LjE4MDU2MF0g QUNQSSBFcnJvcjogTWV0aG9kIHBhcnNlL2V4ZWN1dGlvbiBmYWlsZWQgW1xfU0JfLlBDSTAuR0ZY MC5fRFNNXSAoTm9kZSBmZmZmODgwMTQ5YTRhYmI4KSwgQUVfQU1MX09QRVJBTkRfVFlQRSAoMjAx MjEwMTgvcHNwYXJzZS01MzcpClsgICAgNi4xODA1NzFdIGZhaWxlZCB0byBldmFsdWF0ZSBfRFNN OiAxMjI5MQpbICAgIDYuMTgwNjU5XSBBQ1BJIEVycm9yOiBOZWVkZWQgW0J1ZmZlci9TdHJpbmcv UGFja2FnZV0sIGZvdW5kIFtJbnRlZ2VyXSBmZmZmODgwMTQxY2QwMDkwICgyMDEyMTAxOC9leHJl c29wLTU5MCkKWyAgICA2LjE4MDY2Ml0gQUNQSSBFeGNlcHRpb246IEFFX0FNTF9PUEVSQU5EX1RZ UEUsIFdoaWxlIHJlc29sdmluZyBvcGVyYW5kcyBmb3IgW09wY29kZU5hbWUgdW5hdmFpbGFibGVd ICgyMDEyMTAxOC9kc3dleGVjLTQ2MCkKWyAgICA2LjE4MDY2Nl0gQUNQSSBFcnJvcjogTWV0aG9k IHBhcnNlL2V4ZWN1dGlvbiBmYWlsZWQgW1xfU0JfLlBDSTAuR0ZYMC5fRFNNXSAoTm9kZSBmZmZm ODgwMTQ5YTRhYmI4KSwgQUVfQU1MX09QRVJBTkRfVFlQRSAoMjAxMjEwMTgvcHNwYXJzZS01Mzcp ClsgICAgNi4xODA2NzJdIEFDUEkgRXJyb3I6IE1ldGhvZCBwYXJzZS9leGVjdXRpb24gZmFpbGVk IFtcX1NCXy5QQ0kwLlBFRzAuR0ZYMC5fRFNNXSAoTm9kZSBmZmZmODgwMTQ5YTc3MjMwKSwgQUVf QU1MX09QRVJBTkRfVFlQRSAoMjAxMjEwMTgvcHNwYXJzZS01MzcpClsgICAgNi4xODA2NzhdIGZh aWxlZCB0byBldmFsdWF0ZSBfRFNNOiAxMjI5MQpbICAgIDYuMTgwNzQyXSBWR0Egc3dpdGNoZXJv bzogZGV0ZWN0ZWQgT3B0aW11cyBEU00gbWV0aG9kIFxfU0JfLlBDSTAuUEVHMC5HRlgwIGhhbmRs ZQpbICAgIDYuMTgwNzY2XSBub3V2ZWF1IDAwMDA6MDE6MDAuMDogZW5hYmxpbmcgZGV2aWNlICgw MDA0IC0+IDAwMDcpClsgICAgNi4xODExOTRdIG5vdXZlYXUgIFsgIERFVklDRV1bMDAwMDowMTow MC4wXSBCT09UMCAgOiAweDBjMWEwMGExClsgICAgNi4xODExOTddIG5vdXZlYXUgIFsgIERFVklD RV1bMDAwMDowMTowMC4wXSBDaGlwc2V0OiBHRjEwOCAoTlZDMSkKWyAgICA2LjE4MTE5OV0gbm91 dmVhdSAgWyAgREVWSUNFXVswMDAwOjAxOjAwLjBdIEZhbWlseSA6IE5WQzAKWyAgICA2LjE4NDQz MV0gbm91dmVhdSAgWyAgIFZCSU9TXVswMDAwOjAxOjAwLjBdIGNoZWNraW5nIFBSQU1JTiBmb3Ig aW1hZ2UuLi4KWyAgICA2LjE5NDE0OV0gbm91dmVhdSAgWyAgIFZCSU9TXVswMDAwOjAxOjAwLjBd IC4uLiBzaWduYXR1cmUgbm90IGZvdW5kClsgICAgNi4xOTQxNTJdIG5vdXZlYXUgIFsgICBWQklP U11bMDAwMDowMTowMC4wXSBjaGVja2luZyBQUk9NIGZvciBpbWFnZS4uLgpbICAgIDYuMTk0MjI0 XSBub3V2ZWF1ICBbICAgVkJJT1NdWzAwMDA6MDE6MDAuMF0gLi4uIHNpZ25hdHVyZSBub3QgZm91 bmQKWyAgICA2LjE5NDIyOF0gbm91dmVhdSAgWyAgIFZCSU9TXVswMDAwOjAxOjAwLjBdIGNoZWNr aW5nIEFDUEkgZm9yIGltYWdlLi4uClsgICAgNi4zMjAyMzNdIG5vdXZlYXUgIFsgICBWQklPU11b MDAwMDowMTowMC4wXSAuLi4gYXBwZWFycyB0byBiZSB2YWxpZApbICAgIDYuMzIwMjM3XSBub3V2 ZWF1ICBbICAgVkJJT1NdWzAwMDA6MDE6MDAuMF0gdXNpbmcgaW1hZ2UgZnJvbSBBQ1BJClsgICAg Ni4zMjAzNjddIG5vdXZlYXUgIFsgICBWQklPU11bMDAwMDowMTowMC4wXSBCSVQgc2lnbmF0dXJl IGZvdW5kClsgICAgNi4zMjAzNzFdIG5vdXZlYXUgIFsgICBWQklPU11bMDAwMDowMTowMC4wXSB2 ZXJzaW9uIDcwLjA4LjRjLjAwLmE1ClsgICAgNi4zMjA2MDFdIG5vdXZlYXUgIFsgREVWSU5JVF1b MDAwMDowMTowMC4wXSBhZGFwdG9yIG5vdCBpbml0aWFsaXNlZApbICAgIDYuMzIwNjAzXSBub3V2 ZWF1ICBbICAgVkJJT1NdWzAwMDA6MDE6MDAuMF0gcnVubmluZyBpbml0IHRhYmxlcwpbICAgIDYu MzUwOTE2XSB1c2IgMS0xOiBuZXcgaGlnaC1zcGVlZCBVU0IgZGV2aWNlIG51bWJlciAyIHVzaW5n IGVoY2ktcGNpClsgICAgNi40MzQ4NzNdIG5vdXZlYXUgIFsgICAgIFBGQl1bMDAwMDowMTowMC4w XSBSQU0gdHlwZTogRERSMwpbICAgIDYuNDM0ODc1XSBub3V2ZWF1ICBbICAgICBQRkJdWzAwMDA6 MDE6MDAuMF0gUkFNIHNpemU6IDUxMiBNaUIKWyAgICA2LjQzNDg3N10gbm91dmVhdSAgWyAgICAg UEZCXVswMDAwOjAxOjAwLjBdICAgIFpDT01QOiAwIHRhZ3MKWyAgICA2LjQ2NzIzNl0gW1RUTV0g Wm9uZSAga2VybmVsOiBBdmFpbGFibGUgZ3JhcGhpY3MgbWVtb3J5OiAxOTc4ODkyIGtpQgpbICAg IDYuNDY3MjM5XSBbVFRNXSBJbml0aWFsaXppbmcgcG9vbCBhbGxvY2F0b3IKWyAgICA2LjQ2NzI0 M10gW1RUTV0gSW5pdGlhbGl6aW5nIERNQSBwb29sIGFsbG9jYXRvcgpbICAgIDYuNDY5NjQ2XSBu b3V2ZWF1ICBbICAgICBEUk1dIFZSQU06IDUxMiBNaUIKWyAgICA2LjQ2OTY1MF0gbm91dmVhdSAg WyAgICAgRFJNXSBHQVJUOiA1MTIgTWlCClsgICAgNi40Njk2NTRdIG5vdXZlYXUgIFsgICAgIERS TV0gQklUIEJJT1MgZm91bmQKWyAgICA2LjQ2OTY1N10gbm91dmVhdSAgWyAgICAgRFJNXSBCaW9z IHZlcnNpb24gNzAuMDguNGMuMDAKWyAgICA2LjQ2OTY2MF0gbm91dmVhdSAgWyAgICAgRFJNXSBU TURTIHRhYmxlIHZlcnNpb24gMi4wClsgICAgNi40Njk2NjJdIG5vdXZlYXUgIFsgICAgIERSTV0g RENCIHZlcnNpb24gNC4wClsgICAgNi40Njk2NjRdIG5vdXZlYXUgIFsgICAgIERSTV0gRENCIG91 dHAgMDA6IDAyMDEwMzAwIDAwMDAwMDAwClsgICAgNi40Njk2NjZdIG5vdXZlYXUgIFsgICAgIERS TV0gRENCIGNvbm4gMDA6IDAwMDAwMDAwClsgICAgNi40NzA1MjddIFtkcm1dIFN1cHBvcnRzIHZi bGFuayB0aW1lc3RhbXAgY2FjaGluZyBSZXYgMSAoMTAuMTAuMjAxMCkuClsgICAgNi40NzA1Mjhd IFtkcm1dIE5vIGRyaXZlciBzdXBwb3J0IGZvciB2YmxhbmsgdGltZXN0YW1wIHF1ZXJ5LgpbICAg IDYuNDcwNjUxXSBub3V2ZWF1ICBbICAgICBEUk1dIEFDUEkgYmFja2xpZ2h0IGludGVyZmFjZSBh dmFpbGFibGUsIG5vdCByZWdpc3RlcmluZyBvdXIgb3duClsgICAgNi40NzA4ODZdIG5vdXZlYXUg IFsgICAgIERSTV0gMyBhdmFpbGFibGUgcGVyZm9ybWFuY2UgbGV2ZWwocykKWyAgICA2LjQ3MDg5 MF0gbm91dmVhdSAgWyAgICAgRFJNXSAwOiBjb3JlIDUwTUh6IHNoYWRlciAxMDFNSHogbWVtb3J5 IDEzNU1IeiB2b2x0YWdlIDgzMG1WClsgICAgNi40NzA4OTNdIG5vdXZlYXUgIFsgICAgIERSTV0g MTogY29yZSAyMDJNSHogc2hhZGVyIDQwNU1IeiBtZW1vcnkgMzI0TUh6IHZvbHRhZ2UgODMwbVYK WyAgICA2LjQ3MDg5NV0gbm91dmVhdSAgWyAgICAgRFJNXSAzOiBjb3JlIDY3Mk1IeiBzaGFkZXIg MTM0NE1IeiBtZW1vcnkgOTAwTUh6IHZvbHRhZ2UgOTgwbVYKWyAgICA2LjQ3MDg5OF0gbm91dmVh dSAgWyAgICAgRFJNXSBjOiBjb3JlIDIwMk1IeiBzaGFkZXIgNDA1TUh6IG1lbW9yeSAzMjRNSHog dm9sdGFnZSAxMDAwbVYKWyAgICA2LjQ3NjUzN10gbm91dmVhdSAgWyAgICAgRFJNXSBNTTogdXNp bmcgQ09QWTEgZm9yIGJ1ZmZlciBjb3BpZXMKWyAgICA2LjQ3NzU5NF0gbm91dmVhdSAwMDAwOjAx OjAwLjA6IE5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQgY29ubmVjdGVkIHdpdGggbW9kZXMKWyAgICA2 LjQ3NzU5Nl0gW2RybV0gQ2Fubm90IGZpbmQgYW55IGNydGMgb3Igc2l6ZXMgLSBnb2luZyAxMDI0 eDc2OApbICAgIDYuNDgyNzEwXSBhdGEzOiBTQVRBIGxpbmsgdXAgMS41IEdicHMgKFNTdGF0dXMg MTEzIFNDb250cm9sIDMwMCkKWyAgICA2LjQ4MzEyM10gdXNiIDEtMTogTmV3IFVTQiBkZXZpY2Ug Zm91bmQsIGlkVmVuZG9yPTgwODcsIGlkUHJvZHVjdD0wMDI0ClsgICAgNi40ODMxMjZdIHVzYiAx LTE6IE5ldyBVU0IgZGV2aWNlIHN0cmluZ3M6IE1mcj0wLCBQcm9kdWN0PTAsIFNlcmlhbE51bWJl cj0wClsgICAgNi40ODMzODZdIGh1YiAxLTE6MS4wOiBVU0IgaHViIGZvdW5kClsgICAgNi40ODM0 NjhdIGh1YiAxLTE6MS4wOiA2IHBvcnRzIGRldGVjdGVkClsgICAgNi40ODQxMjBdIGF0YTMuMDA6 IEFDUEkgY21kIGVmLzEwOjA2OjAwOjAwOjAwOmEwIChTRVQgRkVBVFVSRVMpIHN1Y2NlZWRlZApb ICAgIDYuNDg0MTIzXSBhdGEzLjAwOiBBQ1BJIGNtZCBlZi8xMDowMzowMDowMDowMDphMCAoU0VU IEZFQVRVUkVTKSBmaWx0ZXJlZCBvdXQKWyAgICA2LjQ4NDUxOV0gYXRhMy4wMDogQVRBUEk6IFNs aW10eXBlRFZEIEEgIERTOEE1U0gsIFhBQTIsIG1heCBVRE1BLzEwMApbICAgIDYuNDg2OTE2XSBh dGEzLjAwOiBBQ1BJIGNtZCBlZi8xMDowNjowMDowMDowMDphMCAoU0VUIEZFQVRVUkVTKSBzdWNj ZWVkZWQKWyAgICA2LjQ4NjkxOV0gYXRhMy4wMDogQUNQSSBjbWQgZWYvMTA6MDM6MDA6MDA6MDA6 YTAgKFNFVCBGRUFUVVJFUykgZmlsdGVyZWQgb3V0ClsgICAgNi40ODczMTNdIGF0YTMuMDA6IGNv bmZpZ3VyZWQgZm9yIFVETUEvMTAwClsgICAgNi40OTA3MjFdIGF0YTE6IFNBVEEgbGluayB1cCAz LjAgR2JwcyAoU1N0YXR1cyAxMjMgU0NvbnRyb2wgMzAwKQpbICAgIDYuNTAyMjI3XSBhdGExLjAw OiBBQ1BJIGNtZCBmNS8wMDowMDowMDowMDowMDphMCAoU0VDVVJJVFkgRlJFRVpFIExPQ0spIGZp bHRlcmVkIG91dApbICAgIDYuNTExNzk2XSBhdGExLjAwOiBBQ1BJIGNtZCBlZi8xMDowNjowMDow MDowMDphMCAoU0VUIEZFQVRVUkVTKSBzdWNjZWVkZWQKWyAgICA2LjUxMTgwMF0gYXRhMS4wMDog QUNQSSBjbWQgZWYvMTA6MDM6MDA6MDA6MDA6YTAgKFNFVCBGRUFUVVJFUykgZmlsdGVyZWQgb3V0 ClsgICAgNi41MTQyMzZdIG5vdXZlYXUgIFsgICAgIERSTV0gYWxsb2NhdGVkIDEwMjR4NzY4IGZi OiAweDYwMDAwLCBibyBmZmZmODgwMTQ4ZGRiNDAwClsgICAgNi41MTY5MzZdIENvbnNvbGU6IHN3 aXRjaGluZyB0byBjb2xvdXIgZnJhbWUgYnVmZmVyIGRldmljZSAxMjh4NDgKWyAgICA2LjUxODg5 MV0gbm91dmVhdSAwMDAwOjAxOjAwLjA6IGZiMDogbm91dmVhdWZiIGZyYW1lIGJ1ZmZlciBkZXZp Y2UKWyAgICA2LjUxODg5M10gbm91dmVhdSAwMDAwOjAxOjAwLjA6IHJlZ2lzdGVyZWQgcGFuaWMg bm90aWZpZXIKWyAgICA2LjUxODg5OF0gW2RybV0gSW5pdGlhbGl6ZWQgbm91dmVhdSAxLjEuMCAy MDEyMDgwMSBmb3IgMDAwMDowMTowMC4wIG9uIG1pbm9yIDAKWyAgICA2LjUxOTgxOV0gW2RybV0g TWVtb3J5IHVzYWJsZSBieSBncmFwaGljcyBkZXZpY2UgPSAyMDQ4TQpbICAgIDYuNTE5ODI4XSBp OTE1IDAwMDA6MDA6MDIuMDogc2V0dGluZyBsYXRlbmN5IHRpbWVyIHRvIDY0ClsgICAgNi41NzAw NDZdIGk5MTUgMDAwMDowMDowMi4wOiBpcnEgNDIgZm9yIE1TSS9NU0ktWApbICAgIDYuNTcwMDU2 XSBbZHJtXSBTdXBwb3J0cyB2YmxhbmsgdGltZXN0YW1wIGNhY2hpbmcgUmV2IDEgKDEwLjEwLjIw MTApLgpbICAgIDYuNTcwMDU3XSBbZHJtXSBEcml2ZXIgc3VwcG9ydHMgcHJlY2lzZSB2Ymxhbmsg dGltZXN0YW1wIHF1ZXJ5LgpbICAgIDYuNTcwMjM5XSB2Z2Ffc3dpdGNoZXJvbzogZW5hYmxlZApb ICAgIDYuNTcwMjY2XSB2Z2FhcmI6IGRldmljZSBjaGFuZ2VkIGRlY29kZXM6IFBDSTowMDAwOjAx OjAwLjAsb2xkZGVjb2Rlcz1pbyttZW0sZGVjb2Rlcz1ub25lOm93bnM9bm9uZQpbICAgIDYuNTcw MjY5XSB2Z2FhcmI6IGRldmljZSBjaGFuZ2VkIGRlY29kZXM6IFBDSTowMDAwOjAwOjAyLjAsb2xk ZGVjb2Rlcz1pbyttZW0sZGVjb2Rlcz1ub25lOm93bnM9aW8rbWVtClsgICAgNi41OTQ2MzFdIHVz YiAyLTE6IG5ldyBoaWdoLXNwZWVkIFVTQiBkZXZpY2UgbnVtYmVyIDIgdXNpbmcgZWhjaS1wY2kK WyAgICA2LjcyNjc2NV0gdXNiIDItMTogTmV3IFVTQiBkZXZpY2UgZm91bmQsIGlkVmVuZG9yPTgw ODcsIGlkUHJvZHVjdD0wMDI0ClsgICAgNi43MjY3NzBdIHVzYiAyLTE6IE5ldyBVU0IgZGV2aWNl IHN0cmluZ3M6IE1mcj0wLCBQcm9kdWN0PTAsIFNlcmlhbE51bWJlcj0wClsgICAgNi43MjcwMzdd IGh1YiAyLTE6MS4wOiBVU0IgaHViIGZvdW5kClsgICAgNi43MjcxMDVdIGh1YiAyLTE6MS4wOiA2 IHBvcnRzIGRldGVjdGVkClsgICAgNi43OTIwODldIGZiY29uOiBpbnRlbGRybWZiIChmYjEpIGlz IHByaW1hcnkgZGV2aWNlClsgICAgNi43OTIwOTBdIGZiY29uOiBSZW1hcHBpbmcgcHJpbWFyeSBk ZXZpY2UsIGZiMSwgdG8gdHR5IDEtNjMKWyAgICA2Ljc5ODQwMV0gdXNiIDEtMS4yOiBuZXcgaGln aC1zcGVlZCBVU0IgZGV2aWNlIG51bWJlciAzIHVzaW5nIGVoY2ktcGNpClsgICAgNi44MTgzNjld IGF0YTEuMDA6IEFUQS04OiBTVDk3NTA0MjNBUywgMDAwMVNETTEsIG1heCBVRE1BLzEzMwpbICAg IDYuODE4MzczXSBhdGExLjAwOiAxNDY1MTQ5MTY4IHNlY3RvcnMsIG11bHRpIDE2OiBMQkE0OCBO Q1EgKGRlcHRoIDMxLzMyKQpbICAgIDYuODE5NTcyXSBhdGExLjAwOiBBQ1BJIGNtZCBmNS8wMDow MDowMDowMDowMDphMCAoU0VDVVJJVFkgRlJFRVpFIExPQ0spIGZpbHRlcmVkIG91dApbICAgIDYu ODE5ODI0XSBhdGExLjAwOiBBQ1BJIGNtZCBlZi8xMDowNjowMDowMDowMDphMCAoU0VUIEZFQVRV UkVTKSBzdWNjZWVkZWQKWyAgICA2LjgxOTgyOV0gYXRhMS4wMDogQUNQSSBjbWQgZWYvMTA6MDM6 MDA6MDA6MDA6YTAgKFNFVCBGRUFUVVJFUykgZmlsdGVyZWQgb3V0ClsgICAgNi44MjA2NzldIGF0 YTEuMDA6IGNvbmZpZ3VyZWQgZm9yIFVETUEvMTMzClsgICAgNi44MjA5OTNdIHNjc2kgMDowOjA6 MDogRGlyZWN0LUFjY2VzcyAgICAgQVRBICAgICAgU1Q5NzUwNDIzQVMgICAgICAwMDAxIFBROiAw IEFOU0k6IDUKWyAgICA2LjgyMTE1Nl0gc2QgMDowOjA6MDogW3NkYV0gMTQ2NTE0OTE2OCA1MTIt Ynl0ZSBsb2dpY2FsIGJsb2NrczogKDc1MCBHQi82OTggR2lCKQpbICAgIDYuODIxMTU4XSBzZCAw OjA6MDowOiBbc2RhXSA0MDk2LWJ5dGUgcGh5c2ljYWwgYmxvY2tzClsgICAgNi44MjExNjJdIHNk IDA6MDowOjA6IEF0dGFjaGVkIHNjc2kgZ2VuZXJpYyBzZzAgdHlwZSAwClsgICAgNi44MjEyODJd IHNkIDA6MDowOjA6IFtzZGFdIFdyaXRlIFByb3RlY3QgaXMgb2ZmClsgICAgNi44MjEyODRdIHNk IDA6MDowOjA6IFtzZGFdIE1vZGUgU2Vuc2U6IDAwIDNhIDAwIDAwClsgICAgNi44MjEzMjJdIHNk IDA6MDowOjA6IFtzZGFdIFdyaXRlIGNhY2hlOiBlbmFibGVkLCByZWFkIGNhY2hlOiBlbmFibGVk LCBkb2Vzbid0IHN1cHBvcnQgRFBPIG9yIEZVQQpbICAgIDYuODIzODYwXSBzY3NpIDI6MDowOjA6 IENELVJPTSAgICAgICAgICAgIFNsaW10eXBlIERWRCBBICBEUzhBNVNIICAgWEFBMiBQUTogMCBB TlNJOiA1ClsgICAgNi44MzAyODddIHNyMDogc2NzaTMtbW1jIGRyaXZlOiAzMXgvNjJ4IHdyaXRl ciBkdmQtcmFtIGNkL3J3IHhhL2Zvcm0yIGNkZGEgdHJheQpbICAgIDYuODMwMjkwXSBjZHJvbTog VW5pZm9ybSBDRC1ST00gZHJpdmVyIFJldmlzaW9uOiAzLjIwClsgICAgNi44MzA1MDVdIHNyIDI6 MDowOjA6IEF0dGFjaGVkIHNjc2kgQ0QtUk9NIHNyMApbICAgIDYuODMwNjAwXSBzciAyOjA6MDow OiBBdHRhY2hlZCBzY3NpIGdlbmVyaWMgc2cxIHR5cGUgNQpbICAgIDYuODUyMzgwXSAgc2RhOiBz ZGExIHNkYTIgc2RhMwpbICAgIDYuODUyOTYzXSBzZCAwOjA6MDowOiBbc2RhXSBBdHRhY2hlZCBT Q1NJIGRpc2sKWyAgICA2Ljg2MjE3M10gdHNjOiBSZWZpbmVkIFRTQyBjbG9ja3NvdXJjZSBjYWxp YnJhdGlvbjogMjA5NS4yNDAgTUh6ClsgICAgNi44NjIxODFdIFN3aXRjaGluZyB0byBjbG9ja3Nv dXJjZSB0c2MKWyAgICA3LjAyMjA0OF0gdXNiIDEtMS4yOiBOZXcgVVNCIGRldmljZSBmb3VuZCwg aWRWZW5kb3I9MDU4ZiwgaWRQcm9kdWN0PWEwMTQKWyAgICA3LjAyMjA1MF0gdXNiIDEtMS4yOiBO ZXcgVVNCIGRldmljZSBzdHJpbmdzOiBNZnI9MywgUHJvZHVjdD0xLCBTZXJpYWxOdW1iZXI9MApb ICAgIDcuMDIyMDUyXSB1c2IgMS0xLjI6IFByb2R1Y3Q6IEFTVVMgVVNCMi4wIFdlYkNhbQpbICAg IDcuMDIyMDUzXSB1c2IgMS0xLjI6IE1hbnVmYWN0dXJlcjogMDRHNjIwMDA4NksxQU4xQTQwMDA4 TTAKWyAgICA3LjczNTUwN10gaTkxNSAwMDAwOjAwOjAyLjA6IGZiMTogaW50ZWxkcm1mYiBmcmFt ZSBidWZmZXIgZGV2aWNlClsgICAgNy43MzY0NjJdIEFDUEkgV2FybmluZzogX0JRQyByZXR1cm5l ZCBhbiBpbnZhbGlkIGxldmVsICgyMDEyMTAxOC92aWRlby00OTQpClsgICAgNy43MzY3NjVdIGFj cGkgZGV2aWNlOjAzOiByZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlNApbICAgIDcuNzM2Nzg3 XSBBQ1BJOiBWaWRlbyBEZXZpY2UgW0dGWDBdIChtdWx0aS1oZWFkOiB5ZXMgIHJvbTogeWVzICBw b3N0OiBubykKWyAgICA3LjczNjgzMF0gaW5wdXQ6IFZpZGVvIEJ1cyBhcyAvZGV2aWNlcy9MTlhT WVNUTTowMC9MTlhTWUJVUzowMC9QTlAwQTA4OjAwL2RldmljZTowMC9MTlhWSURFTzowMC9pbnB1 dC9pbnB1dDQKWyAgICA3Ljc0MjAzMl0gQUNQSSBXYXJuaW5nOiBfQlFDIHJldHVybmVkIGFuIGlu dmFsaWQgbGV2ZWwgKDIwMTIxMDE4L3ZpZGVvLTQ5NCkKWyAgICA3Ljc0MjMyN10gYWNwaSBkZXZp Y2U6NDQ6IHJlZ2lzdGVyZWQgYXMgY29vbGluZ19kZXZpY2U1ClsgICAgNy43NDI3MDZdIEFDUEk6 IFZpZGVvIERldmljZSBbR0ZYMF0gKG11bHRpLWhlYWQ6IHllcyAgcm9tOiBubyAgcG9zdDogbm8p ClsgICAgNy43NDI3NDddIGlucHV0OiBWaWRlbyBCdXMgYXMgL2RldmljZXMvTE5YU1lTVE06MDAv TE5YU1lCVVM6MDAvUE5QMEEwODowMC9MTlhWSURFTzowMS9pbnB1dC9pbnB1dDUKWyAgICA3Ljc0 MjgxN10gW2RybV0gSW5pdGlhbGl6ZWQgaTkxNSAxLjYuMCAyMDA4MDczMCBmb3IgMDAwMDowMDow Mi4wIG9uIG1pbm9yIDEKWyAgICA3Ljc5MzAwMF0gW2RybV0gRW5hYmxpbmcgUkM2IHN0YXRlczog UkM2IG9uLCBSQzZwIG9mZiwgUkM2cHAgb2ZmClsgICAgOC4wMTE5OTBdIHhvcjogYXV0b21hdGlj YWxseSB1c2luZyBiZXN0IGNoZWNrc3VtbWluZyBmdW5jdGlvbjoKWyAgICA4LjA0ODM0N10gICAg YXZ4ICAgICAgIDogMTU3NzUuMDAwIE1CL3NlYwpbICAgIDguMDUwNjI1XSBkZXZpY2UtbWFwcGVy OiBkbS1yYWlkNDU6IGluaXRpYWxpemVkIHYwLjI1OTRiClsgICAgOS40MDM5OTldIElTTyA5NjYw IEV4dGVuc2lvbnM6IE1pY3Jvc29mdCBKb2xpZXQgTGV2ZWwgMwpbICAgIDkuNDA5MjE2XSBJU08g OTY2MCBFeHRlbnNpb25zOiBSUklQXzE5OTFBClsgICAgOS42NzYzNDVdIHNxdWFzaGZzOiB2ZXJz aW9uIDQuMCAoMjAwOS8wMS8zMSkgUGhpbGxpcCBMb3VnaGVyClsgICA0OS4zNjY0MjZdIElQdjY6 IEFERFJDT05GKE5FVERFVl9VUCk6IGV0aDA6IGxpbmsgaXMgbm90IHJlYWR5ClsgICA0OS43OTgz MzFdIHVkZXZkWzEyODNdOiBzdGFydGluZyB2ZXJzaW9uIDE3NQpbICAgNTMuOTg0Njc3XSBpbml0 OiBhdmFoaS1jdXBzLXJlbG9hZCBtYWluIHByb2Nlc3MgKDE1MTkpIHRlcm1pbmF0ZWQgd2l0aCBz dGF0dXMgMQpbICAgNTQuMjAwMjY5XSBpbml0OiBmYWlsc2FmZSBtYWluIHByb2Nlc3MgKDE1MDAp IGtpbGxlZCBieSBURVJNIHNpZ25hbApbICAgNTUuMTE5OTU1XSBkZXZpY2UtbWFwcGVyOiBtdWx0 aXBhdGg6IHZlcnNpb24gMS41LjEgbG9hZGVkClsgICA1NS4yNDc5OTddIEJsdWV0b290aDogQ29y ZSB2ZXIgMi4xNgpbICAgNTUuMjQ4MDIxXSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5 IDMxClsgICA1NS4yNDgwMjJdIEJsdWV0b290aDogSENJIGRldmljZSBhbmQgY29ubmVjdGlvbiBt YW5hZ2VyIGluaXRpYWxpemVkClsgICA1NS4yNDgwMzBdIEJsdWV0b290aDogSENJIHNvY2tldCBs YXllciBpbml0aWFsaXplZApbICAgNTUuMjQ4MDMyXSBCbHVldG9vdGg6IEwyQ0FQIHNvY2tldCBs YXllciBpbml0aWFsaXplZApbICAgNTUuMjQ4MDM3XSBCbHVldG9vdGg6IFNDTyBzb2NrZXQgbGF5 ZXIgaW5pdGlhbGl6ZWQKWyAgIDU1LjY5MzAzN10gbWljcm9jb2RlOiBDUFUwIHNpZz0weDIwNmE3 LCBwZj0weDEwLCByZXZpc2lvbj0weDE0ClsgICA1NS43Nzc5OTRdIG1laSAwMDAwOjAwOjE2LjA6 IHNldHRpbmcgbGF0ZW5jeSB0aW1lciB0byA2NApbICAgNTUuNzc4MDc4XSBtZWkgMDAwMDowMDox Ni4wOiBpcnEgNDMgZm9yIE1TSS9NU0ktWApbICAgNTYuMTA0MzExXSBCbHVldG9vdGg6IFJGQ09N TSBUVFkgbGF5ZXIgaW5pdGlhbGl6ZWQKWyAgIDU2LjEwNDMyNV0gQmx1ZXRvb3RoOiBSRkNPTU0g c29ja2V0IGxheWVyIGluaXRpYWxpemVkClsgICA1Ni4xMDQzMjhdIEJsdWV0b290aDogUkZDT01N IHZlciAxLjExClsgICA1Ni40MzM5MjddIExpbnV4IHZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlOiB2 Mi4wMApbICAgNTcuMDY2NTY1XSBBQ1BJIFdhcm5pbmc6IDB4MDAwMDAwMDAwMDAwMDQyOC0weDAw MDAwMDAwMDAwMDA0MmYgU3lzdGVtSU8gY29uZmxpY3RzIHdpdGggUmVnaW9uIFxHUElTIDEgKDIw MTIxMDE4L3V0YWRkcmVzcy0yNTEpClsgICA1Ny4wNjY1NzRdIEFDUEkgV2FybmluZzogMHgwMDAw MDAwMDAwMDAwNDI4LTB4MDAwMDAwMDAwMDAwMDQyZiBTeXN0ZW1JTyBjb25mbGljdHMgd2l0aCBS ZWdpb24gXFBNSU8gMiAoMjAxMjEwMTgvdXRhZGRyZXNzLTI1MSkKWyAgIDU3LjA2NjU4MF0gQUNQ STogSWYgYW4gQUNQSSBkcml2ZXIgaXMgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZSwgeW91IHNo b3VsZCB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIGRyaXZlcgpbICAgNTcuMDY2NTg2XSBB Q1BJIFdhcm5pbmc6IDB4MDAwMDAwMDAwMDAwMDU0MC0weDAwMDAwMDAwMDAwMDA1NGYgU3lzdGVt SU8gY29uZmxpY3RzIHdpdGggUmVnaW9uIFxHUElPIDEgKDIwMTIxMDE4L3V0YWRkcmVzcy0yNTEp ClsgICA1Ny4wNjY1OTBdIEFDUEkgV2FybmluZzogMHgwMDAwMDAwMDAwMDAwNTQwLTB4MDAwMDAw MDAwMDAwMDU0ZiBTeXN0ZW1JTyBjb25mbGljdHMgd2l0aCBSZWdpb24gXEdQMDEgMiAoMjAxMjEw MTgvdXRhZGRyZXNzLTI1MSkKWyAgIDU3LjA2NjU5NV0gQUNQSTogSWYgYW4gQUNQSSBkcml2ZXIg aXMgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZSwgeW91IHNob3VsZCB1c2UgaXQgaW5zdGVhZCBv ZiB0aGUgbmF0aXZlIGRyaXZlcgpbICAgNTcuMDY2NTk3XSBBQ1BJIFdhcm5pbmc6IDB4MDAwMDAw MDAwMDAwMDUzMC0weDAwMDAwMDAwMDAwMDA1M2YgU3lzdGVtSU8gY29uZmxpY3RzIHdpdGggUmVn aW9uIFxHUElPIDEgKDIwMTIxMDE4L3V0YWRkcmVzcy0yNTEpClsgICA1Ny4wNjY2MDJdIEFDUEkg V2FybmluZzogMHgwMDAwMDAwMDAwMDAwNTMwLTB4MDAwMDAwMDAwMDAwMDUzZiBTeXN0ZW1JTyBj b25mbGljdHMgd2l0aCBSZWdpb24gXEdQMDEgMiAoMjAxMjEwMTgvdXRhZGRyZXNzLTI1MSkKWyAg IDU3LjA2NjYwN10gQUNQSTogSWYgYW4gQUNQSSBkcml2ZXIgaXMgYXZhaWxhYmxlIGZvciB0aGlz IGRldmljZSwgeW91IHNob3VsZCB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIGRyaXZlcgpb ICAgNTcuMDY2NjA5XSBBQ1BJIFdhcm5pbmc6IDB4MDAwMDAwMDAwMDAwMDUwMC0weDAwMDAwMDAw MDAwMDA1MmYgU3lzdGVtSU8gY29uZmxpY3RzIHdpdGggUmVnaW9uIFxHUElPIDEgKDIwMTIxMDE4 L3V0YWRkcmVzcy0yNTEpClsgICA1Ny4wNjY2MTRdIEFDUEkgV2FybmluZzogMHgwMDAwMDAwMDAw MDAwNTAwLTB4MDAwMDAwMDAwMDAwMDUyZiBTeXN0ZW1JTyBjb25mbGljdHMgd2l0aCBSZWdpb24g XEdQMDEgMiAoMjAxMjEwMTgvdXRhZGRyZXNzLTI1MSkKWyAgIDU3LjA2NjYxOV0gQUNQSTogSWYg YW4gQUNQSSBkcml2ZXIgaXMgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZSwgeW91IHNob3VsZCB1 c2UgaXQgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIGRyaXZlcgpbICAgNTcuMDY2NjIxXSBscGNfaWNo OiBSZXNvdXJjZSBjb25mbGljdChzKSBmb3VuZCBhZmZlY3RpbmcgZ3Bpb19pY2gKWyAgIDU3LjI4 NzgyMl0gbWljcm9jb2RlOiBDUFUxIHNpZz0weDIwNmE3LCBwZj0weDEwLCByZXZpc2lvbj0weDE0 ClsgICA1Ny4yOTA1MTRdIG1pY3JvY29kZTogQ1BVMiBzaWc9MHgyMDZhNywgcGY9MHgxMCwgcmV2 aXNpb249MHgxNApbICAgNTcuMjkyMDc0XSBtaWNyb2NvZGU6IENQVTMgc2lnPTB4MjA2YTcsIHBm PTB4MTAsIHJldmlzaW9uPTB4MTQKWyAgIDU3LjI5MzU1OF0gbWljcm9jb2RlOiBNaWNyb2NvZGUg VXBkYXRlIERyaXZlcjogdjIuMDAgPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4sIFBldGVy IE9ydWJhClsgICA1Ny4yODA3NTVdIGFzdXNfd21pOiBBU1VTIFdNSSBnZW5lcmljIGRyaXZlciBs b2FkZWQKWyAgIDU3LjQ4NzM3NF0gYXN1c193bWk6IEluaXRpYWxpemF0aW9uOiAweDFhc3VzX3dt aTogQklPUyBXTUkgdmVyc2lvbjogNy42ClsgICA1Ny40ODc0ODJdIGFzdXNfd21pOiBTRlVOIHZh bHVlOiAweDFhMDg3Nzw2PlsgICA1Ny40ODgzNjVdIGlucHV0OiBBc3VzIFdNSSBob3RrZXlzIGFz IC9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbmItd21pL2lucHV0L2lucHV0NgpbICAgNTcuNTkxNjM3 XSBhc3VzX3dtaTogQmFja2xpZ2h0IGNvbnRyb2xsZWQgYnkgQUNQSSB2aWRlbyBkcml2ZXIKWyAg IDU3Ljc3OTg0M10gY2ZnODAyMTE6IENhbGxpbmcgQ1JEQSB0byB1cGRhdGUgd29ybGQgcmVndWxh dG9yeSBkb21haW4KWyAgIDU3Ljg4MTQ4M10gQmx1ZXRvb3RoOiBCTkVQIChFdGhlcm5ldCBFbXVs YXRpb24pIHZlciAxLjMKWyAgIDU3Ljg4MTQ4OF0gQmx1ZXRvb3RoOiBCTkVQIGZpbHRlcnM6IHBy b3RvY29sIG11bHRpY2FzdApbICAgNTcuODgxNDk5XSBCbHVldG9vdGg6IEJORVAgc29ja2V0IGxh eWVyIGluaXRpYWxpemVkClsgICA1Ny44ODI0OTJdIGxwOiBkcml2ZXIgbG9hZGVkIGJ1dCBubyBk ZXZpY2VzIGZvdW5kClsgICA1OC4yNzkzODNdIHBzbW91c2Ugc2VyaW80OiBzeW5hcHRpY3M6IFRv dWNocGFkIG1vZGVsOiAxLCBmdzogNy41LCBpZDogMHgxZTBiMSwgY2FwczogMHhkMDAwNzMvMHgy NDAwMDAvMHhhMDQwMCwgYm9hcmQgaWQ6IDE3MDQsIGZ3IGlkOiA3MDU0OTkKWyAgIDU4LjMxMTY2 Ml0gaW5wdXQ6IFN5blBTLzIgU3luYXB0aWNzIFRvdWNoUGFkIGFzIC9kZXZpY2VzL3BsYXRmb3Jt L2k4MDQyL3NlcmlvNC9pbnB1dC9pbnB1dDcKWyAgIDU4LjY5NzE5OF0gdXZjdmlkZW86IEZvdW5k IFVWQyAxLjAwIGRldmljZSBBU1VTIFVTQjIuMCBXZWJDYW0gKDA1OGY6YTAxNCkKWyAgIDU4Ljcw MDA1Nl0gaW5wdXQ6IEFTVVMgVVNCMi4wIFdlYkNhbSBhcyAvZGV2aWNlcy9wY2kwMDAwOjAwLzAw MDA6MDA6MWEuMC91c2IxLzEtMS8xLTEuMi8xLTEuMjoxLjAvaW5wdXQvaW5wdXQ4ClsgICA1OC43 MDAxNDhdIHVzYmNvcmU6IHJlZ2lzdGVyZWQgbmV3IGludGVyZmFjZSBkcml2ZXIgdXZjdmlkZW8K WyAgIDU4LjcwMDE1MV0gVVNCIFZpZGVvIENsYXNzIGRyaXZlciAoMS4xLjEpClsgICA1OS44MTM0 MTFdIHBwZGV2OiB1c2VyLXNwYWNlIHBhcmFsbGVsIHBvcnQgZHJpdmVyClsgICA2MC41NDkwNjJd IGNmZzgwMjExOiBXb3JsZCByZWd1bGF0b3J5IGRvbWFpbiB1cGRhdGVkOgpbICAgNjAuNTQ5MDY4 XSBjZmc4MDIxMTogICAoc3RhcnRfZnJlcSAtIGVuZF9mcmVxIEAgYmFuZHdpZHRoKSwgKG1heF9h bnRlbm5hX2dhaW4sIG1heF9laXJwKQpbICAgNjAuNTQ5MDcyXSBjZmc4MDIxMTogICAoMjQwMjAw MCBLSHogLSAyNDcyMDAwIEtIeiBAIDQwMDAwIEtIeiksICgzMDAgbUJpLCAyMDAwIG1CbSkKWyAg IDYwLjU0OTA3NV0gY2ZnODAyMTE6ICAgKDI0NTcwMDAgS0h6IC0gMjQ4MjAwMCBLSHogQCAyMDAw MCBLSHopLCAoMzAwIG1CaSwgMjAwMCBtQm0pClsgICA2MC41NDkwNzhdIGNmZzgwMjExOiAgICgy NDc0MDAwIEtIeiAtIDI0OTQwMDAgS0h6IEAgMjAwMDAgS0h6KSwgKDMwMCBtQmksIDIwMDAgbUJt KQpbICAgNjAuNTQ5MDgxXSBjZmc4MDIxMTogICAoNTE3MDAwMCBLSHogLSA1MjUwMDAwIEtIeiBA IDQwMDAwIEtIeiksICgzMDAgbUJpLCAyMDAwIG1CbSkKWyAgIDYwLjU0OTA4M10gY2ZnODAyMTE6 ICAgKDU3MzUwMDAgS0h6IC0gNTgzNTAwMCBLSHogQCA0MDAwMCBLSHopLCAoMzAwIG1CaSwgMjAw MCBtQm0pClsgICA2MS4zNjg1OThdIGF0aDogcGh5MDogQVNQTSBlbmFibGVkOiAweDQyClsgICA2 MS4zNjg2MDJdIGF0aDogRUVQUk9NIHJlZ2RvbWFpbjogMHg2MApbICAgNjEuMzY4NjA0XSBhdGg6 IEVFUFJPTSBpbmRpY2F0ZXMgd2Ugc2hvdWxkIGV4cGVjdCBhIGRpcmVjdCByZWdwYWlyIG1hcApb ICAgNjEuMzY4NjA3XSBhdGg6IENvdW50cnkgYWxwaGEyIGJlaW5nIHVzZWQ6IDAwClsgICA2MS4z Njg2MDhdIGF0aDogUmVncGFpciB1c2VkOiAweDYwClsgICA2Mi4zMzMxNzFdIGllZWU4MDIxMSBw aHkwOiBTZWxlY3RlZCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICdhdGg5a19yYXRlX2NvbnRyb2wn ClsgICA2Mi4zMzM2MzVdIGllZWU4MDIxMSBwaHkwOiBBdGhlcm9zIEFSOTI4NSBSZXY6MiBtZW09 MHhmZmZmYzkwMDA0YWEwMDAwLCBpcnE9MTcKWyAgIDY0Ljc2MTIwMV0gc25kX2hkYV9pbnRlbCAw MDAwOjAwOjFiLjA6IGlycSA0NCBmb3IgTVNJL01TSS1YClsgICA2Ni4yOTI3ODJdIGlucHV0OiBI REEgSW50ZWwgUENIIEhETUkvRFAscGNtPTMgYXMgL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAw OjFiLjAvc291bmQvY2FyZDAvaW5wdXQ5ClsgICA2Ni4yOTI5NjZdIGlucHV0OiBIREEgSW50ZWwg UENIIE1pYyBhcyAvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWIuMC9zb3VuZC9jYXJkMC9p bnB1dDEwClsgICA2Ni4yOTMwNDldIGlucHV0OiBIREEgSW50ZWwgUENIIEhlYWRwaG9uZSBhcyAv ZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWIuMC9zb3VuZC9jYXJkMC9pbnB1dDExClsgICA2 OS45OTUyOTBdIElQdjY6IEFERFJDT05GKE5FVERFVl9VUCk6IHdsYW4wOiBsaW5rIGlzIG5vdCBy ZWFkeQpbICAgNzAuMDAwODYyXSBJUHY2OiBBRERSQ09ORihORVRERVZfVVApOiB3bGFuMDogbGlu ayBpcyBub3QgcmVhZHkKWyAgIDcwLjAxMTYxMF0gYXRsMWMgMDAwMDowNDowMC4wOiBpcnEgNDUg Zm9yIE1TSS9NU0ktWApbICAgNzAuMDMzNjc3XSBJUHY2OiBBRERSQ09ORihORVRERVZfVVApOiBl dGgwOiBsaW5rIGlzIG5vdCByZWFkeQpbICAgNzAuMDUzNDIyXSBJUHY2OiBBRERSQ09ORihORVRE RVZfVVApOiBldGgwOiBsaW5rIGlzIG5vdCByZWFkeQpbICA0MTguNDE0MzI1XSBTR0kgWEZTIHdp dGggQUNMcywgc2VjdXJpdHkgYXR0cmlidXRlcywgcmVhbHRpbWUsIGxhcmdlIGJsb2NrL2lub2Rl IG51bWJlcnMsIG5vIGRlYnVnIGVuYWJsZWQKWyAgNDE4LjQyODAyNl0gWEZTIChzZGEzKTogTW91 bnRpbmcgRmlsZXN5c3RlbQpbICA0MTguNTExOTQzXSBYRlMgKHNkYTMpOiBTdGFydGluZyByZWNv dmVyeSAobG9nZGV2OiBpbnRlcm5hbCkKWyAgNDI1LjA3MDUzNl0gWEZTOiBJbnRlcm5hbCBlcnJv ciBYRlNfV0FOVF9DT1JSVVBURURfR09UTyBhdCBsaW5lIDE1NTcgb2YgZmlsZSAvYnVpbGQvYnVp bGRkL2xpbnV4LTMuOC4wL2ZzL3hmcy94ZnNfYWxsb2MuYy4gIENhbGxlciAweGZmZmZmZmZmYTA2 ZGFlMzYKWyAgNDI1LjA3MDUzNl0gClsgIDQyNS4wNzA1NTJdIFBpZDogNTY3MSwgY29tbTogbW91 bnQgVGFpbnRlZDogR0YgICAgICAgICAgICAzLjguMC0xOS1nZW5lcmljICMyOS1VYnVudHUKWyAg NDI1LjA3MDU1Nl0gQ2FsbCBUcmFjZToKWyAgNDI1LjA3MDYwNV0gIFs8ZmZmZmZmZmZhMDZjMzEx Yz5dIHhmc19lcnJvcl9yZXBvcnQrMHgzYy8weDQwIFt4ZnNdClsgIDQyNS4wNzA2NDZdICBbPGZm ZmZmZmZmYTA2ZGFlMzY+XSA/IHhmc19mcmVlX2V4dGVudCsweGQ2LzB4MTIwIFt4ZnNdClsgIDQy NS4wNzA2ODJdICBbPGZmZmZmZmZmYTA2ZDg1NTY+XSB4ZnNfZnJlZV9hZ19leHRlbnQrMHgyZDYv MHg3NDAgW3hmc10KWyAgNDI1LjA3MDcxN10gIFs8ZmZmZmZmZmZhMDZkYWUzNj5dIHhmc19mcmVl X2V4dGVudCsweGQ2LzB4MTIwIFt4ZnNdClsgIDQyNS4wNzA3NTFdICBbPGZmZmZmZmZmYTA2ZDcx Mzc+XSA/IGttZW1fem9uZV9hbGxvYysweDY3LzB4ZTAgW3hmc10KWyAgNDI1LjA3MDc5N10gIFs8 ZmZmZmZmZmZhMDcwOWI1MD5dIHhsb2dfcmVjb3Zlcl9wcm9jZXNzX2VmaSsweDE3MC8weDFiMCBb eGZzXQpbICA0MjUuMDcwODMwXSAgWzxmZmZmZmZmZmEwNmM5MDRmPl0gPyB4ZnNfaWdldCsweDM2 Zi8weDY5MCBbeGZzXQpbICA0MjUuMDcwODY5XSAgWzxmZmZmZmZmZmEwNzBiMzc2Pl0geGxvZ19y ZWNvdmVyX3Byb2Nlc3NfZWZpcy5pc3JhLjgrMHg2Ni8weGMwIFt4ZnNdClsgIDQyNS4wNzA5MDhd ICBbPGZmZmZmZmZmYTA3MGU5MWE+XSB4bG9nX3JlY292ZXJfZmluaXNoKzB4MmEvMHhkMCBbeGZz XQpbICA0MjUuMDcwOTUxXSAgWzxmZmZmZmZmZmEwNzE1ZTU0Pl0geGZzX2xvZ19tb3VudF9maW5p c2grMHgzNC8weDUwIFt4ZnNdClsgIDQyNS4wNzA5OTFdICBbPGZmZmZmZmZmYTA3MTE0NWQ+XSB4 ZnNfbW91bnRmcysweDQyZC8weDY5MCBbeGZzXQpbICA0MjUuMDcxMDI2XSAgWzxmZmZmZmZmZmEw NmQyYzZmPl0geGZzX2ZzX2ZpbGxfc3VwZXIrMHgyYmYvMHgzNDAgW3hmc10KWyAgNDI1LjA3MTAz N10gIFs8ZmZmZmZmZmY4MTE5NmViZD5dIG1vdW50X2JkZXYrMHgxY2QvMHgyMTAKWyAgNDI1LjA3 MTA3MF0gIFs8ZmZmZmZmZmZhMDZkMjliMD5dID8geGZzX3BhcnNlYXJncysweGMxMC8weGMxMCBb eGZzXQpbICA0MjUuMDcxMTAzXSAgWzxmZmZmZmZmZmEwNmQwZWM1Pl0geGZzX2ZzX21vdW50KzB4 MTUvMHgyMCBbeGZzXQpbICA0MjUuMDcxMTEwXSAgWzxmZmZmZmZmZjgxMTk3YmYzPl0gbW91bnRf ZnMrMHg0My8weDFiMApbICA0MjUuMDcxMTE5XSAgWzxmZmZmZmZmZjgxMWIyNDA3Pl0gPyBhbGxv Y192ZnNtbnQrMHhkNy8weDFiMApbICA0MjUuMDcxMTI3XSAgWzxmZmZmZmZmZjgxMWIyNTk0Pl0g dmZzX2tlcm5fbW91bnQrMHg3NC8weDExMApbICA0MjUuMDcxMTM1XSAgWzxmZmZmZmZmZjgxMWI0 OTBmPl0gZG9fbW91bnQrMHgyMWYvMHhhYzAKWyAgNDI1LjA3MTE0NV0gIFs8ZmZmZmZmZmY4MTE0 YTQxYj5dID8gc3RybmR1cF91c2VyKzB4NWIvMHg4MApbICA0MjUuMDcxMTUzXSAgWzxmZmZmZmZm ZjgxMWI1MjNlPl0gc3lzX21vdW50KzB4OGUvMHhlMApbICA0MjUuMDcxMTY1XSAgWzxmZmZmZmZm ZjgxNmQzNzlkPl0gc3lzdGVtX2NhbGxfZmFzdHBhdGgrMHgxYS8weDFmClsgIDQyNS4wNzExODld IFhGUyAoc2RhMyk6IEZhaWxlZCB0byByZWNvdmVyIEVGSXMKWyAgNDI1LjA3MTE5NF0gWEZTIChz ZGEzKTogbG9nIG1vdW50IGZpbmlzaCBmYWlsZWQKWyAgNjA1LjAwMzQ1M10gSU5GTzogdGFzayBt b3VudDo1NjcxIGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAxMjAgc2Vjb25kcy4KWyAgNjA1LjAwMzQ2 M10gImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXRfc2VjcyIgZGlz YWJsZXMgdGhpcyBtZXNzYWdlLgpbICA2MDUuMDAzNDY3XSBtb3VudCAgICAgICAgICAgRCBmZmZm ODgwMTRmYTUzZjQwICAgICAwICA1NjcxICAgNTY3MCAweDAwMDAwMDAwClsgIDYwNS4wMDM0Nzdd ICBmZmZmODgwMDdmOTMxYzgwIDAwMDAwMDAwMDAwMDAwODIgZmZmZjg4MDE0NjI2NWQwMCBmZmZm ODgwMDdmOTMxZmQ4ClsgIDYwNS4wMDM0ODZdICBmZmZmODgwMDdmOTMxZmQ4IGZmZmY4ODAwN2Y5 MzFmZDggZmZmZjg4MDE0OWI1YWU4MCBmZmZmODgwMTQ2MjY1ZDAwClsgIDYwNS4wMDM0OTNdICBm ZmZmODgwMDdmYTMzNmMwIGZmZmY4ODAwN2ZhMzM2ODAgZmZmZjg4MDA3ZmEzMzY5MCBmZmZmODgw MDdmYTMzNmU4ClsgIDYwNS4wMDM1MDFdIENhbGwgVHJhY2U6ClsgIDYwNS4wMDM1MThdICBbPGZm ZmZmZmZmODE2YzlmZDk+XSBzY2hlZHVsZSsweDI5LzB4NzAKWyAgNjA1LjAwMzU3N10gIFs8ZmZm ZmZmZmZhMDcxYmUwZD5dIHhmc19haWxfcHVzaF9hbGxfc3luYysweGJkLzB4MTAwIFt4ZnNdClsg IDYwNS4wMDM1ODddICBbPGZmZmZmZmZmODEwN2RiZjA+XSA/IGZpbmlzaF93YWl0KzB4ODAvMHg4 MApbICA2MDUuMDAzNjM0XSAgWzxmZmZmZmZmZmEwNzE3ZTQzPl0geGZzX2xvZ19xdWllc2NlKzB4 MzMvMHg3MCBbeGZzXQpbICA2MDUuMDAzNjczXSAgWzxmZmZmZmZmZmEwNzE3ZTkyPl0geGZzX2xv Z191bm1vdW50KzB4MTIvMHgzMCBbeGZzXQpbICA2MDUuMDAzNzE0XSAgWzxmZmZmZmZmZmEwNzEx NTQzPl0geGZzX21vdW50ZnMrMHg1MTMvMHg2OTAgW3hmc10KWyAgNjA1LjAwMzc0N10gIFs8ZmZm ZmZmZmZhMDZkMmM2Zj5dIHhmc19mc19maWxsX3N1cGVyKzB4MmJmLzB4MzQwIFt4ZnNdClsgIDYw NS4wMDM3NTZdICBbPGZmZmZmZmZmODExOTZlYmQ+XSBtb3VudF9iZGV2KzB4MWNkLzB4MjEwClsg IDYwNS4wMDM3ODhdICBbPGZmZmZmZmZmYTA2ZDI5YjA+XSA/IHhmc19wYXJzZWFyZ3MrMHhjMTAv MHhjMTAgW3hmc10KWyAgNjA1LjAwMzgyMF0gIFs8ZmZmZmZmZmZhMDZkMGVjNT5dIHhmc19mc19t b3VudCsweDE1LzB4MjAgW3hmc10KWyAgNjA1LjAwMzgyN10gIFs8ZmZmZmZmZmY4MTE5N2JmMz5d IG1vdW50X2ZzKzB4NDMvMHgxYjAKWyAgNjA1LjAwMzgzNV0gIFs8ZmZmZmZmZmY4MTFiMjQwNz5d ID8gYWxsb2NfdmZzbW50KzB4ZDcvMHgxYjAKWyAgNjA1LjAwMzg0M10gIFs8ZmZmZmZmZmY4MTFi MjU5ND5dIHZmc19rZXJuX21vdW50KzB4NzQvMHgxMTAKWyAgNjA1LjAwMzg1MV0gIFs8ZmZmZmZm ZmY4MTFiNDkwZj5dIGRvX21vdW50KzB4MjFmLzB4YWMwClsgIDYwNS4wMDM4NjFdICBbPGZmZmZm ZmZmODExNGE0MWI+XSA/IHN0cm5kdXBfdXNlcisweDViLzB4ODAKWyAgNjA1LjAwMzg2OV0gIFs8 ZmZmZmZmZmY4MTFiNTIzZT5dIHN5c19tb3VudCsweDhlLzB4ZTAKWyAgNjA1LjAwMzg3OV0gIFs8 ZmZmZmZmZmY4MTZkMzc5ZD5dIHN5c3RlbV9jYWxsX2Zhc3RwYXRoKzB4MWEvMHgxZgpbICA2MjAu Mjc3MzczXSB3bGFuMDogYXV0aGVudGljYXRlIHdpdGggZjg6ZDE6MTE6MmU6MDI6NjQKWyAgNjIw LjI4OTY1NV0gd2xhbjA6IHNlbmQgYXV0aCB0byBmODpkMToxMToyZTowMjo2NCAodHJ5IDEvMykK WyAgNjIwLjI5MTUxNl0gd2xhbjA6IGF1dGhlbnRpY2F0ZWQKWyAgNjIwLjI5MjUyNl0gd2xhbjA6 IGFzc29jaWF0ZSB3aXRoIGY4OmQxOjExOjJlOjAyOjY0ICh0cnkgMS8zKQpbICA2MjAuMjk2NTg0 XSB3bGFuMDogUlggQXNzb2NSZXNwIGZyb20gZjg6ZDE6MTE6MmU6MDI6NjQgKGNhcGFiPTB4NDMx IHN0YXR1cz0wIGFpZD0yKQpbICA2MjAuMjk2NjM1XSB3bGFuMDogYXNzb2NpYXRlZApbICA2MjAu Mjk2NjQyXSBJUHY2OiBBRERSQ09ORihORVRERVZfQ0hBTkdFKTogd2xhbjA6IGxpbmsgYmVjb21l cyByZWFkeQpbICA3MjQuODI0OTQxXSBJTkZPOiB0YXNrIG1vdW50OjU2NzEgYmxvY2tlZCBmb3Ig bW9yZSB0aGFuIDEyMCBzZWNvbmRzLgpbICA3MjQuODI0OTUxXSAiZWNobyAwID4gL3Byb2Mvc3lz L2tlcm5lbC9odW5nX3Rhc2tfdGltZW91dF9zZWNzIiBkaXNhYmxlcyB0aGlzIG1lc3NhZ2UuClsg IDcyNC44MjQ5NTVdIG1vdW50ICAgICAgICAgICBEIGZmZmY4ODAxNGZhNTNmNDAgICAgIDAgIDU2 NzEgICA1NjcwIDB4MDAwMDAwMDAKWyAgNzI0LjgyNDk2NV0gIGZmZmY4ODAwN2Y5MzFjODAgMDAw MDAwMDAwMDAwMDA4MiBmZmZmODgwMTQ2MjY1ZDAwIGZmZmY4ODAwN2Y5MzFmZDgKWyAgNzI0Ljgy NDk3NV0gIGZmZmY4ODAwN2Y5MzFmZDggZmZmZjg4MDA3ZjkzMWZkOCBmZmZmODgwMTQ5YjVhZTgw IGZmZmY4ODAxNDYyNjVkMDAKWyAgNzI0LjgyNDk4Ml0gIGZmZmY4ODAwN2ZhMzM2YzAgZmZmZjg4 MDA3ZmEzMzY4MCBmZmZmODgwMDdmYTMzNjkwIGZmZmY4ODAwN2ZhMzM2ZTgKWyAgNzI0LjgyNDk5 MF0gQ2FsbCBUcmFjZToKWyAgNzI0LjgyNTAwOV0gIFs8ZmZmZmZmZmY4MTZjOWZkOT5dIHNjaGVk dWxlKzB4MjkvMHg3MApbICA3MjQuODI1MDcwXSAgWzxmZmZmZmZmZmEwNzFiZTBkPl0geGZzX2Fp bF9wdXNoX2FsbF9zeW5jKzB4YmQvMHgxMDAgW3hmc10KWyAgNzI0LjgyNTA3OF0gIFs8ZmZmZmZm ZmY4MTA3ZGJmMD5dID8gZmluaXNoX3dhaXQrMHg4MC8weDgwClsgIDcyNC44MjUxMjRdICBbPGZm ZmZmZmZmYTA3MTdlNDM+XSB4ZnNfbG9nX3F1aWVzY2UrMHgzMy8weDcwIFt4ZnNdClsgIDcyNC44 MjUxNjNdICBbPGZmZmZmZmZmYTA3MTdlOTI+XSB4ZnNfbG9nX3VubW91bnQrMHgxMi8weDMwIFt4 ZnNdClsgIDcyNC44MjUyMDNdICBbPGZmZmZmZmZmYTA3MTE1NDM+XSB4ZnNfbW91bnRmcysweDUx My8weDY5MCBbeGZzXQpbICA3MjQuODI1MjM3XSAgWzxmZmZmZmZmZmEwNmQyYzZmPl0geGZzX2Zz X2ZpbGxfc3VwZXIrMHgyYmYvMHgzNDAgW3hmc10KWyAgNzI0LjgyNTI0Nl0gIFs8ZmZmZmZmZmY4 MTE5NmViZD5dIG1vdW50X2JkZXYrMHgxY2QvMHgyMTAKWyAgNzI0LjgyNTI3OF0gIFs8ZmZmZmZm ZmZhMDZkMjliMD5dID8geGZzX3BhcnNlYXJncysweGMxMC8weGMxMCBbeGZzXQpbICA3MjQuODI1 MzA5XSAgWzxmZmZmZmZmZmEwNmQwZWM1Pl0geGZzX2ZzX21vdW50KzB4MTUvMHgyMCBbeGZzXQpb ICA3MjQuODI1MzE2XSAgWzxmZmZmZmZmZjgxMTk3YmYzPl0gbW91bnRfZnMrMHg0My8weDFiMApb ICA3MjQuODI1MzI1XSAgWzxmZmZmZmZmZjgxMWIyNDA3Pl0gPyBhbGxvY192ZnNtbnQrMHhkNy8w eDFiMApbICA3MjQuODI1MzMyXSAgWzxmZmZmZmZmZjgxMWIyNTk0Pl0gdmZzX2tlcm5fbW91bnQr MHg3NC8weDExMApbICA3MjQuODI1MzQwXSAgWzxmZmZmZmZmZjgxMWI0OTBmPl0gZG9fbW91bnQr MHgyMWYvMHhhYzAKWyAgNzI0LjgyNTM1MV0gIFs8ZmZmZmZmZmY4MTE0YTQxYj5dID8gc3RybmR1 cF91c2VyKzB4NWIvMHg4MApbICA3MjQuODI1MzU5XSAgWzxmZmZmZmZmZjgxMWI1MjNlPl0gc3lz X21vdW50KzB4OGUvMHhlMApbICA3MjQuODI1MzY4XSAgWzxmZmZmZmZmZjgxNmQzNzlkPl0gc3lz dGVtX2NhbGxfZmFzdHBhdGgrMHgxYS8weDFmClsgIDg0NC42NDY1NTNdIElORk86IHRhc2sgbW91 bnQ6NTY3MSBibG9ja2VkIGZvciBtb3JlIHRoYW4gMTIwIHNlY29uZHMuClsgIDg0NC42NDY1NjJd ICJlY2hvIDAgPiAvcHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRpc2Fi bGVzIHRoaXMgbWVzc2FnZS4KWyAgODQ0LjY0NjU2N10gbW91bnQgICAgICAgICAgIEQgZmZmZjg4 MDE0ZmE1M2Y0MCAgICAgMCAgNTY3MSAgIDU2NzAgMHgwMDAwMDAwMApbICA4NDQuNjQ2NTc3XSAg ZmZmZjg4MDA3ZjkzMWM4MCAwMDAwMDAwMDAwMDAwMDgyIGZmZmY4ODAxNDYyNjVkMDAgZmZmZjg4 MDA3ZjkzMWZkOApbICA4NDQuNjQ2NTg3XSAgZmZmZjg4MDA3ZjkzMWZkOCBmZmZmODgwMDdmOTMx ZmQ4IGZmZmY4ODAxNDliNWFlODAgZmZmZjg4MDE0NjI2NWQwMApbICA4NDQuNjQ2NTk0XSAgZmZm Zjg4MDA3ZmEzMzZjMCBmZmZmODgwMDdmYTMzNjgwIGZmZmY4ODAwN2ZhMzM2OTAgZmZmZjg4MDA3 ZmEzMzZlOApbICA4NDQuNjQ2NjAyXSBDYWxsIFRyYWNlOgpbICA4NDQuNjQ2NjIwXSAgWzxmZmZm ZmZmZjgxNmM5ZmQ5Pl0gc2NoZWR1bGUrMHgyOS8weDcwClsgIDg0NC42NDY2ODBdICBbPGZmZmZm ZmZmYTA3MWJlMGQ+XSB4ZnNfYWlsX3B1c2hfYWxsX3N5bmMrMHhiZC8weDEwMCBbeGZzXQpbICA4 NDQuNjQ2Njg5XSAgWzxmZmZmZmZmZjgxMDdkYmYwPl0gPyBmaW5pc2hfd2FpdCsweDgwLzB4ODAK WyAgODQ0LjY0NjczNV0gIFs8ZmZmZmZmZmZhMDcxN2U0Mz5dIHhmc19sb2dfcXVpZXNjZSsweDMz LzB4NzAgW3hmc10KWyAgODQ0LjY0Njc3NV0gIFs8ZmZmZmZmZmZhMDcxN2U5Mj5dIHhmc19sb2df dW5tb3VudCsweDEyLzB4MzAgW3hmc10KWyAgODQ0LjY0NjgxNl0gIFs8ZmZmZmZmZmZhMDcxMTU0 Mz5dIHhmc19tb3VudGZzKzB4NTEzLzB4NjkwIFt4ZnNdClsgIDg0NC42NDY4NTBdICBbPGZmZmZm ZmZmYTA2ZDJjNmY+XSB4ZnNfZnNfZmlsbF9zdXBlcisweDJiZi8weDM0MCBbeGZzXQpbICA4NDQu NjQ2ODU4XSAgWzxmZmZmZmZmZjgxMTk2ZWJkPl0gbW91bnRfYmRldisweDFjZC8weDIxMApbICA4 NDQuNjQ2ODkwXSAgWzxmZmZmZmZmZmEwNmQyOWIwPl0gPyB4ZnNfcGFyc2VhcmdzKzB4YzEwLzB4 YzEwIFt4ZnNdClsgIDg0NC42NDY5MjFdICBbPGZmZmZmZmZmYTA2ZDBlYzU+XSB4ZnNfZnNfbW91 bnQrMHgxNS8weDIwIFt4ZnNdClsgIDg0NC42NDY5MjhdICBbPGZmZmZmZmZmODExOTdiZjM+XSBt b3VudF9mcysweDQzLzB4MWIwClsgIDg0NC42NDY5MzZdICBbPGZmZmZmZmZmODExYjI0MDc+XSA/ IGFsbG9jX3Zmc21udCsweGQ3LzB4MWIwClsgIDg0NC42NDY5NDRdICBbPGZmZmZmZmZmODExYjI1 OTQ+XSB2ZnNfa2Vybl9tb3VudCsweDc0LzB4MTEwClsgIDg0NC42NDY5NTJdICBbPGZmZmZmZmZm ODExYjQ5MGY+XSBkb19tb3VudCsweDIxZi8weGFjMApbICA4NDQuNjQ2OTYyXSAgWzxmZmZmZmZm ZjgxMTRhNDFiPl0gPyBzdHJuZHVwX3VzZXIrMHg1Yi8weDgwClsgIDg0NC42NDY5NzBdICBbPGZm ZmZmZmZmODExYjUyM2U+XSBzeXNfbW91bnQrMHg4ZS8weGUwClsgIDg0NC42NDY5ODFdICBbPGZm ZmZmZmZmODE2ZDM3OWQ+XSBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDFhLzB4MWYKWyAgOTY0LjQ2 ODA4OV0gSU5GTzogdGFzayBtb3VudDo1NjcxIGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAxMjAgc2Vj b25kcy4KWyAgOTY0LjQ2ODA5OF0gImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNr X3RpbWVvdXRfc2VjcyIgZGlzYWJsZXMgdGhpcyBtZXNzYWdlLgpbICA5NjQuNDY4MTAyXSBtb3Vu dCAgICAgICAgICAgRCBmZmZmODgwMTRmYTUzZjQwICAgICAwICA1NjcxICAgNTY3MCAweDAwMDAw MDAwClsgIDk2NC40NjgxMTJdICBmZmZmODgwMDdmOTMxYzgwIDAwMDAwMDAwMDAwMDAwODIgZmZm Zjg4MDE0NjI2NWQwMCBmZmZmODgwMDdmOTMxZmQ4ClsgIDk2NC40NjgxMjFdICBmZmZmODgwMDdm OTMxZmQ4IGZmZmY4ODAwN2Y5MzFmZDggZmZmZjg4MDE0OWI1YWU4MCBmZmZmODgwMTQ2MjY1ZDAw ClsgIDk2NC40NjgxMjldICBmZmZmODgwMDdmYTMzNmMwIGZmZmY4ODAwN2ZhMzM2ODAgZmZmZjg4 MDA3ZmEzMzY5MCBmZmZmODgwMDdmYTMzNmU4ClsgIDk2NC40NjgxMzZdIENhbGwgVHJhY2U6Clsg IDk2NC40NjgxNTNdICBbPGZmZmZmZmZmODE2YzlmZDk+XSBzY2hlZHVsZSsweDI5LzB4NzAKWyAg OTY0LjQ2ODIxM10gIFs8ZmZmZmZmZmZhMDcxYmUwZD5dIHhmc19haWxfcHVzaF9hbGxfc3luYysw eGJkLzB4MTAwIFt4ZnNdClsgIDk2NC40NjgyMjJdICBbPGZmZmZmZmZmODEwN2RiZjA+XSA/IGZp bmlzaF93YWl0KzB4ODAvMHg4MApbICA5NjQuNDY4MjY5XSAgWzxmZmZmZmZmZmEwNzE3ZTQzPl0g eGZzX2xvZ19xdWllc2NlKzB4MzMvMHg3MCBbeGZzXQpbICA5NjQuNDY4MzA4XSAgWzxmZmZmZmZm ZmEwNzE3ZTkyPl0geGZzX2xvZ191bm1vdW50KzB4MTIvMHgzMCBbeGZzXQpbICA5NjQuNDY4MzQ5 XSAgWzxmZmZmZmZmZmEwNzExNTQzPl0geGZzX21vdW50ZnMrMHg1MTMvMHg2OTAgW3hmc10KWyAg OTY0LjQ2ODM4Ml0gIFs8ZmZmZmZmZmZhMDZkMmM2Zj5dIHhmc19mc19maWxsX3N1cGVyKzB4MmJm LzB4MzQwIFt4ZnNdClsgIDk2NC40NjgzOTJdICBbPGZmZmZmZmZmODExOTZlYmQ+XSBtb3VudF9i ZGV2KzB4MWNkLzB4MjEwClsgIDk2NC40Njg0MjRdICBbPGZmZmZmZmZmYTA2ZDI5YjA+XSA/IHhm c19wYXJzZWFyZ3MrMHhjMTAvMHhjMTAgW3hmc10KWyAgOTY0LjQ2ODQ1NV0gIFs8ZmZmZmZmZmZh MDZkMGVjNT5dIHhmc19mc19tb3VudCsweDE1LzB4MjAgW3hmc10KWyAgOTY0LjQ2ODQ2M10gIFs8 ZmZmZmZmZmY4MTE5N2JmMz5dIG1vdW50X2ZzKzB4NDMvMHgxYjAKWyAgOTY0LjQ2ODQ3MV0gIFs8 ZmZmZmZmZmY4MTFiMjQwNz5dID8gYWxsb2NfdmZzbW50KzB4ZDcvMHgxYjAKWyAgOTY0LjQ2ODQ3 OV0gIFs8ZmZmZmZmZmY4MTFiMjU5ND5dIHZmc19rZXJuX21vdW50KzB4NzQvMHgxMTAKWyAgOTY0 LjQ2ODQ4Nl0gIFs8ZmZmZmZmZmY4MTFiNDkwZj5dIGRvX21vdW50KzB4MjFmLzB4YWMwClsgIDk2 NC40Njg0OTZdICBbPGZmZmZmZmZmODExNGE0MWI+XSA/IHN0cm5kdXBfdXNlcisweDViLzB4ODAK WyAgOTY0LjQ2ODUwNF0gIFs8ZmZmZmZmZmY4MTFiNTIzZT5dIHN5c19tb3VudCsweDhlLzB4ZTAK WyAgOTY0LjQ2ODUxNF0gIFs8ZmZmZmZmZmY4MTZkMzc5ZD5dIHN5c3RlbV9jYWxsX2Zhc3RwYXRo KzB4MWEvMHgxZgpbIDEwODQuMjg5NjM2XSBJTkZPOiB0YXNrIG1vdW50OjU2NzEgYmxvY2tlZCBm b3IgbW9yZSB0aGFuIDEyMCBzZWNvbmRzLgpbIDEwODQuMjg5NjUyXSAiZWNobyAwID4gL3Byb2Mv c3lzL2tlcm5lbC9odW5nX3Rhc2tfdGltZW91dF9zZWNzIiBkaXNhYmxlcyB0aGlzIG1lc3NhZ2Uu ClsgMTA4NC4yODk2NjBdIG1vdW50ICAgICAgICAgICBEIGZmZmY4ODAxNGZhNTNmNDAgICAgIDAg IDU2NzEgICA1NjcwIDB4MDAwMDAwMDAKWyAxMDg0LjI4OTY3M10gIGZmZmY4ODAwN2Y5MzFjODAg MDAwMDAwMDAwMDAwMDA4MiBmZmZmODgwMTQ2MjY1ZDAwIGZmZmY4ODAwN2Y5MzFmZDgKWyAxMDg0 LjI4OTY4N10gIGZmZmY4ODAwN2Y5MzFmZDggZmZmZjg4MDA3ZjkzMWZkOCBmZmZmODgwMTQ5YjVh ZTgwIGZmZmY4ODAxNDYyNjVkMDAKWyAxMDg0LjI4OTY5OV0gIGZmZmY4ODAwN2ZhMzM2YzAgZmZm Zjg4MDA3ZmEzMzY4MCBmZmZmODgwMDdmYTMzNjkwIGZmZmY4ODAwN2ZhMzM2ZTgKWyAxMDg0LjI4 OTcxMl0gQ2FsbCBUcmFjZToKWyAxMDg0LjI4OTczNl0gIFs8ZmZmZmZmZmY4MTZjOWZkOT5dIHNj aGVkdWxlKzB4MjkvMHg3MApbIDEwODQuMjg5Nzk2XSAgWzxmZmZmZmZmZmEwNzFiZTBkPl0geGZz X2FpbF9wdXNoX2FsbF9zeW5jKzB4YmQvMHgxMDAgW3hmc10KWyAxMDg0LjI4OTgwNV0gIFs8ZmZm ZmZmZmY4MTA3ZGJmMD5dID8gZmluaXNoX3dhaXQrMHg4MC8weDgwClsgMTA4NC4yODk4NTRdICBb PGZmZmZmZmZmYTA3MTdlNDM+XSB4ZnNfbG9nX3F1aWVzY2UrMHgzMy8weDcwIFt4ZnNdClsgMTA4 NC4yODk4OTZdICBbPGZmZmZmZmZmYTA3MTdlOTI+XSB4ZnNfbG9nX3VubW91bnQrMHgxMi8weDMw IFt4ZnNdClsgMTA4NC4yODk5MzddICBbPGZmZmZmZmZmYTA3MTE1NDM+XSB4ZnNfbW91bnRmcysw eDUxMy8weDY5MCBbeGZzXQpbIDEwODQuMjg5OTcxXSAgWzxmZmZmZmZmZmEwNmQyYzZmPl0geGZz X2ZzX2ZpbGxfc3VwZXIrMHgyYmYvMHgzNDAgW3hmc10KWyAxMDg0LjI4OTk4Ml0gIFs8ZmZmZmZm ZmY4MTE5NmViZD5dIG1vdW50X2JkZXYrMHgxY2QvMHgyMTAKWyAxMDg0LjI5MDAxOV0gIFs8ZmZm ZmZmZmZhMDZkMjliMD5dID8geGZzX3BhcnNlYXJncysweGMxMC8weGMxMCBbeGZzXQpbIDEwODQu MjkwMDUwXSAgWzxmZmZmZmZmZmEwNmQwZWM1Pl0geGZzX2ZzX21vdW50KzB4MTUvMHgyMCBbeGZz XQpbIDEwODQuMjkwMDU4XSAgWzxmZmZmZmZmZjgxMTk3YmYzPl0gbW91bnRfZnMrMHg0My8weDFi MApbIDEwODQuMjkwMDY2XSAgWzxmZmZmZmZmZjgxMWIyNDA3Pl0gPyBhbGxvY192ZnNtbnQrMHhk Ny8weDFiMApbIDEwODQuMjkwMDc0XSAgWzxmZmZmZmZmZjgxMWIyNTk0Pl0gdmZzX2tlcm5fbW91 bnQrMHg3NC8weDExMApbIDEwODQuMjkwMDgyXSAgWzxmZmZmZmZmZjgxMWI0OTBmPl0gZG9fbW91 bnQrMHgyMWYvMHhhYzAKWyAxMDg0LjI5MDA5M10gIFs8ZmZmZmZmZmY4MTE0YTQxYj5dID8gc3Ry bmR1cF91c2VyKzB4NWIvMHg4MApbIDEwODQuMjkwMTAxXSAgWzxmZmZmZmZmZjgxMWI1MjNlPl0g c3lzX21vdW50KzB4OGUvMHhlMApbIDEwODQuMjkwMTExXSAgWzxmZmZmZmZmZjgxNmQzNzlkPl0g c3lzdGVtX2NhbGxfZmFzdHBhdGgrMHgxYS8weDFmClsgMTIwNC4xMTExNzldIElORk86IHRhc2sg bW91bnQ6NTY3MSBibG9ja2VkIGZvciBtb3JlIHRoYW4gMTIwIHNlY29uZHMuClsgMTIwNC4xMTEx ODhdICJlY2hvIDAgPiAvcHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRp c2FibGVzIHRoaXMgbWVzc2FnZS4KWyAxMjA0LjExMTE5M10gbW91bnQgICAgICAgICAgIEQgZmZm Zjg4MDE0ZmE1M2Y0MCAgICAgMCAgNTY3MSAgIDU2NzAgMHgwMDAwMDAwMApbIDEyMDQuMTExMjAz XSAgZmZmZjg4MDA3ZjkzMWM4MCAwMDAwMDAwMDAwMDAwMDgyIGZmZmY4ODAxNDYyNjVkMDAgZmZm Zjg4MDA3ZjkzMWZkOApbIDEyMDQuMTExMjEyXSAgZmZmZjg4MDA3ZjkzMWZkOCBmZmZmODgwMDdm OTMxZmQ4IGZmZmY4ODAxNDliNWFlODAgZmZmZjg4MDE0NjI2NWQwMApbIDEyMDQuMTExMjE5XSAg ZmZmZjg4MDA3ZmEzMzZjMCBmZmZmODgwMDdmYTMzNjgwIGZmZmY4ODAwN2ZhMzM2OTAgZmZmZjg4 MDA3ZmEzMzZlOApbIDEyMDQuMTExMjI2XSBDYWxsIFRyYWNlOgpbIDEyMDQuMTExMjQ0XSAgWzxm ZmZmZmZmZjgxNmM5ZmQ5Pl0gc2NoZWR1bGUrMHgyOS8weDcwClsgMTIwNC4xMTEzMDNdICBbPGZm ZmZmZmZmYTA3MWJlMGQ+XSB4ZnNfYWlsX3B1c2hfYWxsX3N5bmMrMHhiZC8weDEwMCBbeGZzXQpb IDEyMDQuMTExMzEyXSAgWzxmZmZmZmZmZjgxMDdkYmYwPl0gPyBmaW5pc2hfd2FpdCsweDgwLzB4 ODAKWyAxMjA0LjExMTM1OF0gIFs8ZmZmZmZmZmZhMDcxN2U0Mz5dIHhmc19sb2dfcXVpZXNjZSsw eDMzLzB4NzAgW3hmc10KWyAxMjA0LjExMTM5OF0gIFs8ZmZmZmZmZmZhMDcxN2U5Mj5dIHhmc19s b2dfdW5tb3VudCsweDEyLzB4MzAgW3hmc10KWyAxMjA0LjExMTQzOV0gIFs8ZmZmZmZmZmZhMDcx MTU0Mz5dIHhmc19tb3VudGZzKzB4NTEzLzB4NjkwIFt4ZnNdClsgMTIwNC4xMTE0NzJdICBbPGZm ZmZmZmZmYTA2ZDJjNmY+XSB4ZnNfZnNfZmlsbF9zdXBlcisweDJiZi8weDM0MCBbeGZzXQpbIDEy MDQuMTExNDgyXSAgWzxmZmZmZmZmZjgxMTk2ZWJkPl0gbW91bnRfYmRldisweDFjZC8weDIxMApb IDEyMDQuMTExNTE0XSAgWzxmZmZmZmZmZmEwNmQyOWIwPl0gPyB4ZnNfcGFyc2VhcmdzKzB4YzEw LzB4YzEwIFt4ZnNdClsgMTIwNC4xMTE1NDVdICBbPGZmZmZmZmZmYTA2ZDBlYzU+XSB4ZnNfZnNf bW91bnQrMHgxNS8weDIwIFt4ZnNdClsgMTIwNC4xMTE1NTNdICBbPGZmZmZmZmZmODExOTdiZjM+ XSBtb3VudF9mcysweDQzLzB4MWIwClsgMTIwNC4xMTE1NjFdICBbPGZmZmZmZmZmODExYjI0MDc+ XSA/IGFsbG9jX3Zmc21udCsweGQ3LzB4MWIwClsgMTIwNC4xMTE1NjldICBbPGZmZmZmZmZmODEx YjI1OTQ+XSB2ZnNfa2Vybl9tb3VudCsweDc0LzB4MTEwClsgMTIwNC4xMTE1NzddICBbPGZmZmZm ZmZmODExYjQ5MGY+XSBkb19tb3VudCsweDIxZi8weGFjMApbIDEyMDQuMTExNTg3XSAgWzxmZmZm ZmZmZjgxMTRhNDFiPl0gPyBzdHJuZHVwX3VzZXIrMHg1Yi8weDgwClsgMTIwNC4xMTE1OTRdICBb PGZmZmZmZmZmODExYjUyM2U+XSBzeXNfbW91bnQrMHg4ZS8weGUwClsgMTIwNC4xMTE2MDRdICBb PGZmZmZmZmZmODE2ZDM3OWQ+XSBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDFhLzB4MWYKWyAxMzIz LjkzMjczOV0gSU5GTzogdGFzayBtb3VudDo1NjcxIGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAxMjAg c2Vjb25kcy4KWyAxMzIzLjkzMjc0OF0gImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaHVuZ190 YXNrX3RpbWVvdXRfc2VjcyIgZGlzYWJsZXMgdGhpcyBtZXNzYWdlLgpbIDEzMjMuOTMyNzUzXSBt b3VudCAgICAgICAgICAgRCBmZmZmODgwMTRmYTUzZjQwICAgICAwICA1NjcxICAgNTY3MCAweDAw MDAwMDAwClsgMTMyMy45MzI3NjNdICBmZmZmODgwMDdmOTMxYzgwIDAwMDAwMDAwMDAwMDAwODIg ZmZmZjg4MDE0NjI2NWQwMCBmZmZmODgwMDdmOTMxZmQ4ClsgMTMyMy45MzI3NzJdICBmZmZmODgw MDdmOTMxZmQ4IGZmZmY4ODAwN2Y5MzFmZDggZmZmZjg4MDE0OWI1YWU4MCBmZmZmODgwMTQ2MjY1 ZDAwClsgMTMyMy45MzI3NzldICBmZmZmODgwMDdmYTMzNmMwIGZmZmY4ODAwN2ZhMzM2ODAgZmZm Zjg4MDA3ZmEzMzY5MCBmZmZmODgwMDdmYTMzNmU4ClsgMTMyMy45MzI3ODddIENhbGwgVHJhY2U6 ClsgMTMyMy45MzI4MDVdICBbPGZmZmZmZmZmODE2YzlmZDk+XSBzY2hlZHVsZSsweDI5LzB4NzAK WyAxMzIzLjkzMjg2NV0gIFs8ZmZmZmZmZmZhMDcxYmUwZD5dIHhmc19haWxfcHVzaF9hbGxfc3lu YysweGJkLzB4MTAwIFt4ZnNdClsgMTMyMy45MzI4NzRdICBbPGZmZmZmZmZmODEwN2RiZjA+XSA/ IGZpbmlzaF93YWl0KzB4ODAvMHg4MApbIDEzMjMuOTMyOTIwXSAgWzxmZmZmZmZmZmEwNzE3ZTQz Pl0geGZzX2xvZ19xdWllc2NlKzB4MzMvMHg3MCBbeGZzXQpbIDEzMjMuOTMyOTYwXSAgWzxmZmZm ZmZmZmEwNzE3ZTkyPl0geGZzX2xvZ191bm1vdW50KzB4MTIvMHgzMCBbeGZzXQpbIDEzMjMuOTMz MDAxXSAgWzxmZmZmZmZmZmEwNzExNTQzPl0geGZzX21vdW50ZnMrMHg1MTMvMHg2OTAgW3hmc10K WyAxMzIzLjkzMzAzNV0gIFs8ZmZmZmZmZmZhMDZkMmM2Zj5dIHhmc19mc19maWxsX3N1cGVyKzB4 MmJmLzB4MzQwIFt4ZnNdClsgMTMyMy45MzMwNDRdICBbPGZmZmZmZmZmODExOTZlYmQ+XSBtb3Vu dF9iZGV2KzB4MWNkLzB4MjEwClsgMTMyMy45MzMwNzVdICBbPGZmZmZmZmZmYTA2ZDI5YjA+XSA/ IHhmc19wYXJzZWFyZ3MrMHhjMTAvMHhjMTAgW3hmc10KWyAxMzIzLjkzMzEwN10gIFs8ZmZmZmZm ZmZhMDZkMGVjNT5dIHhmc19mc19tb3VudCsweDE1LzB4MjAgW3hmc10KWyAxMzIzLjkzMzExNF0g IFs8ZmZmZmZmZmY4MTE5N2JmMz5dIG1vdW50X2ZzKzB4NDMvMHgxYjAKWyAxMzIzLjkzMzEyMl0g IFs8ZmZmZmZmZmY4MTFiMjQwNz5dID8gYWxsb2NfdmZzbW50KzB4ZDcvMHgxYjAKWyAxMzIzLjkz MzEzMF0gIFs8ZmZmZmZmZmY4MTFiMjU5ND5dIHZmc19rZXJuX21vdW50KzB4NzQvMHgxMTAKWyAx MzIzLjkzMzEzOF0gIFs8ZmZmZmZmZmY4MTFiNDkwZj5dIGRvX21vdW50KzB4MjFmLzB4YWMwClsg MTMyMy45MzMxNDhdICBbPGZmZmZmZmZmODExNGE0MWI+XSA/IHN0cm5kdXBfdXNlcisweDViLzB4 ODAKWyAxMzIzLjkzMzE1Nl0gIFs8ZmZmZmZmZmY4MTFiNTIzZT5dIHN5c19tb3VudCsweDhlLzB4 ZTAKWyAxMzIzLjkzMzE2Nl0gIFs8ZmZmZmZmZmY4MTZkMzc5ZD5dIHN5c3RlbV9jYWxsX2Zhc3Rw YXRoKzB4MWEvMHgxZgpbIDE0NDMuNzU0MjM3XSBJTkZPOiB0YXNrIG1vdW50OjU2NzEgYmxvY2tl ZCBmb3IgbW9yZSB0aGFuIDEyMCBzZWNvbmRzLgpbIDE0NDMuNzU0MjQ2XSAiZWNobyAwID4gL3By b2Mvc3lzL2tlcm5lbC9odW5nX3Rhc2tfdGltZW91dF9zZWNzIiBkaXNhYmxlcyB0aGlzIG1lc3Nh Z2UuClsgMTQ0My43NTQyNTFdIG1vdW50ICAgICAgICAgICBEIGZmZmY4ODAxNGZhNTNmNDAgICAg IDAgIDU2NzEgICA1NjcwIDB4MDAwMDAwMDAKWyAxNDQzLjc1NDI2MF0gIGZmZmY4ODAwN2Y5MzFj ODAgMDAwMDAwMDAwMDAwMDA4MiBmZmZmODgwMTQ2MjY1ZDAwIGZmZmY4ODAwN2Y5MzFmZDgKWyAx NDQzLjc1NDI2OV0gIGZmZmY4ODAwN2Y5MzFmZDggZmZmZjg4MDA3ZjkzMWZkOCBmZmZmODgwMTQ5 YjVhZTgwIGZmZmY4ODAxNDYyNjVkMDAKWyAxNDQzLjc1NDI3N10gIGZmZmY4ODAwN2ZhMzM2YzAg ZmZmZjg4MDA3ZmEzMzY4MCBmZmZmODgwMDdmYTMzNjkwIGZmZmY4ODAwN2ZhMzM2ZTgKWyAxNDQz Ljc1NDI4NF0gQ2FsbCBUcmFjZToKWyAxNDQzLjc1NDMwMl0gIFs8ZmZmZmZmZmY4MTZjOWZkOT5d IHNjaGVkdWxlKzB4MjkvMHg3MApbIDE0NDMuNzU0MzY1XSAgWzxmZmZmZmZmZmEwNzFiZTBkPl0g eGZzX2FpbF9wdXNoX2FsbF9zeW5jKzB4YmQvMHgxMDAgW3hmc10KWyAxNDQzLjc1NDM3NF0gIFs8 ZmZmZmZmZmY4MTA3ZGJmMD5dID8gZmluaXNoX3dhaXQrMHg4MC8weDgwClsgMTQ0My43NTQ0MjJd ICBbPGZmZmZmZmZmYTA3MTdlNDM+XSB4ZnNfbG9nX3F1aWVzY2UrMHgzMy8weDcwIFt4ZnNdClsg MTQ0My43NTQ0NjJdICBbPGZmZmZmZmZmYTA3MTdlOTI+XSB4ZnNfbG9nX3VubW91bnQrMHgxMi8w eDMwIFt4ZnNdClsgMTQ0My43NTQ1MDNdICBbPGZmZmZmZmZmYTA3MTE1NDM+XSB4ZnNfbW91bnRm cysweDUxMy8weDY5MCBbeGZzXQpbIDE0NDMuNzU0NTM3XSAgWzxmZmZmZmZmZmEwNmQyYzZmPl0g eGZzX2ZzX2ZpbGxfc3VwZXIrMHgyYmYvMHgzNDAgW3hmc10KWyAxNDQzLjc1NDU0Nl0gIFs8ZmZm ZmZmZmY4MTE5NmViZD5dIG1vdW50X2JkZXYrMHgxY2QvMHgyMTAKWyAxNDQzLjc1NDU3OF0gIFs8 ZmZmZmZmZmZhMDZkMjliMD5dID8geGZzX3BhcnNlYXJncysweGMxMC8weGMxMCBbeGZzXQpbIDE0 NDMuNzU0NjEwXSAgWzxmZmZmZmZmZmEwNmQwZWM1Pl0geGZzX2ZzX21vdW50KzB4MTUvMHgyMCBb eGZzXQpbIDE0NDMuNzU0NjE3XSAgWzxmZmZmZmZmZjgxMTk3YmYzPl0gbW91bnRfZnMrMHg0My8w eDFiMApbIDE0NDMuNzU0NjI2XSAgWzxmZmZmZmZmZjgxMWIyNDA3Pl0gPyBhbGxvY192ZnNtbnQr MHhkNy8weDFiMApbIDE0NDMuNzU0NjMzXSAgWzxmZmZmZmZmZjgxMWIyNTk0Pl0gdmZzX2tlcm5f bW91bnQrMHg3NC8weDExMApbIDE0NDMuNzU0NjQyXSAgWzxmZmZmZmZmZjgxMWI0OTBmPl0gZG9f bW91bnQrMHgyMWYvMHhhYzAKWyAxNDQzLjc1NDY1Ml0gIFs8ZmZmZmZmZmY4MTE0YTQxYj5dID8g c3RybmR1cF91c2VyKzB4NWIvMHg4MApbIDE0NDMuNzU0NjYwXSAgWzxmZmZmZmZmZjgxMWI1MjNl Pl0gc3lzX21vdW50KzB4OGUvMHhlMApbIDE0NDMuNzU0NjcwXSAgWzxmZmZmZmZmZjgxNmQzNzlk Pl0gc3lzdGVtX2NhbGxfZmFzdHBhdGgrMHgxYS8weDFmClsgMTU2My41NzU4MDNdIElORk86IHRh c2sgbW91bnQ6NTY3MSBibG9ja2VkIGZvciBtb3JlIHRoYW4gMTIwIHNlY29uZHMuClsgMTU2My41 NzU4MTJdICJlY2hvIDAgPiAvcHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3Mi IGRpc2FibGVzIHRoaXMgbWVzc2FnZS4KWyAxNTYzLjU3NTgxN10gbW91bnQgICAgICAgICAgIEQg ZmZmZjg4MDE0ZmE1M2Y0MCAgICAgMCAgNTY3MSAgIDU2NzAgMHgwMDAwMDAwMApbIDE1NjMuNTc1 ODI3XSAgZmZmZjg4MDA3ZjkzMWM4MCAwMDAwMDAwMDAwMDAwMDgyIGZmZmY4ODAxNDYyNjVkMDAg ZmZmZjg4MDA3ZjkzMWZkOApbIDE1NjMuNTc1ODM2XSAgZmZmZjg4MDA3ZjkzMWZkOCBmZmZmODgw MDdmOTMxZmQ4IGZmZmY4ODAxNDliNWFlODAgZmZmZjg4MDE0NjI2NWQwMApbIDE1NjMuNTc1ODQ0 XSAgZmZmZjg4MDA3ZmEzMzZjMCBmZmZmODgwMDdmYTMzNjgwIGZmZmY4ODAwN2ZhMzM2OTAgZmZm Zjg4MDA3ZmEzMzZlOApbIDE1NjMuNTc1ODUxXSBDYWxsIFRyYWNlOgpbIDE1NjMuNTc1ODY5XSAg WzxmZmZmZmZmZjgxNmM5ZmQ5Pl0gc2NoZWR1bGUrMHgyOS8weDcwClsgMTU2My41NzU5MjddICBb PGZmZmZmZmZmYTA3MWJlMGQ+XSB4ZnNfYWlsX3B1c2hfYWxsX3N5bmMrMHhiZC8weDEwMCBbeGZz XQpbIDE1NjMuNTc1OTM1XSAgWzxmZmZmZmZmZjgxMDdkYmYwPl0gPyBmaW5pc2hfd2FpdCsweDgw LzB4ODAKWyAxNTYzLjU3NTk4MV0gIFs8ZmZmZmZmZmZhMDcxN2U0Mz5dIHhmc19sb2dfcXVpZXNj ZSsweDMzLzB4NzAgW3hmc10KWyAxNTYzLjU3NjAyMV0gIFs8ZmZmZmZmZmZhMDcxN2U5Mj5dIHhm c19sb2dfdW5tb3VudCsweDEyLzB4MzAgW3hmc10KWyAxNTYzLjU3NjA2Ml0gIFs8ZmZmZmZmZmZh MDcxMTU0Mz5dIHhmc19tb3VudGZzKzB4NTEzLzB4NjkwIFt4ZnNdClsgMTU2My41NzYwOTZdICBb PGZmZmZmZmZmYTA2ZDJjNmY+XSB4ZnNfZnNfZmlsbF9zdXBlcisweDJiZi8weDM0MCBbeGZzXQpb IDE1NjMuNTc2MTA1XSAgWzxmZmZmZmZmZjgxMTk2ZWJkPl0gbW91bnRfYmRldisweDFjZC8weDIx MApbIDE1NjMuNTc2MTM3XSAgWzxmZmZmZmZmZmEwNmQyOWIwPl0gPyB4ZnNfcGFyc2VhcmdzKzB4 YzEwLzB4YzEwIFt4ZnNdClsgMTU2My41NzYxNjldICBbPGZmZmZmZmZmYTA2ZDBlYzU+XSB4ZnNf ZnNfbW91bnQrMHgxNS8weDIwIFt4ZnNdClsgMTU2My41NzYxNzZdICBbPGZmZmZmZmZmODExOTdi ZjM+XSBtb3VudF9mcysweDQzLzB4MWIwClsgMTU2My41NzYxODRdICBbPGZmZmZmZmZmODExYjI0 MDc+XSA/IGFsbG9jX3Zmc21udCsweGQ3LzB4MWIwClsgMTU2My41NzYxOTJdICBbPGZmZmZmZmZm ODExYjI1OTQ+XSB2ZnNfa2Vybl9tb3VudCsweDc0LzB4MTEwClsgMTU2My41NzYyMDBdICBbPGZm ZmZmZmZmODExYjQ5MGY+XSBkb19tb3VudCsweDIxZi8weGFjMApbIDE1NjMuNTc2MjEwXSAgWzxm ZmZmZmZmZjgxMTRhNDFiPl0gPyBzdHJuZHVwX3VzZXIrMHg1Yi8weDgwClsgMTU2My41NzYyMThd ICBbPGZmZmZmZmZmODExYjUyM2U+XSBzeXNfbW91bnQrMHg4ZS8weGUwClsgMTU2My41NzYyMjhd ICBbPGZmZmZmZmZmODE2ZDM3OWQ+XSBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDFhLzB4MWYKWyAx NjgzLjM5NzMzMl0gSU5GTzogdGFzayBtb3VudDo1NjcxIGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAx MjAgc2Vjb25kcy4KWyAxNjgzLjM5NzM0Ml0gImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaHVu Z190YXNrX3RpbWVvdXRfc2VjcyIgZGlzYWJsZXMgdGhpcyBtZXNzYWdlLgpbIDE2ODMuMzk3MzQ2 XSBtb3VudCAgICAgICAgICAgRCBmZmZmODgwMTRmYTUzZjQwICAgICAwICA1NjcxICAgNTY3MCAw eDAwMDAwMDAwClsgMTY4My4zOTczNTZdICBmZmZmODgwMDdmOTMxYzgwIDAwMDAwMDAwMDAwMDAw ODIgZmZmZjg4MDE0NjI2NWQwMCBmZmZmODgwMDdmOTMxZmQ4ClsgMTY4My4zOTczNjZdICBmZmZm ODgwMDdmOTMxZmQ4IGZmZmY4ODAwN2Y5MzFmZDggZmZmZjg4MDE0OWI1YWU4MCBmZmZmODgwMTQ2 MjY1ZDAwClsgMTY4My4zOTczNzNdICBmZmZmODgwMDdmYTMzNmMwIGZmZmY4ODAwN2ZhMzM2ODAg ZmZmZjg4MDA3ZmEzMzY5MCBmZmZmODgwMDdmYTMzNmU4ClsgMTY4My4zOTczODFdIENhbGwgVHJh Y2U6ClsgMTY4My4zOTczOThdICBbPGZmZmZmZmZmODE2YzlmZDk+XSBzY2hlZHVsZSsweDI5LzB4 NzAKWyAxNjgzLjM5NzQ1OV0gIFs8ZmZmZmZmZmZhMDcxYmUwZD5dIHhmc19haWxfcHVzaF9hbGxf c3luYysweGJkLzB4MTAwIFt4ZnNdClsgMTY4My4zOTc0NjhdICBbPGZmZmZmZmZmODEwN2RiZjA+ XSA/IGZpbmlzaF93YWl0KzB4ODAvMHg4MApbIDE2ODMuMzk3NTE0XSAgWzxmZmZmZmZmZmEwNzE3 ZTQzPl0geGZzX2xvZ19xdWllc2NlKzB4MzMvMHg3MCBbeGZzXQpbIDE2ODMuMzk3NTU0XSAgWzxm ZmZmZmZmZmEwNzE3ZTkyPl0geGZzX2xvZ191bm1vdW50KzB4MTIvMHgzMCBbeGZzXQpbIDE2ODMu Mzk3NTk0XSAgWzxmZmZmZmZmZmEwNzExNTQzPl0geGZzX21vdW50ZnMrMHg1MTMvMHg2OTAgW3hm c10KWyAxNjgzLjM5NzYyOF0gIFs8ZmZmZmZmZmZhMDZkMmM2Zj5dIHhmc19mc19maWxsX3N1cGVy KzB4MmJmLzB4MzQwIFt4ZnNdClsgMTY4My4zOTc2MzddICBbPGZmZmZmZmZmODExOTZlYmQ+XSBt b3VudF9iZGV2KzB4MWNkLzB4MjEwClsgMTY4My4zOTc2NjhdICBbPGZmZmZmZmZmYTA2ZDI5YjA+ XSA/IHhmc19wYXJzZWFyZ3MrMHhjMTAvMHhjMTAgW3hmc10KWyAxNjgzLjM5NzY5OV0gIFs8ZmZm ZmZmZmZhMDZkMGVjNT5dIHhmc19mc19tb3VudCsweDE1LzB4MjAgW3hmc10KWyAxNjgzLjM5Nzcw N10gIFs8ZmZmZmZmZmY4MTE5N2JmMz5dIG1vdW50X2ZzKzB4NDMvMHgxYjAKWyAxNjgzLjM5Nzcx NV0gIFs8ZmZmZmZmZmY4MTFiMjQwNz5dID8gYWxsb2NfdmZzbW50KzB4ZDcvMHgxYjAKWyAxNjgz LjM5NzcyM10gIFs8ZmZmZmZmZmY4MTFiMjU5ND5dIHZmc19rZXJuX21vdW50KzB4NzQvMHgxMTAK WyAxNjgzLjM5NzczMV0gIFs8ZmZmZmZmZmY4MTFiNDkwZj5dIGRvX21vdW50KzB4MjFmLzB4YWMw ClsgMTY4My4zOTc3NDFdICBbPGZmZmZmZmZmODExNGE0MWI+XSA/IHN0cm5kdXBfdXNlcisweDVi LzB4ODAKWyAxNjgzLjM5Nzc0OV0gIFs8ZmZmZmZmZmY4MTFiNTIzZT5dIHN5c19tb3VudCsweDhl LzB4ZTAKWyAxNjgzLjM5Nzc1OV0gIFs8ZmZmZmZmZmY4MTZkMzc5ZD5dIHN5c3RlbV9jYWxsX2Zh c3RwYXRoKzB4MWEvMHgxZgo= --========GMX100501368902359384367-- From news@mgras.net Sat May 18 14:56:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 841647F3F for ; Sat, 18 May 2013 14:56:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0D717AC001 for ; Sat, 18 May 2013 12:56:18 -0700 (PDT) X-ASG-Debug-ID: 1368906975-04cb6c10b861e70001-w1Z2WR Received: from jive.mgras.net (jive.mgras.net [5.104.109.8]) by cuda.sgi.com with ESMTP id fBBidphf5WibGaA6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 18 May 2013 12:56:17 -0700 (PDT) X-Barracuda-Envelope-From: news@mgras.net X-Barracuda-Apparent-Source-IP: 5.104.109.8 Received: from localhost (localhost [127.0.0.1]) by jive.mgras.net (Postfix) with ESMTP id 7217C2C908 for ; Sat, 18 May 2013 21:56:15 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at jive.mgras.net Received: from jive.mgras.net ([127.0.0.1]) by localhost (jive.mgras.net [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mET-1ng4ZMVU for ; Sat, 18 May 2013 21:56:10 +0200 (CEST) Received: from cray1.mgras.de (quickstep.mgras.net [84.245.154.74]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by jive.mgras.net (Postfix) with ESMTPS id C973E2C577 for ; Sat, 18 May 2013 21:56:09 +0200 (CEST) Received: from osprey.mgras.de (osprey.mgras.de [192.168.48.3]) by cray1.mgras.de (Postfix) with ESMTP id 49A3F11E9B44 for ; Sat, 18 May 2013 21:56:09 +0200 (CEST) Received: (from news@localhost) by osprey.mgras.de (AIX5.2/8.11.6p2/8.11.0) id r4IJu9p544814 for linux-xfs@oss.sgi.com; Sat, 18 May 2013 21:56:09 +0200 To: linux-xfs@oss.sgi.com Path: not-for-mail From: Martin Spott Newsgroups: list.linux-xfs Subject: Re: XFS hangup - Failed to recover EFIs Date: Sat, 18 May 2013 19:56:09 +0000 (UTC) X-ASG-Orig-Subj: Re: XFS hangup - Failed to recover EFIs Organization: home Lines: 10 Message-ID: References: <20130518183919.100500@gmx.com> NNTP-Posting-Host: cray1.mgras.de X-Trace: osprey.mgras.de 1368906969 573642 192.168.48.17 (18 May 2013 19:56:09 GMT) X-Complaints-To: usenet@mgras.net NNTP-Posting-Date: Sat, 18 May 2013 19:56:09 +0000 (UTC) User-Agent: tin/1.9.6-20100522 ("Lochruan") (UNIX) (Linux/3.2.0-0.bpo.4-amd64 (x86_64)) X-Barracuda-Connect: jive.mgras.net[5.104.109.8] X-Barracuda-Start-Time: 1368906976 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131344 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- "Punk Rider" wrote: > So after inserting Ubuntu 13.04 boot disk , this is what i've found out: I'd recommend to let the Ubuntu 13.04 kernel settle for a while, Martin. -- Unix _IS_ user friendly - it's just selective about who its friends are ! -------------------------------------------------------------------------- From david@fromorbit.com Sat May 18 20:14:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3C7687F3F for ; Sat, 18 May 2013 20:14:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 061C6304039 for ; Sat, 18 May 2013 18:14:00 -0700 (PDT) X-ASG-Debug-ID: 1368926037-04bdf042243d7870001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id fsWt1YZmISh57S3E for ; Sat, 18 May 2013 18:13:58 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AosUAFommFF5LH3D/2dsb2JhbABBGoMIMIJSikkErnyFGwQBfhd0gh8BAQQBOhwjBQsIAw4KCSUPBSUDIROIBwUNM7JHiX4WjV8PgRgFB4JzYQOXN4ochyWDISqBLQ Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail06.adl2.internode.on.net with ESMTP; 19 May 2013 10:43:56 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdsCA-00045v-KF; Sun, 19 May 2013 11:13:54 +1000 Date: Sun, 19 May 2013 11:13:54 +1000 From: Dave Chinner To: Paolo Pisati Cc: xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130519011354.GE6495@dastard> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130517104529.GA12490@luxor.wired.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368926038 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131364 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Fri, May 17, 2013 at 12:45:29PM +0200, Paolo Pisati wrote: > While exercising swift on a single node 32bit armhf system running a 3.5 kernel, > i got this when i hit ~25% of fs space usage: > > dmesg: > ... > [ 3037.399406] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3037.399442] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3037.399469] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3037.399485] XFS (sda5): xfs_buf_get: failed to map pages > [ 3037.399485] > [ 3037.399501] XFS (sda5): Internal error xfs_trans_cancel at line 1466 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Caller 0xbf0235e0 > [ 3037.399501] > [ 3037.413789] [] (unwind_backtrace+0x0/0x104) from [] (dump_stack+0x20/0x24) > [ 3037.413985] [] (dump_stack+0x20/0x24) from [] (xfs_error_report+0x60/0x6c [xfs]) > [ 3037.414321] [] (xfs_error_report+0x60/0x6c [xfs]) from [] (xfs_trans_cancel+0xfc/0x11c [xfs]) > [ 3037.414654] [] (xfs_trans_cancel+0xfc/0x11c [xfs]) from [] (xfs_create+0x228/0x558 [xfs]) > [ 3037.414953] [] (xfs_create+0x228/0x558 [xfs]) from [] (xfs_vn_mknod+0x9c/0x180 [xfs]) > [ 3037.415239] [] (xfs_vn_mknod+0x9c/0x180 [xfs]) from [] (xfs_vn_mkdir+0x20/0x24 [xfs]) > [ 3037.415393] [] (xfs_vn_mkdir+0x20/0x24 [xfs]) from [] (vfs_mkdir+0xc4/0x13c) > [ 3037.415410] [] (vfs_mkdir+0xc4/0x13c) from [] (sys_mkdirat+0xdc/0xe4) > [ 3037.415422] [] (sys_mkdirat+0xdc/0xe4) from [] (sys_mkdir+0x24/0x28) > [ 3037.415437] [] (sys_mkdir+0x24/0x28) from [] (ret_fast_syscall+0x0/0x30) > [ 3037.415452] XFS (sda5): xfs_do_force_shutdown(0x8) called from line 1467 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Return address = 0xbf06340c > [ 3037.416892] XFS (sda5): Corruption of in-memory data detected. Shutting down filesystem > [ 3037.425008] XFS (sda5): Please umount the filesystem and rectify the problem(s) > [ 3047.912480] XFS (sda5): xfs_log_force: error 5 returned. Hi Paolo, You've already contacted me off list about this and pointed me to this: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1176977 which contains information that everyone looking at the problem should know. Also, any progress on testing the backported fix mentioned in the bug? > and while i didn't hit the warning above, still after ~25% of > usage, the storage node died with: > > May 17 06:26:00 c13 container-server ERROR __call__ error with PUT /sdb1/123172/AUTH_test/3b3d078015304a41b76b0ab083b7863a_5 : [Errno 28] No space > left on device: '/srv/1/node/sdb1/containers/123172' (txn: tx8ea3ce392ee94df096b16-00519605b0) You're testing swift benchmark which is probably a small file workload with large attributes attached. It's a good chance that the workload is fragmenting free space because swift is doing bad things to allocation patterns. It's almost certainly exacerbated by the tiny filesystem you are using (1.5GB), but you can probably work around this problem for now with allocsize=4096. I've got a fix that I'm testing for the underlying cause of the problem I'm aware of with this workload, but I'll need more information about your storage/filesystem config to confirm it is the same root cause first. Can you include the info from here: http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F As well the freespace info that Jeff asked for? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sat May 18 20:20:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CC4197F3F for ; Sat, 18 May 2013 20:20:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8DE1A30404E for ; Sat, 18 May 2013 18:20:18 -0700 (PDT) X-ASG-Debug-ID: 1368926416-04cb6c10c26ff60001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id lMQH6qnEzscdSMIB for ; Sat, 18 May 2013 18:20:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As4NAJgnmFF5LH3D/2dsb2JhbABbgwiDArlJhRsEAX4XdIIfAQEEAScTHCMFCwgDDgoJJQ8FJQMhE4gHBb0CFo1mCIEdB4JzYQOXN5FBgyEqgS4 Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail06.adl2.internode.on.net with ESMTP; 19 May 2013 10:50:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdsIJ-00046X-8e; Sun, 19 May 2013 11:20:15 +1000 Date: Sun, 19 May 2013 11:20:15 +1000 From: Dave Chinner To: Punk Rider Cc: xfs@oss.sgi.com Subject: Re: XFS hangup - Failed to recover EFIs Message-ID: <20130519012015.GF6495@dastard> X-ASG-Orig-Subj: Re: XFS hangup - Failed to recover EFIs References: <20130518183919.100500@gmx.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130518183919.100500@gmx.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368926416 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 18, 2013 at 02:39:19PM -0400, Punk Rider wrote: > Hello > > After upgrading my laptop from Ubuntu 12.04 LTS to Ubuntu 13.04 Raring i noticed that my Linux would not boot again. > So after inserting Ubuntu 13.04 boot disk , this is what i've found out: > > ubuntu@ubuntu:~$ uname -a > Linux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux > > ubuntu@ubuntu:~$ sudo xfs_repair -v /dev/sda3 > Phase 1 - find and verify superblock... > - block cache size set to 363760 entries > Phase 2 - using internal log > - zero log... > zero_log: head block 32468 tail block 31799 > ERROR: The filesystem has valuable metadata changes in a log which needs to > be replayed. Mount the filesystem to replay the log, and unmount it before > re-running xfs_repair. If you are unable to mount the filesystem, then use > the -L option to destroy the log and attempt a repair. > Note that destroying the log may cause corruption -- please attempt a mount > of the filesystem before doing this. > ubuntu@ubuntu:~$ ls /mnt/ > ubuntu@ubuntu:~$ sudo mount /dev/sda3 /mnt > ^C^C -> mount command hang indefinetely > > On other terminal (output from dmeg): > > [ 418.414325] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled > [ 418.428026] XFS (sda3): Mounting Filesystem > [ 418.511943] XFS (sda3): Starting recovery (logdev: internal) > [ 425.070536] XFS: Internal error XFS_WANT_CORRUPTED_GOTO at line 1557 of file /build/buildd/linux-3.8.0/fs/xfs/xfs_alloc.c. Caller 0xffffffffa06dae36 > [ 425.070536] > [ 425.070552] Pid: 5671, comm: mount Tainted: GF 3.8.0-19-generic #29-Ubuntu > [ 425.070556] Call Trace: > [ 425.070605] [] xfs_error_report+0x3c/0x40 [xfs] > [ 425.070646] [] ? xfs_free_extent+0xd6/0x120 [xfs] > [ 425.070682] [] xfs_free_ag_extent+0x2d6/0x740 [xfs] > [ 425.070717] [] xfs_free_extent+0xd6/0x120 [xfs] > [ 425.070751] [] ? kmem_zone_alloc+0x67/0xe0 [xfs] > [ 425.070797] [] xlog_recover_process_efi+0x170/0x1b0 [xfs] > [ 425.070830] [] ? xfs_iget+0x36f/0x690 [xfs] > [ 425.070869] [] xlog_recover_process_efis.isra.8+0x66/0xc0 [xfs] That's a corrupted freespace btree. Your only option at this point is to zero the log and hope that xfs_repair can clean everything up without too much loss. > Before attempting mounting with -L flag , do you want me to do > other things to assist in tracking this bug down? Damage has already been done, there's no way we can find the cause from the state you have on disk at this point, unfortunately. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sat May 18 20:32:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9AD227F3F for ; Sat, 18 May 2013 20:32:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 77DF78F8033 for ; Sat, 18 May 2013 18:32:12 -0700 (PDT) X-ASG-Debug-ID: 1368927130-04cbb05fe53d0580001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id aEQooGPghYVngTOM for ; Sat, 18 May 2013 18:32:11 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As8NADwrmFF5LH3D/2dsb2JhbABbgwiDArlJhRsEAX4XdIIfAQEEATocIwULCAMOBAYJJQ8FJQMNFBMUh3MFvQAWjVoUgR0Hg1QDlzeRQYMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail06.adl2.internode.on.net with ESMTP; 19 May 2013 11:02:10 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UdsTp-00047h-4r; Sun, 19 May 2013 11:32:09 +1000 Date: Sun, 19 May 2013 11:32:09 +1000 From: Dave Chinner To: Dmitry Monakhov Cc: xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] xfstests: test data integrity under disk failure Message-ID: <20130519013209.GG6495@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: test data integrity under disk failure References: <1368706052-24391-1-git-send-email-dmonakhov@openvz.org> <20130516233153.GI24635@dastard> <878v3cv63e.fsf@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <878v3cv63e.fsf@openvz.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1368927130 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 18, 2013 at 04:13:25PM +0400, Dmitry Monakhov wrote: > On Fri, 17 May 2013 09:31:53 +1000, Dave Chinner wrote: > > On Thu, May 16, 2013 at 04:07:32PM +0400, Dmitry Monakhov wrote: > > > Parallels team have old good tool called hwflush-check which is server/client > > > application for testing data integrity under system/disk failure conditions. > > > Usually we run hwflush-check on two different hosts and use PMU to trigger real > > > power failure of the client as a whole unit. This tests may be used for > > > SSD checking (some of them are known to have probelms with hwflush). > > > I hope it will be good to share it with community. > > > > > > This tests simulate just one disk failure while client system should > > > survive this failure. This test extend idea of shared/305. > > > 1) Run hwflush-check server and client on same host as usual > > > 2) Simulare disk failure via blkdev failt injection API aka 'make-it-fail' > > > 3) Umount failed device > > > 4) Makes disk operatable again > > > 5) Mount filesystem > > > 3) Check data integrity > > > > So, for local disk failure, why do we need a client/server network > > architecture? That just complicates the code, and AFAICT > > > > all the client does is send report report packets to server which > > contain an id number that is kept in memory. If on restart of the > > client after failure the ID in the report packet doesn't match what > > the server wants, then it fails the test. > > > > So, why is the server needed here? Just dump the IDs the client > > writes to the file on a device not being tested, and either diff > > them against a golden image or run a check to see all the IDs are > > monotonically increasing. That removes all the networking code from > > the test, the need for a client/server architecture, etc, and makes > > the test far easier to review > In fact the reason is quite simple. Initially the this tool was designed > for real disk cache testing under power failure conditions. And want to > share it with community. Off course it is possible to simplify things > for 'one hose' case but it is not too big. Let's review it one and keep > it simple but useful not just for local but also for real power failure > tests. It's more that you can't actually use for real power fail testing in xfstests. Keeping stuff in xfstests that the harness won't or can't ever use is just an added maintenance burden that we don't need. xfstests is not a dumping ground for random test source code that *might* be useful outside xfstests. Regression tests need to be as simple as possible so their functioning is obvious and easy to understand. There is nothing worse than a test failing and having to spend time determining if the test itself is failing or whether it's uncovered a real bug or not. And anytime I see a test with 500 lines of test infrasrtucture that can be replaced with a printf() call and some redirection in the test harness I see a test that is going to be trouble.... > Fairly to say that initial idea was to add persistent state to FIO. > But logic starts to getting too complex so we write hwflush-check. Sure, and now you want to put it in xfstests and the hwflush-check infrastructure is just too complex.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From jakub@bogusz.priv.pl Sun May 19 02:59:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5DA347F37 for ; Sun, 19 May 2013 02:59:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 45E5D8F8037 for ; Sun, 19 May 2013 00:59:13 -0700 (PDT) X-ASG-Debug-ID: 1368950350-04cbb05fe33deef0001-NocioJ Received: from mail.qboosh.pl (mail.qboosh.pl [217.73.31.61]) by cuda.sgi.com with ESMTP id j7l0WqqrodRWlVJ9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 19 May 2013 00:59:11 -0700 (PDT) X-Barracuda-Envelope-From: jakub@bogusz.priv.pl X-Barracuda-Apparent-Source-IP: 217.73.31.61 Received: by mail.qboosh.pl (Postfix, from userid 1000) id 9C1C887F01; Sun, 19 May 2013 09:59:51 +0200 (CEST) Date: Sun, 19 May 2013 09:59:51 +0200 From: Jakub Bogusz To: Dave Chinner Cc: xfs@oss.sgi.com, Christoph Hellwig Subject: Re: Polish translation update for xfsprogs 3.1.11 and xfsdump 3.1.3 Message-ID: <20130519075951.GA3070@mail> X-ASG-Orig-Subj: Re: Polish translation update for xfsprogs 3.1.11 and xfsdump 3.1.3 References: <20130514142827.GD32293@stranger.qboosh.pl> <20130517020017.GL24635@dastard> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130517020017.GL24635@dastard> User-Agent: Mutt/1.4.2.3i X-Barracuda-Connect: mail.qboosh.pl[217.73.31.61] X-Barracuda-Start-Time: 1368950351 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131392 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 17, 2013 at 12:00:17PM +1000, Dave Chinner wrote: > On Tue, May 14, 2013 at 04:28:27PM +0200, Jakub Bogusz wrote: > > Hello, > > > > I updated Polish translations for xfsprogs 3.1.11 and xfsdump 3.1.3. > > They are available at: > > http://qboosh.pl/pl.po/xfsprogs-3.1.11.pl.po > > http://qboosh.pl/pl.po/xfsdump-3.1.3.pl.po > > Thanks, Jakub. > > Out of interest, is there any way we can let you know about an > upcoming release so we can get translations done before the release > and hence ship them in the released package? You can mail me before the release, preferably attaching latest .pot file or pl.po after doing "make update-po". Christoph does so sometimes. You can also consider using TP (http://translationproject.org/) to maintain translations. This way you could probably gather translations to more languages. Regards, -- Jakub Bogusz http://qboosh.pl/ From yingli@cityu.edu.hk Sun May 19 13:39:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,LOTS_OF_MONEY autolearn=unavailable version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E5A7C7F37 for ; Sun, 19 May 2013 13:39:33 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5F5C4AC009 for ; Sun, 19 May 2013 11:39:29 -0700 (PDT) X-ASG-Debug-ID: 1368988755-04cbb05fe33fbdc0001-NocioJ Received: from sandra01.sys0.cityu.edu.hk (mx.um.cityu.edu.hk [144.214.4.124]) by cuda.sgi.com with ESMTP id 5gN9RhKCx3BmN2D7 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Sun, 19 May 2013 11:39:18 -0700 (PDT) X-Barracuda-Envelope-From: yingli@cityu.edu.hk X-Barracuda-Apparent-Source-IP: 144.214.4.124 Received: from SANDRA12.ad.cityu.edu.hk (144.214.4.136) by mx1.um.cityu.edu.hk (144.214.4.124) with Microsoft SMTP Server (TLS) id 14.1.438.0; Mon, 20 May 2013 02:39:14 +0800 Received: from SANDRA33.ad.cityu.edu.hk ([144.214.4.142]) by SANDRA12.ad.cityu.edu.hk ([144.214.4.136]) with mapi id 14.01.0438.000; Mon, 20 May 2013 02:39:13 +0800 From: "Prof. LI Ying" Subject: Propuesta de Empresas Thread-Topic: Propuesta de Empresas X-ASG-Orig-Subj: Propuesta de Empresas Thread-Index: Ac5UwCe9W/0Z7yBcRgW9jFcBDCRcyA== Date: Sun, 19 May 2013 18:39:12 +0000 Message-ID: <1AA65E81A8E09148A5BC92F6E9B2E6ACDAAC8F@sandra33> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [144.214.4.138] Content-Type: multipart/alternative; boundary="_000_1AA65E81A8E09148A5BC92F6E9B2E6ACDAAC8Fsandra33_" MIME-Version: 1.0 To: Undisclosed recipients:; X-Barracuda-Connect: mx.um.cityu.edu.hk[144.214.4.124] X-Barracuda-Start-Time: 1368988757 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131434 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 HTML_MESSAGE BODY: HTML included in message --_000_1AA65E81A8E09148A5BC92F6E9B2E6ACDAAC8Fsandra33_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Saludos desde China, Yo soy el se=F1or Li Hao, director financiero de China Merchants Bank, PRC = Tengo una propuesta discreta por la suma de 50 millones de euros, tras el = =E9xito de la transferencia, vamos a compartir en la proporci=F3n de cuaren= ta para usted y sesenta para m=ED. Si est=E1 interesado, por favor responde= r a l.hao63@qq.com para obtener informaci=F3n espec=EDfica. Atentamente, Li Hao. Disclaimer: This email (including any attachments) is for the use of the in= tended recipient only and may contain confidential information and/or copyr= ight material. If you are not the intended recipient, please notify the sen= der immediately and delete this email and all copies from your system. Any = unauthorized use, disclosure, reproduction, copying, distribution, or other= form of unauthorized dissemination of the contents is expressly prohibited= . --_000_1AA65E81A8E09148A5BC92F6E9B2E6ACDAAC8Fsandra33_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Saludos desde China,

 

Yo soy el se=F1or Li Hao, director financiero de China Merchants Bank,= PRC Tengo una propuesta discreta por la suma de 50 millones de euros, tras= el =E9xito de la transferencia, vamos a compartir en la proporci=F3n de cu= arenta para usted y sesenta para m=ED. Si est=E1 interesado, por favor responder a l.hao63@qq.com para obtener infor= maci=F3n espec=EDfica.

 

Atentamente,
Li Hao.



Disclaimer: This email (including any attachments) is for the use of the in= tended recipient only and may contain confidential information and/or copyr= ight material. If you are not the intended recipient, please notify the sen= der immediately and delete this email and all copies from your system. Any unauthorized use, disclosure, r= eproduction, copying, distribution, or other form of unauthorized dissemina= tion of the contents is expressly prohibited.

--_000_1AA65E81A8E09148A5BC92F6E9B2E6ACDAAC8Fsandra33_-- From export@jyjgroup.com.cn Sun May 19 18:51:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.0 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE, PART_CID_STOCK autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B0EA27CBF for ; Sun, 19 May 2013 18:51:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8C2C5304032 for ; Sun, 19 May 2013 16:51:14 -0700 (PDT) X-ASG-Debug-ID: 1369007465-04cb6c10baab9b0001-NocioJ Received: from mx137e.cnm.cn (mx137e.cnm.cn [118.145.23.135]) by cuda.sgi.com with ESMTP id Oi3W0epkEiig643S (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 19 May 2013 16:51:07 -0700 (PDT) X-Barracuda-Envelope-From: export@jyjgroup.com.cn X-Barracuda-Apparent-Source-IP: 118.145.23.135 Received: from kathy (unknown [14.105.96.20]) (Authenticated sender: export@jyjgroup.com.cn) by mx137e.cnm.cn (Bossmail) with ESMTP id 672E22BD456; Mon, 20 May 2013 07:50:51 +0800 (CST) Message-ID: <005e01ce54eb$bc5751d0$6a01a8c0@kathy> From: "Jin Yi Jia" To: Subject: dealer ! Date: Mon, 20 May 2013 07:50:57 +0800 X-ASG-Orig-Subj: dealer ! MIME-Version: 1.0 Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_000_0058_01CE552E.C3AE26F0" X-Priority: 1 X-MSMail-Priority: High X-Mailer: Microsoft Outlook Express 6.00.2900.3664 Disposition-Notification-To: "Jin Yi Jia" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3664 X-MID: 1989220231.955439220.4.1369007461.888641.29863 X-Rate: Yes X-Real-From: export@jyjgroup.com.cn X-Rcpt: ,wildliferangers@aol.com, ,wildo-waffen@web.de, ,wildriverrose5@aol.com, ,willywhiskers@att.net, ,winchester73@mchsi.com, ,winnarchery@hughes.net, ,winstonssc@aol.com, ,wl@waffen-leitsch.de, ,wml@thewml.org, ,wmrente@mail.com, ,wocanto@amazona-usa.com, ,wolfgang@wolfgangthegundoctor.com, ,wonderhacker@whateverdomain.com, ,work@safariclub.org, ,wowens@owensoutdoorsales.com, ,wrichter@terra.com.br, ,wurfscheiben1@wetel.net, ,www.info@tinstarranch.com, ,www.johnson3gun@earthlink.net, ,www.swansonville@charter.net, ,www@netbsd.org, ,wyatt@gunnies.com, ,wyoga@wyoga.org, ,wzinky@bsamail.org, ,xfs@oss.sgi.com, ,xiridiashooting@libero.it, ,yakala@hotmail.com, ,yef_shooting@yahoo.com, ,yerathel@salvatoretrapani.it, ,yk_corp@hanmail.net, ,yonca@yoncadavet.com, ,zape@netuno.com.br, ,zarzabal@adinet.com.uy, ,zd@beararmory.com, ,zed@kksb.com.my, ,zelger@bignami.it, ,zerodna@zerodna.com, ,zinkg@t-online.de, ,zkan@hotmail.com, ,zogni@libero.it, ,zrc@ascan-net.de, ,zveroboy@com2com.ru, X-Barracuda-Connect: mx137e.cnm.cn[118.145.23.135] X-Barracuda-Start-Time: 1369007467 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=EXTRA_MPART_TYPE, HTML_MESSAGE, PART_CID_STOCK, PART_CID_STOCK_LESS, T_TVD_FW_GRAPHIC_ID1 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.01 T_TVD_FW_GRAPHIC_ID1 BODY: T_TVD_FW_GRAPHIC_ID1 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 PART_CID_STOCK_LESS Has a spammy image attachment (by Content-ID, more specific) 0.00 PART_CID_STOCK Has a spammy image attachment (by Content-ID) This is a multi-part message in MIME format. ------=_NextPart_000_0058_01CE552E.C3AE26F0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0059_01CE552E.C3AE26F0" ------=_NextPart_001_0059_01CE552E.C3AE26F0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBTaXIsIA0KDQpIb3cgYXJlIHlvdSAhDQoNCldlIGFyZSBhIGxhcmdlIG1hbnVmYWN0dXJl ciBhbmQgZXhwb3J0ZXIgb2YgYWxsIGtpbmRzIG9mIHNlY3VyaXR5IHByb3RlY3Rpb24gcHJvZHVj dHMgZm9yIHBvbGljZSwgbWlsaXRhcnkgYW5kIGNpdmlsIHVzZSBmcm9tIGNoaW5hLA0KV2UgYXJl IGxvb2tpbmcgZm9yIGZvcmVpZ24gZGVhbGVycy8gaW1wb3J0ZXJzLyB0cmFkZXJzLyBidXllcnMg ZnJvbSBhbGwgb3ZlciB0aGUgd29ybGQgLg0KDQpXZSBtYWlubHkgcHJvZHVjZSB0aGUgZm9sbG93 aW5nIHByb2R1Y3RzOiANCiANCjEuIEJ1bGxldHByb29mIHNlcmllczoNCiAgVUhNV1BFIGZpYmVy DQogIGJ1bGxldHByb29mIHZlc3QgLyBib2R5IGFybW9yICAoTklKIElJSUEgbGV2ZWwpLA0KICBi dWxsZXRwcm9vZiBwbGF0ZSAodXBncmFkZSBJSUlBIHZlc3QgdG8gTklKIElJSSBvciBJViBsZXZl bCksIA0KICBiYWxsaXN0aWMgc2hpZWxkIChJSUlBIG9yIElJSSBsZXZlbCksIA0KICBidWxsZXRw cm9mIGhlbG1ldCAoSUlJQSBsZXZlbCksIA0KICBidWxsZXRwcm9vZiBmYWNlIG1hc2ssIA0KICBi dWxsZXRwcm9vZiB2ZWhpY2xlIChhcm1vcmVkIHZlaGljbGUpLCANCiAgYnVsbGV0cHJvb2YgYnJp ZWZjYXNlLi4uLg0KIA0KMi4gUG9saWNlIGR1dHkgZ2VhciA6DQogYW50aSByaW90IHN1aXRzICYg aGVsbWV0LCBhbnRpIHJpb3Qgc2hpZWxkLCBoYW5kY3VmZnMsIHN0YWJwcm9vZiB2ZXN0LCBtaWxp dGFyeSB1bmlmb3JtIGFuZCBib290cyBldGMuIA0KIA0KMy4gRXhwbG9zaW9uLXByb29mIHNlcmll czoNCiBleHBsb3NpdmUtcHJvb2YgYmxhbmtldCAmIGZlbmNlLCBib21iIGRpc3Bvc2FsIHN1aXRz LA0KIGV4cGxvc2l2ZXMgdHJhY2UgZGV0ZWN0b3IsIGRydWcvZHluYW1pdGUgZGV0ZWN0b3IuLi4u Lg0KIA0KNC4gU2VhcmNoIGFuZCBSZXNjdWUgc2VyaWVzOg0KbGFzZXIgY2FtZXJhIChuaWdodCB2 aXNpb24pIGZvciBhaXJwb3J0cywgaGFyYm9ycywgRnJvbnRpZXIgYW5kIGNvYXN0IGRlZmVuc2Ug dXNhZ2UgZXRjIC4NCg0KT3VyIHByb2R1Y3RzIGNhbiBiZSB3aWRlbHkgdXNlZCBmb3IgOiANCnBv bGljZSwgYXJteSwgc2VjdXJpdHkgYWdlbmNpZXMsICBtaWxpdGFyeSwgY2l2aWwsICBnb3Zlcm5t ZW50IG1pbmlzdHJ5IG9mIGRlZmVuY2UsIGh1bnRpbmcsIHBhdHJvbCB0ZWFtcywgDQpleGVjdXRp dmUgcHJvdGVjdGlvbiwgIHByaXNvbiwgIHByaXZhdGUgZGV0ZWN0aXZlcywgc2FmZXR5IGNvbnN1 bHRhbmN5LCAgbmF0aW9uYWwgc2VjdXJpdHkgYWdlbmNpZXMsIFZJUCBwcm90ZWN0aW9uLCANCmJv ZHlndWFyZCwgZ3VuIGhvbGRlciwgYW50aSB0ZXJyb3Igd29yaywgbGF3IGVuZm9yY2VtZW50IG9m ZmljZXIsICBzcGVjaWFsIGZvcmNlcywgYW50aS1waXJhY3kgcGF0cm9sIGluIHRoZSBzZWEgZXRj Lg0KDQpJbmNyZWFzaW5nIGF3YXJlbmVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlIGxpZmUgZnJvbSBo aWdoZXIgdGhyZWF0IGxldmVscyAsICANCldlIG1hbnVmYWN0dXJlIHNhZmV0eSBwcm9kdWN0cywg IFdlIG9ubHkgaGF2ZSBvbmUgcHVycG9zZSwgdG8gbWFrZSB5b3Ugc2FmZXIgIQ0KDQpXZSBoYXZl IGNhcGFiaWxpdHkgdG8gY29tcGxldGUgeW91ciBsYXJnZSBxdWFudGl0eSBvcmRlciBhbmQgb2Zm ZXIgbW9zdCBjb21wZXRpdGl2ZSBwcmljZSwNCklmIHlvdSBoYXZlIGludGVyZXN0cyBpbiByZXBy ZXNlbnRpbmcgb3VyIHNlY3VyaXR5IGl0ZW1zIGluIHlvdXIgbWFya2V0LCAgcGxzIHNlbmQgbWUg YSBlbWFpbCByZXBseSwgDQp0aGVuIEkgd2lsbCBvZmZlciBvdXIgd2Vic2l0ZSB3aXRoIG91ciBw cm9kdWN0IGNhdGFsb2d1ZSBhbmQgZGVhbGVyJ3MgcHJpY2UgZm9yIHlvdXIgcmVmZXJlbmNlIC4N Cg0KV2Ugd2lzaCB0byByZWNlaXZlIHlvdXIgaW5xdWlyeSBhdCBlYXJseSB0aW1lICENCkJlc3Qg cmVnYXJkcywNCk1pc3MgS2F0aHkgKHNhbGUgbWFuYWdlcikNCkUtbWFpbDogIGJ1bGxldHByb29m LXZlc3RAdG9tLmNvbSANCiAgICAgICAgICAgIGFybW9yZWQtdmVoaWNsZUB0b20uY29tDQoyMHRo LCBNYXkgMjAxMw0KDQo= ------=_NextPart_001_0059_01CE552E.C3AE26F0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 77u/PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9u YWwvL0VOIj4NCjxIVE1MIHhtbG5zOm8gPSAidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZp Y2U6b2ZmaWNlIj48SEVBRD4NCjxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9 InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC42 MDAwLjE3MDYzIiBuYW1lPUdFTkVSQVRPUj4NCjxTVFlMRT5CT0RZIHsNCglCQUNLR1JPVU5ELVBP U0lUSU9OOiBsZWZ0IHRvcDsgTUFSR0lOLVRPUDogMTVweDsgRk9OVC1TSVpFOiAxMHB0OyBNQVJH SU4tTEVGVDogMTBweDsgQ09MT1I6ICMwMDAwMDA7IEJBQ0tHUk9VTkQtUkVQRUFUOiByZXBlYXQ7 IEZPTlQtRkFNSUxZOiBTZWdvZSBVSQ0KfQ0KPC9TVFlMRT4NCjwvSEVBRD4NCjxCT0RZIGJnQ29s b3I9I2ZmZmZmZiBiYWNrZ3JvdW5kPWNpZDowMDU3MDFjZTU0ZWIkYjU4M2JiMDAkNmEwMWE4YzBA a2F0aHk+DQo8RElWPjxGT05UIGZhY2U9IlRpbWVzIE5ldyBSb21hbiIgc2l6ZT0zPkRlYXIgU2ly LDwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIiBz aXplPTM+PC9GT05UPiZuYnNwOzwvRElWPg0KPERJVj5Ib3cmbmJzcDthcmUgeW91Jm5ic3A7ITxC Uj48QlI+V2UgYXJlIGEgbGFyZ2UgbWFudWZhY3R1cmVyIGFuZCBleHBvcnRlciBvZiANCmFsbCBr aW5kcyBvZiBzZWN1cml0eSBwcm90ZWN0aW9uIHByb2R1Y3RzIGZvciBwb2xpY2UsIG1pbGl0YXJ5 IGFuZCBjaXZpbCB1c2UgDQpmcm9tIGNoaW5hLDwvRElWPg0KPERJVj5XZSBhcmUgbG9va2luZyBm b3IgZm9yZWlnbiBkZWFsZXJzLyBpbXBvcnRlcnMvIHRyYWRlcnMvJm5ic3A7YnV5ZXJzIGZyb20g DQphbGwgb3ZlciB0aGUgd29ybGQgLjxCUj48QlI+PFNUUk9ORz5XZSZuYnNwO21haW5seSZuYnNw O3Byb2R1Y2UgdGhlIGZvbGxvd2luZyANCnByb2R1Y3RzOjwvU1RST05HPiZuYnNwOzxCUj4mbmJz cDs8QlI+PFNUUk9ORz4xLiBCdWxsZXRwcm9vZiANCnNlcmllczo8L1NUUk9ORz48QlI+Jm5ic3A7 IFVITVdQRSBmaWJlcjxCUj4mbmJzcDsgYnVsbGV0cHJvb2YgdmVzdCAvIGJvZHkgDQphcm1vciZu YnNwOyAoTklKIElJSUEgbGV2ZWwpLDxCUj4mbmJzcDsgYnVsbGV0cHJvb2YgcGxhdGUgKHVwZ3Jh ZGUgSUlJQSB2ZXN0IHRvIA0KTklKIElJSSBvciBJViBsZXZlbCksIDxCUj4mbmJzcDsgYmFsbGlz dGljIHNoaWVsZCAoSUlJQSBvciBJSUkgbGV2ZWwpLCANCjxCUj4mbmJzcDsgYnVsbGV0cHJvZiBo ZWxtZXQgKElJSUEgbGV2ZWwpLCA8QlI+Jm5ic3A7IGJ1bGxldHByb29mIGZhY2UgbWFzaywgDQo8 QlI+Jm5ic3A7IGJ1bGxldHByb29mIHZlaGljbGUgKGFybW9yZWQgdmVoaWNsZSksIDxCUj4mbmJz cDsgYnVsbGV0cHJvb2YgDQpicmllZmNhc2UuLi4uPEJSPiZuYnNwOzxCUj48U1RST05HPjIuJm5i c3A7UG9saWNlIGR1dHkgDQpnZWFyJm5ic3A7OjxCUj48L1NUUk9ORz4mbmJzcDthbnRpIHJpb3Qg c3VpdHMgJmFtcDsgaGVsbWV0LCBhbnRpIHJpb3Qgc2hpZWxkLCANCmhhbmRjdWZmcywgc3RhYnBy b29mIHZlc3QsJm5ic3A7bWlsaXRhcnkgdW5pZm9ybSBhbmQgYm9vdHMgDQpldGMuJm5ic3A7PEJS PjxTVFJPTkc+Jm5ic3A7PEJSPjMuIEV4cGxvc2lvbi1wcm9vZiANCnNlcmllczo8L1NUUk9ORz48 QlI+Jm5ic3A7ZXhwbG9zaXZlLXByb29mIGJsYW5rZXQgJmFtcDsgZmVuY2UsIGJvbWIgZGlzcG9z YWwgDQpzdWl0cyw8QlI+Jm5ic3A7ZXhwbG9zaXZlcyB0cmFjZSBkZXRlY3RvciwgZHJ1Zy9keW5h bWl0ZSANCmRldGVjdG9yLi4uLi48QlI+Jm5ic3A7PEJSPjxTVFJPTkc+NC4gU2VhcmNoIGFuZCBS ZXNjdWUgDQpzZXJpZXM6PEJSPjwvU1RST05HPmxhc2VyIGNhbWVyYSAobmlnaHQgdmlzaW9uKSBm b3IgYWlycG9ydHMsIGhhcmJvcnMsIEZyb250aWVyIA0KYW5kIGNvYXN0IGRlZmVuc2UgdXNhZ2Ug ZXRjIC48L0RJVj4NCjxESVY+PEJSPjxTVFJPTkc+T3VyIHByb2R1Y3RzIGNhbiBiZSB3aWRlbHkg dXNlZCBmb3IgOjwvU1RST05HPiA8L0RJVj4NCjxESVY+cG9saWNlLCBhcm15LCBzZWN1cml0eSBh Z2VuY2llcywmbmJzcDsgbWlsaXRhcnksJm5ic3A7Y2l2aWwsJm5ic3A7IA0KZ292ZXJubWVudCBt aW5pc3RyeSBvZiBkZWZlbmNlLCBodW50aW5nLCBwYXRyb2wgdGVhbXMsIDwvRElWPg0KPERJVj5l eGVjdXRpdmUgcHJvdGVjdGlvbiwmbmJzcDsgcHJpc29uLCZuYnNwOyBwcml2YXRlIGRldGVjdGl2 ZXMsIHNhZmV0eSANCmNvbnN1bHRhbmN5LCZuYnNwOyBuYXRpb25hbCBzZWN1cml0eSBhZ2VuY2ll cywmbmJzcDtWSVAgcHJvdGVjdGlvbiwgPC9ESVY+DQo8RElWPmJvZHlndWFyZCwmbmJzcDtndW4g aG9sZGVyLCZuYnNwO2FudGkgdGVycm9yIHdvcmssJm5ic3A7bGF3IGVuZm9yY2VtZW50IA0Kb2Zm aWNlciwmbmJzcDsgc3BlY2lhbCBmb3JjZXMsJm5ic3A7YW50aS1waXJhY3kgcGF0cm9sIGluIHRo ZSBzZWEgDQpldGMuPEJSPjxCUj48U1RST05HPkluY3JlYXNpbmcgYXdhcmVuZXNzIG9mIHRoZSB2 YWx1ZSBvZiB0aGUgbGlmZSBmcm9tIGhpZ2hlciANCnRocmVhdCBsZXZlbHMgLCZuYnNwOyA8QlI+ V2UgbWFudWZhY3R1cmUgc2FmZXR5IHByb2R1Y3RzLCZuYnNwOyBXZSBvbmx5IGhhdmUgb25lIA0K cHVycG9zZSwgdG8gbWFrZSB5b3Ugc2FmZXIgITwvU1RST05HPjwvRElWPg0KPERJVj48Rk9OVCBm YWNlPSJUaW1lcyBOZXcgUm9tYW4iIHNpemU9Mz48L0ZPTlQ+Jm5ic3A7PC9ESVY+DQo8RElWPldl IGhhdmUgY2FwYWJpbGl0eSB0byBjb21wbGV0ZSB5b3VyIGxhcmdlIHF1YW50aXR5IG9yZGVyIGFu ZCBvZmZlciBtb3N0IA0KY29tcGV0aXRpdmUgcHJpY2UsPEJSPklmIHlvdSBoYXZlIGludGVyZXN0 cyBpbiByZXByZXNlbnRpbmcgb3VyIA0Kc2VjdXJpdHkmbmJzcDtpdGVtcyBpbiB5b3VyIG1hcmtl dCwmbmJzcDsgcGxzIHNlbmQgbWUgYSBlbWFpbCByZXBseSwgPEJSPnRoZW4gSSANCndpbGwgb2Zm ZXIgb3VyIHdlYnNpdGUgd2l0aCBvdXIgcHJvZHVjdCBjYXRhbG9ndWUgYW5kIGRlYWxlcidzIHBy aWNlIGZvciB5b3VyIA0KcmVmZXJlbmNlIC48QlI+PEJSPldlIHdpc2ggdG8gcmVjZWl2ZSB5b3Vy IGlucXVpcnkgYXQgZWFybHkgdGltZSAhPEJSPkJlc3QgDQpyZWdhcmRzLDxCUj48U1RST05HPk1p c3MgS2F0aHk8L1NUUk9ORz4mbmJzcDsoc2FsZSBtYW5hZ2VyKTwvRElWPg0KPERJVj5FLW1haWw6 Jm5ic3A7IDxBIA0KaHJlZj0ibWFpbHRvOmJ1bGxldHByb29mLXZlc3RAdG9tLmNvbSI+YnVsbGV0 cHJvb2YtdmVzdEB0b20uY29tPC9BPiANCjxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPEEgDQpocmVmPSJtYWlsdG86 YXJtb3JlZC12ZWhpY2xlQHRvbS5jb20iPmFybW9yZWQtdmVoaWNsZUB0b20uY29tPC9BPjxCUj48 Rk9OVCANCmZhY2U9QXJpYWwgc2l6ZT0yPjxGT05UIGZhY2U9IlRpbWVzIE5ldyBSb21hbiIgc2l6 ZT0zPjIwdGgsJm5ic3A7TWF5IA0KMjAxMzwvRk9OVD48QlI+PEJSPjwvRElWPjwvRk9OVD48L0JP RFk+PC9IVE1MPg0K ------=_NextPart_001_0059_01CE552E.C3AE26F0-- ------=_NextPart_000_0058_01CE552E.C3AE26F0 Content-Type: image/jpeg; name="bubbles.jpg" Content-Transfer-Encoding: base64 Content-ID: <005701ce54eb$b583bb00$6a01a8c0@kathy> /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAAAf/b AIQABAMDAwMDBAMDBAYEAwQGBwUEBAUHCAYGBwYGCAoICQkJCQgKCgwMDAwMCgwMDQ0MDBERERER FBQUFBQUFBQUFAEEBQUIBwgPCgoPFA4ODhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU FBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgB4AKAAwERAAIRAQMRAf/EAGwAAQEBAQEBAQAAAAAAAAAA AAABAgMEBQgBAQEBAQEBAQAAAAAAAAAAAAABAgMEBgcQAQEBAQEAAgICAgMBAAAAAAABEQIDITES BEETYSJRcTJCEQEBAQEBAQEAAAAAAAAAAAAAARECIRIx/9oADAMBAAIRAxEAPwD9SPzB8yAAAAAA AAKAoAAAAACgAKALgGAuQDAAAAAAAAAAAAAAMgGAYCYCAAAIAIAAAAAAAAAAAIAIAAAAAAAAAAAA AAAAAAAAAAAAAAACgKAAAAoACgAC4C4AAAAACgCgAAAAAAAAAIIAAAYCYBgIAAAgAAgAAAAAAAAA CIAAAAAAAAAAAAAAAAAAAAAAAAAKAoAAACgKAALgKAAAoqKAKAAAAAAAAAAAAAACAAACCAAGAmAg AACAACAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAAAoCgAAKAAoAuAoAAKKAAKAAKKKAAAAAAAAAGIY YAAAAACCACCCAGAmAgAAAACCAAAAAAACCAAAAAAAAAAAAAAAAAAAAAoCgAAKAoAAsgKACigACiii gACgCgAAGAAAYoAIAAAAIIAAAIAIIIIIAAmAYCAAAIIAAAAAAAAiAAAAAAAAAAAAAAAAAAACqAAA oCgADUgAKKAKAAKqgKKAACqoAYAAAAAAAAAACCACAACCAACCCCCCAAJYCAAAIAIAAAAAAAiAAAAA AAAAAAAAAAAACqAAAoCgADUgAKKKAKBiqooAAoooAouIGAYC4ABihgGAYBgGIGAmAYBgJgGAggAg AgggAiIAggBgMgAAIAIAAAAAAAiAAAAAAAAAAAAAAACqAAAoCgADUgAKKKAKqgKKAqqAYC4BgLgC hgKKAAAAKGAYGGIYYABgGCYmAYgmAmAAAgggggggggCIBYDIAAACCAAAAAAAIgAAAAAAAAAAAAAq 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 AAAAAAAAAAAAAAAAAAAAAAAAAA//2Q== ------=_NextPart_000_0058_01CE552E.C3AE26F0-- From dave@fromorbit.com Sun May 19 18:51:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 69F8C7CBF for ; Sun, 19 May 2013 18:51:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4A506304032 for ; Sun, 19 May 2013 16:51:39 -0700 (PDT) X-ASG-Debug-ID: 1369007496-04bdf04223414190002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id AlOq7JH0f6IBkEGz for ; Sun, 19 May 2013 16:51:37 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSBOoM+A6h4gyEq Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:35 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDO2-00069h-LU for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yT-J0 for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 03/14] xfs: Don't reference the EFI after it is freed Date: Mon, 20 May 2013 09:51:10 +1000 X-ASG-Orig-Subj: [PATCH 03/14] xfs: Don't reference the EFI after it is freed Message-Id: <1369007481-15185-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007497 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner --- fs/xfs/xfs_extfree_item.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index c0f3750..452920a 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -305,11 +305,12 @@ xfs_efi_release(xfs_efi_log_item_t *efip, { ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { - __xfs_efi_release(efip); - /* recovery needs us to drop the EFI reference, too */ if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) __xfs_efi_release(efip); + + __xfs_efi_release(efip); + /* efip may now have been freed, do not reference it again. */ } } -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7A46C7F4C for ; Sun, 19 May 2013 18:51:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 381C08F8033 for ; Sun, 19 May 2013 16:51:38 -0700 (PDT) X-ASG-Debug-ID: 1369007496-04bdf04223414190001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 4e0aTFAl7Xzb69BC for ; Sun, 19 May 2013 16:51:36 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuQRAIdkmVF5LH3D/2dsb2JhbABagwgwjB21GAR8F3SCfDuBAgOIQA2bZJ9OjgSBOoM+A6h4gyEq Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:35 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDO2-00069e-In for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yH-Ey for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 00/14] xfs: fixes for 3.10-rc2 (update) Date: Mon, 20 May 2013 09:51:07 +1000 X-ASG-Orig-Subj: [PATCH 00/14] xfs: fixes for 3.10-rc2 (update) Message-Id: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007496 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA717 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_SA717 Custom Rule BSF_SC0_SA717 Hi Ben, THis is my current patch queue for 3.10-rc2. It contains the same first 6 patches as posted here: http://oss.sgi.com/pipermail/xfs/2013-May/026366.html This update adds another 8 patches that fix attribute bugs on CRC enabled filesystems. These patches make the attr group in xfstests pass rather than assert fail or oops. From dave@fromorbit.com Sun May 19 18:51:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2D5FB29E06 for ; Sun, 19 May 2013 18:51:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id DAF648F8033 for ; Sun, 19 May 2013 16:51:44 -0700 (PDT) X-ASG-Debug-ID: 1369007496-04bdf04223414190003-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id lqzddEBojFoXinE4 for ; Sun, 19 May 2013 16:51:43 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au0LAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYGBk5AxsZiAy7P44EgS6DSgOoeIMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDO2-00069x-TA for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003z3-Qb for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 11/14] xfs: remote attribute tail zeroing does too much Date: Mon, 20 May 2013 09:51:18 +1000 X-ASG-Orig-Subj: [PATCH 11/14] xfs: remote attribute tail zeroing does too much Message-Id: <1369007481-15185-12-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007498 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When an attribute data does not fill then entire remote block, we zero the remaining part of the buffer. This, however, needs to take into account that the buffer has a header, and so the offset where zeroing starts and the length of zeroing need to take this into account. Otherwise we end up with zeros over the end of the attribute value when CRCs are enabled. While there, make sure we only ask to map an extent that covers the remaining range of the attribute, rather than asking every time for the full length of remote data. If the remote attribute blocks are contiguous with other parts of the attribute tree, it will map those blocks as well and we can potentially zero them incorrectly. We can also get buffer size mistmatches when trying to read or remove the remote attribute, and this can lead to not finding the correct buffer when looking it up in cache. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index bcdc07c..e207bf0 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -296,10 +296,7 @@ xfs_attr_rmtval_set( * and we may not need that many, so we have to handle this when * allocating the blocks below. */ - if (!crcs) - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); - else - blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); + blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, XFS_ATTR_FORK); @@ -394,8 +391,11 @@ xfs_attr_rmtval_set( */ lblkno = args->rmtblkno; valuelen = args->valuelen; + blkcnt = args->rmtblkcnt; while (valuelen > 0) { int byte_cnt; + int hdr_size; + int dblkcnt; char *buf; /* @@ -404,7 +404,7 @@ xfs_attr_rmtval_set( xfs_bmap_init(args->flist, args->firstblock); nmap = 1; error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, &map, &nmap, + blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); if (error) return(error); @@ -413,26 +413,25 @@ xfs_attr_rmtval_set( (map.br_startblock != HOLESTARTBLOCK)); dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); + dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); - bp = xfs_buf_get(mp->m_ddev_targp, dblkno, blkcnt, 0); + bp = xfs_buf_get(mp->m_ddev_targp, dblkno, dblkcnt, 0); if (!bp) return ENOMEM; bp->b_ops = &xfs_attr3_rmt_buf_ops; - - byte_cnt = BBTOB(bp->b_length); - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); - if (valuelen < byte_cnt) - byte_cnt = valuelen; - buf = bp->b_addr; - buf += xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, + + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); + byte_cnt = min_t(int, valuelen, byte_cnt); + hdr_size = xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, byte_cnt, bp); - memcpy(buf, src, byte_cnt); + ASSERT(hdr_size + byte_cnt <= BBTOB(bp->b_length)); - if (byte_cnt < BBTOB(bp->b_length)) - xfs_buf_zero(bp, byte_cnt, - BBTOB(bp->b_length) - byte_cnt); + memcpy(buf + hdr_size, src, byte_cnt); + + if (byte_cnt + hdr_size < BBTOB(bp->b_length)) + xfs_buf_zero(bp, byte_cnt + hdr_size, + BBTOB(bp->b_length) - byte_cnt - hdr_size); error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ xfs_buf_relse(bp); @@ -442,9 +441,9 @@ xfs_attr_rmtval_set( src += byte_cnt; valuelen -= byte_cnt; offset += byte_cnt; - hdrcnt--; lblkno += map.br_blockcount; + blkcnt -= map.br_blockcount; } ASSERT(valuelen == 0); return 0; -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F027529E06 for ; Sun, 19 May 2013 18:51:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D044E8F8033 for ; Sun, 19 May 2013 16:51:45 -0700 (PDT) X-ASG-Debug-ID: 1369007496-04bdf04223414190004-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id szJIk5AW2vhAVnC0 for ; Sun, 19 May 2013 16:51:44 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jV0ngTqDPgOoeIMhKoEs Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDO2-00069t-RA for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yu-OV for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 09/14] xfs: remote attribute lookups require the value length Date: Mon, 20 May 2013 09:51:16 +1000 X-ASG-Orig-Subj: [PATCH 09/14] xfs: remote attribute lookups require the value length Message-Id: <1369007481-15185-10-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007503 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When reading a remote attribute, to correctly calculate the length of the data buffer for CRC enable filesystems, we need to know the length of the attribute data. We get this information when we look up the attribute, but we don't store it in the args structure along with the other remote attr information we get from the lookup. Add this information to the args structure so we can use it appropriately. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 8eeb88f..0bce1b3 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -2332,9 +2332,10 @@ xfs_attr3_leaf_lookup_int( if (!xfs_attr_namesp_match(args->flags, entry->flags)) continue; args->index = probe; + args->valuelen = be32_to_cpu(name_rmt->valuelen); args->rmtblkno = be32_to_cpu(name_rmt->valueblk); args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, - be32_to_cpu(name_rmt->valuelen)); + args->valuelen); return XFS_ERROR(EEXIST); } } -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:47 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D9BBA29E10 for ; Sun, 19 May 2013 18:51:47 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id AA65C304043 for ; Sun, 19 May 2013 16:51:47 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04bdf042244141c0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id N3wkg36WCBJwPVtk for ; Sun, 19 May 2013 16:51:45 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSEeAOoeIMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:45 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDO2-00069f-JM for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yK-GA for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 01/14] xfs: fix sub-page blocksize data integrity writes Date: Mon, 20 May 2013 09:51:08 +1000 X-ASG-Orig-Subj: [PATCH 01/14] xfs: fix sub-page blocksize data integrity writes Message-Id: <1369007481-15185-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007505 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner --- fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 2b2691b..f04eceb 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -725,6 +725,25 @@ xfs_convert_page( (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, i_size_read(inode)); + /* + * If the current map does not span the entire page we are about to try + * to write, then give up. The only way we can write a page that spans + * multiple mappings in a single writeback iteration is via the + * xfs_vm_writepage() function. Data integrity writeback requires the + * entire page to be written in a single attempt, otherwise the part of + * the page we don't write here doesn't get written as part of the data + * integrity sync. + * + * For normal writeback, we also don't attempt to write partial pages + * here as it simply means that write_cache_pages() will see it under + * writeback and ignore the page until some pointin the future, at which + * time this will be the only page inteh file that needs writeback. + * Hence for more optimal IO patterns, we should always avoid partial + * page writeback due to multiple mappings on a page here. + */ + if (!xfs_imap_valid(inode, imap, end_offset)) + goto fail_unlock_page; + len = 1 << inode->i_blkbits; p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), PAGE_CACHE_SIZE); -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1CC3C29E11 for ; Sun, 19 May 2013 18:51:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0BF158F8035 for ; Sun, 19 May 2013 16:51:47 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cbb05fe540b9a0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id pQymhit1AhvXA9AB for ; Sun, 19 May 2013 16:51:46 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSBOoM+A6FThyWDISo Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:45 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-0006AA-O9 for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yd-Kp for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 05/14] xfs: fix missing KM_NOFS tags to keep lockdep happy Date: Mon, 20 May 2013 09:51:12 +1000 X-ASG-Orig-Subj: [PATCH 05/14] xfs: fix missing KM_NOFS tags to keep lockdep happy Message-Id: <1369007481-15185-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007505 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner There are several places where we use KM_SLEEP allocation contexts and use the fact that there are called from transaction context to add KM_NOFS where appropriate. Unfortunately, there are several places where the code makes this assumption but can be called from outside transaction context but with filesystem locks held. These places need explicit KM_NOFS annotations to avoid lockdep complaining about reclaim contexts. Signed-off-by: Dave Chinner --- fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_da_btree.c | 6 ++++-- fs/xfs/xfs_dir2_leaf.c | 2 +- fs/xfs/xfs_log_cil.c | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 82b70bd..0d25542 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1649,7 +1649,7 @@ xfs_alloc_buftarg( { xfs_buftarg_t *btp; - btp = kmem_zalloc(sizeof(*btp), KM_SLEEP); + btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOFS); btp->bt_mount = mp; btp->bt_dev = bdev->bd_dev; diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 9b26a99..41ea7e1 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c @@ -2464,7 +2464,8 @@ xfs_buf_map_from_irec( ASSERT(nirecs >= 1); if (nirecs > 1) { - map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), KM_SLEEP); + map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), + KM_SLEEP | KM_NOFS); if (!map) return ENOMEM; *mapp = map; @@ -2520,7 +2521,8 @@ xfs_dabuf_map( * Optimize the one-block case. */ if (nfsb != 1) - irecs = kmem_zalloc(sizeof(irec) * nfsb, KM_SLEEP); + irecs = kmem_zalloc(sizeof(irec) * nfsb, + KM_SLEEP | KM_NOFS); nirecs = nfsb; error = xfs_bmapi_read(dp, (xfs_fileoff_t)bno, nfsb, irecs, diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c index 721ba2f..da71a18 100644 --- a/fs/xfs/xfs_dir2_leaf.c +++ b/fs/xfs/xfs_dir2_leaf.c @@ -1336,7 +1336,7 @@ xfs_dir2_leaf_getdents( mp->m_sb.sb_blocksize); map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + (length * sizeof(struct xfs_bmbt_irec)), - KM_SLEEP); + KM_SLEEP | KM_NOFS); map_info->map_size = length; /* diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index e3d0b85..d0833b5 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -139,7 +139,7 @@ xlog_cil_prepare_log_vecs( new_lv = kmem_zalloc(sizeof(*new_lv) + niovecs * sizeof(struct xfs_log_iovec), - KM_SLEEP); + KM_SLEEP|KM_NOFS); /* The allocated iovec region lies beyond the log vector. */ new_lv->lv_iovecp = (struct xfs_log_iovec *)&new_lv[1]; -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 29E6329E12 for ; Sun, 19 May 2013 18:51:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 091548F8033 for ; Sun, 19 May 2013 16:51:48 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cb6c10c1aba30001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id anuiiSUG8oxXNtS0 for ; Sun, 19 May 2013 16:51:46 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au0LAIdkmVF5LH3D/2dsb2JhbABSCIMIwWUEfBd0gh8BAQUnLzMIGDEhGAMbGYd7Aw6yRA2IboxKgSEZhHgDlVKMAYIChSODISo Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:45 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-00069i-Mw for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yY-Ju for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 04/14] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Date: Mon, 20 May 2013 09:51:11 +1000 X-ASG-Orig-Subj: [PATCH 04/14] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Message-Id: <1369007481-15185-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007505 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email From: Dave Chinner Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner --- fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..dfa5c05 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) return 0; - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); - if (error) { - xfs_trans_cancel(tp, 0); - return (error); - } - /* * We don't want to race with a quotaoff so take the quotaoff lock. - * (We don't hold an inode lock, so there's nothing else to stop - * a quotaoff from happening). (XXXThis doesn't currently happen - * because we take the vfslock before calling xfs_qm_sysent). + * We don't hold an inode lock, so there's nothing else to stop + * a quotaoff from happening. */ mutex_lock(&q->qi_quotaofflock); /* - * Get the dquot (locked), and join it to the transaction. - * Allocate the dquot if this doesn't exist. + * Get the dquot (locked) before we start, as we need to do a + * transaction to allocate it if it doesn't exist. Once we have the + * dquot, unlock it so we can start the next transaction safely. We hold + * a reference to the dquot, so it's safe to do this unlock/lock without + * it being reclaimed in the mean time. */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { - xfs_trans_cancel(tp, XFS_TRANS_ABORT); + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); + if (error) { ASSERT(error != ENOENT); goto out_unlock; } + xfs_dqunlock(dqp); + + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), + 0, 0, XFS_DEFAULT_LOG_COUNT); + if (error) { + xfs_trans_cancel(tp, 0); + goto out_unlock; + } + + xfs_dqlock(dqp); xfs_trans_dqjoin(tp, dqp); ddq = &dqp->q_core; -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5F7F229E10 for ; Sun, 19 May 2013 18:51:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 400AF304043 for ; Sun, 19 May 2013 16:51:49 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cb6c10c1aba30002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id IEkWIJUtCtH6APbA for ; Sun, 19 May 2013 16:51:47 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au0LAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYGBk5AxsZiAy7P44EgS4Mgz4DqHiDISo Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:46 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-00069w-SB for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yy-Pd for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 10/14] xfs: remote attribute read too short Date: Mon, 20 May 2013 09:51:17 +1000 X-ASG-Orig-Subj: [PATCH 10/14] xfs: remote attribute read too short Message-Id: <1369007481-15185-11-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007507 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Reading a maximally size remote attribute fails when CRCs are enabled with this verification error: XFS (vdb): remote attribute header does not match required off/len/owner) There are two reasons for this, the first being that the length of the buffer being read is determined from the args->rmtblkcnt which doesn't take into account CRC headers. Hence the mapped length ends up being too short and so we need to calculate it directly from the value length. The second is that the byte count of valid data within a buffer is capped by the length of the data and so doesn't take into account that the buffer might be longer due to headers. Hence we need to calculate the data space in the buffer first before calculating the actual byte count of data. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index aad95b0..bcdc07c 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -52,9 +52,11 @@ xfs_attr3_rmt_blocks( struct xfs_mount *mp, int attrlen) { - int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, - mp->m_sb.sb_blocksize); - return (attrlen + buflen - 1) / buflen; + if (xfs_sb_version_hascrc(&mp->m_sb)) { + int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); + return (attrlen + buflen - 1) / buflen; + } + return XFS_B_TO_FSB(mp, attrlen); } static bool @@ -206,8 +208,9 @@ xfs_attr_rmtval_get( while (valuelen > 0) { nmap = ATTR_RMTVALUE_MAPSIZE; + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, map, &nmap, + blkcnt, map, &nmap, XFS_BMAPI_ATTRFORK); if (error) return error; @@ -227,8 +230,8 @@ xfs_attr_rmtval_get( if (error) return error; - byte_cnt = min_t(int, valuelen, BBTOB(bp->b_length)); - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); + byte_cnt = min_t(int, valuelen, byte_cnt); src = bp->b_addr; if (xfs_sb_version_hascrc(&mp->m_sb)) { -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A877E29E11 for ; Sun, 19 May 2013 18:51:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6F9E98F8033 for ; Sun, 19 May 2013 16:51:49 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04bdf042244141c0003-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id QSGA0sHfJzfESAIS for ; Sun, 19 May 2013 16:51:47 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSBOoM+A6h4gyEq Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:46 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-0006AK-UZ for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003z7-Rb for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 12/14] xfs: correctly map remote attr buffers during removal Date: Mon, 20 May 2013 09:51:19 +1000 X-ASG-Orig-Subj: [PATCH 12/14] xfs: correctly map remote attr buffers during removal Message-Id: <1369007481-15185-13-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007507 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner If we don't map the buffers correctly (same as for get/set operations) then the incore buffer lookup will fail. If a block number matches but a length is wrong, then debug kernels will ASSERT fail in _xfs_buf_find() due to the length mismatch. Ensure that we map the buffers correctly by basing the length of the buffer on the attribute data length rather than the remote block count. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index e207bf0..d8bcb2d 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -468,19 +468,25 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) mp = args->dp->i_mount; /* - * Roll through the "value", invalidating the attribute value's - * blocks. + * Roll through the "value", invalidating the attribute value's blocks. + * Note that args->rmtblkcnt is the minimum number of data blocks we'll + * see for a CRC enabled remote attribute. Each extent will have a + * header, and so we may have more blocks than we realise here. If we + * fail to map the blocks correctly, we'll have problems with the buffer + * lookups. */ lblkno = args->rmtblkno; - valuelen = args->rmtblkcnt; + valuelen = args->valuelen; + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); while (valuelen > 0) { + int dblkcnt; + /* * Try to remember where we decided to put the value. */ nmap = 1; error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, &map, &nmap, - XFS_BMAPI_ATTRFORK); + blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); if (error) return(error); ASSERT(nmap == 1); @@ -488,28 +494,31 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) (map.br_startblock != HOLESTARTBLOCK)); dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); + dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); /* * If the "remote" value is in the cache, remove it. */ - bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK); + bp = xfs_incore(mp->m_ddev_targp, dblkno, dblkcnt, XBF_TRYLOCK); if (bp) { xfs_buf_stale(bp); xfs_buf_relse(bp); bp = NULL; } - valuelen -= map.br_blockcount; + valuelen -= XFS_ATTR3_RMT_BUF_SPACE(mp, + XFS_FSB_TO_B(mp, map.br_blockcount)); lblkno += map.br_blockcount; + blkcnt -= map.br_blockcount; + blkcnt = max(blkcnt, xfs_attr3_rmt_blocks(mp, valuelen)); } /* * Keep de-allocating extents until the remote-value region is gone. */ + blkcnt = lblkno - args->rmtblkno; lblkno = args->rmtblkno; - blkcnt = args->rmtblkcnt; done = 0; while (!done) { xfs_bmap_init(args->flist, args->firstblock); -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 87C8729E15 for ; Sun, 19 May 2013 18:51:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 263B6AC002 for ; Sun, 19 May 2013 16:51:48 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04bdf042244141c0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id q9AB6kcRGQFJ4t9U for ; Sun, 19 May 2013 16:51:46 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSBOoM+A6FThyWBWIFJKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:45 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-0006AB-Oh for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yi-Lg for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 06/14] xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Date: Mon, 20 May 2013 09:51:13 +1000 X-ASG-Orig-Subj: [PATCH 06/14] xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Message-Id: <1369007481-15185-7-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007506 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- fs/xfs/xfs_da_btree.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 41ea7e1..0b8b2a1 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c @@ -270,6 +270,7 @@ xfs_da3_node_read_verify( break; return; case XFS_ATTR_LEAF_MAGIC: + case XFS_ATTR3_LEAF_MAGIC: bp->b_ops = &xfs_attr3_leaf_buf_ops; bp->b_ops->verify_read(bp); return; -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E847B29E13 for ; Sun, 19 May 2013 18:51:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 63E26AC002 for ; Sun, 19 May 2013 16:51:49 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cbb05fe540b9a0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id hElSaE7jczjMvp02 for ; Sun, 19 May 2013 16:51:47 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSBOoM+A6FThyWDISo Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:45 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-0006AC-Ot for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003ym-Mb for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 07/14] xfs: xfs_attr_shortform_allfit() does not handle attr3 format. Date: Mon, 20 May 2013 09:51:14 +1000 X-ASG-Orig-Subj: [PATCH 07/14] xfs: xfs_attr_shortform_allfit() does not handle attr3 format. Message-Id: <1369007481-15185-8-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007507 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfstests generic/117 fails with: XFS: Assertion failed: leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) indicating a function that does not handle the attr3 format correctly. Fix it. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 08d5457..8eeb88f 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -931,20 +931,22 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) */ int xfs_attr_shortform_allfit( - struct xfs_buf *bp, - struct xfs_inode *dp) + struct xfs_buf *bp, + struct xfs_inode *dp) { - xfs_attr_leafblock_t *leaf; - xfs_attr_leaf_entry_t *entry; + struct xfs_attr_leafblock *leaf; + struct xfs_attr_leaf_entry *entry; xfs_attr_leaf_name_local_t *name_loc; - int bytes, i; + struct xfs_attr3_icleaf_hdr leafhdr; + int bytes; + int i; leaf = bp->b_addr; - ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC)); + xfs_attr3_leaf_hdr_from_disk(&leafhdr, leaf); + entry = xfs_attr3_leaf_entryp(leaf); - entry = &leaf->entries[0]; bytes = sizeof(struct xfs_attr_sf_hdr); - for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) { + for (i = 0; i < leafhdr.count; entry++, i++) { if (entry->flags & XFS_ATTR_INCOMPLETE) continue; /* don't copy partial entries */ if (!(entry->flags & XFS_ATTR_LOCAL)) @@ -954,15 +956,15 @@ xfs_attr_shortform_allfit( return(0); if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) return(0); - bytes += sizeof(struct xfs_attr_sf_entry)-1 + bytes += sizeof(struct xfs_attr_sf_entry) - 1 + name_loc->namelen + be16_to_cpu(name_loc->valuelen); } if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && (dp->i_d.di_format != XFS_DINODE_FMT_BTREE) && (bytes == sizeof(struct xfs_attr_sf_hdr))) - return(-1); - return(xfs_attr_shortform_bytesfit(dp, bytes)); + return -1; + return xfs_attr_shortform_bytesfit(dp, bytes); } /* -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:51:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E99BF29E1B for ; Sun, 19 May 2013 18:51:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D8E3C304053 for ; Sun, 19 May 2013 16:51:51 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cb6c10c1aba30003-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id LuLXBlYSx12GeP9F for ; Sun, 19 May 2013 16:51:50 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Au8LAIdkmVF5LH3D/2dsb2JhbABagwjBZQQBexd0gh8BAQUnLzMIGDE5AxsZiAy7P44EgRIogz4DoVOHJYMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:50 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDO2-00069g-KR for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yO-Hq for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 02/14] xfs: fix rounding in xfs_free_file_space Date: Mon, 20 May 2013 09:51:09 +1000 X-ASG-Orig-Subj: [PATCH 02/14] xfs: fix rounding in xfs_free_file_space Message-Id: <1369007481-15185-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007508 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The offset passed into xfs_free_file_space() needs to be rounded down to a certain size, but the rounding mask is built by a 32 bit variable. Hence the mask will always mask off the upper 32 bits of the offset and lead to incorrect writeback and invalidation ranges. This is not actually exposed as a bug because we writeback and invalidate from the rounded offset to the end of the file, and hence the offset we are actually punching a hole out of will always be covered by the code. This needs fixing, however, if we ever want to use exact ranges for writeback/invalidation here... Signed-off-by: Dave Chinner --- fs/xfs/xfs_vnodeops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 1501f4f..0176bb2 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -1453,7 +1453,7 @@ xfs_free_file_space( xfs_mount_t *mp; int nimap; uint resblks; - uint rounding; + xfs_off_t rounding; int rt; xfs_fileoff_t startoffset_fsb; xfs_trans_t *tp; @@ -1482,7 +1482,7 @@ xfs_free_file_space( inode_dio_wait(VFS_I(ip)); } - rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); + rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); ioffset = offset & ~(rounding - 1); error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, -1); -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:52:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 73DFA29E36 for ; Sun, 19 May 2013 18:52:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1269EAC001 for ; Sun, 19 May 2013 16:52:02 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cb6c10c1aba30004-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id KEWIj6qBJa8ECC7j for ; Sun, 19 May 2013 16:51:55 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBVYzCBgxOQMbGYgMuz+NXSeBOoM+A6h4gyEqgSw Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:55 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-0006AD-QA for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003yp-NZ for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 08/14] xfs: remote attribute allocation may be contiguous Date: Mon, 20 May 2013 09:51:15 +1000 X-ASG-Orig-Subj: [PATCH 08/14] xfs: remote attribute allocation may be contiguous Message-Id: <1369007481-15185-9-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007511 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When CRCs are enabled, there may be multiple allocations made if the headers cause a length overflow. This, however, does not mean that the number of headers required increases, as the second and subsequent extents may be contiguous with the previous extent. Hence when we map the extents to write the attribute data, we may end up with less extents than allocations made. Hence the assertion that we consume th enumber of headers we calculated in the allocation loop is incorrect and needs to be removed. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index dee8446..aad95b0 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -359,6 +359,11 @@ xfs_attr_rmtval_set( * into requiring more blocks. e.g. for 512 byte blocks, we'll * spill for another block every 9 headers we require in this * loop. + * + * Note that this can result in contiguous allocation of blocks, + * so we don't use all the space we allocate for headers as we + * have one less header for each contiguous allocation that + * occurs in the map/write loop below. */ if (crcs && blkcnt == 0) { int total_len; @@ -439,7 +444,6 @@ xfs_attr_rmtval_set( lblkno += map.br_blockcount; } ASSERT(valuelen == 0); - ASSERT(hdrcnt == 0); return 0; } -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:52:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3849229E36 for ; Sun, 19 May 2013 18:52:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AD01DAC001 for ; Sun, 19 May 2013 16:52:02 -0700 (PDT) X-ASG-Debug-ID: 1369007516-04cb6c10b8aba50001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id wsCVePEyQ6kDlk4c for ; Sun, 19 May 2013 16:52:01 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSBOoM+A6FThyWDISqBLCQ Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:55 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDOC-00069z-VX for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:45 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003zD-Sw for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 13/14] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Date: Mon, 20 May 2013 09:51:20 +1000 X-ASG-Orig-Subj: [PATCH 13/14] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Message-Id: <1369007481-15185-14-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007516 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining the entries in two leaves when the destination leaf requires compaction. The temporary buffer ends up being copied back over the original destination buffer, so the header in the temporary buffer needs to contain all the information that is in the destination buffer. To make sure the temporary buffer is fully initialised, once we've set up the temporary incore header appropriately, write is back to the temporary buffer before starting to move entries around. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 0bce1b3..79ece72 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -2181,14 +2181,24 @@ xfs_attr3_leaf_unbalance( struct xfs_attr_leafblock *tmp_leaf; struct xfs_attr3_icleaf_hdr tmphdr; - tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); - memset(tmp_leaf, 0, state->blocksize); - memset(&tmphdr, 0, sizeof(tmphdr)); + tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP); + + /* + * Copy the header into the temp leaf so that all the stuff + * not in the incore header is present and gets copied back in + * once we've moved all the entries. + */ + memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf)); + memset(&tmphdr, 0, sizeof(tmphdr)); tmphdr.magic = savehdr.magic; tmphdr.forw = savehdr.forw; tmphdr.back = savehdr.back; tmphdr.firstused = state->blocksize; + + /* write the header to the temp buffer to initialise it */ + xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr); + if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, drop_blk->bp, &drophdr)) { xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, -- 1.7.10.4 From dave@fromorbit.com Sun May 19 18:52:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EFFFD29E22 for ; Sun, 19 May 2013 18:52:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 719C0AC004 for ; Sun, 19 May 2013 16:52:04 -0700 (PDT) X-ASG-Debug-ID: 1369007505-04cb6c10c1aba30005-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 9oIQF2qAFw2QVyhG for ; Sun, 19 May 2013 16:52:01 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwLAIdkmVF5LH3D/2dsb2JhbABagwjBZQR8F3SCHwEBBScvMwgYMTkDGxmIDLs/jgSEeAOTZ41shyWDISqBLCQ Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 09:21:55 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeDON-0006AS-0K for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:55 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeDO2-0003zH-Ts for xfs@oss.sgi.com; Mon, 20 May 2013 09:51:34 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 14/14] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Date: Mon, 20 May 2013 09:51:21 +1000 X-ASG-Orig-Subj: [PATCH 14/14] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Message-Id: <1369007481-15185-15-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369007521 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_attr3_leaf_compact() uses a temporary buffer for compacting the the entries in a leaf. It copies the the original buffer into the temporary buffer, then zeros the original buffer completely. It then copies the entries back into the original buffer. However, the original buffer has not been correctly initialised, and so the movement of the entries goes horribly wrong. Make sure the zeroed destination buffer is fully initialised, and once we've set up the destination incore header appropriately, write is back to the buffer before starting to move entries around. While debugging this, the _d/_s prefixes weren't sufficient to remind me what buffer was what, so rename then all _src/_dst. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 79ece72..5b03d15 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -1445,11 +1445,12 @@ xfs_attr3_leaf_add_work( STATIC void xfs_attr3_leaf_compact( struct xfs_da_args *args, - struct xfs_attr3_icleaf_hdr *ichdr_d, + struct xfs_attr3_icleaf_hdr *ichdr_dst, struct xfs_buf *bp) { - xfs_attr_leafblock_t *leaf_s, *leaf_d; - struct xfs_attr3_icleaf_hdr ichdr_s; + struct xfs_attr_leafblock *leaf_src; + struct xfs_attr_leafblock *leaf_dst; + struct xfs_attr3_icleaf_hdr ichdr_src; struct xfs_trans *trans = args->trans; struct xfs_mount *mp = trans->t_mountp; char *tmpbuffer; @@ -1457,29 +1458,38 @@ xfs_attr3_leaf_compact( trace_xfs_attr_leaf_compact(args); tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); - ASSERT(tmpbuffer != NULL); memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); memset(bp->b_addr, 0, XFS_LBSIZE(mp)); + leaf_src = (xfs_attr_leafblock_t *)tmpbuffer; + leaf_dst = bp->b_addr; /* - * Copy basic information + * Copy the on-disk header back into the destination buffer to ensure + * all the information in the header that is not part of the incore + * header structure is preserved. */ - leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; - leaf_d = bp->b_addr; - ichdr_s = *ichdr_d; /* struct copy */ - ichdr_d->firstused = XFS_LBSIZE(mp); - ichdr_d->usedbytes = 0; - ichdr_d->count = 0; - ichdr_d->holes = 0; - ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); - ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; + memcpy(bp->b_addr, tmpbuffer, xfs_attr3_leaf_hdr_size(leaf_src)); + + /* Initialise the incore headers */ + ichdr_src = *ichdr_dst; /* struct copy */ + ichdr_dst->firstused = XFS_LBSIZE(mp); + ichdr_dst->usedbytes = 0; + ichdr_dst->count = 0; + ichdr_dst->holes = 0; + ichdr_dst->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_src); + ichdr_dst->freemap[0].size = ichdr_dst->firstused - + ichdr_dst->freemap[0].base; + + + /* write the header back to initialise the underlying buffer */ + xfs_attr3_leaf_hdr_to_disk(leaf_dst, ichdr_dst); /* * Copy all entry's in the same (sorted) order, * but allocate name/value pairs packed and in sequence. */ - xfs_attr3_leaf_moveents(leaf_s, &ichdr_s, 0, leaf_d, ichdr_d, 0, - ichdr_s.count, mp); + xfs_attr3_leaf_moveents(leaf_src, &ichdr_src, 0, leaf_dst, ichdr_dst, 0, + ichdr_src.count, mp); /* * this logs the entire buffer, but the caller must write the header * back to the buffer when it is finished modifying it. -- 1.7.10.4 From endries@cs.cornell.edu Sun May 19 21:01:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EF0227CBF for ; Sun, 19 May 2013 21:01:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 89CC0AC001 for ; Sun, 19 May 2013 19:01:39 -0700 (PDT) X-ASG-Debug-ID: 1369015297-04bdf0422541ae10001-NocioJ Received: from limestone5.mail.cornell.edu (limestone5.mail.cornell.edu [128.253.83.165]) by cuda.sgi.com with ESMTP id ca2lwfvh63CUjdI3 for ; Sun, 19 May 2013 19:01:38 -0700 (PDT) X-Barracuda-Envelope-From: endries@cs.cornell.edu X-Barracuda-Apparent-Source-IP: 128.253.83.165 X-CornellRouted: This message has been Routed already. Received: from alva02.serverfarm.cornell.edu (alva02.serverfarm.cornell.edu [128.84.106.39]) by limestone5.mail.cornell.edu (8.14.4/8.14.4) with ESMTP id r4K21ZhC026538; Sun, 19 May 2013 22:01:36 -0400 (EDT) Received: from sf-en-pub-002.serverfarm.cornell.edu (sf-en-pub-002.serverfarm.cornell.edu [132.236.207.16]) by alva02.serverfarm.cornell.edu (8.14.4/8.14.4) with ESMTP id r4K21aIE013876; Sun, 19 May 2013 22:01:36 -0400 Received: from sf-en-pub-002.serverfarm.cornell.edu (localhost [127.0.0.1]) by sf-en-pub-002.serverfarm.cornell.edu (Postfix) with ESMTP id 6635D42138; Sun, 19 May 2013 22:01:36 -0400 (EDT) Received: from sf-en-pub-002.serverfarm.cornell.edu (localhost [127.0.0.1]) by sf-en-pub-002.serverfarm.cornell.edu (Postfix) with ESMTP id 627B3414B7; Sun, 19 May 2013 22:01:36 -0400 (EDT) Date: Sun, 19 May 2013 22:01:36 -0400 (EDT) From: Josh Endries To: Eric Sandeen Cc: xfs@oss.sgi.com Message-ID: <76015885.11204.1369015296087.JavaMail.root@coecis.cornell.edu> In-Reply-To: <5196A4A7.6010805@sandeen.net> References: <731755347.10846.1368808589019.JavaMail.root@coecis.cornell.edu> <5196A4A7.6010805@sandeen.net> Subject: Re: Crash recovery/zero-byte file question MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Crash recovery/zero-byte file question Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [69.205.204.168] X-Mailer: Zimbra 8.0.2_GA_5569 (ZimbraWebClient - FF18 (Win)/8.0.2_GA_5569) Thread-Topic: Crash recovery/zero-byte file question Thread-Index: z2Idyv+q4rU8setfNHtOnrufgM7xhw== X-PMX-CORNELL: Alva02 X-Barracuda-Connect: limestone5.mail.cornell.edu[128.253.83.165] X-Barracuda-Start-Time: 1369015297 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131464 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hello, Thanks for the reply! > > We have a RHEL 6.3 machine with a large XFS mount that suffered a > > power outage. > > For starters, have you engaged your RH support folks? Unfortunately we don't have support for these machines. We have tons of RH machines and licenses, but only a few with paid support. Generally the (grant-funded) research machines don't include RH support. (And generally we don't run into problems like this. :)) > > When it came back up, it allegedly fixed itself, but > > now many files are zero bytes. I found a bug report/errata fix at RH > > that mentions something similar, which might be what we ran into. > > Which one? RH support can probably help you decide if that bug report > applies, and where/when it was fixed. This one: https://access.redhat.com/site/solutions/272673 You need a login to view that, though... I think this is the same one, which I just found today: https://bugzilla.redhat.com/show_bug.cgi?id=845233 That URL is currently broken for me, so here is a cache of it: http://webcache.googleusercontent.com/search?q=cache:3OjuPDd8A1AJ:https://bugzilla.redhat.com/show_bug.cgi%3Fid%3D845233+&cd=2&hl=en&ct=clnk&gl=us&client=firefox-a Reading this, I'm no longer sure we have a kernel with the fix. That machine is running: 2.6.32-279.el6.x86_64 I'm not really sure when the files were created or how long it was idle before the crash... I wonder if ctime/mtime would be reliable for the files. I also don't know how to reproduce the situation in order to test if it's fixed in a later kernel. I can pull the power out to test if I knew how to modify files ahead of time such that they would zero themselves out. > > We > > are running a kernel that should have the fix as far as I can tell, > > but we definitely have zero byte files that shouldn't be. > > shouldn't be because they had all been properly synced to disk > before the power loss, or? (just in general, files not fsynced > aren't guaranteed to be in any particular state if you lose power, > though of course there are certain expectations of timely flushing). No, I mean they shouldn't be zero normally. They weren't zero a week ago. In other words, the files definitely changed unexpectedly, I'm assuming due to the power outage. The files had not been touched in at least a few days before the crash, according to the researcher working on those files. If I read the report correctly, though, that might not matter much. > > My question is: is there a way to restore this or fix it before going > > to backups? Is it worth it to unmount and run xfs_check or similar? > > Unfortunately, since the system came up and appeared to be working, > > some users have been using that mount point. > > If you have backups that's probably the best option. There aren't any backups of these files. The researchers should be able to recreate them (I hope so); the data sets come from various places. It's a lot of data, so I was hoping I could recover something to lessen the downtime. They opted not to back up that directory because it's just too many TBs for normal backups. I'm not really expecting to be able to restore everything, I just want to put some effort in to getting back what I can before telling them they need to start over... Thanks, Josh From sandeen@sandeen.net Sun May 19 21:22:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4F1887CBF for ; Sun, 19 May 2013 21:22:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1A6108F8033 for ; Sun, 19 May 2013 19:22:57 -0700 (PDT) X-ASG-Debug-ID: 1369016576-04bdf0422641c170001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id pzcCut8V8pUfjKKq for ; Sun, 19 May 2013 19:22:56 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id E44A963C6050; Sun, 19 May 2013 21:22:55 -0500 (CDT) Message-ID: <519988FF.3010702@sandeen.net> Date: Sun, 19 May 2013 21:22:55 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Josh Endries CC: xfs@oss.sgi.com Subject: Re: Crash recovery/zero-byte file question References: <731755347.10846.1368808589019.JavaMail.root@coecis.cornell.edu> <5196A4A7.6010805@sandeen.net> <76015885.11204.1369015296087.JavaMail.root@coecis.cornell.edu> X-ASG-Orig-Subj: Re: Crash recovery/zero-byte file question In-Reply-To: <76015885.11204.1369015296087.JavaMail.root@coecis.cornell.edu> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369016576 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131466 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/19/13 9:01 PM, Josh Endries wrote: > Hello, > > Thanks for the reply! > >>> We have a RHEL 6.3 machine with a large XFS mount that suffered a >>> power outage. >> >> For starters, have you engaged your RH support folks? > > Unfortunately we don't have support for these machines. We have tons of RH machines and licenses, but only a few with paid support. Generally the (grant-funded) research machines don't include RH support. (And generally we don't run into problems like this. :)) ok >>> When it came back up, it allegedly fixed itself, but >>> now many files are zero bytes. I found a bug report/errata fix at RH >>> that mentions something similar, which might be what we ran into. >> >> Which one? RH support can probably help you decide if that bug report >> applies, and where/when it was fixed. > > This one: https://access.redhat.com/site/solutions/272673 well, that's a "solution" ;) > You need a login to view that, though... I think this is the same one, which I just found today: > > https://bugzilla.redhat.com/show_bug.cgi?id=845233 > > That URL is currently broken for me, so here is a cache of it: > > http://webcache.googleusercontent.com/search?q=cache:3OjuPDd8A1AJ:https://bugzilla.redhat.com/show_bug.cgi%3Fid%3D845233+&cd=2&hl=en&ct=clnk&gl=us&client=firefox-a > > Reading this, I'm no longer sure we have a kernel with the fix. That machine is running: > > 2.6.32-279.el6.x86_64 Right, and: "Fixed In Version: kernel-2.6.32-328.el6" So this is a known bug and fixed, but you're not running the fix it seems. > I'm not really sure when the files were created or how long it was > idle before the crash... I wonder if ctime/mtime would be reliable > for the files. I also don't know how to reproduce the situation in > order to test if it's fixed in a later kernel. I can pull the power > out to test if I knew how to modify files ahead of time such that > they would zero themselves out. I think you can be fairly certain that it's resolved in the above kernel. >>> We >>> are running a kernel that should have the fix as far as I can tell, >>> but we definitely have zero byte files that shouldn't be. >> >> shouldn't be because they had all been properly synced to disk >> before the power loss, or? (just in general, files not fsynced >> aren't guaranteed to be in any particular state if you lose power, >> though of course there are certain expectations of timely flushing). > > No, I mean they shouldn't be zero normally. They weren't zero a week > ago. In other words, the files definitely changed unexpectedly, I'm > assuming due to the power outage. The files had not been touched in > at least a few days before the crash, according to the researcher > working on those files. If I read the report correctly, though, that > might not matter much. ok >>> My question is: is there a way to restore this or fix it before going >>> to backups? Is it worth it to unmount and run xfs_check or similar? >>> Unfortunately, since the system came up and appeared to be working, >>> some users have been using that mount point. >> >> If you have backups that's probably the best option. > > There aren't any backups of these files. The researchers should be > able to recreate them (I hope so); the data sets come from various > places. It's a lot of data, so I was hoping I could recover something > to lessen the downtime. They opted not to back up that directory > because it's just too many TBs for normal backups. > > I'm not really expecting to be able to restore everything, I just > want to put some effort in to getting back what I can before telling > them they need to start over... Dave is more familiar with that bug than I am, but short of some serious forensics & luck, I don't think you'll be able to get things back. I'd update to the kernel mentioned above soon, though, and sorry about the hassle. :( -Eric > Thanks, > Josh > From dave@fromorbit.com Mon May 20 01:53:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9081F7F37 for ; Mon, 20 May 2013 01:53:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 13E22AC003 for ; Sun, 19 May 2013 23:53:12 -0700 (PDT) X-ASG-Debug-ID: 1369032790-04cbb05fe3420fc0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id tW6GB4GwmhbAj6fR for ; Sun, 19 May 2013 23:53:11 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0gh8BAQUnLzMIGDE5AxsZiAy7CY1dJ4E6gz4DoVOHJYMhKoEsAh4G Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:10 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJxz-0006qs-Jz for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJxz-0006Vj-G7 for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/6] xfs_repair: always use incore header for directory block checks Date: Mon, 20 May 2013 16:52:58 +1000 X-ASG-Orig-Subj: [PATCH 1/6] xfs_repair: always use incore header for directory block checks Message-Id: <1369032783-24973-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032790 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Otherwise we get failures to validate the block on CRC enabled filesystems. Signed-off-by: Dave Chinner --- repair/phase6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repair/phase6.c b/repair/phase6.c index 09052cc..6976d0c 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1849,7 +1849,7 @@ longform_dir2_check_leaf( if (!(leafhdr.magic == XFS_DIR2_LEAF1_MAGIC || leafhdr.magic == XFS_DIR3_LEAF1_MAGIC) || leafhdr.forw || leafhdr.back || - leafhdr.count < leaf->hdr.stale || + leafhdr.count < leafhdr.stale || leafhdr.count > xfs_dir3_max_leaf_ents(mp, leaf) || (char *)&ents[leafhdr.count] > (char *)bestsp) { -- 1.7.10.4 From dave@fromorbit.com Mon May 20 01:53:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 24A427F37 for ; Mon, 20 May 2013 01:53:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E3AF2304039 for ; Sun, 19 May 2013 23:53:14 -0700 (PDT) X-ASG-Debug-ID: 1369032792-04bdf04225429790001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id ysy7UdsJkO6v024p for ; Sun, 19 May 2013 23:53:12 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0gh8BAQUnLzMIGDE5AxsZiAy7CY4EhHgDoVOHJYMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:10 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJxz-0006qu-Ly for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJxz-0006Vs-Io for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/6] xfs_db: factor some common dir2 field parsing code. Date: Mon, 20 May 2013 16:53:00 +1000 X-ASG-Orig-Subj: [PATCH 3/6] xfs_db: factor some common dir2 field parsing code. Message-Id: <1369032783-24973-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032792 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Why duplicate it? Signed-off-by: Dave Chinner --- db/dir2.c | 172 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 84 insertions(+), 88 deletions(-) diff --git a/db/dir2.c b/db/dir2.c index 90378e6..594d9d2 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -189,6 +189,72 @@ const field_t da_node_hdr_flds[] = { { NULL } }; +/* + * Worker functions shared between either dir2/dir3 or block/data formats + */ +static int +__dir2_block_tail_offset( + struct xfs_dir2_data_hdr *block, + int startoff, + int idx) +{ + struct xfs_dir2_block_tail *btp; + + ASSERT(startoff == 0); + ASSERT(idx == 0); + btp = xfs_dir2_block_tail_p(mp, block); + return bitize((int)((char *)btp - (char *)block)); +} + +static int +__dir2_data_entries_count( + char *ptr, + char *endptr) +{ + int i; + + for (i = 0; ptr < endptr; i++) { + struct xfs_dir2_data_entry *dep; + struct xfs_dir2_data_unused *dup; + + dup = (xfs_dir2_data_unused_t *)ptr; + if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) + ptr += be16_to_cpu(dup->length); + else { + dep = (xfs_dir2_data_entry_t *)ptr; + ptr += xfs_dir2_data_entsize(dep->namelen); + } + } + return i; +} + +static char * +__dir2_data_entry_offset( + char *ptr, + char *endptr, + int idx) +{ + int i; + + for (i = 0; i < idx; i++) { + struct xfs_dir2_data_entry *dep; + struct xfs_dir2_data_unused *dup; + + ASSERT(ptr < endptr); + dup = (xfs_dir2_data_unused_t *)ptr; + if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) + ptr += be16_to_cpu(dup->length); + else { + dep = (xfs_dir2_data_entry_t *)ptr; + ptr += xfs_dir2_data_entsize(dep->namelen); + } + } + return ptr; +} + +/* + * Block format functions + */ static int dir2_block_hdr_count( void *obj, @@ -254,86 +320,50 @@ dir2_block_tail_offset( int startoff, int idx) { - struct xfs_dir2_data_hdr *block; - struct xfs_dir2_block_tail *btp; + struct xfs_dir2_data_hdr *block = obj; - ASSERT(startoff == 0); - ASSERT(idx == 0); - block = obj; ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); - btp = xfs_dir2_block_tail_p(mp, block); - return bitize((int)((char *)btp - (char *)block)); + return __dir2_block_tail_offset(block, startoff, idx); } -/*ARGSUSED*/ static int dir2_block_u_count( void *obj, int startoff) { - struct xfs_dir2_data_hdr *block; + struct xfs_dir2_data_hdr *block = obj; struct xfs_dir2_block_tail *btp; - char *endptr; - int i; - char *ptr; ASSERT(startoff == 0); - block = obj; if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC) return 0; - btp = xfs_dir2_block_tail_p(mp, block); - ptr = (char *)xfs_dir3_data_unused_p(block); - endptr = (char *)xfs_dir2_block_leaf_p(btp); - for (i = 0; ptr < endptr; i++) { - struct xfs_dir2_data_entry *dep; - struct xfs_dir2_data_unused *dup; - dup = (xfs_dir2_data_unused_t *)ptr; - if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) - ptr += be16_to_cpu(dup->length); - else { - dep = (xfs_dir2_data_entry_t *)ptr; - ptr += xfs_dir2_data_entsize(dep->namelen); - } - } - return i; + btp = xfs_dir2_block_tail_p(mp, block); + return __dir2_data_entries_count((char *)xfs_dir3_data_unused_p(block), + (char *)xfs_dir2_block_leaf_p(btp)); } -/*ARGSUSED*/ static int dir2_block_u_offset( void *obj, int startoff, int idx) { - struct xfs_dir2_data_hdr *block; + struct xfs_dir2_data_hdr *block = obj; struct xfs_dir2_block_tail *btp; - char *endptr; - int i; char *ptr; ASSERT(startoff == 0); - block = obj; ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); btp = xfs_dir2_block_tail_p(mp, block); - ptr = (char *)xfs_dir3_data_unused_p(block); - endptr = (char *)xfs_dir2_block_leaf_p(btp); - for (i = 0; i < idx; i++) { - struct xfs_dir2_data_entry *dep; - struct xfs_dir2_data_unused *dup; - - ASSERT(ptr < endptr); - dup = (xfs_dir2_data_unused_t *)ptr; - if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) - ptr += be16_to_cpu(dup->length); - else { - dep = (xfs_dir2_data_entry_t *)ptr; - ptr += xfs_dir2_data_entsize(dep->namelen); - } - } + ptr = __dir2_data_entry_offset((char *)xfs_dir3_data_unused_p(block), + (char *)xfs_dir2_block_leaf_p(btp), idx); return bitize((int)(ptr - (char *)block)); } +/* + * Data block format functions + */ static int dir2_data_union_freetag_count( void *obj, @@ -489,66 +519,32 @@ dir2_data_u_count( void *obj, int startoff) { - struct xfs_dir2_data_hdr *data; - char *endptr; - int i; - char *ptr; + struct xfs_dir2_data_hdr *data = obj; ASSERT(startoff == 0); - data = obj; if (be32_to_cpu(data->magic) != XFS_DIR2_DATA_MAGIC) return 0; - ptr = (char *)xfs_dir3_data_unused_p(data); - endptr = (char *)data + mp->m_dirblksize; - for (i = 0; ptr < endptr; i++) { - struct xfs_dir2_data_entry *dep; - struct xfs_dir2_data_unused *dup; - dup = (xfs_dir2_data_unused_t *)ptr; - if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) - ptr += be16_to_cpu(dup->length); - else { - dep = (xfs_dir2_data_entry_t *)ptr; - ptr += xfs_dir2_data_entsize(dep->namelen); - } - } - return i; + return __dir2_data_entries_count((char *)xfs_dir3_data_unused_p(data), + (char *)data + mp->m_dirblksize); } -/*ARGSUSED*/ static int dir2_data_u_offset( void *obj, int startoff, int idx) { - struct xfs_dir2_data_hdr *data; - char *endptr; - int i; + struct xfs_dir2_data_hdr *data = obj; char *ptr; ASSERT(startoff == 0); - data = obj; ASSERT(be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC); - ptr = (char *)xfs_dir3_data_unused_p(data); - endptr = (char *)data + mp->m_dirblksize; - for (i = 0; i < idx; i++) { - struct xfs_dir2_data_entry *dep; - struct xfs_dir2_data_unused *dup; - - ASSERT(ptr < endptr); - dup = (xfs_dir2_data_unused_t *)ptr; - if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) - ptr += be16_to_cpu(dup->length); - else { - dep = (xfs_dir2_data_entry_t *)ptr; - ptr += xfs_dir2_data_entsize(dep->namelen); - } - } + ptr = __dir2_data_entry_offset((char *)xfs_dir3_data_unused_p(data), + (char *)data + mp->m_dirblksize, idx); return bitize((int)(ptr - (char *)data)); } -/*ARGSUSED*/ int dir2_data_union_size( void *obj, -- 1.7.10.4 From dave@fromorbit.com Mon May 20 01:53:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D06A07F50 for ; Mon, 20 May 2013 01:53:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A9BBB304032 for ; Sun, 19 May 2013 23:53:13 -0700 (PDT) X-ASG-Debug-ID: 1369032790-04cbb05fe3420fc0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id lbCqr93d9xF7IXiJ for ; Sun, 19 May 2013 23:53:12 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AucLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0giABBVYzCEk5AxuIJbsJjgSBOoM+A6h4gyEq Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:10 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJxz-0006qr-JL for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJxz-0006Vg-F2 for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/6] xfsprogs: more CRC support patches Date: Mon, 20 May 2013 16:52:57 +1000 X-ASG-Orig-Subj: [PATCH 0/6] xfsprogs: more CRC support patches Message-Id: <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1368789205-19969-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032791 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [ well, really patches 31..36 :) ] Hi folks, More work on top of the original series of 30 patches, including xfs_db support for parsing the v3 directory format. Note that there are also two patches in here that convert both xfs_db and xfs_repair to use the libxfs directory block type definitions. While it may have once been convenient for them to have a basic definition, it does not lend itself to making the code support the v3 format quickly and concisely. Reusing the libxfs/kernel structure definitions and abstraction means that the code quickly becomes v3 aware and has just works. Right now this patchset and the current kernel patchset (all the attr fixes) runs through xfstests quite far on a 4k block size filesystem - all the generic tests pass, and most of the XFS specific tests that don't rely on write or attr output support in xfs_db also pass. I'll get the attr db support done tomorrow..... Cheers, Dave. From dave@fromorbit.com Mon May 20 01:53:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=TVD_PH_BODY_ACCOUNTS_PRE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2B1F97F55 for ; Mon, 20 May 2013 01:53:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 136D8304043 for ; Sun, 19 May 2013 23:53:20 -0700 (PDT) X-ASG-Debug-ID: 1369032795-04cb6c10b8c11a0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id k0op7rjn2yOBlEPU for ; Sun, 19 May 2013 23:53:18 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0gh8BAQUnLzMIGBgZOQMbGYgMuwmNXSeBLgyDPgOhU4clgyEqgSw Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:18 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJy9-0006r9-Q0 for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:17 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJy9-0006W7-Mf for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:17 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 6/6] xfs_repair: make directory freespace table CRC format aware. Date: Mon, 20 May 2013 16:53:03 +1000 X-ASG-Orig-Subj: [PATCH 6/6] xfs_repair: make directory freespace table CRC format aware. Message-Id: <1369032783-24973-7-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032798 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner We fail to take into account the format of the directory block when reading the best free space form a directory data block for free space block verification. This causes occasionaly failures in xfstests. Signed-off-by: Dave Chinner --- repair/phase6.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/repair/phase6.c b/repair/phase6.c index 1fdd4c8..2905a1c 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1395,6 +1395,7 @@ longform_dir2_entry_check_data( xfs_dir2_db_t db; xfs_dir2_data_entry_t *dep; xfs_dir2_data_unused_t *dup; + struct xfs_dir2_data_free *bf; char *endptr; int error; xfs_fsblock_t firstblock; @@ -1808,7 +1809,10 @@ _("entry \"%s\" in dir inode %" PRIu64 " inconsistent with .. value (%" PRIu64 " libxfs_dir2_data_log_header(tp, bp); libxfs_bmap_finish(&tp, &flist, &committed); libxfs_trans_commit(tp, 0); - freetab->ents[db].v = be16_to_cpu(d->bestfree[0].length); + + /* record the largest free space in the freetab for later checking */ + bf = xfs_dir3_data_bestfree_p(d); + freetab->ents[db].v = be16_to_cpu(bf[0].length); freetab->ents[db].s = 0; } -- 1.7.10.4 From dave@fromorbit.com Mon May 20 01:53:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AABCE7F54 for ; Mon, 20 May 2013 01:53:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 92301304043 for ; Sun, 19 May 2013 23:53:19 -0700 (PDT) X-ASG-Debug-ID: 1369032795-04cb6c10b8c11a0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id ZL50NPjLHbqr7llO for ; Sun, 19 May 2013 23:53:15 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0gh8BAQUaDS8zCBgxOQMbGYgMuwmOBIR4A6FThyWDISo Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:10 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJxz-0006qt-Kz for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJxz-0006Vn-Hq for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/6] xfs_db: convert directory parsing to use libxfs structure Date: Mon, 20 May 2013 16:52:59 +1000 X-ASG-Orig-Subj: [PATCH 2/6] xfs_db: convert directory parsing to use libxfs structure Message-Id: <1369032783-24973-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032795 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_db rolls it's own "opaque" directory types for the different block formats. All it cares about is where the headers end and the data starts, and none of the other details in the structures. Rather than duplicate this for the dir3 format, we already have perfectly good headers and abstraction functions for finding this information in libxfs. Using these means that the dir2 code used for printing fields, metadump and check need to be modified to use libxfs definitions. Signed-off-by: Dave Chinner --- db/check.c | 70 +++++++++++++++--------------- db/dir2.c | 133 ++++++++++++++++++++++++++++----------------------------- db/dir2.h | 25 ----------- db/dir2sf.c | 62 +++++++++++++-------------- db/metadump.c | 31 +++++++------- 5 files changed, 148 insertions(+), 173 deletions(-) diff --git a/db/check.c b/db/check.c index dadfa97..d490f81 100644 --- a/db/check.c +++ b/db/check.c @@ -278,9 +278,9 @@ static xfs_ino_t process_data_dir_v2(int *dot, int *dotdot, inodata_t *id, int v, xfs_dablk_t dabno, freetab_t **freetabp); -static xfs_dir2_data_free_t - *process_data_dir_v2_freefind(xfs_dir2_data_t *data, - xfs_dir2_data_unused_t *dup); +static xfs_dir2_data_free_t *process_data_dir_v2_freefind( + struct xfs_dir2_data_hdr *data, + struct xfs_dir2_data_unused *dup); static void process_dir(xfs_dinode_t *dip, blkmap_t *blkmap, inodata_t *id); static int process_dir_v2(xfs_dinode_t *dip, blkmap_t *blkmap, @@ -2188,11 +2188,11 @@ process_data_dir_v2( xfs_dir2_dataptr_t addr; xfs_dir2_data_free_t *bf; int bf_err; - xfs_dir2_block_t *block; + struct xfs_dir2_data_hdr *block; xfs_dir2_block_tail_t *btp = NULL; inodata_t *cid; int count; - xfs_dir2_data_t *data; + struct xfs_dir2_data_hdr *data; xfs_dir2_db_t db; xfs_dir2_data_entry_t *dep; xfs_dir2_data_free_t *dfp; @@ -2214,20 +2214,20 @@ process_data_dir_v2( data = iocur_top->data; block = iocur_top->data; - if (be32_to_cpu(block->hdr.magic) != XFS_DIR2_BLOCK_MAGIC && - be32_to_cpu(data->hdr.magic) != XFS_DIR2_DATA_MAGIC) { + if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC && + be32_to_cpu(data->magic) != XFS_DIR2_DATA_MAGIC) { if (!sflag || v) dbprintf(_("bad directory data magic # %#x for dir ino " "%lld block %d\n"), - be32_to_cpu(data->hdr.magic), id->ino, dabno); + be32_to_cpu(data->magic), id->ino, dabno); error++; return NULLFSINO; } db = xfs_dir2_da_to_db(mp, dabno); - bf = data->hdr.bestfree; - ptr = (char *)data->u; - if (be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC) { - btp = xfs_dir2_block_tail_p(mp, &block->hdr); + bf = xfs_dir3_data_bestfree_p(data); + ptr = (char *)xfs_dir3_data_unused_p(data); + if (be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC) { + btp = xfs_dir2_block_tail_p(mp, block); lep = xfs_dir2_block_leaf_p(btp); endptr = (char *)lep; if (endptr <= ptr || endptr > (char *)btp) { @@ -2372,7 +2372,7 @@ process_data_dir_v2( (*dot)++; } } - if (be32_to_cpu(data->hdr.magic) == XFS_DIR2_BLOCK_MAGIC) { + if (be32_to_cpu(data->magic) == XFS_DIR2_BLOCK_MAGIC) { endptr = (char *)data + mp->m_dirblksize; for (i = stale = 0; lep && i < be32_to_cpu(btp->count); i++) { if ((char *)&lep[i] >= endptr) { @@ -2404,9 +2404,8 @@ process_data_dir_v2( id->ino, dabno); error++; } - if (be32_to_cpu(data->hdr.magic) == XFS_DIR2_BLOCK_MAGIC && - count != be32_to_cpu(btp->count) - - be32_to_cpu(btp->stale)) { + if (be32_to_cpu(data->magic) == XFS_DIR2_BLOCK_MAGIC && + count != be32_to_cpu(btp->count) - be32_to_cpu(btp->stale)) { if (!sflag || v) dbprintf(_("dir %lld block %d bad block tail count %d " "(stale %d)\n"), @@ -2414,7 +2413,7 @@ process_data_dir_v2( be32_to_cpu(btp->stale)); error++; } - if (be32_to_cpu(data->hdr.magic) == XFS_DIR2_BLOCK_MAGIC && + if (be32_to_cpu(data->magic) == XFS_DIR2_BLOCK_MAGIC && stale != be32_to_cpu(btp->stale)) { if (!sflag || v) dbprintf(_("dir %lld block %d bad stale tail count %d\n"), @@ -2439,18 +2438,19 @@ process_data_dir_v2( static xfs_dir2_data_free_t * process_data_dir_v2_freefind( - xfs_dir2_data_t *data, + struct xfs_dir2_data_hdr *data, xfs_dir2_data_unused_t *dup) { - xfs_dir2_data_free_t *dfp; + struct xfs_dir2_data_free *bf; + struct xfs_dir2_data_free *dfp; xfs_dir2_data_aoff_t off; off = (xfs_dir2_data_aoff_t)((char *)dup - (char *)data); - if (be16_to_cpu(dup->length) < be16_to_cpu(data->hdr. - bestfree[XFS_DIR2_DATA_FD_COUNT - 1].length)) + bf = xfs_dir3_data_bestfree_p(data); + if (be16_to_cpu(dup->length) < + be16_to_cpu(bf[XFS_DIR2_DATA_FD_COUNT - 1].length)) return NULL; - for (dfp = &data->hdr.bestfree[0]; dfp < &data->hdr. - bestfree[XFS_DIR2_DATA_FD_COUNT]; dfp++) { + for (dfp = bf; dfp < &bf[XFS_DIR2_DATA_FD_COUNT]; dfp++) { if (be16_to_cpu(dfp->offset) == 0) return NULL; if (be16_to_cpu(dfp->offset) == off) @@ -3421,20 +3421,20 @@ process_sf_dir_v2( int i8; xfs_ino_t lino; int offset; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; xfs_dir2_sf_entry_t *sfe; int v; - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); + sf = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); addlink_inode(id); v = verbose || id->ilist; if (v) dbprintf(_("dir %lld entry . %lld\n"), id->ino, id->ino); (*dot)++; - sfe = xfs_dir2_sf_firstentry(&sf->hdr); + sfe = xfs_dir2_sf_firstentry(sf); offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); - for (i = sf->hdr.count - 1, i8 = 0; i >= 0; i--) { - if ((__psint_t)sfe + xfs_dir2_sf_entsize(&sf->hdr,sfe->namelen) - + for (i = sf->count - 1, i8 = 0; i >= 0; i--) { + if ((__psint_t)sfe + xfs_dir2_sf_entsize(sf, sfe->namelen) - (__psint_t)sf > be64_to_cpu(dip->di_size)) { if (!sflag) dbprintf(_("dir %llu bad size in entry at %d\n"), @@ -3443,7 +3443,7 @@ process_sf_dir_v2( error++; break; } - lino = xfs_dir2_sfe_get_ino(&sf->hdr, sfe); + lino = xfs_dir2_sfe_get_ino(sf, sfe); if (lino > XFS_DIR2_MAX_SHORT_INUM) i8++; cid = find_inode(lino, 1); @@ -3473,8 +3473,8 @@ process_sf_dir_v2( } offset = xfs_dir2_sf_get_offset(sfe) + - xfs_dir2_sf_entsize(&sf->hdr, sfe->namelen); - sfe = xfs_dir2_sf_nextentry(&sf->hdr, sfe); + xfs_dir2_sf_entsize(sf, sfe->namelen); + sfe = xfs_dir2_sf_nextentry(sf, sfe); } if (i < 0 && (__psint_t)sfe - (__psint_t)sf != be64_to_cpu(dip->di_size)) { @@ -3484,13 +3484,13 @@ process_sf_dir_v2( (uint)((char *)sfe - (char *)sf)); error++; } - if (offset + (sf->hdr.count + 2) * sizeof(xfs_dir2_leaf_entry_t) + + if (offset + (sf->count + 2) * sizeof(xfs_dir2_leaf_entry_t) + sizeof(xfs_dir2_block_tail_t) > mp->m_dirblksize) { if (!sflag) dbprintf(_("dir %llu offsets too high\n"), id->ino); error++; } - lino = xfs_dir2_sf_get_parent_ino(&sf->hdr); + lino = xfs_dir2_sf_get_parent_ino(sf); if (lino > XFS_DIR2_MAX_SHORT_INUM) i8++; cid = find_inode(lino, 1); @@ -3504,11 +3504,11 @@ process_sf_dir_v2( } if (v) dbprintf(_("dir %lld entry .. %lld\n"), id->ino, lino); - if (i8 != sf->hdr.i8count) { + if (i8 != sf->i8count) { if (!sflag) dbprintf(_("dir %lld i8count mismatch is %d should be " "%d\n"), - id->ino, sf->hdr.i8count, i8); + id->ino, sf->i8count, i8); error++; } (*dotdot)++; diff --git a/db/dir2.c b/db/dir2.c index 7094a83..90378e6 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -58,13 +58,13 @@ const field_t dir2_hfld[] = { { NULL } }; -#define BOFF(f) bitize(offsetof(xfs_dir2_block_t, f)) -#define DOFF(f) bitize(offsetof(xfs_dir2_data_t, f)) -#define FOFF(f) bitize(offsetof(xfs_dir2_free_t, f)) -#define LOFF(f) bitize(offsetof(xfs_dir2_leaf_t, f)) -#define NOFF(f) bitize(offsetof(xfs_da_intnode_t, f)) +#define BOFF(f) bitize(offsetof(struct xfs_dir2_data_hdr, f)) +#define DOFF(f) bitize(offsetof(struct xfs_dir2_data_hdr, f)) +#define FOFF(f) bitize(offsetof(struct xfs_dir2_free, f)) +#define LOFF(f) bitize(offsetof(struct xfs_dir2_leaf, f)) +#define NOFF(f) bitize(offsetof(struct xfs_da_intnode, f)) const field_t dir2_flds[] = { - { "bhdr", FLDT_DIR2_DATA_HDR, OI(BOFF(hdr)), dir2_block_hdr_count, + { "bhdr", FLDT_DIR2_DATA_HDR, OI(BOFF(magic)), dir2_block_hdr_count, FLD_COUNT, TYP_NONE }, { "bu", FLDT_DIR2_DATA_UNION, dir2_block_u_offset, dir2_block_u_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, @@ -72,7 +72,7 @@ const field_t dir2_flds[] = { dir2_block_leaf_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, { "btail", FLDT_DIR2_BLOCK_TAIL, dir2_block_tail_offset, dir2_block_tail_count, FLD_OFFSET|FLD_COUNT, TYP_NONE }, - { "dhdr", FLDT_DIR2_DATA_HDR, OI(DOFF(hdr)), dir2_data_hdr_count, + { "dhdr", FLDT_DIR2_DATA_HDR, OI(DOFF(magic)), dir2_data_hdr_count, FLD_COUNT, TYP_NONE }, { "du", FLDT_DIR2_DATA_UNION, dir2_data_u_offset, dir2_data_u_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, @@ -189,66 +189,62 @@ const field_t da_node_hdr_flds[] = { { NULL } }; -/*ARGSUSED*/ static int dir2_block_hdr_count( void *obj, int startoff) { - xfs_dir2_block_t *block; + struct xfs_dir2_data_hdr *block; ASSERT(startoff == 0); block = obj; - return be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC; + return be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC; } -/*ARGSUSED*/ static int dir2_block_leaf_count( void *obj, int startoff) { - xfs_dir2_block_t *block; - xfs_dir2_block_tail_t *btp; + struct xfs_dir2_data_hdr *block; + struct xfs_dir2_block_tail *btp; ASSERT(startoff == 0); block = obj; - if (be32_to_cpu(block->hdr.magic) != XFS_DIR2_BLOCK_MAGIC) + if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC) return 0; - btp = xfs_dir2_block_tail_p(mp, &block->hdr); + btp = xfs_dir2_block_tail_p(mp, block); return be32_to_cpu(btp->count); } -/*ARGSUSED*/ static int dir2_block_leaf_offset( void *obj, int startoff, int idx) { - xfs_dir2_block_t *block; - xfs_dir2_block_tail_t *btp; - xfs_dir2_leaf_entry_t *lep; + struct xfs_dir2_data_hdr *block; + struct xfs_dir2_block_tail *btp; + struct xfs_dir2_leaf_entry *lep; ASSERT(startoff == 0); block = obj; - ASSERT(be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC); - btp = xfs_dir2_block_tail_p(mp, &block->hdr); + ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); + btp = xfs_dir2_block_tail_p(mp, block); lep = xfs_dir2_block_leaf_p(btp) + idx; return bitize((int)((char *)lep - (char *)block)); } -/*ARGSUSED*/ static int dir2_block_tail_count( void *obj, int startoff) { - xfs_dir2_block_t *block; + struct xfs_dir2_data_hdr *block; ASSERT(startoff == 0); block = obj; - return be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC; + return be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC; } /*ARGSUSED*/ @@ -258,14 +254,14 @@ dir2_block_tail_offset( int startoff, int idx) { - xfs_dir2_block_t *block; - xfs_dir2_block_tail_t *btp; + struct xfs_dir2_data_hdr *block; + struct xfs_dir2_block_tail *btp; ASSERT(startoff == 0); ASSERT(idx == 0); block = obj; - ASSERT(be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC); - btp = xfs_dir2_block_tail_p(mp, &block->hdr); + ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); + btp = xfs_dir2_block_tail_p(mp, block); return bitize((int)((char *)btp - (char *)block)); } @@ -275,22 +271,23 @@ dir2_block_u_count( void *obj, int startoff) { - xfs_dir2_block_t *block; - xfs_dir2_block_tail_t *btp; - xfs_dir2_data_entry_t *dep; - xfs_dir2_data_unused_t *dup; + struct xfs_dir2_data_hdr *block; + struct xfs_dir2_block_tail *btp; char *endptr; int i; char *ptr; ASSERT(startoff == 0); block = obj; - if (be32_to_cpu(block->hdr.magic) != XFS_DIR2_BLOCK_MAGIC) + if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC) return 0; - btp = xfs_dir2_block_tail_p(mp, &block->hdr); - ptr = (char *)block->u; + btp = xfs_dir2_block_tail_p(mp, block); + ptr = (char *)xfs_dir3_data_unused_p(block); endptr = (char *)xfs_dir2_block_leaf_p(btp); for (i = 0; ptr < endptr; i++) { + struct xfs_dir2_data_entry *dep; + struct xfs_dir2_data_unused *dup; + dup = (xfs_dir2_data_unused_t *)ptr; if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) ptr += be16_to_cpu(dup->length); @@ -309,21 +306,22 @@ dir2_block_u_offset( int startoff, int idx) { - xfs_dir2_block_t *block; - xfs_dir2_block_tail_t *btp; - xfs_dir2_data_entry_t *dep; - xfs_dir2_data_unused_t *dup; + struct xfs_dir2_data_hdr *block; + struct xfs_dir2_block_tail *btp; char *endptr; int i; char *ptr; ASSERT(startoff == 0); block = obj; - ASSERT(be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC); - btp = xfs_dir2_block_tail_p(mp, &block->hdr); - ptr = (char *)block->u; + ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); + btp = xfs_dir2_block_tail_p(mp, block); + ptr = (char *)xfs_dir3_data_unused_p(block); endptr = (char *)xfs_dir2_block_leaf_p(btp); for (i = 0; i < idx; i++) { + struct xfs_dir2_data_entry *dep; + struct xfs_dir2_data_unused *dup; + ASSERT(ptr < endptr); dup = (xfs_dir2_data_unused_t *)ptr; if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) @@ -478,11 +476,11 @@ dir2_data_hdr_count( void *obj, int startoff) { - xfs_dir2_data_t *data; + struct xfs_dir2_data_hdr *data; ASSERT(startoff == 0); data = obj; - return be32_to_cpu(data->hdr.magic) == XFS_DIR2_DATA_MAGIC; + return be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC; } /*ARGSUSED*/ @@ -491,20 +489,21 @@ dir2_data_u_count( void *obj, int startoff) { - xfs_dir2_data_t *data; - xfs_dir2_data_entry_t *dep; - xfs_dir2_data_unused_t *dup; + struct xfs_dir2_data_hdr *data; char *endptr; int i; char *ptr; ASSERT(startoff == 0); data = obj; - if (be32_to_cpu(data->hdr.magic) != XFS_DIR2_DATA_MAGIC) + if (be32_to_cpu(data->magic) != XFS_DIR2_DATA_MAGIC) return 0; - ptr = (char *)data->u; + ptr = (char *)xfs_dir3_data_unused_p(data); endptr = (char *)data + mp->m_dirblksize; for (i = 0; ptr < endptr; i++) { + struct xfs_dir2_data_entry *dep; + struct xfs_dir2_data_unused *dup; + dup = (xfs_dir2_data_unused_t *)ptr; if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) ptr += be16_to_cpu(dup->length); @@ -523,20 +522,20 @@ dir2_data_u_offset( int startoff, int idx) { - xfs_dir2_data_t *data; - xfs_dir2_data_entry_t *dep; - xfs_dir2_data_unused_t *dup; - /*REFERENCED*/ + struct xfs_dir2_data_hdr *data; char *endptr; int i; char *ptr; ASSERT(startoff == 0); data = obj; - ASSERT(be32_to_cpu(data->hdr.magic) == XFS_DIR2_DATA_MAGIC); - ptr = (char *)data->u; + ASSERT(be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC); + ptr = (char *)xfs_dir3_data_unused_p(data); endptr = (char *)data + mp->m_dirblksize; for (i = 0; i < idx; i++) { + struct xfs_dir2_data_entry *dep; + struct xfs_dir2_data_unused *dup; + ASSERT(ptr < endptr); dup = (xfs_dir2_data_unused_t *)ptr; if (be16_to_cpu(dup->freetag) == XFS_DIR2_DATA_FREE_TAG) @@ -576,7 +575,7 @@ dir2_free_bests_count( void *obj, int startoff) { - xfs_dir2_free_t *free; + struct xfs_dir2_free *free; ASSERT(startoff == 0); free = obj; @@ -591,7 +590,7 @@ dir2_free_hdr_count( void *obj, int startoff) { - xfs_dir2_free_t *free; + struct xfs_dir2_free *free; ASSERT(startoff == 0); free = obj; @@ -604,8 +603,8 @@ dir2_leaf_bests_count( void *obj, int startoff) { - xfs_dir2_leaf_t *leaf; - xfs_dir2_leaf_tail_t *ltp; + struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf_tail *ltp; ASSERT(startoff == 0); leaf = obj; @@ -622,9 +621,9 @@ dir2_leaf_bests_offset( int startoff, int idx) { + struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf_tail *ltp; __be16 *lbp; - xfs_dir2_leaf_t *leaf; - xfs_dir2_leaf_tail_t *ltp; ASSERT(startoff == 0); leaf = obj; @@ -640,7 +639,7 @@ dir2_leaf_ents_count( void *obj, int startoff) { - xfs_dir2_leaf_t *leaf; + struct xfs_dir2_leaf *leaf; ASSERT(startoff == 0); leaf = obj; @@ -656,7 +655,7 @@ dir2_leaf_hdr_count( void *obj, int startoff) { - xfs_dir2_leaf_t *leaf; + struct xfs_dir2_leaf *leaf; ASSERT(startoff == 0); leaf = obj; @@ -670,7 +669,7 @@ dir2_leaf_tail_count( void *obj, int startoff) { - xfs_dir2_leaf_t *leaf; + struct xfs_dir2_leaf *leaf; ASSERT(startoff == 0); leaf = obj; @@ -684,8 +683,8 @@ dir2_leaf_tail_offset( int startoff, int idx) { - xfs_dir2_leaf_t *leaf; - xfs_dir2_leaf_tail_t *ltp; + struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf_tail *ltp; ASSERT(startoff == 0); ASSERT(idx == 0); @@ -716,7 +715,7 @@ dir2_node_hdr_count( void *obj, int startoff) { - xfs_da_intnode_t *node; + struct xfs_da_intnode *node; ASSERT(startoff == 0); node = obj; diff --git a/db/dir2.h b/db/dir2.h index a5f0bec..05ab354 100644 --- a/db/dir2.h +++ b/db/dir2.h @@ -31,31 +31,6 @@ extern const field_t da_blkinfo_flds[]; extern const field_t da_node_entry_flds[]; extern const field_t da_node_hdr_flds[]; -/* - * generic dir2 structures used by xfs_db - */ -typedef union { - xfs_dir2_data_entry_t entry; - xfs_dir2_data_unused_t unused; -} xfs_dir2_data_union_t; - -typedef struct xfs_dir2_data { - xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_DATA_MAGIC */ - xfs_dir2_data_union_t u[1]; -} xfs_dir2_data_t; - -typedef struct xfs_dir2_block { - xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_BLOCK_MAGIC */ - xfs_dir2_data_union_t u[1]; - xfs_dir2_leaf_entry_t leaf[1]; - xfs_dir2_block_tail_t tail; -} xfs_dir2_block_t; - -typedef struct xfs_dir2_sf { - xfs_dir2_sf_hdr_t hdr; /* shortform header */ - xfs_dir2_sf_entry_t list[1]; /* shortform entries */ -} xfs_dir2_sf_t; - static inline xfs_dir2_inou_t *xfs_dir2_sf_inumberp(xfs_dir2_sf_entry_t *sfep) { return (xfs_dir2_inou_t *)&(sfep)->name[(sfep)->namelen]; diff --git a/db/dir2sf.c b/db/dir2sf.c index 271e08a..b32ca32 100644 --- a/db/dir2sf.c +++ b/db/dir2sf.c @@ -32,9 +32,9 @@ static int dir2_sf_entry_name_count(void *obj, int startoff); static int dir2_sf_list_count(void *obj, int startoff); static int dir2_sf_list_offset(void *obj, int startoff, int idx); -#define OFF(f) bitize(offsetof(xfs_dir2_sf_t, f)) +#define OFF(f) bitize(offsetof(struct xfs_dir2_sf_hdr, f)) const field_t dir2sf_flds[] = { - { "hdr", FLDT_DIR2_SF_HDR, OI(OFF(hdr)), C1, 0, TYP_NONE }, + { "hdr", FLDT_DIR2_SF_HDR, OI(OFF(count)), C1, 0, TYP_NONE }, { "list", FLDT_DIR2_SF_ENTRY, dir2_sf_list_offset, dir2_sf_list_count, FLD_ARRAY|FLD_COUNT|FLD_OFFSET, TYP_NONE }, { NULL } @@ -75,11 +75,11 @@ dir2_inou_i4_count( int startoff) { struct xfs_dinode *dip = obj; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); - return sf->hdr.i8count == 0; + sf = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); + return sf->i8count == 0; } /*ARGSUSED*/ @@ -89,11 +89,11 @@ dir2_inou_i8_count( int startoff) { struct xfs_dinode *dip = obj; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); - return sf->hdr.i8count != 0; + sf = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); + return sf->i8count != 0; } /*ARGSUSED*/ @@ -104,12 +104,12 @@ dir2_inou_size( int idx) { struct xfs_dinode *dip = obj; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); - sf = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); - return bitize(sf->hdr.i8count ? + sf = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); + return bitize(sf->i8count ? (uint)sizeof(xfs_dir2_ino8_t) : (uint)sizeof(xfs_dir2_ino4_t)); } @@ -149,14 +149,14 @@ dir2_sf_entry_size( { xfs_dir2_sf_entry_t *e; int i; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); - e = xfs_dir2_sf_firstentry(&sf->hdr); + sf = (struct xfs_dir2_sf_hdr *)((char *)obj + byteize(startoff)); + e = xfs_dir2_sf_firstentry(sf); for (i = 0; i < idx; i++) - e = xfs_dir2_sf_nextentry(&sf->hdr, e); - return bitize((int)xfs_dir2_sf_entsize(&sf->hdr, e->namelen)); + e = xfs_dir2_sf_nextentry(sf, e); + return bitize((int)xfs_dir2_sf_entsize(sf, e->namelen)); } /*ARGSUSED*/ @@ -166,12 +166,12 @@ dir2_sf_hdr_size( int startoff, int idx) { - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); - sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); - return bitize(xfs_dir2_sf_hdr_size(sf->hdr.i8count)); + sf = (struct xfs_dir2_sf_hdr *)((char *)obj + byteize(startoff)); + return bitize(xfs_dir2_sf_hdr_size(sf->i8count)); } static int @@ -179,11 +179,11 @@ dir2_sf_list_count( void *obj, int startoff) { - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); - return sf->hdr.count; + sf = (struct xfs_dir2_sf_hdr *)((char *)obj + byteize(startoff)); + return sf->count; } static int @@ -194,13 +194,13 @@ dir2_sf_list_offset( { xfs_dir2_sf_entry_t *e; int i; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); - sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); - e = xfs_dir2_sf_firstentry(&sf->hdr); + sf = (struct xfs_dir2_sf_hdr *)((char *)obj + byteize(startoff)); + e = xfs_dir2_sf_firstentry(sf); for (i = 0; i < idx; i++) - e = xfs_dir2_sf_nextentry(&sf->hdr, e); + e = xfs_dir2_sf_nextentry(sf, e); return bitize((int)((char *)e - (char *)sf)); } @@ -213,13 +213,13 @@ dir2sf_size( { xfs_dir2_sf_entry_t *e; int i; - xfs_dir2_sf_t *sf; + struct xfs_dir2_sf_hdr *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); - sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); - e = xfs_dir2_sf_firstentry(&sf->hdr); - for (i = 0; i < sf->hdr.count; i++) - e = xfs_dir2_sf_nextentry(&sf->hdr, e); + sf = (struct xfs_dir2_sf_hdr *)((char *)obj + byteize(startoff)); + e = xfs_dir2_sf_firstentry(sf); + for (i = 0; i < sf->count; i++) + e = xfs_dir2_sf_nextentry(sf, e); return bitize((int)((char *)e - (char *)sf)); } diff --git a/db/metadump.c b/db/metadump.c index 44e7162..bc1c7fa 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -906,12 +906,12 @@ static void obfuscate_sf_dir( xfs_dinode_t *dip) { - xfs_dir2_sf_t *sfp; + struct xfs_dir2_sf_hdr *sfp; xfs_dir2_sf_entry_t *sfep; __uint64_t ino_dir_size; int i; - sfp = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); + sfp = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); ino_dir_size = be64_to_cpu(dip->di_size); if (ino_dir_size > XFS_DFORK_DSIZE(dip, mp)) { ino_dir_size = XFS_DFORK_DSIZE(dip, mp); @@ -920,8 +920,8 @@ obfuscate_sf_dir( (long long)cur_ino); } - sfep = xfs_dir2_sf_firstentry(&sfp->hdr); - for (i = 0; (i < sfp->hdr.count) && + sfep = xfs_dir2_sf_firstentry(sfp); + for (i = 0; (i < sfp->count) && ((char *)sfep - (char *)sfp < ino_dir_size); i++) { /* @@ -934,27 +934,27 @@ obfuscate_sf_dir( if (show_warnings) print_warning("zero length entry in dir inode " "%llu", (long long)cur_ino); - if (i != sfp->hdr.count - 1) + if (i != sfp->count - 1) break; namelen = ino_dir_size - ((char *)&sfep->name[0] - (char *)sfp); } else if ((char *)sfep - (char *)sfp + - xfs_dir2_sf_entsize(&sfp->hdr, sfep->namelen) > + xfs_dir2_sf_entsize(sfp, sfep->namelen) > ino_dir_size) { if (show_warnings) print_warning("entry length in dir inode %llu " "overflows space", (long long)cur_ino); - if (i != sfp->hdr.count - 1) + if (i != sfp->count - 1) break; namelen = ino_dir_size - ((char *)&sfep->name[0] - (char *)sfp); } - generate_obfuscated_name(xfs_dir2_sfe_get_ino(&sfp->hdr, sfep), + generate_obfuscated_name(xfs_dir2_sfe_get_ino(sfp, sfep), namelen, &sfep->name[0]); sfep = (xfs_dir2_sf_entry_t *)((char *)sfep + - xfs_dir2_sf_entsize(&sfp->hdr, namelen)); + xfs_dir2_sf_entsize(sfp, namelen)); } } @@ -1101,6 +1101,9 @@ obfuscate_dir_data_blocks( if (dir_data.block_index == 0) { int wantmagic; + struct xfs_dir2_data_hdr *datahdr; + + datahdr = (struct xfs_dir2_data_hdr *)block; if (offset % mp->m_dirblkfsbs != 0) return; /* corrupted, leave it alone */ @@ -1110,10 +1113,8 @@ obfuscate_dir_data_blocks( if (is_block_format) { xfs_dir2_leaf_entry_t *blp; xfs_dir2_block_tail_t *btp; - xfs_dir2_block_t *blk; - blk = (xfs_dir2_block_t *)block; - btp = xfs_dir2_block_tail_p(mp, &blk->hdr); + btp = xfs_dir2_block_tail_p(mp, datahdr); blp = xfs_dir2_block_leaf_p(btp); if ((char *)blp > (char *)btp) blp = (xfs_dir2_leaf_entry_t *)btp; @@ -1125,10 +1126,10 @@ obfuscate_dir_data_blocks( mp->m_sb.sb_blocklog; wantmagic = XFS_DIR2_DATA_MAGIC; } - dir_data.offset_to_entry = offsetof(xfs_dir2_data_t, u); + dir_data.offset_to_entry = + xfs_dir3_data_entry_offset(datahdr); - if (be32_to_cpu(((xfs_dir2_data_hdr_t*)block)->magic) != - wantmagic) { + if (be32_to_cpu(datahdr->magic) != wantmagic) { if (show_warnings) print_warning("invalid magic in dir " "inode %llu block %ld", -- 1.7.10.4 From dave@fromorbit.com Mon May 20 01:53:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4CDB47F66 for ; Mon, 20 May 2013 01:53:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB299AC004 for ; Sun, 19 May 2013 23:53:33 -0700 (PDT) X-ASG-Debug-ID: 1369032809-04cbb05fe4421010001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id PFheBKt2rTDYHhxR for ; Sun, 19 May 2013 23:53:30 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0gh8BAQUaDS8zCBgxOQMbGYgMuwmOBIR4A5NnjWyHJYMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:28 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJyJ-0006r7-O7 for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:27 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJy9-0006Vx-Ji for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:17 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 4/6] xfs_db: update field printing for dir crc format changes. Date: Mon, 20 May 2013 16:53:01 +1000 X-ASG-Orig-Subj: [PATCH 4/6] xfs_db: update field printing for dir crc format changes. Message-Id: <1369032783-24973-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032809 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Note that this also requires changing the type parsing to only allow dir3 data block parsing on CRC enabled filesystems. This is slighly more complex than it needs to be because of the way the type table is walked and the assumption that all the entries are in type number order. Signed-off-by: Dave Chinner --- db/dir2.c | 319 +++++++++++++++++++++++++++++++++++++++++++++++++----------- db/dir2.h | 33 +++++-- db/field.c | 21 ++++ db/field.h | 14 +++ db/type.c | 14 ++- db/type.h | 2 +- 6 files changed, 336 insertions(+), 67 deletions(-) diff --git a/db/dir2.c b/db/dir2.c index 594d9d2..85240b0 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -260,24 +260,34 @@ dir2_block_hdr_count( void *obj, int startoff) { - struct xfs_dir2_data_hdr *block; + struct xfs_dir2_data_hdr *block = obj; ASSERT(startoff == 0); - block = obj; return be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC; } static int +dir3_block_hdr_count( + void *obj, + int startoff) +{ + struct xfs_dir2_data_hdr *block = obj; + + ASSERT(startoff == 0); + return be32_to_cpu(block->magic) == XFS_DIR3_BLOCK_MAGIC; +} + +static int dir2_block_leaf_count( void *obj, int startoff) { - struct xfs_dir2_data_hdr *block; + struct xfs_dir2_data_hdr *block = obj; struct xfs_dir2_block_tail *btp; ASSERT(startoff == 0); - block = obj; - if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC) + if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC && + be32_to_cpu(block->magic) != XFS_DIR3_BLOCK_MAGIC) return 0; btp = xfs_dir2_block_tail_p(mp, block); return be32_to_cpu(btp->count); @@ -289,13 +299,13 @@ dir2_block_leaf_offset( int startoff, int idx) { - struct xfs_dir2_data_hdr *block; + struct xfs_dir2_data_hdr *block = obj; struct xfs_dir2_block_tail *btp; struct xfs_dir2_leaf_entry *lep; ASSERT(startoff == 0); - block = obj; - ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); + ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC || + be32_to_cpu(block->magic) == XFS_DIR3_BLOCK_MAGIC); btp = xfs_dir2_block_tail_p(mp, block); lep = xfs_dir2_block_leaf_p(btp) + idx; return bitize((int)((char *)lep - (char *)block)); @@ -306,14 +316,23 @@ dir2_block_tail_count( void *obj, int startoff) { - struct xfs_dir2_data_hdr *block; + struct xfs_dir2_data_hdr *block = obj; ASSERT(startoff == 0); - block = obj; return be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC; } -/*ARGSUSED*/ +static int +dir3_block_tail_count( + void *obj, + int startoff) +{ + struct xfs_dir2_data_hdr *block = obj; + + ASSERT(startoff == 0); + return be32_to_cpu(block->magic) == XFS_DIR3_BLOCK_MAGIC; +} + static int dir2_block_tail_offset( void *obj, @@ -322,7 +341,8 @@ dir2_block_tail_offset( { struct xfs_dir2_data_hdr *block = obj; - ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); + ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC || + be32_to_cpu(block->magic) == XFS_DIR3_BLOCK_MAGIC); return __dir2_block_tail_offset(block, startoff, idx); } @@ -335,7 +355,8 @@ dir2_block_u_count( struct xfs_dir2_block_tail *btp; ASSERT(startoff == 0); - if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC) + if (be32_to_cpu(block->magic) != XFS_DIR2_BLOCK_MAGIC && + be32_to_cpu(block->magic) != XFS_DIR3_BLOCK_MAGIC) return 0; btp = xfs_dir2_block_tail_p(mp, block); @@ -354,7 +375,8 @@ dir2_block_u_offset( char *ptr; ASSERT(startoff == 0); - ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC); + ASSERT(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC || + be32_to_cpu(block->magic) == XFS_DIR3_BLOCK_MAGIC); btp = xfs_dir2_block_tail_p(mp, block); ptr = __dir2_data_entry_offset((char *)xfs_dir3_data_unused_p(block), (char *)xfs_dir2_block_leaf_p(btp), idx); @@ -479,7 +501,6 @@ dir2_data_union_tag_count( return end <= (char *)obj + mp->m_dirblksize; } -/*ARGSUSED*/ static int dir2_data_union_tag_offset( void *obj, @@ -500,20 +521,28 @@ dir2_data_union_tag_offset( (char *)dep)); } -/*ARGSUSED*/ static int dir2_data_hdr_count( void *obj, int startoff) { - struct xfs_dir2_data_hdr *data; + struct xfs_dir2_data_hdr *data = obj; ASSERT(startoff == 0); - data = obj; return be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC; } -/*ARGSUSED*/ +static int +dir3_data_hdr_count( + void *obj, + int startoff) +{ + struct xfs_dir2_data_hdr *data = obj; + + ASSERT(startoff == 0); + return be32_to_cpu(data->magic) == XFS_DIR3_DATA_MAGIC; +} + static int dir2_data_u_count( void *obj, @@ -522,7 +551,8 @@ dir2_data_u_count( struct xfs_dir2_data_hdr *data = obj; ASSERT(startoff == 0); - if (be32_to_cpu(data->magic) != XFS_DIR2_DATA_MAGIC) + if (be32_to_cpu(data->magic) != XFS_DIR2_DATA_MAGIC && + be32_to_cpu(data->magic) != XFS_DIR3_DATA_MAGIC) return 0; return __dir2_data_entries_count((char *)xfs_dir3_data_unused_p(data), @@ -539,7 +569,8 @@ dir2_data_u_offset( char *ptr; ASSERT(startoff == 0); - ASSERT(be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC); + ASSERT(be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC || + be32_to_cpu(data->magic) == XFS_DIR3_DATA_MAGIC); ptr = __dir2_data_entry_offset((char *)xfs_dir3_data_unused_p(data), (char *)data + mp->m_dirblksize, idx); return bitize((int)(ptr - (char *)data)); @@ -565,160 +596,236 @@ dir2_data_union_size( } } -/*ARGSUSED*/ +/* + * Free block functions + */ static int dir2_free_bests_count( void *obj, int startoff) { - struct xfs_dir2_free *free; + struct xfs_dir2_free *free = obj; ASSERT(startoff == 0); - free = obj; if (be32_to_cpu(free->hdr.magic) != XFS_DIR2_FREE_MAGIC) return 0; return be32_to_cpu(free->hdr.nvalid); } -/*ARGSUSED*/ +static int +dir3_free_bests_count( + void *obj, + int startoff) +{ + struct xfs_dir3_free *free = obj; + + ASSERT(startoff == 0); + if (be32_to_cpu(free->hdr.hdr.magic) != XFS_DIR3_FREE_MAGIC) + return 0; + return be32_to_cpu(free->hdr.nvalid); +} + static int dir2_free_hdr_count( void *obj, int startoff) { - struct xfs_dir2_free *free; + struct xfs_dir2_free *free = obj; ASSERT(startoff == 0); - free = obj; return be32_to_cpu(free->hdr.magic) == XFS_DIR2_FREE_MAGIC; } -/*ARGSUSED*/ +static int +dir3_free_hdr_count( + void *obj, + int startoff) +{ + struct xfs_dir3_free *free = obj; + + ASSERT(startoff == 0); + return be32_to_cpu(free->hdr.hdr.magic) == XFS_DIR3_FREE_MAGIC; +} + +/* + * Leaf block functions + */ static int dir2_leaf_bests_count( void *obj, int startoff) { - struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf *leaf = obj; struct xfs_dir2_leaf_tail *ltp; ASSERT(startoff == 0); - leaf = obj; - if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAF1_MAGIC) + if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAF1_MAGIC && + be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR3_LEAF1_MAGIC) return 0; ltp = xfs_dir2_leaf_tail_p(mp, leaf); return be32_to_cpu(ltp->bestcount); } -/*ARGSUSED*/ static int dir2_leaf_bests_offset( void *obj, int startoff, int idx) { - struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf *leaf = obj; struct xfs_dir2_leaf_tail *ltp; __be16 *lbp; ASSERT(startoff == 0); - leaf = obj; - ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAF1_MAGIC); + ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAF1_MAGIC || + be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR3_LEAF1_MAGIC); ltp = xfs_dir2_leaf_tail_p(mp, leaf); lbp = xfs_dir2_leaf_bests_p(ltp) + idx; return bitize((int)((char *)lbp - (char *)leaf)); } -/*ARGSUSED*/ static int dir2_leaf_ents_count( void *obj, int startoff) { - struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf *leaf = obj; ASSERT(startoff == 0); - leaf = obj; if (be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAF1_MAGIC && be16_to_cpu(leaf->hdr.info.magic) != XFS_DIR2_LEAFN_MAGIC) return 0; return be16_to_cpu(leaf->hdr.count); } -/*ARGSUSED*/ +static int +dir3_leaf_ents_count( + void *obj, + int startoff) +{ + struct xfs_dir3_leaf *leaf = obj; + + ASSERT(startoff == 0); + if (be16_to_cpu(leaf->hdr.info.hdr.magic) != XFS_DIR3_LEAF1_MAGIC && + be16_to_cpu(leaf->hdr.info.hdr.magic) != XFS_DIR3_LEAFN_MAGIC) + return 0; + return be16_to_cpu(leaf->hdr.count); +} + static int dir2_leaf_hdr_count( void *obj, int startoff) { - struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf *leaf = obj; ASSERT(startoff == 0); - leaf = obj; return be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAF1_MAGIC || be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAFN_MAGIC; } -/*ARGSUSED*/ +static int +dir3_leaf_hdr_count( + void *obj, + int startoff) +{ + struct xfs_dir3_leaf *leaf = obj; + + ASSERT(startoff == 0); + return be16_to_cpu(leaf->hdr.info.hdr.magic) == XFS_DIR3_LEAF1_MAGIC || + be16_to_cpu(leaf->hdr.info.hdr.magic) == XFS_DIR3_LEAFN_MAGIC; +} + static int dir2_leaf_tail_count( void *obj, int startoff) { - struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf *leaf = obj; ASSERT(startoff == 0); - leaf = obj; return be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAF1_MAGIC; } -/*ARGSUSED*/ +static int +dir3_leaf_tail_count( + void *obj, + int startoff) +{ + struct xfs_dir3_leaf *leaf = obj; + + ASSERT(startoff == 0); + return be16_to_cpu(leaf->hdr.info.hdr.magic) == XFS_DIR3_LEAF1_MAGIC; +} + static int dir2_leaf_tail_offset( void *obj, int startoff, int idx) { - struct xfs_dir2_leaf *leaf; + struct xfs_dir2_leaf *leaf = obj; struct xfs_dir2_leaf_tail *ltp; ASSERT(startoff == 0); ASSERT(idx == 0); - leaf = obj; - ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAF1_MAGIC); + ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAF1_MAGIC || + be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR3_LEAF1_MAGIC); ltp = xfs_dir2_leaf_tail_p(mp, leaf); return bitize((int)((char *)ltp - (char *)leaf)); } -/*ARGSUSED*/ +/* + * Node format functions + */ static int dir2_node_btree_count( void *obj, int startoff) { - xfs_da_intnode_t *node; + xfs_da_intnode_t *node = obj; ASSERT(startoff == 0); - node = obj; if (be16_to_cpu(node->hdr.info.magic) != XFS_DA_NODE_MAGIC) return 0; return be16_to_cpu(node->hdr.__count); } -/*ARGSUSED*/ +static int +dir3_node_btree_count( + void *obj, + int startoff) +{ + struct xfs_da3_intnode *node = obj; + + ASSERT(startoff == 0); + if (be16_to_cpu(node->hdr.info.hdr.magic) != XFS_DA3_NODE_MAGIC) + return 0; + return be16_to_cpu(node->hdr.__count); +} + static int dir2_node_hdr_count( void *obj, int startoff) { - struct xfs_da_intnode *node; + struct xfs_da_intnode *node = obj; ASSERT(startoff == 0); - node = obj; return be16_to_cpu(node->hdr.info.magic) == XFS_DA_NODE_MAGIC; } -/*ARGSUSED*/ +static int +dir3_node_hdr_count( + void *obj, + int startoff) +{ + struct xfs_da3_intnode *node = obj; + + ASSERT(startoff == 0); + return be16_to_cpu(node->hdr.info.hdr.magic) == XFS_DA3_NODE_MAGIC; +} + int dir2_size( void *obj, @@ -727,3 +834,105 @@ dir2_size( { return bitize(mp->m_dirblksize); } + +/* + * CRC enabled structure definitions + */ +const field_t dir3_hfld[] = { + { "", FLDT_DIR3, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; + +#define B3OFF(f) bitize(offsetof(struct xfs_dir3_data_hdr, f)) +#define D3OFF(f) bitize(offsetof(struct xfs_dir3_data_hdr, f)) +#define F3OFF(f) bitize(offsetof(struct xfs_dir3_free, f)) +#define L3OFF(f) bitize(offsetof(struct xfs_dir3_leaf, f)) +#define N3OFF(f) bitize(offsetof(struct xfs_da3_intnode, f)) +const field_t dir3_flds[] = { + { "bhdr", FLDT_DIR3_DATA_HDR, OI(B3OFF(hdr)), dir3_block_hdr_count, + FLD_COUNT, TYP_NONE }, + { "bu", FLDT_DIR2_DATA_UNION, dir2_block_u_offset, dir2_block_u_count, + FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { "bleaf", FLDT_DIR2_LEAF_ENTRY, dir2_block_leaf_offset, + dir2_block_leaf_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { "btail", FLDT_DIR2_BLOCK_TAIL, dir2_block_tail_offset, + dir3_block_tail_count, FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { "dhdr", FLDT_DIR3_DATA_HDR, OI(D3OFF(hdr)), dir3_data_hdr_count, + FLD_COUNT, TYP_NONE }, + { "du", FLDT_DIR2_DATA_UNION, dir2_data_u_offset, dir2_data_u_count, + FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { "lhdr", FLDT_DIR3_LEAF_HDR, OI(L3OFF(hdr)), dir3_leaf_hdr_count, + FLD_COUNT, TYP_NONE }, + { "lbests", FLDT_DIR2_DATA_OFF, dir2_leaf_bests_offset, + dir2_leaf_bests_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { "lents", FLDT_DIR2_LEAF_ENTRY, OI(L3OFF(__ents)), dir3_leaf_ents_count, + FLD_ARRAY|FLD_COUNT, TYP_NONE }, + { "ltail", FLDT_DIR2_LEAF_TAIL, dir2_leaf_tail_offset, + dir3_leaf_tail_count, FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { "nhdr", FLDT_DA3_NODE_HDR, OI(N3OFF(hdr)), dir3_node_hdr_count, + FLD_COUNT, TYP_NONE }, + { "nbtree", FLDT_DA_NODE_ENTRY, OI(N3OFF(__btree)), dir3_node_btree_count, + FLD_ARRAY|FLD_COUNT, TYP_NONE }, + { "fhdr", FLDT_DIR3_FREE_HDR, OI(F3OFF(hdr)), dir3_free_hdr_count, + FLD_COUNT, TYP_NONE }, + { "fbests", FLDT_DIR2_DATA_OFFNZ, OI(F3OFF(bests)), + dir3_free_bests_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, + { NULL } +}; + +#define DBH3OFF(f) bitize(offsetof(struct xfs_dir3_blk_hdr, f)) +const field_t dir3_blkhdr_flds[] = { + { "magic", FLDT_UINT32X, OI(DBH3OFF(magic)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(DBH3OFF(crc)), C1, 0, TYP_NONE }, + { "bno", FLDT_DFSBNO, OI(DBH3OFF(blkno)), C1, 0, TYP_BMAPBTD }, + { "lsn", FLDT_UINT64X, OI(DBH3OFF(lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(DBH3OFF(uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_INO, OI(DBH3OFF(owner)), C1, 0, TYP_NONE }, + { NULL } +}; + +#define DH3OFF(f) bitize(offsetof(struct xfs_dir3_data_hdr, f)) +const field_t dir3_data_hdr_flds[] = { + { "hdr", FLDT_DIR3_BLKHDR, OI(DH3OFF(hdr)), C1, 0, TYP_NONE }, + { "bestfree", FLDT_DIR2_DATA_FREE, OI(DH3OFF(best_free)), + CI(XFS_DIR2_DATA_FD_COUNT), FLD_ARRAY, TYP_NONE }, + { NULL } +}; + +#define LH3OFF(f) bitize(offsetof(struct xfs_dir3_leaf_hdr, f)) +const field_t dir3_leaf_hdr_flds[] = { + { "info", FLDT_DA3_BLKINFO, OI(LH3OFF(info)), C1, 0, TYP_NONE }, + { "count", FLDT_UINT16D, OI(LH3OFF(count)), C1, 0, TYP_NONE }, + { "stale", FLDT_UINT16D, OI(LH3OFF(stale)), C1, 0, TYP_NONE }, + { NULL } +}; + +#define FH3OFF(f) bitize(offsetof(struct xfs_dir3_free_hdr, f)) +const field_t dir3_free_hdr_flds[] = { + { "hdr", FLDT_DIR3_BLKHDR, OI(FH3OFF(hdr)), C1, 0, TYP_NONE }, + { "firstdb", FLDT_INT32D, OI(FH3OFF(firstdb)), C1, 0, TYP_NONE }, + { "nvalid", FLDT_INT32D, OI(FH3OFF(nvalid)), C1, 0, TYP_NONE }, + { "nused", FLDT_INT32D, OI(FH3OFF(nused)), C1, 0, TYP_NONE }, + { NULL } +}; + + +#define DB3OFF(f) bitize(offsetof(struct xfs_da3_blkinfo, f)) +const field_t da3_blkinfo_flds[] = { + { "hdr", FLDT_DA_BLKINFO, OI(DB3OFF(hdr)), C1, 0, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(DB3OFF(crc)), C1, 0, TYP_NONE }, + { "bno", FLDT_DFSBNO, OI(DB3OFF(blkno)), C1, 0, TYP_BMAPBTD }, + { "lsn", FLDT_UINT64X, OI(DB3OFF(lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(DB3OFF(uuid)), C1, 0, TYP_NONE }, + { "owner", FLDT_INO, OI(DB3OFF(owner)), C1, 0, TYP_NONE }, + { NULL } +}; + +#define H3OFF(f) bitize(offsetof(struct xfs_da3_node_hdr, f)) +const field_t da3_node_hdr_flds[] = { + { "info", FLDT_DA3_BLKINFO, OI(H3OFF(info)), C1, 0, TYP_NONE }, + { "count", FLDT_UINT16D, OI(H3OFF(__count)), C1, 0, TYP_NONE }, + { "level", FLDT_UINT16D, OI(H3OFF(__level)), C1, 0, TYP_NONE }, + { "pad", FLDT_UINT32D, OI(H3OFF(__pad32)), C1, 0, TYP_NONE }, + { NULL } +}; diff --git a/db/dir2.h b/db/dir2.h index 05ab354..d9dc27b 100644 --- a/db/dir2.h +++ b/db/dir2.h @@ -16,21 +16,42 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -extern const field_t dir2_flds[]; -extern const field_t dir2_hfld[]; +/* + * common types across directory formats + */ extern const field_t dir2_block_tail_flds[]; extern const field_t dir2_data_free_flds[]; -extern const field_t dir2_data_hdr_flds[]; extern const field_t dir2_data_union_flds[]; -extern const field_t dir2_free_hdr_flds[]; +extern const field_t dir2_leaf_tail_flds[]; extern const field_t dir2_leaf_entry_flds[]; + +extern const field_t da_node_entry_flds[]; + +/* + * dirv2 specific types + */ +extern const field_t dir2_flds[]; +extern const field_t dir2_hfld[]; +extern const field_t dir2_data_hdr_flds[]; +extern const field_t dir2_free_hdr_flds[]; extern const field_t dir2_leaf_hdr_flds[]; -extern const field_t dir2_leaf_tail_flds[]; extern const field_t da_blkinfo_flds[]; -extern const field_t da_node_entry_flds[]; extern const field_t da_node_hdr_flds[]; +/* + * dirv3 specific types + */ +extern const field_t dir3_flds[]; +extern const field_t dir3_hfld[]; +extern const field_t dir3_blkhdr_flds[]; +extern const field_t dir3_data_hdr_flds[]; +extern const field_t dir3_free_hdr_flds[]; +extern const field_t dir3_leaf_hdr_flds[]; + +extern const field_t da3_blkinfo_flds[]; +extern const field_t da3_node_hdr_flds[]; + static inline xfs_dir2_inou_t *xfs_dir2_sf_inumberp(xfs_dir2_sf_entry_t *sfep) { return (xfs_dir2_inou_t *)&(sfep)->name[(sfep)->namelen]; diff --git a/db/field.c b/db/field.c index 510ad84..cb15318 100644 --- a/db/field.c +++ b/db/field.c @@ -166,6 +166,8 @@ const ftattr_t ftattrtab[] = { FTARG_SIZE|FTARG_OKEMPTY, NULL, inode_u_flds }, { FLDT_DINODE_V3, "dinode_v3", NULL, (char *)inode_v3_flds, SI(bitsz(xfs_dinode_t)), 0, NULL, inode_v3_flds }, + +/* dir v2 fields */ { FLDT_DIR2, "dir2", NULL, (char *)dir2_flds, dir2_size, FTARG_SIZE, NULL, dir2_flds }, { FLDT_DIR2_BLOCK_TAIL, "dir2_block_tail", NULL, @@ -207,6 +209,20 @@ const ftattr_t ftattrtab[] = { SI(bitsz(xfs_dir2_sf_off_t)), 0, NULL, NULL }, { FLDT_DIR2SF, "dir2sf", NULL, (char *)dir2sf_flds, dir2sf_size, FTARG_SIZE, NULL, dir2sf_flds }, + +/* dir v3 fields */ + { FLDT_DIR3, "dir3", NULL, (char *)dir3_flds, dir2_size, FTARG_SIZE, + NULL, dir3_flds }, + { FLDT_DIR3_BLKHDR, "dir3_blk_hdr", NULL, (char *)dir3_blkhdr_flds, + SI(bitsz(struct xfs_dir3_blk_hdr)), 0, NULL, dir3_blkhdr_flds }, + { FLDT_DIR3_DATA_HDR, "dir3_data_hdr", NULL, (char *)dir3_data_hdr_flds, + SI(bitsz(struct xfs_dir3_data_hdr)), 0, NULL, dir3_data_hdr_flds }, + { FLDT_DIR3_FREE_HDR, "dir3_free_hdr", NULL, (char *)dir3_free_hdr_flds, + SI(bitsz(struct xfs_dir3_free_hdr)), 0, NULL, dir3_free_hdr_flds }, + { FLDT_DIR3_LEAF_HDR, "dir3_leaf_hdr", NULL, (char *)dir3_leaf_hdr_flds, + SI(bitsz(struct xfs_dir3_leaf_hdr)), 0, NULL, dir3_leaf_hdr_flds }, + +/* dir v2/3 node fields */ { FLDT_DA_BLKINFO, "dir_blkinfo", NULL, (char *)da_blkinfo_flds, SI(bitsz(struct xfs_da_blkinfo)), 0, NULL, da_blkinfo_flds }, { FLDT_DA_NODE_ENTRY, "dir_node_entry", fp_sarray, @@ -214,6 +230,11 @@ const ftattr_t ftattrtab[] = { NULL, da_node_entry_flds }, { FLDT_DA_NODE_HDR, "dir_node_hdr", NULL, (char *)da_node_hdr_flds, SI(bitsz(struct xfs_da_node_hdr)), 0, NULL, da_node_hdr_flds }, + { FLDT_DA3_BLKINFO, "dir_blkinfo", NULL, (char *)da3_blkinfo_flds, + SI(bitsz(struct xfs_da3_blkinfo)), 0, NULL, da3_blkinfo_flds }, + { FLDT_DA3_NODE_HDR, "dir_node_hdr", NULL, (char *)da3_node_hdr_flds, + SI(bitsz(struct xfs_da3_node_hdr)), 0, NULL, da3_node_hdr_flds }, + { FLDT_DIRBLOCK, "dirblock", fp_num, "%u", SI(bitsz(__uint32_t)), 0, fa_dirblock, NULL }, { FLDT_DISK_DQUOT, "disk_dquot", NULL, (char *)disk_dquot_flds, diff --git a/db/field.h b/db/field.h index 9b332f5..5671571 100644 --- a/db/field.h +++ b/db/field.h @@ -81,6 +81,8 @@ typedef enum fldt { FLDT_DINODE_FMT, FLDT_DINODE_U, FLDT_DINODE_V3, + + /* dir v2 fields */ FLDT_DIR2, FLDT_DIR2_BLOCK_TAIL, FLDT_DIR2_DATA_FREE, @@ -99,9 +101,21 @@ typedef enum fldt { FLDT_DIR2_SF_HDR, FLDT_DIR2_SF_OFF, FLDT_DIR2SF, + + /* dir v3 fields */ + FLDT_DIR3, + FLDT_DIR3_BLKHDR, + FLDT_DIR3_DATA_HDR, + FLDT_DIR3_FREE_HDR, + FLDT_DIR3_LEAF_HDR, + + /* dir v2/3 node fields */ FLDT_DA_BLKINFO, FLDT_DA_NODE_ENTRY, FLDT_DA_NODE_HDR, + FLDT_DA3_BLKINFO, + FLDT_DA3_NODE_HDR, + FLDT_DIRBLOCK, FLDT_DISK_DQUOT, FLDT_DQBLK, diff --git a/db/type.c b/db/type.c index 97f3548..0c64422 100644 --- a/db/type.c +++ b/db/type.c @@ -59,6 +59,7 @@ static const typ_t __typtab[] = { { TYP_CNTBT, "cntbt", handle_struct, cntbt_hfld }, { TYP_DATA, "data", handle_block, NULL }, { TYP_DIR2, "dir2", handle_struct, dir2_hfld }, + { TYP_DIR3, NULL, NULL, NULL }, { TYP_DQBLK, "dqblk", handle_struct, dqblk_hfld }, { TYP_INOBT, "inobt", handle_struct, inobt_hfld }, { TYP_INODATA, "inodata", NULL, NULL }, @@ -82,7 +83,8 @@ static const typ_t __typtab_crc[] = { { TYP_BNOBT, "bnobt", handle_struct, bnobt_crc_hfld }, { TYP_CNTBT, "cntbt", handle_struct, cntbt_crc_hfld }, { TYP_DATA, "data", handle_block, NULL }, - { TYP_DIR2, "dir2", handle_struct, dir2_hfld }, + { TYP_DIR2, NULL, NULL, NULL }, + { TYP_DIR3, "dir3", handle_struct, dir3_hfld }, { TYP_DQBLK, "dqblk", handle_struct, dqblk_hfld }, { TYP_INOBT, "inobt", handle_struct, inobt_crc_hfld }, { TYP_INODATA, "inodata", NULL, NULL }, @@ -110,9 +112,9 @@ findtyp( { const typ_t *tt; - for (tt = typtab; tt->name != NULL; tt++) { + for (tt = typtab; tt->typnm != TYP_NONE; tt++) { ASSERT(tt->typnm == (typnm_t)(tt - typtab)); - if (strcmp(tt->name, name) == 0) + if (tt->name && strcmp(tt->name, name) == 0) return tt; } return NULL; @@ -133,12 +135,14 @@ type_f( dbprintf(_("current type is \"%s\"\n"), cur_typ->name); dbprintf(_("\n supported types are:\n ")); - for (tt = typtab, count = 0; tt->name != NULL; tt++) { + for (tt = typtab, count = 0; tt->typnm != TYP_NONE; tt++) { + if (tt->name == NULL) + continue; if ((tt+1)->name != NULL) { dbprintf("%s, ", tt->name); if ((++count % 8) == 0) dbprintf("\n "); - } else { + } else if ((tt+1)->typnm == TYP_NONE) { dbprintf("%s\n", tt->name); } } diff --git a/db/type.h b/db/type.h index c41aca4..8fd8dc3 100644 --- a/db/type.h +++ b/db/type.h @@ -25,7 +25,7 @@ typedef enum typnm { TYP_AGF, TYP_AGFL, TYP_AGI, TYP_ATTR, TYP_BMAPBTA, TYP_BMAPBTD, TYP_BNOBT, TYP_CNTBT, TYP_DATA, - TYP_DIR2, TYP_DQBLK, TYP_INOBT, TYP_INODATA, TYP_INODE, + TYP_DIR2, TYP_DIR3, TYP_DQBLK, TYP_INOBT, TYP_INODATA, TYP_INODE, TYP_LOG, TYP_RTBITMAP, TYP_RTSUMMARY, TYP_SB, TYP_SYMLINK, TYP_TEXT, TYP_NONE } typnm_t; -- 1.7.10.4 From dave@fromorbit.com Mon May 20 01:53:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EED1A7F67 for ; Mon, 20 May 2013 01:53:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C7F3A8F8039 for ; Sun, 19 May 2013 23:53:35 -0700 (PDT) X-ASG-Debug-ID: 1369032809-04cbb05fe4421010002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id eZjSMS34iv96wpUd for ; Sun, 19 May 2013 23:53:32 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugLAGfHmVF5LH3D/2dsb2JhbABagwjBZgSBABd0giABBScvMwhJOQMbGYgMuwmOBIR4A5NnjWyHJYMhKg Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail07.adl2.internode.on.net with ESMTP; 20 May 2013 16:23:28 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UeJyJ-0006r8-P4 for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:27 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UeJy9-0006W3-Kz for xfs@oss.sgi.com; Mon, 20 May 2013 16:53:17 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 5/6] xfs_repair: convert directory parsing to use libxfs structure Date: Mon, 20 May 2013 16:53:02 +1000 X-ASG-Orig-Subj: [PATCH 5/6] xfs_repair: convert directory parsing to use libxfs structure Message-Id: <1369032783-24973-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369032812 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131483 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- It turns out that xfs_repair copies xfs_db in rollin git's own opaque directory types for the different block formats. It has a little comment about how they are "shared" with xfs_db. Shared by copy and pasting, rather than a common header, it would appear. Anyway, same problems, need to use format aware definitionsi and abstractions from libxfs so that everything is parsed properly. Signed-off-by: Dave Chinner --- repair/dir2.c | 116 +++++++++++++++++++++++++++---------------------------- repair/dir2.h | 28 +------------- repair/phase6.c | 60 ++++++++++++++-------------- 3 files changed, 89 insertions(+), 115 deletions(-) diff --git a/repair/dir2.c b/repair/dir2.c index e41c5f9..2ca7fd1 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -651,13 +651,13 @@ _("would correct bad hashval in interior dir block\n" */ void process_sf_dir2_fixi8( - xfs_dir2_sf_t *sfp, + struct xfs_dir2_sf_hdr *sfp, xfs_dir2_sf_entry_t **next_sfep) { xfs_ino_t ino; - xfs_dir2_sf_t *newsfp; + struct xfs_dir2_sf_hdr *newsfp; xfs_dir2_sf_entry_t *newsfep; - xfs_dir2_sf_t *oldsfp; + struct xfs_dir2_sf_hdr *oldsfp; xfs_dir2_sf_entry_t *oldsfep; int oldsize; @@ -669,21 +669,21 @@ process_sf_dir2_fixi8( exit(1); } memmove(oldsfp, newsfp, oldsize); - newsfp->hdr.count = oldsfp->hdr.count; - newsfp->hdr.i8count = 0; - ino = xfs_dir2_sf_get_parent_ino(&sfp->hdr); - xfs_dir2_sf_put_parent_ino(&newsfp->hdr, ino); - oldsfep = xfs_dir2_sf_firstentry(&oldsfp->hdr); - newsfep = xfs_dir2_sf_firstentry(&newsfp->hdr); + newsfp->count = oldsfp->count; + newsfp->i8count = 0; + ino = xfs_dir2_sf_get_parent_ino(sfp); + xfs_dir2_sf_put_parent_ino(newsfp, ino); + oldsfep = xfs_dir2_sf_firstentry(oldsfp); + newsfep = xfs_dir2_sf_firstentry(newsfp); while ((int)((char *)oldsfep - (char *)oldsfp) < oldsize) { newsfep->namelen = oldsfep->namelen; xfs_dir2_sf_put_offset(newsfep, xfs_dir2_sf_get_offset(oldsfep)); memmove(newsfep->name, oldsfep->name, newsfep->namelen); - ino = xfs_dir2_sfe_get_ino(&oldsfp->hdr, oldsfep); - xfs_dir2_sfe_put_ino(&newsfp->hdr, newsfep, ino); - oldsfep = xfs_dir2_sf_nextentry(&oldsfp->hdr, oldsfep); - newsfep = xfs_dir2_sf_nextentry(&newsfp->hdr, newsfep); + ino = xfs_dir2_sfe_get_ino(oldsfp, oldsfep); + xfs_dir2_sfe_put_ino(newsfp, newsfep, ino); + oldsfep = xfs_dir2_sf_nextentry(oldsfp, oldsfep); + newsfep = xfs_dir2_sf_nextentry(newsfp, newsfep); } *next_sfep = newsfep; free(oldsfp); @@ -700,16 +700,16 @@ process_sf_dir2_fixoff( int i; int offset; xfs_dir2_sf_entry_t *sfep; - xfs_dir2_sf_t *sfp; + struct xfs_dir2_sf_hdr *sfp; - sfp = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); - sfep = xfs_dir2_sf_firstentry(&sfp->hdr); + sfp = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); + sfep = xfs_dir2_sf_firstentry(sfp); offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); - for (i = 0; i < sfp->hdr.count; i++) { + for (i = 0; i < sfp->count; i++) { xfs_dir2_sf_put_offset(sfep, offset); offset += xfs_dir2_data_entsize(sfep->namelen); - sfep = xfs_dir2_sf_nextentry(&sfp->hdr, sfep); + sfep = xfs_dir2_sf_nextentry(sfp, sfep); } } @@ -747,16 +747,16 @@ process_sf_dir2( xfs_dir2_sf_entry_t *next_sfep; int num_entries; int offset; - xfs_dir2_sf_t *sfp; + struct xfs_dir2_sf_hdr *sfp; xfs_dir2_sf_entry_t *sfep; int tmp_elen; int tmp_len; xfs_dir2_sf_entry_t *tmp_sfep; xfs_ino_t zero = 0; - sfp = (xfs_dir2_sf_t *)XFS_DFORK_DPTR(dip); + sfp = (struct xfs_dir2_sf_hdr *)XFS_DFORK_DPTR(dip); max_size = XFS_DFORK_DSIZE(dip, mp); - num_entries = sfp->hdr.count; + num_entries = sfp->count; ino_dir_size = be64_to_cpu(dip->di_size); offset = XFS_DIR3_DATA_FIRST_OFFSET(mp); bad_offset = *repair = 0; @@ -766,12 +766,12 @@ process_sf_dir2( /* * Initialize i8 based on size of parent inode number. */ - i8 = (xfs_dir2_sf_get_parent_ino(&sfp->hdr) > XFS_DIR2_MAX_SHORT_INUM); + i8 = (xfs_dir2_sf_get_parent_ino(sfp) > XFS_DIR2_MAX_SHORT_INUM); /* * check for bad entry count */ - if (num_entries * xfs_dir2_sf_entsize(&sfp->hdr, 1) + + if (num_entries * xfs_dir2_sf_entsize(sfp, 1) + xfs_dir2_sf_hdr_size(0) > max_size || num_entries == 0) num_entries = 0xFF; @@ -779,7 +779,7 @@ process_sf_dir2( * run through entries, stop at first bad entry, don't need * to check for .. since that's encoded in its own field */ - sfep = next_sfep = xfs_dir2_sf_firstentry(&sfp->hdr); + sfep = next_sfep = xfs_dir2_sf_firstentry(sfp); for (i = 0; i < num_entries && ino_dir_size > (char *)next_sfep - (char *)sfp; i++) { @@ -787,7 +787,7 @@ process_sf_dir2( sfep = next_sfep; junkit = 0; bad_sfnamelen = 0; - lino = xfs_dir2_sfe_get_ino(&sfp->hdr, sfep); + lino = xfs_dir2_sfe_get_ino(sfp, sfep); /* * if entry points to self, junk it since only '.' or '..' * should do that and shortform dirs don't contain either @@ -901,7 +901,7 @@ _("zero length entry in shortform dir %" PRIu64 ""), break; } } else if ((__psint_t) sfep - (__psint_t) sfp + - xfs_dir2_sf_entsize(&sfp->hdr, sfep->namelen) + xfs_dir2_sf_entsize(sfp, sfep->namelen) > ino_dir_size) { bad_sfnamelen = 1; @@ -989,7 +989,7 @@ _("entry contains offset out of order in shortform dir %" PRIu64 "\n"), name[namelen] = '\0'; if (!no_modify) { - tmp_elen = xfs_dir2_sf_entsize(&sfp->hdr, + tmp_elen = xfs_dir2_sf_entsize(sfp, sfep->namelen); be64_add_cpu(&dip->di_size, -tmp_elen); ino_dir_size -= tmp_elen; @@ -1001,7 +1001,7 @@ _("entry contains offset out of order in shortform dir %" PRIu64 "\n"), memmove(sfep, tmp_sfep, tmp_len); - sfp->hdr.count -= 1; + sfp->count -= 1; num_entries--; memset((void *) ((__psint_t) sfep + tmp_len), 0, tmp_elen); @@ -1043,41 +1043,41 @@ _("would have junked entry \"%s\" in directory inode %" PRIu64 "\n"), next_sfep = (tmp_sfep == NULL) ? (xfs_dir2_sf_entry_t *) ((__psint_t) sfep + ((!bad_sfnamelen) - ? xfs_dir2_sf_entsize(&sfp->hdr, sfep->namelen) - : xfs_dir2_sf_entsize(&sfp->hdr, namelen))) + ? xfs_dir2_sf_entsize(sfp, sfep->namelen) + : xfs_dir2_sf_entsize(sfp, namelen))) : tmp_sfep; } /* sync up sizes and entry counts */ - if (sfp->hdr.count != i) { + if (sfp->count != i) { if (no_modify) { do_warn( _("would have corrected entry count in directory %" PRIu64 " from %d to %d\n"), - ino, sfp->hdr.count, i); + ino, sfp->count, i); } else { do_warn( _("corrected entry count in directory %" PRIu64 ", was %d, now %d\n"), - ino, sfp->hdr.count, i); - sfp->hdr.count = i; + ino, sfp->count, i); + sfp->count = i; *dino_dirty = 1; *repair = 1; } } - if (sfp->hdr.i8count != i8) { + if (sfp->i8count != i8) { if (no_modify) { do_warn( _("would have corrected i8 count in directory %" PRIu64 " from %d to %d\n"), - ino, sfp->hdr.i8count, i8); + ino, sfp->i8count, i8); } else { do_warn( _("corrected i8 count in directory %" PRIu64 ", was %d, now %d\n"), - ino, sfp->hdr.i8count, i8); + ino, sfp->i8count, i8); if (i8 == 0) process_sf_dir2_fixi8(sfp, &next_sfep); else - sfp->hdr.i8count = i8; + sfp->i8count = i8; *dino_dirty = 1; *repair = 1; } @@ -1101,7 +1101,7 @@ _("corrected directory %" PRIu64 " size, was %" PRId64 ", now %" PRIdPTR "\n"), *repair = 1; } } - if (offset + (sfp->hdr.count + 2) * sizeof(xfs_dir2_leaf_entry_t) + + if (offset + (sfp->count + 2) * sizeof(xfs_dir2_leaf_entry_t) + sizeof(xfs_dir2_block_tail_t) > mp->m_dirblksize) { do_warn(_("directory %" PRIu64 " offsets too high\n"), ino); bad_offset = 1; @@ -1124,7 +1124,7 @@ _("corrected entry offsets in directory %" PRIu64 "\n"), /* * check parent (..) entry */ - *parent = xfs_dir2_sf_get_parent_ino(&sfp->hdr); + *parent = xfs_dir2_sf_get_parent_ino(sfp); /* * if parent entry is bogus, null it out. we'll fix it later . @@ -1138,7 +1138,7 @@ _("bogus .. inode number (%" PRIu64 ") in directory inode %" PRIu64 ", "), if (!no_modify) { do_warn(_("clearing inode number\n")); - xfs_dir2_sf_put_parent_ino(&sfp->hdr, zero); + xfs_dir2_sf_put_parent_ino(sfp, zero); *dino_dirty = 1; *repair = 1; } else { @@ -1153,7 +1153,7 @@ _("bogus .. inode number (%" PRIu64 ") in directory inode %" PRIu64 ", "), _("corrected root directory %" PRIu64 " .. entry, was %" PRIu64 ", now %" PRIu64 "\n"), ino, *parent, ino); *parent = ino; - xfs_dir2_sf_put_parent_ino(&sfp->hdr, ino); + xfs_dir2_sf_put_parent_ino(sfp, ino); *dino_dirty = 1; *repair = 1; } else { @@ -1173,7 +1173,7 @@ _("bad .. entry in directory inode %" PRIu64 ", points to self, "), if (!no_modify) { do_warn(_("clearing inode number\n")); - xfs_dir2_sf_put_parent_ino(&sfp->hdr, zero); + xfs_dir2_sf_put_parent_ino(sfp, zero); *dino_dirty = 1; *repair = 1; } else { @@ -1207,7 +1207,7 @@ process_dir2_data( xfs_dir2_data_free_t *bf; int clearino; char *clearreason = NULL; - xfs_dir2_data_t *d; + struct xfs_dir2_data_hdr *d; xfs_dir2_data_entry_t *dep; xfs_dir2_data_free_t *dfp; xfs_dir2_data_unused_t *dup; @@ -1222,8 +1222,8 @@ process_dir2_data( xfs_ino_t ent_ino; d = bp->b_addr; - bf = xfs_dir3_data_bestfree_p(&d->hdr); - ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); + bf = xfs_dir3_data_bestfree_p(d); + ptr = (char *)xfs_dir3_data_entry_p(d); badbest = lastfree = freeseen = 0; if (be16_to_cpu(bf[0].length) == 0) { badbest |= be16_to_cpu(bf[0].offset) != 0; @@ -1255,7 +1255,7 @@ process_dir2_data( (char *)dup - (char *)d) break; badbest |= lastfree != 0; - dfp = xfs_dir2_data_freefind(&d->hdr, dup); + dfp = xfs_dir2_data_freefind(d, dup); if (dfp) { i = dfp - bf; badbest |= (freeseen & (1 << i)) != 0; @@ -1289,7 +1289,7 @@ process_dir2_data( do_warn(_("\twould junk block\n")); return 1; } - ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); + ptr = (char *)xfs_dir3_data_entry_p(d); /* * Process the entries now. */ @@ -1539,7 +1539,7 @@ _("bad bestfree table in block %u in directory inode %" PRIu64 ": "), da_bno, ino); if (!no_modify) { do_warn(_("repairing table\n")); - libxfs_dir2_data_freescan(mp, &d->hdr, &i); + libxfs_dir2_data_freescan(mp, d, &i); *dirty = 1; } else { do_warn(_("would repair table\n")); @@ -1566,7 +1566,7 @@ process_block_dir2( int *dotdot, /* out - 1 if there's a dotdot, else 0 */ int *repair) /* out - 1 if something was fixed */ { - xfs_dir2_block_t *block; + struct xfs_dir2_data_hdr *block; xfs_dir2_leaf_entry_t *blp; bmap_ext_t *bmp; struct xfs_buf *bp; @@ -1598,16 +1598,16 @@ _("can't read block %u for directory inode %" PRIu64 "\n"), * Verify the block */ block = bp->b_addr; - if (!(be32_to_cpu(block->hdr.magic) == XFS_DIR2_BLOCK_MAGIC || - be32_to_cpu(block->hdr.magic) == XFS_DIR3_BLOCK_MAGIC)) + if (!(be32_to_cpu(block->magic) == XFS_DIR2_BLOCK_MAGIC || + be32_to_cpu(block->magic) == XFS_DIR3_BLOCK_MAGIC)) do_warn( _("bad directory block magic # %#x in block %u for directory inode %" PRIu64 "\n"), - be32_to_cpu(block->hdr.magic), mp->m_dirdatablk, ino); + be32_to_cpu(block->magic), mp->m_dirdatablk, ino); /* * process the data area * this also checks & fixes the bestfree */ - btp = xfs_dir2_block_tail_p(mp, &block->hdr); + btp = xfs_dir2_block_tail_p(mp, block); blp = xfs_dir2_block_leaf_p(btp); /* * Don't let this go past the end of the block. @@ -1878,7 +1878,7 @@ process_leaf_node_dir2( { bmap_ext_t *bmp; struct xfs_buf *bp; - xfs_dir2_data_t *data; + struct xfs_dir2_data_hdr *data; xfs_dfiloff_t dbno; int good; int i; @@ -1914,11 +1914,11 @@ _("can't read block %" PRIu64 " for directory inode %" PRIu64 "\n"), continue; } data = bp->b_addr; - if (!(be32_to_cpu(data->hdr.magic) == XFS_DIR2_DATA_MAGIC || - be32_to_cpu(data->hdr.magic) == XFS_DIR3_DATA_MAGIC)) + if (!(be32_to_cpu(data->magic) == XFS_DIR2_DATA_MAGIC || + be32_to_cpu(data->magic) == XFS_DIR3_DATA_MAGIC)) do_warn( _("bad directory block magic # %#x in block %" PRIu64 " for directory inode %" PRIu64 "\n"), - be32_to_cpu(data->hdr.magic), dbno, ino); + be32_to_cpu(data->magic), dbno, ino); i = process_dir2_data(mp, ino, dip, ino_discovery, dirname, parent, bp, dot, dotdot, (xfs_dablk_t)dbno, (char *)data + mp->m_dirblksize, &dirty); diff --git a/repair/dir2.h b/repair/dir2.h index 6ba96bb..3d8fe8a 100644 --- a/repair/dir2.h +++ b/repair/dir2.h @@ -23,32 +23,6 @@ struct blkmap; struct bmap_ext; /* - * generic dir2 structures used by xfs_repair. - * XXX: shared with xfsdb - */ -typedef union { - xfs_dir2_data_entry_t entry; - xfs_dir2_data_unused_t unused; -} xfs_dir2_data_union_t; - -typedef struct xfs_dir2_data { - xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_DATA_MAGIC */ - xfs_dir2_data_union_t __u[1]; -} xfs_dir2_data_t; - -typedef struct xfs_dir2_block { - xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_BLOCK_MAGIC */ - xfs_dir2_data_union_t __u[1]; - xfs_dir2_leaf_entry_t __leaf[1]; - xfs_dir2_block_tail_t tail; -} xfs_dir2_block_t; - -typedef struct xfs_dir2_sf { - xfs_dir2_sf_hdr_t hdr; /* shortform header */ - xfs_dir2_sf_entry_t list[1]; /* shortform entries */ -} xfs_dir2_sf_t; - -/* * the cursor gets passed up and down the da btree processing * routines. The interior block processing routines use the * cursor to determine if the pointers to and from the preceding @@ -98,7 +72,7 @@ process_dir2( void process_sf_dir2_fixi8( - xfs_dir2_sf_t *sfp, + struct xfs_dir2_sf_hdr *sfp, xfs_dir2_sf_entry_t **next_sfep); int diff --git a/repair/phase6.c b/repair/phase6.c index 6976d0c..1fdd4c8 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1391,7 +1391,7 @@ longform_dir2_entry_check_data( struct xfs_buf *bp; xfs_dir2_block_tail_t *btp; int committed; - xfs_dir2_data_t *d; + struct xfs_dir2_data_hdr *d; xfs_dir2_db_t db; xfs_dir2_data_entry_t *dep; xfs_dir2_data_unused_t *dup; @@ -1418,7 +1418,7 @@ longform_dir2_entry_check_data( bp = *bpp; d = bp->b_addr; - ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); + ptr = (char *)xfs_dir3_data_entry_p(d); nbad = 0; needscan = needlog = 0; junkit = 0; @@ -1479,7 +1479,7 @@ longform_dir2_entry_check_data( break; /* check for block with no data entries */ - if ((ptr == (char *)xfs_dir3_data_entry_p(&d->hdr)) && + if ((ptr == (char *)xfs_dir3_data_entry_p(d)) && (ptr + be16_to_cpu(dup->length) >= endptr)) { junkit = 1; *num_illegal += 1; @@ -1539,19 +1539,19 @@ longform_dir2_entry_check_data( libxfs_trans_bjoin(tp, bp); libxfs_trans_bhold(tp, bp); xfs_bmap_init(&flist, &firstblock); - if (be32_to_cpu(d->hdr.magic) != wantmagic) { + if (be32_to_cpu(d->magic) != wantmagic) { do_warn( _("bad directory block magic # %#x for directory inode %" PRIu64 " block %d: "), - be32_to_cpu(d->hdr.magic), ip->i_ino, da_bno); + be32_to_cpu(d->magic), ip->i_ino, da_bno); if (!no_modify) { do_warn(_("fixing magic # to %#x\n"), wantmagic); - d->hdr.magic = cpu_to_be32(wantmagic); + d->magic = cpu_to_be32(wantmagic); needlog = 1; } else do_warn(_("would fix magic # to %#x\n"), wantmagic); } lastfree = 0; - ptr = (char *)xfs_dir3_data_entry_p(&d->hdr); + ptr = (char *)xfs_dir3_data_entry_p(d); /* * look at each entry. reference inode pointed to by each * entry in the incore inode tree. @@ -1722,7 +1722,7 @@ longform_dir2_entry_check_data( ASSERT(dep->name[0] == '.' && dep->namelen == 1); add_inode_ref(current_irec, current_ino_offset); if (da_bno != 0 || - dep != xfs_dir3_data_entry_p(&d->hdr)) { + dep != xfs_dir3_data_entry_p(d)) { /* "." should be the first entry */ nbad++; if (entry_junked( @@ -1803,12 +1803,12 @@ _("entry \"%s\" in dir inode %" PRIu64 " inconsistent with .. value (%" PRIu64 " } *num_illegal += nbad; if (needscan) - libxfs_dir2_data_freescan(mp, &d->hdr, &needlog); + libxfs_dir2_data_freescan(mp, d, &needlog); if (needlog) libxfs_dir2_data_log_header(tp, bp); libxfs_bmap_finish(&tp, &flist, &committed); libxfs_trans_commit(tp, 0); - freetab->ents[db].v = be16_to_cpu(d->hdr.bestfree[0].length); + freetab->ents[db].v = be16_to_cpu(d->bestfree[0].length); freetab->ents[db].s = 0; } @@ -2029,7 +2029,6 @@ longform_dir2_entry_check(xfs_mount_t *mp, int ino_offset, dir_hash_tab_t *hashtab) { - xfs_dir2_block_t *block; struct xfs_buf **bplist; xfs_dablk_t da_bno; freetab_t *freetab; @@ -2096,11 +2095,12 @@ longform_dir2_entry_check(xfs_mount_t *mp, if (!dotdot_update) { /* check btree and freespace */ if (isblock) { + struct xfs_dir2_data_hdr *block; xfs_dir2_block_tail_t *btp; xfs_dir2_leaf_entry_t *blp; block = bplist[0]->b_addr; - btp = xfs_dir2_block_tail_p(mp, &block->hdr); + btp = xfs_dir2_block_tail_p(mp, block); blp = xfs_dir2_block_leaf_p(btp); seeval = dir_hash_see_all(hashtab, blp, be32_to_cpu(btp->count), @@ -2148,7 +2148,7 @@ shortform_dir2_entry_check(xfs_mount_t *mp, { xfs_ino_t lino; xfs_ino_t parent; - xfs_dir2_sf_t *sfp; + struct xfs_dir2_sf_hdr *sfp; xfs_dir2_sf_entry_t *sfep, *next_sfep, *tmp_sfep; xfs_ifork_t *ifp; ino_tree_node_t *irec; @@ -2165,7 +2165,7 @@ shortform_dir2_entry_check(xfs_mount_t *mp, int i8; ifp = &ip->i_df; - sfp = (xfs_dir2_sf_t *) ifp->if_u1.if_data; + sfp = (struct xfs_dir2_sf_hdr *) ifp->if_u1.if_data; *ino_dirty = 0; bytes_deleted = 0; @@ -2185,7 +2185,7 @@ shortform_dir2_entry_check(xfs_mount_t *mp, do_warn( _("setting .. in sf dir inode %" PRIu64 " to %" PRIu64 "\n"), ino, parent); - xfs_dir2_sf_put_parent_ino(&sfp->hdr, parent); + xfs_dir2_sf_put_parent_ino(sfp, parent); *ino_dirty = 1; } return; @@ -2202,23 +2202,23 @@ shortform_dir2_entry_check(xfs_mount_t *mp, /* * Initialise i8 counter -- the parent inode number counts as well. */ - i8 = xfs_dir2_sf_get_parent_ino(&sfp->hdr) > XFS_DIR2_MAX_SHORT_INUM; + i8 = xfs_dir2_sf_get_parent_ino(sfp) > XFS_DIR2_MAX_SHORT_INUM; /* * now run through entries, stop at first bad entry, don't need * to skip over '..' since that's encoded in its own field and * no need to worry about '.' since it doesn't exist. */ - sfep = next_sfep = xfs_dir2_sf_firstentry(&sfp->hdr); + sfep = next_sfep = xfs_dir2_sf_firstentry(sfp); - for (i = 0; i < sfp->hdr.count && max_size > + for (i = 0; i < sfp->count && max_size > (__psint_t)next_sfep - (__psint_t)sfp; sfep = next_sfep, i++) { junkit = 0; bad_sfnamelen = 0; tmp_sfep = NULL; - lino = xfs_dir2_sfe_get_ino(&sfp->hdr, sfep); + lino = xfs_dir2_sfe_get_ino(sfp, sfep); namelen = sfep->namelen; @@ -2235,7 +2235,7 @@ shortform_dir2_entry_check(xfs_mount_t *mp, */ bad_sfnamelen = 1; - if (i == sfp->hdr.count - 1) { + if (i == sfp->count - 1) { namelen = ip->i_d.di_size - ((__psint_t) &sfep->name[0] - (__psint_t) sfp); @@ -2247,11 +2247,11 @@ shortform_dir2_entry_check(xfs_mount_t *mp, break; } } else if (no_modify && (__psint_t) sfep - (__psint_t) sfp + - + xfs_dir2_sf_entsize(&sfp->hdr, sfep->namelen) + + xfs_dir2_sf_entsize(sfp, sfep->namelen) > ip->i_d.di_size) { bad_sfnamelen = 1; - if (i == sfp->hdr.count - 1) { + if (i == sfp->count - 1) { namelen = ip->i_d.di_size - ((__psint_t) &sfep->name[0] - (__psint_t) sfp); @@ -2277,7 +2277,7 @@ shortform_dir2_entry_check(xfs_mount_t *mp, if (no_modify && verify_inum(mp, lino)) { next_sfep = (xfs_dir2_sf_entry_t *)((__psint_t)sfep + - xfs_dir2_sf_entsize(&sfp->hdr, sfep->namelen)); + xfs_dir2_sf_entsize(sfp, sfep->namelen)); continue; } @@ -2328,7 +2328,7 @@ shortform_dir2_entry_check(xfs_mount_t *mp, * check for duplicate names in directory. */ if (!dir_hash_add(mp, hashtab, (xfs_dir2_dataptr_t) - (sfep - xfs_dir2_sf_firstentry(&sfp->hdr)), + (sfep - xfs_dir2_sf_firstentry(sfp)), lino, sfep->namelen, sfep->name)) { do_warn( _("entry \"%s\" (ino %" PRIu64 ") in dir %" PRIu64 " is a duplicate name"), @@ -2385,7 +2385,7 @@ do_junkit: if (lino == orphanage_ino) orphanage_ino = 0; if (!no_modify) { - tmp_elen = xfs_dir2_sf_entsize(&sfp->hdr, + tmp_elen = xfs_dir2_sf_entsize(sfp, sfep->namelen); tmp_sfep = (xfs_dir2_sf_entry_t *) ((__psint_t) sfep + tmp_elen); @@ -2396,7 +2396,7 @@ do_junkit: memmove(sfep, tmp_sfep, tmp_len); - sfp->hdr.count -= 1; + sfp->count -= 1; memset((void *)((__psint_t)sfep + tmp_len), 0, tmp_elen); @@ -2438,12 +2438,12 @@ do_junkit: next_sfep = (tmp_sfep == NULL) ? (xfs_dir2_sf_entry_t *) ((__psint_t) sfep + ((!bad_sfnamelen) - ? xfs_dir2_sf_entsize(&sfp->hdr, sfep->namelen) - : xfs_dir2_sf_entsize(&sfp->hdr, namelen))) + ? xfs_dir2_sf_entsize(sfp, sfep->namelen) + : xfs_dir2_sf_entsize(sfp, namelen))) : tmp_sfep; } - if (sfp->hdr.i8count != i8) { + if (sfp->i8count != i8) { if (no_modify) { do_warn(_("would fix i8count in inode %" PRIu64 "\n"), ino); @@ -2456,7 +2456,7 @@ do_junkit: (__psint_t)tmp_sfep; next_sfep = tmp_sfep; } else - sfp->hdr.i8count = i8; + sfp->i8count = i8; *ino_dirty = 1; do_warn(_("fixing i8count in inode %" PRIu64 "\n"), ino); -- 1.7.10.4 From itaru.kitayama@gmail.com Mon May 20 03:29:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5BDE029DF8 for ; Mon, 20 May 2013 03:29:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 387118F8033 for ; Mon, 20 May 2013 01:29:32 -0700 (PDT) X-ASG-Debug-ID: 1369038570-04cb6c10b8c63b0001-NocioJ Received: from mail-wg0-f46.google.com (mail-wg0-f46.google.com [74.125.82.46]) by cuda.sgi.com with ESMTP id VK3LXQJ3RH6ZQckt (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 May 2013 01:29:30 -0700 (PDT) X-Barracuda-Envelope-From: itaru.kitayama@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.46 Received: by mail-wg0-f46.google.com with SMTP id l18so817475wgh.13 for ; Mon, 20 May 2013 01:29:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=nSq7tV+GTtCCVM8xe/lVb+FEPafFA2GRtLxbSsg5ycc=; b=aZUiD6VEqpc3hyfgEj3XMLk20UBNnACnP+Y/4OnzuNj4BPYVNn/bQKimzRv1JX1jp9 PIypTvfEgg91vGo1vmi6G6RkepEEamkCCFLcastYCgg0LrcNVfJrn5LgeNdWPDMZw00N 8uuptfgZM7GRXWmGwrwFqUGmIO7tFNOa2A+9+2ePqBFN5YYAYmigxHSTj5c8uzVy88uJ mvH6fkiucSGatMdZDfsu6nNQdbnCYWeCBJLO+X69IF182ECjljG8oiTqi8xDRF4pTvsM +j50Tpn6v/8aRm/YMm5H4AtgUeiVbj2ukU4QXUYsZo103AjvDOmVjHzxsoQIr5I3ODSv lYAw== MIME-Version: 1.0 X-Received: by 10.181.13.42 with SMTP id ev10mr11445364wid.1.1369038569826; Mon, 20 May 2013 01:29:29 -0700 (PDT) Received: by 10.194.55.42 with HTTP; Mon, 20 May 2013 01:29:29 -0700 (PDT) Date: Mon, 20 May 2013 17:29:29 +0900 Message-ID: Subject: [PATCH] xfstests comma separated group names From: Itaru Kitayama X-ASG-Orig-Subj: [PATCH] xfstests comma separated group names To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=f46d04388df1a3726d04dd2221d3 X-Barracuda-Connect: mail-wg0-f46.google.com[74.125.82.46] X-Barracuda-Start-Time: 1369038570 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --f46d04388df1a3726d04dd2221d3 Content-Type: text/plain; charset=ISO-8859-1 This patch lets the -g option take multiple group names. Signed-off-By: Itaru Kitayama check | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/check b/check index a79747e..0e0f208 100755 --- a/check +++ b/check @@ -164,18 +164,19 @@ while [ $# -gt 0 ]; do -nfs) FSTYP=nfs ;; -g) group=$2 ; shift ; - group_list=$(get_group_list $group) - if [ -z "$group_list" ]; then - echo "Group \"$group\" is empty or not defined?" - exit 1 - fi - - [ ! -s $tmp.list ] && touch $tmp.list - for t in $group_list; do - grep -s "^$t\$" $tmp.list >/dev/null || \ - echo "$t" >>$tmp.list + for g in ${group//,/ }; do + group_list=$(get_group_list $g) + if [ -z "$group_list" ]; then + echo "Group \"$g\" is empty or not defined?" + exit 1 + fi + + [ ! -s $tmp.list ] && touch $tmp.list + for t in $group_list; do + grep -s "^$t\$" $tmp.list >/dev/null || \ + echo "$t" >>$tmp + done done - ;; -x) xgroup=$2 ; shift ; --f46d04388df1a3726d04dd2221d3 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 if [ -z "$group_list" ]; then<= /div>
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "Group \"$gr= oup\" is empty or not defined?"
- =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 exit 1
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 fi
-
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 [ ! -s $tmp.list ] &&= ; touch $tmp.list
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 for t in $group_l= ist; do
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 grep -s &qu= ot;^$t\$" $tmp.list >/dev/null || \
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "$t" >>$tmp.li= st
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 for g in ${group//,/ }; do
=
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 group_list=3D$(get_group= _list $g)
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if [ -z "$group_lis= t" ]; then
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ech= o "Group \"$g\" is empty or not defined?"
+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 exit 1
+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 fi
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0=A0
+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 [ ! -s $tmp.list ] && touch $tmp.list
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for t in $group_list; do
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 grep -= s "^$t\$" $tmp.list >/dev/null || \
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "$t"= >>$tmp
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 done<= /div>
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 done
-
=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 ;;
=A0
=A0 =A0 =A0 =A0 -x) =A0 =A0 xgroup=3D$2 ; shift ;
--f46d04388df1a3726d04dd2221d3-- From david@fromorbit.com Mon May 20 06:30:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6E5DB7F37 for ; Mon, 20 May 2013 06:30:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 08AB1AC003 for ; Mon, 20 May 2013 04:30:50 -0700 (PDT) X-ASG-Debug-ID: 1369049448-04bdf04225439890001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id vwAOSBOHYNCUnV9Z for ; Mon, 20 May 2013 04:30:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhcNAPYImlF5LH3D/2dsb2JhbABagwiDArlJhRsEAX4XdIIfAQEFOhwjEAgDGAklDwUNGAMhE4d7Aw6xUg2IbhaMNIE6gR0HgnNhA5VSgWWMHoUjgyEq Received: from ppp121-44-125-195.lns20.syd6.internode.on.net (HELO dastard) ([121.44.125.195]) by ipmail05.adl6.internode.on.net with ESMTP; 20 May 2013 21:00:48 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UeOIf-0007Tj-M8; Mon, 20 May 2013 21:30:45 +1000 Date: Mon, 20 May 2013 21:30:45 +1000 From: Dave Chinner To: Itaru Kitayama Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests comma separated group names Message-ID: <20130520113045.GB24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests comma separated group names References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369049449 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA298e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131500 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC7_SA298e Custom Rule SA298e On Mon, May 20, 2013 at 05:29:29PM +0900, Itaru Kitayama wrote: > This patch lets the -g option take multiple group names. > > Signed-off-By: Itaru Kitayama You can already run multiple test groups by specifying multiple -g options. e.g: # check -g rw -g attr Cheers, Dave. -- Dave Chinner david@fromorbit.com From itaru.kitayama@gmail.com Mon May 20 06:42:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9E19D7F37 for ; Mon, 20 May 2013 06:42:41 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8B5E0304039 for ; Mon, 20 May 2013 04:42:41 -0700 (PDT) X-ASG-Debug-ID: 1369050156-04cb6c10c2d1d40001-NocioJ Received: from mail-we0-f178.google.com (mail-we0-f178.google.com [74.125.82.178]) by cuda.sgi.com with ESMTP id ufMbqAVDACNlX1is (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 May 2013 04:42:37 -0700 (PDT) X-Barracuda-Envelope-From: itaru.kitayama@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.178 Received: by mail-we0-f178.google.com with SMTP id q57so4860509wes.23 for ; Mon, 20 May 2013 04:42:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=mn31MT5hOQsQggYZqwTcclx7YfdYNsexJqu8CJtEisA=; b=XNRPapIQb5sWpWuUczv3cflFlnyhLLHfjaxoP6dIECTeari6zMqEnPisLBj9WJxlOl c1wlvP3grJK1gHDSn/eB6l5RcaucFAmV/kyQQWENF0MsQ2/MtMrJUPvDZfFNnbp6xJ0t OYWFyyEDLyz+EmYgwWDXcClwFNcdXUkFSF8EbFaV9b5J4pQf/uTyJhRTFxvlVdpQbGzE hC7BDO+4pVy3avYxe4k0ASGvXg9pEjgQrUrObwrN4imzgJKp1zQS8oZTZCl8GTfqZWQf VwWqGgSyGzaA+Fxi28CtWixIY5CLw/kFA4dXq8YfJLfGR+OJbjfQUsYptIxhQ+TuyV76 tszw== MIME-Version: 1.0 X-Received: by 10.180.185.179 with SMTP id fd19mr13012476wic.1.1369050155948; Mon, 20 May 2013 04:42:35 -0700 (PDT) Received: by 10.194.55.42 with HTTP; Mon, 20 May 2013 04:42:35 -0700 (PDT) In-Reply-To: <20130520113045.GB24543@dastard> References: <20130520113045.GB24543@dastard> Date: Mon, 20 May 2013 20:42:35 +0900 Message-ID: Subject: Re: [PATCH] xfstests comma separated group names From: Itaru Kitayama X-ASG-Orig-Subj: Re: [PATCH] xfstests comma separated group names To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c25e4c39a22a04dd24d4ed X-Barracuda-Connect: mail-we0-f178.google.com[74.125.82.178] X-Barracuda-Start-Time: 1369050157 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131501 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c25e4c39a22a04dd24d4ed Content-Type: text/plain; charset=ISO-8859-1 Yes, we can do that, but I just thought as you originally proposed last year -g rw,attr reads better. Itaru On Mon, May 20, 2013 at 8:30 PM, Dave Chinner wrote: > On Mon, May 20, 2013 at 05:29:29PM +0900, Itaru Kitayama wrote: > > This patch lets the -g option take multiple group names. > > > > Signed-off-By: Itaru Kitayama > > You can already run multiple test groups by specifying multiple -g > options. e.g: > > # check -g rw -g attr > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > --001a11c25e4c39a22a04dd24d4ed Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Yes, we can do that, but I just thought as you originally = proposed last year

-g rw,attr reads better.<= /div>

Itaru


On Mon, May 20, 2013 at 8:30 PM, Dave Ch= inner <david@fromorbit.com> wrote:
On Mon, May 20, 2013 at 05:29:29PM +0900, Itaru Kitayama = wrote:
> This patch lets the -g option take multiple group names.
>
> Signed-off-By: Itaru Kitayama <itaru.kitayama@gmail.com>

You can already run multiple test groups by specifying multiple -g options. e.g:

# check -g rw -g attr

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com

--001a11c25e4c39a22a04dd24d4ed-- From jack@suse.cz Mon May 20 08:56:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 719097F37 for ; Mon, 20 May 2013 08:56:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3E3078F8064 for ; Mon, 20 May 2013 06:56:12 -0700 (PDT) X-ASG-Debug-ID: 1369058169-04bdf04226443790001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id U4mpAgos4S3Pws7E for ; Mon, 20 May 2013 06:56:10 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 302E5A3DDF; Mon, 20 May 2013 15:56:09 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 9590880E9B; Mon, 20 May 2013 15:56:07 +0200 (CEST) Date: Mon, 20 May 2013 15:56:07 +0200 From: Jan Kara To: xfs@oss.sgi.com Cc: dchinner@redhat.com, tinguely@sgi.com, Jan Kara Subject: Re: [PATCH v2] xfs: Avoid pathological backwards allocation Message-ID: <20130520135607.GA11502@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH v2] xfs: Avoid pathological backwards allocation References: <1365710996-16439-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1365710996-16439-1-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369058170 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131511 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 11-04-13 22:09:56, Jan Kara wrote: > Writing a large file using direct IO in 16 MB chunks sometimes results > in a pathological allocation pattern where 16 MB chunks of large free > extent are allocated to a file in a reversed order. So extents of a file > look for example as: > > ext logical physical expected length flags > 0 0 13 4550656 > 1 4550656 188136807 4550668 12562432 > 2 17113088 200699240 200699238 622592 > 3 17735680 182046055 201321831 4096 > 4 17739776 182041959 182050150 4096 > 5 17743872 182037863 182046054 4096 > 6 17747968 182033767 182041958 4096 > 7 17752064 182029671 182037862 4096 > ... > 6757 45400064 154381644 154389835 4096 > 6758 45404160 154377548 154385739 4096 > 6759 45408256 252951571 154381643 73728 eof > > This happens because XFS_ALLOCTYPE_THIS_BNO allocation fails (the last > extent in the file cannot be further extended) so we fall back to > XFS_ALLOCTYPE_NEAR_BNO allocation which picks end of a large free > extent as the best place to continue the file. Since the chunk at the > end of the free extent again cannot be further extended, this behavior > repeats until the whole free extent is consumed in a reversed order. > > For data allocations this backward allocation isn't beneficial so make > xfs_alloc_compute_diff() pick start of a free extent instead of its end > for them. That avoids the backward allocation pattern. > > See thread at http://oss.sgi.com/archives/xfs/2013-03/msg00144.html for > more details about the reproduction case and why this solution was > chosen. > > Based on idea by Dave Chinner . > > CC: Dave Chinner > Reviewed-by: Dave Chinner > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_alloc.c | 24 ++++++++++++++++++------ > 1 files changed, 18 insertions(+), 6 deletions(-) > > v2: Updated comment and commit description. Could anybody pull this patch into XFS tree? I don't see it there... Honza > > diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c > index 0ad2325..f99113d 100644 > --- a/fs/xfs/xfs_alloc.c > +++ b/fs/xfs/xfs_alloc.c > @@ -173,6 +173,7 @@ xfs_alloc_compute_diff( > xfs_agblock_t wantbno, /* target starting block */ > xfs_extlen_t wantlen, /* target length */ > xfs_extlen_t alignment, /* target alignment */ > + char userdata, /* are we allocating data? */ > xfs_agblock_t freebno, /* freespace's starting block */ > xfs_extlen_t freelen, /* freespace's length */ > xfs_agblock_t *newbnop) /* result: best start block from free */ > @@ -187,7 +188,14 @@ xfs_alloc_compute_diff( > ASSERT(freelen >= wantlen); > freeend = freebno + freelen; > wantend = wantbno + wantlen; > - if (freebno >= wantbno) { > + /* > + * We want to allocate from the start of a free extent if it is past > + * the desired block or if we are allocating user data and the free > + * extent is before desired block. The second case is there to allow > + * for contiguous allocation from the remaining free space if the file > + * grows in the short term. > + */ > + if (freebno >= wantbno || (userdata && freeend < wantend)) { > if ((newbno1 = roundup(freebno, alignment)) >= freeend) > newbno1 = NULLAGBLOCK; > } else if (freeend >= wantend && alignment > 1) { > @@ -772,7 +780,8 @@ xfs_alloc_find_best_extent( > xfs_alloc_fix_len(args); > > sdiff = xfs_alloc_compute_diff(args->agbno, args->len, > - args->alignment, *sbnoa, > + args->alignment, > + args->userdata, *sbnoa, > *slena, &new); > > /* > @@ -943,7 +952,8 @@ restart: > if (args->len < blen) > continue; > ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, > - args->alignment, ltbnoa, ltlena, <new); > + args->alignment, args->userdata, ltbnoa, > + ltlena, <new); > if (ltnew != NULLAGBLOCK && > (args->len > blen || ltdiff < bdiff)) { > bdiff = ltdiff; > @@ -1095,7 +1105,8 @@ restart: > args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); > xfs_alloc_fix_len(args); > ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, > - args->alignment, ltbnoa, ltlena, <new); > + args->alignment, args->userdata, ltbnoa, > + ltlena, <new); > > error = xfs_alloc_find_best_extent(args, > &bno_cur_lt, &bno_cur_gt, > @@ -1111,7 +1122,8 @@ restart: > args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); > xfs_alloc_fix_len(args); > gtdiff = xfs_alloc_compute_diff(args->agbno, args->len, > - args->alignment, gtbnoa, gtlena, >new); > + args->alignment, args->userdata, gtbnoa, > + gtlena, >new); > > error = xfs_alloc_find_best_extent(args, > &bno_cur_gt, &bno_cur_lt, > @@ -1170,7 +1182,7 @@ restart: > } > rlen = args->len; > (void)xfs_alloc_compute_diff(args->agbno, rlen, args->alignment, > - ltbnoa, ltlena, <new); > + args->userdata, ltbnoa, ltlena, <new); > ASSERT(ltnew >= ltbno); > ASSERT(ltnew + rlen <= ltbnoa + ltlena); > ASSERT(ltnew + rlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); > -- > 1.7.1 > -- Jan Kara SUSE Labs, CR From tinguely@sgi.com Mon May 20 09:57:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9F5F27F37 for ; Mon, 20 May 2013 09:57:39 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4DF38304032; Mon, 20 May 2013 07:57:36 -0700 (PDT) Message-ID: <519A39E0.1020309@sgi.com> Date: Mon, 20 May 2013 09:57:36 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, dchinner@redhat.com Subject: Re: [PATCH v2] xfs: Avoid pathological backwards allocation References: <1365710996-16439-1-git-send-email-jack@suse.cz> <20130520135607.GA11502@quack.suse.cz> In-Reply-To: <20130520135607.GA11502@quack.suse.cz> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/20/13 08:56, Jan Kara wrote: > On Thu 11-04-13 22:09:56, Jan Kara wrote: >> Writing a large file using direct IO in 16 MB chunks sometimes results >> in a pathological allocation pattern where 16 MB chunks of large free >> extent are allocated to a file in a reversed order. So extents of a file >> look for example as: >> >> ext logical physical expected length flags >> 0 0 13 4550656 >> 1 4550656 188136807 4550668 12562432 >> 2 17113088 200699240 200699238 622592 >> 3 17735680 182046055 201321831 4096 >> 4 17739776 182041959 182050150 4096 >> 5 17743872 182037863 182046054 4096 >> 6 17747968 182033767 182041958 4096 >> 7 17752064 182029671 182037862 4096 >> ... >> 6757 45400064 154381644 154389835 4096 >> 6758 45404160 154377548 154385739 4096 >> 6759 45408256 252951571 154381643 73728 eof >> >> This happens because XFS_ALLOCTYPE_THIS_BNO allocation fails (the last >> extent in the file cannot be further extended) so we fall back to >> XFS_ALLOCTYPE_NEAR_BNO allocation which picks end of a large free >> extent as the best place to continue the file. Since the chunk at the >> end of the free extent again cannot be further extended, this behavior >> repeats until the whole free extent is consumed in a reversed order. >> >> For data allocations this backward allocation isn't beneficial so make >> xfs_alloc_compute_diff() pick start of a free extent instead of its end >> for them. That avoids the backward allocation pattern. >> >> See thread at http://oss.sgi.com/archives/xfs/2013-03/msg00144.html for >> more details about the reproduction case and why this solution was >> chosen. >> >> Based on idea by Dave Chinner. >> >> CC: Dave Chinner >> Reviewed-by: Dave Chinner >> Signed-off-by: Jan Kara >> --- >> fs/xfs/xfs_alloc.c | 24 ++++++++++++++++++------ >> 1 files changed, 18 insertions(+), 6 deletions(-) >> >> v2: Updated comment and commit description. > Could anybody pull this patch into XFS tree? I don't see it there... > > Honza Sorry, a miscommunication on my part that this belonged in the dev tree but not in the for Linus pull for Linux 3.10. --Mark. From mlsemon35@gmail.com Mon May 20 11:12:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 38F207F37 for ; Mon, 20 May 2013 11:12:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A8FE1AC002 for ; Mon, 20 May 2013 09:12:08 -0700 (PDT) X-ASG-Debug-ID: 1369066327-04cbb05fe4446d00001-NocioJ Received: from mail-ie0-f179.google.com (mail-ie0-f179.google.com [209.85.223.179]) by cuda.sgi.com with ESMTP id xnxXK8pdWxG9dHDM (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 May 2013 09:12:07 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] Received: by mail-ie0-f179.google.com with SMTP id c13so14363733ieb.10 for ; Mon, 20 May 2013 09:12:07 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=xsBNWQ+rsZama5mDQmDKm4cxLZCtUvHx1PoMUMglD6A=; b=HVB4vlUiNmQIo7AWyk6jLmmPUGjrCdrlZCgXzXeMViBuaSFwTyrzhpq2itK29YPxNp wDxTUFG9tbSK1C+sQ343NjGqwRG6teReTO3b2/+GTVTEe+/1WiMV2NM4SuiBGdWF+0WC EaiP9Q12Z/q1RHF4GaWI8fNL2gvx3YJaj6gnEGBVNaqtzHiBShQOFilsbPFCAN81o8FE g77MH3zE1yiZ7qvx/YJS+pFxWNNryMiVzB2LVunedLkeBPPdKv+629ZQgkkuF+HztuQT NSvAAywnHoqAFGBqhGaxUlx2JjrcWqJbT+kubDkZT+oFmizha3rm/6YnkJQgJSN1gknp heXg== X-Received: by 10.50.30.170 with SMTP id t10mr5468865igh.95.1369066327282; Mon, 20 May 2013 09:12:07 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id p10sm12096473igj.5.2013.05.20.09.11.57 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 20 May 2013 09:12:06 -0700 (PDT) Message-ID: <519A4B40.2050704@gmail.com> Date: Mon, 20 May 2013 12:11:44 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 0/6] xfsprogs: more CRC support patches References: <1368789205-19969-1-git-send-email-david@fromorbit.com> <1369032783-24973-1-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 0/6] xfsprogs: more CRC support patches In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f179.google.com[209.85.223.179] X-Barracuda-Start-Time: 1369066327 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131519 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/20/2013 02:52 AM, Dave Chinner wrote: > [ well, really patches 31..36 :) ] > > Hi folks, > > More work on top of the original series of 30 patches, including > xfs_db support for parsing the v3 directory format. > > Note that there are also two patches in here that convert both > xfs_db and xfs_repair to use the libxfs directory block type > definitions. While it may have once been convenient for them to have > a basic definition, it does not lend itself to making the code > support the v3 format quickly and concisely. Reusing the > libxfs/kernel structure definitions and abstraction means that the > code quickly becomes v3 aware and has just works. > > Right now this patchset and the current kernel patchset (all the > attr fixes) runs through xfstests quite far on a 4k block size > filesystem - all the generic tests pass, and most of the XFS > specific tests that don't rely on write or attr output support in > xfs_db also pass. > > I'll get the attr db support done tomorrow..... > > Cheers, > > Dave. This makes some improvement to the setup here: xfs/041 no longer triggers a sure-fire "args->op_flags & XFS_DA_OP_OKNOENT" assertion. This will take a re-review on my part of the xfs/[0-9][0-9][0-9] test set. Here's how the `git am` session went, syntax removed because Ctrl-w word removal in bash makes the script output unworkable: # PATCH 1 Applying: xfs_repair: always use incore header for directory block checks # PATCH 2 Applying: xfs_db: convert directory parsing to use libxfs structure /usr/src/xfs/xfsprogs/.git/rebase-apply/patch:94: trailing whitespace. if (be32_to_cpu(data->magic) == XFS_DIR2_BLOCK_MAGIC && warning: 1 line adds whitespace errors. # PATCH 3 Applying: xfs_db: factor some common dir2 field parsing code. # PATCH 4 Applying: xfs_db: update field printing for dir crc format changes. # PATCH 5 Applying: xfs_repair: convert directory parsing to use libxfs structure # PATCH 6 Applying: xfs_repair: make directory freespace table CRC format aware. Nice job! Michael From ddec.gironde5@orange.fr Mon May 20 12:07:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,FREEMAIL_REPLYTO_END_DIGIT,HTML_MESSAGE,LOTS_OF_MONEY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EF4437F37 for ; Mon, 20 May 2013 12:06:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id DABD48F8033 for ; Mon, 20 May 2013 10:06:56 -0700 (PDT) X-ASG-Debug-ID: 1369069614-04cbb05fe444ab90001-w1Z2WR Received: from smtp.smtpout.orange.fr (smtp07.smtpout.orange.fr [80.12.242.129]) by cuda.sgi.com with ESMTP id HaG4zPPtv1CFnTwK for ; Mon, 20 May 2013 10:06:54 -0700 (PDT) X-Barracuda-Envelope-From: ddec.gironde5@orange.fr X-Barracuda-Apparent-Source-IP: 80.12.242.129 Received: from wwinf1v19 ([10.223.71.63]) by mwinf5d30 with ME id eH6t1l0021Mv9fN03H6tf3; Mon, 20 May 2013 19:06:53 +0200 Date: Mon, 20 May 2013 19:06:53 +0200 (CEST) From: DDEC Gironde Reply-To: DDEC Gironde To: "lbert.hulo@orange.fr" Message-ID: <1475644396.12465.1369069613021.JavaMail.www@wwinf1v19> In-Reply-To: <564151529.8996.1369060283603.JavaMail.www@wwinf1v26> References: <256968863.12774.1368889105470.JavaMail.www@wwinf1j20>,,,<1398379702.7029.1369051300084.JavaMail.www@wwinf1x15>,<1340351000.8867.1369053266669.JavaMail.www@wwinf1z27>,<564151529.8996.1369060283603.JavaMail.www@wwinf1v26> Subject: =?UTF-8?Q?TR_:tr:TR_:FW:_INDICE_NOS?= =?UTF-8?Q?_F=C3=89LICITATIO?= =?UTF-8?Q?NS_/=E2=80=8F=E2=80=8F?= =?UTF-8?Q?=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?UTF-8?Q?TR_:tr:TR_:FW:_INDICE_NOS?= =?UTF-8?Q?_F=C3=89LICITATIO?= =?UTF-8?Q?NS_/=E2=80=8F=E2=80=8F?= =?UTF-8?Q?=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F=E2=80=8F?= Content-Type: multipart/alternative; boundary="----=_Part_12464_582094583.1369069613017" X-Country-Code: X-me-spamlevel: not-spam Message-Context: email-message X-Cache-ID: X-WUM-SignatureAdded: X-Cache-Entry: X-me-spamrating: 40.00 X-Wum-Nature: EMAIL-NATURE X-Originating-IP: 10.99.54.77 X-Message-Size: X-SAVECOPY: false X-National-Code: X-Wum-ChannelType: X-WUM-FROM: |~| X-WUM-TO: |~| X-WUM-CCI: |~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~||~| X-WUM-REPLYTO: |~| X-Barracuda-Connect: smtp07.smtpout.orange.fr[80.12.242.129] X-Barracuda-Start-Time: 1369069614 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131523 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ------=_Part_12464_582094583.1369069613017 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable FOUNDATION MICROSOFT WINDOWS 2013  Reply-To:Reply-To:Reply-To:  Content-Type: text/plain; c Date: Mon, 6 May 2013 20:30:14 +0200 (CEST)----- Original Message ----- Conocer viernes. 02/11/2013 15:04 (GMT +02:00) Asunto: RE: tE:-Cher (e) vencedor (e),Nous vous faisons parvenir ce co= urrier pour vous informer que vous =C3=AAtes b=C3=A9n=C3=A9ficiaire de la s= omme de 120.000 EUROS. Veuillez prendre contact avec le Cabinet de Ma= =C3=AEtre  DON BADAU. Par courrierE-mail: me.don_badau@one.co.il// Tel= : +225 06 33 91 85Pour plus d=E2=80=99informations nous vous invitons =C3=A0 prendre connaissance= du=20 fichier joint =C3=A0 ce message pour la notification de votre gain. Toutes nos f=C3=A9licitations. La Direction...............................................................= ...........................................................................= ..............   We are sending this letter to inform you that you are the beneficiary of th= e 120,000 EUROS you. Please contact the Office of Teacher DON BADAU. b= y mail E-mail me.don_badau@one.co.il /// Tel: +225 06 33 91 85 For more information we invite you to read the attached to this message for= the notification of your winning file.Mme. ISABELLE CHEVALIER Chef de campagne MICROSOFT WINDOWSDieter Kn=C3=BCttelAVON-RenndienstZotzenbacher Weg 7-11DE-= 64668 Rimbach/Odw.  CONFIDENTIAL, PROPRIETARY AND / OR TRADE SECR= ET INFORMATIONThe information contained in this e-mail (along with any attachments) is=20 intended only for the use of the individual to whom it is addressed and=20 may contain privileged and/or confidential information that is exempt=20 from disclosure under applicable law.  If the reader of this message i= s=20 not the intended recipient, you are hereby notified that you should not=20 read any further, and any dissemination, distribution or copying of this communication is strictly prohibited.  If you have received this in= =20 error, please notify the Law Department at Dieter Knuettel=20 Rennreifenservice Tel.0049/6253/85556 and immediately delete this =20 ------=_Part_12464_582094583.1369069613017 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable



<= tbody>

FOUNDATION MICROSOFT WINDOWS 2013

 

<= /td>

Reply-To:

Reply-To:

Reply-To: 
Content-Type: text/plain; c
Date: Mon, 6 May 2013 20:30:= 14 +0200 (CEST)

----- Original Message -----
Conocer viernes. 02/11/201= 3 15:04 (GMT +02:00)
Asunto: RE: tE:-

Cher= (e) vencedor (e),

Nous vous faisons parvenir ce courrier pour vous inf= ormer que vous =C3=AAtes b=C3=A9n=C3=A9ficiaire de la somme de 120.000 EUROS. Veuillez prendre contact ave= c le Cabinet de Ma=C3=AEtre  DON BADAU. Par courrier

E-mail: me.don_badau@one.co.il= // Tel: +225 06 33 = 91 85

= Pour plus d=E2=80=99informations nous vous invitons =C3=A0 prendre connaissance= du=20 fichier joint =C3=A0 ce message pour la notification de votre gain.<= /strong>
= Toutes nos f=C3=A9licitation= s.
La Dir= ection.
......= ...........................................................................= ......................................................................
 

We are send= ing this letter to inform you that you are the beneficiary of the 120,000 EUROS you= . Please contact the Office of Teacher DON BADAU. by mail
E-mail = me.don_badau@one.co.il /// <= /span>Tel: +225 06 33 91 85
For mor= e information we invite you to read the attached to this message for the no= tification of your winning file.

Mme. ISABELLE CHEVALIER
Chef de campagne
MICROSOFT WINDOWS

Dieter Kn=C3=BCttel

AVON-Renndienst<= span style=3D"line-height:22px;font-size:12pt;font-family:'Times New Roman'= , serif;">

Zotzenbacher Weg 7-11

=

DE-64668 Rimbach/Odw.

 

 

CONFIDENTIAL, PROPRIETARY AND / OR TR= ADE SECRET INFORMATION

= The information contained in this e-mail (along with any attachments) is=20 intended only for the use of the individual to whom it is addressed and=20 may contain privileged and/or confidential information that is exempt=20 from disclosure under applicable law.  If the reader of this message i= s=20 not the intended recipient, you are hereby notified that you should not=20 read any further, and any dissemination, distribution or copying of this communication is strictly prohibited.  If you have received this in= =20 error, please notify the Law Department at Dieter Knuettel=20 Rennreifenservice Tel.0049/6253/85556 and immediately delete this
------=_Part_12464_582094583.1369069613017-- From p.pisati@gmail.com Mon May 20 12:07:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D49DD7F37 for ; Mon, 20 May 2013 12:07:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5E674AC004 for ; Mon, 20 May 2013 10:07:20 -0700 (PDT) X-ASG-Debug-ID: 1369069634-04cbb05fe444abe0001-NocioJ Received: from mail-ee0-f43.google.com (mail-ee0-f43.google.com [74.125.83.43]) by cuda.sgi.com with ESMTP id VREhnkyypW7g6Gkl (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 May 2013 10:07:15 -0700 (PDT) X-Barracuda-Envelope-From: p.pisati@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.83.43 Received: by mail-ee0-f43.google.com with SMTP id d41so3915226eek.16 for ; Mon, 20 May 2013 10:07:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=6oGcOMIPxOwnjQqfq1yRkVhfrdjofe8Ctc0Wlti7Z4c=; b=UZuLzURvSJZiNUHvsVfxnC3I1McvORlABq1KOiB3kGLwxc7bUNUB6qudMlgQYve7XH 1NTsyY/r7Qc9szQTh44roKjwiEI06zYJiKv0zdIJgdUiDkgD1N4QNNEVJGPFP3qywPn2 90VxJNuUEgpjhNI+Ye1JynvNKFiDKr6/uKlmE85h3jo5kE1ANNufDbakmd58iEdqIL3Q Rlqj3GtbWnXEV5O77BLES7eGjvdunXmAD6zEjpmXNzg9aHo172ZfDATGf+Geh2CbnPsb YKhBoCxfQnxDKKnpsb0VRtivahoXjCEsufwIH6dalIWSI7Hmd7aMOPs9yywtPQZ03j0C Gnng== X-Received: by 10.14.99.8 with SMTP id w8mr68251228eef.30.1369069633940; Mon, 20 May 2013 10:07:13 -0700 (PDT) Received: from gmail.com (2-230-238-136.ip204.fastwebnet.it. [2.230.238.136]) by mx.google.com with ESMTPSA id e50sm38866060eev.13.2013.05.20.10.07.12 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 20 May 2013 10:07:12 -0700 (PDT) Date: Mon, 20 May 2013 19:07:10 +0200 From: Paolo Pisati To: Dave Chinner Cc: Paolo Pisati , xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130520170710.GA2591@luxor.wired.org> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> <20130519011354.GE6495@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130519011354.GE6495@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-ee0-f43.google.com[74.125.83.43] X-Barracuda-Start-Time: 1369069634 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131523 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.10 BSF_SC0_SA085 Custom Rule SA085 On Sun, May 19, 2013 at 11:13:54AM +1000, Dave Chinner wrote: > > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1176977 > > which contains information that everyone looking at the problem > should know. Also, any progress on testing the backported fix > mentioned in the bug? the problem with the 'fix' is that it prevents xfs from erroring out, but swift-test fails regardless after ~25% of fs usage and i think having a bold 'xfs error' and a stack trace is more useful. > You're testing swift benchmark which is probably a small file > workload with large attributes attached. It's a good chance that > the workload is fragmenting free space because swift is doing bad > things to allocation patterns. It's almost certainly exacerbated by > the tiny filesystem you are using (1.5GB), but you can probably work > around this problem for now with allocsize=4096. ok, i repartitioned my disk but i can still reprodue it fairly easily: df -h: /dev/sda6 216G 573M 215G 1% /mnt/sdb1 df -i: /dev/sda6 56451072 235458 56215614 1% /mnt/sdb1 dmesg: ... [ 363.130877] XFS (sda6): Mounting Filesystem [ 363.146708] XFS (sda6): Ending clean mount [ 3055.520769] alloc_vmap_area: 18 callbacks suppressed [ 3055.520783] vmap allocation for size 2097152 failed: use vmalloc= to increase size. [ 3055.520817] vmap allocation for size 2097152 failed: use vmalloc= to increase size. [ 3055.520845] vmap allocation for size 2097152 failed: use vmalloc= to increase size. [ 3055.520861] XFS (sda6): xfs_buf_get: failed to map pages [ 3055.520861] [ 3055.520882] XFS (sda6): Internal error xfs_trans_cancel at line 1466 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Caller 0xbf0235e0 [ 3055.520882] [ 3055.535135] [] (unwind_backtrace+0x0/0x104) from [] (dump_stack+0x20/0x24) [ 3055.535345] [] (dump_stack+0x20/0x24) from [] (xfs_error_report+0x60/0x6c [xfs]) [ 3055.535687] [] (xfs_error_report+0x60/0x6c [xfs]) from [] (xfs_trans_cancel+0xfc/0x11c [xfs]) [ 3055.536023] [] (xfs_trans_cancel+0xfc/0x11c [xfs]) from [] (xfs_create+0x228/0x558 [xfs]) [ 3055.536314] [] (xfs_create+0x228/0x558 [xfs]) from [] (xfs_vn_mknod+0x9c/0x180 [xfs]) [ 3055.536589] [] (xfs_vn_mknod+0x9c/0x180 [xfs]) from [] (xfs_vn_create+0x1c/0x20 [xfs]) [ 3055.536741] [] (xfs_vn_create+0x1c/0x20 [xfs]) from [] (vfs_create+0xb4/0x120) [ 3055.536760] [] (vfs_create+0xb4/0x120) from [] (do_last+0x860/0x9bc) [ 3055.536775] [] (do_last+0x860/0x9bc) from [] (path_openat+0xcc/0x428) [ 3055.536787] [] (path_openat+0xcc/0x428) from [] (do_filp_open+0x3c/0x90) [ 3055.536805] [] (do_filp_open+0x3c/0x90) from [] (do_sys_open+0xfc/0x1d0) [ 3055.536817] [] (do_sys_open+0xfc/0x1d0) from [] (sys_open+0x2c/0x30) [ 3055.536832] [] (sys_open+0x2c/0x30) from [] (ret_fast_syscall+0x0/0x30) [ 3055.536848] XFS (sda6): xfs_do_force_shutdown(0x8) called from line 1467 of file /build/buildd/linux-3.5.0/fs/xfs/xfs_trans.c. Return address = 0xbf06340c [ 3055.537327] XFS (sda6): Corruption of in-memory data detected. Shutting down filesystem [ 3055.545439] XFS (sda6): Please umount the filesystem and rectify the problem(s) [ 3070.301048] XFS (sda6): xfs_log_force: error 5 returned. [ 3100.381068] XFS (sda6): xfs_log_force: error 5 returned. [ 3130.461041] XFS (sda6): xfs_log_force: error 5 returned. [ 3160.541042] XFS (sda6): xfs_log_force: error 5 returned. [ 3190.621042] XFS (sda6): xfs_log_force: error 5 returned. [ 3220.701040] XFS (sda6): xfs_log_force: error 5 returned. [ 3250.781039] XFS (sda6): xfs_log_force: error 5 returned. [ 3280.861036] XFS (sda6): xfs_log_force: error 5 returned. [ 3310.941047] XFS (sda6): xfs_log_force: error 5 returned. [ 3341.021044] XFS (sda6): xfs_log_force: error 5 returned. [ 3371.101044] XFS (sda6): xfs_log_force: error 5 returned. [ 3401.181036] XFS (sda6): xfs_log_force: error 5 returned. [ 3431.261036] XFS (sda6): xfs_log_force: error 5 returned. [ 3461.341038] XFS (sda6): xfs_log_force: error 5 returned. [ 3491.421038] XFS (sda6): xfs_log_force: error 5 returned. [ 3521.501051] XFS (sda6): xfs_log_force: error 5 returned. [ 3551.581037] XFS (sda6): xfs_log_force: error 5 returned. [ 3581.661041] XFS (sda6): xfs_log_force: error 5 returned. > I've got a fix that I'm testing for the underlying cause of the > problem I'm aware of with this workload, but I'll need more > information about your storage/filesystem config to confirm it is > the same root cause first. Can you include the info from here: > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F flag@c13:~$ uname -a Linux c13 3.5.0-30-highbank #51-Ubuntu SMP Tue May 14 22:57:15 UTC 2013 armv7l armv7l armv7l GNU/Linux lag@c13:~$ xfs_repair -V xfs_repair version 3.1.7 armhf highbank node, 4 cores, 4GB mem flag@c13:~$ cat /proc/meminfo MemTotal: 4137004 kB MemFree: 2719752 kB Buffers: 39688 kB Cached: 580508 kB SwapCached: 0 kB Active: 631136 kB Inactive: 204552 kB Active(anon): 215520 kB Inactive(anon): 232 kB Active(file): 415616 kB Inactive(file): 204320 kB Unevictable: 0 kB Mlocked: 0 kB HighTotal: 3408896 kB HighFree: 2606516 kB LowTotal: 728108 kB LowFree: 113236 kB SwapTotal: 8378364 kB SwapFree: 8378364 kB Dirty: 4 kB Writeback: 0 kB AnonPages: 215516 kB Mapped: 8676 kB Shmem: 264 kB Slab: 317000 kB SReclaimable: 230392 kB SUnreclaim: 86608 kB KernelStack: 2192 kB PageTables: 2284 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 10446864 kB Committed_AS: 1049624 kB VmallocTotal: 245760 kB VmallocUsed: 2360 kB VmallocChunk: 241428 kB flag@c13:~$ cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 udev /dev devtmpfs rw,relatime,size=2059248k,nr_inodes=177400,mode=755 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,nosuid,relatime,size=827404k,mode=755 0 0 /dev/disk/by-uuid/6594b183-3198-4dec-a97d-a3f834b98011 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0 none /sys/fs/fuse/connections fusectl rw,relatime 0 0 none /sys/kernel/debug debugfs rw,relatime 0 0 none /sys/kernel/security securityfs rw,relatime 0 0 none /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0 none /run/shm tmpfs rw,nosuid,nodev,relatime 0 0 none /run/user tmpfs rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755 0 0 /dev/sda1 /boot ext2 rw,relatime,errors=continue 0 0 /dev/sda6 /mnt/sdb1 xfs rw,noatime,nodiratime,attr2,nobarrier,logbufs=8,noquota 0 0 flag@c13:~$ cat /proc/partitions major minor #blocks name 8 0 250059096 sda 8 1 248832 sda1 8 2 15625000 sda2 8 3 1 sda3 8 5 8378369 sda5 8 6 225804288 sda6 no RAID, no LVM common sata disk write cache on (unknown size) no BBWC AFAIK flag@c13:~$ xfs_info /mnt/sdb1/ meta-data=/dev/sda6 isize=1024 agcount=4, agsize=14112768 blks = sectsz=512 attr=2 data = bsize=4096 blocks=56451072, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=27564, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 > > As well the freespace info that Jeff asked for? flag@c13:~$ sudo xfs_db -r "-c freesp -s" /dev/sda6 from to extents blocks pct 1 1 423 423 0.00 2 3 897 2615 0.01 4 7 136 915 0.00 8 15 24833 365797 0.86 8388608 14112768 3 41928421 99.13 total free extents 26292 total free blocks 42298171 average free extent size 1608.78 -- bye, p. From JBacik@fusionio.com Mon May 20 12:20:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 898967F37 for ; Mon, 20 May 2013 12:20:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0A886AC002 for ; Mon, 20 May 2013 10:20:38 -0700 (PDT) X-ASG-Debug-ID: 1369070437-04cb6c10baea420001-NocioJ Received: from dkim1.fusionio.com (dkim1.fusionio.com [66.114.96.53]) by cuda.sgi.com with ESMTP id 3DrRdgHLMdmAVQQM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 May 2013 10:20:37 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.53 Received: from mx2.fusionio.com (unknown [10.101.1.160]) by dkim1.fusionio.com (Postfix) with ESMTP id 014F07C04D8 for ; Mon, 20 May 2013 11:20:37 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1369070437; bh=6QBRxBRRnnpzOznTHNcI8qsQf0UCzUzOhp4GEnLjA1I=; h=From:To:Subject:Date; b=mOtB0LOm2NBI9nzD4rTqE5ir3Z9NBZOIp7lU+ygrSX5eE8HKB1l3H2oD7I3tMh5mS AtKoMO9y1MOAR0VeRyGUo590QbZrXn4Z/NlHbBGezq8Dc3GLWzCUPUS/48iUf3AvW3 rDgVeMIDvwBd7iboQL5kyuJ9Auaj1QVxSA3jVEjU= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx2.fusionio.com with ESMTP id zGot5o8DcFDJHGRb (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Mon, 20 May 2013 11:20:36 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Mon, 20 May 2013 11:20:35 -0600 From: Josef Bacik To: , Subject: [PATCH] xfstests: btrfs 308: regression test for btrfs send Date: Mon, 20 May 2013 13:20:34 -0400 X-ASG-Orig-Subj: [PATCH] xfstests: btrfs 308: regression test for btrfs send Message-ID: <1369070434-20852-1-git-send-email-jbacik@fusionio.com> X-Mailer: git-send-email 1.7.7.6 MIME-Version: 1.0 Content-Type: text/plain X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim1.fusionio.com[66.114.96.53] X-Barracuda-Start-Time: 1369070437 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131524 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature I'm not sure how the numbering is supposed to work now that we've split everything out so I'm just going with the next number in the directory. This is a regression test for btrfs send, we had a problem where we'd try to send a file that had been deleted in the source snapshot. This is just to make sure we don't have the same problem in the future. Thanks, Signed-off-by: Josef Bacik --- src/Makefile | 2 +- src/hold-open.c | 29 ++++++++++++++++++++ tests/btrfs/308 | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/308.out | 2 + tests/btrfs/group | 1 + 5 files changed, 107 insertions(+), 1 deletions(-) create mode 100644 src/hold-open.c create mode 100644 tests/btrfs/308 create mode 100644 tests/btrfs/308.out diff --git a/src/Makefile b/src/Makefile index c18ffc9..3ab9a21 100644 --- a/src/Makefile +++ b/src/Makefile @@ -18,7 +18,7 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \ locktest unwritten_mmap bulkstat_unlink_test t_stripealign \ bulkstat_unlink_test_modified t_dir_offset t_futimens t_immutable \ stale_handle pwrite_mmap_blocked t_dir_offset2 seek_sanity_test \ - seek_copy_test t_readdir_1 t_readdir_2 fsync-tester + seek_copy_test t_readdir_1 t_readdir_2 fsync-tester hold-open SUBDIRS = diff --git a/src/hold-open.c b/src/hold-open.c new file mode 100644 index 0000000..f44c1dd --- /dev/null +++ b/src/hold-open.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + int fd; + + if (argc < 2) { + fprintf(stderr, "Usage: hold-open \n"); + return -1; + } + + fd = open(argv[1], O_RDONLY); + if (fd < 0) { + fprintf(stderr, "Error opening file: %d\n", errno); + return -1; + } + + while (1) { + sleep(60); + } + + close(fd); + return 0; +} diff --git a/tests/btrfs/308 b/tests/btrfs/308 new file mode 100644 index 0000000..144be99 --- /dev/null +++ b/tests/btrfs/308 @@ -0,0 +1,74 @@ +#! /bin/bash +# FS QA Test No. btrfs/308 +# +# btrfs send ESTALE regression test, kernel.org bugzilla 57491 +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Fusion IO. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +_cleanup() +{ + rm -f $tmp.* +} + +trap "_cleanup ; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux +_require_scratch + +_scratch_mkfs > /dev/null 2>&1 +_scratch_mount + +dd if=/dev/zero of=$SCRATCH_MNT/foo bs=1M count=10 > /dev/null 2>&1 +sync +$BTRFS_UTIL_PROG subvol snap -r $SCRATCH_MNT $SCRATCH_MNT/snap > /dev/null 2>&1 +dd if=/dev/zero of=$SCRATCH_MNT/foo bs=1M count=10 oflag=append > /dev/null 2>&1 +sync + +# We need to hold the file open, tail -f makes the output file look weird so +# here is this awful hack to get around that +$here/src/hold-open $SCRATCH_MNT/foo & + +# need this so that tail doesn't error out racing with the rm +sleep 1 +rm -f $SCRATCH_MNT/foo +$BTRFS_UTIL_PROG subvol snap -r $SCRATCH_MNT $SCRATCH_MNT/snap1 > /dev/null 2>&1 +$BTRFS_UTIL_PROG send -f /dev/null -p $SCRATCH_MNT/snap $SCRATCH_MNT/snap1 >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo "send failed" +fi +kill $! + +echo "Silence is golden" +status=0 ; exit diff --git a/tests/btrfs/308.out b/tests/btrfs/308.out new file mode 100644 index 0000000..a731eaa --- /dev/null +++ b/tests/btrfs/308.out @@ -0,0 +1,2 @@ +QA output created by 308 +Silence is golden diff --git a/tests/btrfs/group b/tests/btrfs/group index bc6c256..666054b 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -9,3 +9,4 @@ 276 auto rw metadata 284 auto 307 auto quick +308 auto quick -- 1.7.7.6 From eguan@redhat.com Mon May 20 12:51:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7CECF7F37 for ; Mon, 20 May 2013 12:51:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 06013AC002 for ; Mon, 20 May 2013 10:51:52 -0700 (PDT) X-ASG-Debug-ID: 1369072308-04cb6c10baecbd0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gkymFh2JKK6BXEXW for ; Mon, 20 May 2013 10:51:48 -0700 (PDT) X-Barracuda-Envelope-From: eguan@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHpmlq022041 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 20 May 2013 13:51:48 -0400 Received: from localhost (dhcp-13-36.nay.redhat.com [10.66.13.36]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4KHpkre001706; Mon, 20 May 2013 13:51:47 -0400 From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH] xfstests generic/313: test ctime and mtime are updated on truncate and ftruncate Date: Tue, 21 May 2013 01:51:41 +0800 X-ASG-Orig-Subj: [PATCH] xfstests generic/313: test ctime and mtime are updated on truncate and ftruncate Message-Id: <1369072301-13690-1-git-send-email-eguan@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369072308 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Regression test for commit: 3972f26 btrfs: update timestamps on truncate() Signed-off-by: Eryu Guan --- src/Makefile | 2 +- src/t_truncate_cmtime.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/generic/313 | 55 ++++++++++++++++++++++++ tests/generic/313.out | 2 + tests/generic/group | 1 + 5 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 src/t_truncate_cmtime.c create mode 100755 tests/generic/313 create mode 100644 tests/generic/313.out diff --git a/src/Makefile b/src/Makefile index c18ffc9..cc679e8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -11,7 +11,7 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \ devzero feature alloc fault fstest t_access_root \ godown resvtest writemod makeextents itrash rename \ multi_open_unlink dmiperf unwritten_sync genhashnames t_holes \ - t_mmap_writev + t_mmap_writev t_truncate_cmtime LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \ preallo_rw_pattern_writer ftrunc trunc fs_perms testx looptest \ diff --git a/src/t_truncate_cmtime.c b/src/t_truncate_cmtime.c new file mode 100644 index 0000000..b08ca44 --- /dev/null +++ b/src/t_truncate_cmtime.c @@ -0,0 +1,110 @@ +/* + * Test ctime and mtime are updated on truncate(2) and ftruncate(2) + * + * Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include + +#define TEST_MSG "this is a test string" + +int do_test(const char *file, int is_ftrunc) +{ + int ret; + int fd; + struct stat statbuf1; + struct stat statbuf2; + + ret = 0; + fd = open(file, O_RDWR | O_CREAT | O_TRUNC, 0644); + if (fd == -1) { + perror("open(2) failed"); + exit(EXIT_FAILURE); + } + + ret = write(fd, TEST_MSG, sizeof(TEST_MSG)); + if (ret == -1) { + perror("write(2) failed"); + exit(EXIT_FAILURE); + } + + /* Get timestamps before [f]truncate(2) */ + ret = fstat(fd, &statbuf1); + if (ret == -1) { + perror("fstat(2) failed"); + exit(EXIT_FAILURE); + } + + sleep(1); + if (is_ftrunc) { + ret = ftruncate(fd, 0); + if (ret == -1) { + perror("ftruncate(2) failed"); + exit(EXIT_FAILURE); + } + } else { + ret = truncate(file, 0); + if (ret == -1) { + perror("truncate(2) failed"); + exit(EXIT_FAILURE); + } + } + + /* Get timestamps after [f]truncate(2) */ + ret = fstat(fd, &statbuf2); + if (ret == -1) { + perror("fstat(2) failed"); + exit(EXIT_FAILURE); + } + + /* Check whether timestamps got updated */ + if (statbuf1.st_ctime == statbuf2.st_ctime) { + fprintf(stderr, "ctime not updated after %s\n", + is_ftrunc ? "ftruncate" : "truncate"); + ret++; + } + if (statbuf1.st_mtime == statbuf2.st_mtime) { + fprintf(stderr, "mtime not updated after %s\n", + is_ftrunc ? "ftruncate" : "truncate"); + ret++; + } + + close(fd); + return ret; +} + +int main(int argc, char *argv[]) +{ + int ret; + char *testfile; + + ret = 0; + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(EXIT_FAILURE); + } + testfile = argv[1]; + + ret = do_test(testfile, 0); + ret += do_test(testfile, 1); + + exit(ret); +} diff --git a/tests/generic/313 b/tests/generic/313 new file mode 100755 index 0000000..1237ded --- /dev/null +++ b/tests/generic/313 @@ -0,0 +1,55 @@ +#! /bin/bash +# FS QA Test No. 313 +# +# Check ctime and mtime are updated on truncate(2) and ftruncate(2) +# +# Regression test for commit: +# 3972f26 btrfs: update timestamps on truncate() +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +testfile=$TEST_DIR/testfile.$seq +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $testfile +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs generic +_supported_os IRIX Linux + +echo "Silence is golden" + +$here/src/t_truncate_cmtime $testfile 2>&1 + +status=0 +exit diff --git a/tests/generic/313.out b/tests/generic/313.out new file mode 100644 index 0000000..2684669 --- /dev/null +++ b/tests/generic/313.out @@ -0,0 +1,2 @@ +QA output created by 313 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index e2ef70e..7965bfa 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -115,3 +115,4 @@ 310 auto 311 auto metadata log 312 auto quick prealloc enospc +313 auto quick -- 1.8.1 From eguan@redhat.com Mon May 20 12:52:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A1A277F50 for ; Mon, 20 May 2013 12:52:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8B6308F8037 for ; Mon, 20 May 2013 10:52:04 -0700 (PDT) X-ASG-Debug-ID: 1369072323-04cb6c10c2ecc20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id PbgIsWSFKgHNE5wa for ; Mon, 20 May 2013 10:52:03 -0700 (PDT) X-Barracuda-Envelope-From: eguan@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHq3ab023701 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 20 May 2013 13:52:03 -0400 Received: from localhost (dhcp-13-36.nay.redhat.com [10.66.13.36]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4KHq1aB001810; Mon, 20 May 2013 13:52:02 -0400 From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH] xfstests: fix typo in check Date: Tue, 21 May 2013 01:51:59 +0800 X-ASG-Orig-Subj: [PATCH] xfstests: fix typo in check Message-Id: <1369072319-13738-1-git-send-email-eguan@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369072323 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 There is no $testname, should be $test_name Signed-off-by: Eryu Guan --- check | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check b/check index a79747e..8d32486 100755 --- a/check +++ b/check @@ -242,7 +242,7 @@ if $have_test_arg; then test_name=`basename $1` group_file=$SRC_DIR/$test_dir/group - if grep "^$testname" $group_file >/dev/null ; then + if grep "^$test_name" $group_file >/dev/null ; then # in group file ... OK echo $SRC_DIR/$1 >>$tmp.list else -- 1.8.1 From bfoster@redhat.com Mon May 20 12:58:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C501B7F37 for ; Mon, 20 May 2013 12:58:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7E7EB8F8039 for ; Mon, 20 May 2013 10:58:49 -0700 (PDT) X-ASG-Debug-ID: 1369072728-04bdf04224456970001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qCed5HT8fVj0RKkK for ; Mon, 20 May 2013 10:58:48 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwjOd025932 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 20 May 2013 13:58:45 -0400 Received: from bfoster.bfoster (dhcp-189-135.bos.redhat.com [10.16.189.135]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwiN7010692; Mon, 20 May 2013 13:58:45 -0400 Message-ID: <519A6553.4090801@redhat.com> Date: Mon, 20 May 2013 14:02:59 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 01/14] xfs: fix sub-page blocksize data integrity writes References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-2-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 01/14] xfs: fix sub-page blocksize data integrity writes In-Reply-To: <1369007481-15185-2-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369072728 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/19/2013 07:51 PM, Dave Chinner wrote: > From: Dave Chinner > > FSX on 512 byte block size filesystems has been failing for some > time with corrupted data. The fault dates back to the change in > the writeback data integrity algorithm that uses a mark-and-sweep > approach to avoid data writeback livelocks. > > Unfortunately, a side effect of this mark-and-sweep approach is that > each page will only be written once for a data integrity sync, and > there is a condition in writeback in XFS where a page may require > two writeback attempts to be fully written. As a result of the high > level change, we now only get a partial page writeback during the > integrity sync because the first pass through writeback clears the > mark left on the page index to tell writeback that the page needs > writeback.... > > The cause is writing a partial page in the clustering code. This can > happen when a mapping boundary falls in the middle of a page - we > end up writing back the first part of the page that the mapping > covers, but then never revisit the page to have the remainder mapped > and written. > > The fix is simple - if the mapping boundary falls inside a page, > then simple abort clustering without touching the page. This means > that the next ->writepage entry that write_cache_pages() will make > is the page we aborted on, and xfs_vm_writepage() will map all > sections of the page correctly. This behaviour is also optimal for > non-data integrity writes, as it results in contiguous sequential > writeback of the file rather than missing small holes and having to > write them a "random" writes in a future pass. > > With this fix, all the fsx tests in xfstests now pass on a 512 byte > block size filesystem on a 4k page machine. > > Signed-off-by: Dave Chinner > --- Looks good to me. Reviewed-by: Brian Foster > fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c > index 2b2691b..f04eceb 100644 > --- a/fs/xfs/xfs_aops.c > +++ b/fs/xfs/xfs_aops.c > @@ -725,6 +725,25 @@ xfs_convert_page( > (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, > i_size_read(inode)); > > + /* > + * If the current map does not span the entire page we are about to try > + * to write, then give up. The only way we can write a page that spans > + * multiple mappings in a single writeback iteration is via the > + * xfs_vm_writepage() function. Data integrity writeback requires the > + * entire page to be written in a single attempt, otherwise the part of > + * the page we don't write here doesn't get written as part of the data > + * integrity sync. > + * > + * For normal writeback, we also don't attempt to write partial pages > + * here as it simply means that write_cache_pages() will see it under > + * writeback and ignore the page until some pointin the future, at which > + * time this will be the only page inteh file that needs writeback. > + * Hence for more optimal IO patterns, we should always avoid partial > + * page writeback due to multiple mappings on a page here. > + */ > + if (!xfs_imap_valid(inode, imap, end_offset)) > + goto fail_unlock_page; > + > len = 1 << inode->i_blkbits; > p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), > PAGE_CACHE_SIZE); > From bfoster@redhat.com Mon May 20 12:58:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EA85C7F50 for ; Mon, 20 May 2013 12:58:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C4BB8304053 for ; Mon, 20 May 2013 10:58:54 -0700 (PDT) X-ASG-Debug-ID: 1369072734-04bdf04225456990001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cQ1NMkKG3o8FQ0Zw for ; Mon, 20 May 2013 10:58:54 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwqEW019914 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 20 May 2013 13:58:52 -0400 Received: from bfoster.bfoster (dhcp-189-135.bos.redhat.com [10.16.189.135]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwqbW027882; Mon, 20 May 2013 13:58:52 -0400 Message-ID: <519A655A.3020900@redhat.com> Date: Mon, 20 May 2013 14:03:06 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 03/14] xfs: Don't reference the EFI after it is freed References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-4-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 03/14] xfs: Don't reference the EFI after it is freed In-Reply-To: <1369007481-15185-4-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369072734 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/19/2013 07:51 PM, Dave Chinner wrote: > From: Dave Chinner > > Checking the EFI for whether it is being released from recovery > after we've already released the known active reference is a mistake > worthy of a brown paper bag. Fix the (now) obvious use after free > that it can cause. > > Reported-by: Dave Jones > Signed-off-by: Dave Chinner > --- Looks good to me. Reviewed-by: Brian Foster > fs/xfs/xfs_extfree_item.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c > index c0f3750..452920a 100644 > --- a/fs/xfs/xfs_extfree_item.c > +++ b/fs/xfs/xfs_extfree_item.c > @@ -305,11 +305,12 @@ xfs_efi_release(xfs_efi_log_item_t *efip, > { > ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); > if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { > - __xfs_efi_release(efip); > - > /* recovery needs us to drop the EFI reference, too */ > if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) > __xfs_efi_release(efip); > + > + __xfs_efi_release(efip); > + /* efip may now have been freed, do not reference it again. */ > } > } > > From bfoster@redhat.com Mon May 20 12:58:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F17E37F51 for ; Mon, 20 May 2013 12:58:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D920C304059 for ; Mon, 20 May 2013 10:58:51 -0700 (PDT) X-ASG-Debug-ID: 1369072730-04cb6c10c2ed390001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id lzXBiUa12PhbJp5k for ; Mon, 20 May 2013 10:58:51 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwn6S025069 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 20 May 2013 13:58:49 -0400 Received: from bfoster.bfoster (dhcp-189-135.bos.redhat.com [10.16.189.135]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4KHwmLF015472; Mon, 20 May 2013 13:58:49 -0400 Message-ID: <519A6557.50907@redhat.com> Date: Mon, 20 May 2013 14:03:03 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 02/14] xfs: fix rounding in xfs_free_file_space References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-3-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 02/14] xfs: fix rounding in xfs_free_file_space In-Reply-To: <1369007481-15185-3-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369072730 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/19/2013 07:51 PM, Dave Chinner wrote: > From: Dave Chinner > > The offset passed into xfs_free_file_space() needs to be rounded > down to a certain size, but the rounding mask is built by a 32 bit > variable. Hence the mask will always mask off the upper 32 bits of > the offset and lead to incorrect writeback and invalidation ranges. > > This is not actually exposed as a bug because we writeback and > invalidate from the rounded offset to the end of the file, and hence > the offset we are actually punching a hole out of will always be > covered by the code. This needs fixing, however, if we ever want to > use exact ranges for writeback/invalidation here... > > Signed-off-by: Dave Chinner > --- Looks good to me. Reviewed-by: Brian Foster > fs/xfs/xfs_vnodeops.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index 1501f4f..0176bb2 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -1453,7 +1453,7 @@ xfs_free_file_space( > xfs_mount_t *mp; > int nimap; > uint resblks; > - uint rounding; > + xfs_off_t rounding; > int rt; > xfs_fileoff_t startoffset_fsb; > xfs_trans_t *tp; > @@ -1482,7 +1482,7 @@ xfs_free_file_space( > inode_dio_wait(VFS_I(ip)); > } > > - rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); > + rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); > ioffset = offset & ~(rounding - 1); > error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, > ioffset, -1); > From bfoster@redhat.com Mon May 20 12:58:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 477347F59 for ; Mon, 20 May 2013 12:58:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 31986304053 for ; Mon, 20 May 2013 10:58:58 -0700 (PDT) X-ASG-Debug-ID: 1369072737-04cb6c10b8ed3a0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id aGNB8ASuWJWKKwrp for ; Mon, 20 May 2013 10:58:57 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwuT2003782 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 20 May 2013 13:58:56 -0400 Received: from bfoster.bfoster (dhcp-189-135.bos.redhat.com [10.16.189.135]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4KHwthU014093; Mon, 20 May 2013 13:58:55 -0400 Message-ID: <519A655D.4020001@redhat.com> Date: Mon, 20 May 2013 14:03:09 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 04/14] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-5-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 04/14] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() In-Reply-To: <1369007481-15185-5-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369072737 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/19/2013 07:51 PM, Dave Chinner wrote: > From: Dave Chinner > > Lockdep reports: > > ============================================= > [ INFO: possible recursive locking detected ] > 3.9.0+ #3 Not tainted > --------------------------------------------- > setquota/28368 is trying to acquire lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > but task is already holding lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be > allocated. > > xfs_qm_scall_setqlim() is starting a transaction and then not > passing it into xfs_qm_dqet() and so it starts it's own transaction > when allocating the dquot. Splat! > > Fix this by not allocating the dquot in xfs_qm_scall_setqlim() > inside the setqlim transaction. This requires getting the dquot > first (and allocating it if necessary) then dropping and relocking > the dquot before joining it to the setqlim transaction. > > Reported-by: Michael L. Semon > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- > 1 file changed, 20 insertions(+), 15 deletions(-) > > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index c41190c..dfa5c05 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( > if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) > return 0; > > - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); > - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), > - 0, 0, XFS_DEFAULT_LOG_COUNT); > - if (error) { > - xfs_trans_cancel(tp, 0); > - return (error); > - } > - > /* > * We don't want to race with a quotaoff so take the quotaoff lock. > - * (We don't hold an inode lock, so there's nothing else to stop > - * a quotaoff from happening). (XXXThis doesn't currently happen > - * because we take the vfslock before calling xfs_qm_sysent). > + * We don't hold an inode lock, so there's nothing else to stop > + * a quotaoff from happening. > */ > mutex_lock(&q->qi_quotaofflock); > > /* > - * Get the dquot (locked), and join it to the transaction. > - * Allocate the dquot if this doesn't exist. > + * Get the dquot (locked) before we start, as we need to do a > + * transaction to allocate it if it doesn't exist. Once we have the > + * dquot, unlock it so we can start the next transaction safely. We hold > + * a reference to the dquot, so it's safe to do this unlock/lock without > + * it being reclaimed in the mean time. > */ > - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { > - xfs_trans_cancel(tp, XFS_TRANS_ABORT); > + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); > + if (error) { > ASSERT(error != ENOENT); > goto out_unlock; > } > + xfs_dqunlock(dqp); > + > + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); > + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), > + 0, 0, XFS_DEFAULT_LOG_COUNT); > + if (error) { > + xfs_trans_cancel(tp, 0); > + goto out_unlock; By shuffling the transaction allocation and xfs_qm_dqget() around, it looks like you now have an error path with a referenced dquot. Perhaps here we should jump to a new label that includes the xfs_qm_dqrele() at the end of the function? Brian > + } > + > + xfs_dqlock(dqp); > xfs_trans_dqjoin(tp, dqp); > ddq = &dqp->q_core; > > From bpm@oss.sgi.com Mon May 20 13:09:47 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 8B17F7F3F; Mon, 20 May 2013 13:09:47 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. for-linus-v3.10-rc1-2-14681-g211d022 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: f722406faae2d073cc1d01063d1123c35425939e X-Git-Newrev: 211d022c43cac3aecbe967fcaf9b10156bfa63ad Message-Id: <20130520180947.8B17F7F3F@oss.sgi.com> Date: Mon, 20 May 2013 13:09:46 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 211d022 xfs: Avoid pathological backwards allocation from f722406faae2d073cc1d01063d1123c35425939e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 211d022c43cac3aecbe967fcaf9b10156bfa63ad Author: Jan Kara Date: Thu Apr 11 22:09:56 2013 +0200 xfs: Avoid pathological backwards allocation Writing a large file using direct IO in 16 MB chunks sometimes results in a pathological allocation pattern where 16 MB chunks of large free extent are allocated to a file in a reversed order. So extents of a file look for example as: ext logical physical expected length flags 0 0 13 4550656 1 4550656 188136807 4550668 12562432 2 17113088 200699240 200699238 622592 3 17735680 182046055 201321831 4096 4 17739776 182041959 182050150 4096 5 17743872 182037863 182046054 4096 6 17747968 182033767 182041958 4096 7 17752064 182029671 182037862 4096 ... 6757 45400064 154381644 154389835 4096 6758 45404160 154377548 154385739 4096 6759 45408256 252951571 154381643 73728 eof This happens because XFS_ALLOCTYPE_THIS_BNO allocation fails (the last extent in the file cannot be further extended) so we fall back to XFS_ALLOCTYPE_NEAR_BNO allocation which picks end of a large free extent as the best place to continue the file. Since the chunk at the end of the free extent again cannot be further extended, this behavior repeats until the whole free extent is consumed in a reversed order. For data allocations this backward allocation isn't beneficial so make xfs_alloc_compute_diff() pick start of a free extent instead of its end for them. That avoids the backward allocation pattern. See thread at http://oss.sgi.com/archives/xfs/2013-03/msg00144.html for more details about the reproduction case and why this solution was chosen. Based on idea by Dave Chinner . CC: Dave Chinner Signed-off-by: Jan Kara Reviewed-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_alloc.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Mon May 20 13:09:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 6F13529DF8; Mon, 20 May 2013 13:09:58 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. for-linus-v3.10-rc1-2-14681-g211d022 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: f722406faae2d073cc1d01063d1123c35425939e X-Git-Newrev: 211d022c43cac3aecbe967fcaf9b10156bfa63ad Message-Id: <20130520180958.6F13529DF8@oss.sgi.com> Date: Mon, 20 May 2013 13:09:57 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 211d022 xfs: Avoid pathological backwards allocation from f722406faae2d073cc1d01063d1123c35425939e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 211d022c43cac3aecbe967fcaf9b10156bfa63ad Author: Jan Kara Date: Thu Apr 11 22:09:56 2013 +0200 xfs: Avoid pathological backwards allocation Writing a large file using direct IO in 16 MB chunks sometimes results in a pathological allocation pattern where 16 MB chunks of large free extent are allocated to a file in a reversed order. So extents of a file look for example as: ext logical physical expected length flags 0 0 13 4550656 1 4550656 188136807 4550668 12562432 2 17113088 200699240 200699238 622592 3 17735680 182046055 201321831 4096 4 17739776 182041959 182050150 4096 5 17743872 182037863 182046054 4096 6 17747968 182033767 182041958 4096 7 17752064 182029671 182037862 4096 ... 6757 45400064 154381644 154389835 4096 6758 45404160 154377548 154385739 4096 6759 45408256 252951571 154381643 73728 eof This happens because XFS_ALLOCTYPE_THIS_BNO allocation fails (the last extent in the file cannot be further extended) so we fall back to XFS_ALLOCTYPE_NEAR_BNO allocation which picks end of a large free extent as the best place to continue the file. Since the chunk at the end of the free extent again cannot be further extended, this behavior repeats until the whole free extent is consumed in a reversed order. For data allocations this backward allocation isn't beneficial so make xfs_alloc_compute_diff() pick start of a free extent instead of its end for them. That avoids the backward allocation pattern. See thread at http://oss.sgi.com/archives/xfs/2013-03/msg00144.html for more details about the reproduction case and why this solution was chosen. Based on idea by Dave Chinner . CC: Dave Chinner Signed-off-by: Jan Kara Reviewed-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_alloc.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Mon May 20 13:10:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 464C829DF8 for ; Mon, 20 May 2013 13:10:42 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 023A130405F; Mon, 20 May 2013 11:10:39 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id D52C2500B4B; Mon, 20 May 2013 13:10:38 -0500 (CDT) Date: Mon, 20 May 2013 13:10:38 -0500 From: Ben Myers To: Jan Kara Cc: xfs@oss.sgi.com, tinguely@sgi.com, dchinner@redhat.com Subject: Re: [PATCH v2] xfs: Avoid pathological backwards allocation Message-ID: <20130520181038.GY29359@sgi.com> References: <1365710996-16439-1-git-send-email-jack@suse.cz> <20130520135607.GA11502@quack.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130520135607.GA11502@quack.suse.cz> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 03:56:07PM +0200, Jan Kara wrote: > On Thu 11-04-13 22:09:56, Jan Kara wrote: > > Writing a large file using direct IO in 16 MB chunks sometimes results > > in a pathological allocation pattern where 16 MB chunks of large free > > extent are allocated to a file in a reversed order. So extents of a file > > look for example as: > > > > ext logical physical expected length flags > > 0 0 13 4550656 > > 1 4550656 188136807 4550668 12562432 > > 2 17113088 200699240 200699238 622592 > > 3 17735680 182046055 201321831 4096 > > 4 17739776 182041959 182050150 4096 > > 5 17743872 182037863 182046054 4096 > > 6 17747968 182033767 182041958 4096 > > 7 17752064 182029671 182037862 4096 > > ... > > 6757 45400064 154381644 154389835 4096 > > 6758 45404160 154377548 154385739 4096 > > 6759 45408256 252951571 154381643 73728 eof > > > > This happens because XFS_ALLOCTYPE_THIS_BNO allocation fails (the last > > extent in the file cannot be further extended) so we fall back to > > XFS_ALLOCTYPE_NEAR_BNO allocation which picks end of a large free > > extent as the best place to continue the file. Since the chunk at the > > end of the free extent again cannot be further extended, this behavior > > repeats until the whole free extent is consumed in a reversed order. > > > > For data allocations this backward allocation isn't beneficial so make > > xfs_alloc_compute_diff() pick start of a free extent instead of its end > > for them. That avoids the backward allocation pattern. > > > > See thread at http://oss.sgi.com/archives/xfs/2013-03/msg00144.html for > > more details about the reproduction case and why this solution was > > chosen. > > > > Based on idea by Dave Chinner . > > > > CC: Dave Chinner > > Reviewed-by: Dave Chinner > > Signed-off-by: Jan Kara > > --- > > fs/xfs/xfs_alloc.c | 24 ++++++++++++++++++------ > > 1 files changed, 18 insertions(+), 6 deletions(-) > > > > v2: Updated comment and commit description. > Could anybody pull this patch into XFS tree? I don't see it there... Applied. Thanks Jan. From bfoster@redhat.com Mon May 20 13:59:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3148D7F37 for ; Mon, 20 May 2013 13:59:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0B4678F8033 for ; Mon, 20 May 2013 11:59:38 -0700 (PDT) X-ASG-Debug-ID: 1369076378-04cb6c10b8f1420001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 96jxOR5F7ELdWwZG for ; Mon, 20 May 2013 11:59:38 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4KIxZct010636 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 20 May 2013 14:59:35 -0400 Received: from bfoster.bfoster (dhcp-189-135.bos.redhat.com [10.16.189.135]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4KIxYrr008852; Mon, 20 May 2013 14:59:35 -0400 Message-ID: <519A7395.9060806@redhat.com> Date: Mon, 20 May 2013 15:03:49 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 08/14] xfs: remote attribute allocation may be contiguous References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-9-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 08/14] xfs: remote attribute allocation may be contiguous In-Reply-To: <1369007481-15185-9-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369076378 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/19/2013 07:51 PM, Dave Chinner wrote: > From: Dave Chinner > > When CRCs are enabled, there may be multiple allocations made if the > headers cause a length overflow. This, however, does not mean that > the number of headers required increases, as the second and > subsequent extents may be contiguous with the previous extent. Hence > when we map the extents to write the attribute data, we may end up > with less extents than allocations made. Hence the assertion that we > consume th enumber of headers we calculated in the allocation loop > is incorrect and needs to be removed. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_attr_remote.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > index dee8446..aad95b0 100644 > --- a/fs/xfs/xfs_attr_remote.c > +++ b/fs/xfs/xfs_attr_remote.c > @@ -359,6 +359,11 @@ xfs_attr_rmtval_set( > * into requiring more blocks. e.g. for 512 byte blocks, we'll > * spill for another block every 9 headers we require in this > * loop. > + * > + * Note that this can result in contiguous allocation of blocks, > + * so we don't use all the space we allocate for headers as we > + * have one less header for each contiguous allocation that > + * occurs in the map/write loop below. > */ > if (crcs && blkcnt == 0) { > int total_len; > @@ -439,7 +444,6 @@ xfs_attr_rmtval_set( > lblkno += map.br_blockcount; > } > ASSERT(valuelen == 0); > - ASSERT(hdrcnt == 0); I can't say I grok the context enough atm to send a Reviewed-by, but if we're removing this, why not just remove the hdrcnt-- a few lines up as well? It doesn't appear to be used after the first loop at this point. Brian > return 0; > } > > From bpm@sgi.com Mon May 20 14:18:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 267EB7F4C for ; Mon, 20 May 2013 14:18:18 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 71F50AC002; Mon, 20 May 2013 12:18:14 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id BD941500B4B; Mon, 20 May 2013 14:18:13 -0500 (CDT) Date: Mon, 20 May 2013 14:18:13 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 01/14] xfs: fix sub-page blocksize data integrity writes Message-ID: <20130520191813.GA20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-2-git-send-email-david@fromorbit.com> <519A6553.4090801@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519A6553.4090801@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 02:02:59PM -0400, Brian Foster wrote: > On 05/19/2013 07:51 PM, Dave Chinner wrote: > > From: Dave Chinner > > > > FSX on 512 byte block size filesystems has been failing for some > > time with corrupted data. The fault dates back to the change in > > the writeback data integrity algorithm that uses a mark-and-sweep > > approach to avoid data writeback livelocks. > > > > Unfortunately, a side effect of this mark-and-sweep approach is that > > each page will only be written once for a data integrity sync, and > > there is a condition in writeback in XFS where a page may require > > two writeback attempts to be fully written. As a result of the high > > level change, we now only get a partial page writeback during the > > integrity sync because the first pass through writeback clears the > > mark left on the page index to tell writeback that the page needs > > writeback.... > > > > The cause is writing a partial page in the clustering code. This can > > happen when a mapping boundary falls in the middle of a page - we > > end up writing back the first part of the page that the mapping > > covers, but then never revisit the page to have the remainder mapped > > and written. > > > > The fix is simple - if the mapping boundary falls inside a page, > > then simple abort clustering without touching the page. This means > > that the next ->writepage entry that write_cache_pages() will make > > is the page we aborted on, and xfs_vm_writepage() will map all > > sections of the page correctly. This behaviour is also optimal for > > non-data integrity writes, as it results in contiguous sequential > > writeback of the file rather than missing small holes and having to > > write them a "random" writes in a future pass. > > > > With this fix, all the fsx tests in xfstests now pass on a 512 byte > > block size filesystem on a 4k page machine. > > > > Signed-off-by: Dave Chinner > > --- > > Looks good to me. > > Reviewed-by: Brian Foster > > > fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ > > 1 file changed, 19 insertions(+) > > > > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c > > index 2b2691b..f04eceb 100644 > > --- a/fs/xfs/xfs_aops.c > > +++ b/fs/xfs/xfs_aops.c > > @@ -725,6 +725,25 @@ xfs_convert_page( > > (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, > > i_size_read(inode)); > > > > + /* > > + * If the current map does not span the entire page we are about to try > > + * to write, then give up. The only way we can write a page that spans > > + * multiple mappings in a single writeback iteration is via the > > + * xfs_vm_writepage() function. Data integrity writeback requires the > > + * entire page to be written in a single attempt, otherwise the part of > > + * the page we don't write here doesn't get written as part of the data > > + * integrity sync. > > + * > > + * For normal writeback, we also don't attempt to write partial pages > > + * here as it simply means that write_cache_pages() will see it under > > + * writeback and ignore the page until some pointin the future, at which > > + * time this will be the only page inteh file that needs writeback. > > + * Hence for more optimal IO patterns, we should always avoid partial > > + * page writeback due to multiple mappings on a page here. > > + */ Applying this with a couple of spelling fixes in this comment. Thanks for the reviews Brian. -Ben From bpm@sgi.com Mon May 20 14:38:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E8DA67F37 for ; Mon, 20 May 2013 14:38:02 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id C2404304039; Mon, 20 May 2013 12:37:59 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 9631B500B50; Mon, 20 May 2013 14:37:59 -0500 (CDT) Date: Mon, 20 May 2013 14:37:59 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/14] xfs: fixes for 3.10-rc2 (update) Message-ID: <20130520193759.GB20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:07AM +1000, Dave Chinner wrote: > THis is my current patch queue for 3.10-rc2. It contains the same first 6 > patches as posted here: > > http://oss.sgi.com/pipermail/xfs/2013-May/026366.html > > This update adds another 8 patches that fix attribute bugs on CRC > enabled filesystems. These patches make the attr group in xfstests > pass rather than assert fail or oops. Applied 1-3. Will work on reviews for the others. From bpm@oss.sgi.com Mon May 20 14:38:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 8A7C129DF8; Mon, 20 May 2013 14:38:51 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. for-linus-v3.10-rc1-2-14684-g52c24ad X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 211d022c43cac3aecbe967fcaf9b10156bfa63ad X-Git-Newrev: 52c24ad39ff02d7bd73c92eb0c926fb44984a41d Message-Id: <20130520193851.8A7C129DF8@oss.sgi.com> Date: Mon, 20 May 2013 14:38:50 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 52c24ad xfs: Don't reference the EFI after it is freed 28ca489 xfs: fix rounding in xfs_free_file_space 49b137c xfs: fix sub-page blocksize data integrity writes from 211d022c43cac3aecbe967fcaf9b10156bfa63ad (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 52c24ad39ff02d7bd73c92eb0c926fb44984a41d Author: Dave Chinner Date: Mon May 20 09:51:10 2013 +1000 xfs: Don't reference the EFI after it is freed Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 28ca489c63e9aceed8801d2f82d731b3c9aa50f5 Author: Dave Chinner Date: Mon May 20 09:51:09 2013 +1000 xfs: fix rounding in xfs_free_file_space The offset passed into xfs_free_file_space() needs to be rounded down to a certain size, but the rounding mask is built by a 32 bit variable. Hence the mask will always mask off the upper 32 bits of the offset and lead to incorrect writeback and invalidation ranges. This is not actually exposed as a bug because we writeback and invalidate from the rounded offset to the end of the file, and hence the offset we are actually punching a hole out of will always be covered by the code. This needs fixing, however, if we ever want to use exact ranges for writeback/invalidation here... Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 49b137cbbcc836ef231866c137d24f42c42bb483 Author: Dave Chinner Date: Mon May 20 09:51:08 2013 +1000 xfs: fix sub-page blocksize data integrity writes FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ fs/xfs/xfs_extfree_item.c | 5 +++-- fs/xfs/xfs_vnodeops.c | 4 ++-- 3 files changed, 24 insertions(+), 4 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Mon May 20 14:39:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 95EE47F54; Mon, 20 May 2013 14:39:02 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. for-linus-v3.10-rc1-2-14684-g52c24ad X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 211d022c43cac3aecbe967fcaf9b10156bfa63ad X-Git-Newrev: 52c24ad39ff02d7bd73c92eb0c926fb44984a41d Message-Id: <20130520193902.95EE47F54@oss.sgi.com> Date: Mon, 20 May 2013 14:39:01 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 52c24ad xfs: Don't reference the EFI after it is freed 28ca489 xfs: fix rounding in xfs_free_file_space 49b137c xfs: fix sub-page blocksize data integrity writes from 211d022c43cac3aecbe967fcaf9b10156bfa63ad (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 52c24ad39ff02d7bd73c92eb0c926fb44984a41d Author: Dave Chinner Date: Mon May 20 09:51:10 2013 +1000 xfs: Don't reference the EFI after it is freed Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 28ca489c63e9aceed8801d2f82d731b3c9aa50f5 Author: Dave Chinner Date: Mon May 20 09:51:09 2013 +1000 xfs: fix rounding in xfs_free_file_space The offset passed into xfs_free_file_space() needs to be rounded down to a certain size, but the rounding mask is built by a 32 bit variable. Hence the mask will always mask off the upper 32 bits of the offset and lead to incorrect writeback and invalidation ranges. This is not actually exposed as a bug because we writeback and invalidate from the rounded offset to the end of the file, and hence the offset we are actually punching a hole out of will always be covered by the code. This needs fixing, however, if we ever want to use exact ranges for writeback/invalidation here... Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 49b137cbbcc836ef231866c137d24f42c42bb483 Author: Dave Chinner Date: Mon May 20 09:51:08 2013 +1000 xfs: fix sub-page blocksize data integrity writes FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ fs/xfs/xfs_extfree_item.c | 5 +++-- fs/xfs/xfs_vnodeops.c | 4 ++-- 3 files changed, 24 insertions(+), 4 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Mon May 20 16:16:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 323857F37 for ; Mon, 20 May 2013 16:16:11 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id B6432AC004; Mon, 20 May 2013 14:16:07 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 46DCB500B4B; Mon, 20 May 2013 16:16:07 -0500 (CDT) Date: Mon, 20 May 2013 16:16:07 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 05/14] xfs: fix missing KM_NOFS tags to keep lockdep happy Message-ID: <20130520211607.GC20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-6-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-6-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:12AM +1000, Dave Chinner wrote: > From: Dave Chinner > > There are several places where we use KM_SLEEP allocation contexts > and use the fact that there are called from transaction context to they (fixed) > add KM_NOFS where appropriate. I think you're referring to the usage of PF_FSTRANS and us clearing __GFP_FS in kmem_flags_convert? > Unfortunately, there are several > places where the code makes this assumption but can be called from > outside transaction context but with filesystem locks held. These > places need explicit KM_NOFS annotations to avoid lockdep > complaining about reclaim contexts. > > Signed-off-by: Dave Chinner Looks good. In each case you added KM_NOFS where there was no transaction and locks would have been held. Applied. Reviewed-by: Ben Myers From bpm@sgi.com Mon May 20 16:32:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 747A87F37 for ; Mon, 20 May 2013 16:32:51 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 00346AC003; Mon, 20 May 2013 14:32:50 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id A7965500B4B; Mon, 20 May 2013 16:32:50 -0500 (CDT) Date: Mon, 20 May 2013 16:32:50 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 06/14] xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Message-ID: <20130520213250.GD20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-7-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-7-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:13AM +1000, Dave Chinner wrote: > From: Dave Chinner > > Signed-off-by: Dave Chinner Looks good. Applied. Reviewed-by: Ben Myers > --- > fs/xfs/xfs_da_btree.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c > index 41ea7e1..0b8b2a1 100644 > --- a/fs/xfs/xfs_da_btree.c > +++ b/fs/xfs/xfs_da_btree.c > @@ -270,6 +270,7 @@ xfs_da3_node_read_verify( > break; > return; > case XFS_ATTR_LEAF_MAGIC: > + case XFS_ATTR3_LEAF_MAGIC: > bp->b_ops = &xfs_attr3_leaf_buf_ops; > bp->b_ops->verify_read(bp); > return; > -- > 1.7.10.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From noreply@riabiznes.ru Mon May 20 16:52:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=HTML_IMAGE_ONLY_12, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 07AB07F37 for ; Mon, 20 May 2013 16:52:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 59EABAC003 for ; Mon, 20 May 2013 14:52:11 -0700 (PDT) X-ASG-Debug-ID: 1369086726-04cb6c10b8fbc30001-NocioJ Received: from riabiznes.ru (riabiznes.ru [92.63.106.190]) by cuda.sgi.com with ESMTP id E4sk48XA9EE3juHs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 May 2013 14:52:08 -0700 (PDT) X-Barracuda-Envelope-From: noreply@riabiznes.ru X-Barracuda-Apparent-Source-IP: 92.63.106.190 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=riabiznes.ru; s=dkim; h=Message-Id:Date:MIME-Version:Content-Type:To:Subject:From; bh=yQ4BrTMSzUKxP38tm6HKiw/6X6uTNXS9kjrs4rZWWKc=; b=qq9UzG+kDPLAfTacw6PyPq6Ncj6u2KTjnZO02v12ruK3gd99E8gAwVIU5o2tDYDvqR9L6rI1Jfqs2w3zQV9nwl0TF2/YT531QKrzJDRKQCQvqVrzIFngLlcM2xT7WS+tj7MpsF0wTn96Ila2Bc8royVS5QVmjTEhh8NDacWc1t8=; Received: (helo=109-161-4-231.kosnet.ru) }}by riabiznes.ru with esmtpa (Exim 4.80.1) (envelope-from ) id 1UeXzw-000LMI-PC for xfs@oss.sgi.com; Tue, 21 May 2013 01:52:04 +0400 From: "=?utf-8?B?0JDQu9C10LrRgdCw0L3QtNGAIFRheWVlcg==?=" Subject: =?utf-8?B?0JjQtNGDINC80LjQvNC+INGB0LzQvtGC0YDRjiDQv9GA0LjQutC+0LvRjNC90L4g0LTQtdC70Y7RgdGMINGBINGC0L7QsdC+0Lku?= To: "xfs" X-ASG-Orig-Subj: =?utf-8?B?0JjQtNGDINC80LjQvNC+INGB0LzQvtGC0YDRjiDQv9GA0LjQutC+0LvRjNC90L4g0LTQtdC70Y7RgdGMINGBINGC0L7QsdC+0Lku?= Content-Type: multipart/related; boundary="viNvJJUmRnv1IoVGP8mpoDMnVE=_cS06e7" MIME-Version: 1.0 Organization: =?utf-8?B?0KLQsNC50LXQtdGAINC60L7QvA==?= Date: Tue, 21 May 2013 01:52:07 +0400 Message-Id: X-Barracuda-Connect: riabiznes.ru[92.63.106.190] X-Barracuda-Start-Time: 1369086728 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.63 X-Barracuda-Spam-Status: No, SCORE=1.63 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, HTML_IMAGE_ONLY_12, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131543 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 1.63 HTML_IMAGE_ONLY_12 BODY: HTML: images with 800-1200 bytes of words 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format --viNvJJUmRnv1IoVGP8mpoDMnVE=_cS06e7 Content-Type: multipart/alternative; boundary="MRxgfoRTPCzBq=_DA8FCAErkyhJHOErNFK" --MRxgfoRTPCzBq=_DA8FCAErkyhJHOErNFK Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF=D0=A5=D0=B0=D0=B9=D0=BF=D0=BE=D0=B2 =D0=BF=D1=80=D0=BE=D0=B5= =D0=BA=D1=82=D0=BE=D0=B2 =D0=BC=D0=B0=D1=82=D1=80=D0=B8=D1=86 =D0=B4=D0= =BE =D0=B8=D0=B7=D0=B6=D0=BE=D0=B3=D0=B8 =D0=BC=D0=BD=D0=BE=D0=B3=D0=BE= , =D1=81=D1=82=D0=B0=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 =D0=BE=D1= =87=D0=B5=D0=BD=D1=8C =D0=BC=D0=B0=D0=BB=D0=BE. =D0=9D=D0=B0=D0=B1=D0=B8= =D1=80=D0=B0=D0=B5=D0=BC Tayeer =D0=BD=D1=83 =D0=B0 =D0=B4=D0=B0=D0=BB= =D1=8C=D1=88=D0=B5 com ))) =20 =20 =D0=9E=D1=82=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C=D1=81=D1=8F =D0=BF=D0= =BE =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9= =D0=BF=D0=BE=D1=87=D1=82=D0=B5 =D0=94=D0=BE=D0=B1=D1=80=D1=8B=D0=B9 =D0=B4=D0=B5=D0=BD=D1=8C=20 --MRxgfoRTPCzBq=_DA8FCAErkyhJHOErNFK Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF

3D""

 

 

=D0=9E=D1=82=D0=BF=D0=B8=D1=81=D0=B0= =D1=82=D1=8C=D1=81=D1=8F =D0=BF=D0=BE =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1= =80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9 =D0=BF=D0=BE=D1=87=D1=82=D0=B5

=D0=91=D1=83=D0=B4=D1=83 =D1=80=D0=B0=D0=B4 =D0=B2= =D0=B8=D0=B4=D0=B5=D1=82=D1=8C

--MRxgfoRTPCzBq=_DA8FCAErkyhJHOErNFK-- --viNvJJUmRnv1IoVGP8mpoDMnVE=_cS06e7 Content-Type: image/png; name="46860.png" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="46860.png" Content-ID: <015522113@20052013-2880> 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 --viNvJJUmRnv1IoVGP8mpoDMnVE=_cS06e7-- From bpm@sgi.com Mon May 20 16:52:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4978C7F51 for ; Mon, 20 May 2013 16:52:28 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id BD24EAC004; Mon, 20 May 2013 14:52:27 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 6F923500B50; Mon, 20 May 2013 16:52:27 -0500 (CDT) Date: Mon, 20 May 2013 16:52:27 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 07/14] xfs: xfs_attr_shortform_allfit() does not handle attr3 format. Message-ID: <20130520215227.GE20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-8-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-8-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:14AM +1000, Dave Chinner wrote: > From: Dave Chinner > > xfstests generic/117 fails with: > > XFS: Assertion failed: leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) > > indicating a function that does not handle the attr3 format > correctly. Fix it. > > Signed-off-by: Dave Chinner Looks good. Applied. Reviewed-by: Ben Myers From bpm@sgi.com Mon May 20 17:04:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AE7407F37 for ; Mon, 20 May 2013 17:04:21 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 67B2E304039; Mon, 20 May 2013 15:04:18 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 44F56500B4B; Mon, 20 May 2013 17:04:18 -0500 (CDT) Date: Mon, 20 May 2013 17:04:18 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 08/14] xfs: remote attribute allocation may be contiguous Message-ID: <20130520220418.GF20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-9-git-send-email-david@fromorbit.com> <519A7395.9060806@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519A7395.9060806@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 03:03:49PM -0400, Brian Foster wrote: > On 05/19/2013 07:51 PM, Dave Chinner wrote: > > From: Dave Chinner > > > > When CRCs are enabled, there may be multiple allocations made if the > > headers cause a length overflow. This, however, does not mean that > > the number of headers required increases, as the second and > > subsequent extents may be contiguous with the previous extent. Hence > > when we map the extents to write the attribute data, we may end up > > with less extents than allocations made. Hence the assertion that we > > consume th enumber of headers we calculated in the allocation loop the > > is incorrect and needs to be removed. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_attr_remote.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > > index dee8446..aad95b0 100644 > > --- a/fs/xfs/xfs_attr_remote.c > > +++ b/fs/xfs/xfs_attr_remote.c > > @@ -359,6 +359,11 @@ xfs_attr_rmtval_set( > > * into requiring more blocks. e.g. for 512 byte blocks, we'll > > * spill for another block every 9 headers we require in this > > * loop. > > + * > > + * Note that this can result in contiguous allocation of blocks, > > + * so we don't use all the space we allocate for headers as we > > + * have one less header for each contiguous allocation that > > + * occurs in the map/write loop below. > > */ > > if (crcs && blkcnt == 0) { > > int total_len; > > @@ -439,7 +444,6 @@ xfs_attr_rmtval_set( > > lblkno += map.br_blockcount; > > } > > ASSERT(valuelen == 0); > > - ASSERT(hdrcnt == 0); > > I can't say I grok the context enough atm to send a Reviewed-by, but if > we're removing this, why not just remove the hdrcnt-- a few lines up as > well? It doesn't appear to be used after the first loop at this point. Could also keep a separate variable for each loop and compare them here. The count for the 2nd loop should always be smaller than for the first... The assert was worth adding so maybe it is worth fixing too? Either way is fine with me. Reviewed-by: Ben Myers -Ben From bpm@sgi.com Mon May 20 17:15:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 823167F37 for ; Mon, 20 May 2013 17:15:46 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 02B03AC002; Mon, 20 May 2013 15:15:42 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id ADEB3500B4B; Mon, 20 May 2013 17:15:42 -0500 (CDT) Date: Mon, 20 May 2013 17:15:42 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 09/14] xfs: remote attribute lookups require the value length Message-ID: <20130520221542.GG20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-10-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-10-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:16AM +1000, Dave Chinner wrote: > From: Dave Chinner > > When reading a remote attribute, to correctly calculate the length > of the data buffer for CRC enable filesystems, we need to know the > length of the attribute data. We get this information when we look > up the attribute, but we don't store it in the args structure along > with the other remote attr information we get from the lookup. Add > this information to the args structure so we can use it > appropriately. Looks good. Applied. Reviewed-by: Ben Myers From noreply@riabiznes.ru Mon May 20 17:20:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=HTML_IMAGE_ONLY_12, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E49D07F37 for ; Mon, 20 May 2013 17:20:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 79667AC003 for ; Mon, 20 May 2013 15:20:15 -0700 (PDT) X-ASG-Debug-ID: 1369088403-04bdf04225467030001-NocioJ Received: from riabiznes.ru (riabiznes.ru [92.63.106.190]) by cuda.sgi.com with ESMTP id lAIQqxhHTpcqK6Ml (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 May 2013 15:20:04 -0700 (PDT) X-Barracuda-Envelope-From: noreply@riabiznes.ru X-Barracuda-Apparent-Source-IP: 92.63.106.190 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=riabiznes.ru; s=dkim; h=Message-Id:Date:MIME-Version:Content-Type:To:Subject:From; bh=NxpxEW5WKM+GIcVgDnIeM092QxxeedPAeSeD98T9s0A=; b=mUB8MXdNIy6/v0cAtU+/zAmspoDE+N1uP2wh5mgILwBdoxgcOD+JBja7vMKVLO1fh0MZvmKow2XCjEI/vV+DKIyHC2wbypb3ZA0NYS13hhf6zYgNFKWEuzqP1UUGP5vjcSYu/mdRbC4U04WbB9/fbVMDogtUy9Z23hxAVhKIp5A=; Received: (helo=109-161-4-231.kosnet.ru) }}by riabiznes.ru with esmtpa (Exim 4.80.1) (envelope-from ) id 1UeYQz-000AC5-U3 for xfs@oss.sgi.com; Tue, 21 May 2013 02:20:02 +0400 From: "=?utf-8?B?0JDQu9C10LrRgdCw0L3QtNGAIFRheWVlcg==?=" Subject: =?utf-8?B?0JjQtNGDINC80LjQvNC+INGB0LzQvtGC0YDRjiDQv9GA0LjQutC+0LvRjNC90L4g0LTQtdC70Y7RgdGMINGBINGC0L7QsdC+0Lku?= To: "xfs" X-ASG-Orig-Subj: =?utf-8?B?0JjQtNGDINC80LjQvNC+INGB0LzQvtGC0YDRjiDQv9GA0LjQutC+0LvRjNC90L4g0LTQtdC70Y7RgdGMINGBINGC0L7QsdC+0Lku?= Content-Type: multipart/related; boundary="9GDYfVCzpy8mAfbEtKFZkix=_GGXb7Z08v" MIME-Version: 1.0 Organization: =?utf-8?B?0KLQsNC50LXQtdGAINC60L7QvA==?= Date: Tue, 21 May 2013 02:20:05 +0400 Message-Id: X-Barracuda-Connect: riabiznes.ru[92.63.106.190] X-Barracuda-Start-Time: 1369088404 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.63 X-Barracuda-Spam-Status: No, SCORE=1.63 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, HTML_IMAGE_ONLY_12, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131545 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 1.63 HTML_IMAGE_ONLY_12 BODY: HTML: images with 800-1200 bytes of words 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format --9GDYfVCzpy8mAfbEtKFZkix=_GGXb7Z08v Content-Type: multipart/alternative; boundary="PUdxLE7SLejZ5k=_UyP9jRPVNUcxVSIsV9" --PUdxLE7SLejZ5k=_UyP9jRPVNUcxVSIsV9 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF=D0=A5=D0=B0=D0=B9=D0=BF=D0=BE=D0=B2 =D0=BF=D1=80=D0=BE=D0=B5= =D0=BA=D1=82=D0=BE=D0=B2 =D0=BC=D0=B0=D1=82=D1=80=D0=B8=D1=86 =D0=B4=D0= =BE =D0=B8=D0=B7=D0=B6=D0=BE=D0=B3=D0=B8 =D0=BC=D0=BD=D0=BE=D0=B3=D0=BE= , =D1=81=D1=82=D0=B0=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 =D0=BE=D1= =87=D0=B5=D0=BD=D1=8C =D0=BC=D0=B0=D0=BB=D0=BE. =D0=9D=D0=B0=D0=B1=D0=B8= =D1=80=D0=B0=D0=B5=D0=BC Tayeer =D0=BD=D1=83 =D0=B0 =D0=B4=D0=B0=D0=BB= =D1=8C=D1=88=D0=B5 com ))) =20 =20 =D0=9E=D1=82=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C=D1=81=D1=8F =D0=BF=D0= =BE =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9= =D0=BF=D0=BE=D1=87=D1=82=D0=B5 =D0=94=D0=BE=D0=B1=D1=80=D1=8B=D0=B9 =D0=B4=D0=B5=D0=BD=D1=8C=20 --PUdxLE7SLejZ5k=_UyP9jRPVNUcxVSIsV9 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF

3D""

 

 

=D0=9E=D1=82=D0=BF=D0=B8=D1=81=D0=B0= =D1=82=D1=8C=D1=81=D1=8F =D0=BF=D0=BE =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1= =80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9 =D0=BF=D0=BE=D1=87=D1=82=D0=B5

=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82 =D0=B2=D1=81= =D0=B5=D0=BC

--PUdxLE7SLejZ5k=_UyP9jRPVNUcxVSIsV9-- --9GDYfVCzpy8mAfbEtKFZkix=_GGXb7Z08v Content-Type: image/png; name="46860.png" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="46860.png" Content-ID: <015522113@20052013-2880> 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 --9GDYfVCzpy8mAfbEtKFZkix=_GGXb7Z08v-- From bpm@sgi.com Mon May 20 18:00:47 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 712407F37 for ; Mon, 20 May 2013 18:00:47 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id E6720AC003; Mon, 20 May 2013 16:00:46 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 9B071500B50; Mon, 20 May 2013 18:00:46 -0500 (CDT) Date: Mon, 20 May 2013 18:00:46 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/14] xfs: remote attribute read too short Message-ID: <20130520230046.GH20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-11-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-11-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:17AM +1000, Dave Chinner wrote: > From: Dave Chinner > > Reading a maximally size remote attribute fails when CRCs are > enabled with this verification error: > > XFS (vdb): remote attribute header does not match required off/len/owner) > > There are two reasons for this, the first being that the > length of the buffer being read is determined from the > args->rmtblkcnt which doesn't take into account CRC headers. Hence > the mapped length ends up being too short and so we need to > calculate it directly from the value length. > > The second is that the byte count of valid data within a buffer is > capped by the length of the data and so doesn't take into account > that the buffer might be longer due to headers. Hence we need to > calculate the data space in the buffer first before calculating the > actual byte count of data. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_attr_remote.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > index aad95b0..bcdc07c 100644 > --- a/fs/xfs/xfs_attr_remote.c > +++ b/fs/xfs/xfs_attr_remote.c > @@ -52,9 +52,11 @@ xfs_attr3_rmt_blocks( > struct xfs_mount *mp, > int attrlen) > { > - int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, > - mp->m_sb.sb_blocksize); > - return (attrlen + buflen - 1) / buflen; > + if (xfs_sb_version_hascrc(&mp->m_sb)) { > + int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > + return (attrlen + buflen - 1) / buflen; > + } > + return XFS_B_TO_FSB(mp, attrlen); > } xfs_attr_rmtval_set, previously the only caller of xfs_attr3_rmt_blocks already checks for crcs. Can one of the two conditionals be dispensed with? From bpm@sgi.com Mon May 20 18:01:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 326077F37 for ; Mon, 20 May 2013 18:01:25 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0A7C9304032; Mon, 20 May 2013 16:01:21 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id CEB6F500B4B; Mon, 20 May 2013 18:01:21 -0500 (CDT) Date: Mon, 20 May 2013 18:01:21 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 11/14] xfs: remote attribute tail zeroing does too much Message-ID: <20130520230121.GI20028@sgi.com> References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-12-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-12-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 20, 2013 at 09:51:18AM +1000, Dave Chinner wrote: > From: Dave Chinner > > When an attribute data does not fill then entire remote block, we > zero the remaining part of the buffer. This, however, needs to take > into account that the buffer has a header, and so the offset where > zeroing starts and the length of zeroing need to take this into > account. Otherwise we end up with zeros over the end of the > attribute value when CRCs are enabled. > > While there, make sure we only ask to map an extent that covers the > remaining range of the attribute, rather than asking every time for > the full length of remote data. If the remote attribute blocks are > contiguous with other parts of the attribute tree, it will map those > blocks as well and we can potentially zero them incorrectly. We can > also get buffer size mistmatches when trying to read or remove the > remote attribute, and this can lead to not finding the correct > buffer when looking it up in cache. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_attr_remote.c | 37 ++++++++++++++++++------------------- > 1 file changed, 18 insertions(+), 19 deletions(-) > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > index bcdc07c..e207bf0 100644 > --- a/fs/xfs/xfs_attr_remote.c > +++ b/fs/xfs/xfs_attr_remote.c > @@ -296,10 +296,7 @@ xfs_attr_rmtval_set( > * and we may not need that many, so we have to handle this when > * allocating the blocks below. > */ > - if (!crcs) > - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); > - else > - blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); > + blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); Oh. There you have it. Nevermind. From bpm@oss.sgi.com Mon May 20 18:03:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 268DE7F4E; Mon, 20 May 2013 18:03:46 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. for-linus-v3.10-rc1-2-14688-ge461fcb X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 52c24ad39ff02d7bd73c92eb0c926fb44984a41d X-Git-Newrev: e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 Message-Id: <20130520230346.268DE7F4E@oss.sgi.com> Date: Mon, 20 May 2013 18:03:45 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated e461fcb xfs: remote attribute lookups require the value length b38958d xfs: xfs_attr_shortform_allfit() does not handle attr3 format. 72916fb xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC ac14876 xfs: fix missing KM_NOFS tags to keep lockdep happy from 52c24ad39ff02d7bd73c92eb0c926fb44984a41d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 Author: Dave Chinner Date: Mon May 20 09:51:16 2013 +1000 xfs: remote attribute lookups require the value length When reading a remote attribute, to correctly calculate the length of the data buffer for CRC enable filesystems, we need to know the length of the attribute data. We get this information when we look up the attribute, but we don't store it in the args structure along with the other remote attr information we get from the lookup. Add this information to the args structure so we can use it appropriately. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit b38958d715316031fe9ea0cc6c22043072a55f49 Author: Dave Chinner Date: Mon May 20 09:51:14 2013 +1000 xfs: xfs_attr_shortform_allfit() does not handle attr3 format. xfstests generic/117 fails with: XFS: Assertion failed: leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) indicating a function that does not handle the attr3 format correctly. Fix it. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 72916fb8cbcf0c2928f56cdc2fbe8c7bf5517758 Author: Dave Chinner Date: Mon May 20 09:51:13 2013 +1000 xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit ac14876cf9255175bf3bdad645bf8aa2b8fb2d7c Author: Dave Chinner Date: Mon May 20 09:51:12 2013 +1000 xfs: fix missing KM_NOFS tags to keep lockdep happy There are several places where we use KM_SLEEP allocation contexts and use the fact that they are called from transaction context to add KM_NOFS where appropriate. Unfortunately, there are several places where the code makes this assumption but can be called from outside transaction context but with filesystem locks held. These places need explicit KM_NOFS annotations to avoid lockdep complaining about reclaim contexts. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_attr_leaf.c | 27 +++++++++++++++------------ fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_da_btree.c | 7 +++++-- fs/xfs/xfs_dir2_leaf.c | 2 +- fs/xfs/xfs_log_cil.c | 2 +- 5 files changed, 23 insertions(+), 17 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Mon May 20 18:03:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id CFEDD29E05; Mon, 20 May 2013 18:03:56 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. for-linus-v3.10-rc1-2-14688-ge461fcb X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 52c24ad39ff02d7bd73c92eb0c926fb44984a41d X-Git-Newrev: e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 Message-Id: <20130520230357.CFEDD29E05@oss.sgi.com> Date: Mon, 20 May 2013 18:03:55 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated e461fcb xfs: remote attribute lookups require the value length b38958d xfs: xfs_attr_shortform_allfit() does not handle attr3 format. 72916fb xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC ac14876 xfs: fix missing KM_NOFS tags to keep lockdep happy from 52c24ad39ff02d7bd73c92eb0c926fb44984a41d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 Author: Dave Chinner Date: Mon May 20 09:51:16 2013 +1000 xfs: remote attribute lookups require the value length When reading a remote attribute, to correctly calculate the length of the data buffer for CRC enable filesystems, we need to know the length of the attribute data. We get this information when we look up the attribute, but we don't store it in the args structure along with the other remote attr information we get from the lookup. Add this information to the args structure so we can use it appropriately. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit b38958d715316031fe9ea0cc6c22043072a55f49 Author: Dave Chinner Date: Mon May 20 09:51:14 2013 +1000 xfs: xfs_attr_shortform_allfit() does not handle attr3 format. xfstests generic/117 fails with: XFS: Assertion failed: leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) indicating a function that does not handle the attr3 format correctly. Fix it. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 72916fb8cbcf0c2928f56cdc2fbe8c7bf5517758 Author: Dave Chinner Date: Mon May 20 09:51:13 2013 +1000 xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit ac14876cf9255175bf3bdad645bf8aa2b8fb2d7c Author: Dave Chinner Date: Mon May 20 09:51:12 2013 +1000 xfs: fix missing KM_NOFS tags to keep lockdep happy There are several places where we use KM_SLEEP allocation contexts and use the fact that they are called from transaction context to add KM_NOFS where appropriate. Unfortunately, there are several places where the code makes this assumption but can be called from outside transaction context but with filesystem locks held. These places need explicit KM_NOFS annotations to avoid lockdep complaining about reclaim contexts. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_attr_leaf.c | 27 +++++++++++++++------------ fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_da_btree.c | 7 +++++-- fs/xfs/xfs_dir2_leaf.c | 2 +- fs/xfs/xfs_log_cil.c | 2 +- 5 files changed, 23 insertions(+), 17 deletions(-) hooks/post-receive -- XFS development tree From david@fromorbit.com Mon May 20 19:02:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E73E67F37 for ; Mon, 20 May 2013 19:02:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C45EC304039 for ; Mon, 20 May 2013 17:02:14 -0700 (PDT) X-ASG-Debug-ID: 1369094530-04cb6c10b8101d60001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id hmclijtFkOauRqJQ for ; Mon, 20 May 2013 17:02:12 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkgQADC4mlF5LNn3/2dsb2JhbABAGoMIMLwphSAEAYEEF3SCHwEBBAE6HCMFCwgDDgoJJQ8FJQMhE4gHBQ0zvAAWjV8PgRgFB4JzYQOXN4ochyWDISqBLQ Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 09:32:09 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uea1p-0000ZH-1V; Tue, 21 May 2013 10:02:09 +1000 Date: Tue, 21 May 2013 10:02:09 +1000 From: Dave Chinner To: Paolo Pisati Cc: xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130521000208.GF24543@dastard> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> <20130519011354.GE6495@dastard> <20130520170710.GA2591@luxor.wired.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130520170710.GA2591@luxor.wired.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369094530 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Mon, May 20, 2013 at 07:07:10PM +0200, Paolo Pisati wrote: > On Sun, May 19, 2013 at 11:13:54AM +1000, Dave Chinner wrote: > > > > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1176977 > > > > which contains information that everyone looking at the problem > > should know. Also, any progress on testing the backported fix > > mentioned in the bug? > > the problem with the 'fix' is that it prevents xfs from erroring out, but > swift-test fails regardless after ~25% of fs usage and i think having a bold > 'xfs error' and a stack trace is more useful. I think your logic is misguided. There's a major difference between ENOSPC and a filesystem shutdown. After a shutdown you need to unmount, remount, and then work out what didn't make it to disk before you can restart. Not to mention that the ENOMEM that triggers the shutdown is highly system dependent - it will occur at different times on different machines and will be highly unpredictable. That's not a good thing. Compare that to a plain ENOSPC error: you can just remove files and keep going. > > You're testing swift benchmark which is probably a small file > > workload with large attributes attached. It's a good chance that > > the workload is fragmenting free space because swift is doing bad > > things to allocation patterns. It's almost certainly exacerbated by > > the tiny filesystem you are using (1.5GB), but you can probably work > > around this problem for now with allocsize=4096. > > ok, i repartitioned my disk but i can still reprodue it fairly easily: > > df -h: > /dev/sda6 216G 573M 215G 1% /mnt/sdb1 > > df -i: > /dev/sda6 56451072 235458 56215614 1% /mnt/sdb1 > > dmesg: > ... > [ 363.130877] XFS (sda6): Mounting Filesystem > [ 363.146708] XFS (sda6): Ending clean mount > [ 3055.520769] alloc_vmap_area: 18 callbacks suppressed > [ 3055.520783] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3055.520817] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3055.520845] vmap allocation for size 2097152 failed: use vmalloc= to increase size. > [ 3055.520861] XFS (sda6): xfs_buf_get: failed to map pages Which is your ENOMEM error, not an ENOSPC error. So the larger filesystem meant you didn't hit the ENOSPC problem like I suspected it would.... > > I've got a fix that I'm testing for the underlying cause of the > > problem I'm aware of with this workload, but I'll need more > > information about your storage/filesystem config to confirm it is > > the same root cause first. Can you include the info from here: And that fix I mentioned will be useless if you don't apply the patch that avoids the vmap allocation problem.... > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > > flag@c13:~$ uname -a > Linux c13 3.5.0-30-highbank #51-Ubuntu SMP Tue May 14 22:57:15 UTC 2013 armv7l armv7l armv7l GNU/Linux > > lag@c13:~$ xfs_repair -V > xfs_repair version 3.1.7 > > armhf highbank node, 4 cores, 4GB mem > > flag@c13:~$ cat /proc/meminfo > MemTotal: 4137004 kB > MemFree: 2719752 kB > Buffers: 39688 kB > Cached: 580508 kB > SwapCached: 0 kB > Active: 631136 kB > Inactive: 204552 kB > Active(anon): 215520 kB > Inactive(anon): 232 kB > Active(file): 415616 kB > Inactive(file): 204320 kB > Unevictable: 0 kB > Mlocked: 0 kB > HighTotal: 3408896 kB > HighFree: 2606516 kB > LowTotal: 728108 kB Oh, there's a likely cause of the vmalloc issue. You have 3.4GB of high memory, which means the kernel only has 700MB of low memory for slab caches, vmap regions, etc. An ia32 box has, by default 960MB of low memory which will be why you are seeing this more frequently than anyone using an ia32 machine. And an ia32 machine can be configured with 2G/2G or 3G/1G kernel/user address space splits, so most vmalloc problems can be worked around. > Slab: 317000 kB > SReclaimable: 230392 kB > SUnreclaim: 86608 kB And so you have 300MB in slab caches in low memory > KernelStack: 2192 kB > PageTables: 2284 kB > NFS_Unstable: 0 kB > Bounce: 0 kB > WritebackTmp: 0 kB > CommitLimit: 10446864 kB > Committed_AS: 1049624 kB > VmallocTotal: 245760 kB > VmallocUsed: 2360 kB > VmallocChunk: 241428 kB and 240MB in vmalloc space. so there's not much left of that 700MB of low memory space. So, you really need that vmap fix, and you need to configure your kernel with more low memory space. > > As well the freespace info that Jeff asked for? > > flag@c13:~$ sudo xfs_db -r "-c freesp -s" /dev/sda6 > from to extents blocks pct > 1 1 423 423 0.00 > 2 3 897 2615 0.01 > 4 7 136 915 0.00 > 8 15 24833 365797 0.86 > 8388608 14112768 3 41928421 99.13 > total free extents 26292 > total free blocks 42298171 > average free extent size 1608.78 We need this information after the ENOSPC error occurs, not soon after mkfs or after the ENOMEM error. If this is after ENOSPC, please unmount the filesystem, drop caches and rerun the freesp command... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 20 19:06:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AC9C77F3F for ; Mon, 20 May 2013 19:06:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7E1578F8037 for ; Mon, 20 May 2013 17:06:40 -0700 (PDT) X-ASG-Debug-ID: 1369094798-04bdf0422646cb40001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id POWgdsVuj2UlS3k4 for ; Mon, 20 May 2013 17:06:38 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvoNAHG5mlF5LNn3/2dsb2JhbABSCIMIvFmFIAQBgQQXdIIfAQEFJxMcIxAIAw4HAwklDwUNGAMhE4d7Aw6zXw2IWRaMNIEhGYEdB4NUA5VSgWWKHIIChSODISo Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 09:36:16 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uea5o-0000Zp-DJ; Tue, 21 May 2013 10:06:16 +1000 Date: Tue, 21 May 2013 10:06:16 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/14] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Message-ID: <20130521000616.GG24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 04/14] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-5-git-send-email-david@fromorbit.com> <519A655D.4020001@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519A655D.4020001@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369094798 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On Mon, May 20, 2013 at 02:03:09PM -0400, Brian Foster wrote: > On 05/19/2013 07:51 PM, Dave Chinner wrote: > > From: Dave Chinner > > > > Lockdep reports: > > > > ============================================= > > [ INFO: possible recursive locking detected ] > > 3.9.0+ #3 Not tainted > > --------------------------------------------- > > setquota/28368 is trying to acquire lock: > > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > > > but task is already holding lock: > > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > > > from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be > > allocated. > > > > xfs_qm_scall_setqlim() is starting a transaction and then not > > passing it into xfs_qm_dqet() and so it starts it's own transaction > > when allocating the dquot. Splat! > > > > Fix this by not allocating the dquot in xfs_qm_scall_setqlim() > > inside the setqlim transaction. This requires getting the dquot > > first (and allocating it if necessary) then dropping and relocking > > the dquot before joining it to the setqlim transaction. > > > > Reported-by: Michael L. Semon > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_qm_syscalls.c | 35 ++++++++++++++++++++--------------- > > 1 file changed, 20 insertions(+), 15 deletions(-) > > > > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > > index c41190c..dfa5c05 100644 > > --- a/fs/xfs/xfs_qm_syscalls.c > > +++ b/fs/xfs/xfs_qm_syscalls.c > > @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( > > if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) > > return 0; > > > > - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); > > - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), > > - 0, 0, XFS_DEFAULT_LOG_COUNT); > > - if (error) { > > - xfs_trans_cancel(tp, 0); > > - return (error); > > - } > > - > > /* > > * We don't want to race with a quotaoff so take the quotaoff lock. > > - * (We don't hold an inode lock, so there's nothing else to stop > > - * a quotaoff from happening). (XXXThis doesn't currently happen > > - * because we take the vfslock before calling xfs_qm_sysent). > > + * We don't hold an inode lock, so there's nothing else to stop > > + * a quotaoff from happening. > > */ > > mutex_lock(&q->qi_quotaofflock); > > > > /* > > - * Get the dquot (locked), and join it to the transaction. > > - * Allocate the dquot if this doesn't exist. > > + * Get the dquot (locked) before we start, as we need to do a > > + * transaction to allocate it if it doesn't exist. Once we have the > > + * dquot, unlock it so we can start the next transaction safely. We hold > > + * a reference to the dquot, so it's safe to do this unlock/lock without > > + * it being reclaimed in the mean time. > > */ > > - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { > > - xfs_trans_cancel(tp, XFS_TRANS_ABORT); > > + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); > > + if (error) { > > ASSERT(error != ENOENT); > > goto out_unlock; > > } > > + xfs_dqunlock(dqp); > > + > > + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); > > + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), > > + 0, 0, XFS_DEFAULT_LOG_COUNT); > > + if (error) { > > + xfs_trans_cancel(tp, 0); > > + goto out_unlock; > > By shuffling the transaction allocation and xfs_qm_dqget() around, it > looks like you now have an error path with a referenced dquot. Perhaps > here we should jump to a new label that includes the xfs_qm_dqrele() at > the end of the function? Right, you are. ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 20 19:09:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D7B967F3F for ; Mon, 20 May 2013 19:09:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C22C8304032 for ; Mon, 20 May 2013 17:09:34 -0700 (PDT) X-ASG-Debug-ID: 1369094973-04cbb05fe2464fa0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id CkJf7bO29qvknGQ1 for ; Mon, 20 May 2013 17:09:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkNAH26mlF5LNn3/2dsb2JhbABagwi8WYUgBAGBBBd0gh8BAQQBOhwjEAgDDgcDCSUPBSUDIROIBwW8NBaNboEdB4NUA5c3ihyHJYMhKg Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 09:38:37 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uea85-0000Zy-EK; Tue, 21 May 2013 10:08:37 +1000 Date: Tue, 21 May 2013 10:08:37 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 05/14] xfs: fix missing KM_NOFS tags to keep lockdep happy Message-ID: <20130521000837.GH24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 05/14] xfs: fix missing KM_NOFS tags to keep lockdep happy References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-6-git-send-email-david@fromorbit.com> <20130520211607.GC20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130520211607.GC20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369094973 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 20, 2013 at 04:16:07PM -0500, Ben Myers wrote: > On Mon, May 20, 2013 at 09:51:12AM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > There are several places where we use KM_SLEEP allocation contexts > > and use the fact that there are called from transaction context to > they > > (fixed) > > > add KM_NOFS where appropriate. > > I think you're referring to the usage of PF_FSTRANS and us clearing __GFP_FS in > kmem_flags_convert? Yes. > > Unfortunately, there are several > > places where the code makes this assumption but can be called from > > outside transaction context but with filesystem locks held. These > > places need explicit KM_NOFS annotations to avoid lockdep > > complaining about reclaim contexts. > > > > Signed-off-by: Dave Chinner > > Looks good. In each case you added KM_NOFS where there was no transaction and > locks would have been held. Applied. > > Reviewed-by: Ben Myers Thanks. -Dave -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 20 19:25:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BF5E37F37 for ; Mon, 20 May 2013 19:25:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A9E498F8035 for ; Mon, 20 May 2013 17:25:24 -0700 (PDT) X-ASG-Debug-ID: 1369095922-04cb6c10ba102fc0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id IRpGdGiI6rXUqw3j for ; Mon, 20 May 2013 17:25:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvoNACK+mlF5LNn3/2dsb2JhbABagwi8WYUgBAGBBBd0gh8BAQQBOhwcBwULCAMOBwMJJQ8FJQMhE4gHBbw5Fo1HJ4EdB4NUA5c3kUGDISqBLA Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 09:55:20 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UeaOE-0000c6-PN; Tue, 21 May 2013 10:25:18 +1000 Date: Tue, 21 May 2013 10:25:18 +1000 From: Dave Chinner To: Ben Myers Cc: Brian Foster , xfs@oss.sgi.com Subject: Re: [PATCH 08/14] xfs: remote attribute allocation may be contiguous Message-ID: <20130521002518.GI24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 08/14] xfs: remote attribute allocation may be contiguous References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-9-git-send-email-david@fromorbit.com> <519A7395.9060806@redhat.com> <20130520220418.GF20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130520220418.GF20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369095922 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 20, 2013 at 05:04:18PM -0500, Ben Myers wrote: > On Mon, May 20, 2013 at 03:03:49PM -0400, Brian Foster wrote: > > On 05/19/2013 07:51 PM, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > When CRCs are enabled, there may be multiple allocations made if the > > > headers cause a length overflow. This, however, does not mean that > > > the number of headers required increases, as the second and > > > subsequent extents may be contiguous with the previous extent. Hence > > > when we map the extents to write the attribute data, we may end up > > > with less extents than allocations made. Hence the assertion that we > > > consume th enumber of headers we calculated in the allocation loop > the > > > > is incorrect and needs to be removed. > > > > > > Signed-off-by: Dave Chinner > > > --- > > > fs/xfs/xfs_attr_remote.c | 6 +++++- > > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > > > index dee8446..aad95b0 100644 > > > --- a/fs/xfs/xfs_attr_remote.c > > > +++ b/fs/xfs/xfs_attr_remote.c > > > @@ -359,6 +359,11 @@ xfs_attr_rmtval_set( > > > * into requiring more blocks. e.g. for 512 byte blocks, we'll > > > * spill for another block every 9 headers we require in this > > > * loop. > > > + * > > > + * Note that this can result in contiguous allocation of blocks, > > > + * so we don't use all the space we allocate for headers as we > > > + * have one less header for each contiguous allocation that > > > + * occurs in the map/write loop below. > > > */ > > > if (crcs && blkcnt == 0) { > > > int total_len; > > > @@ -439,7 +444,6 @@ xfs_attr_rmtval_set( > > > lblkno += map.br_blockcount; > > > } > > > ASSERT(valuelen == 0); > > > - ASSERT(hdrcnt == 0); > > > > I can't say I grok the context enough atm to send a Reviewed-by, but if > > we're removing this, why not just remove the hdrcnt-- a few lines up as > > well? It doesn't appear to be used after the first loop at this point. Yup, I noticed that later on.... > Could also keep a separate variable for each loop and compare them here. The > count for the 2nd loop should always be smaller than for the first... The > assert was worth adding so maybe it is worth fixing too? Either way is fine > with me. Well, I'm not convinced the code is correct yet, anyway. My overnight runs on a 1k block size filesystem (can't use 512 byte block size with 512 byte inodes) tripped over the same assert that I was seeing with 4k block size filesystems and these patches fix. By "not convinced", I mean that I think I've made a mistake in just putting a header at the start of each extent. Call it preamture optimisation, if you want, as it seems like a good idea at the time. The main issue is that we don't know ahead of time how big an attribute is going to be because it will have a variable number of headers, and hence we don't know where the attribute data actually ends from a mapping lookup as there can be trailing contiguous blocks that hold other attribute data. IOWs, I've found that this code is incredibly fragile, difficult to verify and hard to debug. And I'm pretty certain the mapping of trailing blocks is almost impossible to solve sanely. What I'd like to do right now is change this format to have a header per filesystem block. The reason for doing this is that all the unknowns are removed - we have a direct relationship between the attribute data length and the number of blocks needed to store the data (it is always what xfs_attr3_rmt_blocks() returns) and that greatly simplifies all this code. It gets rid of the multiple allocation loop, the complexity of contiguous allocation from multiple loop instances, etc. It does make the parsing/verification of the attribute data a little more complex, but that is a constant rather than the mess I've created right now... The only issue is that it is a change of the on-disk format. I'm happy just to go change it as this is marked experimental, it hasn't reached an initial public release yet and the only people using it are developers and testers using volatile data... I'm going to do this today, based on top of this series - this series allows much more testing to be done, so it should be committed anyway. Yeah, it's a pain, but this code is going to cause us long term problems if we don't fix these problems now... Thoughts? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 20 19:34:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E21DE7F4C for ; Mon, 20 May 2013 19:34:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id CB9AF304032 for ; Mon, 20 May 2013 17:34:06 -0700 (PDT) X-ASG-Debug-ID: 1369096444-04cbb05fe24662b0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id rXUUrvhK4dAGsntj for ; Mon, 20 May 2013 17:34:05 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvgNAHTAmlF5LNn3/2dsb2JhbABagwi8WYUgBAGBBBd0gh8BAQU6HCMQCAMOCgklDwUlAyETiAy8PxaNboEdB4NUA5c3kUGDISo Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 10:03:27 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UeaW6-0000co-Gp; Tue, 21 May 2013 10:33:26 +1000 Date: Tue, 21 May 2013 10:33:26 +1000 From: Dave Chinner To: Josef Bacik Cc: xfs@oss.sgi.com, linux-btrfs@vger.kernel.org Subject: Re: [PATCH] xfstests: btrfs 308: regression test for btrfs send Message-ID: <20130521003326.GJ24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs 308: regression test for btrfs send References: <1369070434-20852-1-git-send-email-jbacik@fusionio.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369070434-20852-1-git-send-email-jbacik@fusionio.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369096444 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 20, 2013 at 01:20:34PM -0400, Josef Bacik wrote: > I'm not sure how the numbering is supposed to work now that we've split > everything out so I'm just going with the next number in the directory. This is > a regression test for btrfs send, we had a problem where we'd try to send a file > that had been deleted in the source snapshot. This is just to make sure we > don't have the same problem in the future. Thanks, You are holding open an unlinked file? You want to use src/multi_open_unlink, then. /* * multi_open_unlink path_prefix num_files sleep_time * e.g. * $ multi_open_unlink file 100 60 * Creates 100 files: file.1, file.2, ..., file.100 * unlinks them all but doesn't close them all until after 60 seconds. */ If you need to hold open existing files, add support for that into multi_open_unlink.c (i.e. allow it to ignore EEXIST when trying to create files). > +# need this so that tail doesn't error out racing with the rm > +sleep 1 > +rm -f $SCRATCH_MNT/foo > +$BTRFS_UTIL_PROG subvol snap -r $SCRATCH_MNT $SCRATCH_MNT/snap1 > /dev/null 2>&1 > +$BTRFS_UTIL_PROG send -f /dev/null -p $SCRATCH_MNT/snap $SCRATCH_MNT/snap1 >/dev/null 2>&1 I'd send this output to $seqres.full, so if the test fails there's debug output to look at... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon May 20 19:36:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 40E0E7F4C for ; Mon, 20 May 2013 19:36:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1C0CA304043 for ; Mon, 20 May 2013 17:36:51 -0700 (PDT) X-ASG-Debug-ID: 1369096608-04cbb05fe34664c0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id OirnsorEtFuAjAx9 for ; Mon, 20 May 2013 17:36:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvgNAHTAmlF5LNn3/2dsb2JhbABSCIMIvFmFIAQBgQQXdIIfAQEFJxMcMwgYDCUPBQ0YAzSHewMOs1kNiFkWjDSBIRmBJINUA5VSgWWKHIIChSODISo Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 10:06:48 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UeaZL-0000dY-KA for xfs@oss.sgi.com; Tue, 21 May 2013 10:36:47 +1000 Date: Tue, 21 May 2013 10:36:47 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 04/14 V2] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Message-ID: <20130521003647.GK24543@dastard> X-ASG-Orig-Subj: [PATCH 04/14 V2] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-5-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369007481-15185-5-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369096608 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email From: Dave Chinner Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner --- V2: fix error handling path that failed to release the dquot. fs/xfs/xfs_qm_syscalls.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..6cdf6ff 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) return 0; - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); - if (error) { - xfs_trans_cancel(tp, 0); - return (error); - } - /* * We don't want to race with a quotaoff so take the quotaoff lock. - * (We don't hold an inode lock, so there's nothing else to stop - * a quotaoff from happening). (XXXThis doesn't currently happen - * because we take the vfslock before calling xfs_qm_sysent). + * We don't hold an inode lock, so there's nothing else to stop + * a quotaoff from happening. */ mutex_lock(&q->qi_quotaofflock); /* - * Get the dquot (locked), and join it to the transaction. - * Allocate the dquot if this doesn't exist. + * Get the dquot (locked) before we start, as we need to do a + * transaction to allocate it if it doesn't exist. Once we have the + * dquot, unlock it so we can start the next transaction safely. We hold + * a reference to the dquot, so it's safe to do this unlock/lock without + * it being reclaimed in the mean time. */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { - xfs_trans_cancel(tp, XFS_TRANS_ABORT); + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); + if (error) { ASSERT(error != ENOENT); goto out_unlock; } + xfs_dqunlock(dqp); + + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), + 0, 0, XFS_DEFAULT_LOG_COUNT); + if (error) { + xfs_trans_cancel(tp, 0); + goto out_rele; + } + + xfs_dqlock(dqp); xfs_trans_dqjoin(tp, dqp); ddq = &dqp->q_core; @@ -621,9 +626,10 @@ xfs_qm_scall_setqlim( xfs_trans_log_dquot(tp, dqp); error = xfs_trans_commit(tp, 0); - xfs_qm_dqrele(dqp); - out_unlock: +out_rele: + xfs_qm_dqrele(dqp); +out_unlock: mutex_unlock(&q->qi_quotaofflock); return error; } From david@fromorbit.com Mon May 20 19:45:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D91E97F37 for ; Mon, 20 May 2013 19:45:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 743EBAC003 for ; Mon, 20 May 2013 17:45:57 -0700 (PDT) X-ASG-Debug-ID: 1369097155-04cb6c10c1103f40001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 5KHUsj97rhNUunGM for ; Mon, 20 May 2013 17:45:55 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvgNALDCmlF5LNn3/2dsb2JhbABZgwi8WYUgBAGBBBd0gh8BAQU6HCMQCAMYCSUPBSUDIROIDLxMFo1ugR0Hg1QDlzeRQYMhKg Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail06.adl6.internode.on.net with ESMTP; 21 May 2013 10:15:55 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ueai9-0000fL-RE; Tue, 21 May 2013 10:45:53 +1000 Date: Tue, 21 May 2013 10:45:53 +1000 From: Dave Chinner To: Itaru Kitayama Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests comma separated group names Message-ID: <20130521004553.GL24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests comma separated group names References: <20130520113045.GB24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369097155 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 20, 2013 at 08:42:35PM +0900, Itaru Kitayama wrote: > Yes, we can do that, but I just thought as you originally proposed last year > > -g rw,attr reads better. Agreed, it does read better and is easily to type. That's what you need to put in the commit message - why it is better than what we currently have, and whether it is badwards compatible or not (doesn't break any existing scripts). i.e. the commit message is for telling people -why- the change should be made as we can look at the code to determine -what- the change is. ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From itaru.kitayama@gmail.com Mon May 20 22:45:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 37B3F7F37 for ; Mon, 20 May 2013 22:45:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CEAECAC003 for ; Mon, 20 May 2013 20:45:33 -0700 (PDT) X-ASG-Debug-ID: 1369107932-04bdf04224478a70001-NocioJ Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by cuda.sgi.com with ESMTP id ypJwj7bsSOGHlJ1B (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 May 2013 20:45:32 -0700 (PDT) X-Barracuda-Envelope-From: itaru.kitayama@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.54 X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.54] Received: by mail-pb0-f54.google.com with SMTP id ro12so173080pbb.13 for ; Mon, 20 May 2013 20:45:32 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.54] X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.54] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=iGC9tx3iEaObm3RF4xeJIa+2FuYJX4+rMR7j/4IuOa8=; b=Ckhwyty6mb+UNg1adRNrrekqvlbTppSX8ONkV18PycVJ7XWBc56CO5/8oQT489IG6t kZw1XfnfJCIyFuiTjHBsnTZrcFv0FakB9f6+nS9svNO0dvqLOdnZxCzFhkMp3eOrvsvA fpQNxiVEkWYP87uE0XwrvkTf5waGXqUHnsR3X3JJy8a/LzQ1JY99e9NvS3EEeDrrxfSM ao9C/jKaXrK9876/sJtpeCMJ2LPEBqhSXCP66nE73z0Q1KycOO8Mi5DqtYoi1a21KXwT rewQNzPt7HxuIQRte0v5hVs2pJ4Smv6KZDlPVKn2ZUy+evev7dZ9w0bTME6kxlcU8J0Y DLAQ== MIME-Version: 1.0 X-Received: by 10.68.202.7 with SMTP id ke7mr605278pbc.82.1369107932218; Mon, 20 May 2013 20:45:32 -0700 (PDT) Received: by 10.70.5.99 with HTTP; Mon, 20 May 2013 20:45:32 -0700 (PDT) In-Reply-To: <20130521004553.GL24543@dastard> References: <20130520113045.GB24543@dastard> <20130521004553.GL24543@dastard> Date: Tue, 21 May 2013 12:45:32 +0900 Message-ID: Subject: Re: [PATCH] xfstests comma separated group names From: Itaru Kitayama X-ASG-Orig-Subj: Re: [PATCH] xfstests comma separated group names To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7b15b079f58dd204dd324721 X-Barracuda-Connect: mail-pb0-f54.google.com[209.85.160.54] X-Barracuda-Start-Time: 1369107932 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131565 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b15b079f58dd204dd324721 Content-Type: text/plain; charset=ISO-8859-1 In the current check script the -g option assumes only one group is given. With this patch, the -g option understands comma separated multiple groups as the argument as well. Existing scripts are not affected by this patch. Reviewed-by: Dave Chinner Signed-off-by: Itaru Kitayama --- check | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/check b/check index a79747e..0e0f208 100755 --- a/check +++ b/check @@ -164,18 +164,19 @@ while [ $# -gt 0 ]; do -nfs) FSTYP=nfs ;; -g) group=$2 ; shift ; - group_list=$(get_group_list $group) - if [ -z "$group_list" ]; then - echo "Group \"$group\" is empty or not defined?" - exit 1 - fi - - [ ! -s $tmp.list ] && touch $tmp.list - for t in $group_list; do - grep -s "^$t\$" $tmp.list >/dev/null || \ - echo "$t" >>$tmp.list + for g in ${group//,/ }; do + group_list=$(get_group_list $g) + if [ -z "$group_list" ]; then + echo "Group \"$g\" is empty or not defined?" + exit 1 + fi + + [ ! -s $tmp.list ] && touch $tmp.list + for t in $group_list; do + grep -s "^$t\$" $tmp.list >/dev/null || \ + echo "$t" >>$tmp + done done - ;; -x) xgroup=$2 ; shift ; On Tue, May 21, 2013 at 9:45 AM, Dave Chinner wrote: > On Mon, May 20, 2013 at 08:42:35PM +0900, Itaru Kitayama wrote: > > Yes, we can do that, but I just thought as you originally proposed last > year > > > > -g rw,attr reads better. > > Agreed, it does read better and is easily to type. > > That's what you need to put in the commit message - why it is better > than what we currently have, and whether it is badwards compatible > or not (doesn't break any existing scripts). i.e. the commit > message is for telling people -why- the change should be made as we > can look at the code to determine -what- the change is. ;) > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > --047d7b15b079f58dd204dd324721 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
In the current check script the -g option assumes only one group is given.= With this patch, the -g option=A0
understands comma separated multiple groups as the argument as well. Existi= ng scripts are not affected=A0
by this patch.=A0

Review= ed-by: Dave Chinner <david@redhat.co= m>
S= igned-off-by: Itaru Kitayama <itaru.kitayama@gmail.com>

---

=A0check | =A0 23 ++++++++++++-----------
=A01 file changed, 12 insertions(+), 11 dele= tions(-)
diff --git a/che= ck b/check
= index a79747e..0e0f208 100755
--- a/check
+++ b/check
@@ -164,18 +164,19 @@ while [ $# -gt 0 ]; do
=A0 =A0 =A0 =A0 -nfs) =A0 FSTYP=3Dnfs ;;
=A0
=A0 =A0 =A0 =A0 -g) =A0 =A0 group=3D$2 ; shift ;
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 group_list=3D$(get_group_list $group)
- =A0 =A0 =A0 =A0 = =A0 =A0 =A0 if [ -z "$group_list" ]; then
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "Group \"$group\"= is empty or not defined?"
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 exit 1
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 fi
-
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 [ ! -s $tmp.list ] && to= uch $tmp.list
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 for t in $group_list; do
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 grep -s "^$t\$" $tmp.list >/dev/null || \
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "$t" >>$tmp.list
+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 for g in ${group//,/ }; do
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 group_list=3D$(get_group_list= $g)
+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if [ -z "$group_list" ]; = then
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "Group \"$g\&q= uot; is empty or not defined?"
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 exit= 1
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 fi
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0=A0
+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 [ ! -s $tmp.list ] && touch $tmp.li= st
+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for t in $group_list; do
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 grep -s "^$t\$" $tmp.list >/d= ev/null || \
+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 echo "$t" >>$tmp
=
+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 done
=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 done
-
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ;;
=A0
=A0 =A0 =A0 =A0 -x) =A0= =A0 xgroup=3D$2 ; shift ;


On Tue, May 21, 2013 at 9:45 AM, Dave Chinner <david@fromorbit.com&g= t; wrote:
On Mon, May 20, 2013 at 08:42:35PM +0900, Itaru Kitayama = wrote:
> Yes, we can do that, but I just thought as you originally proposed las= t year
>
> -g rw,attr reads better.

Agreed, it does read better and is easily to type.

That's what you need to put in the commit message - why it is better than what we currently have, and whether it is badwards compatible
or not (doesn't break any existing scripts). i.e. the commit
message is for telling people -why- the change should be made as we
can look at the code to determine -what- the change is. =A0;)

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com

--047d7b15b079f58dd204dd324721-- From david@fromorbit.com Tue May 21 00:21:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 516C829DF8 for ; Tue, 21 May 2013 00:21:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3A908304032 for ; Mon, 20 May 2013 22:21:24 -0700 (PDT) X-ASG-Debug-ID: 1369113682-04cb6c10b8111840001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Kah7ZrG2ODiRWmnK for ; Mon, 20 May 2013 22:21:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah8OAB0Dm1F5LNn3/2dsb2JhbABZgwi8WoUgBAGBCBd0gh8BAQQBOhwjBQsIAxgJJQ8FDRgDIROHewMJBbMeDYhZFow0gRUlgR0Hg1QDlVKBZYwehSODISqBNQ Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 14:51:21 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uef0h-00019D-0b; Tue, 21 May 2013 15:21:19 +1000 Date: Tue, 21 May 2013 15:21:18 +1000 From: Dave Chinner To: Itaru Kitayama Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests comma separated group names Message-ID: <20130521052118.GM24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests comma separated group names References: <20130520113045.GB24543@dastard> <20130521004553.GL24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369113682 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131573 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 12:45:32PM +0900, Itaru Kitayama wrote: > In the current check script the -g option assumes only one group is given. > With this patch, the -g option > understands comma separated multiple groups as the argument as well. > Existing scripts are not affected > by this patch. > > Reviewed-by: Dave Chinner No, I didn't. A comment on a patch is not a review. The only time you should add tags like this is if you receive them in email from the person in question. Once I've actaully done a review of the code, I'll respond with such a tag. See Documentation/SubmittingPatches for more information about what the reviewed-by tag actually means... > Signed-off-by: Itaru Kitayama > > --- > > check | 23 ++++++++++++----------- > 1 file changed, 12 insertions(+), 11 deletions(-) > > diff --git a/check b/check > index a79747e..0e0f208 100755 > --- a/check > +++ b/check > @@ -164,18 +164,19 @@ while [ $# -gt 0 ]; do > -nfs) FSTYP=nfs ;; > > -g) group=$2 ; shift ; > - group_list=$(get_group_list $group) > - if [ -z "$group_list" ]; then > - echo "Group \"$group\" is empty or not defined?" > - exit 1 > - fi > - > - [ ! -s $tmp.list ] && touch $tmp.list > - for t in $group_list; do > - grep -s "^$t\$" $tmp.list >/dev/null || \ > - echo "$t" > >>$tmp.list There's a whitespace and wrapping problem with your mailer. it's converting all tabs to spaces, and it's wrapping long lines in the patch. Please see Documentation/email-clients.txt for help to set your mailer up properly. Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Tue May 21 03:02:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2965029DF8 for ; Tue, 21 May 2013 03:02:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 172D98F8039 for ; Tue, 21 May 2013 01:02:27 -0700 (PDT) X-ASG-Debug-ID: 1369123342-04cb6c10c1119af0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 9D22blVP4u9Yygql for ; Tue, 21 May 2013 01:02:22 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgxOQMbGYgMu32OBIE6gz4DqHiDISqBLiQ Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:21 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWW-0001SG-NU; Tue, 21 May 2013 18:02:20 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002Wi-Jt; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write Date: Tue, 21 May 2013 18:02:07 +1000 X-ASG-Orig-Subj: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write Message-Id: <1369123330-9579-9-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123342 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner We write the superblock every 30s or so which results in the verifier being called. Right now that results in this output every 30s: XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! Use of these features in this kernel is at your own risk! And spamming the logs. Stop this output from occurring on superblock writes. Signed-off-by: Dave Chinner --- fs/xfs/xfs_mount.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd7..e8e310c 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -314,7 +314,8 @@ STATIC int xfs_mount_validate_sb( xfs_mount_t *mp, xfs_sb_t *sbp, - bool check_inprogress) + bool check_inprogress, + bool check_version) { /* @@ -337,9 +338,10 @@ xfs_mount_validate_sb( /* * Version 5 superblock feature mask validation. Reject combinations the - * kernel cannot support up front before checking anything else. + * kernel cannot support up front before checking anything else. For + * write validation, we don't need to check feature masks. */ - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { xfs_alert(mp, "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" "Use of these features in this kernel is at your own risk!"); @@ -675,7 +677,8 @@ xfs_sb_to_disk( static int xfs_sb_verify( - struct xfs_buf *bp) + struct xfs_buf *bp, + bool check_version) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_sb sb; @@ -686,7 +689,8 @@ xfs_sb_verify( * Only check the in progress field for the primary superblock as * mkfs.xfs doesn't clear it from secondary superblocks. */ - return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); + return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR, + check_version); } /* @@ -719,7 +723,7 @@ xfs_sb_read_verify( goto out_error; } } - error = xfs_sb_verify(bp); + error = xfs_sb_verify(bp, true); out_error: if (error) { @@ -758,7 +762,7 @@ xfs_sb_write_verify( struct xfs_buf_log_item *bip = bp->b_fspriv; int error; - error = xfs_sb_verify(bp); + error = xfs_sb_verify(bp, false); if (error) { XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); xfs_buf_ioerror(bp, error); -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0E88429E06 for ; Tue, 21 May 2013 03:02:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E0E3B30404E for ; Tue, 21 May 2013 01:02:34 -0700 (PDT) X-ASG-Debug-ID: 1369123351-04cb6c10c2119b10001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 4uwvUHEyjklfBOAg for ; Tue, 21 May 2013 01:02:33 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQVWIxAIGDE5AxsZiAy7fY1dJ4E6gz4DnVaLIoMhKoEs Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWg-0001S4-Ga; Tue, 21 May 2013 18:02:30 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002WF-Dr; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 02/11] xfs: remote attribute allocation may be contiguous Date: Tue, 21 May 2013 18:02:01 +1000 X-ASG-Orig-Subj: [PATCH 02/11] xfs: remote attribute allocation may be contiguous Message-Id: <1369123330-9579-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123351 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When CRCs are enabled, there may be multiple allocations made if the headers cause a length overflow. This, however, does not mean that the number of headers required increases, as the second and subsequent extents may be contiguous with the previous extent. Hence when we map the extents to write the attribute data, we may end up with less extents than allocations made. Hence the assertion that we consume th enumber of headers we calculated in the allocation loop is incorrect and needs to be removed. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index dee8446..aad95b0 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -359,6 +359,11 @@ xfs_attr_rmtval_set( * into requiring more blocks. e.g. for 512 byte blocks, we'll * spill for another block every 9 headers we require in this * loop. + * + * Note that this can result in contiguous allocation of blocks, + * so we don't use all the space we allocate for headers as we + * have one less header for each contiguous allocation that + * occurs in the map/write loop below. */ if (crcs && blkcnt == 0) { int total_len; @@ -439,7 +444,6 @@ xfs_attr_rmtval_set( lblkno += map.br_blockcount; } ASSERT(valuelen == 0); - ASSERT(hdrcnt == 0); return 0; } -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C63A029E06 for ; Tue, 21 May 2013 03:02:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id B259E304043 for ; Tue, 21 May 2013 01:02:35 -0700 (PDT) X-ASG-Debug-ID: 1369123342-04cb6c10c1119af0003-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 4mCLtl2T5cgfDKtW for ; Tue, 21 May 2013 01:02:34 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABRCIMIwXoEgQsXdIIfAQEFJy8jEAgYMSEYAxsZh3sDDrMXDYhZjEqBIRmEeAOVUowBggKFI4MhKg Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWW-0001S3-GL; Tue, 21 May 2013 18:02:20 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002WB-Bx; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 01/11] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Date: Tue, 21 May 2013 18:02:00 +1000 X-ASG-Orig-Subj: [PATCH 01/11] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Message-Id: <1369123330-9579-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123353 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email From: Dave Chinner Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner --- fs/xfs/xfs_qm_syscalls.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index c41190c..6cdf6ff 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) return 0; - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), - 0, 0, XFS_DEFAULT_LOG_COUNT); - if (error) { - xfs_trans_cancel(tp, 0); - return (error); - } - /* * We don't want to race with a quotaoff so take the quotaoff lock. - * (We don't hold an inode lock, so there's nothing else to stop - * a quotaoff from happening). (XXXThis doesn't currently happen - * because we take the vfslock before calling xfs_qm_sysent). + * We don't hold an inode lock, so there's nothing else to stop + * a quotaoff from happening. */ mutex_lock(&q->qi_quotaofflock); /* - * Get the dquot (locked), and join it to the transaction. - * Allocate the dquot if this doesn't exist. + * Get the dquot (locked) before we start, as we need to do a + * transaction to allocate it if it doesn't exist. Once we have the + * dquot, unlock it so we can start the next transaction safely. We hold + * a reference to the dquot, so it's safe to do this unlock/lock without + * it being reclaimed in the mean time. */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { - xfs_trans_cancel(tp, XFS_TRANS_ABORT); + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); + if (error) { ASSERT(error != ENOENT); goto out_unlock; } + xfs_dqunlock(dqp); + + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), + 0, 0, XFS_DEFAULT_LOG_COUNT); + if (error) { + xfs_trans_cancel(tp, 0); + goto out_rele; + } + + xfs_dqlock(dqp); xfs_trans_dqjoin(tp, dqp); ddq = &dqp->q_core; @@ -621,9 +626,10 @@ xfs_qm_scall_setqlim( xfs_trans_log_dquot(tp, dqp); error = xfs_trans_commit(tp, 0); - xfs_qm_dqrele(dqp); - out_unlock: +out_rele: + xfs_qm_dqrele(dqp); +out_unlock: mutex_unlock(&q->qi_quotaofflock); return error; } -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AB51B29E07 for ; Tue, 21 May 2013 03:02:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 734B5304043 for ; Tue, 21 May 2013 01:02:36 -0700 (PDT) X-ASG-Debug-ID: 1369123351-04cb6c10c2119b10002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id CXu0C5Vcp0IlmHMq for ; Tue, 21 May 2013 01:02:34 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgYGTkDGxmIDLt9jgSBLgyDPgOoeIMhKg Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWW-0001S5-IZ; Tue, 21 May 2013 18:02:20 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002WK-F5; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 03/11] xfs: remote attribute read too short Date: Tue, 21 May 2013 18:02:02 +1000 X-ASG-Orig-Subj: [PATCH 03/11] xfs: remote attribute read too short Message-Id: <1369123330-9579-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123354 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Reading a maximally size remote attribute fails when CRCs are enabled with this verification error: XFS (vdb): remote attribute header does not match required off/len/owner) There are two reasons for this, the first being that the length of the buffer being read is determined from the args->rmtblkcnt which doesn't take into account CRC headers. Hence the mapped length ends up being too short and so we need to calculate it directly from the value length. The second is that the byte count of valid data within a buffer is capped by the length of the data and so doesn't take into account that the buffer might be longer due to headers. Hence we need to calculate the data space in the buffer first before calculating the actual byte count of data. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index aad95b0..bcdc07c 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -52,9 +52,11 @@ xfs_attr3_rmt_blocks( struct xfs_mount *mp, int attrlen) { - int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, - mp->m_sb.sb_blocksize); - return (attrlen + buflen - 1) / buflen; + if (xfs_sb_version_hascrc(&mp->m_sb)) { + int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); + return (attrlen + buflen - 1) / buflen; + } + return XFS_B_TO_FSB(mp, attrlen); } static bool @@ -206,8 +208,9 @@ xfs_attr_rmtval_get( while (valuelen > 0) { nmap = ATTR_RMTVALUE_MAPSIZE; + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, map, &nmap, + blkcnt, map, &nmap, XFS_BMAPI_ATTRFORK); if (error) return error; @@ -227,8 +230,8 @@ xfs_attr_rmtval_get( if (error) return error; - byte_cnt = min_t(int, valuelen, BBTOB(bp->b_length)); - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); + byte_cnt = min_t(int, valuelen, byte_cnt); src = bp->b_addr; if (xfs_sb_version_hascrc(&mp->m_sb)) { -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2A01229E0D for ; Tue, 21 May 2013 03:02:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 16FD9304053 for ; Tue, 21 May 2013 01:02:37 -0700 (PDT) X-ASG-Debug-ID: 1369123353-04cbb05fe347d1d0002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id uFohnFtKmV4zTbAE for ; Tue, 21 May 2013 01:02:35 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgxOQMbGYgMu32OBIR4A5NnjWyHJYMhKoEsJA Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWg-0001SD-MR; Tue, 21 May 2013 18:02:30 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002Wd-Iv; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 07/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Date: Tue, 21 May 2013 18:02:06 +1000 X-ASG-Orig-Subj: [PATCH 07/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Message-Id: <1369123330-9579-8-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123355 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_attr3_leaf_compact() uses a temporary buffer for compacting the the entries in a leaf. It copies the the original buffer into the temporary buffer, then zeros the original buffer completely. It then copies the entries back into the original buffer. However, the original buffer has not been correctly initialised, and so the movement of the entries goes horribly wrong. Make sure the zeroed destination buffer is fully initialised, and once we've set up the destination incore header appropriately, write is back to the buffer before starting to move entries around. While debugging this, the _d/_s prefixes weren't sufficient to remind me what buffer was what, so rename then all _src/_dst. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 79ece72..5b03d15 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -1445,11 +1445,12 @@ xfs_attr3_leaf_add_work( STATIC void xfs_attr3_leaf_compact( struct xfs_da_args *args, - struct xfs_attr3_icleaf_hdr *ichdr_d, + struct xfs_attr3_icleaf_hdr *ichdr_dst, struct xfs_buf *bp) { - xfs_attr_leafblock_t *leaf_s, *leaf_d; - struct xfs_attr3_icleaf_hdr ichdr_s; + struct xfs_attr_leafblock *leaf_src; + struct xfs_attr_leafblock *leaf_dst; + struct xfs_attr3_icleaf_hdr ichdr_src; struct xfs_trans *trans = args->trans; struct xfs_mount *mp = trans->t_mountp; char *tmpbuffer; @@ -1457,29 +1458,38 @@ xfs_attr3_leaf_compact( trace_xfs_attr_leaf_compact(args); tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); - ASSERT(tmpbuffer != NULL); memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); memset(bp->b_addr, 0, XFS_LBSIZE(mp)); + leaf_src = (xfs_attr_leafblock_t *)tmpbuffer; + leaf_dst = bp->b_addr; /* - * Copy basic information + * Copy the on-disk header back into the destination buffer to ensure + * all the information in the header that is not part of the incore + * header structure is preserved. */ - leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; - leaf_d = bp->b_addr; - ichdr_s = *ichdr_d; /* struct copy */ - ichdr_d->firstused = XFS_LBSIZE(mp); - ichdr_d->usedbytes = 0; - ichdr_d->count = 0; - ichdr_d->holes = 0; - ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); - ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; + memcpy(bp->b_addr, tmpbuffer, xfs_attr3_leaf_hdr_size(leaf_src)); + + /* Initialise the incore headers */ + ichdr_src = *ichdr_dst; /* struct copy */ + ichdr_dst->firstused = XFS_LBSIZE(mp); + ichdr_dst->usedbytes = 0; + ichdr_dst->count = 0; + ichdr_dst->holes = 0; + ichdr_dst->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_src); + ichdr_dst->freemap[0].size = ichdr_dst->firstused - + ichdr_dst->freemap[0].base; + + + /* write the header back to initialise the underlying buffer */ + xfs_attr3_leaf_hdr_to_disk(leaf_dst, ichdr_dst); /* * Copy all entry's in the same (sorted) order, * but allocate name/value pairs packed and in sequence. */ - xfs_attr3_leaf_moveents(leaf_s, &ichdr_s, 0, leaf_d, ichdr_d, 0, - ichdr_s.count, mp); + xfs_attr3_leaf_moveents(leaf_src, &ichdr_src, 0, leaf_dst, ichdr_dst, 0, + ichdr_src.count, mp); /* * this logs the entire buffer, but the caller must write the header * back to the buffer when it is finished modifying it. -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5904329E0E for ; Tue, 21 May 2013 03:02:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 38F408F8039 for ; Tue, 21 May 2013 01:02:37 -0700 (PDT) X-ASG-Debug-ID: 1369123342-04cb6c10c1119af0004-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id ILpbaPiF3ho0qqi5 for ; Tue, 21 May 2013 01:02:35 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgxOQMbGYgMu32OBIE6gz4DoVOHJYMhKoEsJA Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWW-0001SB-LW; Tue, 21 May 2013 18:02:20 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002WZ-Hx; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 06/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Date: Tue, 21 May 2013 18:02:05 +1000 X-ASG-Orig-Subj: [PATCH 06/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Message-Id: <1369123330-9579-7-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123355 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining the entries in two leaves when the destination leaf requires compaction. The temporary buffer ends up being copied back over the original destination buffer, so the header in the temporary buffer needs to contain all the information that is in the destination buffer. To make sure the temporary buffer is fully initialised, once we've set up the temporary incore header appropriately, write is back to the temporary buffer before starting to move entries around. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 0bce1b3..79ece72 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -2181,14 +2181,24 @@ xfs_attr3_leaf_unbalance( struct xfs_attr_leafblock *tmp_leaf; struct xfs_attr3_icleaf_hdr tmphdr; - tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); - memset(tmp_leaf, 0, state->blocksize); - memset(&tmphdr, 0, sizeof(tmphdr)); + tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP); + + /* + * Copy the header into the temp leaf so that all the stuff + * not in the incore header is present and gets copied back in + * once we've moved all the entries. + */ + memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf)); + memset(&tmphdr, 0, sizeof(tmphdr)); tmphdr.magic = savehdr.magic; tmphdr.forw = savehdr.forw; tmphdr.back = savehdr.back; tmphdr.firstused = state->blocksize; + + /* write the header to the temp buffer to initialise it */ + xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr); + if (xfs_attr3_leaf_order(save_blk->bp, &savehdr, drop_blk->bp, &drophdr)) { xfs_attr3_leaf_moveents(drop_leaf, &drophdr, 0, -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 99B7829E06 for ; Tue, 21 May 2013 03:02:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 19719AC002 for ; Tue, 21 May 2013 01:02:35 -0700 (PDT) X-ASG-Debug-ID: 1369123353-04cbb05fe347d1d0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id utkg1rL85ZwU9oxX for ; Tue, 21 May 2013 01:02:34 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgxOQMbGYgMu32OBIE6gz4DnVaLIoMhKg Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWg-0001SA-JH; Tue, 21 May 2013 18:02:30 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002WU-H1; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 05/11] xfs: correctly map remote attr buffers during removal Date: Tue, 21 May 2013 18:02:04 +1000 X-ASG-Orig-Subj: [PATCH 05/11] xfs: correctly map remote attr buffers during removal Message-Id: <1369123330-9579-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123353 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner If we don't map the buffers correctly (same as for get/set operations) then the incore buffer lookup will fail. If a block number matches but a length is wrong, then debug kernels will ASSERT fail in _xfs_buf_find() due to the length mismatch. Ensure that we map the buffers correctly by basing the length of the buffer on the attribute data length rather than the remote block count. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index e207bf0..d8bcb2d 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -468,19 +468,25 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) mp = args->dp->i_mount; /* - * Roll through the "value", invalidating the attribute value's - * blocks. + * Roll through the "value", invalidating the attribute value's blocks. + * Note that args->rmtblkcnt is the minimum number of data blocks we'll + * see for a CRC enabled remote attribute. Each extent will have a + * header, and so we may have more blocks than we realise here. If we + * fail to map the blocks correctly, we'll have problems with the buffer + * lookups. */ lblkno = args->rmtblkno; - valuelen = args->rmtblkcnt; + valuelen = args->valuelen; + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); while (valuelen > 0) { + int dblkcnt; + /* * Try to remember where we decided to put the value. */ nmap = 1; error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, &map, &nmap, - XFS_BMAPI_ATTRFORK); + blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); if (error) return(error); ASSERT(nmap == 1); @@ -488,28 +494,31 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) (map.br_startblock != HOLESTARTBLOCK)); dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); + dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); /* * If the "remote" value is in the cache, remove it. */ - bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK); + bp = xfs_incore(mp->m_ddev_targp, dblkno, dblkcnt, XBF_TRYLOCK); if (bp) { xfs_buf_stale(bp); xfs_buf_relse(bp); bp = NULL; } - valuelen -= map.br_blockcount; + valuelen -= XFS_ATTR3_RMT_BUF_SPACE(mp, + XFS_FSB_TO_B(mp, map.br_blockcount)); lblkno += map.br_blockcount; + blkcnt -= map.br_blockcount; + blkcnt = max(blkcnt, xfs_attr3_rmt_blocks(mp, valuelen)); } /* * Keep de-allocating extents until the remote-value region is gone. */ + blkcnt = lblkno - args->rmtblkno; lblkno = args->rmtblkno; - blkcnt = args->rmtblkcnt; done = 0; while (!done) { xfs_bmap_init(args->flist, args->firstblock); -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id F37D729E10 for ; Tue, 21 May 2013 03:02:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 819C7AC002 for ; Tue, 21 May 2013 01:02:34 -0700 (PDT) X-ASG-Debug-ID: 1369123342-04cb6c10c1119af0002-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id lwBqdHNilrmiCGN7 for ; Tue, 21 May 2013 01:02:31 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gnwjGIECA4hAu32NahqBOoM+A6h4gyEqgS0 Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWW-0001S2-FM; Tue, 21 May 2013 18:02:20 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002W8-Aj; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 00/11] xfs: fixes for 3.10-rc3 Date: Tue, 21 May 2013 18:01:59 +1000 X-ASG-Orig-Subj: [PATCH 00/11] xfs: fixes for 3.10-rc3 Message-Id: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123346 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Ben, This is my current kernel bug fix patch series. I've updated it against a current xfsdev tree, and contains all the fixes mentioned in the "fixes for 3.10-rc2 (updated)" thread. The first 7 patches are patches from that series. The last 4 are new patches. The first new patch stops CRC enabled filesystems from spamming the log. It currently emits an "Experimental" warning ever time the superblock is written, which is typically every 30s. The second path ("rework remote attr CRCs") is the changes I mentioned in the "fixes for 3.10-rc2 (updated)" thread. The code is far more robust as a result of these changes, and I think we really need to change the format as done in this patch. Once we have decided on the way forward, I'll port this to userspace. The third patch fixes a remote symlink problem - I didn't hit this until I'd redone the remote attr CRCs and the 1k block size filesystem testing made it passed the attribute tests it was failing on. Finally, the last patch is another on-disk format change - one that removes the 25 entry limit on ACLs. It doesn't invalidate anything that is already on disk, just allows ACLs on v5 superblock filesystems to store more than 25 ACLs in an xattr. In fact, it allows (65536 - 4) / 12 = 5461 entries to be stored in a single ACL, so I don't see anyone running out on v5 superblocks.... Thoughts, comments? Dave. From dave@fromorbit.com Tue May 21 03:02:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BED0829E17 for ; Tue, 21 May 2013 03:02:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id AB20D8F8049 for ; Tue, 21 May 2013 01:02:40 -0700 (PDT) X-ASG-Debug-ID: 1369123351-04cb6c10c2119b10004-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id OinyaWjEv0sKcCb7 for ; Tue, 21 May 2013 01:02:39 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgYGTkDGxmIDLt9jgSBLgyDPgOdVosigyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:39 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWg-0001SJ-OZ; Tue, 21 May 2013 18:02:30 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002Ws-M8; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 10/11] xfs: fix incorrect remote symlink block count Date: Tue, 21 May 2013 18:02:09 +1000 X-ASG-Orig-Subj: [PATCH 10/11] xfs: fix incorrect remote symlink block count Message-Id: <1369123330-9579-11-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123358 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When CRCs are enabled, the number of blocks needed to hold a remote symlink on a 1k block size filesystem may be 2 instead of 1. The transaction reservation for the allocated bloks was not taking this into account and only allocating one block. hence when trying to read or invalidate such symlinks, we are mapping a hole where there should be a block and things go bad at that point. Fix the reservation to use the correct block count, clean up the block count calculation similar to the remote attribute calculation, and add a debug guard to detect when we don't write the entire symlink to disk. Signed-off-by: Dave Chinner --- fs/xfs/xfs_symlink.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 5f234389..195a403 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c @@ -56,16 +56,9 @@ xfs_symlink_blocks( struct xfs_mount *mp, int pathlen) { - int fsblocks = 0; - int len = pathlen; + int buflen = XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); - do { - fsblocks++; - len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); - } while (len > 0); - - ASSERT(fsblocks <= XFS_SYMLINK_MAPS); - return fsblocks; + return (pathlen + buflen - 1) / buflen; } static int @@ -405,7 +398,7 @@ xfs_symlink( if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) fs_blocks = 0; else - fs_blocks = XFS_B_TO_FSB(mp, pathlen); + fs_blocks = xfs_symlink_blocks(mp, pathlen); resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); @@ -512,7 +505,7 @@ xfs_symlink( cur_chunk = target_path; offset = 0; for (n = 0; n < nmaps; n++) { - char *buf; + char *buf; d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); @@ -525,9 +518,7 @@ xfs_symlink( bp->b_ops = &xfs_symlink_buf_ops; byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); - if (pathlen < byte_cnt) { - byte_cnt = pathlen; - } + byte_cnt = min(byte_cnt, pathlen); buf = bp->b_addr; buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, @@ -542,6 +533,7 @@ xfs_symlink( xfs_trans_log_buf(tp, bp, 0, (buf + byte_cnt - 1) - (char *)bp->b_addr); } + ASSERT(pathlen == 0); } /* -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4451C29E06 for ; Tue, 21 May 2013 03:02:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 322D8304032 for ; Tue, 21 May 2013 01:02:43 -0700 (PDT) X-ASG-Debug-ID: 1369123351-04cb6c10c2119b10005-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id JXI1bCiIW2AOmaWX for ; Tue, 21 May 2013 01:02:41 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUnLyMQCBgYGTkDGxmIDLt9jgSBLoNKA6h4gyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:41 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWg-0001SR-KL; Tue, 21 May 2013 18:02:30 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002WP-G4; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 04/11] xfs: remote attribute tail zeroing does too much Date: Tue, 21 May 2013 18:02:03 +1000 X-ASG-Orig-Subj: [PATCH 04/11] xfs: remote attribute tail zeroing does too much Message-Id: <1369123330-9579-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123360 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When an attribute data does not fill then entire remote block, we zero the remaining part of the buffer. This, however, needs to take into account that the buffer has a header, and so the offset where zeroing starts and the length of zeroing need to take this into account. Otherwise we end up with zeros over the end of the attribute value when CRCs are enabled. While there, make sure we only ask to map an extent that covers the remaining range of the attribute, rather than asking every time for the full length of remote data. If the remote attribute blocks are contiguous with other parts of the attribute tree, it will map those blocks as well and we can potentially zero them incorrectly. We can also get buffer size mistmatches when trying to read or remove the remote attribute, and this can lead to not finding the correct buffer when looking it up in cache. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_remote.c | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index bcdc07c..e207bf0 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -296,10 +296,7 @@ xfs_attr_rmtval_set( * and we may not need that many, so we have to handle this when * allocating the blocks below. */ - if (!crcs) - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); - else - blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); + blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, XFS_ATTR_FORK); @@ -394,8 +391,11 @@ xfs_attr_rmtval_set( */ lblkno = args->rmtblkno; valuelen = args->valuelen; + blkcnt = args->rmtblkcnt; while (valuelen > 0) { int byte_cnt; + int hdr_size; + int dblkcnt; char *buf; /* @@ -404,7 +404,7 @@ xfs_attr_rmtval_set( xfs_bmap_init(args->flist, args->firstblock); nmap = 1; error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, - args->rmtblkcnt, &map, &nmap, + blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); if (error) return(error); @@ -413,26 +413,25 @@ xfs_attr_rmtval_set( (map.br_startblock != HOLESTARTBLOCK)); dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); + dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); - bp = xfs_buf_get(mp->m_ddev_targp, dblkno, blkcnt, 0); + bp = xfs_buf_get(mp->m_ddev_targp, dblkno, dblkcnt, 0); if (!bp) return ENOMEM; bp->b_ops = &xfs_attr3_rmt_buf_ops; - - byte_cnt = BBTOB(bp->b_length); - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); - if (valuelen < byte_cnt) - byte_cnt = valuelen; - buf = bp->b_addr; - buf += xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, + + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); + byte_cnt = min_t(int, valuelen, byte_cnt); + hdr_size = xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, byte_cnt, bp); - memcpy(buf, src, byte_cnt); + ASSERT(hdr_size + byte_cnt <= BBTOB(bp->b_length)); - if (byte_cnt < BBTOB(bp->b_length)) - xfs_buf_zero(bp, byte_cnt, - BBTOB(bp->b_length) - byte_cnt); + memcpy(buf + hdr_size, src, byte_cnt); + + if (byte_cnt + hdr_size < BBTOB(bp->b_length)) + xfs_buf_zero(bp, byte_cnt + hdr_size, + BBTOB(bp->b_length) - byte_cnt - hdr_size); error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ xfs_buf_relse(bp); @@ -442,9 +441,9 @@ xfs_attr_rmtval_set( src += byte_cnt; valuelen -= byte_cnt; offset += byte_cnt; - hdrcnt--; lblkno += map.br_blockcount; + blkcnt -= map.br_blockcount; } ASSERT(valuelen == 0); return 0; -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 899BE29E07 for ; Tue, 21 May 2013 03:02:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 753158F8039 for ; Tue, 21 May 2013 01:02:39 -0700 (PDT) X-ASG-Debug-ID: 1369123351-04cb6c10c2119b10003-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 7cfocipgT7UDe8Sm for ; Tue, 21 May 2013 01:02:36 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLAB4pm1F5LNn3/2dsb2JhbABZgwjBegSBCxd0gh8BAQUaDS8cBxAIGBgZOQMbGYgMu32OBIEug0oDqHiDISo Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:33 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWg-0001SZ-PX; Tue, 21 May 2013 18:02:30 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002Wn-L6; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 09/11] xfs: rework remote attr CRCs Date: Tue, 21 May 2013 18:02:08 +1000 X-ASG-Orig-Subj: [PATCH 09/11] xfs: rework remote attr CRCs Message-Id: <1369123330-9579-10-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123355 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Note: this changes the on-disk remote attribute format. I assert that this is OK to do as CRCs are marked experimental and the first kernel it is included in has not yet reached release yet. Further, the userspace utilities are still evolving and so anyone using this stuff right now is a developer or tester using volatile filesystems for testing this feature. Hence changing the format right now to save longer term pain is the right thing to do. The fundamental change is to move from a header per extent in the attribute to a header per filesytem block in the attribute. This means there are more header blocks and the parsing of the attribute data is slightly more complex, but it has the advantage that we always know the size of the attribute on disk based on the length of the data it contains. This is where the header-per-extent method has problems. We don't know the size of the attribute on disk without first knowing how many extents are used to hold it. And we can't tell from a mapping lookup, either, because remote attributes can be allocated contiguously with other attribute blocks and so there is no obvious way of determining the actual size of the atribute on disk short of walking and mapping buffers. The problem with this approach is that if we map a buffer incorrectly (e.g. we make the last buffer for the attribute data too long), we then get buffer cache lookup failure when we map it correctly. i.e. we get a size mismatch on lookup. This is not necessarily fatal, but it's a cache coherency problem that can lead to returning the wrong data to userspace or writing the wrong data to disk. And debug kernels will assert fail if this occurs. I found lots of niggly little problems trying to fix this issue on a 4k block size filesystem, finally getting it to pass with lots of fixes. The thing is, 1024 byte filesystems still failed, and it was getting really complex handling all the corner cases that were showing up. And there were clearly more that I hadn't found yet. It is complex, fragile code, and if we don't fix it now, it will be complex, fragile code forever more. Hence the simple fix is to add a header to each filesystem block. This gives us the same relationship between the attribute data length and the number of blocks on disk as we have without CRCs - it's a linear mapping and doesn't require us to guess anything. It is simple to implement, too - the remote block count calculated at lookup time can be used by the remote attribute set/get/remove code without modification for both CRC and non-CRC filesystems. The world becomes sane again. Because the copy-in and copy-out now need to iterate over each filesystem block, I moved them into helper functions so we separate the block mapping and buffer manupulations from the attribute data and CRC header manipulations. The code becomes much clearer as a result, and it is a lot easier to understand and debug. It also appears to be much more robust - once it worked on 4k block size filesystems, it has worked without failure on 1k block size filesystems, too. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 13 +- fs/xfs/xfs_attr_remote.c | 381 +++++++++++++++++++++++++++------------------- fs/xfs/xfs_attr_remote.h | 10 ++ fs/xfs/xfs_buf.c | 1 + 4 files changed, 247 insertions(+), 158 deletions(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 5b03d15..d788302 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -1412,7 +1412,7 @@ xfs_attr3_leaf_add_work( name_rmt->valuelen = 0; name_rmt->valueblk = 0; args->rmtblkno = 1; - args->rmtblkcnt = XFS_B_TO_FSB(mp, args->valuelen); + args->rmtblkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); } xfs_trans_log_buf(args->trans, bp, XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), @@ -2354,8 +2354,9 @@ xfs_attr3_leaf_lookup_int( args->index = probe; args->valuelen = be32_to_cpu(name_rmt->valuelen); args->rmtblkno = be32_to_cpu(name_rmt->valueblk); - args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, - args->valuelen); + args->rmtblkcnt = xfs_attr3_rmt_blocks( + args->dp->i_mount, + args->valuelen); return XFS_ERROR(EEXIST); } } @@ -2406,7 +2407,8 @@ xfs_attr3_leaf_getvalue( ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0); valuelen = be32_to_cpu(name_rmt->valuelen); args->rmtblkno = be32_to_cpu(name_rmt->valueblk); - args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, valuelen); + args->rmtblkcnt = xfs_attr3_rmt_blocks(args->dp->i_mount, + valuelen); if (args->flags & ATTR_KERNOVAL) { args->valuelen = valuelen; return 0; @@ -2732,7 +2734,8 @@ xfs_attr3_leaf_list_int( args.valuelen = valuelen; args.value = kmem_alloc(valuelen, KM_SLEEP | KM_NOFS); args.rmtblkno = be32_to_cpu(name_rmt->valueblk); - args.rmtblkcnt = XFS_B_TO_FSB(args.dp->i_mount, valuelen); + args.rmtblkcnt = xfs_attr3_rmt_blocks( + args.dp->i_mount, valuelen); retval = xfs_attr_rmtval_get(&args); if (retval) return retval; diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c index d8bcb2d..ef6b0c1 100644 --- a/fs/xfs/xfs_attr_remote.c +++ b/fs/xfs/xfs_attr_remote.c @@ -47,7 +47,7 @@ * Each contiguous block has a header, so it is not just a simple attribute * length to FSB conversion. */ -static int +int xfs_attr3_rmt_blocks( struct xfs_mount *mp, int attrlen) @@ -59,12 +59,43 @@ xfs_attr3_rmt_blocks( return XFS_B_TO_FSB(mp, attrlen); } +/* + * Checking of the remote attribute header is split into two parts. The verifier + * does CRC, location and bounds checking, the unpacking function checks the + * attribute parameters and owner. + */ +static bool +xfs_attr3_rmt_hdr_ok( + struct xfs_mount *mp, + void *ptr, + xfs_ino_t ino, + uint32_t offset, + uint32_t size, + xfs_daddr_t bno) +{ + struct xfs_attr3_rmt_hdr *rmt = ptr; + + if (bno != be64_to_cpu(rmt->rm_blkno)) + return false; + if (offset != be32_to_cpu(rmt->rm_offset)) + return false; + if (size != be32_to_cpu(rmt->rm_bytes)) + return false; + if (ino != be64_to_cpu(rmt->rm_owner)) + return false; + + /* ok */ + return true; +} + static bool xfs_attr3_rmt_verify( - struct xfs_buf *bp) + struct xfs_mount *mp, + void *ptr, + int fsbsize, + xfs_daddr_t bno) { - struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + struct xfs_attr3_rmt_hdr *rmt = ptr; if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; @@ -72,7 +103,9 @@ xfs_attr3_rmt_verify( return false; if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) return false; - if (bp->b_bn != be64_to_cpu(rmt->rm_blkno)) + if (be64_to_cpu(rmt->rm_blkno) != bno) + return false; + if (be32_to_cpu(rmt->rm_bytes) > fsbsize - sizeof(*rmt)) return false; if (be32_to_cpu(rmt->rm_offset) + be32_to_cpu(rmt->rm_bytes) >= XATTR_SIZE_MAX) @@ -88,17 +121,40 @@ xfs_attr3_rmt_read_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; + char *ptr; + int len; + bool corrupt = false; + xfs_daddr_t bno; /* no verification of non-crc buffers */ if (!xfs_sb_version_hascrc(&mp->m_sb)) return; - if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), - XFS_ATTR3_RMT_CRC_OFF) || - !xfs_attr3_rmt_verify(bp)) { + ptr = bp->b_addr; + bno = bp->b_bn; + len = BBTOB(bp->b_length); + ASSERT(len >= XFS_LBSIZE(mp)); + + while (len > 0) { + if (!xfs_verify_cksum(ptr, XFS_LBSIZE(mp), + XFS_ATTR3_RMT_CRC_OFF)) { + corrupt = true; + break; + } + if (!xfs_attr3_rmt_verify(mp, ptr, XFS_LBSIZE(mp), bno)) { + corrupt = true; + break; + } + len -= XFS_LBSIZE(mp); + ptr += XFS_LBSIZE(mp); + bno += mp->m_bsize; + } + + if (corrupt) { XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); xfs_buf_ioerror(bp, EFSCORRUPTED); - } + } else + ASSERT(len == 0); } static void @@ -107,23 +163,39 @@ xfs_attr3_rmt_write_verify( { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_buf_log_item *bip = bp->b_fspriv; + char *ptr; + int len; + xfs_daddr_t bno; /* no verification of non-crc buffers */ if (!xfs_sb_version_hascrc(&mp->m_sb)) return; - if (!xfs_attr3_rmt_verify(bp)) { - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); - xfs_buf_ioerror(bp, EFSCORRUPTED); - return; - } + ptr = bp->b_addr; + bno = bp->b_bn; + len = BBTOB(bp->b_length); + ASSERT(len >= XFS_LBSIZE(mp)); + + while (len > 0) { + if (!xfs_attr3_rmt_verify(mp, ptr, XFS_LBSIZE(mp), bno)) { + XFS_CORRUPTION_ERROR(__func__, + XFS_ERRLEVEL_LOW, mp, bp->b_addr); + xfs_buf_ioerror(bp, EFSCORRUPTED); + return; + } + if (bip) { + struct xfs_attr3_rmt_hdr *rmt; - if (bip) { - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; - rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); + rmt = (struct xfs_attr3_rmt_hdr *)ptr; + rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); + } + xfs_update_cksum(ptr, XFS_LBSIZE(mp), XFS_ATTR3_RMT_CRC_OFF); + + len -= XFS_LBSIZE(mp); + ptr += XFS_LBSIZE(mp); + bno += mp->m_bsize; } - xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), - XFS_ATTR3_RMT_CRC_OFF); + ASSERT(len == 0); } const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { @@ -131,15 +203,16 @@ const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { .verify_write = xfs_attr3_rmt_write_verify, }; -static int +STATIC int xfs_attr3_rmt_hdr_set( struct xfs_mount *mp, + void *ptr, xfs_ino_t ino, uint32_t offset, uint32_t size, - struct xfs_buf *bp) + xfs_daddr_t bno) { - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + struct xfs_attr3_rmt_hdr *rmt = ptr; if (!xfs_sb_version_hascrc(&mp->m_sb)) return 0; @@ -149,36 +222,107 @@ xfs_attr3_rmt_hdr_set( rmt->rm_bytes = cpu_to_be32(size); uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); rmt->rm_owner = cpu_to_be64(ino); - rmt->rm_blkno = cpu_to_be64(bp->b_bn); - bp->b_ops = &xfs_attr3_rmt_buf_ops; + rmt->rm_blkno = cpu_to_be64(bno); return sizeof(struct xfs_attr3_rmt_hdr); } /* - * Checking of the remote attribute header is split into two parts. the verifier - * does CRC, location and bounds checking, the unpacking function checks the - * attribute parameters and owner. + * Helper functions to copy attribute data in and out of the one disk extents */ -static bool -xfs_attr3_rmt_hdr_ok( - struct xfs_mount *mp, - xfs_ino_t ino, - uint32_t offset, - uint32_t size, - struct xfs_buf *bp) +STATIC int +xfs_attr_rmtval_copyout( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_ino_t ino, + int *offset, + int *valuelen, + char **dst) { - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; + char *src = bp->b_addr; + xfs_daddr_t bno = bp->b_bn; + int len = BBTOB(bp->b_length); - if (offset != be32_to_cpu(rmt->rm_offset)) - return false; - if (size != be32_to_cpu(rmt->rm_bytes)) - return false; - if (ino != be64_to_cpu(rmt->rm_owner)) - return false; + ASSERT(len >= XFS_LBSIZE(mp)); - /* ok */ - return true; + while (len > 0 && *valuelen > 0) { + int hdr_size = 0; + int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); + + byte_cnt = min_t(int, *valuelen, byte_cnt); + + if (xfs_sb_version_hascrc(&mp->m_sb)) { + if (!xfs_attr3_rmt_hdr_ok(mp, src, ino, *offset, + byte_cnt, bno)) { + xfs_alert(mp, +"remote attribute header mismatch bno/off/len/owner (0x%llx/0x%x/Ox%x/0x%llx)", + bno, *offset, byte_cnt, ino); + return EFSCORRUPTED; + } + hdr_size = sizeof(struct xfs_attr3_rmt_hdr); + } + + memcpy(*dst, src + hdr_size, byte_cnt); + + /* roll buffer forwards */ + len -= XFS_LBSIZE(mp); + src += XFS_LBSIZE(mp); + bno += mp->m_bsize; + + /* roll attribute data forwards */ + *valuelen -= byte_cnt; + *dst += byte_cnt; + *offset += byte_cnt; + } + return 0; +} + +STATIC void +xfs_attr_rmtval_copyin( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_ino_t ino, + int *offset, + int *valuelen, + char **src) +{ + char *dst = bp->b_addr; + xfs_daddr_t bno = bp->b_bn; + int len = BBTOB(bp->b_length); + + ASSERT(len >= XFS_LBSIZE(mp)); + + while (len > 0 && *valuelen > 0) { + int hdr_size; + int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); + + byte_cnt = min(*valuelen, byte_cnt); + hdr_size = xfs_attr3_rmt_hdr_set(mp, dst, ino, *offset, + byte_cnt, bno); + + memcpy(dst + hdr_size, *src, byte_cnt); + + /* + * If this is the last block, zero the remainder of it. + * Check that we are actually the last block, too. + */ + if (byte_cnt + hdr_size < XFS_LBSIZE(mp)) { + ASSERT(*valuelen - byte_cnt == 0); + ASSERT(len == XFS_LBSIZE(mp)); + memset(dst + hdr_size + byte_cnt, 0, + XFS_LBSIZE(mp) - hdr_size - byte_cnt); + } + + /* roll buffer forwards */ + len -= XFS_LBSIZE(mp); + dst += XFS_LBSIZE(mp); + bno += mp->m_bsize; + + /* roll attribute data forwards */ + *valuelen -= byte_cnt; + *src += byte_cnt; + *offset += byte_cnt; + } } /* @@ -192,13 +336,12 @@ xfs_attr_rmtval_get( struct xfs_bmbt_irec map[ATTR_RMTVALUE_MAPSIZE]; struct xfs_mount *mp = args->dp->i_mount; struct xfs_buf *bp; - xfs_daddr_t dblkno; xfs_dablk_t lblkno = args->rmtblkno; - void *dst = args->value; + char *dst = args->value; int valuelen = args->valuelen; int nmap; int error; - int blkcnt; + int blkcnt = args->rmtblkcnt; int i; int offset = 0; @@ -208,7 +351,6 @@ xfs_attr_rmtval_get( while (valuelen > 0) { nmap = ATTR_RMTVALUE_MAPSIZE; - blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, blkcnt, map, &nmap, XFS_BMAPI_ATTRFORK); @@ -217,45 +359,29 @@ xfs_attr_rmtval_get( ASSERT(nmap >= 1); for (i = 0; (i < nmap) && (valuelen > 0); i++) { - int byte_cnt; - char *src; + xfs_daddr_t dblkno; + int dblkcnt; ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && (map[i].br_startblock != HOLESTARTBLOCK)); dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); - blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); + dblkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, - dblkno, blkcnt, 0, &bp, + dblkno, dblkcnt, 0, &bp, &xfs_attr3_rmt_buf_ops); if (error) return error; - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); - byte_cnt = min_t(int, valuelen, byte_cnt); - - src = bp->b_addr; - if (xfs_sb_version_hascrc(&mp->m_sb)) { - if (!xfs_attr3_rmt_hdr_ok(mp, args->dp->i_ino, - offset, byte_cnt, bp)) { - xfs_alert(mp, -"remote attribute header does not match required off/len/owner (0x%x/Ox%x,0x%llx)", - offset, byte_cnt, args->dp->i_ino); - xfs_buf_relse(bp); - return EFSCORRUPTED; - - } - - src += sizeof(struct xfs_attr3_rmt_hdr); - } - - memcpy(dst, src, byte_cnt); + error = xfs_attr_rmtval_copyout(mp, bp, args->dp->i_ino, + &offset, &valuelen, + &dst); xfs_buf_relse(bp); + if (error) + return error; - offset += byte_cnt; - dst += byte_cnt; - valuelen -= byte_cnt; - + /* roll attribute extent map forwards */ lblkno += map[i].br_blockcount; + blkcnt -= map[i].br_blockcount; } } ASSERT(valuelen == 0); @@ -273,17 +399,13 @@ xfs_attr_rmtval_set( struct xfs_inode *dp = args->dp; struct xfs_mount *mp = dp->i_mount; struct xfs_bmbt_irec map; - struct xfs_buf *bp; - xfs_daddr_t dblkno; xfs_dablk_t lblkno; xfs_fileoff_t lfileoff = 0; - void *src = args->value; + char *src = args->value; int blkcnt; int valuelen; int nmap; int error; - int hdrcnt = 0; - bool crcs = xfs_sb_version_hascrc(&mp->m_sb); int offset = 0; trace_xfs_attr_rmtval_set(args); @@ -292,21 +414,14 @@ xfs_attr_rmtval_set( * Find a "hole" in the attribute address space large enough for * us to drop the new attribute's value into. Because CRC enable * attributes have headers, we can't just do a straight byte to FSB - * conversion. We calculate the worst case block count in this case - * and we may not need that many, so we have to handle this when - * allocating the blocks below. + * conversion and have to take the header space into account. */ blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); - error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, XFS_ATTR_FORK); if (error) return error; - /* Start with the attribute data. We'll allocate the rest afterwards. */ - if (crcs) - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); - args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; args->rmtblkcnt = blkcnt; @@ -349,31 +464,6 @@ xfs_attr_rmtval_set( (map.br_startblock != HOLESTARTBLOCK)); lblkno += map.br_blockcount; blkcnt -= map.br_blockcount; - hdrcnt++; - - /* - * If we have enough blocks for the attribute data, calculate - * how many extra blocks we need for headers. We might run - * through this multiple times in the case that the additional - * headers in the blocks needed for the data fragments spills - * into requiring more blocks. e.g. for 512 byte blocks, we'll - * spill for another block every 9 headers we require in this - * loop. - * - * Note that this can result in contiguous allocation of blocks, - * so we don't use all the space we allocate for headers as we - * have one less header for each contiguous allocation that - * occurs in the map/write loop below. - */ - if (crcs && blkcnt == 0) { - int total_len; - - total_len = args->valuelen + - hdrcnt * sizeof(struct xfs_attr3_rmt_hdr); - blkcnt = XFS_B_TO_FSB(mp, total_len); - blkcnt -= args->rmtblkcnt; - args->rmtblkcnt += blkcnt; - } /* * Start the next trans in the chain. @@ -390,17 +480,15 @@ xfs_attr_rmtval_set( * the INCOMPLETE flag. */ lblkno = args->rmtblkno; - valuelen = args->valuelen; blkcnt = args->rmtblkcnt; + valuelen = args->valuelen; while (valuelen > 0) { - int byte_cnt; - int hdr_size; - int dblkcnt; - char *buf; + struct xfs_buf *bp; + xfs_daddr_t dblkno; + int dblkcnt; + + ASSERT(blkcnt > 0); - /* - * Try to remember where we decided to put the value. - */ xfs_bmap_init(args->flist, args->firstblock); nmap = 1; error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, @@ -419,29 +507,17 @@ xfs_attr_rmtval_set( if (!bp) return ENOMEM; bp->b_ops = &xfs_attr3_rmt_buf_ops; - buf = bp->b_addr; - - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); - byte_cnt = min_t(int, valuelen, byte_cnt); - hdr_size = xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, - byte_cnt, bp); - ASSERT(hdr_size + byte_cnt <= BBTOB(bp->b_length)); - memcpy(buf + hdr_size, src, byte_cnt); - - if (byte_cnt + hdr_size < BBTOB(bp->b_length)) - xfs_buf_zero(bp, byte_cnt + hdr_size, - BBTOB(bp->b_length) - byte_cnt - hdr_size); + xfs_attr_rmtval_copyin(mp, bp, args->dp->i_ino, &offset, + &valuelen, &src); error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ xfs_buf_relse(bp); if (error) return error; - src += byte_cnt; - valuelen -= byte_cnt; - offset += byte_cnt; + /* roll attribute extent map forwards */ lblkno += map.br_blockcount; blkcnt -= map.br_blockcount; } @@ -454,19 +530,17 @@ xfs_attr_rmtval_set( * out-of-line buffer that it is stored on. */ int -xfs_attr_rmtval_remove(xfs_da_args_t *args) +xfs_attr_rmtval_remove( + struct xfs_da_args *args) { - xfs_mount_t *mp; - xfs_bmbt_irec_t map; - xfs_buf_t *bp; - xfs_daddr_t dblkno; - xfs_dablk_t lblkno; - int valuelen, blkcnt, nmap, error, done, committed; + struct xfs_mount *mp = args->dp->i_mount; + xfs_dablk_t lblkno; + int blkcnt; + int error; + int done; trace_xfs_attr_rmtval_remove(args); - mp = args->dp->i_mount; - /* * Roll through the "value", invalidating the attribute value's blocks. * Note that args->rmtblkcnt is the minimum number of data blocks we'll @@ -476,10 +550,13 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) * lookups. */ lblkno = args->rmtblkno; - valuelen = args->valuelen; - blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); - while (valuelen > 0) { - int dblkcnt; + blkcnt = args->rmtblkcnt; + while (blkcnt > 0) { + struct xfs_bmbt_irec map; + struct xfs_buf *bp; + xfs_daddr_t dblkno; + int dblkcnt; + int nmap; /* * Try to remember where we decided to put the value. @@ -506,21 +583,19 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) bp = NULL; } - valuelen -= XFS_ATTR3_RMT_BUF_SPACE(mp, - XFS_FSB_TO_B(mp, map.br_blockcount)); - lblkno += map.br_blockcount; blkcnt -= map.br_blockcount; - blkcnt = max(blkcnt, xfs_attr3_rmt_blocks(mp, valuelen)); } /* * Keep de-allocating extents until the remote-value region is gone. */ - blkcnt = lblkno - args->rmtblkno; lblkno = args->rmtblkno; + blkcnt = args->rmtblkcnt; done = 0; while (!done) { + int committed; + xfs_bmap_init(args->flist, args->firstblock); error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, diff --git a/fs/xfs/xfs_attr_remote.h b/fs/xfs/xfs_attr_remote.h index c7cca60..92a8fd7 100644 --- a/fs/xfs/xfs_attr_remote.h +++ b/fs/xfs/xfs_attr_remote.h @@ -20,6 +20,14 @@ #define XFS_ATTR3_RMT_MAGIC 0x5841524d /* XARM */ +/* + * There is one of these headers per filesystem block in a remote attribute. + * This is done to ensure there is a 1:1 mapping between the attribute value + * length and the number of blocks needed to store the attribute. This makes the + * verification of a buffer a little more complex, but greatly simplifies the + * allocation, reading and writing of these attributes as we don't have to guess + * the number of blocks needed to store the attribute data. + */ struct xfs_attr3_rmt_hdr { __be32 rm_magic; __be32 rm_offset; @@ -39,6 +47,8 @@ struct xfs_attr3_rmt_hdr { extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops; +int xfs_attr3_rmt_blocks(struct xfs_mount *mp, int attrlen); + int xfs_attr_rmtval_get(struct xfs_da_args *args); int xfs_attr_rmtval_set(struct xfs_da_args *args); int xfs_attr_rmtval_remove(struct xfs_da_args *args); diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 0d25542..1b2472a 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -513,6 +513,7 @@ _xfs_buf_find( xfs_alert(btp->bt_mount, "%s: Block out of range: block 0x%llx, EOFS 0x%llx ", __func__, blkno, eofs); + WARN_ON(1); return NULL; } -- 1.7.10.4 From dave@fromorbit.com Tue May 21 03:02:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9167629E06 for ; Tue, 21 May 2013 03:02:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 62226304032 for ; Tue, 21 May 2013 01:02:44 -0700 (PDT) X-ASG-Debug-ID: 1369123362-04bdf04226486ee0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id MH9DrSiBhgEfhEXc for ; Tue, 21 May 2013 01:02:42 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArwLAB4pm1F5LNn3/2dsb2JhbABZgwjBegQBgQoXdIIfAQEFJy8jEAgYMTkDGxmIDLt9jWkBGoESg2YDnVaLIoMhKoEsAR8 Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 21 May 2013 17:32:41 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UehWl-0001SQ-Pd; Tue, 21 May 2013 18:02:35 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UehWW-0002Wx-N6; Tue, 21 May 2013 18:02:20 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks Date: Tue, 21 May 2013 18:02:10 +1000 X-ASG-Orig-Subj: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks Message-Id: <1369123330-9579-12-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369123362 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The limit of 25 ACL entries is arbitrary, but baked into the on-disk format. For version 5 superblocks, increase it to the maximum nuber of ACLs that can fit into a single xattr. Signed-off-by: Dave Chinner --- fs/xfs/xfs_acl.c | 31 ++++++++++++++++++------------- fs/xfs/xfs_acl.h | 30 +++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c index 1d32f1d..b6bed9b 100644 --- a/fs/xfs/xfs_acl.c +++ b/fs/xfs/xfs_acl.c @@ -21,6 +21,8 @@ #include "xfs_bmap_btree.h" #include "xfs_inode.h" #include "xfs_vnodeops.h" +#include "xfs_sb.h" +#include "xfs_mount.h" #include "xfs_trace.h" #include #include @@ -34,7 +36,9 @@ */ STATIC struct posix_acl * -xfs_acl_from_disk(struct xfs_acl *aclp) +xfs_acl_from_disk( + struct xfs_acl *aclp, + int max_entries) { struct posix_acl_entry *acl_e; struct posix_acl *acl; @@ -42,7 +46,7 @@ xfs_acl_from_disk(struct xfs_acl *aclp) unsigned int count, i; count = be32_to_cpu(aclp->acl_cnt); - if (count > XFS_ACL_MAX_ENTRIES) + if (count > max_entries) return ERR_PTR(-EFSCORRUPTED); acl = posix_acl_alloc(count, GFP_KERNEL); @@ -108,7 +112,7 @@ xfs_get_acl(struct inode *inode, int type) struct xfs_inode *ip = XFS_I(inode); struct posix_acl *acl; struct xfs_acl *xfs_acl; - int len = sizeof(struct xfs_acl); + int len = XFS_ACL_SIZE(ip->i_mount); unsigned char *ea_name; int error; @@ -133,8 +137,8 @@ xfs_get_acl(struct inode *inode, int type) * If we have a cached ACLs value just return it, not need to * go out to the disk. */ - - xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); + len = XFS_ACL_SIZE(ip->i_mount); + xfs_acl = kzalloc(len, GFP_KERNEL); if (!xfs_acl) return ERR_PTR(-ENOMEM); @@ -153,7 +157,7 @@ xfs_get_acl(struct inode *inode, int type) goto out; } - acl = xfs_acl_from_disk(xfs_acl); + acl = xfs_acl_from_disk(xfs_acl, XFS_ACL_MAX_ENTRIES(ip->i_mount)); if (IS_ERR(acl)) goto out; @@ -189,16 +193,17 @@ xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) if (acl) { struct xfs_acl *xfs_acl; - int len; + int len = XFS_ACL_SIZE(ip->i_mount); - xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); + xfs_acl = kzalloc(len, GFP_KERNEL); if (!xfs_acl) return -ENOMEM; xfs_acl_to_disk(xfs_acl, acl); - len = sizeof(struct xfs_acl) - - (sizeof(struct xfs_acl_entry) * - (XFS_ACL_MAX_ENTRIES - acl->a_count)); + + /* subtract away the unused acl entries */ + len -= sizeof(struct xfs_acl_entry) * + (XFS_ACL_MAX_ENTRIES(ip->i_mount) - acl->a_count); error = -xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl, len, ATTR_ROOT); @@ -243,7 +248,7 @@ xfs_set_mode(struct inode *inode, umode_t mode) static int xfs_acl_exists(struct inode *inode, unsigned char *name) { - int len = sizeof(struct xfs_acl); + int len = XFS_ACL_SIZE(XFS_M(inode->i_sb)); return (xfs_attr_get(XFS_I(inode), name, NULL, &len, ATTR_ROOT|ATTR_KERNOVAL) == 0); @@ -379,7 +384,7 @@ xfs_xattr_acl_set(struct dentry *dentry, const char *name, goto out_release; error = -EINVAL; - if (acl->a_count > XFS_ACL_MAX_ENTRIES) + if (acl->a_count > XFS_ACL_MAX_ENTRIES(XFS_M(inode->i_sb))) goto out_release; if (type == ACL_TYPE_ACCESS) { diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h index 39632d9..5310a52 100644 --- a/fs/xfs/xfs_acl.h +++ b/fs/xfs/xfs_acl.h @@ -22,19 +22,35 @@ struct inode; struct posix_acl; struct xfs_inode; -#define XFS_ACL_MAX_ENTRIES 25 #define XFS_ACL_NOT_PRESENT (-1) /* On-disk XFS access control list structure */ +struct xfs_acl_entry { + __be32 ae_tag; + __be32 ae_id; + __be16 ae_perm; + __be16 ae_pad; /* fill the implicit hole in the structure */ +}; + struct xfs_acl { - __be32 acl_cnt; - struct xfs_acl_entry { - __be32 ae_tag; - __be32 ae_id; - __be16 ae_perm; - } acl_entry[XFS_ACL_MAX_ENTRIES]; + __be32 acl_cnt; + struct xfs_acl_entry acl_entry[0]; }; +/* + * The number of ACL entries allowed is defined by the on-disk format. + * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it is + * limited only by the maximum size of the xattr that stores the information. + */ +#define XFS_ACL_MAX_ENTRIES(mp) \ + (xfs_sb_version_hascrc(&mp->m_sb) \ + ? (XATTR_SIZE_MAX - sizeof(__be32) / sizeof(struct xfs_acl_entry)) \ + : 25) + +#define XFS_ACL_SIZE(mp) \ + (sizeof(struct xfs_acl) + \ + sizeof(struct xfs_acl_entry) * XFS_ACL_MAX_ENTRIES((mp))) + /* On-disk XFS extended attribute names */ #define SGI_ACL_FILE (unsigned char *)"SGI_ACL_FILE" #define SGI_ACL_DEFAULT (unsigned char *)"SGI_ACL_DEFAULT" -- 1.7.10.4 From bfoster@redhat.com Tue May 21 05:54:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id ED37B29DF8 for ; Tue, 21 May 2013 05:54:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6BFFCAC004 for ; Tue, 21 May 2013 03:54:00 -0700 (PDT) X-ASG-Debug-ID: 1369133639-04cbb05fe2486cf0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id LVVdnMmDud6X4aEU for ; Tue, 21 May 2013 03:53:59 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4LArunU014923 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 May 2013 06:53:56 -0400 Received: from laptop.bfoster (vpn-62-100.rdu2.redhat.com [10.10.62.100]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4LArsYl003228 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Tue, 21 May 2013 06:53:55 -0400 Message-ID: <519B519C.5030405@redhat.com> Date: Tue, 21 May 2013 06:51:08 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 04/14 V2] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() References: <1369007481-15185-1-git-send-email-david@fromorbit.com> <1369007481-15185-5-git-send-email-david@fromorbit.com> <20130521003647.GK24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 04/14 V2] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() In-Reply-To: <20130521003647.GK24543@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369133639 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/20/2013 08:36 PM, Dave Chinner wrote: > From: Dave Chinner > > Lockdep reports: > > ============================================= > [ INFO: possible recursive locking detected ] > 3.9.0+ #3 Not tainted > --------------------------------------------- > setquota/28368 is trying to acquire lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > but task is already holding lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be > allocated. > > xfs_qm_scall_setqlim() is starting a transaction and then not > passing it into xfs_qm_dqet() and so it starts it's own transaction > when allocating the dquot. Splat! > > Fix this by not allocating the dquot in xfs_qm_scall_setqlim() > inside the setqlim transaction. This requires getting the dquot > first (and allocating it if necessary) then dropping and relocking > the dquot before joining it to the setqlim transaction. > > Reported-by: Michael L. Semon > Signed-off-by: Dave Chinner > --- > V2: fix error handling path that failed to release the dquot. > Looks good. Reviewed-by: Brian Foster > fs/xfs/xfs_qm_syscalls.c | 40 +++++++++++++++++++++++----------------- > 1 file changed, 23 insertions(+), 17 deletions(-) > > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > index c41190c..6cdf6ff 100644 > --- a/fs/xfs/xfs_qm_syscalls.c > +++ b/fs/xfs/xfs_qm_syscalls.c > @@ -489,31 +489,36 @@ xfs_qm_scall_setqlim( > if ((newlim->d_fieldmask & XFS_DQ_MASK) == 0) > return 0; > > - tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); > - error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), > - 0, 0, XFS_DEFAULT_LOG_COUNT); > - if (error) { > - xfs_trans_cancel(tp, 0); > - return (error); > - } > - > /* > * We don't want to race with a quotaoff so take the quotaoff lock. > - * (We don't hold an inode lock, so there's nothing else to stop > - * a quotaoff from happening). (XXXThis doesn't currently happen > - * because we take the vfslock before calling xfs_qm_sysent). > + * We don't hold an inode lock, so there's nothing else to stop > + * a quotaoff from happening. > */ > mutex_lock(&q->qi_quotaofflock); > > /* > - * Get the dquot (locked), and join it to the transaction. > - * Allocate the dquot if this doesn't exist. > + * Get the dquot (locked) before we start, as we need to do a > + * transaction to allocate it if it doesn't exist. Once we have the > + * dquot, unlock it so we can start the next transaction safely. We hold > + * a reference to the dquot, so it's safe to do this unlock/lock without > + * it being reclaimed in the mean time. > */ > - if ((error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp))) { > - xfs_trans_cancel(tp, XFS_TRANS_ABORT); > + error = xfs_qm_dqget(mp, NULL, id, type, XFS_QMOPT_DQALLOC, &dqp); > + if (error) { > ASSERT(error != ENOENT); > goto out_unlock; > } > + xfs_dqunlock(dqp); > + > + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); > + error = xfs_trans_reserve(tp, 0, XFS_QM_SETQLIM_LOG_RES(mp), > + 0, 0, XFS_DEFAULT_LOG_COUNT); > + if (error) { > + xfs_trans_cancel(tp, 0); > + goto out_rele; > + } > + > + xfs_dqlock(dqp); > xfs_trans_dqjoin(tp, dqp); > ddq = &dqp->q_core; > > @@ -621,9 +626,10 @@ xfs_qm_scall_setqlim( > xfs_trans_log_dquot(tp, dqp); > > error = xfs_trans_commit(tp, 0); > - xfs_qm_dqrele(dqp); > > - out_unlock: > +out_rele: > + xfs_qm_dqrele(dqp); > +out_unlock: > mutex_unlock(&q->qi_quotaofflock); > return error; > } > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From arkadiusz.bubala@open-e.com Tue May 21 07:23:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3570029DF8 for ; Tue, 21 May 2013 07:23:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E82BB304070 for ; Tue, 21 May 2013 05:23:33 -0700 (PDT) X-ASG-Debug-ID: 1369139006-04bdf04226497830001-NocioJ Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by cuda.sgi.com with ESMTP id 0WJ7AnZ99nN7riL8 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 21 May 2013 05:23:28 -0700 (PDT) X-Barracuda-Envelope-From: arkadiusz.bubala@open-e.com X-Barracuda-Apparent-Source-IP: 212.227.126.171 Received: from [192.168.241.151] (host8514118246.static.open-e.3s.pl [85.14.118.246]) by mrelayeu.kundenserver.de (node=mrbap2) with ESMTP (Nemesis) id 0MRRcG-1V2s3404t6-00Svci; Tue, 21 May 2013 14:23:26 +0200 Message-ID: <519B6738.9030603@open-e.com> Date: Tue, 21 May 2013 14:23:20 +0200 From: =?UTF-8?B?QXJrYWRpdXN6IEJ1YmHFgmE=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120613 Icedove/3.0.11 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 Content-Type: text/plain; charset=UTF-8; format=flowed X-ASG-Orig-Subj: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 Content-Transfer-Encoding: 8bit X-Provags-ID: V02:K0:z53tESJtt2vrfSjYxRmH7gMFAtQHdyDOeZSWVzga2BM 3rfyHEAkNtzuwK7lUQuExc1IsRO4e0bmYDdOSJE6Fie0P/fdiy ecWfJcFcSvYC2Yp0Ru3Eu/QKiYlgdVzokn8HljH4RbCQjpaSfJ KyKc+S47giNC7Bh+gCqURgCGfwY4jxKS5WofZinTYo/QBFQjvY B5g3FAchIiwzuxWj4yKjT4LQkLaCg10uBJzUesDRGkOxPQO+EJ rFUl/L//SknVALZGnHGoUMRJzOC8vzppBCIDgKkigc+NQFZUT7 iMa36Fx2x02PA9Vw7ByVaaTlFuGp9btYIfH+zNZMcwLT5sxXx9 zRKDsrGe8i5V//DBUCtgibd1icCxWZOWuMRNjfend X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.171] X-Barracuda-Start-Time: 1369139007 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131601 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, I've got a call trace which should be fixed by "drop buffer io reference when a bad bio is built" patch (http://patchwork.xfs.org/patch/3956/). Error occured on already patched Linux kernel 3.2.42. Test environment consist two machines target and initiator. First machine works as target with QLogic Corp. ISP2432-based 4Gb Fibre Channel device. Storage is placed on two KINGSTON SNV425S SSD working as RAID0 array. RAID is managed by LSI MegaRAID SAS 1068 controller. Second machine works as initiator with the same QLogic card. After few days of running test script I got following call trace and XFS stopped working. [90012.196963] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 [90012.196982] ------------[ cut here ]------------ [90012.196984] kernel BUG at fs/xfs/xfs_message.c:101! [90012.196987] invalid opcode: 0000 [#1] SMP [90012.196990] CPU 2 [90012.196992] Modules linked in: iscsi_scst(O) scst_vdisk(O) libcrc32c qla2x00tgt(O) scst(O) ext2 drbd(O) iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi bonding qla2xxx(O) sg scsi_transport_fc megaraid_sas bnx2 acpi_power_meter usbserial uhci_hcd ohci_hcd ehci_hcd aufs [last unloaded: megaraid_sas] [90012.197013] [90012.197016] Pid: 10262, comm: mount Tainted: G O 3.2.42-oe64-00000-g12db8b5 #14 Dell Inc. PowerEdge R510/0DPRKF [90012.197022] RIP: 0010:[] [] assfail+0x1d/0x30 [90012.197031] RSP: 0000:ffff8800be43fc68 EFLAGS: 00010296 [90012.197034] RAX: 0000000000000071 RBX: ffff8800512e8cc0 RCX: 0000000000000046 [90012.197037] RDX: 0000000000000000 RSI: 0000000000000046 RDI: ffffffff81c1c380 [90012.197039] RBP: ffff8800be43fc68 R08: 0000000000000006 R09: 000000000000ffff [90012.197042] R10: 0000000000000006 R11: 000000000000000a R12: ffff8800a41f4800 [90012.197045] R13: 0000000000000000 R14: ffff8800a41f49e8 R15: ffff8800a41f49f8 [90012.197049] FS: 0000000000000000(0000) GS:ffff88012b240000(0063) knlGS:00000000f75456c0 [90012.197052] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b [90012.197055] CR2: 000000000818e508 CR3: 000000001d9d7000 CR4: 00000000000006e0 [90012.197058] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [90012.197061] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [90012.197064] Process mount (pid: 10262, threadinfo ffff8800be43e000, task ffff88007fe64a60) [90012.197066] Stack: [90012.197068] ffff8800be43fca8 ffffffff8134eb7a 0000000000000005 ffff8800a41f4800 [90012.197072] ffff8800a41f4818 0000000000000005 ffff8800a41f4800 0000000000000000 [90012.197076] ffff8800be43fcf8 ffffffff8135054d 0000000000000000 0000000000000000 [90012.197080] Call Trace: [90012.197088] [] xfs_free_perag+0x8a/0xc0 [90012.197092] [] xfs_mountfs+0x31d/0x700 [90012.197097] [] xfs_fs_fill_super+0x1cb/0x270 [90012.197103] [] mount_bdev+0x19a/0x1d0 [90012.197107] [] ? xfs_fs_write_inode+0x180/0x180 [90012.197114] [] ? selinux_sb_copy_data+0x156/0x1d0 [90012.197118] [] xfs_fs_mount+0x10/0x20 [90012.197123] [] mount_fs+0x41/0x180 [90012.197129] [] vfs_kern_mount+0x5e/0xc0 [90012.197133] [] do_kern_mount+0x4e/0x100 [90012.197138] [] do_mount+0x516/0x740 [90012.197144] [] ? __get_free_pages+0x9/0x40 [90012.197150] [] compat_sys_mount+0xa2/0x220 [90012.197156] [] ia32_do_call+0x13/0x13 [90012.197158] Code: 66 66 90 66 66 66 90 66 66 66 90 66 66 90 55 41 89 d0 48 89 f1 48 89 fa 48 c7 c6 b8 bf 9b 81 31 ff 48 89 e5 31 c0 e8 53 ff ff ff <0f> 0b eb fe 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 55 31 [90012.197189] RIP [] assfail+0x1d/0x30 [90012.197193] RSP [90012.197196] ---[ end trace ed2e349225f77763 ]--- [90015.960377] XFS (dm-44): xfs_log_force: error 5 returned. Test scripts gets as a parameter device name. It creates volume group, two logical volumes with XFS filesystem. XFS is created with force overwrite and lazy_count=0 options. Also 20 logical volumes are created for snapshots. When test environment is prepared it runs two dd processes in background. These processes copies 50 data blocks of size 100MB from /dev/zero to each logical volume. When 50 blocks are created they are removed and whole operation starts again. In an infinite loop LVs are converted to snapshots (10 snapshots for each Logical Volume). After starting all snapshots they are removed one by one. test_script.sh source: #!/bin/bash DEV=$1 if [ -z $DEV ]; then echo "This program requires device name as parameter" exit 1 fi function overload() { COUNT=$1 temp_COUNT=$COUNT; while [ -f ./run ]; do while [ $COUNT -ge 1 ]; do if [ -f ./run ]; then dd bs=1024 count=102400 if=/dev/zero of=/$2/"_"$COUNT &> /dev/null fi; let COUNT=$COUNT-1 done; rm $2/*; COUNT=$temp_COUNT; done; } function create_vg() { #create physical volume pvcreate /dev/sda if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to create physical volume" exit 1 fi #create volume group vgcreate -v -s 32M vg0 /dev/sda if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to create volume group" exit 1 fi VG="vg0" } function create_lv() { local LV="$1" #create logical volume lvcreate -l 500 -n "$VG+$LV" "$VG" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to create LV" exit 1 fi mkfs -t xfs -f -l lazy-count=0 /dev/$VG/"$VG+$LV" &>/dev/null if [[ $? -gt 0 ]]; then echo "[ FAIL ] Can't create filesystem" exit 1 fi } function create_snapshots() { for ((i=0; i < 20; i++)); do if [[ $i -lt 10 ]]; then lvcreate -l "64" -n "snap0$i" "$VG" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to create snapshot LV" exit 1 fi else lvcreate -l "64" -n "snap$i" "$VG" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to create snapshot LV" exit 1 fi fi done } function assign_snapshots() { for ((i=0; i < 20; i++)); do if [[ $i -lt 10 ]]; then lvrename "$VG" "snap0$i" "lv0+snap0$i" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to rename snapshot LV" exit 1 fi else lvrename "$VG" "snap$i" "lv1+snap$i" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to rename snapshot LV" exit 1 fi fi done } function mount_volume() { local MVG=$1 local MLV=$2 mkdir -p "/test/mount/$MVG+$MLV" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to create mounting point" exit 1 fi mount -t xfs -o defaults,usrquota,grpquota,nouuid,noatime,nodiratime "/dev/$MVG/$MVG+$MLV" "/test/mount/$MVG+$MLV" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Unable to mount LV" exit 1 fi } function start_overload() { touch ./run mkdir -p /test/mount/$1+$2/test overload 50 "/test/mount/$1+$2/test" $3 & echo "overload $1 /test/mount/$1+$2/test $3 &" sleep 4; echo "[ OK ] copying files to $2 started" } function get_snapshot_status() { lvdisplay /dev/$1/$2 | awk ' $0~"LV snapshot status" { print $4 } ' } function remove_snapshot() { local LVG=$1 local LLV=$2 local LSNAP=$3 umount "/test/mount/$LSNAP" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Can't umount snapshot" fi lvremove -sf "/dev/$LVG/$LSNAP" if [[ $? -gt 0 ]]; then echo "[ FAIL ] Can't remove snapshot" fi } function create_snapshot() { local LVG=$1 local LLV=$2 local LSNAP=$3 for((it=0; it<7; it++)); do local ERROR=0 local STATUS=`get_snapshot_status $LVG $LSNAP` if [[ "$STATUS" == "active" ]]; then remove_snapshot $LVG "$LLV+$LSNAP" fi STATUS=`get_snapshot_status $LVG $LSNAP` if [[ "$STATUS" == "active" ]]; then remove_snapshot $LVG "$LLV+$LSNAP" fi CHUNKSIZE=512 for ((ile=0;ile> $LOGFILE else echo "[ OK ] $snapname mounted." fi local STOP=$[`date +%s`-$START] echo "Starting time : $STOP s." echo "---------------------------" sleep 2 done; } function stop_snap() { local i for((i=0; i<20; i++)); do echo "Stopping snap$i : `date`" local START=`date +%s` if [[ $i -lt 10 ]]; then snapname="lv0+snap0"$i remove_snapshot $VG "lv0" $snapname else snapname="lv1+snap"$i remove_snapshot $VG "lv1" $snapname fi if [ "`lvs | grep $snapname | grep $VG+lv`" ]; then echo "[ FAIL ] $snapname still active !!!" else echo "[ OK ] $snapname deactivated." fi; if [ "`mount | grep $snapname`" ]; then echo "[ FAIL ] $snapname still mounted !!!" >> $LOGFILE else echo "[ OK ] $snapname umounted." fi; local STOP=$[`date +%s`-$START] echo "Stopping time : $STOP s." echo "---------------------------" sleep 2 done; } echo "-------- Creating vg0 on $DEV..." create_vg echo "[ OK ] Volume group created successfully" echo "-------- Creating logical volumes on $VG..." create_lv "lv0" create_lv "lv1" echo "[ OK ] Logical volumes created successfully" echo "-------- Mounting logical volumes..." mount_volume "$VG" "lv0" mount_volume "$VG" "lv1" echo "[ OK ] Logical volumes mounted successfully" echo "-------- Creating snapshots..." create_snapshots echo "[ OK ] Snapshots created successfully" echo "-------- Assigning snapshots..." assign_snapshots echo "[ OK ] Snapshots assigned successfully" echo "-------- Start overload..." start_overload "vg0" "lv0" start_overload "vg0" "lv1" while true; do start_snap 2> /dev/null stop_snap 2> /dev/null done rm ./run -- Best regards Arkadiusz Bubała From arkadiusz.bubala@open-e.com Tue May 21 07:31:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 50C9A29DF8 for ; Tue, 21 May 2013 07:31:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2AF59304070 for ; Tue, 21 May 2013 05:31:25 -0700 (PDT) X-ASG-Debug-ID: 1369139483-04cbb05fe548bfb0001-NocioJ Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.9]) by cuda.sgi.com with ESMTP id sDCPGsh9JZQMQeot (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 21 May 2013 05:31:24 -0700 (PDT) X-Barracuda-Envelope-From: arkadiusz.bubala@open-e.com X-Barracuda-Apparent-Source-IP: 212.227.17.9 Received: from [192.168.241.151] (host8514118246.static.open-e.3s.pl [85.14.118.246]) by mrelayeu.kundenserver.de (node=mreu3) with ESMTP (Nemesis) id 0LvdiS-1UQWAB0UlY-017XdH; Tue, 21 May 2013 14:31:23 +0200 Message-ID: <519B6915.2010407@open-e.com> Date: Tue, 21 May 2013 14:31:17 +0200 From: =?UTF-8?B?QXJrYWRpdXN6IEJ1YmHFgmE=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120613 Icedove/3.0.11 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 References: <519B6738.9030603@open-e.com> X-ASG-Orig-Subj: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 In-Reply-To: <519B6738.9030603@open-e.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Provags-ID: V02:K0:w3Ll1a9P7XQv6697IP2KdwhtpL9uhuJoknQ90Ps01H1 d6d0HcT3NX7ZVvBvXVrsa0j2h7cAX320uMEtP2ODrAz3hQjwvm rtyQy956tsUtcpPjbhxHJo3XqbWKFPH1k6cHTU5et4Cmae+XQX DEdRoltUr73y8whBsI+1EsR0s8FP0k9RfFAKevDPiicoluV63x L7snrkN6DKPpp6T/CffNrlEtGokCWwkDAnQVJ1Y3cnb6oVUBU9 O5ljwNLoyNlA+vCRzRwh0qsnhUSkgEhwGaub30SB1cQ1b50tH8 bjSk119+fJHmqpn+Hq5d1xnBfKT2oLEt6YnqxR5fHmT8aDmQNc xqGkB+mA4YKIvmDwFw4wgNnitYiNK2RDmjdNiA3er X-Barracuda-Connect: moutng.kundenserver.de[212.227.17.9] X-Barracuda-Start-Time: 1369139484 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131601 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 21.05.2013 14:23, Arkadiusz Bubała wrote: > Hello, > I've got a call trace which should be fixed by "drop buffer io > reference when a bad bio is built" patch > (http://patchwork.xfs.org/patch/3956/). Error occured on already > patched Linux kernel 3.2.42. > > Test environment consist two machines target and initiator. > First machine works as target with QLogic Corp. ISP2432-based 4Gb > Fibre Channel device. Storage is placed on two KINGSTON SNV425S SSD > working as RAID0 array. RAID is managed by LSI MegaRAID SAS 1068 > controller. > Second machine works as initiator with the same QLogic card. > > After few days of running test script I got following call trace and > XFS stopped working. > Sorry I provided incomplete dmesg logs. These should provide more information: [90011.884812] XFS (dm-46): metadata I/O error: block 0x1 ("xfs_trans_read_buf") error 5 buf count 512 [90011.941376] XFS (dm-46): xlog_recover_check_summary agf read failed agno 0 error 5 [90011.987890] XFS (dm-46): metadata I/O error: block 0x2 ("xfs_trans_read_buf") error 5 buf count 512 [90012.044179] XFS (dm-46): xlog_recover_check_summary agi read failed agno 0 error 5 [90012.092176] XFS (dm-46): metadata I/O error: block 0x7d0001 ("xfs_trans_read_buf") error 5 buf count 512 [90012.150379] XFS (dm-46): xlog_recover_check_summary agf read failed agno 1 error 5 [90012.196776] XFS (dm-46): metadata I/O error: block 0x7d0002 ("xfs_trans_read_buf") error 5 buf count 512 [90012.196780] XFS (dm-46): xlog_recover_check_summary agi read failed agno 1 error 5 [90012.196791] XFS (dm-46): metadata I/O error: block 0xfa0001 ("xfs_trans_read_buf") error 5 buf count 512 [90012.196795] XFS (dm-46): xlog_recover_check_summary agf read failed agno 2 error 5 [90012.196802] XFS (dm-46): metadata I/O error: block 0xfa0002 ("xfs_trans_read_buf") error 5 buf count 512 [90012.196806] XFS (dm-46): xlog_recover_check_summary agi read failed agno 2 error 5 [90012.196813] XFS (dm-46): metadata I/O error: block 0x1770001 ("xfs_trans_read_buf") error 5 buf count 512 [90012.196817] XFS (dm-46): xlog_recover_check_summary agf read failed agno 3 error 5 [90012.196823] XFS (dm-46): metadata I/O error: block 0x1770002 ("xfs_trans_read_buf") error 5 buf count 512 [90012.196827] XFS (dm-46): xlog_recover_check_summary agi read failed agno 3 error 5 [90012.196843] XFS (dm-46): metadata I/O error: block 0x40 ("xfs_trans_read_buf") error 5 buf count 8192 [90012.196847] XFS (dm-46): xfs_imap_to_bp: xfs_trans_read_buf() returned error 5. [90012.196852] XFS (dm-46): failed to read root inode [90012.196963] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 [90012.196982] ------------[ cut here ]------------ [90012.196984] kernel BUG at fs/xfs/xfs_message.c:101! [90012.196987] invalid opcode: 0000 [#1] SMP [90012.196990] CPU 2 [90012.196992] Modules linked in: iscsi_scst(O) scst_vdisk(O) libcrc32c qla2x00tgt(O) scst(O) ext2 drbd(O) iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi bonding qla2xxx(O) sg scsi_transport_fc megaraid_sas bnx2 acpi_power_meter usbserial uhci_hcd ohci_hcd ehci_hcd aufs [last unloaded: megaraid_sas] [90012.197013] [90012.197016] Pid: 10262, comm: mount Tainted: G O 3.2.42-oe64-00000-g12db8b5 #14 Dell Inc. PowerEdge R510/0DPRKF [90012.197022] RIP: 0010:[] [] assfail+0x1d/0x30 [90012.197031] RSP: 0000:ffff8800be43fc68 EFLAGS: 00010296 [90012.197034] RAX: 0000000000000071 RBX: ffff8800512e8cc0 RCX: 0000000000000046 [90012.197037] RDX: 0000000000000000 RSI: 0000000000000046 RDI: ffffffff81c1c380 [90012.197039] RBP: ffff8800be43fc68 R08: 0000000000000006 R09: 000000000000ffff [90012.197042] R10: 0000000000000006 R11: 000000000000000a R12: ffff8800a41f4800 [90012.197045] R13: 0000000000000000 R14: ffff8800a41f49e8 R15: ffff8800a41f49f8 [90012.197049] FS: 0000000000000000(0000) GS:ffff88012b240000(0063) knlGS:00000000f75456c0 [90012.197052] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b [90012.197055] CR2: 000000000818e508 CR3: 000000001d9d7000 CR4: 00000000000006e0 [90012.197058] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [90012.197061] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [90012.197064] Process mount (pid: 10262, threadinfo ffff8800be43e000, task ffff88007fe64a60) [90012.197066] Stack: [90012.197068] ffff8800be43fca8 ffffffff8134eb7a 0000000000000005 ffff8800a41f4800 [90012.197072] ffff8800a41f4818 0000000000000005 ffff8800a41f4800 0000000000000000 [90012.197076] ffff8800be43fcf8 ffffffff8135054d 0000000000000000 0000000000000000 [90012.197080] Call Trace: [90012.197088] [] xfs_free_perag+0x8a/0xc0 [90012.197092] [] xfs_mountfs+0x31d/0x700 [90012.197097] [] xfs_fs_fill_super+0x1cb/0x270 [90012.197103] [] mount_bdev+0x19a/0x1d0 [90012.197107] [] ? xfs_fs_write_inode+0x180/0x180 [90012.197114] [] ? selinux_sb_copy_data+0x156/0x1d0 [90012.197118] [] xfs_fs_mount+0x10/0x20 [90012.197123] [] mount_fs+0x41/0x180 [90012.197129] [] vfs_kern_mount+0x5e/0xc0 [90012.197133] [] do_kern_mount+0x4e/0x100 [90012.197138] [] do_mount+0x516/0x740 [90012.197144] [] ? __get_free_pages+0x9/0x40 [90012.197150] [] compat_sys_mount+0xa2/0x220 [90012.197156] [] ia32_do_call+0x13/0x13 [90012.197158] Code: 66 66 90 66 66 66 90 66 66 66 90 66 66 90 55 41 89 d0 48 89 f1 48 89 fa 48 c7 c6 b8 bf 9b 81 31 ff 48 89 e5 31 c0 e8 53 ff ff ff<0f> 0b eb fe 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 55 31 [90012.197189] RIP [] assfail+0x1d/0x30 [90012.197193] RSP [90012.197196] ---[ end trace ed2e349225f77763 ]--- [90015.960377] XFS (dm-44): xfs_log_force: error 5 returned. -- Best regards Arkadiusz Bubała From bfoster@redhat.com Tue May 21 09:03:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 261EC29DF8 for ; Tue, 21 May 2013 09:03:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id EAC778F804C for ; Tue, 21 May 2013 07:03:00 -0700 (PDT) X-ASG-Debug-ID: 1369144979-04bdf0422349de10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id w7Zqqza0ul7PkSvJ; Tue, 21 May 2013 07:03:00 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4LE2vs1012653 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 May 2013 10:02:57 -0400 Received: from laptop.bfoster (vpn-62-100.rdu2.redhat.com [10.10.62.100]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4LE2ttH013898 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Tue, 21 May 2013 10:02:56 -0400 Message-ID: <519B7DE9.8030604@redhat.com> Date: Tue, 21 May 2013 10:00:09 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com, bpm@sgi.com Subject: Re: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-12-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks In-Reply-To: <1369123330-9579-12-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369144980 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/21/2013 04:02 AM, Dave Chinner wrote: > From: Dave Chinner > > The limit of 25 ACL entries is arbitrary, but baked into the on-disk > format. For version 5 superblocks, increase it to the maximum nuber > of ACLs that can fit into a single xattr. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_acl.c | 31 ++++++++++++++++++------------- > fs/xfs/xfs_acl.h | 30 +++++++++++++++++++++++------- > 2 files changed, 41 insertions(+), 20 deletions(-) > ... > diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h > index 39632d9..5310a52 100644 > --- a/fs/xfs/xfs_acl.h > +++ b/fs/xfs/xfs_acl.h > @@ -22,19 +22,35 @@ struct inode; > struct posix_acl; > struct xfs_inode; > > -#define XFS_ACL_MAX_ENTRIES 25 > #define XFS_ACL_NOT_PRESENT (-1) > > /* On-disk XFS access control list structure */ > +struct xfs_acl_entry { > + __be32 ae_tag; > + __be32 ae_id; > + __be16 ae_perm; > + __be16 ae_pad; /* fill the implicit hole in the structure */ > +}; > + > struct xfs_acl { > - __be32 acl_cnt; > - struct xfs_acl_entry { > - __be32 ae_tag; > - __be32 ae_id; > - __be16 ae_perm; > - } acl_entry[XFS_ACL_MAX_ENTRIES]; > + __be32 acl_cnt; > + struct xfs_acl_entry acl_entry[0]; > }; > > +/* > + * The number of ACL entries allowed is defined by the on-disk format. > + * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it is > + * limited only by the maximum size of the xattr that stores the information. > + */ > +#define XFS_ACL_MAX_ENTRIES(mp) \ > + (xfs_sb_version_hascrc(&mp->m_sb) \ > + ? (XATTR_SIZE_MAX - sizeof(__be32) / sizeof(struct xfs_acl_entry)) \ It looks like this should be: (XATTR_SIZE_MAX - sizeof(__be32)) / sizeof(struct xfs_acl_entry) (i.e., misplaced parens) Brian > + : 25) > + > +#define XFS_ACL_SIZE(mp) \ > + (sizeof(struct xfs_acl) + \ > + sizeof(struct xfs_acl_entry) * XFS_ACL_MAX_ENTRIES((mp))) > + > /* On-disk XFS extended attribute names */ > #define SGI_ACL_FILE (unsigned char *)"SGI_ACL_FILE" > #define SGI_ACL_DEFAULT (unsigned char *)"SGI_ACL_DEFAULT" > From mlsemon35@gmail.com Tue May 21 11:21:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E74A929DF8 for ; Tue, 21 May 2013 11:21:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C46528F8040 for ; Tue, 21 May 2013 09:21:39 -0700 (PDT) X-ASG-Debug-ID: 1369153295-04cbb05fe349c110001-NocioJ Received: from mail-ie0-f181.google.com (mail-ie0-f181.google.com [209.85.223.181]) by cuda.sgi.com with ESMTP id jgdOwv4EiRvHOQvP (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 21 May 2013 09:21:35 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.181 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.181] Received: by mail-ie0-f181.google.com with SMTP id x12so2232973ief.12 for ; Tue, 21 May 2013 09:21:35 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.181] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.181] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=6jDaheqR+KU/Zdj5tG73W+TX6XNj11NOwEK7RJcIQpA=; b=h3X1xJ+3i3K/7VYqRDSrxYZL5TmCpWAn+NgWjphJ0ST9sbrw743MylQZQlbdDtf3O7 lkD6fvMhRsRxY+UjIuffvuNTzT3+QiaRuO5Quw3pOpoJlepC5YzwR+BvHQIiyHULU4m3 z262lpCLjVAkUMCFfhaDoXwfu1T7NSyJoviOUSZPtqzPnlY/vGd1bu+rWtaMSj8UHYgA 3Kf6zAKbsdc76r6oE16sWntu5QoZ3jSCemAEQPENSEydwlhIaZn6EBo0JMDdAPYSyWj8 BJTshp9NF+yU5HO0vqtn9qcW8Ewwwwpqh66SwcnaebdXHUlGgrc5e5/qugsRjnVKCfNP 51aw== X-Received: by 10.50.73.65 with SMTP id j1mr1923079igv.49.1369153295303; Tue, 21 May 2013 09:21:35 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id qr3sm26301123igb.1.2013.05.21.09.21.28 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 21 May 2013 09:21:34 -0700 (PDT) Message-ID: <519B9EF5.5060809@gmail.com> Date: Tue, 21 May 2013 12:21:09 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Lockdep message on 3.9.3 (already fixed?)... Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: Lockdep message on 3.9.3 (already fixed?)... Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f181.google.com[209.85.223.181] X-Barracuda-Start-Time: 1369153295 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131617 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi! I'm beginning to lose track of lockdep messages and feel like a new message is sneaking in there. This lockdep comes from kernel 3.9.3, which I was asked to use in order to gather DRM info. The PC was booted to a console and left to do a long 24kB/s download and default distro cron duties (slocate and such), in hopes that console inactivity, console blanking, and monitor sleep would kick up a soft oops from DRM like it does on 3.10.0-rc. This may also apply to the devel kernels, but the PC needs to be left alone for me to verify this. I've read the Dave Chinner position on stable kernels but don't know if they apply to the first stable kernel out of mainline...especially because that kernel has a lifespan of a housefly nowadays... As always, thanks for reading! Michael ================================= [ INFO: inconsistent lock state ] 3.9.3 #1 Not tainted --------------------------------- inconsistent {RECLAIM_FS-ON-R} -> {IN-RECLAIM_FS-W} usage. kswapd0/18 [HC0[0]:SC0[0]:HE1:SE1] takes: (&(&ip->i_lock)->mr_lock){++++-?}, at: [] xfs_ilock+0xff/0x15e {RECLAIM_FS-ON-R} state was registered at: [] mark_held_locks+0x80/0xcb [] lockdep_trace_alloc+0x59/0x9d [] __alloc_pages_nodemask+0x70/0x6f2 [] __get_free_pages+0x1c/0x3d [] pte_alloc_one_kernel+0x14/0x16 [] __pte_alloc_kernel+0x16/0x71 [] vmap_page_range_noflush+0x12e/0x13c [] vm_map_ram+0x3b9/0x46c [] _xfs_buf_map_pages+0x5b/0xe7 [] xfs_buf_get_map+0x67/0x13a [] xfs_buf_read_map+0x1f/0xc0 [] xfs_buf_readahead_map+0x47/0x57 [] xfs_da_reada_buf+0xaf/0xbd [] xfs_dir2_data_readahead+0x2f/0x36 [] xfs_dir_open+0x7b/0x8e [] do_dentry_open.isra.16+0xf8/0x1d7 [] finish_open+0x1b/0x27 [] do_last+0x44d/0xc68 [] path_openat+0xa4/0x3cb [] do_filp_open+0x2b/0x70 [] do_sys_open+0xf5/0x1b5 [] sys_openat+0x26/0x28 [] syscall_call+0x7/0xb irq event stamp: 266081 hardirqs last enabled at (266081): [] _raw_spin_unlock_irq+0x27/0x2b hardirqs last disabled at (266080): [] _raw_spin_lock_irq+0x14/0x4b softirqs last enabled at (264480): [] __do_softirq+0x125/0x1bc softirqs last disabled at (264455): [] irq_exit+0x63/0x65 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&(&ip->i_lock)->mr_lock); lock(&(&ip->i_lock)->mr_lock); *** DEADLOCK *** 3 locks held by kswapd0/18: #0: (shrinker_rwsem){++++..}, at: [] shrink_slab+0x2f/0x29b #1: (&type->s_umount_key#18){++++.+}, at: [] grab_super_passive+0x38/0x72 #2: (&pag->pag_ici_reclaim_lock){+.+...}, at: [] xfs_reclaim_inodes_ag+0xb4/0x37f stack backtrace: Pid: 18, comm: kswapd0 Not tainted 3.9.3 #1 Call Trace: [] print_usage_bug+0x1dc/0x1e6 [] ? check_usage_backwards+0xea/0xea [] mark_lock+0x245/0x25c [] __lock_acquire+0x5da/0x1557 [] ? finish_task_switch.constprop.80+0x3b/0xb9 [] ? __schedule+0x2ae/0x5e5 [] lock_acquire+0x7f/0xdc [] ? xfs_ilock+0xff/0x15e [] down_write_nested+0x41/0x61 [] ? xfs_ilock+0xff/0x15e [] xfs_ilock+0xff/0x15e [] xfs_reclaim_inode+0xf4/0x30e [] xfs_reclaim_inodes_ag+0x26a/0x37f [] ? xfs_reclaim_inodes_ag+0xdd/0x37f [] ? trace_hardirqs_on_caller+0xe8/0x160 [] ? trace_hardirqs_on+0xb/0xd [] ? try_to_wake_up+0xe1/0x122 [] ? wake_up_process+0x1f/0x33 [] ? xfs_ail_push+0x68/0x6f [] ? xfs_ail_push_all+0x53/0x6a [] xfs_reclaim_inodes_nr+0x2d/0x33 [] xfs_fs_free_cached_objects+0x13/0x15 [] prune_super+0xd1/0x15c [] shrink_slab+0x143/0x29b [] kswapd+0x54b/0x794 [] ? try_to_free_pages+0x61f/0x61f [] kthread+0x9e/0xa0 [] ret_from_kernel_thread+0x1b/0x28 [] ? __kthread_parkme+0x5b/0x5b From bpm@sgi.com Tue May 21 11:26:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 60A4F29DF8 for ; Tue, 21 May 2013 11:26:48 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2E622304043; Tue, 21 May 2013 09:26:48 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id E17CD500B5E; Tue, 21 May 2013 11:26:47 -0500 (CDT) Date: Tue, 21 May 2013 11:26:47 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 Message-ID: <20130521162647.GD19505@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Dave, On Tue, May 21, 2013 at 06:01:59PM +1000, Dave Chinner wrote: > This is my current kernel bug fix patch series. I've updated it > against a current xfsdev tree, and contains all the fixes mentioned > in the "fixes for 3.10-rc2 (updated)" thread. The first 7 patches > are patches from that series. The last 4 are new patches. > > The first new patch stops CRC enabled filesystems from spamming the > log. It currently emits an "Experimental" warning ever time the > superblock is written, which is typically every 30s. > > The second path ("rework remote attr CRCs") is the changes I > mentioned in the "fixes for 3.10-rc2 (updated)" thread. The code is > far more robust as a result of these changes, and I think we really > need to change the format as done in this patch. Once we have > decided on the way forward, I'll port this to userspace. > > The third patch fixes a remote symlink problem - I didn't hit this > until I'd redone the remote attr CRCs and the 1k block size > filesystem testing made it passed the attribute tests it was failing > on. > > Finally, the last patch is another on-disk format change - one that > removes the 25 entry limit on ACLs. It doesn't invalidate anything > that is already on disk, just allows ACLs on v5 superblock > filesystems to store more than 25 ACLs in an xattr. In fact, it > allows (65536 - 4) / 12 = 5461 entries to be stored in a single > ACL, so I don't see anyone running out on v5 superblocks.... > > Thoughts, comments? I'll look into these but I am concerned that we're starting to get into 3.11 territory. We'll see how the reviews go. FWIW I have no objection to changing the on-disk format at any time until the 'experimental' tag is removed. Regards, Ben From bpm@sgi.com Tue May 21 13:26:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6063329DF8 for ; Tue, 21 May 2013 13:26:33 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 38CEE8F8052; Tue, 21 May 2013 11:26:30 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 17039500B5F; Tue, 21 May 2013 13:26:30 -0500 (CDT) Date: Tue, 21 May 2013 13:26:30 -0500 From: Ben Myers To: Arkadiusz =?utf-8?Q?Buba=C5=82a?= Cc: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 Message-ID: <20130521182630.GJ20028@sgi.com> References: <519B6738.9030603@open-e.com> <519B6915.2010407@open-e.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <519B6915.2010407@open-e.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hey Arkadiusz, On Tue, May 21, 2013 at 02:31:17PM +0200, Arkadiusz Bubała wrote: > On 21.05.2013 14:23, Arkadiusz Bubała wrote: > >Hello, > >I've got a call trace which should be fixed by "drop buffer io > >reference when a bad bio is built" patch > >(http://patchwork.xfs.org/patch/3956/). Error occured on already > >patched Linux kernel 3.2.42. > > > >Test environment consist two machines target and initiator. > >First machine works as target with QLogic Corp. ISP2432-based 4Gb > >Fibre Channel device. Storage is placed on two KINGSTON SNV425S > >SSD working as RAID0 array. RAID is managed by LSI MegaRAID SAS > >1068 controller. > >Second machine works as initiator with the same QLogic card. > > > >After few days of running test script I got following call trace > >and XFS stopped working. > > > Sorry I provided incomplete dmesg logs. These should provide more > information: > > [90011.884812] XFS (dm-46): metadata I/O error: block 0x1 ("xfs_trans_read_buf") error 5 buf count 512 > [90011.941376] XFS (dm-46): xlog_recover_check_summary agf read failed agno 0 error 5 > [90011.987890] XFS (dm-46): metadata I/O error: block 0x2 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.044179] XFS (dm-46): xlog_recover_check_summary agi read failed agno 0 error 5 > [90012.092176] XFS (dm-46): metadata I/O error: block 0x7d0001 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.150379] XFS (dm-46): xlog_recover_check_summary agf read failed agno 1 error 5 > [90012.196776] XFS (dm-46): metadata I/O error: block 0x7d0002 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.196780] XFS (dm-46): xlog_recover_check_summary agi read failed agno 1 error 5 > [90012.196791] XFS (dm-46): metadata I/O error: block 0xfa0001 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.196795] XFS (dm-46): xlog_recover_check_summary agf read failed agno 2 error 5 > [90012.196802] XFS (dm-46): metadata I/O error: block 0xfa0002 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.196806] XFS (dm-46): xlog_recover_check_summary agi read failed agno 2 error 5 > [90012.196813] XFS (dm-46): metadata I/O error: block 0x1770001 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.196817] XFS (dm-46): xlog_recover_check_summary agf read failed agno 3 error 5 > [90012.196823] XFS (dm-46): metadata I/O error: block 0x1770002 ("xfs_trans_read_buf") error 5 buf count 512 > [90012.196827] XFS (dm-46): xlog_recover_check_summary agi read failed agno 3 error 5 > [90012.196843] XFS (dm-46): metadata I/O error: block 0x40 ("xfs_trans_read_buf") error 5 buf count 8192 > [90012.196847] XFS (dm-46): xfs_imap_to_bp: xfs_trans_read_buf() returned error 5. > [90012.196852] XFS (dm-46): failed to read root inode > [90012.196963] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 Any 'xlog_space_left' messages as were reported with the commit you mentioned? Have you attempted to backport the patch yet? Regards, Ben From bpm@sgi.com Tue May 21 13:35:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1A65329DF8 for ; Tue, 21 May 2013 13:35:48 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 95A71AC002; Tue, 21 May 2013 11:35:44 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 1E346500B5E; Tue, 21 May 2013 13:35:44 -0500 (CDT) Date: Tue, 21 May 2013 13:35:44 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 01/11] xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Message-ID: <20130521183544.GK20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-2-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-2-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:00PM +1000, Dave Chinner wrote: > From: Dave Chinner > > Lockdep reports: > > ============================================= > [ INFO: possible recursive locking detected ] > 3.9.0+ #3 Not tainted > --------------------------------------------- > setquota/28368 is trying to acquire lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > but task is already holding lock: > (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 > > from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be > allocated. > > xfs_qm_scall_setqlim() is starting a transaction and then not > passing it into xfs_qm_dqet() and so it starts it's own transaction > when allocating the dquot. Splat! > > Fix this by not allocating the dquot in xfs_qm_scall_setqlim() > inside the setqlim transaction. This requires getting the dquot > first (and allocating it if necessary) then dropping and relocking > the dquot before joining it to the setqlim transaction. > > Reported-by: Michael L. Semon > Signed-off-by: Dave Chinner Looks good. Reviewed-by: Ben Myers From david@fromorbit.com Tue May 21 15:24:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DAD6929DF8 for ; Tue, 21 May 2013 15:24:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C94C38F8040 for ; Tue, 21 May 2013 13:24:50 -0700 (PDT) X-ASG-Debug-ID: 1369167888-04cbb05fe34ae600001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id oHBH2nKJbxjgZzIl for ; Tue, 21 May 2013 13:24:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAHLXm1F5LNn3/2dsb2JhbABagwi8aIUcBAGBChd0giMBAQU6HCMQCAMOCgklDwUlAyETiAy7cRaNTRqBHQeDVAOXN5FBgyEqgS0 Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 05:54:47 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uet6z-0002pH-O8; Wed, 22 May 2013 06:24:45 +1000 Date: Wed, 22 May 2013 06:24:45 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 Message-ID: <20130521202445.GO24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <20130521162647.GD19505@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521162647.GD19505@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369167888 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131633 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 11:26:47AM -0500, Ben Myers wrote: > Hi Dave, > > On Tue, May 21, 2013 at 06:01:59PM +1000, Dave Chinner wrote: > > This is my current kernel bug fix patch series. I've updated it > > against a current xfsdev tree, and contains all the fixes mentioned > > in the "fixes for 3.10-rc2 (updated)" thread. The first 7 patches > > are patches from that series. The last 4 are new patches. > > > > The first new patch stops CRC enabled filesystems from spamming the > > log. It currently emits an "Experimental" warning ever time the > > superblock is written, which is typically every 30s. > > > > The second path ("rework remote attr CRCs") is the changes I > > mentioned in the "fixes for 3.10-rc2 (updated)" thread. The code is > > far more robust as a result of these changes, and I think we really > > need to change the format as done in this patch. Once we have > > decided on the way forward, I'll port this to userspace. > > > > The third patch fixes a remote symlink problem - I didn't hit this > > until I'd redone the remote attr CRCs and the 1k block size > > filesystem testing made it passed the attribute tests it was failing > > on. > > > > Finally, the last patch is another on-disk format change - one that > > removes the 25 entry limit on ACLs. It doesn't invalidate anything > > that is already on disk, just allows ACLs on v5 superblock > > filesystems to store more than 25 ACLs in an xattr. In fact, it > > allows (65536 - 4) / 12 = 5461 entries to be stored in a single > > ACL, so I don't see anyone running out on v5 superblocks.... > > > > Thoughts, comments? > > I'll look into these but I am concerned that we're starting to get into 3.11 > territory. The moment we release the first kernel with the format in it, we need to use feature bits for on-disk format changes, experimental tag or not. Hence IMO this needs to be fixed before an initial release. It's not a huge change from a code perspective, and it's a lot more reliable in my testing.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 21 15:27:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A2D1829DF8 for ; Tue, 21 May 2013 15:27:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4C1C8AC003 for ; Tue, 21 May 2013 13:27:17 -0700 (PDT) X-ASG-Debug-ID: 1369168035-04bdf042264bc9e0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id kUrdOWFiNfKs7CMB for ; Tue, 21 May 2013 13:27:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAHLXm1F5LNn3/2dsb2JhbABagwi8aIUcBAGBChd0giMBAQUnExwjEAgDDgcDCSUPBSUDIROIDLtxFo1MARqBHQeDVAOXN5FBgyEqgSwBHw Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 05:57:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uet9O-0002pX-Ky; Wed, 22 May 2013 06:27:14 +1000 Date: Wed, 22 May 2013 06:27:14 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com, bpm@sgi.com Subject: Re: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks Message-ID: <20130521202714.GP24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 11/11] xfs: increase number of ACL entries for V5 superblocks References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-12-git-send-email-david@fromorbit.com> <519B7DE9.8030604@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519B7DE9.8030604@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369168035 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131633 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 10:00:09AM -0400, Brian Foster wrote: > On 05/21/2013 04:02 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > The limit of 25 ACL entries is arbitrary, but baked into the on-disk > > format. For version 5 superblocks, increase it to the maximum nuber > > of ACLs that can fit into a single xattr. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_acl.c | 31 ++++++++++++++++++------------- > > fs/xfs/xfs_acl.h | 30 +++++++++++++++++++++++------- > > 2 files changed, 41 insertions(+), 20 deletions(-) > > > ... > > diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h > > index 39632d9..5310a52 100644 > > --- a/fs/xfs/xfs_acl.h > > +++ b/fs/xfs/xfs_acl.h > > @@ -22,19 +22,35 @@ struct inode; > > struct posix_acl; > > struct xfs_inode; > > > > -#define XFS_ACL_MAX_ENTRIES 25 > > #define XFS_ACL_NOT_PRESENT (-1) > > > > /* On-disk XFS access control list structure */ > > +struct xfs_acl_entry { > > + __be32 ae_tag; > > + __be32 ae_id; > > + __be16 ae_perm; > > + __be16 ae_pad; /* fill the implicit hole in the structure */ > > +}; > > + > > struct xfs_acl { > > - __be32 acl_cnt; > > - struct xfs_acl_entry { > > - __be32 ae_tag; > > - __be32 ae_id; > > - __be16 ae_perm; > > - } acl_entry[XFS_ACL_MAX_ENTRIES]; > > + __be32 acl_cnt; > > + struct xfs_acl_entry acl_entry[0]; > > }; > > > > +/* > > + * The number of ACL entries allowed is defined by the on-disk format. > > + * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it is > > + * limited only by the maximum size of the xattr that stores the information. > > + */ > > +#define XFS_ACL_MAX_ENTRIES(mp) \ > > + (xfs_sb_version_hascrc(&mp->m_sb) \ > > + ? (XATTR_SIZE_MAX - sizeof(__be32) / sizeof(struct xfs_acl_entry)) \ > > It looks like this should be: > > (XATTR_SIZE_MAX - sizeof(__be32)) / sizeof(struct xfs_acl_entry) > > (i.e., misplaced parens) Yup, good catch. Cheers, Dave. -- Dave Chinner david@fromorbit.com From bpm@sgi.com Tue May 21 15:52:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 73BAD29DF8 for ; Tue, 21 May 2013 15:52:50 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id F314DAC002; Tue, 21 May 2013 13:52:49 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id A8818500B5E; Tue, 21 May 2013 15:52:49 -0500 (CDT) Date: Tue, 21 May 2013 15:52:49 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 Message-ID: <20130521205249.GL20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <20130521162647.GD19505@sgi.com> <20130521202445.GO24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521202445.GO24543@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) Hey, On Wed, May 22, 2013 at 06:24:45AM +1000, Dave Chinner wrote: > On Tue, May 21, 2013 at 11:26:47AM -0500, Ben Myers wrote: > > Hi Dave, > > > > On Tue, May 21, 2013 at 06:01:59PM +1000, Dave Chinner wrote: > > > This is my current kernel bug fix patch series. I've updated it > > > against a current xfsdev tree, and contains all the fixes mentioned > > > in the "fixes for 3.10-rc2 (updated)" thread. The first 7 patches > > > are patches from that series. The last 4 are new patches. > > > > > > The first new patch stops CRC enabled filesystems from spamming the > > > log. It currently emits an "Experimental" warning ever time the > > > superblock is written, which is typically every 30s. > > > > > > The second path ("rework remote attr CRCs") is the changes I > > > mentioned in the "fixes for 3.10-rc2 (updated)" thread. The code is > > > far more robust as a result of these changes, and I think we really > > > need to change the format as done in this patch. Once we have > > > decided on the way forward, I'll port this to userspace. > > > > > > The third patch fixes a remote symlink problem - I didn't hit this > > > until I'd redone the remote attr CRCs and the 1k block size > > > filesystem testing made it passed the attribute tests it was failing > > > on. > > > > > > Finally, the last patch is another on-disk format change - one that > > > removes the 25 entry limit on ACLs. It doesn't invalidate anything > > > that is already on disk, just allows ACLs on v5 superblock > > > filesystems to store more than 25 ACLs in an xattr. In fact, it > > > allows (65536 - 4) / 12 = 5461 entries to be stored in a single > > > ACL, so I don't see anyone running out on v5 superblocks.... > > > > > > Thoughts, comments? > > > > I'll look into these but I am concerned that we're starting to get into 3.11 > > territory. > > The moment we release the first kernel with the format in it, we > need to use feature bits for on-disk format changes, experimental > tag or not. Hence IMO this needs to be fixed before an initial > release. There's plenty of bits to go around. ;) > It's not a huge change from a code perspective, and it's a lot more > reliable in my testing.... I'm just a bit leery of a redesign at this late juncture. We always seem to get into trouble at the last minute... Another option is to revert just the xattr crc support and slap it back in once it has stablized after the release, but we need to flip a bit for that too... Anyway, I need to look your proposed code to see what's what. Seems like xattrs might be one area where we could use some work in xfstests? -Ben From JBacik@fusionio.com Tue May 21 15:59:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DF71029DF8 for ; Tue, 21 May 2013 15:59:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5B93BAC002 for ; Tue, 21 May 2013 13:59:13 -0700 (PDT) X-ASG-Debug-ID: 1369169951-04cb6c10c2152220001-NocioJ Received: from dkim2.fusionio.com (dkim2.fusionio.com [66.114.96.54]) by cuda.sgi.com with ESMTP id dbEPZFDwS2DMHlVy (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 May 2013 13:59:11 -0700 (PDT) X-Barracuda-Envelope-From: JBacik@fusionio.com X-Barracuda-Apparent-Source-IP: 66.114.96.54 Received: from mx1.fusionio.com (unknown [10.101.1.160]) by dkim2.fusionio.com (Postfix) with ESMTP id F29609A040D for ; Tue, 21 May 2013 14:59:10 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fusionio.com; s=default; t=1369169951; bh=cPDtH3xTgisCw4VJGKZ+ALH9bGLFwFPu8F1wgPV91E8=; h=From:To:Subject:Date; b=MMjkAPh4d32Xn+O+Ajbg45QesSxbc7EjrbidaAzrEvUVJCflfemC7BgphXa82sgSq VEc8eb1G8GQxebeUbERwnSU/Z7U5Bno/rDjBurlm+EmQKaxaI1FjOM9k72awoliHwG P681sn2xIFF0PcrUFeVUKwZxFn0zIBrWO6AD1Sdw= Received: from mail1.int.fusionio.com (mail1.int.fusionio.com [10.101.1.21]) by mx1.fusionio.com with ESMTP id W2VUJREjJYqKR67i (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Tue, 21 May 2013 14:59:10 -0600 (MDT) Received: from localhost (76.182.72.146) by mail.fusionio.com (10.101.1.19) with Microsoft SMTP Server (TLS) id 8.3.83.0; Tue, 21 May 2013 14:59:09 -0600 From: Josef Bacik To: , Subject: [PATCH] xfstests: btrfs 308: regression test for btrfs send V2 Date: Tue, 21 May 2013 16:59:07 -0400 X-ASG-Orig-Subj: [PATCH] xfstests: btrfs 308: regression test for btrfs send V2 Message-ID: <1369169947-13748-1-git-send-email-jbacik@fusionio.com> X-Mailer: git-send-email 1.7.7.6 MIME-Version: 1.0 Content-Type: text/plain X-Virus-Scanned: by bsmtpd at fusionio.com X-Barracuda-Connect: dkim2.fusionio.com[66.114.96.54] X-Barracuda-Start-Time: 1369169951 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131635 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature I'm not sure how the numbering is supposed to work now that we've split everything out so I'm just going with the next number in the directory. This is a regression test for btrfs send, we had a problem where we'd try to send a file that had been deleted in the source snapshot. This is just to make sure we don't have the same problem in the future. Thanks, Signed-off-by: Josef Bacik --- V1->V2: -added a -x optoin to multi_open_unlink to make it not check for existing files -made all the normal output go to $seqres.full src/multi_open_unlink.c | 12 +++++-- tests/btrfs/308 | 75 +++++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/308.out | 2 + tests/btrfs/group | 1 + 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 tests/btrfs/308 create mode 100644 tests/btrfs/308.out diff --git a/src/multi_open_unlink.c b/src/multi_open_unlink.c index 51a405e..dfce974 100644 --- a/src/multi_open_unlink.c +++ b/src/multi_open_unlink.c @@ -39,7 +39,7 @@ void usage(char *prog) { - fprintf(stderr, "Usage: %s [-e num-eas] [-f path_prefix] [-n num_files] [-s sleep_time] [-v ea-valuesize] \n", prog); + fprintf(stderr, "Usage: %s [-e num-eas] [-f path_prefix] [-n num_files] [-s sleep_time] [-v ea-valuesize] [-x] \n", prog); exit(1); } @@ -54,9 +54,10 @@ main(int argc, char *argv[]) int num_eas = 0; int value_size = ATTR_MAX_VALUELEN; int fd = -1; + int open_flags = O_RDWR|O_CREAT|O_EXCL; int i,j,c; - while ((c = getopt(argc, argv, "e:f:n:s:v:")) != EOF) { + while ((c = getopt(argc, argv, "e:f:n:s:v:x")) != EOF) { switch (c) { case 'e': /* create eas */ num_eas = atoi(optarg); @@ -73,6 +74,9 @@ main(int argc, char *argv[]) case 'v': /* value size on eas */ value_size = atoi(optarg); break; + case 'x': /* don't use O_EXCL, for use with exsint files */ + open_flags &= ~O_EXCL; + break; case '?': usage(prog); } @@ -83,12 +87,12 @@ main(int argc, char *argv[]) sprintf(path, "%s.%d", given_path, i+1); /* if file already exists then error out */ - if (access(path, F_OK) == 0) { + if ((open_flags & O_EXCL) && access(path, F_OK) == 0) { fprintf(stderr, "%s: file \"%s\" already exists\n", prog, path); return 1; } - fd = open(path, O_RDWR|O_CREAT|O_EXCL, 0666); + fd = open(path, open_flags, 0666); if (fd == -1) { fprintf(stderr, "%s: failed to create \"%s\": %s\n", prog, path, strerror(errno)); return 1; diff --git a/tests/btrfs/308 b/tests/btrfs/308 new file mode 100644 index 0000000..52bf1e2 --- /dev/null +++ b/tests/btrfs/308 @@ -0,0 +1,75 @@ +#! /bin/bash +# FS QA Test No. btrfs/308 +# +# btrfs send ESTALE regression test, kernel.org bugzilla 57491 +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Fusion IO. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +_cleanup() +{ + rm -f $tmp.* +} + +trap "_cleanup ; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux +_require_scratch + +_scratch_mkfs > /dev/null 2>&1 +_scratch_mount + +dd if=/dev/zero of=$SCRATCH_MNT/foo.1 bs=1M count=10 > $seqres.full 2>&1 +sync +$BTRFS_UTIL_PROG subvol snap -r $SCRATCH_MNT $SCRATCH_MNT/snap > $seqres.full 2>&1 +dd if=/dev/zero of=$SCRATCH_MNT/foo.1 bs=1M count=10 oflag=append > $seqres.full 2>&1 +sync + +# We need to hold the file open, tail -f makes the output file look weird so +# here is this awful hack to get around that +$here/src/multi_open_unlink -x -n 1 -f $SCRATCH_MNT/foo -s 90 & + +# need this to give multi_open_unlink enough time to unlink the file before we +# snapshot +sleep 5 + +$BTRFS_UTIL_PROG subvol snap -r $SCRATCH_MNT $SCRATCH_MNT/snap1 > $seqres.full 2>&1 +$BTRFS_UTIL_PROG send -f /dev/null -p $SCRATCH_MNT/snap $SCRATCH_MNT/snap1 > $seqres.full 2>&1 +if [ $? -ne 0 ] +then + echo "send failed" +fi +kill $! + +echo "Silence is golden" +status=0 ; exit diff --git a/tests/btrfs/308.out b/tests/btrfs/308.out new file mode 100644 index 0000000..a731eaa --- /dev/null +++ b/tests/btrfs/308.out @@ -0,0 +1,2 @@ +QA output created by 308 +Silence is golden diff --git a/tests/btrfs/group b/tests/btrfs/group index bc6c256..666054b 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -9,3 +9,4 @@ 276 auto rw metadata 284 auto 307 auto quick +308 auto quick -- 1.7.7.6 From bpm@sgi.com Tue May 21 15:59:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A2EF529E07 for ; Tue, 21 May 2013 15:59:25 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 30096AC002; Tue, 21 May 2013 13:59:25 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id E826D500B5E; Tue, 21 May 2013 15:59:24 -0500 (CDT) Date: Tue, 21 May 2013 15:59:24 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 03/11] xfs: remote attribute read too short Message-ID: <20130521205924.GM20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-4-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-4-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:02PM +1000, Dave Chinner wrote: > From: Dave Chinner > > Reading a maximally size remote attribute fails when CRCs are > enabled with this verification error: > > XFS (vdb): remote attribute header does not match required off/len/owner) > > There are two reasons for this, the first being that the > length of the buffer being read is determined from the > args->rmtblkcnt which doesn't take into account CRC headers. Hence > the mapped length ends up being too short and so we need to > calculate it directly from the value length. > > The second is that the byte count of valid data within a buffer is > capped by the length of the data and so doesn't take into account > that the buffer might be longer due to headers. Hence we need to > calculate the data space in the buffer first before calculating the > actual byte count of data. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_attr_remote.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > index aad95b0..bcdc07c 100644 > --- a/fs/xfs/xfs_attr_remote.c > +++ b/fs/xfs/xfs_attr_remote.c > @@ -52,9 +52,11 @@ xfs_attr3_rmt_blocks( > struct xfs_mount *mp, > int attrlen) > { > - int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, > - mp->m_sb.sb_blocksize); > - return (attrlen + buflen - 1) / buflen; > + if (xfs_sb_version_hascrc(&mp->m_sb)) { > + int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > + return (attrlen + buflen - 1) / buflen; > + } > + return XFS_B_TO_FSB(mp, attrlen); xfs_attr_rmtval_set, xfs_attr3_rmt_blocks, and XFS_ATTR3_RMT_BUF_SPACE all have checks for crcs on the superblock. It's like I'm seeing stars. > } > > static bool > @@ -206,8 +208,9 @@ xfs_attr_rmtval_get( > > while (valuelen > 0) { > nmap = ATTR_RMTVALUE_MAPSIZE; > + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); > error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, > - args->rmtblkcnt, map, &nmap, > + blkcnt, map, &nmap, Isn't blkcnt wrong on the 2nd or greater iteration of this loop? Looks like an old bug. > XFS_BMAPI_ATTRFORK); > if (error) > return error; > @@ -227,8 +230,8 @@ xfs_attr_rmtval_get( > if (error) > return error; > > - byte_cnt = min_t(int, valuelen, BBTOB(bp->b_length)); > - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, byte_cnt); > + byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); > + byte_cnt = min_t(int, valuelen, byte_cnt); And now byte_cnt reflects the number of bytes in the mapping, less the size of a header.. Reviewed-by: Ben Myers From david@fromorbit.com Tue May 21 16:27:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7E30E29DF8 for ; Tue, 21 May 2013 16:27:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6DF5F304032 for ; Tue, 21 May 2013 14:27:27 -0700 (PDT) X-ASG-Debug-ID: 1369171642-04cbb05fe34b31d0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 8kdztrnsqSaePWPI for ; Tue, 21 May 2013 14:27:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAKblm1F5LNn3/2dsb2JhbABagwi8dIUcBAGBChd0giMBAQQBOhwjBQsIAw4KCSUPBSUDIROIBwW7bRaNTRqBHQeDVAOXN5FBgyEqgS0 Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 06:57:21 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ueu5X-0002wJ-T6; Wed, 22 May 2013 07:27:19 +1000 Date: Wed, 22 May 2013 07:27:19 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 Message-ID: <20130521212719.GQ24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <20130521162647.GD19505@sgi.com> <20130521202445.GO24543@dastard> <20130521205249.GL20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521205249.GL20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369171642 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131637 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 03:52:49PM -0500, Ben Myers wrote: > Hey, > > On Wed, May 22, 2013 at 06:24:45AM +1000, Dave Chinner wrote: > > On Tue, May 21, 2013 at 11:26:47AM -0500, Ben Myers wrote: > > > Hi Dave, > > > > > > On Tue, May 21, 2013 at 06:01:59PM +1000, Dave Chinner wrote: > > > > This is my current kernel bug fix patch series. I've updated it > > > > against a current xfsdev tree, and contains all the fixes mentioned > > > > in the "fixes for 3.10-rc2 (updated)" thread. The first 7 patches > > > > are patches from that series. The last 4 are new patches. > > > > > > > > The first new patch stops CRC enabled filesystems from spamming the > > > > log. It currently emits an "Experimental" warning ever time the > > > > superblock is written, which is typically every 30s. > > > > > > > > The second path ("rework remote attr CRCs") is the changes I > > > > mentioned in the "fixes for 3.10-rc2 (updated)" thread. The code is > > > > far more robust as a result of these changes, and I think we really > > > > need to change the format as done in this patch. Once we have > > > > decided on the way forward, I'll port this to userspace. > > > > > > > > The third patch fixes a remote symlink problem - I didn't hit this > > > > until I'd redone the remote attr CRCs and the 1k block size > > > > filesystem testing made it passed the attribute tests it was failing > > > > on. > > > > > > > > Finally, the last patch is another on-disk format change - one that > > > > removes the 25 entry limit on ACLs. It doesn't invalidate anything > > > > that is already on disk, just allows ACLs on v5 superblock > > > > filesystems to store more than 25 ACLs in an xattr. In fact, it > > > > allows (65536 - 4) / 12 = 5461 entries to be stored in a single > > > > ACL, so I don't see anyone running out on v5 superblocks.... > > > > > > > > Thoughts, comments? > > > > > > I'll look into these but I am concerned that we're starting to get into 3.11 > > > territory. > > > > The moment we release the first kernel with the format in it, we > > need to use feature bits for on-disk format changes, experimental > > tag or not. Hence IMO this needs to be fixed before an initial > > release. > > There's plenty of bits to go around. ;) Sure, but it's unnecessary complexity. > > It's not a huge change from a code perspective, and it's a lot more > > reliable in my testing.... > > I'm just a bit leery of a redesign at this late juncture. We always seem to > get into trouble at the last minute... Another option is to revert just the > xattr crc support and slap it back in once it has stablized after the release, > but we need to flip a bit for that too... Anyway, I need to look your proposed > code to see what's what. > > Seems like xattrs might be one area where we could use some work in xfstests? Not really - it's getting the xfstests xattr tests to pass that have lead to this. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 21 16:32:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 12BD529DF8 for ; Tue, 21 May 2013 16:32:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B369CAC003 for ; Tue, 21 May 2013 14:32:17 -0700 (PDT) X-ASG-Debug-ID: 1369171936-04bdf042234c0e20001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id gdA4hMBhEd6W3YDt for ; Tue, 21 May 2013 14:32:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAM3mm1F5LNn3/2dsb2JhbABagwi8dIUcBAGBChd0giMBAQQBJxMcIwULCAMOCgklDwUlAyETiAcFu2kWjWeBHQeDVAOXN5FBgyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 07:02:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UeuAJ-0002x6-4R; Wed, 22 May 2013 07:32:15 +1000 Date: Wed, 22 May 2013 07:32:15 +1000 From: Dave Chinner To: Josef Bacik Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: btrfs 308: regression test for btrfs send V2 Message-ID: <20130521213215.GR24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs 308: regression test for btrfs send V2 References: <1369169947-13748-1-git-send-email-jbacik@fusionio.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369169947-13748-1-git-send-email-jbacik@fusionio.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369171936 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131637 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 04:59:07PM -0400, Josef Bacik wrote: > I'm not sure how the numbering is supposed to work now that we've split > everything out so I'm just going with the next number in the directory. Number them however you want - numbers are unique within a subdirectory. > This is > a regression test for btrfs send, we had a problem where we'd try to send a file > that had been deleted in the source snapshot. This is just to make sure we > don't have the same problem in the future. Thanks, > > Signed-off-by: Josef Bacik > --- > V1->V2: > -added a -x optoin to multi_open_unlink to make it not check for existing > files > -made all the normal output go to $seqres.full .... > @@ -73,6 +74,9 @@ main(int argc, char *argv[]) > case 'v': /* value size on eas */ > value_size = atoi(optarg); > break; > + case 'x': /* don't use O_EXCL, for use with exsint files */ Typo - "exsint" ..... > +trap "_cleanup ; exit \$status" 0 1 2 3 15 > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# real QA test starts here > +_supported_fs btrfs > +_supported_os Linux > +_require_scratch > + > +_scratch_mkfs > /dev/null 2>&1 > +_scratch_mount You probably want to remove $seqres.full here, so that on failure only the output of the current run is in the file. Other than those two minor things, it looks good. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From bpm@sgi.com Tue May 21 17:31:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id ED5D929DF8 for ; Tue, 21 May 2013 17:31:12 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7D722AC003; Tue, 21 May 2013 15:31:09 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 33C2D500B62; Tue, 21 May 2013 17:31:09 -0500 (CDT) Date: Tue, 21 May 2013 17:31:09 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/11] xfs: remote attribute tail zeroing does too much Message-ID: <20130521223109.GN20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-5-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-5-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:03PM +1000, Dave Chinner wrote: > From: Dave Chinner > > When an attribute data does not fill then entire remote block, we > zero the remaining part of the buffer. This, however, needs to take > into account that the buffer has a header, and so the offset where > zeroing starts and the length of zeroing need to take this into > account. Otherwise we end up with zeros over the end of the > attribute value when CRCs are enabled. > > While there, make sure we only ask to map an extent that covers the > remaining range of the attribute, rather than asking every time for > the full length of remote data. If the remote attribute blocks are > contiguous with other parts of the attribute tree, it will map those > blocks as well and we can potentially zero them incorrectly. We can > also get buffer size mistmatches when trying to read or remove the > remote attribute, and this can lead to not finding the correct > buffer when looking it up in cache. > > Signed-off-by: Dave Chinner You fixed the bug I mentioned in the last review. Beaten. This looks ok. From the looks of things we might consider cleanup of who is setting rmtblkcnt in the future. It is getting to be confusing. Reviewed-by: Ben Myers From davej@redhat.com Tue May 21 17:53:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D2B5529DF8 for ; Tue, 21 May 2013 17:53:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C32BA304039 for ; Tue, 21 May 2013 15:53:02 -0700 (PDT) X-ASG-Debug-ID: 1369176781-04cb6c10b8158bc0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Ju0sd5cpxFIDCEh6 for ; Tue, 21 May 2013 15:53:02 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4LMr1nR006132 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 May 2013 18:53:01 -0400 Received: from gelk.kernelslacker.org ([10.3.113.18]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4LMr0UI013630 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 21 May 2013 18:53:01 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4LMqwd0012975; Tue, 21 May 2013 18:52:58 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4LMqvo6012974; Tue, 21 May 2013 18:52:57 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 21 May 2013 18:52:57 -0400 From: Dave Jones To: Linux Kernel Cc: xfs@oss.sgi.com Subject: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130521225257.GA12713@redhat.com> X-ASG-Orig-Subj: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Linux Kernel , xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369176781 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 [ 464.210598] XFS: Assertion failed: (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0, file: fs/xfs/xfs_iops.c, line: 719 [ 464.235108] ------------[ cut here ]------------ [ 464.240898] kernel BUG at fs/xfs/xfs_message.c:108! [ 464.247024] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC [ 464.254763] Modules linked in: hidp bnep af_key can_bcm caif_socket caif rose netrom phonet af_rxrpc rfcomm llc2 bluetooth can_raw pppoe can pppox ppp_generic slhc nfnetlink decnet scsi_transport_iscsi irda appletalk ipx crc_ccitt p8023 x25 nfc rds psnap p8022 llc rfkill ipt_ULOG atm ax25 nfsv3 nfs_acl nfs lockd sunrpc fscache xfs libcrc32c snd_hda_codec_realtek snd_hda_codec_hdmi microcode pcspkr snd_hda_intel snd_hda_codec snd_hwdep snd_seq e1000e snd_seq_device snd_pcm ptp snd_page_alloc pps_core snd_timer snd soundcore i915 i2c_algo_bit drm_kms_helper drm i2c_core video [ 464.320028] CPU: 3 PID: 26139 Comm: trinity-child3 Not tainted 3.10.0-rc2+ #1 [ 464.348866] task: ffff880240858000 ti: ffff88020527e000 task.ti: ffff88020527e000 [ 464.358249] RIP: 0010:[] [] assfail+0x22/0x30 [xfs] [ 464.368418] RSP: 0018:ffff88020527fdd0 EFLAGS: 00010282 [ 464.375069] RAX: 00000000000000cd RBX: ffff880215ff8840 RCX: 0000000000000006 [ 464.384021] RDX: 00000000000044a0 RSI: ffff880240858758 RDI: ffff880240858000 [ 464.392977] RBP: ffff88020527fdd0 R08: 0000000000000000 R09: 0000000000000000 [ 464.401932] R10: 0000000000000001 R11: 0000000000000001 R12: ffff88020527fe90 [ 464.410877] R13: ffff880240bc0000 R14: 0000000000000000 R15: 0000000000000000 [ 464.419829] FS: 00007ffec576d740(0000) GS:ffff880244e00000(0000) knlGS:0000000000000000 [ 464.429972] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 464.437192] CR2: 00000000021c0ca8 CR3: 000000020326a000 CR4: 00000000001407e0 [ 464.446124] DR0: 0000000041d84849 DR1: 0000000000000000 DR2: 0000000000000000 [ 464.455072] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000600 [ 464.464026] Stack: [ 464.466569] ffff88020527fe30 ffffffffa02d2019 ffffffff8167ebb1 ffff880215ff8b00 [ 464.475929] ffff880200000a09 ffffffff00000a09 ffffffff811a7fb1 0000000000000a09 [ 464.485304] ffff8802124a4940 0000000000008bc7 ffff88020527fe90 ffff880215ff8b00 [ 464.494646] Call Trace: [ 464.497724] [] xfs_setattr_size+0xb9/0x5d0 [xfs] [ 464.505598] [] ? sub_preempt_count+0x71/0x100 [ 464.514096] [] ? do_truncate+0x61/0xa0 [ 464.521833] [] xfs_vn_setattr+0x36/0x40 [xfs] [ 464.530331] [] notify_change+0x1dc/0x360 [ 464.538268] [] do_truncate+0x6d/0xa0 [ 464.545765] [] vfs_truncate+0x15c/0x180 [ 464.553600] [] do_sys_truncate+0x6c/0x90 [ 464.561530] [] SyS_truncate+0xe/0x10 [ 464.569033] [] tracesys+0xdd/0xe2 [ 464.576203] Code: 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 f1 41 89 d0 48 89 e5 48 89 fa 48 c7 c6 48 17 36 a0 31 ff 31 c0 e8 ce fb ff ff <0f> 0b 66 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 [ 464.603000] RIP [] assfail+0x22/0x30 [xfs] [ 464.611215] RSP [ 464.620153] ---[ end trace 56da871d7d2d94aa ]--- From david@fromorbit.com Tue May 21 17:53:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9CAA929DF8 for ; Tue, 21 May 2013 17:53:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 70CBE8F8059 for ; Tue, 21 May 2013 15:53:36 -0700 (PDT) X-ASG-Debug-ID: 1369176814-04bdf042254c5990001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 7j6QGIosfI1cofGe for ; Tue, 21 May 2013 15:53:34 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAHz5m1F5LNn3/2dsb2JhbABagwi8eYUcBAGBChd0giMBAQUnExwjEAgDDgcDCQwZDwUlAyETiAy7exaNZ4EdBwqDSgOXN5FBgyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 08:23:34 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UevQz-0003B2-Ex; Wed, 22 May 2013 08:53:33 +1000 Date: Wed, 22 May 2013 08:53:33 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 03/11] xfs: remote attribute read too short Message-ID: <20130521225333.GS24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 03/11] xfs: remote attribute read too short References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-4-git-send-email-david@fromorbit.com> <20130521205924.GM20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521205924.GM20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369176814 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131643 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 03:59:24PM -0500, Ben Myers wrote: > On Tue, May 21, 2013 at 06:02:02PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > Reading a maximally size remote attribute fails when CRCs are > > enabled with this verification error: > > > > XFS (vdb): remote attribute header does not match required off/len/owner) > > > > There are two reasons for this, the first being that the > > length of the buffer being read is determined from the > > args->rmtblkcnt which doesn't take into account CRC headers. Hence > > the mapped length ends up being too short and so we need to > > calculate it directly from the value length. > > > > The second is that the byte count of valid data within a buffer is > > capped by the length of the data and so doesn't take into account > > that the buffer might be longer due to headers. Hence we need to > > calculate the data space in the buffer first before calculating the > > actual byte count of data. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_attr_remote.c | 15 +++++++++------ > > 1 file changed, 9 insertions(+), 6 deletions(-) > > > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > > index aad95b0..bcdc07c 100644 > > --- a/fs/xfs/xfs_attr_remote.c > > +++ b/fs/xfs/xfs_attr_remote.c > > @@ -52,9 +52,11 @@ xfs_attr3_rmt_blocks( > > struct xfs_mount *mp, > > int attrlen) > > { > > - int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, > > - mp->m_sb.sb_blocksize); > > - return (attrlen + buflen - 1) / buflen; > > + if (xfs_sb_version_hascrc(&mp->m_sb)) { > > + int buflen = XFS_ATTR3_RMT_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > > + return (attrlen + buflen - 1) / buflen; > > + } > > + return XFS_B_TO_FSB(mp, attrlen); > > xfs_attr_rmtval_set, xfs_attr3_rmt_blocks, and XFS_ATTR3_RMT_BUF_SPACE all have > checks for crcs on the superblock. It's like I'm seeing stars. Sure - I'm not concerned about how efficient the code is at this point. I just want it to work correctly. If that means we check for CRC support more frequently than we need to, then that's no big deal right now. > > > } > > > > static bool > > @@ -206,8 +208,9 @@ xfs_attr_rmtval_get( > > > > while (valuelen > 0) { > > nmap = ATTR_RMTVALUE_MAPSIZE; > > + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); > > error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, > > - args->rmtblkcnt, map, &nmap, > > + blkcnt, map, &nmap, > > Isn't blkcnt wrong on the 2nd or greater iteration of this loop? Looks like an old bug. Yes, args->rmtblkcnt is wrong on the 2nd+ loop iteration. And yes, it's an old, old bug. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 21 17:55:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1370C29DF8 for ; Tue, 21 May 2013 17:55:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 004058F804B for ; Tue, 21 May 2013 15:55:19 -0700 (PDT) X-ASG-Debug-ID: 1369176917-04cbb05fe34b8f10001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id KTMjfUVHN1ykug8F for ; Tue, 21 May 2013 15:55:18 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOALn6m1F5LNn3/2dsb2JhbABagwi8eYUcBAGBChd0giMBAQU6HCMQCAMOBwMJDBkPBSUDIROIDLt7Fo1ngR0HCoNKA5c3kUGDISo Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 08:25:17 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UevSe-0003BE-T6; Wed, 22 May 2013 08:55:16 +1000 Date: Wed, 22 May 2013 08:55:16 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/11] xfs: remote attribute tail zeroing does too much Message-ID: <20130521225516.GT24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 04/11] xfs: remote attribute tail zeroing does too much References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-5-git-send-email-david@fromorbit.com> <20130521223109.GN20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521223109.GN20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369176917 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131643 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 05:31:09PM -0500, Ben Myers wrote: > On Tue, May 21, 2013 at 06:02:03PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > When an attribute data does not fill then entire remote block, we > > zero the remaining part of the buffer. This, however, needs to take > > into account that the buffer has a header, and so the offset where > > zeroing starts and the length of zeroing need to take this into > > account. Otherwise we end up with zeros over the end of the > > attribute value when CRCs are enabled. > > > > While there, make sure we only ask to map an extent that covers the > > remaining range of the attribute, rather than asking every time for > > the full length of remote data. If the remote attribute blocks are > > contiguous with other parts of the attribute tree, it will map those > > blocks as well and we can potentially zero them incorrectly. We can > > also get buffer size mistmatches when trying to read or remove the > > remote attribute, and this can lead to not finding the correct > > buffer when looking it up in cache. > > > > Signed-off-by: Dave Chinner > > You fixed the bug I mentioned in the last review. Beaten. > > This looks ok. From the looks of things we might consider cleanup of who is > setting rmtblkcnt in the future. It is getting to be confusing. Yes, it is. This exact problem is one of the things my rework of the attr CRC code later in the series fixes. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 21 18:34:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 67F0129DF8 for ; Tue, 21 May 2013 18:34:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 496578F8064 for ; Tue, 21 May 2013 16:34:53 -0700 (PDT) X-ASG-Debug-ID: 1369179291-04bdf0781900080001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id lT2IG9wsJW5wmupS for ; Tue, 21 May 2013 16:34:51 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AusOAEYEnFF5LNn3/2dsb2JhbABagwi8eoUcBAGBCRd0giMBAQU6HDMIAxgJJQ8FJQMhARKIDLtwFo1ngSSDVAOXN5FBgyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 09:04:30 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uew4b-0003Gb-TE; Wed, 22 May 2013 09:34:30 +1000 Date: Wed, 22 May 2013 09:34:29 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130521233429.GW29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521225257.GA12713@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521225257.GA12713@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369179291 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131645 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 06:52:57PM -0400, Dave Jones wrote: > [ 464.210598] XFS: Assertion failed: (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0, file: fs/xfs/xfs_iops.c, line: 719 Never seen that fire before, but this is why we have ASSERT()s like this - we're being handed something by the VFS we don't expect... Can you give me some context of the file permissions before the syscall and what the syscall parameters are? i.e. is this likely to be trying to strip SUID/SGID during the truncate operation? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 21 18:40:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2F12729DF8 for ; Tue, 21 May 2013 18:40:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0EB3A304032 for ; Tue, 21 May 2013 16:40:04 -0700 (PDT) X-ASG-Debug-ID: 1369179602-04bdf07817003f0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 5Sd8IfoHQssNvbEj for ; Tue, 21 May 2013 16:40:02 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhkRAEwFnFF5LNn3/2dsb2JhbABagwgwgzu5D4Ehg3sEAYEHF3SCIwEBBAEjBAsBIyMQCAMYAgIFGgcCAg8FJQMhE4gHBQ2pe5FnFoEQjEgPgR0HgkGBEwOXN4EqiHKHJYFYgUkqgS0 Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 09:09:39 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uew9Z-0003HF-GH; Wed, 22 May 2013 09:39:37 +1000 Date: Wed, 22 May 2013 09:39:37 +1000 From: Dave Chinner To: Arkadiusz =?utf-8?Q?Buba=C5=82a?= Cc: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 Message-ID: <20130521233937.GX29466@dastard> X-ASG-Orig-Subj: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 References: <519B6738.9030603@open-e.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <519B6738.9030603@open-e.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369179602 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131645 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 02:23:20PM +0200, Arkadiusz Bubała wrote: > Hello, > I've got a call trace which should be fixed by "drop buffer io > reference when a bad bio is built" patch > (http://patchwork.xfs.org/patch/3956/). Error occured on already > patched Linux kernel 3.2.42. That's an old kernel. Can you reproduce on a current TOT kernel? It's entirely possible that this problem has been fixed as we definitely mae some changes to the mount error handling path since 3.2.... > > Test environment consist two machines target and initiator. > First machine works as target with QLogic Corp. ISP2432-based 4Gb > Fibre Channel device. Storage is placed on two KINGSTON SNV425S SSD > working as RAID0 array. RAID is managed by LSI MegaRAID SAS 1068 > controller. > Second machine works as initiator with the same QLogic card. > > After few days of running test script I got following call trace and > XFS stopped working. Can you narrow this down from "takes several days" to the simplest possible reproducer? It happened due to IO errors during mount, so maybe you can did that part out of your script and give us a test case that reproduces on the first mount? Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Tue May 21 18:40:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 41CE829E0F for ; Tue, 21 May 2013 18:40:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 17831304032 for ; Tue, 21 May 2013 16:40:26 -0700 (PDT) X-ASG-Debug-ID: 1369179625-04cbb0049d00540001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id bQ07sx3qRB2S6RvF for ; Tue, 21 May 2013 16:40:25 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4LNeJ89009261 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 May 2013 19:40:23 -0400 Received: from gelk.kernelslacker.org ([10.3.113.18]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4LNeImo008650 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 21 May 2013 19:40:18 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4LNeH5w018383; Tue, 21 May 2013 19:40:17 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4LNeGQj018382; Tue, 21 May 2013 19:40:16 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 21 May 2013 19:40:16 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130521234016.GB14347@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521233429.GW29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369179625 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 09:34:29AM +1000, Dave Chinner wrote: > On Tue, May 21, 2013 at 06:52:57PM -0400, Dave Jones wrote: > > [ 464.210598] XFS: Assertion failed: (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0, file: fs/xfs/xfs_iops.c, line: 719 > > Never seen that fire before, but this is why we have ASSERT()s like > this - we're being handed something by the VFS we don't expect... > > Can you give me some context of the file permissions before the > syscall and what the syscall parameters are? i.e. is this likely to > be trying to strip SUID/SGID during the truncate operation? no idea tbh. Is there something I can add to that assert to dump which file it was triggered by ? Dave From david@fromorbit.com Tue May 21 18:54:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4BA8F29E0D for ; Tue, 21 May 2013 18:54:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 281988F8040 for ; Tue, 21 May 2013 16:54:50 -0700 (PDT) X-ASG-Debug-ID: 1369180488-04cbb0049d01200001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id JixcDApvCzjhriVU for ; Tue, 21 May 2013 16:54:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAJwInFF5LNn3/2dsb2JhbABagwi8eoUcBAGBBRd0giMBAQUnExwzCAMYCSUPBSUDIQESiAy7bhaNZ4Ekg1QDlzeRQYMhKg Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 09:24:11 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UewNe-0003Il-Tw; Wed, 22 May 2013 09:54:10 +1000 Date: Wed, 22 May 2013 09:54:10 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130521235410.GY29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521234016.GB14347@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369180488 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131647 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 07:40:16PM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 09:34:29AM +1000, Dave Chinner wrote: > > On Tue, May 21, 2013 at 06:52:57PM -0400, Dave Jones wrote: > > > [ 464.210598] XFS: Assertion failed: (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0, file: fs/xfs/xfs_iops.c, line: 719 > > > > Never seen that fire before, but this is why we have ASSERT()s like > > this - we're being handed something by the VFS we don't expect... > > > > Can you give me some context of the file permissions before the > > syscall and what the syscall parameters are? i.e. is this likely to > > be trying to strip SUID/SGID during the truncate operation? > > no idea tbh. Is there something I can add to that assert to dump > which file it was triggered by ? Convert the assert to a if (), and then in the body do something like: if (mask & (...) { char buf[MAX_PATHLEN]; d_path(VFS_I(ip)->i_dentry, buf, MAXPATHLEN); xfs_warn(mp, "%s: mask 0x%x mismatch on file %s\n", __func__, mask, buf); ASSERT(0); } Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Tue May 21 19:08:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4B6EA29E0D for ; Tue, 21 May 2013 19:08:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2C76C304039 for ; Tue, 21 May 2013 17:08:09 -0700 (PDT) X-ASG-Debug-ID: 1369181288-04cbb0049a01d20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ylbOBVgkvxJx6jR4 for ; Tue, 21 May 2013 17:08:08 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4M086Vr010004 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 May 2013 20:08:06 -0400 Received: from gelk.kernelslacker.org ([10.3.113.18]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4M085UN020247 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 21 May 2013 20:08:06 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4M084Vh020292; Tue, 21 May 2013 20:08:04 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4M0835I020291; Tue, 21 May 2013 20:08:03 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 21 May 2013 20:08:03 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522000803.GA19891@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20130521235410.GY29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369181288 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 09:54:10AM +1000, Dave Chinner wrote: > On Tue, May 21, 2013 at 07:40:16PM -0400, Dave Jones wrote: > > On Wed, May 22, 2013 at 09:34:29AM +1000, Dave Chinner wrote: > > > On Tue, May 21, 2013 at 06:52:57PM -0400, Dave Jones wrote: > > > > [ 464.210598] XFS: Assertion failed: (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0, file: fs/xfs/xfs_iops.c, line: 719 > > > > > > Never seen that fire before, but this is why we have ASSERT()s like > > > this - we're being handed something by the VFS we don't expect... > > > > > > Can you give me some context of the file permissions before the > > > syscall and what the syscall parameters are? i.e. is this likely to > > > be trying to strip SUID/SGID during the truncate operation? > > > > no idea tbh. Is there something I can add to that assert to dump > > which file it was triggered by ? > > Convert the assert to a if (), and then in the body do something > like: > > if (mask & (...) { > char buf[MAX_PATHLEN]; > > d_path(VFS_I(ip)->i_dentry, buf, MAXPATHLEN); > xfs_warn(mp, "%s: mask 0x%x mismatch on file %s\n", > __func__, mask, buf); > ASSERT(0); > } fs/xfs/xfs_iops.c: In function ‘xfs_setattr_size’: fs/xfs/xfs_iops.c:723:17: error: incompatible type for argument 1 of ‘d_path’ d_path(VFS_I(ip)->i_dentry, buf, MAXPATHLEN); ^ In file included from include/linux/fs.h:8:0, from include/linux/genhd.h:65, from include/linux/blkdev.h:9, from fs/xfs/xfs_linux.h:45, from fs/xfs/xfs.h:32, from fs/xfs/xfs_iops.c:18: include/linux/dcache.h:338:14: note: expected ‘const struct path *’ but argument is of type ‘struct hlist_head’ extern char *d_path(const struct path *, char *, int); ^ Dave From david@fromorbit.com Tue May 21 19:16:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9947529E0D for ; Tue, 21 May 2013 19:16:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7A62F8F8050 for ; Tue, 21 May 2013 17:16:06 -0700 (PDT) X-ASG-Debug-ID: 1369181764-04cb6c474201df0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id op1450eLee0gTOlW for ; Tue, 21 May 2013 17:16:05 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvAOAJINnFF5LNn3/2dsb2JhbABagwiDa7kQhRwEAYEFF3SCIwEBBSMECwEjMwgDGAICBSECAg8FJQMhARKIDKoOkWMWgRCMV4EkgkGBEwOXN5FBgyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 09:46:03 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uewip-0003M0-9z; Wed, 22 May 2013 10:16:03 +1000 Date: Wed, 22 May 2013 10:16:03 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522001603.GZ29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20130522000803.GA19891@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369181764 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131647 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 08:08:03PM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 09:54:10AM +1000, Dave Chinner wrote: > > On Tue, May 21, 2013 at 07:40:16PM -0400, Dave Jones wrote: > > > On Wed, May 22, 2013 at 09:34:29AM +1000, Dave Chinner wrote: > > > > On Tue, May 21, 2013 at 06:52:57PM -0400, Dave Jones wrote: > > > > > [ 464.210598] XFS: Assertion failed: (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0, file: fs/xfs/xfs_iops.c, line: 719 > > > > > > > > Never seen that fire before, but this is why we have ASSERT()s like > > > > this - we're being handed something by the VFS we don't expect... > > > > > > > > Can you give me some context of the file permissions before the > > > > syscall and what the syscall parameters are? i.e. is this likely to > > > > be trying to strip SUID/SGID during the truncate operation? > > > > > > no idea tbh. Is there something I can add to that assert to dump > > > which file it was triggered by ? > > > > Convert the assert to a if (), and then in the body do something > > like: > > > > if (mask & (...) { > > char buf[MAX_PATHLEN]; > > > > d_path(VFS_I(ip)->i_dentry, buf, MAXPATHLEN); > > xfs_warn(mp, "%s: mask 0x%x mismatch on file %s\n", > > __func__, mask, buf); > > ASSERT(0); > > } > > fs/xfs/xfs_iops.c: In function ‘xfs_setattr_size’: > fs/xfs/xfs_iops.c:723:17: error: incompatible type for argument 1 of ‘d_path’ > d_path(VFS_I(ip)->i_dentry, buf, MAXPATHLEN); > ^ Oh, sorry, dentry_path() is the version that takes a dentry as the first parameter. I always get the two confused... Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlsemon35@gmail.com Tue May 21 19:44:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 94DD429E03 for ; Tue, 21 May 2013 19:44:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7EFB38F8059 for ; Tue, 21 May 2013 17:44:03 -0700 (PDT) X-ASG-Debug-ID: 1369183442-04cb6c4740033a0001-NocioJ Received: from mail-ie0-f179.google.com (mail-ie0-f179.google.com [209.85.223.179]) by cuda.sgi.com with ESMTP id QldBMjVnSyfRvoGD (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 21 May 2013 17:44:02 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] Received: by mail-ie0-f179.google.com with SMTP id c13so3624851ieb.24 for ; Tue, 21 May 2013 17:44:02 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=/00ZSigT/yZ5QP2Igr/e4gPAiEDMeS9bnCwQYEp9FYA=; b=VQy3SyTbvts2oXHhNGkY+9m46W2vu0MV8ctvxvtX3zO3Y9O3FJKVDw/FAdbo9trac2 NZuiAFgzTXZw6KsL6CD8ujGf7EBVIgsLXUuTbg1a8dxx46TWsHBGfNCFuyJ3b9LS8ESJ DTWusji0dy8eumm0xtbbY1Fn9aXmVpkRUpQBcL3U/bhfdCsk8nFmqProRj06TZao/8kR E133Q1tvl9iqouRipObf9ugStjOcl91ZBSAIeJMuAaEnpXMRMZd7wXkkrkc4Ye6RgDbm YVyjLLNoRaRtSmRD/v0UxCcVAm1ZsxfhhSnRgRrTvInmk/ruDZwqKlw4usfBnBH7xuo7 Z5eg== X-Received: by 10.42.27.146 with SMTP id j18mr2393364icc.54.1369183442285; Tue, 21 May 2013 17:44:02 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id xf4sm18857735igb.8.2013.05.21.17.43.56 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 21 May 2013 17:44:01 -0700 (PDT) Message-ID: <519C14A1.8000009@gmail.com> Date: Tue, 21 May 2013 20:43:13 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: generic/258 questions (mount issue)... Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: generic/258 questions (mount issue)... Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f179.google.com[209.85.223.179] X-Barracuda-Start-Time: 1369183442 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131649 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi! When using xfstests generic/258 with along with $TEST_RTDEV $TEST_LOGDEV, it tends to scream bloody murder about corrupted partitions and such. In fact, the commands in the test seem to do the right thing when executed by hand. So once again, I grasped for straws and came up with this: --- xfstests/tests/generic/258.orig 2013-05-21 20:19:38.430754829 -0400 +++ xfstests/tests/generic/258 2013-05-21 20:10:11.509021368 -0400 @@ -62,7 +62,7 @@ # unmount, remount, and check the timestamp echo "Remounting to flush cache" umount $TEST_DEV -mount $TEST_DEV $TEST_DIR +_test_mount # Should yield -315593940 (prior to epoch) echo "Testing for negative seconds since epoch" My questions are these: 1) Was there a better way to do this? 2) Not knowing the policy on umounting $TEST_DEV, could this have been a test for $SCRATCH_DEV? This was tested only on XFS with rtdev and logdev partitions enabled. Thanks! Michael From david@fromorbit.com Tue May 21 20:26:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E15C129E03 for ; Tue, 21 May 2013 20:26:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7D4FDAC006 for ; Tue, 21 May 2013 18:26:28 -0700 (PDT) X-ASG-Debug-ID: 1369185983-04bdf0781605c20001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Q1EmHHVFzHq86Eby for ; Tue, 21 May 2013 18:26:23 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuwOAB8enFF5LNn3/2dsb2JhbABagwi9BYUcBAGBBhd0giMBAQQBOhwjBQsIAxgJJQ8FJQMhE4gHBbt4Fo1ngR0HgnNhA5c3kUGDISo Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 10:56:23 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uexor-0003T9-1V; Wed, 22 May 2013 11:26:21 +1000 Date: Wed, 22 May 2013 11:26:21 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... Message-ID: <20130522012620.GA29466@dastard> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519C14A1.8000009@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369185983 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131653 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Tue, May 21, 2013 at 08:43:13PM -0400, Michael L. Semon wrote: > Hi! When using xfstests generic/258 with along with $TEST_RTDEV > $TEST_LOGDEV, it tends to scream bloody murder about corrupted > partitions and such. In fact, the commands in the test seem to do > the right thing when executed by hand. So once again, I grasped for > straws and came up with this: > > --- xfstests/tests/generic/258.orig 2013-05-21 20:19:38.430754829 -0400 > +++ xfstests/tests/generic/258 2013-05-21 20:10:11.509021368 -0400 > @@ -62,7 +62,7 @@ > # unmount, remount, and check the timestamp > echo "Remounting to flush cache" > umount $TEST_DEV > -mount $TEST_DEV $TEST_DIR > +_test_mount > > # Should yield -315593940 (prior to epoch) > echo "Testing for negative seconds since epoch" > > My questions are these: > > 1) Was there a better way to do this? No, your change is correct. Can you clean up the description of the problem you had and add a Signed-off-by? > 2) Not knowing the policy on umounting $TEST_DEV, could this have > been a test for $SCRATCH_DEV? There are a handful of other tests that also unmount the TEST_DEV. Perhaps adding a _test_umount() wrapper to common/rc (similar to _scratch_umount) would be best. At least shared/243 needs the same _test_mount treatment as this test. Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Tue May 21 21:56:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DDC0929E03 for ; Tue, 21 May 2013 21:56:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id AFE128F8050 for ; Tue, 21 May 2013 19:56:14 -0700 (PDT) X-ASG-Debug-ID: 1369191373-04bdf078160a490001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id EOKBLMWQGaOhtUBp for ; Tue, 21 May 2013 19:56:13 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4M2u8aK024630 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 May 2013 22:56:11 -0400 Received: from gelk.kernelslacker.org ([10.3.113.18]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4M2u708007802 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 21 May 2013 22:56:08 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4M2u6Lb030633; Tue, 21 May 2013 22:56:06 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4M2u5m3030632; Tue, 21 May 2013 22:56:05 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 21 May 2013 22:56:05 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522025605.GA29767@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130522001603.GZ29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369191373 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 10:16:03AM +1000, Dave Chinner wrote: Seems like I can trigger this from paths other than truncate too.. (eg, sys= _open) Here's what I ended up with for debug diff --git a/fs/dcache.c b/fs/dcache.c index 2b39d16..b579dfe 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2792,6 +2792,7 @@ char *dentry_path(struct dentry *dentry, char *buf, i= nt buflen) Elong: return ERR_PTR(-ENAMETOOLONG); } +EXPORT_SYMBOL(dentry_path); =20 /* * NOTE! The user-level library version returns a diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa..8419e63 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -47,6 +47,7 @@ #include #include #include +#include =20 static int xfs_initxattrs( @@ -714,9 +715,20 @@ xfs_setattr_size( return XFS_ERROR(error); =20 ASSERT(S_ISREG(ip->i_d.di_mode)); - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_S= ET| + if ((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| - ATTR_KILL_PRIV|ATTR_TIMES_SET)) =3D=3D 0); + ATTR_KILL_PRIV|ATTR_TIMES_SET)) =3D=3D 0) { + + struct dentry *dentry =3D d_find_any_alias(VFS_I(ip)); + char buf[MAXPATHLEN]; + + dentry_path(dentry, buf, MAXPATHLEN); + dput(dentry); + xfs_warn(mp, "%s: mask 0x%x mismatch on file %s\n", + __func__, mask, buf); + + ASSERT(0); + } =20 if (!(flags & XFS_ATTR_NOLOCK)) { lock_flags |=3D XFS_IOLOCK_EXCL; Something isn't right though I think.. Because the filenames it outputs look like crap. [ 71.406552] XFS (sda2): xfs_setattr_size: mask 0xa068 mismatch on file 0= \xffffffee<=02\xffffff88\xffffffff\xffffffff\xffffff80O\xffffff82\xffffffff= \xffffffff\xffffffff\xffffffff The mask is always 0xa068 though if that helps. Dave From mlsemon35@gmail.com Tue May 21 22:04:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7E27E29E03 for ; Tue, 21 May 2013 22:04:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6C9D78F8040 for ; Tue, 21 May 2013 20:04:23 -0700 (PDT) X-ASG-Debug-ID: 1369191862-04cbb0049c0abc0001-NocioJ Received: from mail-ie0-f178.google.com (mail-ie0-f178.google.com [209.85.223.178]) by cuda.sgi.com with ESMTP id 3Lyt8AJAdYSJpk0h (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 21 May 2013 20:04:22 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.178 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.178] Received: by mail-ie0-f178.google.com with SMTP id b11so4138179iee.9 for ; Tue, 21 May 2013 20:04:22 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.178] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.178] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=1MBqhlR4mLPUcBOHbt0UT9oQUYUulNjXe1GqJuJne8Q=; b=ya443tisDRxXIOVQBA2oNAhrLqPL5PvdHZmMyMVLzTYKIDFDzb9bp8faV4+aXb/Hqq F5yCXSf/eFZZ1uq0cKU1DQAz61wQQUsCSrOAiHelKOEaba8JtEB38fxGqnxhKfSN1/on nuSMa5z25IyXPNk/jBFXmnrK6moty2eZM5lI6oRHv1svmbil9gXpJ5nbA6ev581IqWKb Pu4HC3GF/3jPh1Q82k64wN3s3XqddKkpodaA+rt8gqWCagaAxrKDkL4hJE544lluWPb5 mccDQtTzWpUQEGmZFUJOsIuxXJldMO6CisUCUeyJG1geHVmCq69wJchtqRp9R1ABgnok r+EA== X-Received: by 10.50.22.5 with SMTP id z5mr9988431ige.75.1369191862152; Tue, 21 May 2013 20:04:22 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id l14sm5441784igf.9.2013.05.21.20.04.13 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 21 May 2013 20:04:21 -0700 (PDT) Message-ID: <519C3596.7080109@gmail.com> Date: Tue, 21 May 2013 23:03:50 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <20130522012620.GA29466@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f178.google.com[209.85.223.178] X-Barracuda-Start-Time: 1369191862 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131659 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On 05/21/2013 09:26 PM, Dave Chinner wrote: > On Tue, May 21, 2013 at 08:43:13PM -0400, Michael L. Semon wrote: >> Hi! When using xfstests generic/258 with along with $TEST_RTDEV >> $TEST_LOGDEV, it tends to scream bloody murder about corrupted >> partitions and such. In fact, the commands in the test seem to do >> the right thing when executed by hand. So once again, I grasped for >> straws and came up with this: >> >> --- xfstests/tests/generic/258.orig 2013-05-21 20:19:38.430754829 -0400 >> +++ xfstests/tests/generic/258 2013-05-21 20:10:11.509021368 -0400 >> @@ -62,7 +62,7 @@ >> # unmount, remount, and check the timestamp >> echo "Remounting to flush cache" >> umount $TEST_DEV >> -mount $TEST_DEV $TEST_DIR >> +_test_mount >> >> # Should yield -315593940 (prior to epoch) >> echo "Testing for negative seconds since epoch" >> >> My questions are these: >> >> 1) Was there a better way to do this? > > No, your change is correct. Can you clean up the description of the > problem you had and add a Signed-off-by? > >> 2) Not knowing the policy on umounting $TEST_DEV, could this have >> been a test for $SCRATCH_DEV? > > There are a handful of other tests that also unmount the TEST_DEV. > Perhaps adding a _test_umount() wrapper to common/rc (similar to > _scratch_umount) would be best. At least shared/243 needs the same > _test_mount treatment as this test. > > Cheers, > > Dave. > This is my first attempt at doing a `git format-patch --stdout`. Hopefully, this is somewhat more presentable to git. Comments and brow-beating are welcome. Thanks! Michael >From 7dc0667e1f8cd1c98f15ebf412dd0f038b55306e Mon Sep 17 00:00:00 2001 From: "Michael L. Semon" Date: Tue, 21 May 2013 22:50:59 -0400 Subject: [PATCH] Change mount method for generic/258 Use the built-in _test_mount function from xfstests so it will use the correct mount options for xfstests. The script used a simple umount-and-mount sequence, which caused a test failure on an XFS filesystem that used both realtime and external log devices. Signed-off-by: Michael L. Semon --- tests/generic/258 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generic/258 b/tests/generic/258 index fb091ae..3aeb5ce 100755 --- a/tests/generic/258 +++ b/tests/generic/258 @@ -62,7 +62,7 @@ fi # unmount, remount, and check the timestamp echo "Remounting to flush cache" umount $TEST_DEV -mount $TEST_DEV $TEST_DIR +_test_mount # Should yield -315593940 (prior to epoch) echo "Testing for negative seconds since epoch" -- 1.8.2 From david@fromorbit.com Tue May 21 23:03:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B221B29E03 for ; Tue, 21 May 2013 23:03:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4961EAC002 for ; Tue, 21 May 2013 21:03:26 -0700 (PDT) X-ASG-Debug-ID: 1369195400-04bdf078170e220001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id OsAaCg2lRNKlKMKC for ; Tue, 21 May 2013 21:03:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkNAHNCnFF5LNn3/2dsb2JhbABagwiDArl1hR4EAYEBF3SCIwEBBAEnExwoCwgDFQMJJQ8FJQMhARKIBwW7ZxaNQCeBJINUA5c3kUGDISqBLA Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 13:33:20 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uf0Gk-0003km-2e; Wed, 22 May 2013 14:03:18 +1000 Date: Wed, 22 May 2013 14:03:18 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522040318.GG29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522025605.GA29767@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369195400 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 21, 2013 at 10:56:05PM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 10:16:03AM +1000, Dave Chinner wrote: > > Seems like I can trigger this from paths other than truncate too.. (eg, sys_open) O_TRUNC? > The mask is always 0xa068 though if that helps. A bit - it confirms what I thought - a truncate killing SUID bits. i.e. mask = ATTR_FORCE|ATTR_KILL_SUID|ATTR_CTIME|ATTR_SIZE. But then here's the next question - where the hell is the ATTR_MODE bit? In do_truncate(), the should_remove_suid() return is or'd into the mask along with ATTR_FORCE. The ATTR_KILL_SUID is returned after this check: umode_t mode = dentry->d_inode->i_mode; int kill = 0; /* suid always must be killed */ if (unlikely(mode & S_ISUID)) kill = ATTR_KILL_SUID; However, notify_change() takes this mask and the inode and does this when the ATTR_KILL_SUID flag is set: umode_t mode = inode->i_mode; ... if (ia_valid & ATTR_KILL_SUID) { if (mode & S_ISUID) { ia_valid = attr->ia_valid |= ATTR_MODE; attr->ia_mode = (inode->i_mode & ~S_ISUID); } } So, we know that (mode & S_ISUID) is true, because that's how ATTR_KILL_SUID gets set, but that same check here doesn't result in ATTR_MODE being set.... That doesn't make a whole lot of sense to me. What am I missing? Are you seeing this fire at all from notify_change()? WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex)); What's wrong with this code in do_truncate()? /* Remove suid/sgid on truncate too */ ret = should_remove_suid(dentry); if (ret) newattrs.ia_valid |= ret | ATTR_FORCE; mutex_lock(&dentry->d_inode->i_mutex); ret = notify_change(dentry, &newattrs); mutex_unlock(&dentry->d_inode->i_mutex); Patch below to fix this. However, it probably doesn't fix the fact that truncate can change the size and kill suid/sgid bits at the same time and XFS doesn't appear to handle that sanely right now. Can you run the patch below just so when it fails we can see that the mask is actually sane? Cheers, Dave. -- Dave Chinner david@fromorbit.com vfs: do_truncate() needs to serialise should_remove_suid From: Dave Chinner Otherwise someone else can come in an remove the suid bit before the truncate locks the inode and calls notify_change(). This results in XFS throwing asserts because it's getting a strange attr mask being passed down to it that it doesn't know how to handle correctly. Signed-off-by: Dave Chinner --- fs/open.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/open.c b/fs/open.c index 8c74100..b8d4899 100644 --- a/fs/open.c +++ b/fs/open.c @@ -52,11 +52,11 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, } /* Remove suid/sgid on truncate too */ + mutex_lock(&dentry->d_inode->i_mutex); ret = should_remove_suid(dentry); if (ret) newattrs.ia_valid |= ret | ATTR_FORCE; - mutex_lock(&dentry->d_inode->i_mutex); ret = notify_change(dentry, &newattrs); mutex_unlock(&dentry->d_inode->i_mutex); return ret; From qcai@redhat.com Tue May 21 23:10:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A913329E03 for ; Tue, 21 May 2013 23:10:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 978CA8F8040 for ; Tue, 21 May 2013 21:10:10 -0700 (PDT) X-ASG-Debug-ID: 1369195809-04cbb0049d0e4c0001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id PnqDKwe5Gev74e0J for ; Tue, 21 May 2013 21:10:09 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4M4A8US013899; Wed, 22 May 2013 00:10:09 -0400 Date: Wed, 22 May 2013 00:10:07 -0400 (EDT) From: CAI Qian To: Eric Sandeen Cc: xfs@oss.sgi.com Message-ID: <2132292786.4417784.1369195807747.JavaMail.root@redhat.com> In-Reply-To: <51895115.90108@sandeen.net> References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> <647316680.8155487.1367913231441.JavaMail.root@redhat.com> <51895115.90108@sandeen.net> Subject: Re: 3.9.0: XFS rootfs corruption MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.0: XFS rootfs corruption Thread-Index: IdWnK93hlt2QsMnf3gyQGdpEp61MFA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1369195809 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... OK, this has never been reproduced in 3.9-rc1 so far. It may because the rootfs became full after crash dump testing though. CAI Qian ----- Original Message ----- > From: "Eric Sandeen" > To: "CAI Qian" > Cc: xfs@oss.sgi.com > Sent: Wednesday, May 8, 2013 3:08:05 AM > Subject: Re: 3.9.0: XFS rootfs corruption > > On 5/7/13 2:53 AM, CAI Qian wrote: > > > > > > ----- Original Message ----- > >> From: "Eric Sandeen" > >> To: "CAI Qian" > >> Cc: xfs@oss.sgi.com > >> Sent: Monday, May 6, 2013 10:31:01 PM > >> Subject: Re: 3.9.0: XFS rootfs corruption > >> > >> On 5/6/13 2:50 AM, CAI Qian wrote: > >>> Saw this on several different Power7 systems after kdump reboot. It has > >>> xfsprogs-3.1.10 > >>> and rootfs in on LVM. Never saw one of those in any of the RC releases. > >>> > >>> ] Reached target Basic System. > >>> [ 4.919316] bio: create slab at 1 > >>> [ 5.078616] SGI XFS with ACLs, security attributes, large block/inode > >>> numbers, no debug enabled > >>> [ 5.081925] XFS (dm-1): Mounting Filesystem > >>> [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) > >>> [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 > >>> of > >>> file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc > >> > >> here: > >> > >> /* > >> * Need to have seen all the entries and all the bestfree slots. > >> */ > >> XFS_WANT_CORRUPTED_RETURN(freeseen == 7); > >> > >> I hope Dave knows offhand what this might mean. :) > >> > >> Could you get a metadump of the filesystem in question? > > Err, less familiar here. May I ask how can I do that? > > since it's the root fs, you might need to do it from some sort of rescue > shell, then just do xfs_metadump /dev/ > > the resulting file should compress further with something like bzip2. > > ... > > >>> Also, never saw any of those in other architectures like x64, but started > >>> get those there in 3.9.0. > >>> Unsure if those are related. > >>> > >>> [ 3224.369782] > >>> ============================================================================= > >>> [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison > >>> overwritten > >>> [ 3224.370017] > >>> ----------------------------------------------------------------------------- > >> > >> 2: 'F' if any module was force loaded by "insmod -f", ' ' if all > >> modules were loaded normally. > >> > >> Force loaded modules, what's that from? > > This could be just happened after the booting done or we were running a > > stress test later > > that does load (modprobe *) and unload (modprobe -r *) every module. Again, > > those warnings > > could be totally unrelated to the above rootfs corruption. > > CAI Qian > > hmmm :) So any one of those modules could have caused memory corruption I > guess. > > If you can hit it reliably you might try to narrow it down to whether it > is a particular module causing it. > > -Eric > > From davej@redhat.com Tue May 21 23:15:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EAC0B29E03 for ; Tue, 21 May 2013 23:15:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D9036304043 for ; Tue, 21 May 2013 21:15:28 -0700 (PDT) X-ASG-Debug-ID: 1369196127-04cbb0049e0e980001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id VZqU612TAbEWdCqT for ; Tue, 21 May 2013 21:15:28 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4M4FPLD006487 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 22 May 2013 00:15:25 -0400 Received: from gelk.kernelslacker.org ([10.3.113.18]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4M4FOBc026750 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 May 2013 00:15:25 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4M4FMdZ002333; Wed, 22 May 2013 00:15:22 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4M4FMJ8002322; Wed, 22 May 2013 00:15:22 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Wed, 22 May 2013 00:15:21 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522041521.GA1837@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130522040318.GG29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369196127 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 02:03:18PM +1000, Dave Chinner wrote: > That doesn't make a whole lot of sense to me. What am I missing? > Are you seeing this fire at all from notify_change()? >=20 > WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex)); No. =20 > >=20 > What's wrong with this code in do_truncate()? >=20 > /* Remove suid/sgid on truncate too */ > ret =3D should_remove_suid(dentry); > if (ret) > newattrs.ia_valid |=3D ret | ATTR_FORCE; >=20 > mutex_lock(&dentry->d_inode->i_mutex); > ret =3D notify_change(dentry, &newattrs); > mutex_unlock(&dentry->d_inode->i_mutex); >=20 > Patch below to fix this. >=20 > However, it probably doesn't fix the fact that truncate can change > the size and kill suid/sgid bits at the same time and XFS doesn't > appear to handle that sanely right now. Can you run the patch below > just so when it fails we can see that the mask is actually sane? [ 36.339105] XFS (sda2): xfs_setattr_size: mask 0xa068 mismatch on file 0= \xffffffb8\xffffffd3-=02\xffffff88\xffffffff\xffffffff [ 36.350823] XFS: Assertion failed: 0, file: fs/xfs/xfs_iops.c, line: 730 [ 36.359459] ------------[ cut here ]------------ [ 36.365247] kernel BUG at fs/xfs/xfs_message.c:108! [ 36.371360] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC [ 36.379091] Modules linked in: xfs libcrc32c snd_hda_codec_realtek snd_h= da_codec_hdmi microcode(+) pcspkr snd_hda_intel snd_hda_codec snd_hwdep snd= _seq snd_seq_device snd_pcm e1000e snd_page_alloc snd_timer ptp snd soundco= re pps_core [ 36.405431] CPU: 1 PID: 2887 Comm: cc1 Not tainted 3.10.0-rc2+ #4 [ 36.432814] task: ffff880233e24980 ti: ffff88022dd3a000 task.ti: ffff880= 22dd3a000 [ 36.442191] RIP: 0010:[] [] assfail= +0x22/0x30 [xfs] [ 36.452369] RSP: 0018:ffff88022dd3b7d8 EFLAGS: 00010292 [ 36.459027] RAX: 000000000000003c RBX: ffff88022d8198c0 RCX: 00000000000= 00006 [ 36.467968] RDX: 0000000000004040 RSI: ffff880233e250d8 RDI: ffff880233e= 24980 [ 36.476909] RBP: ffff88022dd3b7d8 R08: 0000000000000000 R09: 00000000000= 00000 [ 36.485851] R10: 0000000000000001 R11: 0000000000000001 R12: ffff88022dd= 3bca8 [ 36.494793] R13: ffff880241158948 R14: 0000000000000000 R15: 00000000000= 00000 [ 36.503729] FS: 00007f1f4f9c3800(0000) GS:ffff880244a00000(0000) knlGS:= 0000000000000000 [ 36.513858] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 36.521053] CR2: 00000000007c0360 CR3: 000000022dfb2000 CR4: 00000000001= 407e0 [ 36.529986] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000 [ 36.538918] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 00000000000= 00400 [ 36.547851] Stack: [ 36.550373] ffff88022dd3bc48 ffffffffa01bc3ef 0000000000000046 0000a068= 81c94d18 [ 36.559738] ffff88022d819b80 ffff88022dadf2e0 00007fff0000a068 00000000= 00000000 [ 36.569091] ffff88022dd3b830 ffffffff824fc100 00007fff2cd12300 ffff8802= 2dd3b848 [ 36.578436] Call Trace: [ 36.581514] [] xfs_setattr_size+0x48f/0x630 [xfs] [ 36.589475] [] ? is_module_text_address+0x2f/0x60 [ 36.597433] [] ? __kernel_text_address+0x58/0x80 [ 36.605279] [] ? native_sched_clock+0x24/0x80 [ 36.612801] [] ? sched_clock_cpu+0xb5/0x100 [ 36.620103] [] ? __lock_acquire+0x2e5/0x1af0 [ 36.627548] [] ? native_sched_clock+0x24/0x80 [ 36.635069] [] ? native_sched_clock+0x24/0x80 [ 36.642591] [] ? sched_clock_cpu+0xb5/0x100 [ 36.649895] [] ? native_sched_clock+0x24/0x80 [ 36.657417] [] ? native_sched_clock+0x24/0x80 [ 36.664947] [] ? native_sched_clock+0x24/0x80 [ 36.672468] [] ? sched_clock_cpu+0xb5/0x100 [ 36.679765] [] ? sched_clock_cpu+0xb5/0x100 [ 36.687068] [] ? native_sched_clock+0x24/0x80 [ 36.694590] [] ? sched_clock_cpu+0xb5/0x100 [ 36.701894] [] ? native_sched_clock+0x24/0x80 [ 36.709417] [] ? sched_clock_cpu+0xb5/0x100 [ 36.716722] [] ? mark_held_locks+0xbb/0x140 [ 36.724027] [] ? mutex_lock_nested+0x32a/0x430 [ 36.731659] [] ? get_parent_ip+0xd/0x50 [ 36.738533] [] xfs_vn_setattr+0x36/0x40 [xfs] [ 36.746047] [] notify_change+0x1dc/0x360 [ 36.753024] [] do_truncate+0x6d/0xa0 [ 36.759574] [] ? xfs_extent_busy_ag_cmp+0x20/0x20 [xf= s] [ 36.768182] [] do_last+0x54f/0xe40 [ 36.775319] [] path_openat+0xb3/0x530 [ 36.782780] [] ? lock_release_holdtime.part.30+0xa1/0= x170 [ 36.792408] [] do_filp_open+0x38/0x80 [ 36.799870] [] ? _raw_spin_unlock+0x31/0x60 [ 36.807981] [] ? __alloc_fd+0xaf/0x200 [ 36.815544] [] do_sys_open+0xe9/0x1c0 [ 36.822989] [] SyS_open+0x1e/0x20 From david@fromorbit.com Wed May 22 00:12:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 26ABE29E03 for ; Wed, 22 May 2013 00:12:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 945E7AC002 for ; Tue, 21 May 2013 22:12:51 -0700 (PDT) X-ASG-Debug-ID: 1369199566-04cbb0049a116f0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 324kx6uFzlTq6zSi for ; Tue, 21 May 2013 22:12:46 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgNAApTnFF5LNn3/2dsb2JhbABagwiDArl2hR4EAYECF3SCIwEBBScTHDMIAxgJJQ8FJQMhARKIDLs3Fo1najqDVAOXN5FBgyEq Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 14:42:45 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uf1Lv-0003rw-C5; Wed, 22 May 2013 15:12:43 +1000 Date: Wed, 22 May 2013 15:12:43 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522051243.GH29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130522041521.GA1837@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369199566 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 12:15:21AM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 02:03:18PM +1000, Dave Chinner wrote: >=20 > > That doesn't make a whole lot of sense to me. What am I missing? > > Are you seeing this fire at all from notify_change()? > >=20 > > WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex)); >=20 > No. > =20 > > > >=20 > > What's wrong with this code in do_truncate()? > >=20 > > /* Remove suid/sgid on truncate too */ > > ret =3D should_remove_suid(dentry); > > if (ret) > > newattrs.ia_valid |=3D ret | ATTR_FORCE; > >=20 > > mutex_lock(&dentry->d_inode->i_mutex); > > ret =3D notify_change(dentry, &newattrs); > > mutex_unlock(&dentry->d_inode->i_mutex); > >=20 > > Patch below to fix this. > >=20 > > However, it probably doesn't fix the fact that truncate can change > > the size and kill suid/sgid bits at the same time and XFS doesn't > > appear to handle that sanely right now. Can you run the patch below > > just so when it fails we can see that the mask is actually sane? >=20 > [ 36.339105] XFS (sda2): xfs_setattr_size: mask 0xa068 mismatch on file= 0\xffffffb8\xffffffd3-=02\xffffff88\xffffffff\xffffffff So, still the same strange mask. That just doesn't seem right. > [ 36.350823] XFS: Assertion failed: 0, file: fs/xfs/xfs_iops.c, line: 7= 30 > [ 36.359459] ------------[ cut here ]------------ > [ 36.365247] kernel BUG at fs/xfs/xfs_message.c:108! > [ 36.371360] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC > [ 36.379091] Modules linked in: xfs libcrc32c snd_hda_codec_realtek snd= _hda_codec_hdmi microcode(+) pcspkr snd_hda_intel snd_hda_codec snd_hwdep s= nd_seq snd_seq_device snd_pcm e1000e snd_page_alloc snd_timer ptp snd sound= core pps_core > [ 36.405431] CPU: 1 PID: 2887 Comm: cc1 Not tainted 3.10.0-rc2+ #4 Your compiler is triggering this? That doesn't seem likely... > [ 36.578436] Call Trace: > [ 36.581514] [] xfs_setattr_size+0x48f/0x630 [xfs] > [ 36.738533] [] xfs_vn_setattr+0x36/0x40 [xfs] > [ 36.746047] [] notify_change+0x1dc/0x360 > [ 36.753024] [] do_truncate+0x6d/0xa0 > [ 36.759574] [] ? xfs_extent_busy_ag_cmp+0x20/0x20 [= xfs] > [ 36.768182] [] do_last+0x54f/0xe40 > [ 36.775319] [] path_openat+0xb3/0x530 > [ 36.782780] [] ? lock_release_holdtime.part.30+0xa1= /0x170 > [ 36.792408] [] do_filp_open+0x38/0x80 > [ 36.799870] [] ? _raw_spin_unlock+0x31/0x60 > [ 36.807981] [] ? __alloc_fd+0xaf/0x200 > [ 36.815544] [] do_sys_open+0xe9/0x1c0 > [ 36.822989] [] SyS_open+0x1e/0x20 This has come through the open path via handle_truncate(), which means that ATTR_MTIME|ATTR_CTIME|ATTR_OPEN|ATTR_FILE should also be set in the mask. They aren't, and that says to me that something else has been blottoed before XFS trips over this. Memory corruption? Can you print out the entire struct iattr? perhaps even hexdump it? Cheers, Dave. --=20 Dave Chinner david@fromorbit.com From davej@redhat.com Wed May 22 00:29:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6152329E03 for ; Wed, 22 May 2013 00:29:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id CF2A7AC002 for ; Tue, 21 May 2013 22:29:47 -0700 (PDT) X-ASG-Debug-ID: 1369200583-04cb6c474010d60001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id wcrnzSKTSqMHCxoI for ; Tue, 21 May 2013 22:29:43 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4M5TfVE028653 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 22 May 2013 01:29:41 -0400 Received: from gelk.kernelslacker.org ([10.3.113.18]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4M5TeA3012731 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 May 2013 01:29:41 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4M5Tdh4004712; Wed, 22 May 2013 01:29:39 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4M5Tc6U004711; Wed, 22 May 2013 01:29:38 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Wed, 22 May 2013 01:29:38 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522052938.GA2573@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521225257.GA12713@redhat.com> <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130522051243.GH29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369200583 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 03:12:43PM +1000, Dave Chinner wrote: > > [ 36.339105] XFS (sda2): xfs_setattr_size: mask 0xa068 mismatch on f= ile 0\xffffffb8\xffffffd3-=02\xffffff88\xffffffff\xffffffff >=20 > So, still the same strange mask. That just doesn't seem right. any idea what I screwed up in the filename printing part ? =20 > > [ 36.350823] XFS: Assertion failed: 0, file: fs/xfs/xfs_iops.c, line= : 730 > > [ 36.359459] ------------[ cut here ]------------ > > [ 36.365247] kernel BUG at fs/xfs/xfs_message.c:108! > > [ 36.371360] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC > > [ 36.379091] Modules linked in: xfs libcrc32c snd_hda_codec_realtek = snd_hda_codec_hdmi microcode(+) pcspkr snd_hda_intel snd_hda_codec snd_hwde= p snd_seq snd_seq_device snd_pcm e1000e snd_page_alloc snd_timer ptp snd so= undcore pps_core > > [ 36.405431] CPU: 1 PID: 2887 Comm: cc1 Not tainted 3.10.0-rc2+ #4 >=20 > Your compiler is triggering this? That doesn't seem likely... yeah, though it seems pretty much anything that writes to that partition wi= ll cause it. Here's fsx, which died instantly... [ 34.938367] XFS (sda2): xfs_setattr_size: mask 0x2068 mismatch on file = =02 (Note, different mask this time) [ 34.948754] XFS: Assertion failed: 0, file: fs/xfs/xfs_iops.c, line: 730 [ 34.957305] ------------[ cut here ]------------ [ 34.963093] kernel BUG at fs/xfs/xfs_message.c:108! [ 34.969202] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC [ 34.976916] Modules linked in: xfs libcrc32c snd_hda_codec_realtek snd_h= da_codec_hdmi microcode(+) pcspkr snd_hda_intel snd_hda_codec snd_hwdep snd= _seq snd_seq_device e1000e snd_pcm snd_page_alloc snd_timer ptp snd pps_cor= e soundcore [ 35.003254] CPU: 2 PID: 603 Comm: fsx Not tainted 3.10.0-rc2+ #4 [ 35.030365] task: ffff8802346824c0 ti: ffff880234318000 task.ti: ffff880= 234318000 [ 35.039733] RIP: 0010:[] [] assfail= +0x22/0x30 [xfs] [ 35.049897] RSP: 0018:ffff8802343199f0 EFLAGS: 00010286 [ 35.056547] RAX: 000000000000003c RBX: ffff8802348af380 RCX: 00000000000= 00006 [ 35.065480] RDX: 00000000000040b0 RSI: ffff880234682c18 RDI: ffff8802346= 824c0 [ 35.074411] RBP: ffff8802343199f0 R08: 0000000000000000 R09: 00000000000= 00000 [ 35.083349] R10: 0000000000000001 R11: 0000000000000001 R12: ffff8802343= 19ec0 [ 35.092310] R13: ffff880241171bd8 R14: 0000000000000000 R15: 00000000000= 00000 [ 35.101258] FS: 00007fea1197a740(0000) GS:ffff880244c00000(0000) knlGS:= 0000000000000000 [ 35.111397] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 35.118603] CR2: 0000003159cee0b0 CR3: 00000002339bc000 CR4: 00000000001= 407e0 [ 35.127536] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000 [ 35.136467] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 00000000000= 00400 [ 35.145399] Stack: [ 35.147919] ffff880234319e60 ffffffffa01d93ef 00000000816eaa35 00002068= 00000063 [ 35.157258] ffff8802348af640 ffff88023483cb90 ffff880200002068 ffffffff= 8100a394 [ 35.166630] 0000000000000002 ffff880234319a60 ffffffff810916a5 00000000= 00000002 [ 35.176002] Call Trace: [ 35.179112] [] xfs_setattr_size+0x48f/0x630 [xfs] [ 35.187071] [] ? native_sched_clock+0x24/0x80 [ 35.194595] [] ? sched_clock_cpu+0xb5/0x100 [ 35.201900] [] ? native_sched_clock+0x24/0x80 [ 35.209418] [] ? sched_clock_cpu+0xb5/0x100 [ 35.216724] [] ? __lock_acquire+0x2e5/0x1af0 [ 35.224134] [] ? native_sched_clock+0x24/0x80 [ 35.231656] [] ? sched_clock_cpu+0xb5/0x100 [ 35.238961] [] ? get_parent_ip+0xd/0x50 [ 35.245832] [] ? sub_preempt_count+0x71/0x100 [ 35.253353] [] ? delay_tsc+0x90/0xe0 [ 35.259895] [] ? native_sched_clock+0x24/0x80 [ 35.267414] [] ? sched_clock_cpu+0xb5/0x100 [ 35.274718] [] ? put_lock_stats.isra.29+0xe/0x40 [ 35.282564] [] ? lock_release_holdtime.part.30+0xee/0= x170 [ 35.291387] [] ? native_sched_clock+0x24/0x80 [ 35.298908] [] ? sched_clock_cpu+0xb5/0x100 [ 35.306211] [] ? native_sched_clock+0x24/0x80 [ 35.313731] [] ? sched_clock_cpu+0xb5/0x100 [ 35.321045] [] ? get_parent_ip+0xd/0x50 [ 35.327913] [] ? mark_held_locks+0xbb/0x140 [ 35.335216] [] ? mutex_lock_nested+0x32a/0x430 [ 35.342844] [] ? get_parent_ip+0xd/0x50 [ 35.349714] [] ? sub_preempt_count+0x71/0x100 [ 35.357241] [] xfs_vn_setattr+0x36/0x40 [xfs] [ 35.364763] [] notify_change+0x1dc/0x360 [ 35.371741] [] do_truncate+0x6d/0xa0 [ 35.378284] [] do_sys_ftruncate.constprop.16+0x10e/0x= 160 [ 35.387883] [] SyS_ftruncate+0xe/0x10 [ 35.395390] [] tracesys+0xdd/0xe2 [ 35.402440] Code: 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 f1 = 41 89 d0 48 89 e5 48 89 fa 48 c7 c6 18 87 26 a0 31 ff 31 c0 e8 ce fb ff ff = <0f> 0b 66 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48=20 [ 35.429006] RIP [] assfail+0x22/0x30 [xfs] [ 35.437088] RSP > This has come through the open path via handle_truncate(), which > means that ATTR_MTIME|ATTR_CTIME|ATTR_OPEN|ATTR_FILE should also be > set in the mask. They aren't, and that says to me that something > else has been blottoed before XFS trips over this. Memory > corruption? > > Can you print out the entire struct iattr? perhaps even hexdump it? About to turn in for the night. If there's a shiny diff in my inbox in the = morning, I'll try it. Tomorrow I'll also try running some older kernels with the same options to = see if it's something new, or an older bug. This is a new machine, so it may be somethi= ng that's been around for a while, and for whatever reason, my other machines = don't hit this. Dave From david@fromorbit.com Wed May 22 00:51:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DEBD429E03 for ; Wed, 22 May 2013 00:51:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 90BEE304043 for ; Tue, 21 May 2013 22:51:51 -0700 (PDT) X-ASG-Debug-ID: 1369201909-04bdf0781914250001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 4P1gEcSB96dEJ5Rl for ; Tue, 21 May 2013 22:51:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgNAGpcnFF5LNn3/2dsb2JhbABagwiDArl2hR4EAYEBF3SCIwEBBAE6HCgLCAMYCSUPBSUDIQESiAcFuyYWjUscajqDVAOXN5FBgyEqgTU Received: from ppp121-44-217-247.lns20.syd7.internode.on.net (HELO dastard) ([121.44.217.247]) by ipmail04.adl6.internode.on.net with ESMTP; 22 May 2013 15:21:49 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uf1xj-0003vN-Ja; Wed, 22 May 2013 15:51:47 +1000 Date: Wed, 22 May 2013 15:51:47 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522055147.GI29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521233429.GW29466@dastard> <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130522052938.GA2573@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369201909 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131671 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 01:29:38AM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 03:12:43PM +1000, Dave Chinner wrote: >=20 > > > [ 36.339105] XFS (sda2): xfs_setattr_size: mask 0xa068 mismatch on= file 0\xffffffb8\xffffffd3-=02\xffffff88\xffffffff\xffffffff > >=20 > > So, still the same strange mask. That just doesn't seem right. >=20 > any idea what I screwed up in the filename printing part ? Nope. Right now, I have nothing for you but disappointment.... > > > [ 36.350823] XFS: Assertion failed: 0, file: fs/xfs/xfs_iops.c, li= ne: 730 > > > [ 36.359459] ------------[ cut here ]------------ > > > [ 36.365247] kernel BUG at fs/xfs/xfs_message.c:108! > > > [ 36.371360] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC > > > [ 36.379091] Modules linked in: xfs libcrc32c snd_hda_codec_realte= k snd_hda_codec_hdmi microcode(+) pcspkr snd_hda_intel snd_hda_codec snd_hw= dep snd_seq snd_seq_device snd_pcm e1000e snd_page_alloc snd_timer ptp snd = soundcore pps_core > > > [ 36.405431] CPU: 1 PID: 2887 Comm: cc1 Not tainted 3.10.0-rc2+ #4 > >=20 > > Your compiler is triggering this? That doesn't seem likely... >=20 > yeah, though it seems pretty much anything that writes to that partition = will cause it. > Here's fsx, which died instantly... >=20 > [ 34.938367] XFS (sda2): xfs_setattr_size: mask 0x2068 mismatch on file= =02 >=20 > (Note, different mask this time) Which has ATTR_FORCE set but not ATTR_KILL_SUID or ATTR_KILL_SGID. And that, AFAICT, is impossible. > > This has come through the open path via handle_truncate(), which > > means that ATTR_MTIME|ATTR_CTIME|ATTR_OPEN|ATTR_FILE should also be > > set in the mask. They aren't, and that says to me that something > > else has been blottoed before XFS trips over this. Memory > > corruption? > > > > Can you print out the entire struct iattr? perhaps even hexdump it? >=20 > About to turn in for the night. If there's a shiny diff in my inbox in th= e morning, > I'll try it. I wouldn't lose sleep over it - I'm stumped at this point. I'll get a working path print to you, at minimum... > Tomorrow I'll also try running some older kernels with the same > options to see if it's something new, or an older bug. This is a > new machine, so it may be something that's been around for a > while, and for whatever reason, my other machines don't hit > this. Another thing that just occurred to me - what compiler are you using? We had a report last week on #xfs that xfsdump was failing with bad checksums because of link time optimisation (LTO) in gcc-4.8.0. When they turned that off, everything worked fine. So if you are using 4.8.0, perhaps trying a different compiler might be a good idea, too. Cheers, Dave. --=20 Dave Chinner david@fromorbit.com From arkadiusz.bubala@open-e.com Wed May 22 03:06:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C165C7F63 for ; Wed, 22 May 2013 03:06:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6DC3DAC003 for ; Wed, 22 May 2013 01:06:54 -0700 (PDT) X-ASG-Debug-ID: 1369210008-04bdf078181b4b0001-NocioJ Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.8]) by cuda.sgi.com with ESMTP id Kmtl4x5RZUHZJpwH (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 01:06:49 -0700 (PDT) X-Barracuda-Envelope-From: arkadiusz.bubala@open-e.com X-Barracuda-Apparent-Source-IP: 212.227.17.8 Received: from [192.168.241.151] (host8514118246.static.open-e.3s.pl [85.14.118.246]) by mrelayeu.kundenserver.de (node=mrbap4) with ESMTP (Nemesis) id 0MXGy5-1V07CE2vm1-00WHva; Wed, 22 May 2013 10:06:47 +0200 Message-ID: <519C7C91.2080005@open-e.com> Date: Wed, 22 May 2013 10:06:41 +0200 From: =?UTF-8?B?QXJrYWRpdXN6IEJ1YmHFgmE=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120613 Icedove/3.0.11 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 References: <519B6738.9030603@open-e.com> <519B6915.2010407@open-e.com> <20130521182630.GJ20028@sgi.com> X-ASG-Orig-Subj: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 In-Reply-To: <20130521182630.GJ20028@sgi.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Provags-ID: V02:K0:RniSgnX7R407v59GCLEO+PsRqWOQioV18KdpHWQL6Q/ J8/dksMI7GmSDeDUcX8gDnU8Ez6lOkzjgFNVh+ngAdGc7iOmG+ uuRbz9dNvz0QiX02kDlva4GRYvpNf9fBuGQRZw8P30LWGNeoOt 8YTNTJdxMBwGC6d6bK2dfku6KD0i5MWizvUoChMDeUZZ+Oa6d+ 4eHB52fQeUkWFVf+BTWbPpx97B0lZ9vj4yTJJzRygWTC56shHe 7EbzfT6nH7rONV1JeJKmnMKlL3HVVixiF4SC7qOVsSiLLf9Vsa ODjwxZaTAsRo27P7qpop+H1rRwrmfH7Y6H2PbptHc38Jtz5ya2 7vtbfuaNNuqcO9p9JzEx0uP5mcZhS0kpZHIlgs98F X-Barracuda-Connect: moutng.kundenserver.de[212.227.17.8] X-Barracuda-Start-Time: 1369210009 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131679 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello Ben, On 21.05.2013 20:26, Ben Myers wrote: > Hey Arkadiusz, > > Any 'xlog_space_left' messages as were reported with the commit you mentioned? > Have you attempted to backport the patch yet? > Sorry I've copied wrong link. Correct one is: http://patchwork.xfs.org/patch/4415/. Patch from mentioned commit fixed call trace which I had previously. > Regards, > Ben > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > -- Best regards Arkadiusz Bubała From arkadiusz.bubala@open-e.com Wed May 22 03:11:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 689757F63 for ; Wed, 22 May 2013 03:11:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 00FEDAC003 for ; Wed, 22 May 2013 01:11:12 -0700 (PDT) X-ASG-Debug-ID: 1369210270-04bdf078191b860001-NocioJ Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by cuda.sgi.com with ESMTP id bFWQMlvAGPJWYJbE (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 01:11:11 -0700 (PDT) X-Barracuda-Envelope-From: arkadiusz.bubala@open-e.com X-Barracuda-Apparent-Source-IP: 212.227.126.171 Received: from [192.168.241.151] (host8514118246.static.open-e.3s.pl [85.14.118.246]) by mrelayeu.kundenserver.de (node=mreu4) with ESMTP (Nemesis) id 0Lowim-1U0U3O0Tfo-00fGp4; Wed, 22 May 2013 10:11:10 +0200 Message-ID: <519C7D97.50909@open-e.com> Date: Wed, 22 May 2013 10:11:03 +0200 From: =?UTF-8?B?QXJrYWRpdXN6IEJ1YmHFgmE=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120613 Icedove/3.0.11 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 References: <519B6738.9030603@open-e.com> <20130521233937.GX29466@dastard> X-ASG-Orig-Subj: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 In-Reply-To: <20130521233937.GX29466@dastard> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Provags-ID: V02:K0:MeWe7FNiLRmPcfICpl20G3nIKdr+sakjTNV71BQ1bhv nGIX7G52XoG83DKS57KB5k2x6IUUQxX99wcwSCHyIL/2YiwaK9 xoZiYlsN6+kdjnutL3c7JgVunTgz10Q44HN+ZaSBTcKrmUY8kn lADpbeXBaz1OwDzJvhpaqbqgmGt+jW9zG+gycXrjnw6ZdGPc1G UOxhLJ5bo0YTHzYVmwRJzxIsy6Axdh54SJ8TWDGPHG7i8lQZp8 9h7FzJ/PhmA2psRuwyLuAp/eD2Hn56DEGNIVBxUmic6+MeQ212 EjY34z3B2mN/+uy5ZHppgpDJDdahneduQ7+3a2z2cpiRTlmHjc qIbg8uC9wY3I7ojx6X+f2m8EBrPJ6zxEEYcKA6fUp X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.171] X-Barracuda-Start-Time: 1369210271 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131679 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, > On Tue, May 21, 2013 at 02:23:20PM +0200, Arkadiusz Bubała wrote: > >> Hello, >> I've got a call trace which should be fixed by "drop buffer io >> reference when a bad bio is built" patch >> (http://patchwork.xfs.org/patch/3956/). Error occured on already >> patched Linux kernel 3.2.42. >> > That's an old kernel. Can you reproduce on a current TOT kernel? > It's entirely possible that this problem has been fixed as we > definitely mae some changes to the mount error handling path since > 3.2.... > > Ok. I'll try. >> Test environment consist two machines target and initiator. >> First machine works as target with QLogic Corp. ISP2432-based 4Gb >> Fibre Channel device. Storage is placed on two KINGSTON SNV425S SSD >> working as RAID0 array. RAID is managed by LSI MegaRAID SAS 1068 >> controller. >> Second machine works as initiator with the same QLogic card. >> >> After few days of running test script I got following call trace and >> XFS stopped working. >> > Can you narrow this down from "takes several days" to the simplest > possible reproducer? It happened due to IO errors during mount, so > maybe you can did that part out of your script and give us a test > case that reproduces on the first mount? > > I 'll try. This errors occurs only on heavy load. Is there any possibility to simulate I/O errors on XFS filesystem? -- Best regards Arkadiusz Bubała From qcai@redhat.com Wed May 22 03:40:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C93EB7F6A for ; Wed, 22 May 2013 03:40:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id B17D3304043 for ; Wed, 22 May 2013 01:40:00 -0700 (PDT) X-ASG-Debug-ID: 1369211998-04cb6c47421a540001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id r3vxpBnyM4a3SEAp for ; Wed, 22 May 2013 01:39:59 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4M8dwnl010038; Wed, 22 May 2013 04:39:58 -0400 Date: Wed, 22 May 2013 04:39:58 -0400 (EDT) From: CAI Qian To: LKML Cc: xfs@oss.sgi.com, stable@vger.kernel.org Message-ID: <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> In-Reply-To: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> Subject: 3.9.2: xfstests triggered panic MIME-Version: 1.0 X-ASG-Orig-Subj: 3.9.2: xfstests triggered panic Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.2: xfstests triggered panic Thread-Index: SAHC0wroGuqbIoKf+9YGsuTDL+slZg== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369211998 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131681 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Reproduced on almost all s390x guests by running xfstests. 14634.396658=C2=A8 XFS (dm-1): Mounting Filesystem=20 14634.525522=C2=A8 XFS (dm-1): Ending clean mount=20 14640.413007=C2=A8 <000000000017c6d4>=C2=A8 idle_balance+0x1a0/0x340=20 14640.413010=C2=A8 <000000000063303e>=C2=A8 __schedule+0xa22/0xaf0=20 14640.428279=C2=A8 <0000000000630da6>=C2=A8 schedule_timeout+0x186/0x2c0= =20 14640.428289=C2=A8 <00000000001cf864>=C2=A8 rcu_gp_kthread+0x1bc/0x298=20 14640.428300=C2=A8 <0000000000158c5a>=C2=A8 kthread+0xe6/0xec=20 14640.428304=C2=A8 <0000000000634de6>=C2=A8 kernel_thread_starter+0x6/0xc= =20 14640.428308=C2=A8 <0000000000634de0>=C2=A8 kernel_thread_starter+0x0/0xc= =20 14640.428311=C2=A8 Last Breaking-Event-Address:=20 14640.428314=C2=A8 <000000000016bd76>=C2=A8 walk_tg_tree_from+0x3a/0xf4=20 14640.428319=C2=A8 list_add corruption. next->prev should be prev (0000000= 000000918=20 ), but was (null). (next=3D (null)).=20 14640.508240=C2=A8 ------------=EF=BF=BD cut here =C2=A8------------=20 14640.508256=C2=A8 WARNING: at lib/list_debug.c:29=20 14640.508259=C2=A8 Modules linked in: binfmt_misc(F) tun(F) ipt_ULOG(F) af_= 802154(F)=20 scsi_transport_iscsi(F) af_iucv(F) af_key(F) nfc(F) rds(F) atm(F) btrfs(F)= zlib=20 _deflate(F) raid6_pq(F) xor(F) vfat(F) fat(F) nfsv3(F) nfs_acl(F) nfs(F) lo= ckd(F=20 ) sunrpc(F) fscache(F) nfnetlink_log(F) nfnetlink(F) arc4(F) md4(F) nls_utf= 8(F)=20 cifs(F) dns_resolver(F) nf_tproxy_core(F) nls_koi8_u(F) nls_cp932(F) ts_kmp= (F) s=20 ctp(F) fuse(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadcast(F) ipt_MAS= QUERA=20 DE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) ip6t_REJECT(F) nf_c= onntr=20 ack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat_ipv4(F) nf_nat(F) iptab= le_ma=20 ngle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_defrag_ipv4(F) xt_conntrack(F= ) nf_=20 conntrack(F) ebtable_filter(F) ebtables(F) ip6table_filter(F) ip6_tables(F)= ipta=20 ble_filter(F) ip_tables(F) sg(F) qeth_l2(F) vmur(F) xfs(F) libcrc32c(F) das= d_fba=20 _mod(F) dasd_eckd_mod(F) dasd_mod(F) qeth(F) qdio(F) lcs(F) ctcm(F) ccwgrou= p(F)=20 fsm(F) dm_mirror(F) dm_region_hash(F) dm_log(F) dm_mod(F) =EF=BF=BD last un= loaded: brd=C2=A8=20 14640.508358=C2=A8 CPU: 0 Tainted: GF D 3.9.2 #1=20 14640.508361=C2=A8 Process rcu_sched (pid: 10, task: 000000003ffc60c0, ksp:= 00000000=20 3ffe3ba0)=20 14640.508363=C2=A8 Krnl PSW : 0404c00180000000 0000000000426544 (__list_add= +0xd0/0xd=20 4)=20 14640.508378=C2=A8 R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0= PM:0 EA:=20 3=20 Krnl GPRS: 0000000000000002 0400000000a0a500 0000000000000075 0000000000000= 000=20 14640.508383=C2=A8 0000000000426540 00000000026af440 000000003da= 430a8 000=20 0000000915c90=20 14640.508385=C2=A8 00000000009cd800 00000000026b2800 00000000009= 15c90 000=20 0000000000000=20 14640.508388=C2=A8 0000000000000918 000000003da430d0 000000000= =20 14640.516392=C2=A8 =EF=BF=BD <0000000000634de6>=C2=A8 kernel_thread_starte= r+0x6/0xc=20 14640.516395=C2=A8 =EF=BF=BD <0000000000634de0>=C2=A8 kernel_thread_starte= r+0x0/0xc=20 14640.516398=C2=A8 Last Breaking-Event-Address:=20 14640.516400=C2=A8 =EF=BF=BD <0000000000426544>=C2=A8 __list_add+0xd0/0xd4= =20 14640.516402=C2=A8=20 14640.516544=C2=A8 Kernel panic - not syncing: Fatal exception in interrupt= =20 00: HCPGIR450W CP entered; disabled wait PSW 00020001 80000000 00000000 001= 0F2AC Sometimes, this pops up, [16907.275002] WARNING: at kernel/rcutree.c:1960=20 or this, 15316.154171=C2=A8 XFS (dm-1): Mounting Filesystem=20 15316.255796=C2=A8 XFS (dm-1): Ending clean mount=20 15320.364246=C2=A8 00000000006367a2: e310b0080004 lg = %r1,8(%r=20 11)=20 15320.364249=C2=A8 00000000006367a8: 41101010 la = %r1,16(%=20 r1)=20 15320.364251=C2=A8 00000000006367ac: e33010000004 lg = %r3,0(%r=20 1)=20 15320.364252=C2=A8 Call Trace:=20 15320.364252=C2=A8 Last Breaking-Event-Address:=20 15320.364253=C2=A8 =EF=BF=BD <0000000000000000>=C2=A8 Kernel stack overflo= w.=20 15320.364308=C2=A8 CPU: 0 Tainted: GF W 3.9.2 #1=20 15320.364309=C2=A8 Process rhts-test-runne (pid: 625, task: 000000003dccc89= 0, ksp: 0=20 000000037433c78)=20 15320.364310=C2=A8 Krnl PSW : 0404c00180000000 0000000000636796 (do_dat_exc= eption+0x=20 26/0x36c)=20 15320.364315=C2=A8 R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0= PM:0 EA:=20 3=20 15320.364316=C2=A8 Krnl GPRS: e500000000000000 0000000000014138 fffffffffff= fffbf 000=20 0000000901110=20 15320.364317=C2=A8 00000000001a9fe6 0000000000124438 00000000000= 20001 000=20 0000000000001=20 15320.364318=C2=A8 00000000000141d8 00000000001a9fe6 00000000000= 00044 000=20 00000000141d8=20 0000000014028=20 15320.366500=C2=A8 Krnl Code: 000000000063678a: b9040082 lgr = %r8,%r2=20 15320.366502=C2=A8 000000000063678e: a729ffbf lghi = %r2,-65=20 15320.366504=C2=A8 #0000000000636792: a7840001 brc = 8,636794=20 =20 15320.366507=C2=A8 >0000000000636796: e310f0980024 stg = %r1,152(=20 %r15)=20 15320.366509=C2=A8 000000000063679c: e3b003100004 lg = %r11,784=20 =20 15320.366512=C2=A8 00000000006367a2: e310b0080004 lg = %r1,8(%r=20 11)=20 15320.366515=C2=A8 00000000006367a8: 41101010 la = %r1,16(%=20 r1)=20 15320.366518=C2=A8 00000000006367ac: e33010000004 lg = %r3,0(%r=20 1)=20 15320.366518=C2=A8 Call Trace:=20 15320.366518=C2=A8 Last Breaking-Event-Address:=20 15320.366519=C2=A8 =EF=BF=BD <0000000000000000>=C2=A8 Kernel stack overflo= w.=20 15320.366541=C2=A8 CPU: 0 Tainted: GF W 3.9.2 #1=20 15320.366542=C2=A8 Process rhts-test-runne (pid: 625, task: 000000003dccc89= 0, ksp: 0=20 000000037433c78)=20 15320.366543=C2=A8 Krnl PSW : 0404c00180000000 0000000000636796 (do_dat_exc= eption+0x=20 26/0x36c)=20 15320.366546=C2=A8 R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0= PM:0 EA:=20 3=20 15320.366547=C2=A8 Krnl GPRS: e500000000000000 0000000000014138 fffffffffff= fffbf 000=20 0000000901110=20 15320.366548=C2=A8 00000000001a9fe6 0000000000124438 00000000000= 20001 000=20 0000000000001=20 15320.366549=C2=A8 00000000000141d8 00000000001a9fe6 00000000000= 00044 000=20 00000000141d8=20 15320.366550=C2=A8 0000000037430000 000000000063df78 00000000006= 34f24 000=20 0000000014028=20 15320.366557=C2=A8 Krnl Code: 000000000063678a: b9040082 lgr = %r8,%r2=20 15320.366560=C2=A8 000000000063678e: a729ffbf=20 CAI Qian From qcai@redhat.com Wed May 22 03:48:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E357A7F6F for ; Wed, 22 May 2013 03:48:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id CD8738F804B for ; Wed, 22 May 2013 01:48:59 -0700 (PDT) X-ASG-Debug-ID: 1369212538-04cb6c47411adb0001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id iTbesMP9fxZZiOwZ for ; Wed, 22 May 2013 01:48:58 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4M8mu0L011629; Wed, 22 May 2013 04:48:57 -0400 Date: Wed, 22 May 2013 04:48:56 -0400 (EDT) From: CAI Qian To: Eric Sandeen Cc: xfs@oss.sgi.com Message-ID: <2013798179.4502334.1369212536770.JavaMail.root@redhat.com> In-Reply-To: <2132292786.4417784.1369195807747.JavaMail.root@redhat.com> References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> <647316680.8155487.1367913231441.JavaMail.root@redhat.com> <51895115.90108@sandeen.net> <2132292786.4417784.1369195807747.JavaMail.root@redhat.com> Subject: Re: 3.9.0: XFS rootfs corruption MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.0: XFS rootfs corruption Thread-Index: IdWnK93hlt2QsMnf3gyQGdpEp61MFOXdY3Zr X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369212538 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "CAI Qian" > To: "Eric Sandeen" > Cc: xfs@oss.sgi.com > Sent: Wednesday, May 22, 2013 12:10:07 PM > Subject: Re: 3.9.0: XFS rootfs corruption > > OK, this has never been reproduced in 3.9-rc1 so far. It may because the > rootfs became full after crash dump testing though. > CAI Qian Oops, it is still there, [ 1.872402] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled [ 1.882003] XFS (dm-1): Mounting Filesystem [ 5.036445] XFS (dm-1): Starting recovery (logdev: internal) [ 5.337985] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 176 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000245778c [ 5.337985] [ 5.338002] CPU: 15 PID: 425 Comm: mount Not tainted 3.10.0-rc2+ #1 [ 5.338007] Call Trace: [ 5.338014] [c0000002e3782b90] [c000000000014e1c] .show_stack+0x7c/0x1f0 (unreliable) [ 5.338024] [c0000002e3782c60] [c0000000007439dc] .dump_stack+0x28/0x3c [ 5.338056] [c0000002e3782cd0] [d000000002410634] .xfs_error_report+0x54/0x70 [xfs] [ 5.338088] [c0000002e3782d40] [d000000002457634] .__xfs_dir3_data_check+0x784/0x820 [xfs] [ 5.338120] [c0000002e3782e40] [d00000000245778c] .xfs_dir3_data_verify+0xbc/0xe0 [xfs] [ 5.338151] [c0000002e3782ec0] [d0000000024577ec] .xfs_dir3_data_write_verify+0x3c/0x1c0 [xfs] [ 5.338181] [c0000002e3782f70] [d00000000240db44] ._xfs_buf_ioapply+0xd4/0x410 [xfs] [ 5.338210] [c0000002e37830b0] [d00000000240df8c] .xfs_buf_iorequest+0x4c/0xe0 [xfs] [ 5.338241] [c0000002e3783140] [d00000000240e084] .xfs_bdstrat_cb+0x64/0x120 [xfs] [ 5.338271] [c0000002e37831d0] [d00000000240e294] .__xfs_buf_delwri_submit+0x154/0x2b0 [xfs] [ 5.338300] [c0000002e37832b0] [d00000000240f2d8] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] [ 5.338334] [c0000002e3783350] [d000000002471fc4] .xlog_recover_commit_trans+0xf4/0x1a0 [xfs] [ 5.338366] [c0000002e3783410] [d0000000024722cc] .xlog_recover_process_data+0x25c/0x370 [xfs] [ 5.338399] [c0000002e37834e0] [d000000002472528] .xlog_do_recovery_pass+0x148/0x590 [xfs] [ 5.338431] [c0000002e3783650] [d000000002472a08] .xlog_do_log_recovery+0x98/0x110 [xfs] [ 5.338463] [c0000002e37836e0] [d000000002472aa0] .xlog_do_recover+0x20/0x160 [xfs] [ 5.338495] [c0000002e3783770] [d000000002472c78] .xlog_recover+0x98/0x110 [xfs] [ 5.338527] [c0000002e3783800] [d00000000247d504] .xfs_log_mount+0x134/0x1d0 [xfs] [ 5.338559] [c0000002e3783890] [d0000000024768e8] .xfs_mountfs+0x3c8/0x780 [xfs] [ 5.338589] [c0000002e3783940] [d000000002424bbc] .xfs_fs_fill_super+0x30c/0x3a0 [xfs] [ 5.338598] [c0000002e37839e0] [c000000000214a78] .mount_bdev+0x258/0x2a0 [ 5.338627] [c0000002e3783ab0] [d000000002422678] .xfs_fs_mount+0x18/0x30 [xfs] [ 5.338635] [c0000002e3783b20] [c000000000215900] .mount_fs+0x70/0x230 [ 5.338643] [c0000002e3783be0] [c000000000237ee8] .vfs_kern_mount+0x58/0x130 [ 5.338650] [c0000002e3783c90] [c00000000023b0b0] .do_mount+0x2d0/0xb30 [ 5.338657] [c0000002e3783d70] [c00000000023b9c0] .SyS_mount+0xb0/0x110 [ 5.338664] [c0000002e3783e30] [c000000000009e54] syscall_exit+0x0/0x98 [ 5.338672] c0000002d5220000: 58 44 32 44 09 50 00 40 0a 50 00 40 0b 50 00 40 XD2D.P.@.P.@.P.@ [ 5.338679] c0000002d5220010: 00 00 00 00 08 23 e6 2d 32 62 65 61 68 5f 74 61 .....#.-2beah_ta [ 5.338686] c0000002d5220020: 73 6b 5f 33 64 36 62 37 64 62 32 2d 61 35 35 37 sk_3d6b7db2-a557 [ 5.338693] c0000002d5220030: 2d 34 34 63 31 2d 38 65 64 36 2d 62 63 32 62 37 -44c1-8ed6-bc2b7 [ 5.338700] XFS (dm-1): Internal error xfs_dir3_data_write_verify at line 271 of file fs/xfs/xfs_dir2_data.c. Caller 0xd00000000240db44 [ 5.338700] [ 5.338710] CPU: 15 PID: 425 Comm: mount Not tainted 3.10.0-rc2+ #1 [ 5.338715] Call Trace: [ 5.338718] [c0000002e3782c60] [c000000000014e1c] .show_stack+0x7c/0x1f0 (unreliable) [ 5.338726] [c0000002e3782d30] [c0000000007439dc] .dump_stack+0x28/0x3c [ 5.338755] [c0000002e3782da0] [d000000002410634] .xfs_error_report+0x54/0x70 [xfs] [ 5.338785] [c0000002e3782e10] [d0000000024106cc] .xfs_corruption_error+0x7c/0xb0 [xfs] [ 5.338816] [c0000002e3782ec0] [d0000000024578f8] .xfs_dir3_data_write_verify+0x148/0x1c0 [xfs] [ 5.338846] [c0000002e3782f70] [d00000000240db44] ._xfs_buf_ioapply+0xd4/0x410 [xfs] [ 5.338875] [c0000002e37830b0] [d00000000240df8c] .xfs_buf_iorequest+0x4c/0xe0 [xfs] [ 5.338906] [c0000002e3783140] [d00000000240e084] .xfs_bdstrat_cb+0x64/0x120 [xfs] [ 5.338936] [c0000002e37831d0] [d00000000240e294] .__xfs_buf_delwri_submit+0x154/0x2b0 [xfs] [ 5.338965] [c0000002e37832b0] [d00000000240f2d8] .xfs_buf_delwri_submit+0x38/0xd0 [xfs] [ 5.338998] [c0000002e3783350] [d000000002471fc4] .xlog_recover_commit_trans+0xf4/0x1a0 [xfs] [ 5.339030] [c0000002e3783410] [d0000000024722cc] .xlog_recover_process_data+0x25c/0x370 [xfs] [ 5.339063] [c0000002e37834e0] [d000000002472528] .xlog_do_recovery_pass+0x148/0x590 [xfs] [ 5.339095] [c0000002e3783650] [d000000002472a08] .xlog_do_log_recovery+0x98/0x110 [xfs] [ 5.339128] [c0000002e37836e0] [d000000002472aa0] .xlog_do_recover+0x20/0x160 [xfs] [ 5.339160] [c0000002e3783770] [d000000002472c78] .xlog_recover+0x98/0x110 [xfs] [ 5.339192] [c0000002e3783800] [d00000000247d504] .xfs_log_mount+0x134/0x1d0 [xfs] [ 5.339226] [c0000002e3783890] [d0000000024768e8] .xfs_mountfs+0x3c8/0x780 [xfs] [ 5.339256] [c0000002e3783940] [d000000002424bbc] .xfs_fs_fill_super+0x30c/0x3a0 [xfs] [ 5.339264] [c0000002e37839e0] [c000000000214a78] .mount_bdev+0x258/0x2a0 [ 5.339293] [c0000002e3783ab0] [d000000002422678] .xfs_fs_mount+0x18/0x30 [xfs] [ 5.339301] [c0000002e3783b20] [c000000000215900] .mount_fs+0x70/0x230 [ 5.339308] [c0000002e3783be0] [c000000000237ee8] .vfs_kern_mount+0x58/0x130 [ 5.339315] [c0000002e3783c90] [c00000000023b0b0] .do_mount+0x2d0/0xb30 [ 5.339322] [c0000002e3783d70] [c00000000023b9c0] .SyS_mount+0xb0/0x110 [ 5.339329] [c0000002e3783e30] [c000000000009e54] syscall_exit+0x0/0x98 [ 5.339335] XFS (dm-1): Corruption detected. Unmount and run xfs_repair [ 5.339341] XFS (dm-1): xfs_do_force_shutdown(0x8) called from line 1364 of file fs/xfs/xfs_buf.c. Return address = 0xd00000000240db70 [ 5.339350] XFS (dm-1): Corruption of in-memory data detected. Shutting down filesystem [ 5.339356] XFS (dm-1): Please umount the filesystem and rectify the problem(s) [ 5.339365] XFS (dm-1): metadata I/O error: block 0x2cb35d0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.339372] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339382] XFS (dm-1): metadata I/O error: block 0x2cb71d8 ("xlog_recover_iodone") error 5 numblks 8 [ 5.339389] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339398] XFS (dm-1): metadata I/O error: block 0x2fada78 ("xlog_recover_iodone") error 5 numblks 8 [ 5.339405] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339415] XFS (dm-1): metadata I/O error: block 0x3243eb0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.339422] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339431] XFS (dm-1): metadata I/O error: block 0x324ee10 ("xlog_recover_iodone") error 5 numblks 16 [ 5.339438] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339447] XFS (dm-1): metadata I/O error: block 0x324ee20 ("xlog_recover_iodone") error 5 numblks 16 [ 5.339454] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339463] XFS (dm-1): metadata I/O error: block 0x4150802 ("xlog_recover_iodone") error 5 numblks 1 [ 5.339471] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339480] XFS (dm-1): metadata I/O error: block 0x4323540 ("xlog_recover_iodone") error 5 numblks 8 [ 5.339487] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339496] XFS (dm-1): metadata I/O error: block 0x457c9b0 ("xlog_recover_iodone") error 5 numblks 16 [ 5.339503] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.339519] XFS (dm-1): metadata I/O error: block 0x2cb2158 ("xlog_recover_iodone") error 117 numblks 8 [ 5.339526] XFS (dm-1): xfs_do_force_shutdown(0x1) called from line 386 of file fs/xfs/xfs_log_recover.c. Return address = 0xd00000000246d140 [ 5.412895] XFS (dm-1): log mount/recovery failed: error 117 [ 5.412943] XFS (dm-1): log mount failed [ FAILED ] Failed to mount /sysroot. See 'systemctl status sysroot.mount' for details. [ DEPEND ] Dependency failed for Initrd Root File System. [ DEPEND ] Dependency failed for Reload Configuration from the Real Root. [ 5.423354] systemd[1]: Starting Emergency Shell... [ 5.428268] systemd[1]: Starting Journal Service... [ 5.431426] systemd-journald[201]: Received SIGTERM [ 5.432383] systemd[1]: Starting Journal Service... [ 5.432961] systemd[1]: Started Journal Service. [ 5.433743] systemd[1]: Stopped udev Kernel Device Manager. [ 5.433777] systemd[1]: Stopping dracut pre-udev hook... [ 5.433789] systemd[1]: Stopped dracut pre-udev hook. [ 5.433829] systemd[1]: Stopping dracut cmdline hook... [ 5.433840] systemd[1]: Stopped dracut cmdline hook. [ 5.433875] systemd[1]: Stopping udev Kernel Socket. [ 5.433911] systemd[1]: Closed udev Kernel Socket. [ 5.433922] systemd[1]: Stopping udev Control Socket. [ 5.433955] systemd[1]: Closed udev Control Socket. Generating "/run/initramfs/sosreport.txt" Entering emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. You might want to save "/run/initramfs/sosreport.txt" to a USB stick or /boot after mounting them and attach it to a bug report. :/# > > ----- Original Message ----- > > From: "Eric Sandeen" > > To: "CAI Qian" > > Cc: xfs@oss.sgi.com > > Sent: Wednesday, May 8, 2013 3:08:05 AM > > Subject: Re: 3.9.0: XFS rootfs corruption > > > > On 5/7/13 2:53 AM, CAI Qian wrote: > > > > > > > > > ----- Original Message ----- > > >> From: "Eric Sandeen" > > >> To: "CAI Qian" > > >> Cc: xfs@oss.sgi.com > > >> Sent: Monday, May 6, 2013 10:31:01 PM > > >> Subject: Re: 3.9.0: XFS rootfs corruption > > >> > > >> On 5/6/13 2:50 AM, CAI Qian wrote: > > >>> Saw this on several different Power7 systems after kdump reboot. It has > > >>> xfsprogs-3.1.10 > > >>> and rootfs in on LVM. Never saw one of those in any of the RC releases. > > >>> > > >>> ] Reached target Basic System. > > >>> [ 4.919316] bio: create slab at 1 > > >>> [ 5.078616] SGI XFS with ACLs, security attributes, large > > >>> block/inode > > >>> numbers, no debug enabled > > >>> [ 5.081925] XFS (dm-1): Mounting Filesystem > > >>> [ 5.168530] XFS (dm-1): Starting recovery (logdev: internal) > > >>> [ 5.333575] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line > > >>> 176 > > >>> of > > >>> file fs/xfs/xfs_dir2_data.c. Caller 0xd000000002396fdc > > >> > > >> here: > > >> > > >> /* > > >> * Need to have seen all the entries and all the bestfree slots. > > >> */ > > >> XFS_WANT_CORRUPTED_RETURN(freeseen == 7); > > >> > > >> I hope Dave knows offhand what this might mean. :) > > >> > > >> Could you get a metadump of the filesystem in question? > > > Err, less familiar here. May I ask how can I do that? > > > > since it's the root fs, you might need to do it from some sort of rescue > > shell, then just do xfs_metadump /dev/ > > > > the resulting file should compress further with something like bzip2. > > > > ... > > > > >>> Also, never saw any of those in other architectures like x64, but > > >>> started > > >>> get those there in 3.9.0. > > >>> Unsure if those are related. > > >>> > > >>> [ 3224.369782] > > >>> ============================================================================= > > >>> [ 3224.370017] BUG xfs_efi_item (Tainted: GF B ): Poison > > >>> overwritten > > >>> [ 3224.370017] > > >>> ----------------------------------------------------------------------------- > > >> > > >> 2: 'F' if any module was force loaded by "insmod -f", ' ' if all > > >> modules were loaded normally. > > >> > > >> Force loaded modules, what's that from? > > > This could be just happened after the booting done or we were running a > > > stress test later > > > that does load (modprobe *) and unload (modprobe -r *) every module. > > > Again, > > > those warnings > > > could be totally unrelated to the above rootfs corruption. > > > CAI Qian > > > > hmmm :) So any one of those modules could have caused memory corruption I > > guess. > > > > If you can hit it reliably you might try to narrow it down to whether it > > is a particular module causing it. > > > > -Eric > > > > > From david@fromorbit.com Wed May 22 04:46:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EDCDA7F3F for ; Wed, 22 May 2013 04:46:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D9620304043 for ; Wed, 22 May 2013 02:46:56 -0700 (PDT) X-ASG-Debug-ID: 1369216011-04cb6c473f1de70001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id F2RtIjPte8QvdiyF for ; Wed, 22 May 2013 02:46:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkNAL2SnFF5LBBG/2dsb2JhbABbgwiDArl2hR4EAYECF3SCIwEBBTocIwwECAMRBAEBAQklDwUlAxMOE4gMul4WjWeBHQcGg04DlzeRQYMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail07.adl2.internode.on.net with ESMTP; 22 May 2013 19:16:51 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uf5dB-0004Ps-0o; Wed, 22 May 2013 19:46:49 +1000 Date: Wed, 22 May 2013 19:46:48 +1000 From: Dave Chinner To: CAI Qian Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: 3.9.0: XFS rootfs corruption Message-ID: <20130522094648.GJ29466@dastard> X-ASG-Orig-Subj: Re: 3.9.0: XFS rootfs corruption References: <1871204531.7584919.1367826613792.JavaMail.root@redhat.com> <5187BEA5.4040107@sandeen.net> <647316680.8155487.1367913231441.JavaMail.root@redhat.com> <51895115.90108@sandeen.net> <2132292786.4417784.1369195807747.JavaMail.root@redhat.com> <2013798179.4502334.1369212536770.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2013798179.4502334.1369212536770.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369216012 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 04:48:56AM -0400, CAI Qian wrote: > > > ----- Original Message ----- > > From: "CAI Qian" > > To: "Eric Sandeen" > > Cc: xfs@oss.sgi.com > > Sent: Wednesday, May 22, 2013 12:10:07 PM > > Subject: Re: 3.9.0: XFS rootfs corruption > > > > OK, this has never been reproduced in 3.9-rc1 so far. It may because the > > rootfs became full after crash dump testing though. > > CAI Qian > Oops, it is still there, Have you run xfs_repair -n to determine what is corrupted on disk? Can you post the output when you do? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 22 04:53:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 26D4C7F77 for ; Wed, 22 May 2013 04:53:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E9B21304053 for ; Wed, 22 May 2013 02:53:03 -0700 (PDT) X-ASG-Debug-ID: 1369216381-04bdf07817210a0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id TsBhDs6JbYBg4UAm for ; Wed, 22 May 2013 02:53:02 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ar0NADWUnFF5LBBG/2dsb2JhbABbgwiDAmm5DYUeBAGBARd0giMBAQQBIwQLASMjBQsIAQIYAgIFIQICDwUlAyETiAcFjWubJJFQFoEQjEgPgR0HgkGBEwOXN5FBgyEqgS0 Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail07.adl2.internode.on.net with ESMTP; 22 May 2013 19:23:01 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uf5jA-0004Qv-MW; Wed, 22 May 2013 19:53:00 +1000 Date: Wed, 22 May 2013 19:53:00 +1000 From: Dave Chinner To: CAI Qian Cc: LKML , stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: 3.9.2: xfstests triggered panic Message-ID: <20130522095300.GK29466@dastard> X-ASG-Orig-Subj: Re: 3.9.2: xfstests triggered panic References: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369216381 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131687 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 04:39:58AM -0400, CAI Qian wrote: > Reproduced on almost all s390x guests by running xfstests. > > 14634.396658¨ XFS (dm-1): Mounting Filesystem > 14634.525522¨ XFS (dm-1): Ending clean mount > 14640.413007¨ <000000000017c6d4>¨ idle_balance+0x1a0/0x340 > 14640.413010¨ <000000000063303e>¨ __schedule+0xa22/0xaf0 > 14640.428279¨ <0000000000630da6>¨ schedule_timeout+0x186/0x2c0 > 14640.428289¨ <00000000001cf864>¨ rcu_gp_kthread+0x1bc/0x298 > 14640.428300¨ <0000000000158c5a>¨ kthread+0xe6/0xec > 14640.428304¨ <0000000000634de6>¨ kernel_thread_starter+0x6/0xc > 14640.428308¨ <0000000000634de0>¨ kernel_thread_starter+0x0/0xc > 14640.428311¨ Last Breaking-Event-Address: > 14640.428314¨ <000000000016bd76>¨ walk_tg_tree_from+0x3a/0xf4 > 14640.428319¨ list_add corruption. next->prev should be prev (0000000000000918 > ), but was (null). (next= (null)). Where's XFS in this? walk_tg_tree_from() is part of the scheduler code. This kind of implies a stack corruption.... > Sometimes, this pops up, > [16907.275002] WARNING: at kernel/rcutree.c:1960 > > or this, > 15316.154171¨ XFS (dm-1): Mounting Filesystem > 15316.255796¨ XFS (dm-1): Ending clean mount > 15320.364246¨ 00000000006367a2: e310b0080004 lg %r1,8(%r > 11) > 15320.364249¨ 00000000006367a8: 41101010 la %r1,16(% > r1) > 15320.364251¨ 00000000006367ac: e33010000004 lg %r3,0(%r > 1) > 15320.364252¨ Call Trace: > 15320.364252¨ Last Breaking-Event-Address: > 15320.364253¨ � <0000000000000000>¨ Kernel stack overflow. > 15320.364308¨ CPU: 0 Tainted: GF W 3.9.2 #1 > 15320.364309¨ Process rhts-test-runne (pid: 625, task: 000000003dccc890, ksp: 0 .... and there you go - a stack overflow. Your kernel stack size is too small. I'd suggest that you need 16k stacks on s390 - IIRC every function call has 128 byte stack frame, and there are call chains 70-80 functions deep in the storage stack... Cheers, Dave. -- Dave Chinner david@fromorbit.com From mrb284@nyu.edu Wed May 22 07:34:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=HTML_MESSAGE,SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3E5477F74 for ; Wed, 22 May 2013 07:34:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1CB71304077 for ; Wed, 22 May 2013 05:34:35 -0700 (PDT) X-ASG-Debug-ID: 1369226072-04cbb0049a28f20001-NocioJ Received: from mx2.nyu.edu (MX2.NYU.EDU [128.122.118.242]) by cuda.sgi.com with ESMTP id Farg5AKNXUahZoeT for ; Wed, 22 May 2013 05:34:32 -0700 (PDT) X-Barracuda-Envelope-From: mrb284@nyu.edu X-Barracuda-Apparent-Source-IP: 128.122.118.242 X-Barracuda-Registry: Level1 [nyu.edu/128.122.118.242] Received: from mx2.nyu.edu (localhost [127.0.0.1]) by mx2.nyu.edu (8.13.8/8.13.8) with ESMTP id r4MCYVFJ008639 for ; Wed, 22 May 2013 08:34:32 -0400 (EDT) X-Barracuda-Registry: Level1 [nyu.edu/128.122.118.242] X-Barracuda-Registry: Level1 [nyu.edu/128.122.118.242] X-Barracuda-Registry: Level1 [nyu.edu/128.122.118.242] Received: from [192.168.0.2] (rrcs-24-103-58-253.nyc.biz.rr.com [24.103.58.253]) (authenticated bits=0) by mx2.nyu.edu (8.13.8/8.13.8) with ESMTP id r4MCYNXV008438; Wed, 22 May 2013 08:34:29 -0400 (EDT) Message-Id: <201305221234.r4MCYNXV008438@mx2.nyu.edu> Content-Type: multipart/alternative; boundary="===============0971471910==" MIME-Version: 1.0 Subject: PL SERVICE To: Recipients X-ASG-Orig-Subj: PL SERVICE From: "PL GENERAL WEBMAIL" Date: Wed, 22 May 2013 08:34:13 -0400 X-Barracuda-Connect: MX2.NYU.EDU[128.122.118.242] X-Barracuda-Start-Time: 1369226072 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address You will not see this in a MIME-aware mail reader. --===============0971471910== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body alarm Szanowny Uzytkownik=F3w Poczty Elektronicznej w Polska Potrzebujemy Cie, ABY uaktualnic Swoje Konto Teraz zrobic nowego bezpiecze= nstwa IT w Polska. Upewnij Sie, DOLACZ DO NAS NA Wiecej bezpieczenstwa Ochrony i.. Dla wlasnego bezpieczenstwa. Musimy Sie upewnic, ZE Uzytkownicy Poczty SA prawdziwym wlascicielem tam k= onta. Miejmy zabezpieczenia konta, ABY uniknac zamkniecia Tego konkretnego konta. ADANIU: Jesli domena NIE Jest w Tym miejscu prosimy wypelnic wrazliwa czes= c poprawnie, byc zabezpieczone authomatically. KLIKNIJ zabezpieczyc moje Konto Teraz dzieki POCZTA. | Polityka prywatno=15Bci | Regulamin | Prywatno=15B=107 danych | = Mapa strony | Pomoc =A9 2013 GENERAL POCZTA Inc. --===============0971471910== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body

KLIKNIJ zabezpieczyc moje Konto Teraz

dzieki

POCZTA. | Polityka prywatno= =C5=9Bci | Regulamin | Prywatno=C5=9B=C4=87 danych | Mapa strony | Pomoc

=C2=A9 2013 GENERAL POCZTA = Inc.

--===============0971471910==-- From prvs=8475c4af6=CMaresca@schools.nyc.gov Wed May 22 07:43:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2C2BA7F74 for ; Wed, 22 May 2013 07:43:16 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D2A77304043 for ; Wed, 22 May 2013 05:43:12 -0700 (PDT) X-ASG-Debug-ID: 1369226590-04bdf078172a530001-w1Z2WR Received: from op0iron01.schools.nyc.gov (smtp2.nycenet.edu [165.155.104.102]) by cuda.sgi.com with ESMTP id jYv6bDFKoPrDzki6 for ; Wed, 22 May 2013 05:43:10 -0700 (PDT) X-Barracuda-Envelope-From: prvs=8475c4af6=CMaresca@schools.nyc.gov X-Barracuda-Apparent-Source-IP: 165.155.104.102 X-SBRS: None X-SenderGroup: RELAYLIST X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqMEAKi8nFEKAgRt/2dsb2JhbABawjqCahmBAHSCIwEBAQQcFFkCAQgNBAQBAQsGGAYBAUsBAQMCAwEBHwbDHI1YgREWBAMMgwJhA4hnhxSBK4YShkGOKoFV X-IPAS-Result: AqMEAKi8nFEKAgRt/2dsb2JhbABawjqCahmBAHSCIwEBAQQcFFkCAQgNBAQBAQsGGAYBAUsBAQMCAwEBHwbDHI1YgREWBAMMgwJhA4hnhxSBK4YShkGOKoFV Received: from unknown (HELO wsk831pxchcas02.nyced.org) ([10.2.4.109]) by op0iron01.schools.nyc.gov with ESMTP; 22 May 2013 08:43:08 -0400 Received: from OP0EXBH1.nyced.org (10.2.4.44) by wsk831pxchcas02.nyced.org (10.2.4.109) with Microsoft SMTP Server id 14.3.123.3; Wed, 22 May 2013 08:43:07 -0400 Received: from EX2VS3.nyced.org ([10.2.4.63]) by OP0EXBH1.nyced.org with Microsoft SMTPSVC(6.0.3790.4675); Wed, 22 May 2013 08:43:04 -0400 x-mimeole: Produced By Microsoft Exchange V6.5 Content-Class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01CE56E9.E51F6680" Subject: FW: Administrator Warning**You Have 24hrs To Respond To This Email Alert ** Date: Wed, 22 May 2013 08:43:01 -0400 X-ASG-Orig-Subj: FW: Administrator Warning**You Have 24hrs To Respond To This Email Alert ** Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: thread-topic: Administrator Warning**You Have 24hrs To Respond To This Email Alert ** thread-index: Ac5W6DOANYampj0MR+CfleMhuHwylAAAPC4Y References: From: "Maresca Colleen (02M059)" X-OriginalArrivalTime: 22 May 2013 12:43:04.0029 (UTC) FILETIME=[E6D328D0:01CE56E9] X-Barracuda-Connect: smtp2.nycenet.edu[165.155.104.102] X-Barracuda-Start-Time: 1369226590 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.73 X-Barracuda-Spam-Status: No, SCORE=1.73 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_HEADERS, STAR, STAR_NOMAG, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.10 STAR * 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header 0.40 STAR_NOMAG * To: undisclosed-recipients:; ------_=_NextPart_001_01CE56E9.E51F6680 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable =20 =20 See To The File Attachment, Open and Fill The Form . ________________________________ From: Maresca Colleen (02M059) Sent: Wed 5/22/2013 8:30 AM Subject: Administrator Warning**You Have 24hrs To Respond To This Email = Alert ** =20 =20 See To The File Attachment, Open and Fill The Form . ------_=_NextPart_001_01CE56E9.E51F6680 Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document; name="System Administrator.docx" Content-Transfer-Encoding: base64 Content-Description: System Administrator.docx Content-Disposition: attachment; filename="System Administrator.docx" UEsDBBQABgAIAAAAIQCOK/prpwEAAMoGAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0 lUtP4zAUhfdI8x8ib0eJyywQQk1ZALOcQaKItbGvW2vih3wv0P57rvuICiqkM0w3kRLnnPNdxzoZ Xy58Vz1DRhdDK06bkagg6GhcmLXifvqzPhcVkgpGdTFAK5aA4nLy7WQ8XSbAitUBWzEnShdSop6D V9jEBIFXbMxeEd/mmUxK/1EzkD9GozOpYyAIVFPxEJPxNVj11FF1s+DHaxLwVlRX6/dKVCucL/pF XVbkXk2GDt+JVEqd04p4OvkczDuyekPVsHL1Ds5dwu+M/kFCWXlLtRuw0f3m7czOQHWrMv1Sntnl S8xGmqifPM/dfG6zhzNa6zT0+uKWctSAyN/Jd02/4pULW/4POZCWHeD/p1j7Hhj/4Gh+Yy1oPiDD ++GxLkM364gd7XAaEPEmHRLy9tjWQ5uOG+dBhBd4vDsaxY75IIiNkUKkY3z73noQAoI5EsPWeRDB cq9M1WMHB5y8vzwUvfUgBHFXglxdT7/MsbL5LJIb4jbHhNy9+R/G3hZlUddcPQkyOeircl/V9Ilc kV+eD8qfwYDZky1Xf6LJKwAAAP//AwBQSwMEFAAGAAgAAAAhAEsgRbgCAQAA3gIAAAsACAJfcmVs cy8ucmVscyCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAACskttKAzEQhu8F3yHMfTfbKiLSbG9E6J3I+gBjMrsb3BxIptq+vaHgYWEt gr2c0z/fHNabvRvFG6Vsg1ewrGoQ5HUw1vcKntuHxS2IzOgNjsGTggNl2DSXF+snGpFLUR5szKKo +KxgYI53UmY9kMNchUi+RLqQHHIxUy8j6lfsSa7q+kamnxrQTDTF1ihIW3MFoj3E0vk/2tIRo0FG qUOiRUyFLLEts4gWU0+swAT9WNz5mFEVapDzQKvzAvGwcy8e7TiD8hWryHW/8Sz/zhO6zmq6D3rn yPPMDeQ04xvpPSQjy4qOhae2c31OGtozeUPm9MEwxk8iOfnK5gMAAP//AwBQSwMEFAAGAAgAAAAh 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 ------_=_NextPart_001_01CE56E9.E51F6680-- From sandeen@sandeen.net Wed May 22 09:04:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BD9C87F4E for ; Wed, 22 May 2013 09:04:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9CAC98F8084 for ; Wed, 22 May 2013 07:04:49 -0700 (PDT) X-ASG-Debug-ID: 1369231488-04cb6c47402c780001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id IcASonhvDWHD9wHN for ; Wed, 22 May 2013 07:04:48 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id ECF1568444E0; Wed, 22 May 2013 09:04:47 -0500 (CDT) Message-ID: <519CD080.2030501@sandeen.net> Date: Wed, 22 May 2013 09:04:48 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: =?UTF-8?B?QXJrYWRpdXN6IEJ1YmHFgmE=?= CC: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 References: <519B6738.9030603@open-e.com> <20130521233937.GX29466@dastard> <519C7D97.50909@open-e.com> X-ASG-Orig-Subj: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 In-Reply-To: <519C7D97.50909@open-e.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369231488 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131703 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/22/13 3:11 AM, Arkadiusz Bubała wrote: > Hello, >> On Tue, May 21, 2013 at 02:23:20PM +0200, Arkadiusz Bubała wrote: >> >>> Hello, >>> I've got a call trace which should be fixed by "drop buffer io >>> reference when a bad bio is built" patch >>> (http://patchwork.xfs.org/patch/3956/). Error occured on already >>> patched Linux kernel 3.2.42. >>> >> That's an old kernel. Can you reproduce on a current TOT kernel? >> It's entirely possible that this problem has been fixed as we >> definitely mae some changes to the mount error handling path since >> 3.2.... >> >> > Ok. I'll try. >>> Test environment consist two machines target and initiator. >>> First machine works as target with QLogic Corp. ISP2432-based 4Gb >>> Fibre Channel device. Storage is placed on two KINGSTON SNV425S SSD >>> working as RAID0 array. RAID is managed by LSI MegaRAID SAS 1068 >>> controller. >>> Second machine works as initiator with the same QLogic card. >>> >>> After few days of running test script I got following call trace and >>> XFS stopped working. >>> >> Can you narrow this down from "takes several days" to the simplest >> possible reproducer? It happened due to IO errors during mount, so >> maybe you can did that part out of your script and give us a test >> case that reproduces on the first mount? >> >> > I 'll try. This errors occurs only on heavy load. > Is there any possibility to simulate I/O errors on XFS filesystem? You can use something like a dm-flakey or md-faulty block devices perhaps. -Eric From sandeen@sandeen.net Wed May 22 09:10:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4691C7F52 for ; Wed, 22 May 2013 09:10:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D7425AC002 for ; Wed, 22 May 2013 07:10:33 -0700 (PDT) X-ASG-Debug-ID: 1369231832-04cbb0049c2faa0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id pJ334kX6JKjfdpPq for ; Wed, 22 May 2013 07:10:32 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6DBBF651AC21; Wed, 22 May 2013 09:10:32 -0500 (CDT) Message-ID: <519CD1D9.8050904@sandeen.net> Date: Wed, 22 May 2013 09:10:33 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: "Michael L. Semon" CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> <519C3596.7080109@gmail.com> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <519C3596.7080109@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369231832 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA620b, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131703 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.50 BSF_SC0_SA620b Custom Rule SA620b On 5/21/13 10:03 PM, Michael L. Semon wrote: ... > From 7dc0667e1f8cd1c98f15ebf412dd0f038b55306e Mon Sep 17 00:00:00 2001 > From: "Michael L. Semon" > Date: Tue, 21 May 2013 22:50:59 -0400 > Subject: [PATCH] Change mount method for generic/258 > > Use the built-in _test_mount function from xfstests so it will use > the correct mount options for xfstests. The script used a simple > umount-and-mount sequence, which caused a test failure on an XFS > filesystem that used both realtime and external log devices. > > Signed-off-by: Michael L. Semon Thanks, this was my fault :( Reviewed-by: Eric Sandeen Want to consider dave's other suggestions in another patch? > There are a handful of other tests that also unmount the TEST_DEV. > Perhaps adding a _test_umount() wrapper to common/rc (similar to > _scratch_umount) would be best. At least shared/243 needs the same > _test_mount treatment as this test. Eternal git-log fame would be yours. ;) -Eric > --- > tests/generic/258 | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tests/generic/258 b/tests/generic/258 > index fb091ae..3aeb5ce 100755 > --- a/tests/generic/258 > +++ b/tests/generic/258 > @@ -62,7 +62,7 @@ fi > # unmount, remount, and check the timestamp > echo "Remounting to flush cache" > umount $TEST_DEV > -mount $TEST_DEV $TEST_DIR > +_test_mount > > # Should yield -315593940 (prior to epoch) > echo "Testing for negative seconds since epoch" > From sandeen@sandeen.net Wed May 22 09:12:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4028F7F63 for ; Wed, 22 May 2013 09:12:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB354AC004 for ; Wed, 22 May 2013 07:12:56 -0700 (PDT) X-ASG-Debug-ID: 1369231975-04cbb0049e2fd90001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id IXSv2LhoHzHQltMt for ; Wed, 22 May 2013 07:12:55 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 0EFA2651AC21; Wed, 22 May 2013 09:12:55 -0500 (CDT) Message-ID: <519CD268.10306@sandeen.net> Date: Wed, 22 May 2013 09:12:56 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: Itaru Kitayama , xfs@oss.sgi.com Subject: Re: [PATCH] xfstests comma separated group names References: <20130520113045.GB24543@dastard> <20130521004553.GL24543@dastard> <20130521052118.GM24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests comma separated group names In-Reply-To: <20130521052118.GM24543@dastard> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369231975 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131703 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/21/13 12:21 AM, Dave Chinner wrote: > On Tue, May 21, 2013 at 12:45:32PM +0900, Itaru Kitayama wrote: >> In the current check script the -g option assumes only one group is given. >> With this patch, the -g option >> understands comma separated multiple groups as the argument as well. >> Existing scripts are not affected >> by this patch. >> >> Reviewed-by: Dave Chinner > > No, I didn't. A comment on a patch is not a review. > > The only time you should add tags like this is if you receive them > in email from the person in question. Once I've actaully done a > review of the code, I'll respond with such a tag. See > Documentation/SubmittingPatches for more information about what the > reviewed-by tag actually means... > >> Signed-off-by: Itaru Kitayama >> >> --- >> >> check | 23 ++++++++++++----------- >> 1 file changed, 12 insertions(+), 11 deletions(-) >> >> diff --git a/check b/check >> index a79747e..0e0f208 100755 >> --- a/check >> +++ b/check >> @@ -164,18 +164,19 @@ while [ $# -gt 0 ]; do >> -nfs) FSTYP=nfs ;; >> >> -g) group=$2 ; shift ; >> - group_list=$(get_group_list $group) >> - if [ -z "$group_list" ]; then >> - echo "Group \"$group\" is empty or not defined?" >> - exit 1 >> - fi >> - >> - [ ! -s $tmp.list ] && touch $tmp.list >> - for t in $group_list; do >> - grep -s "^$t\$" $tmp.list >/dev/null || \ >> - echo "$t" >>>> $tmp.list > > There's a whitespace and wrapping problem with your mailer. it's > converting all tabs to spaces, and it's wrapping long lines in the > patch. Please see Documentation/email-clients.txt for help to set > your mailer up properly. Dave is a tough teacher but you can learn a lot from him. ;) Thanks for sending the patch, I agree that this will be nice to have, once the patch submission issues get fixed up. -Eric > Cheers, > > Dave. > From davej@redhat.com Wed May 22 09:23:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 33D677F6C for ; Wed, 22 May 2013 09:23:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CEF3EAC005 for ; Wed, 22 May 2013 07:23:00 -0700 (PDT) X-ASG-Debug-ID: 1369232579-04bdf0781930d20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id l0i58xRwyngRqiyZ for ; Wed, 22 May 2013 07:23:00 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4MEMu8X028166 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 22 May 2013 10:22:57 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4MEMt4E010257 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 May 2013 10:22:56 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4MEMrB0030978; Wed, 22 May 2013 10:22:53 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4MEMqD4030947; Wed, 22 May 2013 10:22:52 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Wed, 22 May 2013 10:22:52 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522142252.GB1407@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522055147.GI29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369232580 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > > Tomorrow I'll also try running some older kernels with the same > > options to see if it's something new, or an older bug. This is a > > new machine, so it may be something that's been around for a > > while, and for whatever reason, my other machines don't hit > > this. > > Another thing that just occurred to me - what compiler are you > using? We had a report last week on #xfs that xfsdump was failing > with bad checksums because of link time optimisation (LTO) in > gcc-4.8.0. When they turned that off, everything worked fine. So if > you are using 4.8.0, perhaps trying a different compiler might be a > good idea, too. Yeah, this is 4.8.0. This box is running F19-beta. I managed to shoehorn the gcc-4.7 from f18 on there though. Bug reproduced instantly, so I think we can rule out compiler. I ran 3.9 with the same debug options. Seems stable. I'll do a bisect. Dave From mlsemon35@gmail.com Wed May 22 11:16:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 572637CBF for ; Wed, 22 May 2013 11:16:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4589A30404E for ; Wed, 22 May 2013 09:16:17 -0700 (PDT) X-ASG-Debug-ID: 1369239376-04cbb0049e3a780001-NocioJ Received: from mail-ie0-f177.google.com (mail-ie0-f177.google.com [209.85.223.177]) by cuda.sgi.com with ESMTP id vcEoEI8WCB2o34r9 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 09:16:16 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.177 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] Received: by mail-ie0-f177.google.com with SMTP id 9so5348503iec.8 for ; Wed, 22 May 2013 09:16:16 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=euUL55bF3pDLQW1CrnLJU8+CV010UeOF+9WBENpAkHg=; b=GvmBy2xcs73qqC5FI3af9oD0NsYB8Ol5O1aNdtb8aG8HLM9n3gSPXNX7nbBQH+5qTT N4hNdUgRExxPp3ysfRsIDGtN6726GYSxJpg5DXZ/YvIb9BKBBwCFtZhP1ErALkCxEByl PLHV+F/bizmnDkrKMpEkQI5GXzgSBzUvfyhEJfuPJdBmCHcw1kLafRQQzB9dEpnWRNAb y/CrDu423a/+HIloEWQAzQpVuhRa+RMSZmvZ0ZNILUsKypjrOvfLxPGzb2lE+z14fmFM O72toZ9Kk9vQYKuugJEc429O9f3W96QuHeqc+ean/LCrF7edTY8AK5jZv6EZQzUA3JdK nfCA== X-Received: by 10.42.61.137 with SMTP id u9mr6882239ich.33.1369239376246; Wed, 22 May 2013 09:16:16 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id l14sm7664482igf.9.2013.05.22.09.16.06 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 22 May 2013 09:16:15 -0700 (PDT) Message-ID: <519CEF04.7060503@gmail.com> Date: Wed, 22 May 2013 12:15:00 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> <519C3596.7080109@gmail.com> <519CD1D9.8050904@sandeen.net> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <519CD1D9.8050904@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f177.google.com[209.85.223.177] X-Barracuda-Start-Time: 1369239376 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On 05/22/2013 10:10 AM, Eric Sandeen wrote: > On 5/21/13 10:03 PM, Michael L. Semon wrote: > > ... > >> From 7dc0667e1f8cd1c98f15ebf412dd0f038b55306e Mon Sep 17 00:00:00 2001 >> From: "Michael L. Semon" >> Date: Tue, 21 May 2013 22:50:59 -0400 >> Subject: [PATCH] Change mount method for generic/258 >> >> Use the built-in _test_mount function from xfstests so it will use >> the correct mount options for xfstests. The script used a simple >> umount-and-mount sequence, which caused a test failure on an XFS >> filesystem that used both realtime and external log devices. >> >> Signed-off-by: Michael L. Semon > > Thanks, this was my fault :( > > Reviewed-by: Eric Sandeen > > Want to consider dave's other suggestions in another patch? > >> There are a handful of other tests that also unmount the TEST_DEV. >> Perhaps adding a _test_umount() wrapper to common/rc (similar to >> _scratch_umount) would be best. At least shared/243 needs the same >> _test_mount treatment as this test. > > Eternal git-log fame would be yours. ;) > > -Eric Will do. Let me get my feet back under me. The initial `grep -l _test_mount [0-9][0-9][0-9]` returned 014, 097, 192; so the thread was started in the spirit of "there's no way this can possibly be the correct function to use." I'll look at shared/243. One day, I would like to earn git-log fame by incorporating better support for JFS and especially NILFS2 into xfstests. However, that's a topic for another day. I know that I have uses for both filesystems, but that doesn't mean anybody else does. Their mailing lists don't give much hint of user community or progress. Thanks! Michael >> --- >> tests/generic/258 | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/tests/generic/258 b/tests/generic/258 >> index fb091ae..3aeb5ce 100755 >> --- a/tests/generic/258 >> +++ b/tests/generic/258 >> @@ -62,7 +62,7 @@ fi >> # unmount, remount, and check the timestamp >> echo "Remounting to flush cache" >> umount $TEST_DEV >> -mount $TEST_DEV $TEST_DIR >> +_test_mount >> >> # Should yield -315593940 (prior to epoch) >> echo "Testing for negative seconds since epoch" >> > From sandeen@sandeen.net Wed May 22 11:19:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DE7667F55 for ; Wed, 22 May 2013 11:19:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7B5BDAC002 for ; Wed, 22 May 2013 09:19:09 -0700 (PDT) X-ASG-Debug-ID: 1369239547-04bdf078193a510001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id pH2yLMtCgoR5RAap for ; Wed, 22 May 2013 09:19:08 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 9B53868444E3; Wed, 22 May 2013 11:19:07 -0500 (CDT) Message-ID: <519CEFFB.1080209@sandeen.net> Date: Wed, 22 May 2013 11:19:07 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: "Michael L. Semon" CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> <519C3596.7080109@gmail.com> <519CD1D9.8050904@sandeen.net> <519CEF04.7060503@gmail.com> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <519CEF04.7060503@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369239548 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MAILTO_TO_SPAM_ADDR, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On 5/22/13 11:15 AM, Michael L. Semon wrote: > On 05/22/2013 10:10 AM, Eric Sandeen wrote: >> On 5/21/13 10:03 PM, Michael L. Semon wrote: >> >> ... >> >>> From 7dc0667e1f8cd1c98f15ebf412dd0f038b55306e Mon Sep 17 00:00:00 2001 >>> From: "Michael L. Semon" >>> Date: Tue, 21 May 2013 22:50:59 -0400 >>> Subject: [PATCH] Change mount method for generic/258 >>> >>> Use the built-in _test_mount function from xfstests so it will use >>> the correct mount options for xfstests. The script used a simple >>> umount-and-mount sequence, which caused a test failure on an XFS >>> filesystem that used both realtime and external log devices. >>> >>> Signed-off-by: Michael L. Semon >> >> Thanks, this was my fault :( >> >> Reviewed-by: Eric Sandeen >> >> Want to consider dave's other suggestions in another patch? >> >>> There are a handful of other tests that also unmount the TEST_DEV. >>> Perhaps adding a _test_umount() wrapper to common/rc (similar to >>> _scratch_umount) would be best. At least shared/243 needs the same >>> _test_mount treatment as this test. >> >> Eternal git-log fame would be yours. ;) >> >> -Eric > > Will do. Let me get my feet back under me. The initial > `grep -l _test_mount [0-9][0-9][0-9]` returned 014, 097, 192; so > the thread was started in the spirit of "there's no way this can > possibly be the correct function to use." > > I'll look at shared/243. > > One day, I would like to earn git-log fame by incorporating better > support for JFS and especially NILFS2 into xfstests. However, > that's a topic for another day. I know that I have uses for both > filesystems, but that doesn't mean anybody else does. Their > mailing lists don't give much hint of user community or progress. The generic tests hopefully work; if not, it should be a fairly simple fixup. And you're free to add fs-specific tests :) (I'm not sure if we fall back by default to mkfs.$FSTYP and fsck.$FSTYP; if so, it might just work) -Eric > Thanks! > > Michael > >>> --- >>> tests/generic/258 | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/tests/generic/258 b/tests/generic/258 >>> index fb091ae..3aeb5ce 100755 >>> --- a/tests/generic/258 >>> +++ b/tests/generic/258 >>> @@ -62,7 +62,7 @@ fi >>> # unmount, remount, and check the timestamp >>> echo "Remounting to flush cache" >>> umount $TEST_DEV >>> -mount $TEST_DEV $TEST_DIR >>> +_test_mount >>> >>> # Should yield -315593940 (prior to epoch) >>> echo "Testing for negative seconds since epoch" >>> >> > From davej@redhat.com Wed May 22 11:19:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E0C7C7F55 for ; Wed, 22 May 2013 11:19:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C08AC8F808F for ; Wed, 22 May 2013 09:19:53 -0700 (PDT) X-ASG-Debug-ID: 1369239592-04cbb0049c3abc0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ztHdcuj0MXFJGiVt for ; Wed, 22 May 2013 09:19:53 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4MGJoAZ016004 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 22 May 2013 12:19:50 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4MGJn9O022799 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 May 2013 12:19:50 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4MGJmtj031428; Wed, 22 May 2013 12:19:48 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4MGJkSX031424; Wed, 22 May 2013 12:19:46 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Wed, 22 May 2013 12:19:46 -0400 From: Dave Jones To: Dave Chinner , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522161946.GA25906@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522142252.GB1407@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522142252.GB1407@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369239592 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 22, 2013 at 10:22:52AM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > > > > Tomorrow I'll also try running some older kernels with the same > > > options to see if it's something new, or an older bug. This is a > > > new machine, so it may be something that's been around for a > > > while, and for whatever reason, my other machines don't hit > > > this. > > > > Another thing that just occurred to me - what compiler are you > > using? We had a report last week on #xfs that xfsdump was failing > > with bad checksums because of link time optimisation (LTO) in > > gcc-4.8.0. When they turned that off, everything worked fine. So if > > you are using 4.8.0, perhaps trying a different compiler might be a > > good idea, too. > > Yeah, this is 4.8.0. This box is running F19-beta. > I managed to shoehorn the gcc-4.7 from f18 on there though. > Bug reproduced instantly, so I think we can rule out compiler. > > I ran 3.9 with the same debug options. Seems stable. > I'll do a bisect. good news. It wasn't until I started bisecting I realised I was still carrying this patch from you to fix slab corruption I was seeing. It seems to be the culprit (or is masking another problem -- I had to apply it at each step of the bisect to get past the slab corruption bug). Dave --- /home/davej/src/kernel/git-trees/linux/fs/xfs/xfs_extfree_item.c 2013-05-03 10:03:05.331370231 -0400 +++ linux-dj/fs/xfs/xfs_extfree_item.c 2013-05-07 20:46:42.389262296 -0400 @@ -305,10 +305,22 @@ xfs_efi_release(xfs_efi_log_item_t *efip { ASSERT(atomic_read(&efip->efi_next_extent) >= nextents); if (atomic_sub_and_test(nextents, &efip->efi_next_extent)) { + int recovered; + + /* + * __xfs_efi_release() can release the last reference to the EFI + * and free it, so it is unsafe to reference it after we've + * released the reference. The only case this is safe to do is + * if we are in recovery and the XFS_EFI_RECOVERED bit is set, + * meaning that we have two references to release. Check the + * recovered bit before the initial release, as we cannot + * reliably check it afterwards. + */ + recovered = test_bit(XFS_EFI_RECOVERED, &efip->efi_flags); __xfs_efi_release(efip); /* recovery needs us to drop the EFI reference, too */ - if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags)) + if (recovered) __xfs_efi_release(efip); } } From mlsemon35@gmail.com Wed May 22 11:48:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 243DB7CBF for ; Wed, 22 May 2013 11:48:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id ECDD68F807A for ; Wed, 22 May 2013 09:48:55 -0700 (PDT) X-ASG-Debug-ID: 1369241317-04cbb0049a3d530001-NocioJ Received: from mail-ie0-f179.google.com (mail-ie0-f179.google.com [209.85.223.179]) by cuda.sgi.com with ESMTP id WUJJtM1V9eA5wdgZ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 09:48:38 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] Received: by mail-ie0-f179.google.com with SMTP id c13so5772948ieb.10 for ; Wed, 22 May 2013 09:48:37 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=W9xS8htO8bRrfSwIDtwC0VTmJELaeH+HM92D0w+JyI8=; b=kTit0Y0nsaD0CGYIJWrkAUS7PQLODDnuIrsmwf0jXODDGWdXUx7YhRuMrjINHmU5gN 7Vq2EaWuIIAw0Hy1EPyADFzTnkm/8VXdJfPCUtDKgzOoNJVsxINwqbjKPPu8IRevR6XG 5CF6mbblu+zU03QdOTu5x5PaLbCGUwd0MneQ8Le5L5HdAnlE0aQoKAXLKZo0wHO+kCaU c1Z3KhJD6l5DmtAWH2MbR6vq0AAdeINkpMa5LeH5wTzTJCH+soPxJwEz5CacjVKgiYLq HFoka4qSNhKQ9hoAnLeyv1SPM33rNUytpNJ74aML8LJeadmgTZT02ZO268YBc8a0bnmO 4DHQ== X-Received: by 10.43.169.202 with SMTP id nn10mr6998603icc.4.1369241317603; Wed, 22 May 2013 09:48:37 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id uv10sm7833774igb.3.2013.05.22.09.48.24 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 22 May 2013 09:48:36 -0700 (PDT) Message-ID: <519CF6CE.8020901@gmail.com> Date: Wed, 22 May 2013 12:48:14 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> <519C3596.7080109@gmail.com> <519CD1D9.8050904@sandeen.net> <519CEF04.7060503@gmail.com> <519CEFFB.1080209@sandeen.net> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <519CEFFB.1080209@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f179.google.com[209.85.223.179] X-Barracuda-Start-Time: 1369241317 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131715 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/22/2013 12:19 PM, Eric Sandeen wrote: > On 5/22/13 11:15 AM, Michael L. Semon wrote: >> On 05/22/2013 10:10 AM, Eric Sandeen wrote: >>> On 5/21/13 10:03 PM, Michael L. Semon wrote: >> One day, I would like to earn git-log fame by incorporating better >> support for JFS and especially NILFS2 into xfstests. However, >> that's a topic for another day. I know that I have uses for both >> filesystems, but that doesn't mean anybody else does. Their >> mailing lists don't give much hint of user community or progress. > > The generic tests hopefully work; if not, it should be a fairly > simple fixup. And you're free to add fs-specific tests :) > > (I'm not sure if we fall back by default to mkfs.$FSTYP and fsck.$FSTYP; > if so, it might just work) > > -Eric They work fine--JFS currently survives all of generic/* intact--but... JFS: The syntax for a lot of things is very close to that of ReiserFS, ext3, and ext4 filesystems. However, before just inserting "jfs" into the common/rc case switches, test results need to be audited for JFS. Additionally, I don't know if the current tests use external journals for non-XFS filesystems: My first attempt stepped all over the XFS journal creation script, looked messy, and was probably buggy as well. NILFS2: fsstress/fsx seems to slowly rip NILFS2 to bits, and I have to come up with a narrower test and report bugs to those guys. common/rc could be revised to better target filesystems with no fsck whatsoever, such as NILFS2 and F2FS. I've been getting by with a simple `ln -s /bin/true /sbin/fsck.nilfs2`, and really, that is the best long-term solution from an administrative standpoint. So you see how this might be an easy fix but still take up hours in debugging... Thanks again! Michael From bpm@sgi.com Wed May 22 12:01:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 08A787CBF for ; Wed, 22 May 2013 12:01:21 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id E144A8F8074; Wed, 22 May 2013 10:01:17 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id BA377500B50; Wed, 22 May 2013 12:01:17 -0500 (CDT) Date: Wed, 22 May 2013 12:01:17 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 05/11] xfs: correctly map remote attr buffers during removal Message-ID: <20130522170117.GO20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-6-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-6-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:04PM +1000, Dave Chinner wrote: > From: Dave Chinner > > If we don't map the buffers correctly (same as for get/set > operations) then the incore buffer lookup will fail. If a block > number matches but a length is wrong, then debug kernels will ASSERT > fail in _xfs_buf_find() due to the length mismatch. Ensure that we > map the buffers correctly by basing the length of the buffer on the > attribute data length rather than the remote block count. > > Signed-off-by: Dave Chinner Yeah. Looks fine. Reviewed-by: Ben Myers > --- > fs/xfs/xfs_attr_remote.c | 27 ++++++++++++++++++--------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > index e207bf0..d8bcb2d 100644 > --- a/fs/xfs/xfs_attr_remote.c > +++ b/fs/xfs/xfs_attr_remote.c > @@ -468,19 +468,25 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) > mp = args->dp->i_mount; > > /* > - * Roll through the "value", invalidating the attribute value's > - * blocks. > + * Roll through the "value", invalidating the attribute value's blocks. > + * Note that args->rmtblkcnt is the minimum number of data blocks we'll > + * see for a CRC enabled remote attribute. Each extent will have a > + * header, and so we may have more blocks than we realise here. If we > + * fail to map the blocks correctly, we'll have problems with the buffer > + * lookups. > */ > lblkno = args->rmtblkno; > - valuelen = args->rmtblkcnt; > + valuelen = args->valuelen; > + blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); > while (valuelen > 0) { > + int dblkcnt; > + > /* > * Try to remember where we decided to put the value. > */ > nmap = 1; > error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, > - args->rmtblkcnt, &map, &nmap, > - XFS_BMAPI_ATTRFORK); > + blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); > if (error) > return(error); > ASSERT(nmap == 1); > @@ -488,28 +494,31 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) > (map.br_startblock != HOLESTARTBLOCK)); > > dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), > - blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); > + dblkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); > > /* > * If the "remote" value is in the cache, remove it. > */ > - bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK); > + bp = xfs_incore(mp->m_ddev_targp, dblkno, dblkcnt, XBF_TRYLOCK); > if (bp) { > xfs_buf_stale(bp); > xfs_buf_relse(bp); > bp = NULL; > } > > - valuelen -= map.br_blockcount; > + valuelen -= XFS_ATTR3_RMT_BUF_SPACE(mp, > + XFS_FSB_TO_B(mp, map.br_blockcount)); > > lblkno += map.br_blockcount; > + blkcnt -= map.br_blockcount; > + blkcnt = max(blkcnt, xfs_attr3_rmt_blocks(mp, valuelen)); max for fragmentation... can be removed once its header per block, i think. > } > > /* > * Keep de-allocating extents until the remote-value region is gone. > */ > + blkcnt = lblkno - args->rmtblkno; > lblkno = args->rmtblkno; > - blkcnt = args->rmtblkcnt; > done = 0; > while (!done) { > xfs_bmap_init(args->flist, args->firstblock); > -- > 1.7.10.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Wed May 22 12:08:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4A8167F37 for ; Wed, 22 May 2013 12:08:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 163E48F8049 for ; Wed, 22 May 2013 10:08:22 -0700 (PDT) X-ASG-Debug-ID: 1369242500-04bdf078183e1d0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id JTa5neMU4wgQpwlD for ; Wed, 22 May 2013 10:08:20 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 772D063C3F60; Wed, 22 May 2013 12:08:20 -0500 (CDT) Message-ID: <519CFB84.1030207@sandeen.net> Date: Wed, 22 May 2013 12:08:20 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: "Michael L. Semon" CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> <519C3596.7080109@gmail.com> <519CD1D9.8050904@sandeen.net> <519CEF04.7060503@gmail.com> <519CEFFB.1080209@sandeen.net> <519CF6CE.8020901@gmail.com> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <519CF6CE.8020901@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369242500 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131715 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/22/13 11:48 AM, Michael L. Semon wrote: > On 05/22/2013 12:19 PM, Eric Sandeen wrote: >> On 5/22/13 11:15 AM, Michael L. Semon wrote: >>> On 05/22/2013 10:10 AM, Eric Sandeen wrote: >>>> On 5/21/13 10:03 PM, Michael L. Semon wrote: > >>> One day, I would like to earn git-log fame by incorporating better >>> support for JFS and especially NILFS2 into xfstests. However, >>> that's a topic for another day. I know that I have uses for both >>> filesystems, but that doesn't mean anybody else does. Their >>> mailing lists don't give much hint of user community or progress. >> >> The generic tests hopefully work; if not, it should be a fairly >> simple fixup. And you're free to add fs-specific tests :) >> >> (I'm not sure if we fall back by default to mkfs.$FSTYP and fsck.$FSTYP; >> if so, it might just work) >> >> -Eric > > They work fine--JFS currently survives all of generic/* intact--but... > > JFS: The syntax for a lot of things is very close to that of ReiserFS, > ext3, and ext4 filesystems. However, before just inserting "jfs" into > the common/rc case switches, test results need to be audited for JFS. > Additionally, I don't know if the current tests use external journals > for non-XFS filesystems: My first attempt stepped all over the XFS > journal creation script, looked messy, and was probably buggy as well. xfs doesn't use external journal by default, it needs to have an extra couple env. vars set (I think README covers this) To test JFS that way it'd need more tweaking I suppose. It could be done, certainly. > NILFS2: fsstress/fsx seems to slowly rip NILFS2 to bits, and I have > to come up with a narrower test and report bugs to those guys. :) not too surprising. (first time I looked at ecryptfs vs. fsx, fsx won the fight in about 3 ops. Much better now.) I'd just use fsx directly to narrow down failures to the smallest set of operations. > common/rc could be revised to better target filesystems with no > fsck whatsoever, such as NILFS2 and F2FS. I've been getting by with > a simple `ln -s /bin/true /sbin/fsck.nilfs2`, and really, that is the > best long-term solution from an administrative standpoint. Yeah I'd suggest that maybe nilfs2-utils should just ship something like that. > So you see how this might be an easy fix but still take up hours in > debugging... Yup. -Eric > Thanks again! > > Michael > From vendas-sp1@redemega.com.br Wed May 22 13:45:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE, HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C56DA7CBF for ; Wed, 22 May 2013 13:45:32 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3B88FAC001 for ; Wed, 22 May 2013 11:45:32 -0700 (PDT) X-ASG-Debug-ID: 1369248329-04cb6c473f4c370001-w1Z2WR Received: from wmbsite.com.br (bdaz.cloud.redehost.com.br [187.84.226.140]) by cuda.sgi.com with ESMTP id wYgkHXY6HSECmbG3 for ; Wed, 22 May 2013 11:45:30 -0700 (PDT) X-Barracuda-Envelope-From: vendas-sp1@redemega.com.br X-Barracuda-Apparent-Source-IP: 187.84.226.140 Received: from REDEMEGA ([187.84.226.140]) by wmbsite.com.br with MailEnable ESMTP; Wed, 22 May 2013 14:53:19 -0300 From: "Cibele - megacorretor" To: linux-xfs@oss.sgi.com Reply-To: vendas-sp1@redemega.com.br Subject: Retorno pela internet Date: Wed, 22 May 2013 14:53:19 -0300 X-ASG-Orig-Subj: Retorno pela internet Message-ID: <20130522-14531928-414@REDEMEGA> MIME-Version: 1.0 Content-Type: text/html X-Barracuda-Connect: bdaz.cloud.redehost.com.br[187.84.226.140] X-Barracuda-Start-Time: 1369248330 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.25 X-Barracuda-Spam-Status: No, SCORE=1.25 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA074b, HTML_MESSAGE, HTML_MIME_NO_HTML_TAG, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131721 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 1.05 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag 0.20 BSF_SC0_SA074b Custom Rule SA074b

Boa tarde

Você sabe utilizar todos os recursos da internet para vender seus imóveis?

Nós sabemos e prestamos esse serviço para você!
Site completo + domínio próprio + divulgação automática em diversos portais + Otimização no Google + ilimitados imóveis.
Alto retorno pelo investimento: mensalidade a  partir de R$ 60,00 mensais.
Não perca essa chance de ter seus imoveis divulgados nos melhores portais.
Ligue agora ou nos informe seu telefone para que eu entre em contato.
Qualquer dúvida ou contratação, estou a disposição.

http://www.siteparaimobiliarias.cim.br/

Att,

Cibele Kato
VENDAS -  Rede Mega
vendas-sp1@redemega.com.br
(0xx11) 2427-1811
(0xx11) 4411-1194
  0800-777-7442

From rjohnston@sgi.com Wed May 22 14:01:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E61EF7CBF for ; Wed, 22 May 2013 14:01:10 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1151FAC001; Wed, 22 May 2013 12:01:07 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 22 May 2013 14:00:12 -0500 Message-ID: <519D161B.2020008@sgi.com> Date: Wed, 22 May 2013 14:01:47 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: "Michael L. Semon" CC: Dave Chinner , Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> <519C3596.7080109@gmail.com> In-Reply-To: <519C3596.7080109@gmail.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/21/2013 10:03 PM, Michael L. Semon wrote: > > This is my first attempt at doing a `git format-patch --stdout`. > Hopefully, this is somewhat more presentable to git. Comments and > brow-beating are welcome. > > Thanks! > > Michael Thanks for the patch Michael, it has been committed: commit f4ba26dcdc64a206d73d47cf054ecb2742867c55 Author: Michael L. Semon Date: Wed May 22 13:50:59 2013 -0500 xfstests: Change mount method for generic/258 The only other suggestion would be to make your email subject match the patch name and starting with which part of xfs it is submitted for (xfs:, xfstests:, xfsprogs:, xfsdump:, xfsdmapi:. etc) i.e. Subject: [PATCH] xfstests: Change mount method for generic/258 --Rich From konrad.wilk@oracle.com Wed May 22 14:28:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2B7827CBF for ; Wed, 22 May 2013 14:28:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0A522304077 for ; Wed, 22 May 2013 12:28:45 -0700 (PDT) X-ASG-Debug-ID: 1369250920-04cb6c47424fa10001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id qto44g4Jv66eLvUz (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 22 May 2013 12:28:40 -0700 (PDT) X-Barracuda-Envelope-From: konrad.wilk@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4MJSbNu031048 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 22 May 2013 19:28:38 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4MJSavR027060 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 22 May 2013 19:28:36 GMT Received: from abhmt108.oracle.com (abhmt108.oracle.com [141.146.116.60]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4MJSZW6023031; Wed, 22 May 2013 19:28:35 GMT Received: from phenom.dumpdata.com (/50.195.21.189) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 22 May 2013 12:28:35 -0700 Received: by phenom.dumpdata.com (Postfix, from userid 1000) id 25F4B1BF781; Wed, 22 May 2013 15:28:34 -0400 (EDT) Date: Wed, 22 May 2013 15:28:34 -0400 From: Konrad Rzeszutek Wilk To: James Dingwall Cc: Dave Chinner , Ben Myers , xfs@oss.sgi.com Subject: Re: Cleancache support in XFS Message-ID: <20130522192834.GD10617@phenom.dumpdata.com> X-ASG-Orig-Subj: Re: Cleancache support in XFS References: <51810CED.4080003@zynstra.com> <20130501162044.GN29359@sgi.com> <20130501223022.GQ10481@dastard> <518222D3.3080109@zynstra.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <518222D3.3080109@zynstra.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1369250920 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131725 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Thu, May 02, 2013 at 09:24:51AM +0100, James Dingwall wrote: > Dave Chinner wrote: > >On Wed, May 01, 2013 at 11:20:44AM -0500, Ben Myers wrote: > >>Hi James, Hey folks, I am walking through my vacation-emails-mbox. > >> > >>On Wed, May 01, 2013 at 01:39:09PM +0100, James Dingwall wrote: > >>>In reference to: http://oss.sgi.com/archives/xfs/2012-05/msg00046.html > >>> > >>>$ grep -r cleancache fs/xfs > >>>on the 3.9 kernel source suggests that no patch was submitted to > >>>enable cleancache for the XFS filesystem. Since it was suggested > >>>that this could be a one liner I've had a go and my first effort is > >>>inline below. While this seems to compile OK I have no experience > >>>in filesystems so I would appreciate it if anyone can point out that > >>>it is obviously wrong and likely to eat my data before I try booting > >>>the kernel. > >>> > >>>If it seems a reasonable attempt what would be the best way to check > >>>that it isn't doing nasty things? > >>Hrm.. Looks like there is a doc in Documentation/vm/cleancache.txt which > >>includes a list of attributes the filesystem needs to have to work properly > >>with cleancache. > >So, those points are: > I had started to look at these too but I feel very out of my depth! > I had similar conclusions to what Dave wrote but I don't think my > thoughts should carry very much (any) weight. Anyway I gambled and > booted my xen domU with this patch and so far so good... xen top > shows that tmem is now being used where previously it wasn't. I'll > try running the xfstests at the weekend after a couple more days up > time to see what happens. And how did it go? > > > >| Some points for a filesystem to consider: > >| > >| - The FS should be block-device-based (e.g. a ram-based FS such > >| as tmpfs should not enable cleancache) > > > >OK. > > > >|- To ensure coherency/correctness, the FS must ensure that all > >| file removal or truncation operations either go through VFS or > >| add hooks to do the equivalent cleancache "invalidate" operations > > > >There be dragons - do all the XFS ioctls do the right thing? > vfs_unlink() calls *dir->i_op->unlink, in xfs_iops.c for S_IFDIR there is: > > if (xfs_sb_version_hasasciici(&XFS_M(inode->i_sb)->m_sb)) > inode->i_op = &xfs_dir_ci_inode_operations; > else > inode->i_op = &xfs_dir_inode_operations; > > where .unlink in xfs_dir_inode_operations is xfs_vn_unlink() in either > condition. > > I can't work out how to follow the vfs_truncate() in to the filesystem > code and perhaps there are other paths that would lead to file removal. Did that ever get worked out or are you waiting for a response on that? > > > > >|- To ensure coherency/correctness, either inode numbers must > >| be unique across the lifetime of the on-disk file OR the > >| FS must provide an "encode_fh" function. > > > >Ok. > > > >|- The FS must call the VFS superblock alloc and deactivate routines > >| or add hooks to do the equivalent cleancache calls done there. > > > >OK. > > > >|- To maximize performance, all pages fetched from the FS should > >| go through the do_mpag_readpage routine or the FS should add > >| hooks to do the equivalent (cf. btrfs) > > > >xfs uses mpage_readpages() so should be fine. OK. > I think there is a cleancache documentation bug since no other fs > calls do_mpage_readpage(). The mpage_readpage goes "through the do_mpage(sic)_readpage" routine. There is a bug in that it says 'mpa' instead of 'mpage'. > > > >|- Currently, the FS blocksize must be the same as PAGESIZE. This > >| is not an architectural restriction, but no backends currently > >| support anything different. > > > >Which means that we need hooks in the mount path to determine if > >this is the case or not. I note that neither ext3/ext4 do this check > >so I can't determine why this restriction is mentioned, and I'm not > >sure if it has any relevance to btrfs. > > > >IOWs, I'd like to know why this restriction exists - what does > >cleancache care about how the filesystem maps blocks to the page in > >the page cache - any way the filesystem does this it uses > >page->private to hide this fact from the page cache.... > + Konrad (cleancache maintainer) for any opinion. That is a bug. It should not care about the size of it - as long as 'struct page *' is passed in. If the underlaying architecture has 64KB pages, it should work (and I think it does as zcache2 can do it). > > > >|- A clustered FS should invoke the "shared_init_fs" cleancache > >| hook to get best performance for some backends. > > > >Not a problem. > > > >So there's a couple of things that need to be explained and > >explored, and a bunch of testing to be done.... Any patches that I can put on my environment to test it? Thanks. > > > James From bpm@sgi.com Wed May 22 15:51:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9308A7CBF for ; Wed, 22 May 2013 15:51:02 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 79B94304059; Wed, 22 May 2013 13:50:59 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 4798D500B4B; Wed, 22 May 2013 15:50:59 -0500 (CDT) Date: Wed, 22 May 2013 15:50:59 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 06/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Message-ID: <20130522205059.GP20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-7-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-7-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:05PM +1000, Dave Chinner wrote: > From: Dave Chinner > > xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining > the entries in two leaves when the destination leaf requires > compaction. The temporary buffer ends up being copied back over the > original destination buffer, so the header in the temporary buffer > needs to contain all the information that is in the destination > buffer. > > To make sure the temporary buffer is fully initialised, once we've > set up the temporary incore header appropriately, write is back to > the temporary buffer before starting to move entries around. > > Signed-off-by: Dave Chinner > > --- > fs/xfs/xfs_attr_leaf.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > index 0bce1b3..79ece72 100644 > --- a/fs/xfs/xfs_attr_leaf.c > +++ b/fs/xfs/xfs_attr_leaf.c > @@ -2181,14 +2181,24 @@ xfs_attr3_leaf_unbalance( > struct xfs_attr_leafblock *tmp_leaf; > struct xfs_attr3_icleaf_hdr tmphdr; > > - tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); > - memset(tmp_leaf, 0, state->blocksize); > - memset(&tmphdr, 0, sizeof(tmphdr)); > + tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP); > + > + /* > + * Copy the header into the temp leaf so that all the stuff > + * not in the incore header is present and gets copied back in > + * once we've moved all the entries. > + */ > + memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf)); > > + memset(&tmphdr, 0, sizeof(tmphdr)); > tmphdr.magic = savehdr.magic; > tmphdr.forw = savehdr.forw; > tmphdr.back = savehdr.back; > tmphdr.firstused = state->blocksize; > + > + /* write the header to the temp buffer to initialise it */ > + xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr); > + Hrm. It seemed like the memset 0 for the incore temp header should have been enough for the purposes of moveents. Why did you have to add this additional hdr_to_disk? -Ben From rjohnston@sgi.com Wed May 22 16:08:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 093FE7CBF for ; Wed, 22 May 2013 16:08:05 -0500 (CDT) Received: from gulag1.americas.sgi.com (gulag1.americas.sgi.com [128.162.236.41]) by relay2.corp.sgi.com (Postfix) with ESMTP id D6D29304039 for ; Wed, 22 May 2013 14:08:01 -0700 (PDT) Received: by gulag1.americas.sgi.com (Postfix, from userid 48222) id BE7BCAD0D229; Wed, 22 May 2013 16:08:01 -0500 (CDT) Message-Id: <20130522205819.586978467@gulag1.americas.sgi.com> User-Agent: quilt/0.47-15.17.1 Date: Wed, 22 May 2013 15:58:19 -0500 From: rjohnston@sgi.com To: xfs@oss.sgi.com Subject: [PATCH] xfsprogs: libhandle/Makefile - fix make install In the default section of libhandle/Makefile, ltdepend prevented libhandle.so from being installed properly so remove it. Signed-off-by: Rich Johnston -- diff --git a/libhandle/Makefile b/libhandle/Makefile index 865ca22..2f39173 100644 --- a/libhandle/Makefile +++ b/libhandle/Makefile @@ -15,7 +15,7 @@ LTLDFLAGS += -Wl,--version-script,libhandle.sym CFILES = handle.c jdm.c LSRCFILES = libhandle.sym -default: ltdepend $(LTLIBRARY) +default: $(LTLIBRARY) include $(BUILDRULES) From sandeen@sandeen.net Wed May 22 16:22:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C4E917CBF for ; Wed, 22 May 2013 16:22:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A28378F804B for ; Wed, 22 May 2013 14:22:35 -0700 (PDT) X-ASG-Debug-ID: 1369257751-04cbb0049c5e9f0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id FSQ23AFBdZknqeQm for ; Wed, 22 May 2013 14:22:31 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6370163C3F60; Wed, 22 May 2013 16:22:31 -0500 (CDT) Message-ID: <519D3716.8080502@sandeen.net> Date: Wed, 22 May 2013 16:22:30 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: rjohnston@sgi.com CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install References: <20130522205819.586978467@gulag1.americas.sgi.com> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install In-Reply-To: <20130522205819.586978467@gulag1.americas.sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369257751 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131733 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/22/13 3:58 PM, rjohnston@sgi.com wrote: > In the default section of libhandle/Makefile, ltdepend prevented > libhandle.so from being installed properly so remove it. Can you explain how it prevented it? [sandeen@sandeen xfsprogs]$ grep ltdepend */Makefile libdisk/Makefile:default: ltdepend $(LTLIBRARY) libhandle/Makefile:default: ltdepend $(LTLIBRARY) libxcmd/Makefile:default: ltdepend $(LTLIBRARY) libxfs/Makefile:default: crc32selftest ltdepend $(LTLIBRARY) libxlog/Makefile:default: ltdepend $(LTLIBRARY) seems to exist in every subdir, why is this one causing trouble? /me goes off to dig around in makefiles > Signed-off-by: Rich Johnston > -- > diff --git a/libhandle/Makefile b/libhandle/Makefile > index 865ca22..2f39173 100644 > --- a/libhandle/Makefile > +++ b/libhandle/Makefile > @@ -15,7 +15,7 @@ LTLDFLAGS += -Wl,--version-script,libhandle.sym > CFILES = handle.c jdm.c > LSRCFILES = libhandle.sym > > -default: ltdepend $(LTLIBRARY) > +default: $(LTLIBRARY) > > include $(BUILDRULES) > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From david@fromorbit.com Wed May 22 16:54:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BBCDF7CBF for ; Wed, 22 May 2013 16:54:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A2E50304032 for ; Wed, 22 May 2013 14:54:59 -0700 (PDT) X-ASG-Debug-ID: 1369259697-04cbb0049d611f0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 03ZnJlwYR3vY5eJx for ; Wed, 22 May 2013 14:54:57 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhkNAJU9nVF5LBBG/2dsb2JhbABagwiDArl9hSQEAYEGF3SCIwEBBTocMwgDGAklDwUlAyEBEogMux8WjWpqOoNUA5c3kUGDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 07:24:56 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfGzm-0005vx-I7; Thu, 23 May 2013 07:54:54 +1000 Date: Thu, 23 May 2013 07:54:54 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522215454.GL29466@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130521234016.GB14347@redhat.com> <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130522055147.GI29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369259697 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131735 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 01:29:38AM -0400, Dave Jones wrote: > > On Wed, May 22, 2013 at 03:12:43PM +1000, Dave Chinner wrote: > >=20 > > > > [ 36.339105] XFS (sda2): xfs_setattr_size: mask 0xa068 mismatch = on file 0\xffffffb8\xffffffd3-=02\xffffff88\xffffffff\xffffffff > > >=20 > > > So, still the same strange mask. That just doesn't seem right. > >=20 > > any idea what I screwed up in the filename printing part ? >=20 > Nope. >=20 > Right now, I have nothing for you but disappointment.... >=20 > > > > [ 36.350823] XFS: Assertion failed: 0, file: fs/xfs/xfs_iops.c, = line: 730 > > > > [ 36.359459] ------------[ cut here ]------------ > > > > [ 36.365247] kernel BUG at fs/xfs/xfs_message.c:108! > > > > [ 36.371360] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALL= OC > > > > [ 36.379091] Modules linked in: xfs libcrc32c snd_hda_codec_real= tek snd_hda_codec_hdmi microcode(+) pcspkr snd_hda_intel snd_hda_codec snd_= hwdep snd_seq snd_seq_device snd_pcm e1000e snd_page_alloc snd_timer ptp sn= d soundcore pps_core > > > > [ 36.405431] CPU: 1 PID: 2887 Comm: cc1 Not tainted 3.10.0-rc2+ = #4 > > >=20 > > > Your compiler is triggering this? That doesn't seem likely... > >=20 > > yeah, though it seems pretty much anything that writes to that partitio= n will cause it. > > Here's fsx, which died instantly... > >=20 > > [ 34.938367] XFS (sda2): xfs_setattr_size: mask 0x2068 mismatch on fi= le =02 > >=20 > > (Note, different mask this time) >=20 > Which has ATTR_FORCE set but not ATTR_KILL_SUID or ATTR_KILL_SGID. > And that, AFAICT, is impossible. Gah, I've got not idea what the hell I was smoking yesterday afternoon. 0x2000 is actually ATTR_FILE, and 0x8000 is ATTR_OPEN. So a mask of 0xa068 is correct and valid from the open path, and 0x2068 is just file from the truncate path. But, neither of those should trigger that assert. indeed, on a test kernel (3.10-rc2 based): # echo I need a new drug > /mnt/scr/bah/blah/black/sheep/foo [ 296.742990] XFS (vdb): xfs_setattr_size: mask 0xa068, masked # 0x0 ii 0x= ffff88003e6297c0, d 0xffff88003e5b9cb0 path /bah/blah/black/sheep/foo # And there's not assert failure. Indeed, the "masked # 0x0" is what the assert is checking. And yeah, path output works. Trick for anyone who doesn't read the code closely - the buffer is filled from the end backwards, and the start of the path is the return variable. So, the above code is: { struct dentry *d =3D d_find_alias(VFS_I(ip)); char buf[MAXPATHLEN]; char *ptr; memset(buf, 0, MAXPATHLEN); ptr =3D dentry_path(d, buf, MAXPATHLEN); xfs_warn(mp, "%s: mask 0x%x, masked 0x%x ii 0x%p, d 0x%p path %s", __func__, mask, (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| ATTR_KILL_PRIV|ATTR_TIMES_SET)), ip, d, ptr); dput(d); } Which I put just before the assert that is firing on your machine. And, obviously, it isn't firing on mine and obviously shouldn't be firing o= n a mask of 0xa068. Gah, what a mess. Sorry for the run-around, Dave, my brain clearly wasn't working yesterday afternoon. -Dave. --=20 Dave Chinner david@fromorbit.com From bpm@sgi.com Wed May 22 16:59:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6F52E7CBF for ; Wed, 22 May 2013 16:59:34 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3CA038F8066; Wed, 22 May 2013 14:59:34 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 19A1F500B4B; Wed, 22 May 2013 16:59:34 -0500 (CDT) Date: Wed, 22 May 2013 16:59:34 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 07/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Message-ID: <20130522215934.GQ20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-8-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-8-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:06PM +1000, Dave Chinner wrote: > From: Dave Chinner > > xfs_attr3_leaf_compact() uses a temporary buffer for compacting the > the entries in a leaf. It copies the the original buffer into the > temporary buffer, then zeros the original buffer completely. It then > copies the entries back into the original buffer. However, the > original buffer has not been correctly initialised, and so the > movement of the entries goes horribly wrong. > > Make sure the zeroed destination buffer is fully initialised, and > once we've set up the destination incore header appropriately, write > is back to the buffer before starting to move entries around. it > > While debugging this, the _d/_s prefixes weren't sufficient to > remind me what buffer was what, so rename then all _src/_dst. Yeah, it helps. > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_attr_leaf.c | 42 ++++++++++++++++++++++++++---------------- > 1 file changed, 26 insertions(+), 16 deletions(-) > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > index 79ece72..5b03d15 100644 > --- a/fs/xfs/xfs_attr_leaf.c > +++ b/fs/xfs/xfs_attr_leaf.c > @@ -1445,11 +1445,12 @@ xfs_attr3_leaf_add_work( > STATIC void > xfs_attr3_leaf_compact( > struct xfs_da_args *args, > - struct xfs_attr3_icleaf_hdr *ichdr_d, > + struct xfs_attr3_icleaf_hdr *ichdr_dst, > struct xfs_buf *bp) > { > - xfs_attr_leafblock_t *leaf_s, *leaf_d; > - struct xfs_attr3_icleaf_hdr ichdr_s; > + struct xfs_attr_leafblock *leaf_src; > + struct xfs_attr_leafblock *leaf_dst; > + struct xfs_attr3_icleaf_hdr ichdr_src; > struct xfs_trans *trans = args->trans; > struct xfs_mount *mp = trans->t_mountp; > char *tmpbuffer; > @@ -1457,29 +1458,38 @@ xfs_attr3_leaf_compact( > trace_xfs_attr_leaf_compact(args); > > tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); > - ASSERT(tmpbuffer != NULL); > memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); > memset(bp->b_addr, 0, XFS_LBSIZE(mp)); > + leaf_src = (xfs_attr_leafblock_t *)tmpbuffer; > + leaf_dst = bp->b_addr; > > /* > - * Copy basic information > + * Copy the on-disk header back into the destination buffer to ensure > + * all the information in the header that is not part of the incore > + * header structure is preserved. > */ > - leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; > - leaf_d = bp->b_addr; > - ichdr_s = *ichdr_d; /* struct copy */ > - ichdr_d->firstused = XFS_LBSIZE(mp); > - ichdr_d->usedbytes = 0; > - ichdr_d->count = 0; > - ichdr_d->holes = 0; > - ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); > - ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; > + memcpy(bp->b_addr, tmpbuffer, xfs_attr3_leaf_hdr_size(leaf_src)); > + > + /* Initialise the incore headers */ > + ichdr_src = *ichdr_dst; /* struct copy */ > + ichdr_dst->firstused = XFS_LBSIZE(mp); > + ichdr_dst->usedbytes = 0; > + ichdr_dst->count = 0; > + ichdr_dst->holes = 0; > + ichdr_dst->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_src); > + ichdr_dst->freemap[0].size = ichdr_dst->firstused - > + ichdr_dst->freemap[0].base; > + > + > + /* write the header back to initialise the underlying buffer */ > + xfs_attr3_leaf_hdr_to_disk(leaf_dst, ichdr_dst); I can see that the memcpy is necessary but again I'm having a hard time understanding what field was messed up for moveents. The patch looks fine in general... I must be blind. From rjohnston@sgi.com Wed May 22 17:05:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EF07F7CBF for ; Wed, 22 May 2013 17:05:01 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id BE5F3304032; Wed, 22 May 2013 15:04:58 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 22 May 2013 17:04:06 -0500 Message-ID: <519D4136.6080908@sgi.com> Date: Wed, 22 May 2013 17:05:42 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: Subject: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install References: <20130522205819.586978467@gulag1.americas.sgi.com> <519D3716.8080502@sandeen.net> In-Reply-To: <519D3716.8080502@sandeen.net> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/22/2013 04:22 PM, Eric Sandeen wrote: > On 5/22/13 3:58 PM, rjohnston@sgi.com wrote: >> In the default section of libhandle/Makefile, ltdepend prevented >> libhandle.so from being installed properly so remove it. > > Can you explain how it prevented it? > > [sandeen@sandeen xfsprogs]$ grep ltdepend */Makefile > libdisk/Makefile:default: ltdepend $(LTLIBRARY) > libhandle/Makefile:default: ltdepend $(LTLIBRARY) > libxcmd/Makefile:default: ltdepend $(LTLIBRARY) > libxfs/Makefile:default: crc32selftest ltdepend $(LTLIBRARY) > libxlog/Makefile:default: ltdepend $(LTLIBRARY) > > seems to exist in every subdir, why is this one causing trouble? Because libhandle is the only one that is installed. ;) make install Installing include-install gmake[1]: Nothing to be done for `install'. Installing libxfs-install gmake[1]: Nothing to be done for `install'. Installing libxlog-install gmake[1]: Nothing to be done for `install'. Installing libxcmd-install gmake[1]: Nothing to be done for `install'. Installing libhandle-install cd ../libhandle/.libs; ../../install-sh -o root -g root -m 755 -d /lib64; ../../install-sh -o root -g root -m 755 -T so_dot_version libhandle.lai /lib64; ../../install-sh -o root -g root -T so_dot_current libhandle.lai /lib64 Installing libdisk-install gmake[1]: Nothing to be done for `install'. make install-dev Installing include-install-dev ../install-sh -o root -g root -m 755 -d /usr/include/xfs ../install-sh -o root -g root -m 644 handle.h jdm.h xqm.h xfs.h xfs_fs.h xfs_types.h linux.h /usr/include/xfs ../install-sh -o root -g root -m 644 platform_defs.h /usr/include/xfs Installing libxfs-install-dev gmake[1]: Nothing to be done for `install-dev'. Installing libxlog-install-dev gmake[1]: Nothing to be done for `install-dev'. Installing libxcmd-install-dev gmake[1]: Nothing to be done for `install-dev'. Installing libhandle-install-dev cd ../libhandle/.libs; ../../install-sh -o root -g root -m 755 -d /usr/lib64; ../../install-sh -o root -g root -m 644 -T old_lib libhandle.lai /usr/lib64; ../../install-sh -o root -g root -m 644 libhandle.lai /usr/lib64/libhandle.la ; ../../install-sh -o root -g root -m 755 -d /lib64; ../../install-sh -o root -g root -T so_base libhandle.lai /lib64; if test "x/usr/lib64" != "x/lib64" ; then ../../install-sh -o root -g root -S /usr/lib64/libhandle.a /lib64/libhandle.a; ../../install-sh -o root -g root -S /usr/lib64/libhandle.la /lib64/libhandle.la; ../../install-sh -o root -g root -S /lib64/libhandle.so /usr/lib64/libhandle.so; fi Installing libdisk-install-dev gmake[1]: Nothing to be done for `install-dev'. [xfsprogs]$ grep -A 2 install lib*/Makefile libdisk/Makefile:install: default libdisk/Makefile- libdisk/Makefile:install-dev: default libdisk/Makefile- libdisk/Makefile:install-qa: install-dev libdisk/Makefile- libdisk/Makefile--include .ltdep -- libhandle/Makefile:install: default libhandle/Makefile- $(INSTALL_LTLIB) libhandle/Makefile- libhandle/Makefile:install-dev: default libhandle/Makefile- $(INSTALL_LTLIB_DEV) libhandle/Makefile- libhandle/Makefile:install-qa: install-dev libhandle/Makefile- libhandle/Makefile--include .ltdep -- libxcmd/Makefile:install install-dev install-qa: default libxcmd/Makefile- libxcmd/Makefile--include .ltdep -- libxfs/Makefile:install: default libxfs/Makefile- libxfs/Makefile:install-dev: default libxfs/Makefile- libxfs/Makefile:install-qa: default libxfs/Makefile- libxfs/Makefile--include .ltdep -- libxlog/Makefile:install install-dev install-qa: default libxlog/Makefile- libxlog/Makefile--include .ltdep I compared it to libdm/Makefile which removed it from the default: target. default: $(LTLIBRARY) include $(BUILDRULES) install: default $(INSTALL_LTLIB) install-dev: default $(INSTALL_LTLIB_DEV) > > /me goes off to dig around in makefiles > > >> Signed-off-by: Rich Johnston >> -- >> diff --git a/libhandle/Makefile b/libhandle/Makefile >> index 865ca22..2f39173 100644 >> --- a/libhandle/Makefile >> +++ b/libhandle/Makefile >> @@ -15,7 +15,7 @@ LTLDFLAGS += -Wl,--version-script,libhandle.sym >> CFILES = handle.c jdm.c >> LSRCFILES = libhandle.sym >> >> -default: ltdepend $(LTLIBRARY) >> +default: $(LTLIBRARY) >> >> include $(BUILDRULES) >> >> >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >> > From david@fromorbit.com Wed May 22 17:09:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 028487F3F for ; Wed, 22 May 2013 17:09:40 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 92106AC001 for ; Wed, 22 May 2013 15:09:36 -0700 (PDT) X-ASG-Debug-ID: 1369260574-04bdf078175fbe0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id q4ShCd5oBMYyhowy for ; Wed, 22 May 2013 15:09:34 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkIOAPxAnVF5LBBG/2dsb2JhbABagwgwglK5fYUkBAGBBhd0giMBAQU6HDMIAxgJJQ8FJQMhARIah3INuxsWjWqBJINUA5c3kUGDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 07:39:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfHDx-0005yU-Gl; Thu, 23 May 2013 08:09:33 +1000 Date: Thu, 23 May 2013 08:09:33 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522220933.GV24543@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522142252.GB1407@redhat.com> <20130522161946.GA25906@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522161946.GA25906@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369260574 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131735 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 12:19:46PM -0400, Dave Jones wrote: > On Wed, May 22, 2013 at 10:22:52AM -0400, Dave Jones wrote: > > On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > > > > > > Tomorrow I'll also try running some older kernels with the same > > > > options to see if it's something new, or an older bug. This is a > > > > new machine, so it may be something that's been around for a > > > > while, and for whatever reason, my other machines don't hit > > > > this. > > > > > > Another thing that just occurred to me - what compiler are you > > > using? We had a report last week on #xfs that xfsdump was failing > > > with bad checksums because of link time optimisation (LTO) in > > > gcc-4.8.0. When they turned that off, everything worked fine. So if > > > you are using 4.8.0, perhaps trying a different compiler might be a > > > good idea, too. > > > > Yeah, this is 4.8.0. This box is running F19-beta. > > I managed to shoehorn the gcc-4.7 from f18 on there though. > > Bug reproduced instantly, so I think we can rule out compiler. > > > > I ran 3.9 with the same debug options. Seems stable. > > I'll do a bisect. > > good news. It wasn't until I started bisecting I realised I was still > carrying this patch from you to fix slab corruption I was seeing. > > It seems to be the culprit (or is masking another problem -- I had to apply > it at each step of the bisect to get past the slab corruption bug). That doesn't make a whole lot of sense to me. The fix in the xfsdev tree is a little different: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs.git;a=commitdiff;h=52c24ad39ff02d7bd73c92eb0c926fb44984a41d but I can't set how this makes any difference to the problem at all. See my previous post about the fact that 0xa068 is actually a valid mask and should not be tripping the assert.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 22 17:16:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C8A8D7CBF for ; Wed, 22 May 2013 17:16:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A99048F804C for ; Wed, 22 May 2013 15:16:28 -0700 (PDT) X-ASG-Debug-ID: 1369260986-04cb6c47405d020001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Pdn294l6RapHlt88 for ; Wed, 22 May 2013 15:16:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkIOAFZDnVF5LBBG/2dsb2JhbABagwgwglK5fYUkBAGBBhd0giMBAQU6HCMQCAMYCSUPBSUDNIgMuykWjWqBHQcWgz4DlzeBKpAXgyEq Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 07:46:02 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfHKE-0005zU-DG; Thu, 23 May 2013 08:16:02 +1000 Date: Thu, 23 May 2013 08:16:02 +1000 From: Dave Chinner To: rjohnston@sgi.com Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install Message-ID: <20130522221602.GW24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install References: <20130522205819.586978467@gulag1.americas.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522205819.586978467@gulag1.americas.sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369260986 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131735 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, May 22, 2013 at 03:58:19PM -0500, rjohnston@sgi.com wrote: > In the default section of libhandle/Makefile, ltdepend prevented > libhandle.so from being installed properly so remove it. > > Signed-off-by: Rich Johnston > -- > diff --git a/libhandle/Makefile b/libhandle/Makefile > index 865ca22..2f39173 100644 > --- a/libhandle/Makefile > +++ b/libhandle/Makefile > @@ -15,7 +15,7 @@ LTLDFLAGS += -Wl,--version-script,libhandle.sym > CFILES = handle.c jdm.c > LSRCFILES = libhandle.sym > > -default: ltdepend $(LTLIBRARY) > +default: $(LTLIBRARY) PLease explain how removing the makefile build dependency generation fixes a library install problem. This, AFAICT, will just break rebuild detection of the library when we modify srouce files. Cheers, Dave. -- Dave Chinner david@fromorbit.com From bpm@sgi.com Wed May 22 17:26:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 851337CBF for ; Wed, 22 May 2013 17:26:09 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1ACC1AC001; Wed, 22 May 2013 15:26:09 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id C2079500B50; Wed, 22 May 2013 17:26:08 -0500 (CDT) Date: Wed, 22 May 2013 17:26:08 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write Message-ID: <20130522222608.GR20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-9-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-9-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:07PM +1000, Dave Chinner wrote: > From: Dave Chinner > > We write the superblock every 30s or so which results in the > verifier being called. Right now that results in this output > every 30s: > > XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! > Use of these features in this kernel is at your own risk! > > And spamming the logs. Stop this output from occurring on superblock > writes. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_mount.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index f6bfbd7..e8e310c 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -314,7 +314,8 @@ STATIC int > xfs_mount_validate_sb( > xfs_mount_t *mp, > xfs_sb_t *sbp, > - bool check_inprogress) > + bool check_inprogress, > + bool check_version) > { > > /* > @@ -337,9 +338,10 @@ xfs_mount_validate_sb( > > /* > * Version 5 superblock feature mask validation. Reject combinations the > - * kernel cannot support up front before checking anything else. > + * kernel cannot support up front before checking anything else. For > + * write validation, we don't need to check feature masks. > */ > - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { if (!quiet_version) { > xfs_alert(mp, > "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" > "Use of these features in this kernel is at your own risk!"); } Since the stated goal of the patch is to be quieter and not to disable useful tests in the verifier, I suggest you disable the print rather than disable the test. -Ben From mlsemon35@gmail.com Wed May 22 17:58:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 95F9B29DF8 for ; Wed, 22 May 2013 17:58:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2C02AAC001 for ; Wed, 22 May 2013 15:58:45 -0700 (PDT) X-ASG-Debug-ID: 1369263523-04bdf0781662cc0001-NocioJ Received: from mail-ie0-f177.google.com (mail-ie0-f177.google.com [209.85.223.177]) by cuda.sgi.com with ESMTP id VNNSpDL7CagvTKWC (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 15:58:44 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.177 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] Received: by mail-ie0-f177.google.com with SMTP id 9so6730319iec.36 for ; Wed, 22 May 2013 15:58:43 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.177] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=vGFnG8G7rA9g9KSyOlNM1It5gUz4LoQAB7TjvV8ZfgY=; b=dT3xH2ScSSyikPuZNfGbW5QcZ0JvBieNG2Zsdhcs5zsckvP3A7aptw21jgmN3NC+XB vx4wPFuY2/J51J92OsVxNotq6ISPhNnF61UIPopD9Dld/w5lBTdOic+LyXtOQcdzgTKP m3YveU8hB/HNVdyeOweyOd03QHy/JS54yOfd+MH7Rk3Ie8RMbC0CEZ/Ju8T42nYYQEQI YcA8rL4WtcCNaMfBW/G3EUmxF6aZ9080I8EIkiY3fqEnSkqD3vdWMssSCfr/zA3kq9gI CKTn6INXz06EKlDxyzChVCHZZrW96C1duioFbHwTrOnqSspO5CuCUmRqmDKxPyCIi6ZE jGng== X-Received: by 10.50.153.113 with SMTP id vf17mr358460igb.101.1369263523707; Wed, 22 May 2013 15:58:43 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id qn10sm23133953igc.6.2013.05.22.15.58.33 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 22 May 2013 15:58:42 -0700 (PDT) Message-ID: <519D4D87.2070806@gmail.com> Date: Wed, 22 May 2013 18:58:15 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: generic/258 questions (mount issue)... References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> X-ASG-Orig-Subj: Re: generic/258 questions (mount issue)... In-Reply-To: <20130522012620.GA29466@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f177.google.com[209.85.223.177] X-Barracuda-Start-Time: 1369263524 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On 05/21/2013 09:26 PM, Dave Chinner wrote: > On Tue, May 21, 2013 at 08:43:13PM -0400, Michael L. Semon wrote: >> Hi! When using xfstests generic/258 with along with $TEST_RTDEV >> $TEST_LOGDEV, it tends to scream bloody murder about corrupted >> partitions and such. In fact, the commands in the test seem to do >> the right thing when executed by hand. So once again, I grasped for >> straws and came up with this: >> >> --- xfstests/tests/generic/258.orig 2013-05-21 20:19:38.430754829 -0400 >> +++ xfstests/tests/generic/258 2013-05-21 20:10:11.509021368 -0400 >> @@ -62,7 +62,7 @@ >> # unmount, remount, and check the timestamp >> echo "Remounting to flush cache" >> umount $TEST_DEV >> -mount $TEST_DEV $TEST_DIR >> +_test_mount >> >> # Should yield -315593940 (prior to epoch) >> echo "Testing for negative seconds since epoch" >> >> My questions are these: >> >> 1) Was there a better way to do this? > > No, your change is correct. Can you clean up the description of the > problem you had and add a Signed-off-by? > >> 2) Not knowing the policy on umounting $TEST_DEV, could this have >> been a test for $SCRATCH_DEV? > > There are a handful of other tests that also unmount the TEST_DEV. > Perhaps adding a _test_umount() wrapper to common/rc (similar to > _scratch_umount) would be best. At least shared/243 needs the same > _test_mount treatment as this test. > > Cheers, > > Dave. > I have a simple _test_mount change in shared/243, tested and ready to post. However, it may work the same either way. AFAIK, the test seems to go like this: xfs_io this; if ( ext4 ) { umount; do some unmounted ext4 stuff; mount -t ${FSTYP} ...; } xfs_io that; if ( ext4 ) { ... } ... So if it isn't ext4 being tested, $TEST_DEV is not umounted at all. Until I got a closer look at this, it was a surprise to see the XFS+rtdev+logdev pass without changes. The rest of your comments will be followed when I get home. To use the external logdev means a 20%-30% improvement in some test results on XFS. To get the other file systems to do this will certainly have me looking at the $TEST_DEV mount and umount code anyway. Thanks! Michael From david@fromorbit.com Wed May 22 18:04:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3F55629DF8 for ; Wed, 22 May 2013 18:04:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B49BAAC001 for ; Wed, 22 May 2013 16:04:35 -0700 (PDT) X-ASG-Debug-ID: 1369263873-04cbb0049a65970001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id hNpbQG8w2APPAnAz for ; Wed, 22 May 2013 16:04:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkMOAAVOnVF5LBBG/2dsb2JhbABagwgwglK5foUkBAGBBhd0giMBAQQBJxMcIwULCAMOCgklDwUlAyETiAcFuyMWjWqBHQeDVAOXN4EqkBeDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 08:34:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfI58-000671-N1; Thu, 23 May 2013 09:04:30 +1000 Date: Thu, 23 May 2013 09:04:30 +1000 From: Dave Chinner To: Rich Johnston Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install Message-ID: <20130522230430.GM29466@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: libhandle/Makefile - fix make install References: <20130522205819.586978467@gulag1.americas.sgi.com> <519D3716.8080502@sandeen.net> <519D4136.6080908@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519D4136.6080908@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369263873 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 05:05:42PM -0500, Rich Johnston wrote: > On 05/22/2013 04:22 PM, Eric Sandeen wrote: > >On 5/22/13 3:58 PM, rjohnston@sgi.com wrote: > >>In the default section of libhandle/Makefile, ltdepend prevented > >>libhandle.so from being installed properly so remove it. > > > >Can you explain how it prevented it? > > > >[sandeen@sandeen xfsprogs]$ grep ltdepend */Makefile > >libdisk/Makefile:default: ltdepend $(LTLIBRARY) > >libhandle/Makefile:default: ltdepend $(LTLIBRARY) > >libxcmd/Makefile:default: ltdepend $(LTLIBRARY) > >libxfs/Makefile:default: crc32selftest ltdepend $(LTLIBRARY) > >libxlog/Makefile:default: ltdepend $(LTLIBRARY) > > > >seems to exist in every subdir, why is this one causing trouble? > Because libhandle is the only one that is installed. ;) So, after you've done a builds what does libhandle/.libs contain? it shoul dlook something lik ethis: $ ls -l libhandle/.libs/ total 180 -rw-r--r-- 1 dave dave 39416 May 23 08:50 handle.o -rw-r--r-- 1 dave dave 21936 May 23 08:50 jdm.o -rw-r--r-- 1 dave dave 61834 May 23 08:50 libhandle.a lrwxrwxrwx 1 dave dave 15 May 23 08:50 libhandle.la -> ../libhandle.la -rw-r--r-- 1 dave dave 938 May 23 08:50 libhandle.lai lrwxrwxrwx 1 dave dave 18 May 23 08:50 libhandle.so -> libhandle.so.1.0.3 lrwxrwxrwx 1 dave dave 18 May 23 08:50 libhandle.so.1 -> libhandle.so.1.0.3 -rwxr-xr-x 1 dave dave 45667 May 23 08:50 libhandle.so.1.0.3 $ And the libhandle.lai should contain: $ cat libhandle/.libs/libhandle.lai libhandle.la - a libtool library file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.1 # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libhandle.so.1' # Names of this library. library_names='libhandle.so.1.0.3 libhandle.so.1 libhandle.so' # The name of the static archive. old_library='libhandle.a' # Linker flags that can not go in dependency_libs. inherited_linker_flags='' # Libraries that this one depends upon. dependency_libs='' # Names of additional weak libraries provided by this library weak_library_names='' # Version information for libhandle. current=1 age=0 revision=3 # Is this an already installed library? installed=yes # Should we warn about portability when linking against -modules? shouldnotlink=no # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='/lib' $ See $library_names? That should be all the names that are created, and there are three. The are set up via 'install-sh -T so_????' options. So, look at the install rules being run: > cd ../libhandle/.libs; Obvious. > ../../install-sh -o root -g root -m 755 -d /lib64; Setting owner/perms on /lib64. > ../../install-sh -o root -g root -m 755 -T so_dot_version libhandle.lai /lib64; "-T so_dot_version" is supposed to copy libhandle.so.1.0.3 to /lib64/libhandle.so.1.0.3. i.e. install the current library. > ../../install-sh -o root -g root -T so_dot_current libhandle.lai /lib64 That's supposed to set up the /lib64/libhandle.so.1 link back to /lib64/libhandle.so.1.0.3. And that's it. So, what's missing? Right - there's nothing that sets up /lib64/libhandle.so i.e. this is missing: ../../install-sh -o root -g root -T so_base libhandle.lai /lib64 which would set up the /lib64/libhandle.so link to /lib64/libhandle.so.1. Cheers, Dave. -- Dave Chinner david@fromorbit.com From sekharan@us.ibm.com Wed May 22 18:12:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 72A4D29DF8 for ; Wed, 22 May 2013 18:12:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 510FF8F8066 for ; Wed, 22 May 2013 16:12:48 -0700 (PDT) X-ASG-Debug-ID: 1369264367-04cb6c474260b10001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id zolCDc8HO1CJh1zO (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 May 2013 16:12:47 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 22 May 2013 17:12:47 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 22 May 2013 17:12:45 -0600 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 720FA1FF001B for ; Wed, 22 May 2013 17:07:36 -0600 (MDT) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4MNCif2130964 for ; Wed, 22 May 2013 17:12:44 -0600 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4MNCihc024735 for ; Wed, 22 May 2013 17:12:44 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4MNCiBY024711 for ; Wed, 22 May 2013 17:12:44 -0600 Subject: deadlock with &log->l_cilp->xc_ctx_lock semaphone From: Chandra Seetharaman X-ASG-Orig-Subj: deadlock with &log->l_cilp->xc_ctx_lock semaphone Reply-To: sekharan@us.ibm.com To: XFS mailing list Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Wed, 22 May 2013 18:12:43 -0500 Message-ID: <1369264363.10223.2994.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052223-3620-0000-0000-000002A32718 X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1369264367 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hello, While testing and rearranging my pquota/gquota code, I stumbled on a xfs_shutdown() during a mount. But the mount just hung. I debugged and found that it is in a code path where &log->l_cilp->xc_ctx_lock is first acquired in read mode and some levels down the same semaphore is being acquired in write mode causing a deadlock. This is the stack: xfs_log_commit_cil -> acquires &log->l_cilp->xc_ctx_lock in read mode xlog_print_tic_res xfs_force_shutdown xfs_log_force_umount xlog_cil_force xlog_cil_force_lsn xlog_cil_push_foreground xlog_cil_push - tries to acquire same semaphore in write mode ------------------------- Here is the actual stack from /var/log/messages: ------------------------- schedule+0x29/0x70 rwsem_down_write_failed+0xf5/0x1a0 call_rwsem_down_write_failed+0x13/0x20 ? down_write+0x31/0x40 xlog_cil_push+0xd6/0x3e0 [xfs] ? __cond_resched+0x2a/0x40 xlog_cil_force_lsn+0x154/0x160 [xfs] ? __xfs_printk+0x31/0x50 [xfs] xfs_log_force_umount+0x5c/0x170 [xfs] xfs_do_force_shutdown+0x6b/0x170 [xfs] ? xlog_print_tic_res+0x112/0x120 [xfs] xlog_print_tic_res+0x112/0x120 [xfs] xfs_log_commit_cil+0x336/0x4a0 [xfs] xfs_trans_commit+0x79/0x270 [xfs] xfs_qm_write_sb_changes+0x61/0x90 [xfs] xfs_qm_mount_quotas+0x82/0x180 [xfs] xfs_mountfs+0x5f6/0x6b0 [xfs] xfs_fs_fill_super+0x2af/0x330 [xfs] mount_bdev+0x1be/0x200 ? __free_pages+0x2d/0x40 ? xfs_setup_devices+0xa0/0xa0 [xfs] ? selinux_sb_copy_data+0x14a/0x1e0 xfs_fs_mount+0x15/0x20 [xfs] mount_fs+0x43/0x1a0 vfs_kern_mount+0x72/0x100 do_mount+0x3e3/0x980 SyS_mount+0x90/0xe0 tracesys+0xdd/0xe2 -------------------------- From david@fromorbit.com Wed May 22 18:41:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5A3EF29DF8 for ; Wed, 22 May 2013 18:41:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 47AA5304053 for ; Wed, 22 May 2013 16:41:50 -0700 (PDT) X-ASG-Debug-ID: 1369266108-04cbb0049d67a00001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id ZMAmRv4QzKIFTLF5 for ; Wed, 22 May 2013 16:41:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhoNAGxXnVF5LBBG/2dsb2JhbABagwiDAroEhSQEAYEGF3SCIwEBBAEnExwjBQsIAw4KCSUPBSUDIROIBwW7LhaNaoEdB4NUA5c3ihyHJYMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 09:11:30 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfIev-0006AO-M5; Thu, 23 May 2013 09:41:29 +1000 Date: Thu, 23 May 2013 09:41:29 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: XFS mailing list Subject: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone Message-ID: <20130522234129.GN29466@dastard> X-ASG-Orig-Subj: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone References: <1369264363.10223.2994.camel@chandra-dt.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369264363.10223.2994.camel@chandra-dt.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369266108 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131741 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 06:12:43PM -0500, Chandra Seetharaman wrote: > Hello, > > While testing and rearranging my pquota/gquota code, I stumbled on a > xfs_shutdown() during a mount. But the mount just hung. > > I debugged and found that it is in a code path where > &log->l_cilp->xc_ctx_lock is first acquired in read mode and some levels > down the same semaphore is being acquired in write mode causing a > deadlock. > > This is the stack: > xfs_log_commit_cil -> acquires &log->l_cilp->xc_ctx_lock in read mode > xlog_print_tic_res > xfs_force_shutdown > xfs_log_force_umount > xlog_cil_force > xlog_cil_force_lsn > xlog_cil_push_foreground > xlog_cil_push - tries to acquire same semaphore in write mode Which means you had a transaction reservation overrun. Is it reproducable? iDo you have the output from xlog_print_tic_res()? Because: > xfs_trans_commit+0x79/0x270 [xfs] > xfs_qm_write_sb_changes+0x61/0x90 [xfs] > xfs_qm_mount_quotas+0x82/0x180 [xfs] > xfs_mountfs+0x5f6/0x6b0 [xfs] This transaction only modifies the superblock, and it has a buffer reservation for a superblock sized buffer, and hence should never overrun. IOWs, I'm ifar more concerned about the fact there was a transaction overrun than they was a hang in the path that handles the overrun. The fact this hang has been there since 2.6.35 tells you how rare transactions overruns are.... FWIW, the fix for the hang is to make xlog_print_tic_res() return an error and have the caller handle the shutdown. Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Wed May 22 18:54:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0BE2029DF8 for ; Wed, 22 May 2013 18:54:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id B12958F8068 for ; Wed, 22 May 2013 16:54:02 -0700 (PDT) X-ASG-Debug-ID: 1369266841-04cb6c474062d30001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id JALcJzAARq8kpVYh for ; Wed, 22 May 2013 16:54:01 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4MNrxgN022648 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 22 May 2013 19:53:59 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4MNrvYV006038 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 May 2013 19:53:58 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4MNru49031282; Wed, 22 May 2013 19:53:56 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4MNrtnR031281; Wed, 22 May 2013 19:53:55 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Wed, 22 May 2013 19:53:55 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130522235355.GA31001@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522142252.GB1407@redhat.com> <20130522161946.GA25906@redhat.com> <20130522220933.GV24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522220933.GV24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369266841 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, May 23, 2013 at 08:09:33AM +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 12:19:46PM -0400, Dave Jones wrote: > > On Wed, May 22, 2013 at 10:22:52AM -0400, Dave Jones wrote: > > > On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > > > > > > > > Tomorrow I'll also try running some older kernels with the same > > > > > options to see if it's something new, or an older bug. This is a > > > > > new machine, so it may be something that's been around for a > > > > > while, and for whatever reason, my other machines don't hit > > > > > this. > > > > > > > > Another thing that just occurred to me - what compiler are you > > > > using? We had a report last week on #xfs that xfsdump was failing > > > > with bad checksums because of link time optimisation (LTO) in > > > > gcc-4.8.0. When they turned that off, everything worked fine. So if > > > > you are using 4.8.0, perhaps trying a different compiler might be a > > > > good idea, too. > > > > > > Yeah, this is 4.8.0. This box is running F19-beta. > > > I managed to shoehorn the gcc-4.7 from f18 on there though. > > > Bug reproduced instantly, so I think we can rule out compiler. > > > > > > I ran 3.9 with the same debug options. Seems stable. > > > I'll do a bisect. > > > > good news. It wasn't until I started bisecting I realised I was still > > carrying this patch from you to fix slab corruption I was seeing. > > > > It seems to be the culprit (or is masking another problem -- I had to apply > > it at each step of the bisect to get past the slab corruption bug). > > That doesn't make a whole lot of sense to me. The fix in the xfsdev > tree is a little different: > > http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs.git;a=commitdiff;h=52c24ad39ff02d7bd73c92eb0c926fb44984a41d > > but I can't set how this makes any difference to the problem at all. > See my previous post about the fact that 0xa068 is actually a valid > mask and should not be tripping the assert.... Hmm, I did git bisect fs/xfs/, so maybe itit's something outside of that subdir that's the cause. I'll start over on the whole tree once I'm done bisecting another entirely different bug. Dave From david.moulin@tiscali.co.uk Wed May 22 18:54:37 2013 Return-Path: X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 084FA29E06 for ; Wed, 22 May 2013 18:54:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 86945AC003 for ; Wed, 22 May 2013 16:54:36 -0700 (PDT) X-ASG-Debug-ID: 1369266865-04bdf0781865af0001-w1Z2WR Received: from out.ipsmtp2nec.opaltelecom.net (out.ipsmtp2nec.opaltelecom.net [62.24.202.74]) by cuda.sgi.com with ESMTP id WuIhb9BsImjp4CnH (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 16:54:26 -0700 (PDT) X-Barracuda-Envelope-From: david.moulin@tiscali.co.uk X-Barracuda-Apparent-Source-IP: 62.24.202.74 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap0EAN1ZnVE+GIt+/2dsb2JhbADGLoEEdA X-IronPort-AV: E=Sophos;i="4.87,724,1363132800"; d="doc'32?scan'32,208,32";a="27421381" Received: from lb-mask.bir.opaltelecom.net (HELO ms13gb1.int.opaltelecom.net) ([62.24.139.126]) by out.ipsmtp2nec.opaltelecom.net with ESMTP; 23 May 2013 00:54:23 +0100 Received: from (180.215.204.31) by webmail.tiscali.co.uk; Thu, 23 May 2013 00:54:23 +0100 Message-ID: <14913142.926511369266863928.JavaMail.defaultUser@defaultHost> Date: Thu, 23 May 2013 00:54:23 +0100 (BST) From: "david.moulin@tiscali.co.uk" Reply-To: dr.brightomega003@live.com Subject: Notice MIME-Version: 1.0 X-ASG-Orig-Subj: Notice Content-Type: multipart/mixed; boundary="----=_Part_24866_31045872.1369266863826" X-Barracuda-Connect: out.ipsmtp2nec.opaltelecom.net[62.24.202.74] X-Barracuda-Start-Time: 1369266866 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 To: undisclosed-recipients:; ------=_Part_24866_31045872.1369266863826 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit GOOD NEWS.KINDLY OPEN THE ATTACHED FILE AND GET BACK TO US WITH THE REQUIRED INFORMATION FOR IMMEDIATE RELEASE OF YOUR WINNING PRIZE. ------=_Part_24866_31045872.1369266863826 Content-Type: APPLICATION/MSWORD; name="COCA-COLA UK AWARD 2013.doc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="COCA-COLA UK AWARD 2013.doc"; size=467456 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAIAAAAjAMAAAAAAAAA EAAAjgMAAAEAAAD+////AAAAAIQDAACFAwAAhgMAAIcDAACIAwAAiQMAAIoDAACLAwAA//////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////s pcEAW4AJBAAA+BK/AAAAAAAAEAAAAAAACAAATBQAAA4AYmpiaqz6rPoAAAAAAAAAAAAAAAAAAAAA AAAJBBYA7oYDAM6QAQDOkAEATAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAA AAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAALcAAAAAAKwHAAAAAAAArAcAAO8U AAAAAAAA7xQAAAAAAADvFAAAAAAAAO8UAAAAAAAA7xQAABQAAAAAAAAAAAAAAP////8AAAAAAxUA AAAAAAADFQAAAAAAAAMVAAAAAAAAAxUAAHQAAAB3FQAAFAAAAAMVAAAAAAAAniQAAGYBAACLFQAA cAAAAPsVAAAAAAAA+xUAAAAAAAD7FQAAAAAAAPsVAAAAAAAAJhwAAAAAAAAmHAAAAAAAACYcAAAA AAAAQSQAAAIAAABDJAAAAAAAAEMkAAAAAAAAQyQAAAAAAABDJAAAAAAAAEMkAAAAAAAAQyQAAAAA AAAEJgAAogIAAKYoAAA8AAAAQyQAABUAAAAAAAAAAAAAAAAAAAAAAAAA7xQAAAAAAAB5HgAAAAAA AAAAAAAAAAAAAAAAAAAAAACqGwAAfAAAACYcAAAAAAAAeR4AAAAAAAB5HgAAAAAAAEMkAAAAAAAA AAAAAAAAAADvFAAAAAAAAO8UAAAAAAAA+xUAAAAAAAAAAAAAAAAAAPsVAACvBQAAWCQAABYAAADz IAAAAAAAAPMgAAAAAAAA8yAAAAAAAAB5HgAACgAAAO8UAAAAAAAA+xUAAAAAAADvFAAAAAAAAPsV AAAAAAAAQSQAAAAAAAAAAAAAAAAAAPMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAeR4AAAAAAABBJAAAAAAAAAAAAAAAAAAA8yAAAAAAAAAAAAAA AAAAAPMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8yAAAAAAAAD7FQAAAAAAAP////8AAAAAkBQoMi9X zgEAAAAAAAAAAAMVAAAAAAAAgx4AAEYAAADzIAAAAAAAAAAAAAAAAAAALSQAABQAAABuJAAAMAAA AJ4kAAAAAAAA8yAAAAAAAADiKAAAAAAAAMkeAABCAQAA4igAAAAAAADzIAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz IAAAcgEAAOIoAAAAAAAAAAAAAAAAAADvFAAAAAAAAGUiAADIAQAAJhwAAHYAAACcHAAAVAAAAPMg AAAAAAAA8BwAAEQAAAA0HQAARQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJhwA AAAAAAAmHAAAAAAAACYcAAAAAAAAQyQAAAAAAABDJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAACyAAAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYcAAAA AAAAJhwAAAAAAAAmHAAAAAAAAJ4kAAAAAAAAeR4AAAAAAAB5HgAAAAAAAHkeAAAAAAAAeR4AAAAA AAAAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAAAAAAAAAAAA/////wAAAAD/////AAAA AP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA /////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAAAOIoAAAAAAAAJhwAAAAAAAAm HAAAAAAAACYcAAAAAAAAJhwAAAAAAAAmHAAAAAAAACYcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmHAAAAAAAACYcAAAAAAAAJhwA AAAAAACsBwAACQwAALUTAAA6AQAABQASAQAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMgSU5D TFVERVBJQ1RVUkUgImh0dHA6Ly93d3cucG9wYW5kcm9sbC5jb20vY29rZS1hcnQvQ29jYS1Db2xh X0xvZ29fU2NyaXB0LmpwZyIgXCogTUVSR0VGT1JNQVRJTkVUIBQBFRMgSU5DTFVERVBJQ1RVUkUg Imh0dHA6Ly80MTkuYml0dGVudXMuY29tL0NPQ0FDT0xBQ09NUEFOWVBST01PVElPTi9jb2tlX2xv Z28uZ2lmIiBcKiBNRVJHRUZPUk1BVElORVQgFAEVCAgLoKCgoKBUSEUgQ09DQSBDT0xBIENPTVBB TlkgUFJPTU9USU9OL1BSSVpFIEFXQVJEDSAgICAgIERFUFQgIENPQ0FDT0xBIEFWRU5VRSBTVEFN Rk9SRCBCUklER0UgTE9ORE9OLg0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXMTEgNVcgVU5JVEVEIEtJTkdE T00NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICANCFRoaXMgaXOgdG8gaW5mb3JtIHlvdSB0aGF0IHlv dSBoYXZlIHdvbiBwcml6ZSBtb25leSBvZiBGaXZlIGh1bmRyZWQgVGhvdXNhbmQgR3JlYXQgQnJp dGlzaCBQb3VuZHMgKKM1MDAsMDAwLjAwIEdCUCkgZm9yIDIwMTOgUHJpemWgcHJvbW90aW9uIHdo aWNoIGlzIG9yZ2FuaXplZCBieSBDT0NBLUNPTEEgQVdBUkQgZXZlcnkgKDIpIHlycy4NQ09DQS1D T0xBIEFXQVJEIGNvbGxlY3RzIGFsbCB0aGWgZW1haWwgYWRkcmVzc2VzoG9mIHRoZSBwZW9wbGUg dGhhdCBhcmUgYWN0aXZlIG9ubGluZSwgYW1vbmcgdGhlIG1pbGxpb25zIHRoYXQgc3Vic2NyaWJl ZCB0byBZYWhvbyBtYWlsLCBHbWFpbCBhbmQgZmV3IGZyb20gb3RoZXIgZS1tYWlsIHByb3ZpZGVy cy6gU2l4IHBlb3BsZSBhcmUgc2VsZWN0ZWQgZXZlcnkgdHdvIHllYXJzoHRvIGJlbmVmaXQgZnJv bSB0aGlzIHByb21vdGlvbiBhbmQgeW91IGFyZSBvbmUgb2YgdGhlIFNlbGVjdGVkIFdpbm5lcnMu DQugoKCgoKCgoKCgoKCgoKCgoKCgoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBBWU1FTlQgT0YgUFJJWkUgQU5EIENMQUlNC1dpbm5lcnMgc2hhbGwgYmUgcGFpZCBpbiBh Y2NvcmRhbmNlIHdpdGggaGlzL2hlciBTZXR0bGVtZW50IENlbnRlci4gQ09DQS1DT0xBIEFXQVJE IFByaXplIEF3YXJkIG11c3QgYmUgY2xhaW1lZCBubyBsYXRlciB0aGFuoDMwdGggZGF5cyygZnJv bSBkYXRlIG9mIERyYXcgTm90aWZpY2F0aW9uLiBBbnkgcHJpemUgbm90IGNsYWltZWQgd2l0aGlu IHRoaXMgcGVyaW9kIHdpbGwgYmUgZm9yZmVpdGVkLg2gDVN0YXRlZCBiZWxvd6BhcmUgeW91ciBp ZGVudGlmaWNhdGlvbiBudW1iZXJzOiBUaWNrZXQgV2lubmluZyBOdW1iZXIgKFVLLzAxNDdYNC83 NCksIFJlZmVyZW5jZSBMdWNreSBOdW1iZXIgMDE0LzA3MC9BWTcsIGFuZCBTZXJpYWwgTnVtYmVy LiA4NTAxLTA3DaANVGhlc2UgbnVtYmVycyBmYWxsIHdpdGhpbiB0aGUgVW5pdGVkIEtpbmdkb20g TG9jYXRpb26gZmlsZSwgeW91IGFyZSByZXF1ZXN0ZWQgdG8gY29udGFjdKBvdXIgY2xhaW0gYWdl bnSgaW4gVW5pdGVkIEtpbmdkb20gYW5kIHNlbmQgeW91ciB3aW5uaW5nIGlkZW50aWZpY2F0aW9u IG51bWJlcnMgdG8gaGltOg0TIElOQ0xVREVQSUNUVVJFICJodHRwOi8vd3d3LmFncm8uY211LmFj LnRoL2FwZWMvaW1hZ2VzL2FwLmpwZyIgXCogTUVSR0VGT1JNQVRJTkVUIBQBFQ1DbGFpbSBBZ2Vu dCBOYW1lOiAgRHIuIEJyaWdodCBPbWVnYQkNVGVsOiAwMDQ0LTg3MTI0NTQyNjANRS1tYWlsOiBk ci5icmlnaHRvbWVnYTAwM0BsaXZlLmNvbQ0NCFlvdSBhcmUgYWR2aXNlZCB0byBzZW5kIHRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24gdG8geW91ciBDbGFpbXMgQWdlbnQgdG8gZmFjaWxpdGF0ZSB0 aGUgcmVsZWFzZSBvZiB5b3VyIGZ1bmQgdG8geW91Lg0xLiBOYW1lcyBpbiBmdWxsOiBfX19fX19f X19fX19fX19fX19fX19fXw0yLiBBZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fX19fX18N My4gQ291bnRyeTogX19fX19fX19fX19fX19fX19fX19fX19fX19fDTQuIEFnZTogX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXw01LiBHZW5kZXIgL01hcml0YWw6IF9fX19fX19fX19fX19f X19fX19fXw02LiBNb2JpbGUgTnVtYmVyX19fX19fX19fX19fX19fX19fX19fX18NNy4gT2NjdXBh dGlvbjogX19fX19fX19fX19fX19fX19fX19fX19fXw04LiBZb3WScmUgd2lubmluZyBFbWFpbDog X19fX19fX19fX19fX19fX18NOS4gQWNjb3VudCBOYW1lOl9fX19fX19fX19fX19fX19fX19fX19f X19fXw0xMC5BY2NvdW50IE51bWJlciA6X19fX19fX19fX19fX19fX19fX19fX19fXw0xMS4gQmFu ayBCcmFuY2g6X19fX19fX19fX19fX19fX19fX19fX19fX19fXw2gDUNvbmdyYXR1bGF0aW9ucyEh IaBPbmNlIGFnYWluLA2gEyBJTkNMVURFUElDVFVSRSAiaHR0cDovL21lZGlhZGIud24uY29tL21l ZGlhL3RodW1ibmFpbHMvMFJrMWRGT2FPaEUuanBnIiBcKiBNRVJHRUZPUk1BVElORVQgFAEVoKAg EyBJTkNMVURFUElDVFVSRSAiaHR0cDovL2ltYWdlcy5mcmVlbG90dG8uY29tL3d3dy5mcmVlbG90 dG8uY29tLy9keW5hbWljL2FrYW1haXplci8yMDA1MDNfZ2xldHRlci9zaWdhcHByb3ZlLmdpZiIg XCogTUVSR0VGT1JNQVRJTkVUIBQBFRMgSU5DTFVERVBJQ1RVUkUgImh0dHA6Ly93d3cuYWdyby5j bXUuYWMudGgvYXBlYy9pbWFnZXMvYXAuanBnIiBcKiBNRVJHRUZPUk1BVElORVQgFAEVDSAoTXJz LikgQXN0b24gRWR3YXJkDVdBUk5JTkchC1lvdSBtYXkgYWxzbyByZWNlaXZlIHNpbWlsYXIgZS1t YWlscyBmcm9tIHBlb3BsZSBwb3J0cmF5aW5nIHRvIGJlIG90aGVyIE9yZ2FuaXphdGlvbnMgb2Yg eWFob28gSW5jLqBUaGlzIGlzIHNvbGVseSB0byBjb2xsZWN0IHlvdXIgcGVyc29uYWwgaW5mb3Jt YXRpb24gZnJvbSB5b3UgYW5kIGxheSBjbGFpbSBvdmVyIHlvdXIgd2lubmluZy4gSW4gZXZlbnQg dGhhdCB5b3UgcmVjZWl2ZSBhbnkgZS1tYWlsIHNpbWlsYXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBs ZXR0ZXIgdGhhdCB3YXMgc2VudCB0byB5b3UsIGtpbmRseSBkZWxldGUgaXQgZnJvbSB5b3VyIG1h aWxib3ggYW5kIGdpdmUgbm8gZnVydGhlciBjb3JyZXNwb25kZW5jZSB0byBzdWNoIHBlcnNvbiBv ciBib2R5Lg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAEIAABjCAAA ZggAAGcIAADLCAAAzAgAAM0IAADOCAAAzwgAANAIAADVCAAA1ggAAOsIAAD38/fRs9GO0W9ZRimz AAAAAAAAAAAAAAAAADgWaMxo6gAwSg8AQioNQ0oPAE9KAwBRSgMAXkoEAGFKDwBmSOAAcGjAAAAA ccoKAAAA//z64QAAAAAlFWiwUYEAFmi6XsYAQioGQ0oUAE9KAgBRSgIAXkoCAHBo/wAAACoDagAA AAAWaG1EHgBDShQAT0oCAFFKAgBVCAFeSgIAbUgABG5IAAR1CAEAPQNqAAAAABZo7VUJADUIgUIq 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 nS5oLW7Rtbsb+ZtamHl9CAf0eEX3vibMfjFzjOUSD7xzTEDpLH7ftRh/gvGda6pkYWdh1faP2ZTn Y1Nub1Fle+6xwbs+n7rP0XpVs2Ve9nq+qofU/prOo09axG7ndOyWNqryXNiXNda6iyPa31a2vZdY z8z2Lu34uK+ptL6mPqZAZW5oLRAhu1rv3URrWtAa0ANGgA0AR9j18RNjXT+9uGI/EwOXOLHj4Jnh /WXH/JT9zHk+Tj4/0f53gg8x9WegfWHpeQ1uXmVnAqD9uNWS4Oc+Dv8AfXX6bd3v+m//AMEXUJJK WEBEUL+rS5jmJ58hyTERI/uR4Pr/AHlJJJJzCpJJJJSkkkklP//Z/+1DNFBob3Rvc2hvcCAzLjAA OEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAgRjw/eG1sIHZlcnNpb249IjEu MCIgZW5jb2Rpbmc9IlVURi04Ij8+CjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENv bXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJv cGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q+Cgk8a2V5PmNv bS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LkZvcm1hdHRpbmdQcmludGVyPC9rZXk+Cgk8ZGljdD4K CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29t LmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp Y2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBw bGUucHJpbnQuUGFnZUZvcm1hdC5Gb3JtYXR0aW5nUHJpbnRlcjwva2V5PgoJCQkJPHN0cmluZz4g PC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJ CQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29t LmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA0LTA3LTA1VDE1 OjI3OjE1WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8 L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9k aWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tl eT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJ PHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJPGtleT5jb20uYXBw bGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8 a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJ PHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9r ZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxr ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA0LTA3 LTA1VDE1OjI3OjE1WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0 ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5 PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9u PC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5 PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29t LmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJ CQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk+CgkJ CQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNs aWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+ CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+ MjAwNC0wNy0wNVQxNToyNzoxNVo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNr ZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJ PC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2Fs aW5nPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwv a2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+ Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0 PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCQkJ CTxyZWFsPjAuOTAwMDAwMDAwMDAwMDAwMDI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmlu dC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFn ZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+ CgkJCQk8ZGF0ZT4yMDA0LTA3LTA1VDE1OjI3OjE1WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxl LnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJ CTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv cm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50 aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwv c3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8 YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZl cnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnBy aW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFu YWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tl eT4KCQkJCTxkYXRlPjIwMDQtMDctMDVUMTU6Mjc6MTVaPC9kYXRlPgoJCQkJPGtleT5jb20uYXBw bGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4K CQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdl Rm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5w cmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFu YWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tl eT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1h dC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MC45MDAwMDAwMDAwMDAwMDAwMjwv cmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxz dHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBw bGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDQtMDctMDVUMTU6Mjc6 MTVaPC9kYXRlPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5 PgoJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+ Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5zdWJUaWNrZXQucGFwZXJfaW5mb190aWNrZXQ8L2tleT4K CTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhZ2VS ZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9y PC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQk8 a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJ CTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBh Z2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CgkJCQkJCTxy ZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+ODcwPC9yZWFsPgoJCQkJCQk8cmVhbD42MjEuMTEx MTExMTExMTExMDk8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmlu dC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5h Z2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tl eT4KCQkJCQk8ZGF0ZT4yMDA1LTAyLTA3VDExOjQ3OjMwWjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5h cHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdl cj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJp bnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+ Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxl LnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu aXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxl LnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4K CQkJCQkJPHJlYWw+LTIwPC9yZWFsPgoJCQkJCQk8cmVhbD4tMjA8L3JlYWw+CgkJCQkJCTxyZWFs PjkxNS41NTU1NTU1NTU1NTU1NDwvcmVhbD4KCQkJCQkJPHJlYWw+NjQxLjExMTExMTExMTExMTA5 PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNs aWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5n PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRh dGU+MjAwNS0wMi0wN1QxMTo0NzozMFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu dGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2Rp Y3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5m by5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNr ZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0 PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4K CQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZv LlBNUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5pc28tYTQ8L3N0cmluZz4KCQkJCQk8a2V5 PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBw bGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50 LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwMy0wNy0wMVQxNzo0OTozNlo8L2Rh dGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJ CTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJ CTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5 PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJ CQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+ Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRp Y3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VS ZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CgkJCQkJCTxyZWFs PjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+NzgzPC9yZWFsPgoJCQkJCQk8cmVhbD41NTk8L3JlYWw+ CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9r ZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJ CQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+ MjAwMy0wNy0wMVQxNzo0OTozNlo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj a2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8L2RpY3Q+ CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5Q TVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJp bnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9z dFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5 PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh cGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxy ZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3Jl YWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFw cGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmlu dC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0 Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAzLTA3LTAxVDE3OjQ5OjM2WjwvZGF0ZT4KCQkJ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVn ZXI+MTwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5j b20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNv bS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnBy aW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtl eT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxz dHJpbmc+QTQ8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50 PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5n PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRh dGU+MjAwMy0wNy0wMVQxNzo0OTozNlo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu dGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8L2Rp Y3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5B UElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxl LnByaW50LnRpY2tldC5wcml2YXRlTG9jazwva2V5PgoJCTxmYWxzZS8+CgkJPGtleT5jb20uYXBw bGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5QYXBl ckluZm9UaWNrZXQ8L3N0cmluZz4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl dC5BUElWZXJzaW9uPC9rZXk+Cgk8c3RyaW5nPjAwLjIwPC9zdHJpbmc+Cgk8a2V5PmNvbS5hcHBs ZS5wcmludC50aWNrZXQucHJpdmF0ZUxvY2s8L2tleT4KCTxmYWxzZS8+Cgk8a2V5PmNvbS5hcHBs ZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFnZUZv cm1hdFRpY2tldDwvc3RyaW5nPgo8L2RpY3Q+CjwvcGxpc3Q+CjhCSU0D6QAAAAAAeAADAAAASABI AAAAAANmAm7/7P/sA5QCggNnBXsD4AACAAAASABIAAAAAALYAigAAQAAAFoAAAABAAMDAwAAAAF/ /wABAAEAAAAAAAAAAAAAAABoCAAZAZAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhC SU0D7QAAAAAAEAEsAAAAAQACASwAAAABAAI4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0E DQAAAAAABAAAAB44QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0ECgAA AAAAAQAAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAA AQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThC SU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////// //////8D6AAAAAD/////////////////////////////A+gAAAAA//////////////////////// /////wPoAAA4QklNBAAAAAAAAAIAADhCSU0EAgAAAAAAAgAAOEJJTQQIAAAAAAAQAAAAAQAAAkAA AAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA2UAAAAGAAAAAAAAAAAAAAPiAAADtQAA ABgATgBhAHQAaQBvAG4AYQBsACAATABvAHQAdABlAHIAeQAgAGwAbwBnAG8AIAAwADUAAAABAAAA AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAA7UAAAPiAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA AAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJj dDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAPiAAAA AFJnaHRsb25nAAADtQAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAA B3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xp Y2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAElt ZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVm dGxvbmcAAAAAAAAAAEJ0b21sb25nAAAD4gAAAABSZ2h0bG9uZwAAA7UAAAADdXJsVEVYVAAAAAEA AAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAA AAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGln bmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9F U2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdD b2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAA AAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgA 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 IckxESP7keD6/wB5SSSScwqSSSSUpJJJJT//2QA4QklNBCEAAAAAAFMAAAABAQAAAA8AQQBkAG8A YgBlACAAUABoAG8AdABvAHMAaABvAHAAAAASAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBw ACAAQwBTAAAAAQA4QklNBAYAAAAAAAcABgAAAAEBAP/hF+9odHRwOi8vbnMuYWRvYmUuY29tL3hh cC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlk Jz8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J1hNUCB0b29s a2l0IDMuMC0yOCwgZnJhbWV3b3JrIDEuNic+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3 dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIycgeG1sbnM6aVg9J2h0dHA6Ly9ucy5h ZG9iZS5jb20vaVgvMS4wLyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6OTVh NjIzYTctN2E4Zi0xMWQ5LTg3YWMtOGE3ZTlhNDhiZjdhJwogIHhtbG5zOmV4aWY9J2h0dHA6Ly9u cy5hZG9iZS5jb20vZXhpZi8xLjAvJz4KICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JT cGFjZT4KICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+OTQ5PC9leGlmOlBpeGVsWERpbWVuc2lvbj4K ICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+OTk0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KIDwvcmRm OkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjk1YTYyM2E3 LTdhOGYtMTFkOS04N2FjLThhN2U5YTQ4YmY3YScKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9i ZS5jb20vcGRmLzEuMy8nPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiBy ZGY6YWJvdXQ9J3V1aWQ6OTVhNjIzYTctN2E4Zi0xMWQ5LTg3YWMtOGE3ZTlhNDhiZjdhJwogIHht bG5zOnBob3Rvc2hvcD0naHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyc+CiAgPHBo b3Rvc2hvcDpIaXN0b3J5PjwvcGhvdG9zaG9wOkhpc3Rvcnk+CiA8L3JkZjpEZXNjcmlwdGlvbj4K CiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDo5NWE2MjNhNy03YThmLTExZDktODdh Yy04YTdlOWE0OGJmN2EnCiAgeG1sbnM6dGlmZj0naHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEu MC8nPgogIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgPHRpZmY6WFJl c29sdXRpb24+MzAwLzE8L3RpZmY6WFJlc29sdXRpb24+CiAgPHRpZmY6WVJlc29sdXRpb24+MzAw LzE8L3RpZmY6WVJlc29sdXRpb24+CiAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNv bHV0aW9uVW5pdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFi b3V0PSd1dWlkOjk1YTYyM2E3LTdhOGYtMTFkOS04N2FjLThhN2U5YTQ4YmY3YScKICB4bWxuczp4 YXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4YXA6Q3JlYXRlRGF0ZT4yMDA1 LTAyLTA3VDExOjQ4OjEyWjwveGFwOkNyZWF0ZURhdGU+CiAgPHhhcDpNb2RpZnlEYXRlPjIwMDUt MDItMDdUMTE6NDg6MTJaPC94YXA6TW9kaWZ5RGF0ZT4KICA8eGFwOk1ldGFkYXRhRGF0ZT4yMDA1 LTAyLTA3VDExOjQ4OjEyWjwveGFwOk1ldGFkYXRhRGF0ZT4KICA8eGFwOkNyZWF0b3JUb29sPkFk b2JlIFBob3Rvc2hvcCBDUyBNYWNpbnRvc2g8L3hhcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2Ny aXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjk1YTYyM2E3LTdhOGYt MTFkOS04N2FjLThhN2U5YTQ4YmY3YScKICB4bWxuczp4YXBNTT0naHR0cDovL25zLmFkb2JlLmNv bS94YXAvMS4wL21tLyc+CiAgPHhhcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9w Ojk1YTYyM2E2LTdhOGYtMTFkOS04N2FjLThhN2U5YTQ4YmY3YTwveGFwTU06RG9jdW1lbnRJRD4K IDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjk1 YTYyM2E3LTdhOGYtMTFkOS04N2FjLThhN2U5YTQ4YmY3YScKICB4bWxuczpkYz0naHR0cDovL3B1 cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8nPgogIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9y bWF0PgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0n dyc/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEA AGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MA AAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJY WVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAA JGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8 AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0Ig SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+i AAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAA AAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAA LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA AAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVD NjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYx OTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3M AAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAA AAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAy ADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwA wQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFn AW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksC VAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE /gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII 5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtR C2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMO Lg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFP EW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U 8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjV GPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4d Rx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7 IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgn SSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizX LQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQz DTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/ Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRA pkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgF SEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9 WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3 a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1 KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+E f+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSK yoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0 lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiai lqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8 m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4 yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY 6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep 6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3 ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkQAAAAAH/2wCEAAICAgIC AgICAgIDAgICAwQDAgIDBAUEBAQEBAUGBQUFBQUFBgYHBwgHBwYJCQoKCQkMDAwMDAwMDAwMDAwM DAwBAwMDBQQFCQYGCQ0KCQoNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDP/AABEIA+IDtQMBEQACEQEDEQH/3QAEAHf/xAGiAAAABwEBAQEBAAAAAAAAAAAE BQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJz AQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYX VGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eH l6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUF BAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz 0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2 xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/ 2gAMAwEAAhEDEQA/APv5irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdir//Q+/mKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2Kv/9H7+Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq//0vv5irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs 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 I8sS25l8taRqVvrHm+Qg8PqFlIJ5YiaEAyrGUFe5zRdsawabBKXUih73eaPFZt/XYAFACgADYAdM 8wdw3irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/T+/mKuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kvz5/wCfjf5Dz/nH+SUOq6BY/WfOXkXVba90plDNJJbX Ja1nt1UED4mmRzsfsZvvZ/Xfl89SPpkP2uPqcfHF79/zi1+S2l/kP+THlXyRYxAag8X6S8xXdKPP fXSqZGapO6qqp/scwe09YdVnlM8uQ9zZihwRp73qOoWek6ff6rqM6Wun6Zby3d9dOaLHDCheR2J6 BVBJzBhAzkIjmdmZNCy/mb/PP8yNR/5yD/PDXPMw5nTXuBZaBZ1DCK1hoigEAVrSpOe0dj6GPZ+k EevM+98t7W1Utfq6HIcn6xf84zfltZeQfJY1u7hCTshk5MKUHEeOcT25rTqMvAHuezNKMGIPhf8A 5y8/NmbzFrl1pNrP/o8MkkfFTtQGmdX7OdnDFASLoe39b/AOr4GZiSSep651zysQsxbHYq7FXYq7 FXYq0cBSgLiSgOUTk5GONsU1Ceitvmvyydphg841m7pUV7ZgTLt8MH9EP/Pqn8iYfIv5Lf8AK3NU tx/iL82GkubJ2ryi0uGVoYEoTQczEZK03DZ537R6zxc/hjlH73otNj4Yv1UznXIdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdir//1Pv5irsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdir84/+fjH51TeRvy1tfy40S8MOu/mKstvf+mSHTThRZqmlAJAShHgc672R 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 VZ8AAAAASUVORK5CYIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAppwCAEQAZAAAAAAAAAAIAAAAAAAAAAAAAAAAAOAQ4BC5BGABAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAPAATwcAAAALIECvAIAAAAAQQAAAAKAABTAAvwTAAAAARBAQAAAAXBLAAA AAYBAgAAAP8BAAAIAIHDAgAAAEMAbwBjAGEALQBDAG8AbABhAF8ATABvAGcAbwBfAFMAYwByAGkA cAB0AAAAAAAAABDwBAAAAAAAAIBSAAfw4psCAAUFvx0Sqi7hrzNOAaQ0lolIev8AvpsCAAEAAABE AAAAAAAcAKBGHfC2mwIAvx0Sqi7hrzNOAaQ0lolIev//2P/gABBKRklGAAECAQBkAGQAAP/hFa1F eGlmAABNTQAqAAAACAAHARIAAwAAAAEAAQAAARoABQAAAAEAAABiARsABQAAAAEAAABqASgAAwAA AAEAAgAAATEAAgAAAB4AAAByATIAAgAAABQAAACQh2kABAAAAAEAAACkAAAA0AAPQkAAACcQAA9C QAAAJxBBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaAAyMDA4OjEwOjA4IDEzOjM0OjQ1AAAD oAEAAwAAAAH//wAAoAIABAAAAAEAAANSoAMABAAAAAEAAAFCAAAAAAAAAAYBAwADAAAAAQAGAAAB GgAFAAAAAQAAAR4BGwAFAAAAAQAAASYBKAADAAAAAQACAAACAQAEAAAAAQAAAS4CAgAEAAAAAQAA FHcAAAAAAAAASAAAAAEAAABIAAAAAf/Y/+AAEEpGSUYAAQIAAEgASAAA/+0ADEFkb2JlX0NNAAL/ 7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEM DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBER DAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAA9AKADASIAAhEBAxEB/90A BAAK/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAID BAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0 coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl 9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSIT BTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj 80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD1VJJJ JSkO/IoxqjdkWMpqb9Kyxwa0T4ufDVj/AFm+tOJ0KjaIuzrB+hx54H+lu/cq/wDPv/bllfOdH6F1 P61Xt6t1+1/2KZpoEtDh+7U3/A0e33Pb+lu/8GUU81S4IDjn/wA2P94t/l/h5lhPM8xP2OWGkZVx Zc0v3MGP9L++9K365fVl14oGczeXbQS14ZP/ABzmejt/l71tLlfrBjdSBx/q90PBbTgZTCMnJFYN bWuOx+v0GWMY31XOd+mt/R+j+kXUtaGtDRwBAnU6IwlImQl+jWoHCGPmsOCEMU8RkPd4jwTnDLk4 I+mE5+3DH7XH6/1f6xdJJJSNRSSSSSlJJLE+sn1pwuhUhrh6+ZYJqxwYMf6W13+Dr/8APn/bnpiU hEGUjQDJgwZM+SOLFEznLaIdl72VsL3uDWNEuc4wAB3JKpU9d6LfeMejOosudo1jbGkknsyD73f1 VyGP0/P65Qeu/WrJdR0yv9JTiNljXNn27a/zGWbvSp/7V5P7/wDM+pd6p0YO6LYbaGYtdvp1dO6X VFcXWOFFORmWth+Tl/pN/p7vSq/4f+dUPuzIsRoVfq+Yx/7l0R8P5eEhjyZzLIZDHI4h+qx5T/k4 zn/Pzh/lf5rHj/zr0Nv1g6HVZ6VmfjteDBabW6Edne72f2lcoyKMisXY9jLqnfRsrcHNPwc2WrJz /qf9Xs6vY7DZQ6IbZjgVOHn+jHpv/wCu12Lj8/6t/WP6sXOzekXPtxhq6yoe4NA/7U43vZYxsu9/ 6Sv/AAn6JKeTJDUwEod4fMPot5fk+S5kcGPmJYc/6MeYjEYsh/q5IfK+lIOTmYeIwPy768djjAda 9rAT4S8tXI4v19y7Omt9TCDup3nZhVsPstMua691f85VRU5u36f6ez+as/R3/Z6T7ejMwMjM6n1C jqXWspnoh7j6ldDXnY91FbGPb+rte+/2V+/+ao/nP0iPMRr09r9Xpr/0JMPhGYTIziUfX7cY4h70 8kv3vT6YYofp5JvoKYOa6Q0glph0djzBXM9P6tl9Wqrweg1PxenY7W1P6lePdtZ+j9PEqO71Ltrf 52z+b/wtX82uixserFobRSIYzxMkknc973H3Pssed9ljv5x6ljPi1G3f/vWln5c4DwzNZL/m/wBO Ee+X/Ny/1b//0PVVkfWbr9XQunG/2vybPZjVOP0nd3uA93pVf4T/ALb/AMItdeSfWPqV31h+sBZj nfWXjGwmzoRu2NfPt/n7D6nu/wC+KHmMvtw0+aWkXT+D8gOa5j9Z/MYR7mX/ALmH+H/0G39V+h5H 1m6pb1Hqbn2Y1b919h09WzluO130Ws2/znp/zdX6P9H6la7zrnXMDoGCLroLiNuNjMgF5A+i39yp n+Es/wAH/X9OtF6dg4nROksx2uDaMWsuttOkkDfdc/V30vc/+QuE6fXb9c/rQ/JygRgY43GvURU0 /oMfTf8ApLne+73f6f01GAcMBGOuXId/2/4LclOPxHPkz5Scfw/ko+mEfT6P0McB+/m/9duth2da 650vJ67l9Qs6fj1tsfiUYpDWj0gZsvPufdXvY7dU/wD8DWzlfWSjpfQsXP6kf1rIpY4Y7fa99hY1 9jWsP0GMc79I7/Bqh1np+Kcy/Dw8m3Cx7Wfa+sisA0NqYHHfsdW708vM2e70n/paKLX30Xf4Tmvq /hW/Wj6xvys19l+Jjk2PNxDjt3E4+M7a0VN3u+nXXXXXs9b09iBnKBEY+qcvTxE2OL9Kf+Cujy+D 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 r9QrqH0a6bfTaP7MPatBn1Z6RvZZk1vzbWDaH5dj7/8AoXufV/m1rVSTRHCBpw1522MmX4lOR4hm EteLhhLHL+tx+3GLCmmmisVUsbVW3RrGANaPg1qmkkpfJoSuzxXd63vbgdV+pfR+pZ9OY9npFric llftFwPG/aW7H7/pWs/SP/6ddx31Z+rzqvRPT8fbESGAO/7dH6X/AKa00lFWG5fJf6WzeMviZhiH 9I4IisNDII9/Qf0nLwOiDpdrW9PvezB134VhNjBOu/GsefVodv8Ac/3W1Wf+CKH1h+reF17HZXe5 1V1Umm5upbu+k1zT9NjoWukiRj4Dde2fH0MccnOfeYmIyfeoE7R/X8X6XHGuOcv3/ceQ6d/i9rxS 5mT1G6/FeQbMaoGlj47Xbbbd7f8AM/rrqsbGx8WhmPjVtqprEMrYIA7oqSWOOIaY6+h4tF3O5eey ermxkGv6cPZhx1+7wwhx8LxtH+LTpzM03XZL7cXdubjBu0xMtrsv3uc5u32u2MqeuvppqoqZTSxt dVY2sY0QAB2ACmkhiGIX7fD48J4k89k+IZBA84MoA0h7sDij9PTD1PJV/wCLrpg6lZlW3PsxXOL2 YgG2JM7H37t76/7Nb/8AhE/V/qBjdS6sc37SaKHhgfjsYNBW1lIbS/dtrb6df+i9i6xJM4OWoj01 dn1fpNkcx8ZGSMqz+57ZhH9Uf5r08VQ4P9n+seR6l/i8wsvMofj3fZMWuttb6WsBcdpMubbuHvs3 fTtbYuj6Z0zC6XiNxMKv06mmSeXOcfpWWP8Az3uVtJPhHCJEw4eI9jbX5rL8RlhhHmRlGGBqPuQl CHF/Wlw/rJ/31JJJKVoP/9n/7TgkUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAgACADhC SU0EJQAAAAAAEEYM8okmuFbasJwBobCnkHc4QklNA+oAAAAAHaY8P3htbCB2ZXJzaW9uPSIxLjAi IGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21w dXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3Bl cnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20u YXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxr ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBw bGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0 Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5w cmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+ CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5n PmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnBy aW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA4LTEwLTA4VDExOjM0OjE3Wjwv ZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJ CTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtl eT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk+Cgk8ZGljdD4K CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29t LmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp Y2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBw bGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk+CgkJCQk8aW50ZWdlcj4xPC9p bnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJ PHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5h cHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwOC0xMC0wOFQxMToz NDoxN1o8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9r ZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGlj dD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk+Cgk8ZGlj dD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+ Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50 LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20u YXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+ CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5n PmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnBy aW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA4LTEwLTA4VDExOjM0OjE3Wjwv ZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJ CTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtl eT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4K CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29t LmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp Y2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBw bGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVh bD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJp bmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUu cHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDgtMTAtMDhUMTE6MzQ6MTda PC9kYXRlPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJ CQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8 a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk+Cgk8 ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJp bmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnBy aW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5j b20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJl YWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4K CQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5j b20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDgtMTAtMDhU MTE6MzQ6MTdaPC9kYXRlPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxh Zzwva2V5PgoJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8 L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5zdWJUaWNrZXQucGFwZXJfaW5mb190aWNrZXQ8 L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3Rl ZFBhZ2VSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j cmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5n PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJh eT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1 c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CgkJ CQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+NzgzPC9yZWFsPgoJCQkJCQk8cmVhbD41 NTk8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu Y2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJp bmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8 ZGF0ZT4yMDA4LTEwLTA4VDExOjM0OjE3WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmlu dC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwv ZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv cm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxl LnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5n bWFuYWdlcjwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5 PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh Z2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJl YWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPjgyNDwvcmVh bD4KCQkJCQkJPHJlYWw+NTc3PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBw bGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50 aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2RE YXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwOC0xMC0wOFQxMTozNDoxN1o8L2RhdGU+CgkJCQkJPGtl eT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8 L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFw cGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNv bS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5w cmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl dC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBw bGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5pc28tYTQ8 L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJ CQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQkJCTxr ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwMy0w Ny0wMVQxNzo0OTozNlo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0 YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwv YXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRq dXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNr ZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0 PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4K CQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZv LlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4wLjA8 L3JlYWw+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+NzgzPC9yZWFsPgoJCQkJ CQk8cmVhbD41NTk8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmlu dC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5h Z2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tl eT4KCQkJCQk8ZGF0ZT4yMDA4LTEwLTA4VDExOjM0OjE3WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5h cHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdl cj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJp bnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5 PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBs ZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp Y2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20u YXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxh cnJheT4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJ CTxyZWFsPjgyNDwvcmVhbD4KCQkJCQkJPHJlYWw+NTc3PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJ CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+ Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnBy aW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwOC0xMC0wOFQxMTozNDoxN1o8 L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJ CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0 PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4K CQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJ PHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNv bS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0 PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tl eT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj a2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3Jp cHQ8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5 PgoJCQkJCTxkYXRlPjIwMDMtMDctMDFUMTc6NDk6MzZaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFw cGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2Vy PgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmlu dC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCQk8a2V5 PmNvbS5hcHBsZS5wcmludC50aWNrZXQucHJpdmF0ZUxvY2s8L2tleT4KCQk8ZmFsc2UvPgoJCTxr ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUu cHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5w cmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtl eT5jb20uYXBwbGUucHJpbnQudGlja2V0LnByaXZhdGVMb2NrPC9rZXk+Cgk8ZmFsc2UvPgoJPGtl eT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnBy aW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA+0AAAAA ABAAZAAAAAEAAgBkAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQA AAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhC SU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEA oZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAA AHAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gA AAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAA OEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA00A AAAGAAAAAAAAAAAAAAFCAAADUgAAAAwAQwBvAGMAYQAtAEMAbwBsAGEALQAwADQAAAABAAAAAAAA AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAA1IAAAFCAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA AAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEA AAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFCAAAAAFJn aHRsb25nAAADUgAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3Ns aWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VP cmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAA AAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxv bmcAAAAAAAAAAEJ0b21sb25nAAABQgAAAABSZ2h0bG9uZwAAA1IAAAADdXJsVEVYVAAAAAEAAAAA AABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAA DmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVu dW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xp Y2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xv clR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAA AAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAA AAwAAAABP/AAAAAAAAA4QklNBBEAAAAAAAEBADhCSU0EFAAAAAAABAAAAAE4QklNBAwAAAAAFJMA AAABAAAAoAAAAD0AAAHgAAByYAAAFHcAGAAB/9j/4AAQSkZJRgABAgAASABIAAD/7QAMQWRvYmVf Q00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwM DAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwM DAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAD0AoAMBIgACEQED EQH/3QAEAAr/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAA AAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQV UsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0 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 +R6te/8Am127OsYbulu6s7fViNa6xrrG7S5jSQyxjHe7bf8ASx93vs31pYvUZS45CNER9W9fPkVz 59qOHEOXxSz8UMmcRxREMcsnq5fkvR6/l/nPVx5HAyvrB1L6u9DY7rFoyus5RcaaIYG1ge39I6gN a9lf03f6Sx/o/wDDLK+qH1ds63kv691km+svJrY/i14MF9n/AAFUbPS+h/g/5qv07MvDqzPrl9ZS /ILm0n32wZ9Khp9tVe6P3vT+h/O2ev6f84u+6h9YejdFNWB7rL2htdWFjN32AQBWzYNrWe3bsY56 bCsh45n9VDSHF+nL96TPzInykDy/LwB5/mh7nMSwRocvi/zWLg/m4f1v+qfuMc+7Hs67TTm21VYv T6Bm7bXNG617n49NpbYPoYjWWe/f/PX0J8N1vWcyrqT2GvpuNLuntfIfc9w2fb31n+bp9Nz2YbHt 9T9I/I/0Ks4z+l9aopzHY7bTU5wa3Irb6tNjTFtbmv3OpuY9nuQ+pfWLpvTrm4ri/JzX/Rw8Zptu Om76Dfo+z3+9yn0+YyHCTxf3v3XJBmaw48U/fhE4pD/NR9XvSH9/i9eTJ/Nuosj6zdfq6F043na/ JsluNU4/Sd++5o93pVf4T/tv/CK3i9VxMnAPUAXVU1h5ubaNr6zXPrMvr/MfVt964LFePrV9Ybuq dQcKukYADnB5DQKwT6FD/p+653vv/wCuf8Ehly0AIfNP5fL99k+H8iJ5MmTmAY4OV1zR/SnP5Ycv H+vkm6XROg1W9Ly+u/WK5wtz2F7rg4teyg6ujaPb9pZ+j9Ktn9F/V/8AC2Uq50L6m9H2HNysFzS9 wdj4+Q4ucysCGfaawfSddd/O2Uvb+h/mfzHq/dlVWx1XqrvsfTMYh+LTbo57x7mZN1f09/8A3Exf 5z/Dfz3p+iP/AJ9fVz0HXm9wAcGhhY4OcDu/SVt/Pq/Rv3P/ADP+20wRxRri4dBpxfNL+uWxkz/E MoyeyMv6yQjIYOP2cER6cfLY/b9P+0/9iO8xjGMaxjQ1jQA1oEAAaBrQFJAwsurOxKsukOFVzd7N 4LSWn6Ltp/e+k1HVkajRxpCQkRIVIEiQO/F1f//R9F+sGU7E6HnZDSWvZQ/Y4chzhsrd/Ze5eff4 vMNmR9YRa/8A7S1PtaOxcdtA/wDP29eh9bwnZ/SMvDYJsuqc2sEwN8TVJ/4zavOPqT1OjpHXnNzz 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 Xc7l57J6ubGQa/pw9mHHX7vDCHHwvG0f4tOnMzTddkvtxd25uMG7TEy2uy/e5zm7fa7Yyp66+mmq iplNLG11VjaxjRAAHYAKaSGIYhft8PjwniTz2T4hkEDzgygDSHuwOKP09MPU8lX/AIuumDqVmVbc +zFc4vZiAbYkzsffu3vr/s1v/wCET9X+oGN1LqxzftJooeGB+Oxg0FbWUhtL922tvp1/6L2LrEkz g5aiPTV2fV+k2RzHxkZIyrP7ntmEf1R/mvTxVDg/2f6x5HqX+LzCy8yh+Pd9kxa621vpawFx2ky5 tu4e+zd9O1ti6PpnTMLpeI3Ewq/TqaZJ5c5x+lZY/wDPe5W0k+EcIkTDh4j2NtfmsvxGWGEeZGUY YGo+5CUIcX9aXD+sn/fUkkkpWg//2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAA UABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBT ADMAAAABADhCSU0EBgAAAAAABwAIAAEAAQEA/+EPJ2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu MC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4g PHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv cmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6MTM6NDMgICAgICAgICI+ IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3lu dGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnBkZj0iaHR0cDov L25zLmFkb2JlLmNvbS9wZGYvMS4zLyIgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh cC8xLjAvIiB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1s bnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9 Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9u cy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4 aWYvMS4wLyIgcGRmOlByb2R1Y2VyPSJBZG9iZSBQREYgbGlicmFyeSA2LjY2IiB4YXA6Q3JlYXRl RGF0ZT0iMjAwOC0wMS0wNlQxOToxNjo0MSswNjowMCIgeGFwOk1vZGlmeURhdGU9IjIwMDgtMTAt MDhUMTM6MzQ6NDUrMDI6MDAiIHhhcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBN YWNpbnRvc2giIHhhcDpNZXRhZGF0YURhdGU9IjIwMDgtMTAtMDhUMTM6MzQ6NDUrMDI6MDAiIHhh cE1NOkRvY3VtZW50SUQ9InV1aWQ6MDBkYTk2M2EtOGE2Yi00NzExLWEwODUtOTA3ZGVlNDcwNGVm IiB4YXBNTTpJbnN0YW5jZUlEPSJ1dWlkOjgyMEM1NjQ4RjI5MUREMTFCRjQ0QTkwNDJDNTc0NkJG IiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hv cDpIaXN0b3J5PSIiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjEwMDAw MDAvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjEwMDAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlv blVuaXQ9IjIiIHRpZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcs Mjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwy NzIsMzA1LDMxNSwzMzQzMjszMzExQzc0ODRFQUQ3MjA2MEI3NDlGMDNBODZENjFCMiIgZXhpZjpQ aXhlbFhEaW1lbnNpb249Ijg1MCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjMyMiIgZXhpZjpDb2xv clNwYWNlPSItMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3 MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUw LDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3 MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4 LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQx OTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2 LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwy NSwyNiwyNywyOCwzMDtENDJDNEFCMDJEQjQxMTBDMzAxN0NFOTI4RTU3ODlFRCIvPiA8L3JkZjpS REY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/7gAOQWRvYmUAZEAAAAAB/9sAhAABAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMD AwMDAQEBAQEBAQEBAQECAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD AwMDAwMDAwMDAwP/wAARCAFCA1IDAREAAhEBAxEB/90ABABr/8QA3AABAAICAgMBAQAAAAAAAAAA AAkKCAsGBwEEBQMCAQEAAQQDAQEAAAAAAAAAAAAACAYHCQoDBAUBAhAAAAYCAgEDAwIEAwQHBgMJ AQIDBAUGAAcRCBIhEwkxFAoiFUFRIxZhMiTwQjMXcYGRocE0JbHh8VJDRGImGNFTNdVGV5cZGhEA AgEDAgQDBQUDBwgFCQQLAQIDAAQFEQYhEgcIMUETUWEiFAlxMkJSI4FiFZGhcoIzJBaxkqJDU2Nz F7KDNEQl8MHSk6OzVDUm0cLD05UYGfFkVXSEpEVW/9oADAMBAAIRAxEAPwC/xilMUpilMUpilMUp ilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpi lMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpil MUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilM UpilMUpilMUpilMUpilMUpilf//Qv8YpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKY pTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYp TFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpT FKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpX//0b/G KUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmK UxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKU xSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUx SmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKV//9K/xilMUpilMUpilMUpilMUpilMUpilMUpi lMUpilMUpilMUpilMUpilMUr+TnImQyihykIQBMc5zAUpSh9TGMYQAoB/McEgDUnhX1VZ2CopLE6 ADxJrquy730fTFDo3DcuqamqkAmUSsuw6jBKJlKHkYxySkw1MQCl9REQ9Azy7nOYSyJW8zFrEw/P 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 KUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmK UxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKV//9S/xilMUpilMUpilMUpilMU pilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUp ilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpi lMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpil MUpilMUpilMUpilMUpilf//Vv8YpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFK YpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKY pTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYp TFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpTFKYpX//1r/GKUxS mKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSm KUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmK UxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKU xSmKUxSmKUxSmKUxSmKUxSmKUxSmKUxSmKV//9e/xilMUpilMUpilMUpilMUpilMUpilMUpilMUp ilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpi lMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpil MUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilMUpilM Upilf//ZjDIAAEQAZAAAAAAAAAAIAAAAAAAAAAAAAAAAAOAQ4BB/AmABAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAPAATwWAAAALIECvAIAAAAAgQAAAAKAABTAAvwNAAAAARBAgAAAAXB FAAAAAYBAgAAAP8BAAAIAIHDAgAAAGMAbwBrAGUAXwBsAG8AZwBvAAAAAAAAABDwBAAAAAEAAIBi AAfw4DEAAAYGm9aLoqJ0f3AJeUHGqnqpw/8AvDEAAAEAAADqnAIAAAAcAABuHvC0MQAAm9aLoqJ0 f3AJeUHGqnqpw/+JUE5HDQoaCgAAAA1JSERSAAAAfQAAAIQIAwAAAIrD1MYAAAMAUExURQAAAAgA AAgIABAIABAICBAQCBgQCCEQCCEQECEYCCEYECEhGCkYECkhECkpITEhEDEhGDEpGDkhGDkpGEIp GDEpITktITkxLUIpIUIxGEIxIUIxKUIxMUI5MUopIUoxIUoxKUo5KUo5MUo5OUpCOVIxIVI5IVI5 KVI5MVJCMVJCOVJKOVo5IVo5KVpCKVpCMVpKOVpKQlpKSlpSSlpSUlpaWmM5KWNCKWNCMWNKMWNK OWNKQmNSQmNSSmNaSmNaUmtCKWtKKWtCMWtKMXNKMXNSMXtKMWtKOXNKOWtSOXNSOWtSQmtSSmta SnNWQnNaSntSMXtSOXtSQntaOXtaQoRSOYRaOYRaQoRjQoxaOYxaQoxjQpRaOZRaQpRjOZRjQnta SntjSoRaSoRjSmtaUmtjUnNaUnNjUnBlWntjUoRjUoRrUnVlYH9rWntrY3tzb4RrY4RzY4Rza4R7 a4xjSoxjUoxrSoxrUoxrWoxzWoxzY4xza4x7a4x7c5RjSpRrSpRrUpRrWpRzUpRzWpRzY5R7Y5R7 a5xjQpxjSpxrQpxrSpxrUpxzUpxzWpxzY5x7WqVrQqVrSqVzTq1vSpx7Y6V3WqV7Y6WEY61zUq17 UrV7Uq17Wq1/Y7WBXb2EY72MY5p/b6eGb62Ib7GIb7WMb7WUc72Ma72Mc56LfaeYjbWQe7Kej72U c72Yf72ijrWlnMaMa8aUa8aUc8aUe8ace86ce8afhsuihs6ljM6tjMallMatlM6llM6tlNatlL2l nLWtp8GxqM6tnMa3rc61nM61pc61rc69sc69vc7Gvc7Gxs7OxtatnNa1nNa1pda9pd69pda9rd69 rd7Grda9tdbGtd7GtefGtdbGvdbGxtbOvdrKwd7Ovd7OxufOtefOvc7Ozt7WxtbOztbW0t7Wzt7W 1t7e1ufOxufWxufWzufW1ufezufe1u/Wzu/ezu/e1u/n1t7e3ufe3ufn3u/e3u/n3vfn3u/n5/fn 5/fv5/fv7/f37//37//39///9////xj/+y4AAAABYktHRACIBR1IAAAADGNtUFBKQ21wMDcxMgAA AANIAHO8AAAuOUlEQVR4XpV7DVhb55WmTGSFasX6jsRmFXmTO+kUqelaSjvZ9ZU9nS3RvdgO3jq6 MbpEUuLrhM6k+XOTPKR2Molx6zQyMswE1SLOShB+FH4EwjvAI1SITAwm1I0RAceqZwyjncQZpDGx PGmoA34w+373Cux05plnF3BQMLrnO+855z3nO+dYsZBd+PIqPvH9/+9VZmr69NnE6ZExfMWj4Z7h ZCqdyf57T8ni4zL+3BSkgOyFLxcgHT+TXv+//m8iFhuKDUbxEYmG2lo6unqSM3PSo9eecctTiYQr mcufZyD+5q/I0te+yC/l3oOn3DzP2qkITNL/zA3EExOJiZGReHwg2v2zY4cj4bFzqUx2/g+0kB9I vrKZzJX0XPJ8RhIvfRHpkt7SM79c/SaDQ96U+znekfuaz+JvstnE6emp6cmRkV+NRPsi3Qd//tL+ cHQiOXc592jpvXj95dXs6sv59NzczPTw0Hk8SUJYlr52gJuar+IvaS99ZrNX5zOZdPby5/PZ7PyV dCw+NTE12NUTScRjA35/ZXV5Q3hgQsL+FjRh5fk0foInQ+9U8qPm13uG5uZX1b1p9zXMVyWvWQBP yGYuX/nndCo9l01DfDqdnhob7kn0hJtejUydjMf87V7B6/P3nZ5Op7M4qfR0ovr8lfnUBxkJ939O pabOtVfsPTY8iRPeinwOfBktCYrcNwn6bObKfBp6p2aSmbnUTCoDLWJvvVLft3/nf93ZMx1/r7vN 7xa84tHWyEiSmB4HkLwDQGXS0aGL5EBXMqnkZJx/oKwiPESOI9k2p/ua3XMOcYvzQ3j6ytxcai6d zKTmzk3P4RSpsfAz20P1j2y844muiXi0MeQtET2Ct74lMjj28Uya2AbiITGdTtR0jRH8r8zNfJQI sDaurHZ4Rg66hS/XfP6mq686KXEYfEF4dj6VTMJqmXQinpicg/Znmx9k2362U/3HfxONtAX97h28 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 mCPBvtCHGWnOaW8WAqs3P3IlQ+Yg1GsyGouK7ikyGO6+k6axyE8+jEUyueew/XfBl2sbuZp81P1o RNoXm/s5STCbLKuXrVsTshT9IBkLsTkRTVYU8YkdUSLfSBILqSVuXlj+Pdt/rbbxykXNr8wAnjQY Vv9txR9UJAwW1KC52WTehKVgIxAwQWPyHeYgfCz9WyyZJv4g0L5W3+AX/i+bmpxyYpwpkQAAAABJ RU5ErkJggqIUAABEAGQAAAAAAAAACAAAAAAAAAAAAAAAAACcCd8CJQkcAwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAADwAE8EoAAACyBArwCAAAAAMEAAAACgAAUwAL8CYAAAAEQQMAAAAF wQYAAAAGAQIAAAD/AQAACACBwwIAAABhAHAAAAAAAAAAEPAEAAAAAgAAgFIAB/AEFAAABQWkV4Nk nCjCdE6kqM1tKtuf/wDgEwAAAgAAAHbPAgAAABwAoEYd8NgTAACkV4NknCjCdE6kqM1tKtuf///Y /+AAEEpGSUYAAQEAAAEAAQAA/9sAQwACAQEBAQECAQEBAgICAgIEAwICAgIFBAQDBAYFBgYGBQYG BgcJCAYHCQcGBggLCAkKCgoKCgYICwwLCgwJCgoK/9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK/8AAEQgAMQCkAwEiAAIR AQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5 OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeo qaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMB AQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYS QVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU 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 AAAIAAAAAAAAAAAAAAAAAOAQ4BAQApwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP AATwsgAAALIECvAIAAAABAQAAAAKAABTAAvwjgAAAARBBAAAAAXBbgAAAAYBCgAAAP8BAAAIAIHD AgAAAGgAdAB0AHAAOgAvAC8AbQBlAGQAaQBhAGQAYgAuAHcAbgAuAGMAbwBtAC8AbQBlAGQAaQBh AC8AdABoAHUAbQBiAG4AYQBpAGwAcwAvADAAUgBrADEAZABGAE8AYQBPAGgARQAuAGoAcABnAAAA AAAAABDwBAAAAAMAAIBSAAfwdCgAAAUFmKrNjLM3NiHVfdspArWeq/8AUCgAAAEAAAAY5AIAAAAc AKBGHfBIKAAAmKrNjLM3NiHVfdspArWeq///2P/gABBKRklGAAEBAAABAAEAAP/bAEMACAYGBwYF CAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0 Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMv/AABEIAPABQAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQID BAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHB FVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2 d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna 4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1 EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ0 4SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeI iYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery 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 merV1cUjI3Nzc+GSkjMzM7k/P/jm5v9mZrEZGcdSUszMzPBqau5eXrW1te/Pz++EhOy1tSEhIcxK SlpaWsQZGck6OrkJCeEjI9hbW/OUlJVYWPBUVOZqavNNTe/v7+5JSfSkpP87O/ff397e3qGDg/m+ vsQQEP///+hRUa2trew5OasQEN5JSf3v7+gyMsXFxehCQuU5OXt7e/J8fLUhIZmZmdMhIVJSUrUw MBkZGfeHh2ZmZs8ZGb5YWNtSUsxmZv/MzLgQEOZeXtJ5eeKcnPi2ts0ODt54ePacnNaNjeEqKvjG xvOtrUJCQtswMPrW1uSurtk8PL0YGCkpKdlDQ7pUVJ9ycvHHx90YGL06OtsJCagKCv/e3tQpKe2L i+9yctq9vdxjY7WYmA8PD//399wREf/l5b8gINBycoyMjP///wc0fokAAACAdFJOU/////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////8AOAVLZwAAAAFiS0dEAIgFHUgAAAAEZ0lGZwEAABQ+6rdVAAAADGNtUFBKQ21wMDcxMgAA AANIAHO8AAAOuUlEQVRoQ82a+1va2LqAm1RJ0KgBUiJ1YyRaDYqMntRjDmAmxmj0Merj+ECFekFE 0TltBy/bKVKz/vWzVgLILYjVOd3rFzWuZL357t8Hb8CvXiJNAonh2mO8+dV0gGc1D8tK/4l4MgWA rGumgCX+A/H4HA6ASGIE5UAHfqVyMYOgodAkhvc4mdgvxNNwHdHJOuNI9wulpxGUxElAE0zS2T1f U3pSh3NaCEiBIDFIRrDOsgOvKT3Ky3QfpUSTpWmTAzjBObkFetjrSU8L5JApdbkYgkaxWCa0TnSv h0ddCM+g4wWGwzXAE3xHutfCE5lJ9zPokFvgDMDcTGe6V8IjcS/bpVbRNs6NkzwlavDHE3e9iu2R egBmp7olYZ2OpQWWZhgIqTtk2sebXwNPNCdhcqpbIm50wCMJljYJAH90dFrrCa+BRwWIRiVpuU6q NgWNgtnMZLFOEc9+v1fAkwNGI53INl1oECWT43kCAybRBd0r4PHbzfGOcfPOumW8jCZQgMpRT8vu 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 AQECAQEBAgICAgIEAwICAgIFBAQDBAYFBgYGBQYGBgcJCAYHCQcGBggLCAkKCgoKCgYICwwLCgwJ CgoK/9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoK/8AAEQgAMQCkAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAAB AgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNC scEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoW JDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp 6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fiiivMv2zfjQv7PX7LXjn4upP5dzpOgTDTWDY/0yXEN v3H/AC2kjzjnGaunCVWooR3bt95FWpGjTlUlsk2/kefeC/8Agpn8DvHXxQ1fwNomi6u+j6RqUmny +LBGhtHuEOGwu7eY85wwBJGDtAOa+i7a5t722jvLOdJYpUDxSxsGV1IyCCOoI71+QnwMtNO+DnwU 8JabrkbpNrV1Es8gXJ+1XW6RA59fup+Ar9Jv2MvHn/CZfBW00y5nL3WhzNYy7m5MY+aI/QIwUf7h r7biPhnD5ZllPE0G7qymt91dPy7P1Vj884V4vxeb5tVwmJSs7uDStezs156arro73PWKK+ZNS/4K aeCNI/aP8Z/AK6+F+sTReDVVLnWLS6iYzTmMOIxE+3aCSVDbznbkgDpi/Cr/AIKhT+PL8al4g+BN 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 ahIhm8NWAkuASzyWikRp9Md/619B32mWmo2n2O7jDKBx7HFR6ZolppRBtx0j2Djtx/hXn4XGywsX yaPoenjMvhjZRVTVdfQ8c+H/AIVt/B2syLpPhe0smhk/fQQwL5cy5x0Cj+XHFVvix8PI/H/xAOoP ZL5BZIowEAxEo5/P5j+Ne1y6Bp0tybsQhXYYYgdac2h6c8iymAblXGRWlTMJVaqqz1l1fcinlcKF KVGnpDoux514V0efw9ZapbaRF5bXVk8Q8tcbZMcN9QCa5Lwn8JVj1SW+vLUExYEW5ehPU/59a90j 0mwik8yOAA5ycdzThplirl1t1BY84FJ5hL23tLasFlcFh/ZX0X6nnd/8M9EmcXeh6xKhSP8AeWl3 ACspA5KsOVJ98j+nNWHwghHi2TUjY7UQF41K9HOBn+de1ixtB/ywWl+yWwOfJXpjOKlZhW0u2/Ut 5Xh2naKV+x5ZrXw21Ww1WNoSZLZgokiMYwwIG79c13PgDRv7F02aHZt3z7sfgK3WRXG1lBHoRQFV RhVA+grKpjK1Wm4Td7m1LAYejVVSCtYWiiiuQ7QooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKAP/ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgQVABIAAQAL AQ8ABwAAAAAAAAAAAAQACAAAAAgAAAAIAAAACAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMgYAABgAAADAAwAA0AMAAOADAADwAwAAAAQAABAEAAAgBAAAMAQAAEAEAABQ BAAAYAQAAHAEAACABAAAkAQAAMADAADQAwAA4AMAAPADAAAABAAAEAQAADIGAAAoAgAA2AEAAOgB AAAgBAAAMAQAAEAEAABQBAAAYAQAAHAEAACABAAAkAQAAMADAADQAwAA4AMAAPADAAAABAAAEAQA ACAEAAAwBAAAQAQAAFAEAABgBAAAcAQAAIAEAACQBAAAwAMAANADAADgAwAA8AMAAAAEAAAQBAAA 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 iNCt1AOE5DUNNj8kUeztDa4sCC6HYb6ZabuXnckTYzLeMWiqGgg66ZVxmsFtuOyOQFIWTonZO2Sw YIKObzftFWeRSyhNJiRSKC4xmHIOJ0qTnNCKVPmArjijj1bkIqOmQci70Ej3dX2g8ZsBfMUkvWIQ e9UAGZZQmv+z/TgaiWcvHxZd/lFBc9mFBSiixszgI5uqTATKW7q6xN8AAAD//wMAUEsBAi0AFAAG AAgAAAAhAIKKvBP6AAAAHAIAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQ SwECLQAUAAYACAAAACEApdan58AAAAA2AQAACwAAAAAAAAAAAAAAAAArAQAAX3JlbHMvLnJlbHNQ SwECLQAUAAYACAAAACEAa3mWFoMAAACKAAAAHAAAAAAAAAAAAAAAAAAUAgAAdGhlbWUvdGhlbWUv dGhlbWVNYW5hZ2VyLnhtbFBLAQItABQABgAIAAAAIQCWta3ilgYAAFAbAAAWAAAAAAAAAAAAAAAA ANECAAB0aGVtZS90aGVtZS90aGVtZTEueG1sUEsBAi0AFAAGAAgAAAAhAA3RkJ+2AAAAGwEAACcA AAAAAAAAAAAAAAAAmwkAAHRoZW1lL3RoZW1lL19yZWxzL3RoZW1lTWFuYWdlci54bWwucmVsc1BL BQYAAAAABQAFAF0BAACWCgAAAAA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIg c3RhbmRhbG9uZT0ieWVzIj8+DQo8YTpjbHJNYXAgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3Bl bnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIGJnMT0ibHQxIiB0eDE9ImRrMSIg YmcyPSJsdDIiIHR4Mj0iZGsyIiBhY2NlbnQxPSJhY2NlbnQxIiBhY2NlbnQyPSJhY2NlbnQyIiBh Y2NlbnQzPSJhY2NlbnQzIiBhY2NlbnQ0PSJhY2NlbnQ0IiBhY2NlbnQ1PSJhY2NlbnQ1IiBhY2Nl bnQ2PSJhY2NlbnQ2IiBobGluaz0iaGxpbmsiIGZvbEhsaW5rPSJmb2xIbGluayIvPgAAAABMDAAA CQAANgAAAAD/////AAgAAOsIAAA1CQAAEQoAAFcKAAA5CwAAUQ0AAOgNAADMDgAABw8AACsQAAD1 EAAAaxEAAK0SAABMFAAACwAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYA AAAYAAAAGQAAABoAAAAACAAAIBAAAEwUAAAMAAAAFwAAAAAAAABjAAAAZQAAAGYAAADLAAAAzQAA AFIGAAClBgAApwYAAG4JAADLCQAAzQkAANEJAABWCgAAWAoAAFkKAACsCgAArgoAAEwMAAATQxT/ FawTQxT/FawTQxT/FawTQxT/FawTQ1T/FawTQxT/FawPAADw8AAAAAAABvAYAAAAAggAAAIAAAAG AAAAAQAAAAEAAAAHAAAATwAB8LAAAABiAAfwJAAAAAYGxF+gcLkVmKwsJDpn7bhssP8AdUsAAAIA AAAuNgAAAAAAAFIAB/AkAAAABQX0GVQ/XgNB3aXbPuM7RllC/wBpxwIAAQAAAKOBAAAAAAAAYgAH 8CQAAAAGBut7qkrQTOFWFsS6we0pA33/AOI9AAABAAAADEkDAAAAAABiAAfwJAAAAAYG0zVCtCxz cQLeAOakKJA6E/8AcEYAAAAAAAD/////AAAAAEAAHvEQAAAA//8AAAAA/wCAgIAA9wAAEAAPAALw rgQAABAACPAIAAAABQAAAAYEAAAPAAPwTAQAAA8ABPAoAAAAAQAJ8BAAAAAAAAAAAAAAAAAAAAAA AAAAAgAK8AgAAAAABAAABQAAAA8ABPAMAQAAsgQK8AgAAAACBAAAAAoAAJMAC/DOAAAABEEBAAAA BcGWAAAABgEKAAAACAHNTAAACQGaWQAAPwEEAAYA/wEAAAgAgcMCAAAAvwMgAGAAaAB0AHQAcAA6 AC8ALwBnAG8AbwBkAGwAZQB0AHQALgBwAHIAbwB0AGUAbwBtAGkAYwBzAC4AdwBhAHMAaABpAG4A ZwB0AG8AbgAuAGUAZAB1AC8AZwByAG8AdQBwAF8AbQBlAG0AYgBlAHIAcwAvAGkAbQBhAGcAZQBz AC8AdQBrAC0AZgBsAGEAZwAuAHAAbgBnAAAAAAATACLxBgAAAD8FAAABAAAAEPAEAAAAAAAAAAAA EfAEAAAAAQAAAA8ABPAMAQAAsgQK8AgAAAADBAAAAAoAAJMAC/DOAAAABEEBAAAABcGWAAAABgEK AAAACAHNTAAACQGaWQAAPwEEAAYA/wEAAAgAgcMCAAAAvwMgAGAAaAB0AHQAcAA6AC8ALwBnAG8A bwBkAGwAZQB0AHQALgBwAHIAbwB0AGUAbwBtAGkAYwBzAC4AdwBhAHMAaABpAG4AZwB0AG8AbgAu AGUAZAB1AC8AZwByAG8AdQBwAF8AbQBlAG0AYgBlAHIAcwAvAGkAbQBhAGcAZQBzAC8AdQBrAC0A ZgBsAGEAZwAuAHAAbgBnAAAAAAATACLxBgAAAD8FAAABAAAAEPAEAAAAAwAAAAAAEfAEAAAAAQAA AA8ABPD2AAAAsgQK8AgAAAAEBAAAAAoAAJMAC/C4AAAABEECAAAABcGAAAAABgEKAAAACAHNTAAA CQGaWQAAPwEEAAYA/wEAAAgAgcMCAAAAvwMgAGAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGwAbwB0 AHQAbwBsAG8AbwBwAGgAbwBsAGUALgBjAG8ALgB1AGsALwBJAG0AYQBnAGUAcwAvAG4AYQB0AGkA bwBuAGEAbAAtAGwAbwB0AHQAZQByAHkALQBsAG8AZwBvAC4AagBwAGcAAAAAABMAIvEGAAAAPwUA AAEAAAAQ8AQAAAACAAAAAAAR8AQAAAABAAAADwAE8O4AAACyBArwCAAAAAUEAAAACgAAcwAL8LAA AAAEQQMAAAAFwVYAAAAGAQoAAAA/AxAAEACBwwIAAACDwy4AAAC/AyAAIABoAHQAdABwADoALwAv AHcAdwB3AC4AbQBhAGkAbABjAGUAbgB0AHIAbwAuAGMAbwBtAC8AaQBtAGEAZwBlAHMALwBnAGwA bwBiAGUALgBnAGkAZgAAAAAABQAIAAgAYf///wAAAABh////wlMAAGBUAADCUwAAYFQAAAAAAABh ////AAAAABMAIvEGAAAAPwUAAAEAAAAQ8AQAAAABAAAAAAAR8AQAAAABAAAADwAE8EIAAAASAArw CAAAAAEEAAAADgAAUwAL8B4AAAC/AQAAEADLAQAAAAD/AQAACAAEAwkAAAA/AwEAAQAAABHwBAAA AAEAAADOAAAAzwAAAOgBAAAHBwAATAwAAAIEAABo8v//AAAAAMQiAACcGAAAdEAAAAAABQQAADwA AAAZAAAANAgAABwHAACUQAAAAAAEBAAACAcAACoAAAAoIwAAlhsAAHRAAAAAAAMEAAA/9v//WAAA AGMsAAC0OgAAdEAAAAAA//8IAAAABgBzkZwLEQABAJQASAAGAHSRnAsQAAEA1ABIAAYAdZGcCxEA AQCUAUgABgB2kZwLEAABABQBSAAGAHeRnAsRAAEA1AFIAAYAeJGcCxEAAQBUAkgABgB5kZwLEQAB AJQCSAAGAHqRnAsQAAEA1AJIAIgBAACIAQAAVwQAAFcEAABiBAAAwAUAAA4GAAAOBgAATgwAAAAA AAACAAEAAAACAAIAAAACAAMAAAACAAQAAAACAAUAAAABAAYAAAACAAcAAAACAJYBAACWAQAAYQQA AGgEAABoBAAAzgUAABwGAAAcBgAATgwAAAAAAAABAAAAAgABAAMAAAAEAAAABQAAAAYAAAAHAAAA BAAAAEIAAAAIAAAAKoB1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzbWFydHRhZ3MO gGNvdW50cnktcmVnaW9uAIA5AAAABwAAACqAdXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZp Y2U6c21hcnR0YWdzBYBwbGFjZQCAPQAAAAQAAAAqgHVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206 b2ZmaWNlOnNtYXJ0dGFncwmAUGxhY2VUeXBlAIA9AAAABgAAACqAdXJuOnNjaGVtYXMtbWljcm9z b2Z0LWNvbTpvZmZpY2U6c21hcnR0YWdzCYBQbGFjZU5hbWUAgAwAAAFY6EEAAAAAAAgAAAAAAAcA AAAAAAYAAAAAAAcAAAAAAAQAAAAAAAgAAAAAAAgAAAAAAAcAAAAAAAAAAABODAAABwAAAAAACAEA ABYBAADVCAAA1wgAAPQIAAD8CAAALgkAADAJAACxCgAAtwoAAE4MAAAHADMABwAzAAcAMwAHADMA BwAzAAcAAAAAAGYAAAAMAQAADgEAABIBAAASAQAAlwEAAOcBAADnAQAA6AEAAOkBAAAfAgAANQIA ADYCAAA8AgAATQIAAE4CAABXAgAAWwIAAGQCAABlAgAAqwIAAKsCAABSBQAAXgUAAHgFAACDBQAA mAUAAKIFAAC6BgAAzAYAAM4GAADjBgAA6wYAAAgHAACnBwAApwcAAM8HAADPBwAASQgAAEkIAABN CAAAXAgAAHEIAABxCAAAxQgAAAMJAAAECQAASwkAALAKAACwCgAAuAoAALkKAABODAAABAAHAAQA BwAEAAcABQAEAAUABAAHAAQABwAEAAcABAAHAAQABwAEAAcABAAHAAQABwAEAAcABQAHAAQABwAE AAcABAAHAAQABwAEAAcABAAHAAQABwAEAAcABAAHAAQABwAEAAcABAAHAAAAAABmAAAADAEAAA4B AAASAQAAEgEAAOcBAADnAQAAHwIAADUCAAA2AgAAPAIAAE0CAABOAgAAVwIAAFsCAABkAgAAZQIA ALoGAADMBgAAzgYAAOMGAADrBgAACAcAAKcHAACnBwAAzwcAAM8HAABJCAAASQgAAE0IAABcCAAA cQgAAHEIAADFCAAAAwkAAAQJAABLCQAATgwAAAQABwAEAAcABAAHAAQABwAEAAcABAAHAAQABwAE AAcABAAHAAQABwAEAAcABAAHAAQABwAEAAcABAAHAAQABwAEAAcABAAHAAQABwAaAOUiWhq0empv EAAAAAAAUXnuINJXLkQMAAAAAABbAwkphnzQTAIAAAAAABpAYimdHPdKBAAAAAAAtmVoL1F57iAN AAAAAADyA+EvtHpqbxAAAAAAAEYmWDK0empvEAAAAAAAxnpWNLR6am8QAAAAAAA2Prs7Zh3VOwkA AAAAAGYd1TszBnRVCAAAAAAAAiKMQ7R6am8QAAAAAADSVy5E9BywRgsAAAAAAPQcsEY2Prs7CgAA AAAAniunSgxHA2oGAAAAAACdHPdKIC+zUAMAAAAAAIZ80EzsHgJXAQAAAAAAIC+zUAkYjHMCAAAA AABvSRtUAAAAAAAAAAAAAQIAAgAzBnRVniunSgcAAAAAAOweAldvSRtUAAAAAAAADEcDahpAYikF AAAAAAC3doduSC1OdBAAAAAAALR6am+3doduEAAAAAAAyCBvcLR6am8QAAAAAAAJGIxzWwMJKQIA AAAAAEgtTnS2ZWgvDgAAAAAAbAAAAAQAAAAIAAAA5QAAAAAAAABrAAAAnEAAAMM2BADtVQkAVgQM ACtrDADjOw0A5wgOALQQEACKLBUAnXMWAPBdGADlEBwAUlAcAG1EHgB/QyIAZ0MlALhiKQCcFzEA jC4xAEwFNQBBPDUAzW83AKcpPABLVj8AUjhBAOM8QQARF0MAqjNDABNFRACKXk8AxSBQAIBQUABm RFUAd1tbAIwAXgAKM2EAAAJiAEZnYwAqG2UA/yB0AORKdAD8e3QAyR51AAwQdwBDGncA4QV5AJ0m eQC/FXwA6k5+ACE5fwCwUYEAYBSIAAsiiAD3MYkAzhWKAKJGjACvQY0AwQySAHQbkgA+epMAvGaU AGwilgB1Z5oAjUScALownQBDbJ8A6nqfAKtHowBpP6kAlmarAOtwqwDjfq8AZwexAHEUsQAlSbEA 5myxADYEsgDoLbkAkwm8AB8bvABAKrwAz3y9AEISwQAoQ8EAoT7FALpexgDGKsoAwGfKANYNzgDB UdIAQxLTAJN20wA4CNQARSzaAFoP2wDeVtwAoALmAMg45wDmH+kAzGjqACZ/6wDbL+4A0BbyAB5X 8wD7fvMAW2H2ANpq9wDGVP8AAAAAAEwMAABODAAAAAAAAAEAAAD/QAIQAAAAAAAAAEwMAABIAAAQ AEAAAP//AQAAAAcAVQBuAGsAbgBvAHcAbgD//wEACAAAAAAAAAAAAAAA//8BAAAAAAD//wAAAgD/ /wAAAAD//wAAAgD//wAAAAAGAAAARx6QAQAAAgIGAwUEBQIDBP8qAOBBeADACQAAAAAAAAD/AQAA AAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAANR6QAQIABQUBAgEHBgIFBwAAAAAA AAAQAAAAAAAAAAAAAACAAAAAAFMAeQBtAGIAbwBsAAAAMy6QAQAAAgsGBAICAgICBP8qAOBDeADA CQAAAAAAAAD/AQAAAAAAAEEAcgBpAGEAbAAAADcukAEAAAILBgQDBQQEAgT/BgChWyAAQBAAAAAA AAAAnwEAAAAAAABWAGUAcgBkAGEAbgBhAAAANS6QAQAAAgsGBAMFBAQCBP8uAOFbYADAKQAAAAAA AAD/AQEAAAAAAFQAYQBoAG8AbQBhAAAAQR6QAQAAAgQFAwUEBgMCBO8CAKDrIABCAAAAAAAAAACf AQAAAAAAAEMAYQBtAGIAcgBpAGEAIABNAGEAdABoAAAAIgAEAPEIiBgA8NAC5ARoAQAAAACqtBVn nbgVh1es6wYGABkAAADVAQAAdwoAAAEABgAAAAQAAxAWAAAA1QEAAHcKAAABAAYAAAAWAAAAAAAA APkCAPAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAC0ALQAgYEyNAAAEAAZAGQAAAAZ AAAARgwAAEYMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAACAAAAAAAAAAAACDKDUQDwEAAI3P//AQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABIUAAAAAAI8P8PAQABPwAA5AQAAP///3////9/////f////3////9/////f////3+6MJ0A AAQAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAhBAAAAAAAAAAAAAAAAAAAAAAAABAcAAAFAAAAAAAA AAAAeAAAAHgAAAAAAAAAAAAAAKAFAAD//xIAAAAAAAAAAgAgACAAAAAAAAAABABwAGMAMQAyAAMA YQBiAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAYBAgAAAAAAAAAAAAAAAAAAAAAAAQAAAOCF n/L5T2gQq5EIACsns9kwAAAAaAEAABEAAAABAAAAkAAAAAIAAACYAAAAAwAAAKQAAAAEAAAAsAAA AAUAAADAAAAABwAAAMwAAAAIAAAA4AAAAAkAAADsAAAAEgAAAPgAAAAKAAAAGAEAAAsAAAAkAQAA DAAAADABAAANAAAAPAEAAA4AAABIAQAADwAAAFABAAAQAAAAWAEAABMAAABgAQAAAgAAAOQEAAAe AAAABAAAACAgAAAeAAAABAAAAAAAAAAeAAAACAAAAHBjMTIAAAAAHgAAAAQAAAAAAAAAHgAAAAwA AABOb3JtYWwuZG90bQAeAAAABAAAAGFiYwAeAAAABAAAADYAAAAeAAAAGAAAAE1pY3Jvc29mdCBP ZmZpY2UgV29yZAAAAEAAAAAA1hF+AwAAAEAAAAAA9iKlconLAUAAAAAAUIvx7VbOAUAAAAAAAsQu L1fOAQMAAAABAAAAAwAAANUBAAADAAAAdwoAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAP7/AAAGAQIAAAAAAAAAAAAAAAAAAAAAAAIAAAAC1c3VnC4bEJOX CAArLPmuRAAAAAXVzdWcLhsQk5cIACss+a48AQAA+AAAAAwAAAABAAAAaAAAAA8AAABwAAAABQAA AIgAAAAGAAAAkAAAABEAAACYAAAAFwAAAKAAAAALAAAAqAAAABAAAACwAAAAEwAAALgAAAAWAAAA wAAAAA0AAADIAAAADAAAANcAAAACAAAA5AQAAB4AAAAQAAAASGV3bGV0dC1QYWNrYXJkAAMAAAAW AAAAAwAAAAYAAAADAAAARgwAAAMAAAAAAAwACwAAAAAAAAALAAAAAAAAAAsAAAAAAAAACwAAAAAA AAAeEAAAAQAAAAMAAAAgIAAMEAAAAgAAAB4AAAAGAAAAVGl0bGUAAwAAAAEAAAAAAADsAwAABAAA AAAAAAAoAAAAAQAAAFEAAAACAAAAWQAAAAMAAADhAwAAAgAAAAIAAAAMAAAAX1BJRF9ITElOS1MA AwAAAAkAAABfRG9jSG9tZQACAAAA5AQAAEEAAACAAwAAHgAAAAMAAAB0AD0AAwAAAMwRAAADAAAA BAQAAAMAAAABAAAAHwAAADcAAABoAHQAdABwADoALwAvAG0AZQBkAGkAYQBkAGIALgB3AG4ALgBj AG8AbQAvAG0AZQBkAGkAYQAvAHQAaAB1AG0AYgBuAGEAaQBsAHMALwAwAFIAawAxAGQARgBPAGEA TwBoAEUALgBqAHAAZwAAAAAAHwAAAAEAAAAAABwAAwAAACQAWQADAAAA/////wMAAAACBAAAAwAA AAEAAAAfAAAASwAAAGgAdAB0AHAAOgAvAC8AZwBvAG8AZABsAGUAdAB0AC4AcAByAG8AdABlAG8A bQBpAGMAcwAuAHcAYQBzAGgAaQBuAGcAdABvAG4ALgBlAGQAdQAvAGcAcgBvAHUAcABfAG0AZQBt AGIAZQByAHMALwBpAG0AYQBnAGUAcwAvAHUAawAtAGYAbABhAGcALgBwAG4AZwAAAAAAHwAAAAEA AAAAABwAAwAAACQAWQADAAAA/////wMAAAADBAAAAwAAAAEAAAAfAAAASwAAAGgAdAB0AHAAOgAv AC8AZwBvAG8AZABsAGUAdAB0AC4AcAByAG8AdABlAG8AbQBpAGMAcwAuAHcAYQBzAGgAaQBuAGcA dABvAG4ALgBlAGQAdQAvAGcAcgBvAHUAcABfAG0AZQBtAGIAZQByAHMALwBpAG0AYQBnAGUAcwAv AHUAawAtAGYAbABhAGcALgBwAG4AZwAAAAAAHwAAAAEAAAAAABwAAwAAADkAdgADAAAA/////wMA AAAEBAAAAwAAAAEAAAAfAAAAQAAAAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBsAG8AdAB0AG8AbABv AG8AcABoAG8AbABlAC4AYwBvAC4AdQBrAC8ASQBtAGEAZwBlAHMALwBuAGEAdABpAG8AbgBhAGwA LQBsAG8AdAB0AGUAcgB5AC0AbABvAGcAbwAuAGoAcABnAAAAHwAAAAEAAAAAABwAAwAAACYAKwAD AAAA/////wMAAAAFBAAAAwAAAAEAAAAfAAAAKwAAAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBtAGEA aQBsAGMAZQBuAHQAcgBvAC4AYwBvAG0ALwBpAG0AYQBnAGUAcwAvAGcAbABvAGIAZQAuAGcAaQBm AAAAAAAfAAAAAQAAAAAAHAADAAAAyOnHQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwA AAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAA ABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAA KQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3 AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUA AABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAA AFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAA YgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABw AAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4A AAB/AAAAgAAAAIEAAACCAAAAgwAAAIQAAACFAAAAhgAAAIcAAACIAAAAiQAAAIoAAACLAAAAjAAA AI0AAACOAAAAjwAAAJAAAACRAAAAkgAAAJMAAACUAAAAlQAAAJYAAACXAAAAmAAAAJkAAACaAAAA mwAAAJwAAACdAAAAngAAAJ8AAACgAAAAoQAAAKIAAACjAAAApAAAAKUAAACmAAAApwAAAKgAAACp AAAAqgAAAKsAAACsAAAArQAAAK4AAACvAAAAsAAAALEAAACyAAAAswAAALQAAAC1AAAAtgAAALcA AAC4AAAAuQAAALoAAAC7AAAAvAAAAL0AAAC+AAAAvwAAAMAAAADBAAAAwgAAAMMAAADEAAAAxQAA AMYAAADHAAAAyAAAAMkAAADKAAAAywAAAMwAAADNAAAAzgAAAM8AAADQAAAA0QAAANIAAADTAAAA 1AAAANUAAADWAAAA1wAAANgAAADZAAAA2gAAANsAAADcAAAA3QAAAN4AAADfAAAA4AAAAOEAAADi AAAA4wAAAOQAAADlAAAA5gAAAOcAAADoAAAA6QAAAOoAAADrAAAA7AAAAO0AAADuAAAA7wAAAPAA AADxAAAA8gAAAPMAAAD0AAAA9QAAAPYAAAD3AAAA+AAAAPkAAAD6AAAA+wAAAPwAAAD9AAAA/gAA AP8AAAAAAQAAAQEAAAIBAAADAQAABAEAAAUBAAAGAQAABwEAAAgBAAAJAQAACgEAAAsBAAAMAQAA DQEAAA4BAAAPAQAAEAEAABEBAAASAQAAEwEAABQBAAAVAQAAFgEAABcBAAAYAQAAGQEAABoBAAAb AQAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAAIgEAACMBAAAkAQAAJQEAACYBAAAnAQAAKAEAACkB AAAqAQAAKwEAACwBAAAtAQAALgEAAC8BAAAwAQAAMQEAADIBAAAzAQAANAEAADUBAAA2AQAANwEA ADgBAAA5AQAAOgEAADsBAAA8AQAAPQEAAD4BAAA/AQAAQAEAAEEBAABCAQAAQwEAAEQBAABFAQAA RgEAAEcBAABIAQAASQEAAEoBAABLAQAATAEAAE0BAABOAQAATwEAAFABAABRAQAAUgEAAFMBAABU AQAAVQEAAFYBAABXAQAAWAEAAFkBAABaAQAAWwEAAFwBAABdAQAAXgEAAF8BAABgAQAAYQEAAGIB AABjAQAAZAEAAGUBAABmAQAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAbQEAAG4BAABvAQAAcAEA AHEBAAByAQAAcwEAAHQBAAB1AQAAdgEAAHcBAAB4AQAAeQEAAHoBAAB7AQAAfAEAAH0BAAB+AQAA fwEAAIABAACBAQAAggEAAIMBAACEAQAAhQEAAIYBAACHAQAAiAEAAIkBAACKAQAAiwEAAIwBAACN AQAAjgEAAI8BAACQAQAAkQEAAJIBAACTAQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsB AACcAQAAnQEAAJ4BAACfAQAAoAEAAKEBAACiAQAAowEAAKQBAAClAQAApgEAAKcBAACoAQAAqQEA AKoBAACrAQAArAEAAK0BAACuAQAArwEAALABAACxAQAAsgEAALMBAAC0AQAAtQEAALYBAAC3AQAA uAEAALkBAAC6AQAAuwEAALwBAAC9AQAAvgEAAL8BAADAAQAAwQEAAMIBAADDAQAA/v///8UBAADG AQAAxwEAAMgBAADJAQAAygEAAMsBAADMAQAAzQEAAM4BAADPAQAA0AEAANEBAADSAQAA0wEAANQB AADVAQAA1gEAANcBAADYAQAA2QEAANoBAADbAQAA3AEAAN0BAADeAQAA3wEAAOABAADhAQAA4gEA AOMBAADkAQAA5QEAAOYBAADnAQAA6AEAAOkBAADqAQAA6wEAAOwBAADtAQAA7gEAAO8BAADwAQAA 8QEAAPIBAADzAQAA9AEAAPUBAAD2AQAA9wEAAPgBAAD5AQAA+gEAAPsBAAD8AQAA/QEAAP4BAAD/ AQAAAAIAAAECAAACAgAAAwIAAAQCAAAFAgAABgIAAAcCAAAIAgAACQIAAAoCAAALAgAADAIAAA0C AAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAAGwIA ABwCAAAdAgAAHgIAAB8CAAAgAgAAIQIAACICAAAjAgAAJAIAACUCAAAmAgAAJwIAACgCAAApAgAA KgIAACsCAAAsAgAALQIAAC4CAAAvAgAAMAIAADECAAAyAgAAMwIAADQCAAA1AgAANgIAADcCAAA4 AgAAOQIAADoCAAA7AgAAPAIAAD0CAAA+AgAAPwIAAEACAABBAgAAQgIAAEMCAABEAgAARQIAAEYC AABHAgAASAIAAEkCAABKAgAASwIAAEwCAABNAgAATgIAAE8CAABQAgAAUQIAAFICAABTAgAAVAIA AFUCAABWAgAAVwIAAFgCAABZAgAAWgIAAFsCAABcAgAAXQIAAF4CAABfAgAAYAIAAGECAABiAgAA YwIAAGQCAABlAgAAZgIAAGcCAABoAgAAaQIAAGoCAABrAgAAbAIAAG0CAABuAgAAbwIAAHACAABx AgAAcgIAAHMCAAB0AgAAdQIAAHYCAAB3AgAAeAIAAHkCAAB6AgAAewIAAHwCAAB9AgAAfgIAAH8C AACAAgAAgQIAAIICAACDAgAAhAIAAIUCAACGAgAAhwIAAIgCAACJAgAAigIAAIsCAACMAgAAjQIA AI4CAACPAgAAkAIAAJECAACSAgAAkwIAAJQCAACVAgAAlgIAAJcCAACYAgAAmQIAAJoCAACbAgAA nAIAAJ0CAACeAgAAnwIAAKACAAChAgAAogIAAKMCAACkAgAApQIAAKYCAACnAgAAqAIAAKkCAACq AgAAqwIAAKwCAACtAgAArgIAAK8CAACwAgAAsQIAALICAACzAgAAtAIAALUCAAC2AgAAtwIAALgC AAC5AgAAugIAALsCAAC8AgAAvQIAAL4CAAC/AgAAwAIAAMECAADCAgAAwwIAAMQCAADFAgAAxgIA AMcCAADIAgAAyQIAAMoCAADLAgAAzAIAAM0CAADOAgAAzwIAANACAADRAgAA0gIAANMCAADUAgAA 1QIAANYCAADXAgAA2AIAANkCAADaAgAA2wIAANwCAADdAgAA3gIAAN8CAADgAgAA4QIAAOICAADj AgAA5AIAAOUCAADmAgAA5wIAAOgCAADpAgAA6gIAAOsCAADsAgAA7QIAAO4CAADvAgAA8AIAAPEC AADyAgAA8wIAAPQCAAD1AgAA9gIAAPcCAAD4AgAA+QIAAPoCAAD7AgAA/AIAAP0CAAD+AgAA/wIA AAADAAABAwAAAgMAAAMDAAAEAwAABQMAAAYDAAAHAwAACAMAAAkDAAAKAwAACwMAAAwDAAANAwAA DgMAAA8DAAAQAwAAEQMAABIDAAATAwAAFAMAABUDAAAWAwAAFwMAABgDAAAZAwAAGgMAABsDAAAc AwAAHQMAAB4DAAAfAwAAIAMAACEDAAAiAwAAIwMAACQDAAAlAwAAJgMAACcDAAAoAwAAKQMAACoD AAArAwAALAMAAC0DAAAuAwAALwMAADADAAAxAwAAMgMAADMDAAA0AwAANQMAADYDAAA3AwAAOAMA ADkDAAA6AwAAOwMAADwDAAA9AwAAPgMAAD8DAABAAwAAQQMAAEIDAABDAwAARAMAAEUDAABGAwAA RwMAAEgDAABJAwAASgMAAEsDAABMAwAATQMAAE4DAABPAwAAUAMAAFEDAABSAwAAUwMAAFQDAABV AwAAVgMAAFcDAABYAwAAWQMAAFoDAABbAwAAXAMAAF0DAABeAwAA/v///2ADAABhAwAAYgMAAGMD AABkAwAAZQMAAGYDAABnAwAAaAMAAGkDAABqAwAAawMAAGwDAABtAwAAbgMAAG8DAABwAwAAcQMA AHIDAABzAwAA/v///3UDAAB2AwAAdwMAAHgDAAB5AwAAegMAAHsDAAD+////fQMAAH4DAAB/AwAA gAMAAIEDAACCAwAAgwMAAP7////9/////f////3////9/////f////3////9/////f///40DAAD+ /////v////7///////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////UgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAABYABQH//////////wMAAAAGCQIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAAgFdA Mi9XzgGPAwAAgAAAAAAAAABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAf///////////////wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAMQBAAAaNAMAAAAAADEAVABhAGIAbABlAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAIBAQAAAAYAAAD/////AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwMAAOIoAAAAAAAAVwBvAHIAZABEAG8A YwB1AG0AZQBuAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAgEC AAAABQAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7oYDAAAA AAAFAFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAKAACAf///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHQDAAAAEAAAAAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwBy AG0AYQB0AGkAbwBuAAAAAAAAAAAAAAA4AAIBBAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAfAMAAAAQAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgD///////////////8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// /////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAEAAAD+//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// AQD+/wMKAAD/////BgkCAAAAAADAAAAAAAAARicAAABNaWNyb3NvZnQgT2ZmaWNlIFdvcmQgOTct MjAwMyBEb2N1bWVudAAKAAAATVNXb3JkRG9jABAAAABXb3JkLkRvY3VtZW50LjgA9DmycQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= ------=_Part_24866_31045872.1369266863826-- From david@fromorbit.com Wed May 22 18:54:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0462929DF8 for ; Wed, 22 May 2013 18:54:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C728B304032 for ; Wed, 22 May 2013 16:54:53 -0700 (PDT) X-ASG-Debug-ID: 1369266891-04cb6c474062de0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id zLC8B9EdTTqcLH3N for ; Wed, 22 May 2013 16:54:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhoNAKRZnVF5LBBG/2dsb2JhbABagwiDAroHhSQEAYEGF3SCIwEBBScTHCMQCAMOBwMJJQ8FJQMhE4gMuyAWjWqBHQeDVAOXN4ochyWDISqBLCQ Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 09:24:51 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfIrq-0006C4-Jv; Thu, 23 May 2013 09:54:50 +1000 Date: Thu, 23 May 2013 09:54:50 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 06/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Message-ID: <20130522235450.GO29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 06/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-7-git-send-email-david@fromorbit.com> <20130522205059.GP20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522205059.GP20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369266891 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131743 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 03:50:59PM -0500, Ben Myers wrote: > On Tue, May 21, 2013 at 06:02:05PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining > > the entries in two leaves when the destination leaf requires > > compaction. The temporary buffer ends up being copied back over the > > original destination buffer, so the header in the temporary buffer > > needs to contain all the information that is in the destination > > buffer. > > > > To make sure the temporary buffer is fully initialised, once we've > > set up the temporary incore header appropriately, write is back to > > the temporary buffer before starting to move entries around. > > > > Signed-off-by: Dave Chinner > > > > --- > > fs/xfs/xfs_attr_leaf.c | 16 +++++++++++++--- > > 1 file changed, 13 insertions(+), 3 deletions(-) > > > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > > index 0bce1b3..79ece72 100644 > > --- a/fs/xfs/xfs_attr_leaf.c > > +++ b/fs/xfs/xfs_attr_leaf.c > > @@ -2181,14 +2181,24 @@ xfs_attr3_leaf_unbalance( > > struct xfs_attr_leafblock *tmp_leaf; > > struct xfs_attr3_icleaf_hdr tmphdr; > > > > - tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); > > - memset(tmp_leaf, 0, state->blocksize); > > - memset(&tmphdr, 0, sizeof(tmphdr)); > > + tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP); > > + > > + /* > > + * Copy the header into the temp leaf so that all the stuff > > + * not in the incore header is present and gets copied back in > > + * once we've moved all the entries. > > + */ > > + memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf)); > > > > + memset(&tmphdr, 0, sizeof(tmphdr)); > > tmphdr.magic = savehdr.magic; > > tmphdr.forw = savehdr.forw; > > tmphdr.back = savehdr.back; > > tmphdr.firstused = state->blocksize; > > + > > + /* write the header to the temp buffer to initialise it */ > > + xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr); > > + > > Hrm. It seemed like the memset 0 for the incore temp header should have been > enough for the purposes of moveents. Why did you have to add this additional > hdr_to_disk? Because we've modified the tmphdr so it is different to what is in the tmp_leaf, and I'm being paranoid and not making any assumptions that a callee doesn't reread the tmphdr from the tmp_leaf. i.e. I'm initialising both the on-disk and the incore headers to be identical before we do anything else. Once bitten, twice shy. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 22 18:58:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6025A29DF8 for ; Wed, 22 May 2013 18:58:25 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A416EAC001 for ; Wed, 22 May 2013 16:58:24 -0700 (PDT) X-ASG-Debug-ID: 1369267102-04cbb0049d68660001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id GLa4v4a7nMoF7dtC for ; Wed, 22 May 2013 16:58:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhoNANNanVF5LBBG/2dsb2JhbABagwiDAroIhSQEAYEGF3SCIwEBBScTHCMQCAMOBwMJJQ8FJQMhE4gMux4WjWqBHQeDVAOXN4ochyWDISqBLCQ Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 09:28:21 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfIvE-0006Cc-W0; Thu, 23 May 2013 09:58:21 +1000 Date: Thu, 23 May 2013 09:58:20 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 07/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Message-ID: <20130522235820.GP29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 07/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-8-git-send-email-david@fromorbit.com> <20130522215934.GQ20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522215934.GQ20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369267102 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131743 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 04:59:34PM -0500, Ben Myers wrote: > On Tue, May 21, 2013 at 06:02:06PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > xfs_attr3_leaf_compact() uses a temporary buffer for compacting the > > the entries in a leaf. It copies the the original buffer into the > > temporary buffer, then zeros the original buffer completely. It then > > copies the entries back into the original buffer. However, the > > original buffer has not been correctly initialised, and so the > > movement of the entries goes horribly wrong. > > > > Make sure the zeroed destination buffer is fully initialised, and > > once we've set up the destination incore header appropriately, write > > is back to the buffer before starting to move entries around. > it > > > > > While debugging this, the _d/_s prefixes weren't sufficient to > > remind me what buffer was what, so rename then all _src/_dst. > > Yeah, it helps. > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_attr_leaf.c | 42 ++++++++++++++++++++++++++---------------- > > 1 file changed, 26 insertions(+), 16 deletions(-) > > > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > > index 79ece72..5b03d15 100644 > > --- a/fs/xfs/xfs_attr_leaf.c > > +++ b/fs/xfs/xfs_attr_leaf.c > > @@ -1445,11 +1445,12 @@ xfs_attr3_leaf_add_work( > > STATIC void > > xfs_attr3_leaf_compact( > > struct xfs_da_args *args, > > - struct xfs_attr3_icleaf_hdr *ichdr_d, > > + struct xfs_attr3_icleaf_hdr *ichdr_dst, > > struct xfs_buf *bp) > > { > > - xfs_attr_leafblock_t *leaf_s, *leaf_d; > > - struct xfs_attr3_icleaf_hdr ichdr_s; > > + struct xfs_attr_leafblock *leaf_src; > > + struct xfs_attr_leafblock *leaf_dst; > > + struct xfs_attr3_icleaf_hdr ichdr_src; > > struct xfs_trans *trans = args->trans; > > struct xfs_mount *mp = trans->t_mountp; > > char *tmpbuffer; > > @@ -1457,29 +1458,38 @@ xfs_attr3_leaf_compact( > > trace_xfs_attr_leaf_compact(args); > > > > tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); > > - ASSERT(tmpbuffer != NULL); > > memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); > > memset(bp->b_addr, 0, XFS_LBSIZE(mp)); > > + leaf_src = (xfs_attr_leafblock_t *)tmpbuffer; > > + leaf_dst = bp->b_addr; > > > > /* > > - * Copy basic information > > + * Copy the on-disk header back into the destination buffer to ensure > > + * all the information in the header that is not part of the incore > > + * header structure is preserved. > > */ > > - leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; > > - leaf_d = bp->b_addr; > > - ichdr_s = *ichdr_d; /* struct copy */ > > - ichdr_d->firstused = XFS_LBSIZE(mp); > > - ichdr_d->usedbytes = 0; > > - ichdr_d->count = 0; > > - ichdr_d->holes = 0; > > - ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); > > - ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; > > + memcpy(bp->b_addr, tmpbuffer, xfs_attr3_leaf_hdr_size(leaf_src)); > > + > > + /* Initialise the incore headers */ > > + ichdr_src = *ichdr_dst; /* struct copy */ > > + ichdr_dst->firstused = XFS_LBSIZE(mp); > > + ichdr_dst->usedbytes = 0; > > + ichdr_dst->count = 0; > > + ichdr_dst->holes = 0; > > + ichdr_dst->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_src); > > + ichdr_dst->freemap[0].size = ichdr_dst->firstused - > > + ichdr_dst->freemap[0].base; > > + > > + > > + /* write the header back to initialise the underlying buffer */ > > + xfs_attr3_leaf_hdr_to_disk(leaf_dst, ichdr_dst); > > I can see that the memcpy is necessary but again I'm having a hard time > understanding what field was messed up for moveents. moveents wasn't messed up - it was all the non-incore headers that were invalid (owner, uuid, blkno, etc) due to the zeroing of the tmp buffer and then only writing the incore header back to it after moveents. That's what the addition memcpy of the header fixes, and then the xfs_attr3_leaf_hdr_to_disk() call updates all the fields modified by initialisation so that before we start the in-core and "on-disk" structures are identical. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 22 19:03:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 290ED29DF8 for ; Wed, 22 May 2013 19:03:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB612AC001 for ; Wed, 22 May 2013 17:03:39 -0700 (PDT) X-ASG-Debug-ID: 1369267413-04cb6c4741634d0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id h1Mw6Tep5Mw4Upxd for ; Wed, 22 May 2013 17:03:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhoNANpbnVF5LBBG/2dsb2JhbABagwiDAroIhSQEAYEGF3SCIwEBBTocIxAIAw4HAwklDwUlAyETiAy7HxaNaoEdB4NUA5c3kUGDISqBLiQ Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail04.adl6.internode.on.net with ESMTP; 23 May 2013 09:33:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfJ0B-0006Dw-6l; Thu, 23 May 2013 10:03:27 +1000 Date: Thu, 23 May 2013 10:03:27 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write Message-ID: <20130523000327.GQ29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-9-git-send-email-david@fromorbit.com> <20130522222608.GR20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522222608.GR20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369267413 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131743 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 05:26:08PM -0500, Ben Myers wrote: > On Tue, May 21, 2013 at 06:02:07PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > We write the superblock every 30s or so which results in the > > verifier being called. Right now that results in this output > > every 30s: > > > > XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! > > Use of these features in this kernel is at your own risk! > > > > And spamming the logs. Stop this output from occurring on superblock > > writes. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_mount.c | 18 +++++++++++------- > > 1 file changed, 11 insertions(+), 7 deletions(-) > > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > index f6bfbd7..e8e310c 100644 > > --- a/fs/xfs/xfs_mount.c > > +++ b/fs/xfs/xfs_mount.c > > @@ -314,7 +314,8 @@ STATIC int > > xfs_mount_validate_sb( > > xfs_mount_t *mp, > > xfs_sb_t *sbp, > > - bool check_inprogress) > > + bool check_inprogress, > > + bool check_version) > > { > > > > /* > > @@ -337,9 +338,10 @@ xfs_mount_validate_sb( > > > > /* > > * Version 5 superblock feature mask validation. Reject combinations the > > - * kernel cannot support up front before checking anything else. > > + * kernel cannot support up front before checking anything else. For > > + * write validation, we don't need to check feature masks. > > */ > > - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > > + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > > if (!quiet_version) { > > xfs_alert(mp, > > "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" > > "Use of these features in this kernel is at your own risk!"); > > } > > Since the stated goal of the patch is to be quieter and not to disable useful > tests in the verifier, I suggest you disable the print rather than disable the > test. Checking the feature fields for whether the kernel supports the features in them on write is not useful in any way. That's why the variable is named "check_version" because it skips the v5 version field checking. This is stuff that is used by the mount path (i.e. superblock read path), not the writeback path. I'll update the commit message to reflect this. Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlsemon35@gmail.com Wed May 22 21:27:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B71CB29DF8 for ; Wed, 22 May 2013 21:27:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 95FDC8F804B for ; Wed, 22 May 2013 19:27:49 -0700 (PDT) X-ASG-Debug-ID: 1369276068-04cbb0049e713b0001-NocioJ Received: from mail-ie0-f172.google.com (mail-ie0-f172.google.com [209.85.223.172]) by cuda.sgi.com with ESMTP id WCdynaukFWgBN6dG (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 May 2013 19:27:48 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.172 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.172] Received: by mail-ie0-f172.google.com with SMTP id 16so7113276iea.17 for ; Wed, 22 May 2013 19:27:48 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.172] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.172] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=3J+zayIZJNUtYTdoXA1O+ArHxYzCWJxRZgDH7PQU21I=; b=aHmCLcQKXXIQdX7ORoFqqTVkmoNvtgwV7e2sm3yHSJaKSKEZ88u832WKABluruj0wY bEtyhRbdk9NyaM1lI8uBbRMlkvGBS+A7U9xKJZhVh8pZUoMyyONNh3WtB7zX8cRTo/FR 3PUclc0h7xcTdoXpQ9nb5mvfKvb59BWnoMwPHFKNdDeF0FYfPWsqRZPRhqhsQ6lNx6Gr PalzHgx8ZNRg4CsMd76NaMxzgB86CgkjD5MahQ6EBWYutKFrQGTYs2X0j5zSC1/e7C66 KucPxA5lBW68+1kCw4FfD+fqelIntG30R31I+9K77PpZs6bmadQlJBEIOqRVJxxldrKn Znrg== X-Received: by 10.50.88.103 with SMTP id bf7mr10834938igb.9.1369276068641; Wed, 22 May 2013 19:27:48 -0700 (PDT) Received: from [192.168.1.2] ([184.52.11.124]) by mx.google.com with ESMTPSA id 9sm23969075igy.7.2013.05.22.19.27.39 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 22 May 2013 19:27:47 -0700 (PDT) Message-ID: <519D7E89.8060201@gmail.com> Date: Wed, 22 May 2013 22:27:21 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: [PATCH] xfstests: Change mount method for shared/243 References: <519C14A1.8000009@gmail.com> <20130522012620.GA29466@dastard> X-ASG-Orig-Subj: [PATCH] xfstests: Change mount method for shared/243 In-Reply-To: <20130522012620.GA29466@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f172.google.com[209.85.223.172] X-Barracuda-Start-Time: 1369276068 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131753 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email Hi! This patch updates the mount method in xfstests shared/243 without seeming to change the behavior of the test. Should this patch get a NACK for not being useful, no worries! There will be other opportunities. The patch was tested with ext4, with and without external journals. It was also tested on XFS with an external logdev. The MOUNT_OPTIONS for the ext4 tests included '-o barrier=1' and '-o barrier=0'. The test results varied on ext4 with an external journal, but the results shown by /proc/mounts was OK. [barrier=1 causes a failed test, barrier=0 succeeds, both in the original and patched test.] >From 8762f621a5fb9556fa96ec289bceffc4fcc844f3 Mon Sep 17 00:00:00 2001 From: "Michael L. Semon" Date: Wed, 22 May 2013 20:57:56 -0400 Subject: [PATCH] xfstests: Change mount method for shared/243 Change the mount invocations in shared/243 to use the built-in _test_mount function of xfstests. This was done as part of a clean-up recommendation. Currently, only ext4 file systems are affected by this change. Signed-off-by: Michael L. Semon --- tests/shared/243 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/shared/243 b/tests/shared/243 index e0f2db2..b3eb025 100755 --- a/tests/shared/243 +++ b/tests/shared/243 @@ -108,7 +108,7 @@ _check_ext4_eof_flag() fi # Mount the ${TEST_DEV} - mount ${TEST_DEV} -t ${FSTYP} ${TEST_DIR} + _test_mount fi } -- 1.8.2 From qcai@redhat.com Wed May 22 22:17:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C183729DF8 for ; Wed, 22 May 2013 22:17:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id AF876304043 for ; Wed, 22 May 2013 20:17:00 -0700 (PDT) X-ASG-Debug-ID: 1369279019-04cbb0049c74200001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id T2t8aiEY8IPHrxHc for ; Wed, 22 May 2013 20:16:59 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4N3Guei001600; Wed, 22 May 2013 23:16:56 -0400 Date: Wed, 22 May 2013 23:16:56 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: LKML , stable@vger.kernel.org, xfs@oss.sgi.com Message-ID: <1483868349.4996990.1369279016162.JavaMail.root@redhat.com> In-Reply-To: <20130522095300.GK29466@dastard> References: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> <20130522095300.GK29466@dastard> Subject: Re: 3.9.2: xfstests triggered panic MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.2: xfstests triggered panic Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.2: xfstests triggered panic Thread-Index: z5p65HRRrfi1ak1fHTug1+i/WpPDkA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369279019 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131755 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Dave Chinner" > To: "CAI Qian" > Cc: "LKML" , stable@vger.kernel.org, xfs@os= s.sgi.com > Sent: Wednesday, May 22, 2013 5:53:00 PM > Subject: Re: 3.9.2: xfstests triggered panic >=20 > On Wed, May 22, 2013 at 04:39:58AM -0400, CAI Qian wrote: > > Reproduced on almost all s390x guests by running xfstests. > >=20 > > 14634.396658=C2=A8 XFS (dm-1): Mounting Filesystem > > 14634.525522=C2=A8 XFS (dm-1): Ending clean mount > > 14640.413007=C2=A8 <000000000017c6d4>=C2=A8 idle_balance+0x1a0/0x340 > > 14640.413010=C2=A8 <000000000063303e>=C2=A8 __schedule+0xa22/0xaf0 > > 14640.428279=C2=A8 <0000000000630da6>=C2=A8 schedule_timeout+0x186/0x2= c0 > > 14640.428289=C2=A8 <00000000001cf864>=C2=A8 rcu_gp_kthread+0x1bc/0x298 > > 14640.428300=C2=A8 <0000000000158c5a>=C2=A8 kthread+0xe6/0xec > > 14640.428304=C2=A8 <0000000000634de6>=C2=A8 kernel_thread_starter+0x6/= 0xc > > 14640.428308=C2=A8 <0000000000634de0>=C2=A8 kernel_thread_starter+0x0/= 0xc > > 14640.428311=C2=A8 Last Breaking-Event-Address: > > 14640.428314=C2=A8 <000000000016bd76>=C2=A8 walk_tg_tree_from+0x3a/0xf= 4 > > 14640.428319=C2=A8 list_add corruption. next->prev should be prev > > (0000000000000918 > > ), but was (null). (next=3D (null)). >=20 > Where's XFS in this? walk_tg_tree_from() is part of the scheduler > code. This kind of implies a stack corruption.... >=20 > > Sometimes, this pops up, > > [16907.275002] WARNING: at kernel/rcutree.c:1960 > >=20 > > or this, > > 15316.154171=C2=A8 XFS (dm-1): Mounting Filesystem > > 15316.255796=C2=A8 XFS (dm-1): Ending clean mount > > 15320.364246=C2=A8 00000000006367a2: e310b0080004 lg > > %r1,8(%r > > 11) > > 15320.364249=C2=A8 00000000006367a8: 41101010 la > > %r1,16(% > > r1) > > 15320.364251=C2=A8 00000000006367ac: e33010000004 lg > > %r3,0(%r > > 1) > > 15320.364252=C2=A8 Call Trace: > > 15320.364252=C2=A8 Last Breaking-Event-Address: > > 15320.364253=C2=A8 =EF=BF=BD <0000000000000000>=C2=A8 Kernel stack ove= rflow. > > 15320.364308=C2=A8 CPU: 0 Tainted: GF W 3.9.2 #1 > > 15320.364309=C2=A8 Process rhts-test-runne (pid: 625, task: 000000003dc= cc890, > > ksp: 0 >=20 > .... and there you go - a stack overflow. Your kernel stack size is > too small. >=20 > I'd suggest that you need 16k stacks on s390 - IIRC every function > call has 128 byte stack frame, and there are call chains 70-80 > functions deep in the storage stack... Hmm, I am unsure how to set to 16k stack there, and power 7 has looks like has the same problem. [14927.117017] XFS (dm-0): Mounting Filesystem=20 [14927.299854] XFS (dm-0): Ending clean mount=20 [14927.668909] Unable to handle kernel paging request for data at address 0= x00000040=20 [14927.668913] Unable to handle kernel paging request for data at address 0= x000000f8=20 [14927.668914] Unable to handle kernel paging request for data at address 0= x000000bb=20 [14927.668915] Faulting instruction address: 0xc0000000000d1bd8=20 [14927.668916] Faulting instruction address: 0xc0000000000d1bd8=20 [14927.668919] Unable to handle kernel paging request for data at address 0= x00000018=20 [14927.668920] Faulting instruction address: 0xc0000000003d34b8=20 [14927.668922] Oops: Kernel access of bad area, sig: 11 [#1]=20 [14927.668924] SMP NR_CPUS=3D1024 NUMA pSeries=20 [14927.668927] Modules linked in: binfmt_misc(F) tun(F) ipt_ULOG(F) rds(F) = scsi_transport_iscsi(F) atm(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc= (F) af_802154(F) af_key(F) sctp(F) btrfs(F) raid6_pq(F) xor(F) vfat(F) fat(= F) nfsv3(F) nfs_acl(F) nfs(F) lockd(F) sunrpc(F) fscache(F) nfnetlink_log(F= ) nfnetlink(F) bluetooth(F) rfkill(F) arc4(F) md4(F) nls_utf8(F) cifs(F) dn= s_resolver(F) nf_tproxy_core(F) nls_koi8_u(F) nls_cp932(F) ts_kmp(F)[14927.= 668955] Faulting instruction address: 0xc0000000000d1bd8=20 fuse(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadcast(F) ipt_MASQUERAD= E(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) ip6t_REJECT(F) nf_co= nntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat_ipv4(F) nf_nat(F) i= ptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_defrag_ipv4(F) xt_co= nntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F) ip6table_filter(F)= ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ehea(F) xfs(F) libcrc32= c(F) sd_mod(F) crc_t10dif(F) ibmvscsi(F) scsi_transport_srp(F) scsi_tgt(F) = dm_mirror(F) dm_region_hash(F) dm_log(F) dm_mod(F) [last unloaded: brd]=20 [14927.669041] NIP: c0000000000d1bd8 LR: c0000000000d1b94 CTR: c0000000000d= 7e30=20 [14927.669048] REGS: c0000001fbfb3120 TRAP: 0300 Tainted: GF = (3.9.3)=20 [14927.669053] MSR: 8000000000009032 CR: 28000028 XER= : 00000000=20 [14927.669069] SOFTE: 0=20 [14927.669072] CFAR: c00000000000908c=20 [14927.669076] DAR: 00000000000000f8, DSISR: 40000000=20 [14927.669080] TASK =3D c0000001fbf14880[0] 'swapper/2' THREAD: c0000001fbf= b0000 CPU: 2=20 GPR00: c0000000000d1b94 c0000001fbfb33a0 c0000000010f3038 00000d939e66add6 = =20 GPR04: 0000000000000000 00000001001651f2 0000000000000099 c000000000af3038 = =20 GPR08: c000000001163038 0000000000000002 00000000000000b8 000c3420953d115d = =20 GPR12: 0000000048000022 c00000000ed90800 c0000001fbfb3f90 000000000eee7bc0 = =20 GPR16: 0000000010200040 00000001001651f2 c000000001152100 0000000000000000 = =20 GPR20: c000000000af3f80 c000000001152180 0000000000000000 0000000000000000 = =20 GPR24: c0000000007801e8 0000000000000001 0000000000200200 c0000000015550d0 = =20 GPR28: c000000001554880 0000000000000000 c0000001f5564200 0000000000000000 = =20 [14927.669159] NIP [c0000000000d1bd8] .update_blocked_averages+0xc8/0x5c0= =20 [14927.669165] LR [c0000000000d1b94] .update_blocked_averages+0x84/0x5c0=20 [14927.669170] Call Trace:=20 [14927.669174] [c0000001fbfb33a0] [c0000000000d1b94] .update_blocked_averag= es+0x84/0x5c0 (unreliable)=20 [14927.669183] [c0000001fbfb3490] [c0000000000d7c54] .rebalance_domains+0x8= 4/0x260=20 [14927.669190] [c0000001fbfb3570] [c0000000000d7eb4] .run_rebalance_domains= +0x84/0x230=20 [14927.669198] [c0000001fbfb3650] [c000000000091228] .__do_softirq+0x148/0x= 310=20 [14927.669205] [c0000001fbfb3740] [c000000000091608] .irq_exit+0xc8/0xe0=20 [14927.669212] [c0000001fbfb37c0] [c00000000001d214] .timer_interrupt+0x154= /0x2e0=20 [14927.669220] [c0000001fbfb3870] [c0000000000024d4] decrementer_common+0x1= 54/0x180=20 [14927.669230] --- Exception: 901 at .plpar_hcall_norets+0x84/0xd4=20 [14927.669230] LR =3D .check_and_cede_processor+0x24/0x40=20 [14927.669240] [c0000001fbfb3b60] [0000000000000001] 0x1 (unreliable)=20 [14927.669247] [c0000001fbfb3bd0] [c00000000006d070] .shared_cede_loop+0x50= /0xe0=20 [14927.669256] [c0000001fbfb3c90] [c0000000005b818c] .cpuidle_enter+0x2c/0x= 40=20 [14927.669263] [c0000001fbfb3d00] [c0000000005b8ad0] .cpuidle_idle_call+0xf= 0/0x300=20 [14927.669270] [c0000001fbfb3db0] [c00000000005dab0] .pSeries_idle+0x10/0x4= 0=20 [14927.669278] [c0000001fbfb3e20] [c0000000000171b8] .cpu_idle+0x158/0x2a0= =20 [14927.669285] [c0000001fbfb3ed0] [c00000000074c030] .start_secondary+0x3a4= /0x3ac=20 [14927.669293] [c0000001fbfb3f90] [c00000000000976c] .start_secondary_prolo= g+0x10/0x14=20 [14927.669299] Instruction dump:=20 [14927.669303] 7fbbf040 3bdeff50 419e01f0 3f400020 3f02ff69 3ae00000 3ac000= 00 3b18d1b0 =20 [14927.669314] 635a0200 60000000 e93c0912 e95e00c0 e94a0048 7929= 1f24 7fe8482a =20 [14927.669334] ---[ end trace ac4936baffc8b47b ]---=20 [14927.671261] =20 [14927.671266] Oops: Kernel access of bad area, sig: 11 [#2]=20 [14927.671272] SMP NR_CPUS=3D1024 NUMA pSeries=20 CAI Qian >=20 > Cheers, >=20 > Dave. > -- > Dave Chinner > david@fromorbit.com > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >=20 From qcai@redhat.com Wed May 22 22:21:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B5CC829DF8 for ; Wed, 22 May 2013 22:21:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5C343304059 for ; Wed, 22 May 2013 20:21:19 -0700 (PDT) X-ASG-Debug-ID: 1369279277-04bdf07818710c0001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id YNKvkKMfF7OTNAl4 for ; Wed, 22 May 2013 20:21:17 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4N3LHg8002336; Wed, 22 May 2013 23:21:17 -0400 Date: Wed, 22 May 2013 23:21:17 -0400 (EDT) From: CAI Qian To: xfs@oss.sgi.com Cc: stable@vger.kernel.org Message-ID: <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> In-Reply-To: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> Subject: 3.9.3: Oops running xfstests MIME-Version: 1.0 X-ASG-Orig-Subj: 3.9.3: Oops running xfstests Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: 1z15RCXYIM2Vs2Z2kweVlwx+OdrMqA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369279277 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131757 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Fedora-19 based distro and LVM partitions. [ 301.385639] XFS (dm-2): Mounting Filesystem [ 301.434479] XFS (dm-2): Ending clean mount [ 301.972477] XFS (dm-0): Mounting Filesystem [ 302.264395] XFS (dm-0): Ending clean mount [ 302.819270] BUG: unable to handle kernel paging request at ffff8801fbf19000 [ 302.858096] IP: [] memmove+0x4a/0x1a0 [ 302.886832] PGD 1ddf067 PUD 20bdf9067 PMD 1fb92e063 PTE 80000001fbf19161 [ 302.923831] Oops: 0003 [#1] SMP [ 302.939820] Modules linked in: lockd sunrpc nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6table_nat nf_nat_ipv6 ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter ip_tables sg iTCO_wdt e1000e iTCO_vendor_support ixgbe mdio dca ptp pps_core pcspkr hpwdt hpilo lpc_ich microcode mfd_core xfs libcrc32c sd_mod crc_t10dif ata_generic pata_acpi mgag200 i2c_algo_bit drm_kms_helper ata_piix ttm drm libata i2c_core hpsa dm_mirror dm_region_hash dm_log dm_mod [ 303.231016] CPU 3 [ 303.240132] Pid: 19129, comm: attr Not tainted 3.9.3 #1 HP ProLiant DL120 G7 [ 303.278111] RIP: 0010:[] [] memmove+0x4a/0x1a0 [ 303.316747] RSP: 0018:ffff8801d1bd5ad8 EFLAGS: 00010286 [ 303.343135] RAX: ffff8801fbeb0020 RBX: ffff8801fd7e0000 RCX: 000000000000d00b [ 303.381919] RDX: fffffffffff96fd8 RSI: ffff8801fbf193f8 RDI: ffff8801fbf19000 [ 303.420250] RBP: ffff8801d1bd5b30 R08: 7720657079742065 R09: 6c75646f6d202b50 [ 303.459969] R10: 465320646574726f R11: 707075736e75206e R12: ffff8801fbeb0000 [ 303.498346] R13: 00000000000003d8 R14: 0000000000001800 R15: 000000000000007b [ 303.535369] FS: 00007f0026971740(0000) GS:ffff88020b460000(0000) knlGS:0000000000000000 [ 303.576159] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 303.604432] CR2: ffff8801fbf19000 CR3: 00000001e6403000 CR4: 00000000000407e0 [ 303.640327] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 303.675585] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 303.711631] Process attr (pid: 19129, threadinfo ffff8801d1bd4000, task ffff8801e676b580) [ 303.753011] Stack: [ 303.762850] ffffffffa01971a1 0000000000000000 0000000000000000 ffff8801fbeb0020 [ 303.799908] ffff8801fbeb0000 0000000000000018 ffff8801fbeb0000 0000000000000000 [ 303.836554] ffff8801e2066618 ffff8801d3ac2680 ffff8801d16d9a20 ffff8801d1bd5b68 [ 303.874096] Call Trace: [ 303.886242] [] ? xfs_attr_leaf_moveents.isra.2+0x91/0x280 [xfs] [ 303.925533] [] xfs_attr_leaf_compact+0xd7/0x130 [xfs] [ 303.962494] [] xfs_attr_leaf_add+0xce/0x170 [xfs] [ 303.996629] [] xfs_attr_leaf_addname+0xc0/0x3d0 [xfs] [ 304.033242] [] ? xfs_bmap_one_block+0x3e/0xa0 [xfs] [ 304.069208] [] xfs_attr_set_int+0x30c/0x420 [xfs] [ 304.100911] [] ? setxattr+0xa4/0x1c0 [ 304.126845] [] xfs_attr_set+0x7f/0x90 [xfs] [ 304.156492] [] xfs_xattr_set+0x42/0x70 [xfs] [ 304.185868] [] generic_setxattr+0x62/0x80 [ 304.214985] [] __vfs_setxattr_noperm+0x63/0x1b0 [ 304.245755] [] vfs_setxattr+0xb5/0xc0 [ 304.273386] [] setxattr+0x126/0x1c0 [ 304.299844] [] ? kmem_cache_free+0x1cd/0x1e0 [ 304.329476] [] ? final_putname+0x22/0x50 [ 304.357290] [] ? putname+0x2b/0x40 [ 304.382481] [] ? user_path_at_empty+0x5f/0x90 [ 304.412902] [] ? __sb_start_write+0x49/0x100 [ 304.442884] [] sys_lsetxattr+0x8f/0xd0 [ 304.469523] [] system_call_fastpath+0x16/0x1b [ 304.502054] Code: 00 00 48 81 fa a8 02 00 00 72 05 40 38 fe 74 41 48 83 ea 20 48 83 ea 20 4c 8b 1e 4c 8b 56 08 4c 8b 4e 10 4c 8b 46 18 48 8d 76 20 <4c> 89 1f 4c 89 57 08 4c 89 4f 10 4c 89 47 18 48 8d 7f 20 73 d4 [ 304.605187] RIP [] memmove+0x4a/0x1a0 [ 304.631499] RSP [ 304.649339] CR2: ffff8801fbf19000 [ 304.665667] ---[ end trace b3069cd0e14b6ad0 ]--- [ 304.665670] general protection fault: 0000 [#2] SMP [ 304.665682] Modules linked in: lockd sunrpc nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6table_nat nf_nat_ipv6 ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter ip_tables sg iTCO_wdt e1000e iTCO_vendor_support ixgbe mdio dca ptp pps_core pcspkr hpwdt hpilo lpc_ich microcode mfd_core xfs libcrc32c sd_mod crc_t10dif ata_generic pata_acpi mgag200 i2c_algo_bit drm_kms_helper ata_piix ttm drm libata i2c_core hpsa dm_mirror dm_region_hash dm_log dm_mod [ 304.665684] CPU 2 [ 304.665684] Pid: 1202, comm: rhts-test-runne Tainted: G D 3.9.3 #1 HP ProLiant DL120 G7 [ 304.665687] RIP: 0010:[] [] avc_has_perm_noaudit+0x72/0x110 [ 304.665688] RSP: 0018:ffff8801dee91cd8 EFLAGS: 00010202 [ 304.665688] RAX: 00010a102504ff45 RBX: 0000000000000143 RCX: ffff8801f9a82df0 [ 304.665689] RDX: ffff8801f9a82e10 RSI: 0000000000000004 RDI: 0000000000000143 [ 304.665689] RBP: ffff8801dee91d10 R08: 0000000000000000 R09: ffff8801dee91d34 [ 304.665690] R10: 0000000000000001 R11: ffff880200937800 R12: 0000000000000143 [ 304.665690] R13: 0000000000200000 R14: 0000000000000000 R15: 0000000000000004 [ 304.665691] FS: 00007f7f2c2b7740(0000) GS:ffff88020b440000(0000) knlGS:0000000000000000 [ 304.665692] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 304.665692] CR2: 0000000001d5e0a8 CR3: 00000001def1c000 CR4: 00000000000407e0 [ 304.665693] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 304.665694] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 304.665694] Process rhts-test-runne (pid: 1202, threadinfo ffff8801dee90000, task ffff8801e00a5040) [ 304.665694] Stack: [ 304.665696] ffff8801dee91da8 0000000000000296 0000000000200000 0000000000000143 [ 304.665697] 0000000000000000 0000000000000004 ffff8801fb965a00 ffff8801dee91d90 [ 304.665698] ffffffff8129966c ffff880200000000 ffffffff8105e848 000000d000000002 [ 304.665698] Call Trace: [ 304.665701] [] cred_has_capability+0x5c/0x100 [ 304.665702] [] ? dup_mm+0x208/0x660 [ 304.665705] [] ? alloc_pages_current+0xa9/0x170 [ 304.665706] [] selinux_capable+0x2e/0x40 [ 304.665707] [] selinux_vm_enough_memory+0x35/0x50 [ 304.665710] [] security_vm_enough_memory_mm+0x13/0x20 [ 304.665710] [] dup_mm+0x1ef/0x660 [ 304.665712] [] copy_process.part.26+0x9d9/0x13d0 [ 304.665713] [] do_fork+0xad/0x340 [ 304.665714] [] ? get_unused_fd_flags+0x30/0x40 [ 304.665715] [] sys_clone+0x16/0x20 [ 304.665717] [] stub_clone+0x69/0x90 [ 304.665718] [] ? system_call_fastpath+0x16/0x1b [ 304.665727] Code: db 81 31 c0 65 ff 04 25 00 0a 01 00 48 8d 4a e0 48 85 d2 48 0f 45 c1 eb 0d 48 8b 40 20 48 85 c0 74 3f 48 83 e8 20 48 85 c0 74 36 <3b> 18 75 ea 66 3b 70 08 75 e4 44 3b 60 04 75 de 48 8d 50 0c 48 [ 304.665728] RIP [] avc_has_perm_noaudit+0x72/0x110 [ 304.665729] RSP [ 304.665763] ---[ end trace b3069cd0e14b6ad1 ]--- [ 304.898489] ============================================================================= [ 304.898489] BUG kmalloc-4096 (Tainted: G D ): Padding overwritten. 0xffff8801fbeb7c28-0xffff8801fbeb7fff [ 304.898490] ----------------------------------------------------------------------------- [ 304.898490] [ 304.898491] INFO: Slab 0xffffea0007efac00 objects=7 used=7 fp=0x (null) flags=0x20000000004080 [ 304.898492] Pid: 357, comm: systemd-udevd Tainted: G B D 3.9.3 #1 [ 304.898492] Call Trace: [ 304.898495] [] slab_err+0xc2/0xf0 [ 304.898497] [] ? init_object+0x3d/0x70 [ 304.898498] [] slab_pad_check.part.41+0xf5/0x170 [ 304.898500] [] ? seq_read+0x2e3/0x3b0 [ 304.898501] [] check_slab+0x73/0x100 [ 304.898503] [] alloc_debug_processing+0x21/0x118 [ 304.898504] [] __slab_alloc+0x3b8/0x4a2 [ 304.898506] [] ? vma_link+0xb7/0xc0 [ 304.898508] [] ? seq_read+0x2e3/0x3b0 [ 304.898509] [] kmem_cache_alloc_trace+0x1b1/0x200 [ 304.898510] [] seq_read+0x2e3/0x3b0 [ 304.898512] [] vfs_read+0x9c/0x170 [ 304.898513] [] sys_read+0x49/0xa0 [ 304.898514] [] system_call_fastpath+0x16/0x1b CAI Qian From david@fromorbit.com Wed May 22 22:46:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CAB4629DF8 for ; Wed, 22 May 2013 22:46:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4B856AC001 for ; Wed, 22 May 2013 20:46:18 -0700 (PDT) X-ASG-Debug-ID: 1369280775-04cb6c47416ff80001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 2yG0Z3nlS1lyBTrR for ; Wed, 22 May 2013 20:46:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqwNAKyPnVF5LBBG/2dsb2JhbABagwiDa7kghSQEAYEJF3SCIwEBBSMECwEjIwwECAECEQQBAQECAgUhAgIPBSUDEw4TiAyORJskkW8WgRCMSw+BHQcGgjuBEwOXN5FBgyEqgS0 Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl6.internode.on.net with ESMTP; 23 May 2013 13:16:14 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfMTj-0006ZI-Og; Thu, 23 May 2013 13:46:11 +1000 Date: Thu, 23 May 2013 13:46:11 +1000 From: Dave Chinner To: CAI Qian Cc: LKML , stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: 3.9.2: xfstests triggered panic Message-ID: <20130523034611.GX24543@dastard> X-ASG-Orig-Subj: Re: 3.9.2: xfstests triggered panic References: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> <20130522095300.GK29466@dastard> <1483868349.4996990.1369279016162.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1483868349.4996990.1369279016162.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369280775 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131757 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 22, 2013 at 11:16:56PM -0400, CAI Qian wrote: > ----- Original Message ----- > > From: "Dave Chinner" > > To: "CAI Qian" > > Cc: "LKML" , stable@vger.kernel.org, xfs@oss.sgi.com > > Sent: Wednesday, May 22, 2013 5:53:00 PM > > Subject: Re: 3.9.2: xfstests triggered panic > > > > On Wed, May 22, 2013 at 04:39:58AM -0400, CAI Qian wrote: > > > Reproduced on almost all s390x guests by running xfstests. > > > > > > 14634.396658¨ XFS (dm-1): Mounting Filesystem > > > 14634.525522¨ XFS (dm-1): Ending clean mount > > > 14640.413007¨ <000000000017c6d4>¨ idle_balance+0x1a0/0x340 > > > 14640.413010¨ <000000000063303e>¨ __schedule+0xa22/0xaf0 > > > 14640.428279¨ <0000000000630da6>¨ schedule_timeout+0x186/0x2c0 > > > 14640.428289¨ <00000000001cf864>¨ rcu_gp_kthread+0x1bc/0x298 > > > 14640.428300¨ <0000000000158c5a>¨ kthread+0xe6/0xec > > > 14640.428304¨ <0000000000634de6>¨ kernel_thread_starter+0x6/0xc > > > 14640.428308¨ <0000000000634de0>¨ kernel_thread_starter+0x0/0xc > > > 14640.428311¨ Last Breaking-Event-Address: > > > 14640.428314¨ <000000000016bd76>¨ walk_tg_tree_from+0x3a/0xf4 > > > 14640.428319¨ list_add corruption. next->prev should be prev > > > (0000000000000918 > > > ), but was (null). (next= (null)). > > > > Where's XFS in this? walk_tg_tree_from() is part of the scheduler > > code. This kind of implies a stack corruption.... > > > > > Sometimes, this pops up, > > > [16907.275002] WARNING: at kernel/rcutree.c:1960 > > > > > > or this, > > > 15316.154171¨ XFS (dm-1): Mounting Filesystem > > > 15316.255796¨ XFS (dm-1): Ending clean mount > > > 15320.364246¨ 00000000006367a2: e310b0080004 lg > > > %r1,8(%r > > > 11) > > > 15320.364249¨ 00000000006367a8: 41101010 la > > > %r1,16(% > > > r1) > > > 15320.364251¨ 00000000006367ac: e33010000004 lg > > > %r3,0(%r > > > 1) > > > 15320.364252¨ Call Trace: > > > 15320.364252¨ Last Breaking-Event-Address: > > > 15320.364253¨ � <0000000000000000>¨ Kernel stack overflow. > > > 15320.364308¨ CPU: 0 Tainted: GF W 3.9.2 #1 > > > 15320.364309¨ Process rhts-test-runne (pid: 625, task: 000000003dccc890, > > > ksp: 0 > > > > .... and there you go - a stack overflow. Your kernel stack size is > > too small. > > > > I'd suggest that you need 16k stacks on s390 - IIRC every function > > call has 128 byte stack frame, and there are call chains 70-80 > > functions deep in the storage stack... > Hmm, I am unsure how to set to 16k stack there Are you build a 64 bit s390 kernel or a 32 bit kernel? 32 bit kernels only have an 8k stack size, 64 bit kernels are 16k (see arch/s390/Makefile). $ git grep STACK_SIZE arch/s390 |head -2 arch/s390/Makefile:STACK_SIZE := 8192 arch/s390/Makefile:STACK_SIZE := 16384 As it is, the stack frame usage is worse than I thought: $ git grep STACK_FRAME_OVERHEAD arch/s390 |head -2 arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 96 /* size of minimum stack frame */ arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 160 /* size of minimum stack frame */ Overhead is 96 bytes for 32 bit and 160 bytes for 64 bit. So 16k stack size is going to have big troubles with a 70-80 function deep call chain. As for powerpc: arch/powerpc/include/asm/ppc_asm.h:#define STACKFRAMESIZE 256 Yeah, same issue. But, seriously, these stack traces are meaningless to anyone not familiar with s390 or power7 - they indicate a problem detected in the idle loop, not where ever the stack overran. Can you please work with the s390/power7 people to obtain whatever stack it was that overflowed, and we can go from there. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 22 22:51:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D827F29DF8 for ; Wed, 22 May 2013 22:51:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B4D4F30404E for ; Wed, 22 May 2013 20:51:21 -0700 (PDT) X-ASG-Debug-ID: 1369281076-04cbb0049e75e50001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id LEqellCI6uTi4Fkc for ; Wed, 22 May 2013 20:51:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgMQAJeQnVF5LBBG/2dsb2JhbABAGoMIMLxbhSQEAYEJF3SCIwEBBTocIxAIAxgJJQ8FJQMhE4gMDTO7ExaNaoEdB4NUA5c3kUGDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl6.internode.on.net with ESMTP; 23 May 2013 13:21:16 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfMYd-0006Zx-ER; Thu, 23 May 2013 13:51:15 +1000 Date: Thu, 23 May 2013 13:51:15 +1000 From: Dave Chinner To: CAI Qian Cc: xfs@oss.sgi.com, stable@vger.kernel.org Subject: Re: 3.9.3: Oops running xfstests Message-ID: <20130523035115.GY24543@dastard> X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369281076 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131759 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Wed, May 22, 2013 at 11:21:17PM -0400, CAI Qian wrote: > Fedora-19 based distro and LVM partitions. Cai: As I've asked previously please include all the relevant information about your test system and the workload it is running when the problem occurs. Stack traces aren't any good to us in isolation, and just dumping them on us causes unnecessary round trips. http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > [ 304.898489] ============================================================================= > [ 304.898489] BUG kmalloc-4096 (Tainted: G D ): Padding overwritten. 0xffff8801fbeb7c28-0xffff8801fbeb7fff > [ 304.898490] ----------------------------------------------------------------------------- > [ 304.898490] > [ 304.898491] INFO: Slab 0xffffea0007efac00 objects=7 used=7 fp=0x (null) flags=0x20000000004080 > [ 304.898492] Pid: 357, comm: systemd-udevd Tainted: G B D 3.9.3 #1 > [ 304.898492] Call Trace: > [ 304.898495] [] slab_err+0xc2/0xf0 > [ 304.898497] [] ? init_object+0x3d/0x70 > [ 304.898498] [] slab_pad_check.part.41+0xf5/0x170 > [ 304.898500] [] ? seq_read+0x2e3/0x3b0 > [ 304.898501] [] check_slab+0x73/0x100 > [ 304.898503] [] alloc_debug_processing+0x21/0x118 > [ 304.898504] [] __slab_alloc+0x3b8/0x4a2 > [ 304.898506] [] ? vma_link+0xb7/0xc0 > [ 304.898508] [] ? seq_read+0x2e3/0x3b0 > [ 304.898509] [] kmem_cache_alloc_trace+0x1b1/0x200 > [ 304.898510] [] seq_read+0x2e3/0x3b0 > [ 304.898512] [] vfs_read+0x9c/0x170 > [ 304.898513] [] sys_read+0x49/0xa0 > [ 304.898514] [] system_call_fastpath+0x16/0x1b That's something different, and indicates memory corruption is being seen as a result of something that is occuring through the /proc or /sys filesystems. Unrelated to XFS, I think... Cheers, Dave. -- Dave Chinner david@fromorbit.com From qcai@redhat.com Wed May 22 23:11:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9B35029DF8 for ; Wed, 22 May 2013 23:11:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5DD91304039 for ; Wed, 22 May 2013 21:11:34 -0700 (PDT) X-ASG-Debug-ID: 1369282292-04bdf0781773430001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id eNu7BA4ByezvNoNH for ; Wed, 22 May 2013 21:11:33 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4N4BUbw028883; Thu, 23 May 2013 00:11:30 -0400 Date: Thu, 23 May 2013 00:11:30 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: LKML , stable@vger.kernel.org, xfs@oss.sgi.com Message-ID: <915421596.5010452.1369282290151.JavaMail.root@redhat.com> In-Reply-To: <20130523034611.GX24543@dastard> References: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> <20130522095300.GK29466@dastard> <1483868349.4996990.1369279016162.JavaMail.root@redhat.com> <20130523034611.GX24543@dastard> Subject: Re: 3.9.2: xfstests triggered panic MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.2: xfstests triggered panic Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.2: xfstests triggered panic Thread-Index: nw1i+XDAeRDiEuz7zqXGB08vIYjsQw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1369282293 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131759 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Dave Chinner" > To: "CAI Qian" > Cc: "LKML" , stable@vger.kernel.org, xfs@os= s.sgi.com > Sent: Thursday, May 23, 2013 11:46:11 AM > Subject: Re: 3.9.2: xfstests triggered panic >=20 > On Wed, May 22, 2013 at 11:16:56PM -0400, CAI Qian wrote: > > ----- Original Message ----- > > > From: "Dave Chinner" > > > To: "CAI Qian" > > > Cc: "LKML" , stable@vger.kernel.org, > > > xfs@oss.sgi.com > > > Sent: Wednesday, May 22, 2013 5:53:00 PM > > > Subject: Re: 3.9.2: xfstests triggered panic > > >=20 > > > On Wed, May 22, 2013 at 04:39:58AM -0400, CAI Qian wrote: > > > > Reproduced on almost all s390x guests by running xfstests. > > > >=20 > > > > 14634.396658=C2=A8 XFS (dm-1): Mounting Filesystem > > > > 14634.525522=C2=A8 XFS (dm-1): Ending clean mount > > > > 14640.413007=C2=A8 <000000000017c6d4>=C2=A8 idle_balance+0x1a0/0x3= 40 > > > > 14640.413010=C2=A8 <000000000063303e>=C2=A8 __schedule+0xa22/0xaf0 > > > > 14640.428279=C2=A8 <0000000000630da6>=C2=A8 schedule_timeout+0x186= /0x2c0 > > > > 14640.428289=C2=A8 <00000000001cf864>=C2=A8 rcu_gp_kthread+0x1bc/0= x298 > > > > 14640.428300=C2=A8 <0000000000158c5a>=C2=A8 kthread+0xe6/0xec > > > > 14640.428304=C2=A8 <0000000000634de6>=C2=A8 kernel_thread_starter+= 0x6/0xc > > > > 14640.428308=C2=A8 <0000000000634de0>=C2=A8 kernel_thread_starter+= 0x0/0xc > > > > 14640.428311=C2=A8 Last Breaking-Event-Address: > > > > 14640.428314=C2=A8 <000000000016bd76>=C2=A8 walk_tg_tree_from+0x3a= /0xf4 > > > > 14640.428319=C2=A8 list_add corruption. next->prev should be prev > > > > (0000000000000918 > > > > ), but was (null). (next=3D (null)). > > >=20 > > > Where's XFS in this? walk_tg_tree_from() is part of the scheduler > > > code. This kind of implies a stack corruption.... > > >=20 > > > > Sometimes, this pops up, > > > > [16907.275002] WARNING: at kernel/rcutree.c:1960 > > > >=20 > > > > or this, > > > > 15316.154171=C2=A8 XFS (dm-1): Mounting Filesystem > > > > 15316.255796=C2=A8 XFS (dm-1): Ending clean mount > > > > 15320.364246=C2=A8 00000000006367a2: e310b0080004 = lg > > > > %r1,8(%r > > > > 11) > > > > 15320.364249=C2=A8 00000000006367a8: 41101010 = la > > > > %r1,16(% > > > > r1) > > > > 15320.364251=C2=A8 00000000006367ac: e33010000004 = lg > > > > %r3,0(%r > > > > 1) > > > > 15320.364252=C2=A8 Call Trace: > > > > 15320.364252=C2=A8 Last Breaking-Event-Address: > > > > 15320.364253=C2=A8 =EF=BF=BD <0000000000000000>=C2=A8 Kernel stack= overflow. > > > > 15320.364308=C2=A8 CPU: 0 Tainted: GF W 3.9.2 #1 > > > > 15320.364309=C2=A8 Process rhts-test-runne (pid: 625, task: > > > > 000000003dccc890, > > > > ksp: 0 > > >=20 > > > .... and there you go - a stack overflow. Your kernel stack size is > > > too small. > > >=20 > > > I'd suggest that you need 16k stacks on s390 - IIRC every function > > > call has 128 byte stack frame, and there are call chains 70-80 > > > functions deep in the storage stack... > > Hmm, I am unsure how to set to 16k stack there >=20 > Are you build a 64 bit s390 kernel or a 32 bit kernel? 32 bit > kernels only have an 8k stack size, 64 bit kernels are 16k (see > arch/s390/Makefile). It is 64-bit. >=20 > $ git grep STACK_SIZE arch/s390 |head -2 > arch/s390/Makefile:STACK_SIZE :=3D 8192 > arch/s390/Makefile:STACK_SIZE :=3D 16384 >=20 > As it is, the stack frame usage is worse than I thought: >=20 > $ git grep STACK_FRAME_OVERHEAD arch/s390 |head -2 > arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 96 = /* > size of minimum stack frame */ > arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 160 = /* > size of minimum stack frame */ >=20 > Overhead is 96 bytes for 32 bit and 160 bytes for 64 bit. So 16k > stack size is going to have big troubles with a 70-80 function deep > call chain. >=20 > As for powerpc: >=20 > arch/powerpc/include/asm/ppc_asm.h:#define STACKFRAMESIZE 256 >=20 > Yeah, same issue. >=20 > But, seriously, these stack traces are meaningless to anyone not > familiar with s390 or power7 - they indicate a problem detected > in the idle loop, not where ever the stack overran. >=20 > Can you please work with the s390/power7 people to obtain whatever > stack it was that overflowed, and we can go from there. OK, I'll do. CAI Qian >=20 > Cheers, >=20 > Dave. > -- > Dave Chinner > david@fromorbit.com >=20 From qcai@redhat.com Wed May 22 23:57:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 962647CBF for ; Wed, 22 May 2013 23:57:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 039C9AC001 for ; Wed, 22 May 2013 21:57:26 -0700 (PDT) X-ASG-Debug-ID: 1369285045-04cbb0049d79a00001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id TmG7JGLmQyo7Jnso for ; Wed, 22 May 2013 21:57:25 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4N4vKIi017067; Thu, 23 May 2013 00:57:20 -0400 Date: Thu, 23 May 2013 00:57:20 -0400 (EDT) From: CAI Qian To: linux-s390 , linuxppc-dev@lists.ozlabs.org Cc: LKML , stable@vger.kernel.org, xfs@oss.sgi.com, Steve Best , Hendrik Brueckner , Dave Chinner Message-ID: <1125086079.5019070.1369285040855.JavaMail.root@redhat.com> In-Reply-To: <20130523034611.GX24543@dastard> References: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> <20130522095300.GK29466@dastard> <1483868349.4996990.1369279016162.JavaMail.root@redhat.com> <20130523034611.GX24543@dastard> Subject: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xfstests triggered panic) MIME-Version: 1.0 X-ASG-Orig-Subj: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xfstests triggered panic) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xfstests triggered panic) Thread-Index: UrqmsS7Y5wTYDzl3iTO6fgrXyEgS3g== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369285045 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Original report: http://oss.sgi.com/archives/xfs/2013-05/msg00683.html Also seen on Power7: http://marc.info/?l=3Dlinux-kernel&m=3D136927904900692&w=3D2 CAI Qian ----- Original Message ----- > From: "Dave Chinner" > To: "CAI Qian" > Cc: "LKML" , stable@vger.kernel.org, xfs@os= s.sgi.com > Sent: Thursday, May 23, 2013 11:46:11 AM > Subject: Re: 3.9.2: xfstests triggered panic >=20 > On Wed, May 22, 2013 at 11:16:56PM -0400, CAI Qian wrote: > > ----- Original Message ----- > > > From: "Dave Chinner" > > > To: "CAI Qian" > > > Cc: "LKML" , stable@vger.kernel.org, > > > xfs@oss.sgi.com > > > Sent: Wednesday, May 22, 2013 5:53:00 PM > > > Subject: Re: 3.9.2: xfstests triggered panic > > >=20 > > > On Wed, May 22, 2013 at 04:39:58AM -0400, CAI Qian wrote: > > > > Reproduced on almost all s390x guests by running xfstests. > > > >=20 > > > > 14634.396658=C2=A8 XFS (dm-1): Mounting Filesystem > > > > 14634.525522=C2=A8 XFS (dm-1): Ending clean mount > > > > 14640.413007=C2=A8 <000000000017c6d4>=C2=A8 idle_balance+0x1a0/0x3= 40 > > > > 14640.413010=C2=A8 <000000000063303e>=C2=A8 __schedule+0xa22/0xaf0 > > > > 14640.428279=C2=A8 <0000000000630da6>=C2=A8 schedule_timeout+0x186= /0x2c0 > > > > 14640.428289=C2=A8 <00000000001cf864>=C2=A8 rcu_gp_kthread+0x1bc/0= x298 > > > > 14640.428300=C2=A8 <0000000000158c5a>=C2=A8 kthread+0xe6/0xec > > > > 14640.428304=C2=A8 <0000000000634de6>=C2=A8 kernel_thread_starter+= 0x6/0xc > > > > 14640.428308=C2=A8 <0000000000634de0>=C2=A8 kernel_thread_starter+= 0x0/0xc > > > > 14640.428311=C2=A8 Last Breaking-Event-Address: > > > > 14640.428314=C2=A8 <000000000016bd76>=C2=A8 walk_tg_tree_from+0x3a= /0xf4 > > > > 14640.428319=C2=A8 list_add corruption. next->prev should be prev > > > > (0000000000000918 > > > > ), but was (null). (next=3D (null)). > > >=20 > > > Where's XFS in this? walk_tg_tree_from() is part of the scheduler > > > code. This kind of implies a stack corruption.... > > >=20 > > > > Sometimes, this pops up, > > > > [16907.275002] WARNING: at kernel/rcutree.c:1960 > > > >=20 > > > > or this, > > > > 15316.154171=C2=A8 XFS (dm-1): Mounting Filesystem > > > > 15316.255796=C2=A8 XFS (dm-1): Ending clean mount > > > > 15320.364246=C2=A8 00000000006367a2: e310b0080004 = lg > > > > %r1,8(%r > > > > 11) > > > > 15320.364249=C2=A8 00000000006367a8: 41101010 = la > > > > %r1,16(% > > > > r1) > > > > 15320.364251=C2=A8 00000000006367ac: e33010000004 = lg > > > > %r3,0(%r > > > > 1) > > > > 15320.364252=C2=A8 Call Trace: > > > > 15320.364252=C2=A8 Last Breaking-Event-Address: > > > > 15320.364253=C2=A8 =EF=BF=BD <0000000000000000>=C2=A8 Kernel stack= overflow. > > > > 15320.364308=C2=A8 CPU: 0 Tainted: GF W 3.9.2 #1 > > > > 15320.364309=C2=A8 Process rhts-test-runne (pid: 625, task: > > > > 000000003dccc890, > > > > ksp: 0 > > >=20 > > > .... and there you go - a stack overflow. Your kernel stack size is > > > too small. > > >=20 > > > I'd suggest that you need 16k stacks on s390 - IIRC every function > > > call has 128 byte stack frame, and there are call chains 70-80 > > > functions deep in the storage stack... > > Hmm, I am unsure how to set to 16k stack there >=20 > Are you build a 64 bit s390 kernel or a 32 bit kernel? 32 bit > kernels only have an 8k stack size, 64 bit kernels are 16k (see > arch/s390/Makefile). >=20 > $ git grep STACK_SIZE arch/s390 |head -2 > arch/s390/Makefile:STACK_SIZE :=3D 8192 > arch/s390/Makefile:STACK_SIZE :=3D 16384 >=20 > As it is, the stack frame usage is worse than I thought: >=20 > $ git grep STACK_FRAME_OVERHEAD arch/s390 |head -2 > arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 96 = /* > size of minimum stack frame */ > arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 160 = /* > size of minimum stack frame */ >=20 > Overhead is 96 bytes for 32 bit and 160 bytes for 64 bit. So 16k > stack size is going to have big troubles with a 70-80 function deep > call chain. >=20 > As for powerpc: >=20 > arch/powerpc/include/asm/ppc_asm.h:#define STACKFRAMESIZE 256 >=20 > Yeah, same issue. >=20 > But, seriously, these stack traces are meaningless to anyone not > familiar with s390 or power7 - they indicate a problem detected > in the idle loop, not where ever the stack overran. >=20 > Can you please work with the s390/power7 people to obtain whatever > stack it was that overflowed, and we can go from there. >=20 > Cheers, >=20 > Dave. > -- > Dave Chinner > david@fromorbit.com >=20 From Eldorad@iburst.co.za Thu May 23 01:37:42 2013 Return-Path: X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AEA207F37 for ; Thu, 23 May 2013 01:37:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9BF97304043 for ; Wed, 22 May 2013 23:37:38 -0700 (PDT) X-ASG-Debug-ID: 1369291057-04cb6c47427b270001-NocioJ Received: from smtp.dtccom.net (smtp.dtccom.net [64.253.208.125]) by cuda.sgi.com with ESMTP id UXBiLNj8XCsNyaih (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 May 2013 23:37:37 -0700 (PDT) X-Barracuda-Envelope-From: Eldorad@iburst.co.za X-Barracuda-Apparent-Source-IP: 64.253.208.125 Received: from localhost (localhost [127.0.0.1]) by smtp.dtccom.net (Postfix) with ESMTP id B5F285AFCF1; Thu, 23 May 2013 01:37:30 -0500 (CDT) X-Virus-Scanned: amavisd-new at dtccom.net Received: from smtp.dtccom.net ([127.0.0.1]) by localhost (smtp2.dtccom.net [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dAQ+iLMgV5zx; Thu, 23 May 2013 01:37:26 -0500 (CDT) Received: from User (8ta-150-68-248.telkomadsl.co.za [41.150.68.248]) (Authenticated sender: dessa@dtccom.net) by smtp.dtccom.net (Postfix) with ESMTPA id BB21E5AFDEF; Thu, 23 May 2013 01:35:54 -0500 (CDT) Reply-To: From: "Eldorad Kuruman" Subject: Investor Relations Date: Thu, 23 May 2013 08:36:12 +0200 X-ASG-Orig-Subj: Investor Relations MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_00EB_01C2A9A6.320815FA" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-Id: <20130523063730.B5F285AFCF1@smtp.dtccom.net> X-Barracuda-Connect: smtp.dtccom.net[64.253.208.125] X-Barracuda-Start-Time: 1369291057 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 To: undisclosed-recipients:; This is a multi-part message in MIME format. ------=_NextPart_000_00EB_01C2A9A6.320815FA Content-Type: text/plain; charset="Windows-1251" Content-Transfer-Encoding: 7bit Our Ref: Eldorad Kuruman Date: 23th May 2013 Tell- :0027- 114 360 2755 Fax- :0027-865 418 133 Email: eldorad_kuruman@saciviservice.com REGARDS, Eldorad Kuruman www.agrinc.gov.za ------=_NextPart_000_00EB_01C2A9A6.320815FA Content-Type: application/octet-stream; name="DEPT OF AGRICULTURE.docx" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="DEPT OF AGRICULTURE.docx" UEsDBBQABgAIAAAAIQBdiaa1kgEAAMAFAAATAAgCW0NvbnRlbnRfVHlwZXNd LnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0lF1PwjAUhu9N/A9Lb81W 8MIYw+BC8VJNxHhduzNoXD/SU0D+vacDFlTYiOjNkrV9z/ucj3Yw+tBVsgCP ypqc9bMeS8BIWygzzdnL5D69ZgkGYQpRWQM5WwGy0fD8bDBZOcCE1AZzNgvB 3XCOcgZaYGYdGNoprdci0K+fcifku5gCv+z1rri0JoAJaYgx2HBwB6WYVyEZ f9DymsSZKUtu1+eiVc6Ujvq4zvcqPFT4TSKcq5QUgXLjC1N840o3TBkp6zM4 Uw4vCPyAQ9z5yrRrsNE9UjG9KiB5Ej48CE3kfGl9wQsr55qyztrD7OG0Zakk NPoYzXkrAZG6pKus2dFCmS3/QQ4Mqwrw7ynWcdvsifPJW4ecynayP8RZKaBI qRQOfFDQtK4j9VcVZuOyBEmj2d0LjWkseLZOb0fblmndcIQQqEHHmHy9MGlX w7eROxEC3Ufg9bd/RK7tGHWYTsuS7uxEvFVwst+POW9Cd0Is4e3536q/E7wN pJl2af0virF9nKJ6z4zz+v0dfgIAAP//AwBQSwMEFAAGAAgAAAAhAB6RGrfz AAAATgIAAAsACAJfcmVscy8ucmVscyCiBAIooAACAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AACMkttKA0EMhu8F32HIfTfbCiLS2d5IoXci6wOEmewBdw7MpNq+vaMgulDb Xub058tP1puDm9Q7pzwGr2FZ1aDYm2BH32t4bbeLB1BZyFuagmcNR86waW5v 1i88kZShPIwxq6Lis4ZBJD4iZjOwo1yFyL5UupAcSQlTj5HMG/WMq7q+x/RX A5qZptpZDWln70C1x1g2X9YOXTcafgpm79jLiRXIB2Fv2S5iKmxJxnKNain1 LBpsMM8lnZFirAo24Gmi1fVE/1+LjoUsCaEJic/zfHWcA1peD3TZonnHrzsf IVksFn17+0ODsy9oPgEAAP//AwBQSwMEFAAGAAgAAAAhAP2rLjc5AQAAPQQA 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 KaCpUiaWG/Wx5BJlSkqPfPgdb9R65FOF5WwyK9g03xpvOKy9x8hH+m58644y Rj7SmARRUlLBOMsNCV9Rv24XRLQuQj5ArmbTKxNvS6fRSkafQFMXceq+C/V3 R/2FfvHHLW3OOlHbif/CKPsnbMLYP6kmkMgAfsZIDO3ibe8AAAP0SURBVH/a SPXIFD/xX9W1LHbo6855YSb4h3G9G1fdtsfeX0jZEkn1lpWAmCE/4YqFPSWR Dz/mwwioNl4nnF4ory5+xwhz8Pi606TIs0C5Gq22lHwWCPOWcT3nm84Hz0aU 7PhQpJi8iZEBls4l6Z0gexQZWdQVwpWEDZnZ+Qrj8cvMCAgVEiqweI2ppsJh CrnGyIefyWRKqX6mavO08eXaBlY0/n/D+3IRULt27TyZlWWqo5D9PHqOWhQc JBPhJ6uSfMHB7VDfkk7fyqf4fDmFgmOcev8oJSBWUB14znZ3d+dJOC8olZ/P n88TXwR6dsuG1VoTosR3IBJ9P0ekF/NFaqeVUbY+QlxVOlKJvIKzSTBUouTj ZdEpENEBQYv0pSHviXuQKbsODfbC5QcjUeHiQRrczLLhqJENFzz77MDuzM4b 0tJubZOGNe1V5k505HyZ0aYfdQoiLbl7eyCf5+heqhVZaGLoRmTG+YSYrH8F 6Q6qBqwxUVLVxzL7zizYrrVclIF1RRnMhlPphJ18+sMGV8TnFn69MH7tjSpB HYLdKuWvSmZRKKa0YFz0UKdZEnXZa8er5jwGyDbWgiZfIs2vNNzHT3DdV5NL M4uv5CZWVq1YbP5FbTcW1drUUhfYQVJZnSApHV0cuyoKHcVpnDdL8XX+i7Do elbScb3CBhBaYb2Qr2kKxPsm6gXrUeqssZGxqW42LnwobCtrDHIlh2qXWvNr tO6ZYnIbU2UYCaF/+wvf6Yo5ES6rDfSznHAxQnrhUHSPDhBi4Vxgvb5Rcuzq AhHKF4XyOVhRVjR+zmY45es0UGf5L0/lLnKwtvJAdm9lq/yS41SI4kHmX0oQ wa6Yksan9Uqetosqk+Ek3zjQksJjCuhanEaieNrVN6dDuwpZqZiwTDCnvoD3 5Sjj9sGjUmDDgUyHqDGYWvXAMm2nk9EQDVawnn3KBRB7R9nOwIp97KmynPwM OSyBF2l47H6SJA/zITmMXiuTRLAVcRUzqrqbrPn1AUsI9AleDsQb56irc1yt 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 bYw8xMzaOUDWLSjVQD2lPoiiDXsjsm/E5rYqlDsAAAP0SURBVJ69Ga9L3Xf4 +LC/AjF8NWvi7CGDQ2Y4JD+kVX9evbTxQl4z49DTlZ3np5UPXCnWBrLFqa2Y Vgies6zkDgtt9W2xNlsRf501fTiO0FJjWx3wrJ8Hoje24WD5QjyUAzZcvHgx DoLZPuB/dzDVdxySTuI7OAjFnOmgsj4GojDIl9huA+2OQV8+Rr9YQP2pqTrQ n+3M10cePsyxtbg+MWskEdyGzWwRzw/ZOh999UadbBRpSEXwYCezJr2UF2kF TkSBxijPPPi9OP3+UaSSbainaKysOPGR8TuUZyUPYwNHFh7fxdjXsZowK14w DEyND22tZ3sg43dFsDHYoeAdy8ZYdsB2RtFFY2VPFwbtLDzjNmMg11kLeKTr 62OjaBghj8EcdUJ5JcpcwiFksR5pA2av4/klvecHfTk+/aNfn2AMc1HWF+XC 8HsuK6CAnf8O5vY3YzV89lQA7syLyMNGmFIqystwDUN5BG+W78JcbtJ/g4Ab ezYodpDmcrxu9J4NTMHsf/lZucagTi4u96H6cQfaH51hu2Pu5+trjQmxxIIw 6RqjsoBE+ROYtNitW7YEnTh2zFUL+wVoxVnmFRT0dXB0XNKqZcstjg42tTwt swI611PWU2lgSJdC5megtxKeoMi/lWuvSTb3VhwIz46Ljs+6eP5i7IlT52MO n7sYtSPidtRxW1u7evi4bDYfuk1sd2Mqsazn69c6UtswH8rOhddr+JFzcbSk Xq0D6CsoLDRrULZ/Rqae+revRc7QauMQCoxsOHnAhubFoWHS80PnDfI7Q/Ps tXv/mSjq3TaQlDIdLVu69NLW7ftmX7wcve16RMKZK1fjb0WlaoU8MxdvtcxF tmPHTiH8djLZ25jp7sem645fjIU5ck5mjszTffiEl+qAdam8cPGiSdlZZefC VL6BvZu+1LC+R4PYG/d1B8LT31q39cCTWfQ+SWdQFrZjvNm9h6BvxxG4zaB+ iOefYB2psCGd5Caw0f2M32yxfgAXb4IslJ+LcvHIc4nz4P5rPHPEe46kmoN7 Fiz1hqB7hqen5zL85Ylnh5+8SXbF37p4zzxb/h2LTSkd9+vhDeEHHCAMti6o tzHyfYt2vsK9JfKyphPDjYWCLOSXLjy/jTzRyMMynlq4LnI/it53Qv1fwIHv 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 mjhxQvi4ceOG+Pn7C+iPx8CBA88AnmFDe9VdCpZlCBvepkbfpdhkVTqHYfgn QzGUXNJFVMqz2CBG4WKqQ5/mYiOYxHFPjMtgg2DhOmuoscC9VGKkg3K/4Fpa FI+l6l/RUyiBTZXZTZ8BCc03ZtMZV41vkFXIe2IsxirShiwYC6s0HwLFUsyL AjhAQSj3KerWFck4WmEzZUF+F/2Fciwf4cBj/4qEfrHbn/3o9zJGPkwVAoHO wxhmFbEQDf0ERTcLP+7ggCIpNHFC3oUoy6w3pnBX6JFPRYMDImINt+Uo+4M+ L6g+dntzGu0UUz1n1hrysSJIMZlURW1Uv38EgQopID5xavJvt716PeOTnr36 eLm6uJibwbW7wtxcZmNtLebm5Kgg/NMi9HYgNIMMNR8+dCj31pX9SvPclNQB rQPdmQtyPSpVfer2w/yGTXxt3T3tKDIyOe3c3hPWA8OUZojiqYnMUqYm5ih0 mTfTzV002nx3jaA0F8F/gqASp3+4bBW0+TbWgszBMS9erlZ27B3o1KldLfmt 20lp2/Zcux5+JTY2N1udpDQzj2rVrt2EESNG1K7foIE5t/3znDmqOnXqCN61 mylruNuSo51pVjVTCuM+2i7Z8LBz0+cHNoSqdqEsnz0hrN1zQ3IuyirV/3m7 C7UEa6+sxAiKHZCeO3lIaw7kw5Qj+OZ08MCBpC1btly+gZgettbyES5uDgoo Wni1bObvlQEZ0tyFp6Py1XYJ5lm5WoqPV+pys9zsBVLBFFSuwz9aOYIvyER1 pp2FTw0/mxxnS5Wyhq2Om5Lti3POfvftHjZpiHB64vh9TebDzNyOIT527k7W 9CApi/68GJ9sbu+rnDjpQfTpmQAAA/RJREFUZYMx8P1792jqKy9of3q3nczb xUbIir5B3/9xVwxsNUwVULt+/s4dO26I6gcnRI36529/Xv+3a8QZU0B6WOMU y9FM+YT8FlNA/BzPWKNsGi6OUhqJ9yw85iiWHC9Iku+UpID4GTuvBFuL47z8 iXyvGbXxRFpwqG8V6ipm9IdnF7FR/o5+lNKCYyUE9IN9w3HMnrElKaCi/jNl wH7ZZiJPKS04RsCgBlgNnUMg7EBe9kz9PO6XIj87kGRPzhzBs7fxusVztm25 gENSEMqzfVUxLTjjvHoKCHUydWHst42zsVYbj9uQHocC4sKsvQcj9BtAJh+z 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 Oubk96gzG++voD7JTQd+c2RJ9mPHfszYKwMb+rCfsmkc4M3UmNAP1vDidiTH qrjn4Htz4I7mc9YULHKcGWmqLORidY3d1HAe1pQDi5plHFKfUB8L+H+FBtp7 evso9JN917FiRle0xesBkl9xG+qbqvdAgTxb3DBoTAAAA/RJREFU8L4L4MGe F6TgfIDHBOT7Bfk5KijLb8qy4YvCXDTA2GKRJxvwCdL3H8++RPlXUG/fko5G 9XnQNtsOzUcbiZDh1DFep3jHWpCDTMDjG7Q5C+/ZrZJ50XteHwVoj7UKv9Ur VZTsF8owe+Q/yDsUf/nAxsH4WAFjKsoY7KPwXkBeVgqpget1rIkFpublf/FZ hQiIgcJqwvDZtg1GOj5hDX0yPByVgo86zrxrbRliwQkUk6rTbYvzyHjm+UGO G7ddSItNEjX9+g+28alRw3zZkgVpfh45FsMHh1rr7YAYAa1ceTJ1dA9/pxhQ Tpciku/uPxAl2Hv6p2QVFARqVFma58eFOaVkFMg2bw+/7WOuFG1yNXYUk1bQ IF+0r6sjN/eyPXgY5pGPkDnYqOEOGK58RboHRFQj1IyytGLesQSvBJm6wEKj zjWzd3K3adljrLDqWJaSWWklkxdYcZ+93I5e+2Y/sZZcyTSiWxB1biAXN674 vSDpYWSWTGGptpVlKKf3NnNlFepzJwvI7oaWgjNFqgq1U4C+x8Ky9LaVIi/B xVKXoNJkWXk72LfrXMfq5OXY1IiITHK1tdeKqakZBfICq859aqmC/O39U9Ly SW3jmNW5fW0Dgj95Jkq7+2BKRr9BIy0h4LaEK6DUi+ePa7q18bezsrGwuLpz Q+qwhoKTHJTS/RQt7b5vnpJh6ao9cTrKKj9PJQfVM+706dMb/omPhDc1fMTs HHMpPmB2AskHmp64AnC9zv67kGcenr+A96ztVsz4EwoD78HYmVVmWUOJyVfW ZmLDSK7TFc/Y/mUJ6riKZ/X1NiE8Vjz7CM9mMTIpspFhX3Jd8JvtTP6vvSsB j6rI1nV773TSnYUskH1hD0EgEEA2WRxwGRxExEEZh1HE5bngMqM+HR3fw9HR N+I8GB1xVBBExA0R2cWwBgTZhEi2Tkg6C+kkve9933+ufUOn0ywZnYfEri/3 S9+6davqnrq3Tp1T5/yHGAVNWjchLxGT41BMLkdwD5mE340yY0W/FJFugcmI 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 BRsglXPxUZ2ZD0k6Nad5YJyBAdj9sgaTh52xeFmLFcjP8PkkgVBmOsWd2PgK PyG1yjZrYpZgWRacclJ1bNHdRWxowmn3h288x7VUHGBOSDx1rR5W2+JhNUY3 q2pys9pWX1Rxqcvb2PA9PpWYFDA6TwBjzIWm/6qULHbNzFksZ9kSvmFoP34d Noa+hhIsTuVXbv9gv2XDhmPwJ+koImVmxMMAJDZm7369gClGFm4zbxgYNelK ScLKd161lJ865RqYny9/8KGH+z/y+F/6Dhk2UbNly9aWF55/3rRvzx43OcIG J/KRwkpP/tgfHu85YuIs+cKPPa2VZ7w9IRZul0ilky418wnuKyaWL3GUY1Kg lT7tsazCR017P8HpQVwnvbxwoEwHFRbyZmHyqMBB6inCOnOijk5Aohf62gP1 k78NSS+kutqByf17mI0uJNwngJOiD8GwOOesAeV60EXc1+7HFFRY8IVB39oB T3FagONz8YBUMzdc5WBYs5EvhDfH/fNB5w9hvVlJEEHBdWKB2aFdOJ+L/jfB bXaBAuGLog/EAEitKh7EHMOmAFL2b3DRgHmFpOK3iUR4BkHSDU6o73WRFhg7 2lsMThTKgd6vMlwjlVom6no0nLSCfFqgkarvvOMG5kOgqEqUXwHJjCenLQAA A/RJREFUqxi/q/D7lkuJuvGDB+dHrKBLDEhsF3sBi0H532Gln3i89JTmn8uW ScBg2KqVK9ma1avZB2vWMOT5f//YY+6nn3rKiYinUYisGv+Hxx9PggUah5cd zqqlvuX/XGzvn9MUPWdWvlKtPusUunlbqWnk8Eyoj87umNBK/5NPDvtffHSt SXasWpUnYxor5uZmXZzz2htvkgy6abYkbvosppv9ZyZV/idv3VTEHHtiGd98 dre/6rSfb/INcRgSb6ozuVWekjJb27EyU9PhClPdwe9MNQdK2/T7Si1Vx8sa T25dt2Z35c43j987WWW9bVpfbNonsWfnj2L/cU2se8vqV+vf+fvf4Dqjrzih t+hPVplOl1db6qtOm5u/rbSaK4ycMTV/kjXrmudg6p1kaWj6nonwcE/zHVUy //Z8xrXezaLGvcA0sx9ksgH9uOx5d3CK4UP9VqXCGQU1Xr7fF3PkvRLXHx9b azlR2hHL8PppAxUHD9d6GhoJU/P7lAcg1Xt+2yempmy9YvXK5XazycS0Wi27 9vrr5QsWLEgeWlioA1yS9K758z0PL1zofemll9jfFi9mi3G89OKL7JlnniEf KaXZgb02YKOpNZqZe/fu/UkgYYvPiI99Po6ncU6B3Y7i98LQWEj4uKfjoH0K 4cAKlfZGKIliKGGGHcBBYRr+ggl9RBAgJhk3hGoFBBEUbXWw9oIqZxjuzySV Dv6TemoOUAxe7Oq3ifsERFVMeB3s/bHaJly3ThoKrKBFBNZwXtBCHvrTFtSP Q6SWFA/kCw6poQmo2GcC+xako70WddBeSU9MyGR0QHUK7cL5vEO74jn6KrSJ ckJ0Rnzj7XMLrgk0xLWuWMzVE32DDgGUNFxCvwnVgVQnRgCJking0EC5ebRX E3wP6PDrIFrQPmJwIub6K7QpInSvAXMTUDbCJIEeYOgdxg0MOz0ETVtkgoNx jZArWkGPaCAtkMHEzz51SQUXSq2RI0aQVQutIs+XeHzkbryQ3hitloNuFMG1 onxpKUw+Y1ouS8eKHgPefv935Wd8O4rLHHfNG90u/Rw/Wc9Wvr7TrDa0KHrJ JSrIyqyWl9syxk1S3Xzrb6SanXuZ6uYZ9Iaf7Qfi2fgqKlnLgW3M03KYydP0 DGo3zxXXLwLiQh/6QNiq5csbP1/7rkPLbFlyWMsFJzojicmJ8Ce9+g1hV151 NTtUspvVINqwDE7uoYQjFmPyKRoHjJjgvH/hI5kAEGKEHH5kx1cmTd0qzdjc HJmf68tUAycxWZ9+jNNgUyoo8RYrc2/ezk5kpbK1ry2xq2orZCkyTkHPqodr U864vso5txaptAEIobKKZrZjZ3nrvNtGxJEUJDT+2KEAAAP0SURBVKYmIHiX AFB1wxa9zwGbHCCMO01mM+dxueSY5Drr4EJGDs+1Oz0ra+JPCQU7dA8I50/g vSPLtd2YIMaRZP6v7AGFvrSog3T0V4GppAdZdYnGDYSbth1lBCOE4D0gCt8M h2Pa7C9BmZFdUcGh7OOobxHuFVSJ1CcK/oaVsx4/DVDLkSFA+8sZAOWkyTkO E2mBCD8T2BQnPLkCUudBGjNc7B4QIWKD0WzEvSugGrpXpAukRLLIcSEvCf38 G/p5H9p9hgwFxDKQnp/Ce/UntPki+vp7lCMctVtRrgjlSIogCVsog5/CXkpQ /T/KHhDa/ARtTg83CaEfovHIRe8BBfbEtqO+8bj/WTzHM1R3yB4QqfJew/WX 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 blr9/MH9LAlHOO+//Jc//Z/+ryZXlf/y//zTf/pf/fd/+pf/15/+L//yp1MZ G8Uqw6tV5F+VhGvWuxqanNfe/VTy7Q8r8bF13+HrRqGrCor6n5gQiRKOe+7h qWQt+fa1JUkmDXSGjftHLWHtbuu0Tc4t/5+rqUPf3jt0p+tncoxa+qMWSJVo RG1BDh8d+jIq386odPK6tvQ88/2jlrAJjLtr11YA/NSlT4M7KeHMlD2zgdkf 1bThqYb04yo5W4krob9U87/+NEcimMed7GHNeDXdX2a1tJSO7odIa/nL718n /H/zubKOhOlal3eff1WyY2LYJ7VCJUL0fnq16A8nnKyxOg7hVc/9pa6kJ2aE 7kpJr8KRn87dqv63n9vTOfza48GNKuqPWnY6n72id76Qc2c8n2ou9fx3n6vJ sKwaZwp+b4TOXxXN4IyhdZ03hkCs/lzRn/7Tf/eJfhxn3Vp2IK727E/VwOKL wmjtPiiIuP+pPX/6T/+72vPtWVdcpKtGfPfYUn9UE5ZZDFtPxmTz/o6an9k6 hGjxbOqdsJl0tFNvaZAGib2xHVI1Bdp8ac3//mN0EKICCcrjSAZpfy9WNY7O tEgQ6e9fq/nMLPZdxV0tooo9svj6verWKoc67QJV95evpPg//aePZsliOFrq DABNXX8uLq3n8KKpWk/fLgE9Q3Q4GNpIUrf1J42PBu5Pld3zBfjjekjVePXw j6nRybkqY0s5Ve1HFcG377q6dvOPkTyt+tMP3+Kr/9N//7lvHRFEzwh65N1f 9YRVj2tQRo5tsx/14M9fuSI5ZEHfe4Vddf1Vzc4wYCXdXm559CzCp2oix3eu 6ECtxtDGfl63zg/1QB99nWbv9hU85Es1/4dPVE1ja1FQEg9D6m8MDZYQ5tId 4kUHyD5G+bLXZ80/7NWdGw3mqWZ/Y6/dxLEozrgQDei7pfoxxv9314Fb5zRP jNQdIF7ouTvpnz5dWfnXdlLiJYvBDLb8wuTtzwi7xG+d+jRVO3FC/Jg+oNFF KHZTMPpc+lZfHlXVGUs7zi9EIc/SADHATv/1tueO/c9Cs/2Q5CY9YxAZrL0g bQUb71BN2cmMQ3hEsuo4kw5Y+hdw2T+nu774VNcJHLXW1WoHimHR1fXtIICI felU47J/Av+V9O4+Gum63AGJfwvRCdnEbtsP9eIWsWp5VctBAK1/GScK1nkC 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 Ou7RqElxE3GQt439RIJNStH9R+n7Q6r+brzsdqiHSDXp8sd3dvyTSWKezy/k XZ74MYz3u4fBG9O7YXj5DyZDU3Cn7ZRhCB1MsBgsDjI2Kofgh4uxtaqDDO/q 1J3P7lIMMOvHcpwLybCbhL/8U/fmDmt575drWdYFJaQsx58Z07/9lCxx2hnc V9uBz1eHAXNpnTrbWsA/dAjbN7izV6JDMKdVYjPkmGK+HJ6S/IARj+iKW4Ih G5Wbqb6qhNvJBjsJuFZ5xG+w/txW0bCH2UUoWiHkcbCwkLXKbSBgJNCOuH7w dDKHhdFuo6dnzQAMjWxlfm18wd5tGOwdkQMX/nvqaHzlcBBz7fqJEh9MRVmJ AxNT2ulW4sFQck67VsLiKBxRG9gPtMq4tzOvhLPU6kxoO3PKxzzYiWQlyAuL IyRXBCth1hmDKhHmW3TSUwerAZ1EWRcm0K8E1tFLB77KbLUce/kgB2K+GiWC a9Wu4/eNg1lPs4lX547ekymzb6wN6KaxO09shbnX+uLel+I5/OUhlF+BTK2t ExinXlcrXWHw71174ysC7FcrGlvLWUNU0iwOYxbnbVkZQosymO79insHVweJ YeliiW4dIuAOzXezRMtea90MPBwS2IptbR0a9HrQXW0/btRyu8gzCnIRzOr+ hdGmVd1qOT3gbfB1q2Xj1A7VOH3ALvpbay7G+iE3L4fjjVvTDs8PdtHxWT3N 1ShExMYwLtJeDg8IDiYEgmPFZw0HtyO1yrUz3nJz4OOnhmxP0nk3D3zHGefY ayvFwh+q+8XA7Phugflfx2vfEMywueITvSNIJBoGV7ojyCQ0TPP7TS077ozO mEhW6wN7A2h9/cixu7Mq0WntKLV7lGqHvu4u5Te6i6ZaWYcyWYYPHCdQwhWJ H/BaTop9YWqVA/kH3gVERu+mW4i3VRbtcnRnUHU6MD2YsvOCt35efPfJQbI6 OUal9fzy4R+rESfJjnPmrNPZMM4MbKy87jn4cDz9eB/vtvqfiJEZDytTdJx9 5wODB6SnwNgA+Cqs1HPVAozXYlZqFwaARdANdtqLn5yzLDG/tgVrW7d5oMWL +QZ2HmYwjXQlfouOpLsx5pbAYofBt9eOQlZPHgbt85XurlKGPjSYUX4lBvsq 8TUe+spBMGzOwcwWShBQUyjAjI27sUdfmw/85fcc/HKc8UlsobW9wfTltfPm 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 j+VPipS8AeW4annZpkaXTawNy1U9Bb6aj09hjrdc16pp1GGZsr8cBH8ytz8y M+qB4JTO0qDC7Xwmj3OJw8OU1eFZur+ZgELkjKajM7I9lCvGROvxlgVTm85g AbMfNrVVRVEdi/Lbv55k88QUh86QuVJlVg8gek6UjNHznbe2uf1+4MxdPpsL pqCTbedk1u5sYxgn5HopE3SyqhVfbQTI8avv60Clz5ZcQo52RS5yeBZeAcJz quBZNh95UFST480d+FlNsxk5cEpGM4ZMH+Do7VsKuM5O4eRooFbRTGdqcrNo QW1vQPolKTY3KB8d/DUc94uevGJ2qza3R7QT9XSyJZht/rr5KFra9U6DvZvb U8ZYy2hlDOw+KGdHL87FZktXzn4eHvm0AgTMPZLsxHw5cY61SVfOlv6BWh9i 6xRayk+8i6hTdSWOGCIbaqbd1tLOvwQe8/nZsOkylilVzR/emDY9fbAV69b8 FBvPL5Fi2HXG/Hx2K53NJWs8CBJfyXn4eIm/P39FU0Sdfok6PLpE7uD/fhmJ tbDtYcvrDmc0hzvwswrcGjzhOF9qsFUg66CheMw8C27GGcDzCe38WOq7SIB8 nB6R6Jk3s+kmLoGI3S61WZ3SF69AMhRdy3fLSJUE8bsKLo6YB9aDEOKSLUfG q9/s6qUQBlZEgptBvF2GMK1GSheO/NtYwb8PfHilfgjxV9OY0tZw44L3V8gE zBzqsKXQPg51KpLJtFRZoJbDV7tFzxwLd0k59uqMFhTJqR8OF84CeLIYcK/o hZ0Poi8K2zYjrQQJKA6a+AYKvTzuLqq1darWiuoYIo0LHF64Xd7SVxMvd9Pl 9hEKsxj5finhMmfpDY24upQgerKZqzllMy+fd46bH+9fz18Dbq5xzgz8jyxk /8hGqJp4PhhRO2vJbnazIGSk4nk6NRl8pe3XU/85boUYUWcQeFyAPpD3q8Oi Me4xo+zdu57PD4nijROiidVXHtThQjpfwqdUvPzrStos7Y/Uwhj7sz2oKvWC pEG1ma10Mrt/4C+9ZOBLhpEdCt/VMi9dGuExwEnU9JgN6pyzUil9DI0sc80t HF8cAGHBcqnZ/E0tEzvHSSzeR/lUINVwJTd2TvfJN1WFubCkUjilOoR7p1EY 8dxWoqDmXGw8JtF9w1a73pNiaVrl8bEoSE2wiLtdo60yKItaVzOwzrU1lQbp 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 uHQs9rs6SbNqf4jCR+Xjw5CVKKvXfJKMlBRZh0h9/reaYnxeT0B2V2yucckW lxIq+2N1qq/6npC/8uHynz6hsuVlQ2vOSMJLWNa7Jdr/p4a4oo6/uTmFD1r6 8zKTGxp68gsPV9W8KAACS0wnCtmbJxmERXCHLv2lopNTewx+xbn/rSFuc8dy SFjh6eazEFYyv14NeXGYUV0JTQqEVs6Avt/0Su8EgzgMVbjDBNMcK1bAzdvG f3oD+6PtA/pPYX6TBq1K3lOXjo4/vLkqA3040MUwgM7e1Fo+jpY4dOha0KXT inRbMLp/lam1jyQonNpYSKxPOlW7g/Ah8pzJm5C2+6xeQliwqUhXjn/vUF6W RFg4rbUUh3/8rzrQ0sfyLihvKGI8SIqt2UmvjzxSuZVWsxtcQaG+3+RRJqSq HXilnrT10z5ofpIa/qsw75v/iKYVHKqvEfgnTa8u5EkjJxuTuE6715SbODYe f0pV7BYHvHYV+77lCrWOdPlfpWnOVDwtsKq3KWlNPFV1VloS0WuoEw/teqj7 KiJ4XNbeFSEdsJqNAoNlqApO+vCvymp6oXuSf6OOUxqWyKvaoT4fQTHYKyt3 VeviFAUeSm2I/KFDmhotYlsilFDy7H/VliZF9d78i3XrK6MSSaaT+uMRKXqC 7tUuXllN2aCHSMPVfHKAqs6KSiy1imGy+dgLmOeiuuF9OXdTK/qrc5uPLuv2 ydMEX2l7nS/2hTRPKsA7RzZ4Fm5YIGl4UdAOAlU5g1H/qrIh882tqYN9DWDm Ud8uC/B48IdWCsTfV9IIhfQ5s+tw0BW2tnVDkC7QnMoXcPNYkf9Zl27QF9We auo1f7IfdepoQf4OvtayGvnNl9YwBWXjrK75iPK2zau5i7IA6QxXMBv/VeKT bwgTqUCPE/579LP2LPyuYGPTZWDUN62uBpA4K6sZAM+2rtodGJ20ouI7MPSv gvZfZlilJnRb0s5E97ftobYGQxqNlAnf8NpiSrizumovJdj2jamOwpvELz+C n/OvCu/7wc9IDelazh2JbmwN5RwOTm8wslf6BtTksOKdjaYVLPLCtZVHmcRJ H8pe4sP+Ve59YbIrqX6dSZL70bUtOPHM4OT6C0K2r181TzDg3FrpLbRceMK4 gbti8t7SZjzjXzW/94r2ROqOjlH1kuiG5nHF2+CU+oVyX1/fqsslrc5tRowM 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 r8qBGQg+SbYu8h4/VIr2DuWDpTZ7gxfCtevaKLxmZZtNgu9mtpgnWGosJWL4 XMPySiXvnW5pei9PrKFGJvGS1Nlzd/AKVbdtu54P167zvnBOW6jpuCCpWSrq 55Mb+gi23aj2ZMVhXoTFP92Oe8b4PuIYl1yze24WF6kvGNkrO9cJNP2OJj/+ vp7dwq+8J53++Hs8/1ZlxTSuuSk/LYcbVX8jIoJzt26H11dOV03iCNXxQBC8 c5axnV+xbbmwjMfc9AIfy+3pbS5ncl0736y/xtncTg8/wylsoXk1cqbUTBih GjuNc2EZmssGf4Qf57WOhryMPq21R8NLVeotmM+pLqoGHHH5VZUrfqunRN2K /2zTvBt9b8NLQw2+WOOmO05I58zQBhCXo76r+0gzSg6rCknf1uYpk8g3li9U 9FPkHj9VdhSBTYctbO8GD/10RobaVVvFYLHnqY8yulB2qkLG9eK/lVOYHilq xRhmeShbXs3UebAVTCbSNsNiWya8p3anMFD5UzNJsI35WcUWrEBOVLryh4q+ y6/yC5PPyi7xJy57JFvKO+MxVW478xq5rzp/jVAVpLRT3Ve6Mr4qy+TPEI7y z7L9RcGyHdKtyXOk+yS3lhVJ3SWZ7lukRyWFI1RttrrZlKWIUznYIt4RCrb+ MHyFfIb2bWGZ9IomOQkluax6t/SUZJEq3T1V0qccP0JZ21VvmvhyibK4YSmd Jj9TuwNGl5VZVhb0S+eZnBKvSObUlCwtExcYPrr9Fm/VqEapOSpo92nZJ8X1 jme0W/LE1jPQW9ITTTsLpkmkDS6J8WJFXeqSx6I/ahe57RPd01SOUJY/VI5b 82VCBWPTO1q+7NbGKGiGNLtLm6+TOLTXrLkiHtf6eYlYFNnk5YYQrdWM2tja 6433oKf51+rT4CrC3dqxyLDqw+Y3qCPZEtMkTGrcyxoxdiBwneEpbpsr0nQH t2RYFuu8Nr5Bhavmr61zxWcRYi2HCNHV/qY2om/W25pB0uQ4kGEx6dniS3oS me4aWfOJZDsb5dqGxlI/j3aDR7Lupk/Ds8woenpVhTGHbsxaaYDTn606pbvH iF9cpJvDwLk6GJYwFoxQ6nO1p/kruXoLmncTJzQF82iV2prpPP9Mhj6C+3zV Yu027p+L7mjuc3tcLtqqYHpHKTvrdnk356i5SLYLu93oJT1Wsd0wQXJnw1Xd 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 daeR2erl2WEryJ34vEPKsu2S6oP/6bAiZOAvwbvcY5t4AvPato3zBYtj6rre 8Q8GYzrW8gVeC9pd+c1OAW2n+VG22s8H/1HlP7f8o5iRu6NfJWettfR6y/bG KDrvyRyDAe3LpINega13ZD5OoNZ1YqmNWv4/6saWAn1y7ta+Uzr2WkvPWi05 RtTxTSMLXt+2WgPy8mh5qd7rxGzxlrjbKkbr/0cd3Hzb2py7py/I8sfatm6d mRcj6QgzCYOzW1GmYK/lLWMMGU76Zl+JbZ1R2rQ3oo2D0yEzy19tugSLqtpe 9wqxClQh9UXNh7wmwNBf4TDATuwu5IXkY/gkjGvQOYI/9rbTOPJi3Iz9PsAF 8Av968FypKhWDd2PDhI/hV/EnLI1gTqHqyjtRg/gXySdwKYScwKfYt+RABNR RCgJ8UdqpZFkCxwBfcgZ1glgFvmDiADdRunAfoVfpJaW8JDnaVMTT6KxtM2B LugbdCfHZ/hb9OA9lPL1XEDPUOUnrot5DRDJOS54DT7IUWHMsDEcWHE2woOT vuYcch9n0eIE5EP2K0cybhtbvOs0IE8xrtunwl12y7i1qlO6gw8DTZaY0dmQ KrG6aAVMK+pKeIKIEp5ZJEN4Cmc5zsAX8eOGcCUHjNs6L5fpDXtqsJXBuh28 ZdWtmkFUMNhedbkwFhqh9EqYBXsgb174CMaWDUw4iH8kWrXTFlZoru44Dchv aDTAyz/V7uYuq8Ka7yBXAu8YlxXAIbP0B1bjoHu0mxdWQN01JycwCUUi10F1 EWejc8f40qoupr6+7FfbPk55JbnZEYGuflJvze8HB1k18VchJ8wBAS/B942+ ExIJQ8Lng06Fl3f0tbNLdgzE6e3LEvs62LsrBrrnwc9Ve7Xb53uDKprZ8eng t43eAWjQcWv5BA+ivfD0tgj0y/KUVit2Q9UynTOuC/iMDcV/hlDg24lxsFd5 z0g8ZHrcXnI7muI/llKM+WdcKGMibtrAn8gg2MYWBuocQqm1w2SiMlkI7B/o 37BDeB9sU54zgYoPXfWV2EyoXVBAciFS7e/R8KQTW5bBdhA+Np1BsIl31QyU D2mI8Rndb6uIp2OXUipyXuFaqCErf+FPUG/Nl+Af0/ztrbQX9ORNegif7d3o DwOzg5V/IeaxQ+hG5DH2IkgkGsZemn0D85ods3IOzp0d63cRe4/tal9Cz2EH 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 dLu5hx7gk24Opi+brLaMoS+2ZaVe4NSPUFXaxiBufgGu3o1buZ5k/cpdu4pp /sCdtTTPlMH57rPA2Mr5OtlomsudaqsK3P6fN1rl3xAs2V/gWechoa2fb3kr /rpqoemWGLzkuzFU7Oz9uAYlTpzcV0MUTbHlsp79j6q8Ul+mCcw/XbtOXbfu kmWOat/K68afyptLNtUkKsneCgNbuXmyzLBgeNUVzfsfZaw7ZTqTv9+6yTR/ 3RGzrSfQyj+MCw19SzYa1hkg3gP6Et2byft1L6VNtlrC/3nZRX4D/cXAjFmb s0tVCcB+z7LeFfUbPSoaA4J6HlT5zTRsrKyC2if1DFYX26pTn+BsT41rG4XY LZBKVvru/vvVsxP8NsKBu1ZwekLA0QHRXX9AKmY+7z4Hwdpf7NwPtVnXkmby 1lHKcZMeCk1f1zcJpl19vkcG374isisScTbAo6MPWevm1ElAMsdFtX1AUW06 hNBvj1AFm/q6MNFpd3v9MT9XF3R1Y3eFPenIw6H877btxb10c2rPwG0cJ2wp xdtyKkSr2bZo2/AMC7J7f5LnpMm7+WT56nEdv8nPw+RtnZTl/rtbPlFQbhNb AZRF4/5scqDes2lj1X86zP/d08/yS8vsWsxaF3+lvYGVEVbWGsGK89c3E1nL 3WY3m1lu437Xv2HbLChB2f+o3d3NwuC0RZ3ThG7xu9pIgmNhq1vGCpD+xKYw QYqbV1OwQDJ+Vd08vu158fv/R4m6LirWpE3vCJX/jO9tFcghYaFNv2Tn/AGN 82QnZ/5unCoLH59u3Siw7eN8t/9RVV1henba5Ha63je+q2W3Li8spMlP2+4P aViitbr5139WPRwPt2AFPba8We5/1A7/ypyirW2/qi8A7PXh4CUVERwxFFed hrgDbwInFyxEboItWL0YXYU4F/AC/RfqtsMuYhv6yLbFgLPAylZcRS24T3u5 Ohz6mL0etAnhCt8NnYJamD8XHo8JiV+B+AfnEOCBnIYvc6gmrSCsHsgoHsCM ae4FbMOu06RX2P45jnm12h9/FoYG9RGn5P6A/CKtiVsF20PO98+CgShODu6k HVTfzcSCRzRe4+0SN9otlbJsIj2KUVRxkW6GzqjmMMbkXAY9ZyBWZUC6GYcX mMG3GS/GXyHPZ9b278ujCt43JBeeFZCU40oe8D/T7pQd4dPA9yuVfMfs48Cp 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 8TTMn/8vtWzZH9mn//vLTAYbyx5imcLy1cuWyerm//z8//wv+0he9quusGvF /ErQqrk15krktafW/dlgtDFWmbmpb/ODLUpbjVXDtsG3S3ccVbuy8+1ujT0R e6n7uvfPH/ijceCgs2byIYpWg/YpnWd6q/QPGbgbgozoxvUmY6Z3zH5YbDts ZhlglWlNt6mzHTtyx27BQdlRy8nROdqlwJXr1uQ+7nHb86v3Jh9dXye/CP/s AEpgaVB38JmQu6FfwtdFHIi0igqITo6BxTLiSgBt8SMJFxPvAd8ny6dsSj0A MklzTA/MiM1MycrNRuTITvPkifJLwTUFzZAuaB/sOHwccRp5ATWNvoA5jz2H O4M/RZgkjpFGyUOUPmoPrZ3exKhllrOkbD6HwkXycvhAQbjQW2QvNpEcLNwu XSv9U/Sh+FHJjdLTZUPlbRUVlZwqVHVaTVitS51J/d6G9Q0/G180zTRPtvS0 VrVx29Ed6Z0RXW7d5j3qvZuOLjv6+th83+n+owM1g7whzHD68YgRt1GzE/tP bjz5e+zV+PzEqcmjUzWn+KcxZzLORpxzPq9/Ydu03PTLi9cvjVxuuMK7Cr8W f93jhtHMttlls0/mLsx335TeQt9OuON2V/fexnuf7s8+GHpY/gj5OOyJydP1 T589O/m8+EXuS/dXu169ez3+RvIW8i7kvcmHDR9efBz/VPo5/4vH191fPy5M fRN/j/+h9ePlz4Zf0b+Vfvf+iVxsOXLPljes0FUkrRxd9XSNgtLWtTvX7V6/ c8P2jarKKps2blZSUVD5ueXj1ieqs9vOb7+x447a/Z33d93dfXPPjb2X953b P3FgRL1fo+dgu2bzoXqtau1KnXLdMr1ifbEB35Ataw0UE6Ip3gxrjrXAHsZZ Eqyw1hgblC3qCMoObY91IDiSnejObBeBq9St2L3Eo8yzwqvGu96n2bfDr9d/ MOBE4Kmg6eDrITOhc2E3w+9E3It8GPU0+kXM69j3cZ8BC/E/E5cBlyfJJf1J /pnyPXUB9DntY/q7jDeZL7OeZT/OuZ97J28+/wb4QsE4ZADaAauDlyB4SDIK IfNWyOwlOB+8A8GMqEXaSd5I/k15Tb1JO0vvZ9QzxSwiO5cD4PrybPm6AjXh GuF30XPxnORM4aC0oUhYjCvJLI0scy83r9CoVKlSqPpc/aRmtvZs3fH6rob6 xpImfjO1BdsKbctuT+kAdEZ2BXf79Xj3ehx1PebS59zvMuA66D7kOex7PHAk bDTmROLJtLG8ceQEaZIxxTslOV12pu5s27lj50cvnJ6+cvHWpSeX31/5cU3x +qYbu2e0Zy3mnOcDbsbeSr8Nv0O5K7pXer/6QePDtkfdj489GXx6/NmJ5+Mv rr18/OrzG4W3m97tfa/74fBHp0++nyO+JH5NW8j6lv094wfwZ+gv598Gf1QX 619+xfLZFamKU6sUVxuvCVRKWpu3DrYesQGxEaEM31SwOUcldUvs1kBVl20W 27V2mKrZ7rTfZbfbao/pXt19B/ZvP7BBXUH9m8abgw81Zw+d1zqpfUynRbdC T6hPNUAZ5hgBjSNMfEwdzMzNdSz2Hd5qqWS1zOqL9Wubh7Y3j1y1O2c/4XDc sc+p27nVpd61yq3UvdBD5Mnz4ngzfRi+dD+aPy2AHkgLogXTQmih9DBGODOC HcmN4kcLYySxUlm/UBZfkVCZWAWsSapNrk9pSG0ENaU1pzdntGS2ZLVkt+Q0 5Tbm1eXXgCsLyiBFUDGMD2chqEgCCoWGYLKxIFw8PpIQQHQnHSGbUXSo+2iq 9LUMecZX5mvWA/Ys5wJ3nDfA7xDUCUtFAjFdgiuESXOK0ooTS2JLI8pCygMr /Cv9qvyq/WsCa0PqIurjGpIbs5pgzYQWTmtpW0v7UMf5zrtdH3tW9+49evhY QF9GP3WgdnBs6P5xuZF9o04nkk5Sx5rHpyfeT205ZXk69gzhbP25s+dfT2+8 aHwp+DL4iuhq97WL11/OKM7unjOf974Zfwt8m3pHerfhXs/9kQenHl54dPnx lSeXnp5/NvF88EXry5JX1NfZb8LfRr+Leh/6wfuj7Sftz5s+f/ly42vPAvtb wneD759+dP1M/qX8q+e3z+/7f3L/fv/nlrNXrFYMXoldJVldtaZWqWKtcB1h fc6GuI3eyhab9m1evfmdyo0tQ1srVInb8NvRO8BqyTtDdjns1t2junfZ3hf7 ru4/fqBenaeBOAjU9D1kqaWhvVH7l84L3Rm9Cf0ug3JDlhHcOMUkxNTZzNh8 v4XyYbnD7y0fWF21nrA5alt/RGrHsEc7ZDsmOIU4e7jYuBq6HXBX9VDy+OP5 0euZ9y2fS76TfgP+bQFVgWJZO0CEZIbGhQWEO0WYRR6M2ha9Ovp7zMvYW3Hn AcfjWxNKEulAWFJycnCKY6ohaHeaUtpC+uOMK5kjWc3ZkhxCbkZeaL49WKtg U8EPyCPoBdgxeDmCgsxChaKPYDSw67CfcDfxY4RGIpuURw6jWFP30lbQXtAv MnqYUhaancBx4+rxNvEW+HcEE8JmEV8MkwAK3aQGRduK5YpflFwrHS1rLpdU ECtzq+Kq/Wrsag3r9tdvaVjV8KvxY9OL5gctN1uvt11qP9dxqnOia6z7ZM/J 3rGjk8dO913ovzpwc/Dh0OvhhRGFUeUTe08ajtmPB04kTyKmuKfqT4+cuXH2 /fm1F7Sn3S4mXsJdrrgyevXe9eU3NGe8Z/PnSuYnbr69veOO6938e1X3Lz6U f+TzuOjJ02fmzykvZl/pvMa9mXln9J734e0nn8/NXxUWIr+1fP/y0+oX8vfQ H1kDwMnSEz/sNDb8QhG2EXOhdx5bhIGXqmBrMElEb+wUhpxGxv7GnAgYxSVi bS2X4TfhNvycxKCYpo+OYhLpGeftMTHU8z3FmCxKcvEsRkp2ImzDzJH8QJFY A2KKfzu2g1B1WAUHwT/5Pow2l+Q++IE2FArOnkMf4V3stkKDOLFFQnQrSxf3 FrOSsT/VF1NA2+x3EruWsszCAfuM2LrwEKVf1XdfFiW+bPSMCcqn6F3nGIos CZO6oO4Kd2DPof24H1NC0ZdZR33fYlB0H3MqNoUc/dUCmdi2/G4dMrnh5alm JLVmTQcAeaYcJFlA6RQtYLpRHeK+5Cy0E9/BVx/9i4U0e4z5RHn7eRhxtj/k jgHiVLfKlBPiUatK+3akbn28+BayqHIeXYtSL4lIEqNOixt9CGg+F28WheHT 4j5BEYHjzbdeIVyHjSdXI2KOrmn9hmhotxY9R+5pKEHNIY9VPgPOogBFt71f o80E/qbPMLb0ho+J8K8X5W7Owh9O2Y9/h384/qjlK8Lq6CuRPKK/XR21FxlV bw90R20se+ydjXohemhKR39lTH4ogPfOR86/hBdeMh7fAK+YErVsgz88nia0 RgB705BQ5LoW+8Qx5PkqifdqVEehiakteoR57E0Q7SbGfIZCnUCPnaigjKNz mljkJ+gQQSBZG12AXEmioKcSJ4jvMWbeXCIM89xMsBih95UtFU07d0NFtgSy H00nE8kPGxNJQ6ST/N0kNeJd+DWiiKiXUErcRWB7CQjjhK2mswQe/uQLBMVN mHQNTPbhzR//Scrm5DcoESdY4dzXREsGFHaWcJZ2PP4YAURd7nmBcJDsbWpC WEnMfnaT7Ff2+8o9UlwxeBhB5BSq1LUQngqfcXoJeXwl6BBhC8cBcAN/ign0 3IYvpKWaVOOZZIWn0SRmY+XlDGJZrSweIOFaxWBtFMGiRMTG4ccKxZBBPEw4 BFiFt+R2exTgdzCTTNTxeyjIJ8uI73u8LqkRFdoGBy4QrBrDa4zxNTV6LCTe vHxvwWncmyKVOE/ciPCm+yNcB8fKeAB3knrx0XVi/vGF6e8Eal9o/1H8cOeD agP8weZGZgVuopZRoIwjlofENuCCCy+7g3BBvDljAC6P9uPhDeL603XTKwjq Jx70TeHDBoKqPHGjXd8Zl3DxzUPgdJx+TXSsFm5lidhdHrdSaG2sijOk/364 jHD8avAFC/yNsxHHvuNXniyupOGyBjYzDuCUO6vz57EPGhVj+rBT5b/cWrCX xKFGt7A/GDN3NvEfoDpPv+G+RyX2dHG2oazKrVmpKDcam3EHxc2bpIPQa2KU qT/RjW5IShFGaBxAtsS+v6XN66UUnhJxTpIDuwWsTySbMnNmGDGKyqE/IhzL vUKjEWyjdagm+FnXAfJzfLXROVI1vmy+hsvhiacs2Y2csK485m3WkdItjDBG DgVGW6DN5VyiHqWmRrlToOSfrivIrqQKo2DSdqLpnCOnpLhwYpY1WpjRuZK5 UpRefJpO4NeSA2mW3F3Zc9QVrMZIInmWcdAlmzRI5Rq+IlaSOmbesO/Xisap rNWV+PZBRlRpSRGXdkf6iGRFZYv9st5R0vnXI6bJnhxT52ckW0aUIZ9oRlG6 cZTt1V46Fs2ENpW1FdHP1k5ICbTASlWiN3VVCSZrB/m+5EGEDmlasMs5n3iJ 9cfQhTBPdb7ewLrUX3MymvGnu7O1ih7QOl9YQr3doE2gUEqqGJmyYNoll8Kr SAniS86biPncDENZnAha6LUxVtpY/QkKo2you+Ui7X3vNcllKrJ9E36aYtsQ lfGQrFVJCDcnbS3ydTpJ1OSXGlwm+NIdrimwNp9vGr3O8JmobNlDqxmuk2hS 9XpH8Bbk9613MlJI92qvh10jzpVmOsEIn4RkgwaCGmPFtF+JGhI3WC2NQAbU vxW3Il1l81NNZD7mGW8KOZ/WyClAQUNprP1oS0cJfQzjb+BIdcQ+OF9WvIF0 ZQBfaEMcqVcUFRKuC0wFe2WRBzdzr+LbQPNsKT4xZIoZgTdy+ElXxlvov6XU 4xHnHIuUOfv6nSUuLP3ab8IyRiRfn29Bu47ey/lORYPkWZcpniHrGXXkPQ5g Wg5pjX4dRY3w/ew+6e5CTt82caJooOac4IxAjqfGC+OyULs4euyA1L0sFaZW cDj9G+2b/QfqTcpJ/SRyBSn29J/C5Movx1aK2sqcqzsEakWjnO/c4xIQci+b LjRJCWBiecpBI/RM1gV7BjWGHq+vTzYlV516JZltBsjiCO+vm6lq5wuqcjhK XMsyI4Q3e3WRfHIhY0E0HWROe8cD2xvKTmJd1ftDmqWcnPohAfaM9u4VtreH Vs7w9zStYDtwTtdchpezqsobktcwhEWJgVM0gvCB3VMKl7NOb5bEog5N6UuW H9/ekyT0PTZRuY93ohPFEnBAzc6w3yzXWuUkOsO5bDAwnWZeuNWumeLAU9Lr J3nTeJNkccdUbvcFwc/RnRV0Xl7fFPM3Z1cnFIZk/mg6lLSX/ruqO3AH9VfR K7scijJ/TK+CtINuP7q3lopoaz1T+R3BLsaWoRASmkrxHsRsQZ7kDlLmcxbW odb6a/OiUM9t77PeYPbqptGtsVePV9eUEnNaHlR8IKCKpkvz8UepWUV78Brg SfFb3JWENYJTuHY/OpeLq7fNYpnhbul60ArxEcPE6iaWefOtCkVGlvRVCZl2 kcKSOlAL8j+Kd1L84wMFy8n+vh85c6Qo2zVMHpGsq0tbQZgYIlTdFr1qulTu LIgqnCs+z/1GFhdi2GP5m0VA5gWAlB9Mf+KbzDGlfrfpZvygbNTdTCWRlAfr qnaUjTc+L+MUJ0meFu8rNCVVSeZFB/NshE18u7gnvCZOus99toiJtolnZNMg Or+oW8i2A8OV3Prixt2lv6pBEvUiVjmAeFfiUYzNpQl1JB1xPrz9gnkfCHsL 56HNfvpvRp/OC0ofxaX/deXejsgGQCmjOVycVbSjLpdoJr5Z2ZzzVTBR8jJ2 hjtauMVnN6tBoGT9jl7COqFzk5JK1e63qDjVv7r+ZKlet6bohnS4NZxQJ8bU l+bkC9IrH8VmcnNK1nrPsCJEH61P0b04LJ2LlEPUl32VFfATvfVHSuYG7ohC pWk96wlaYsNWz5xVgr119NgdXO3yWu8i1l7ZfbEV9J08FZ1J8icavbOs/RDi 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 V+J1zJddCfnPyuLbHhb5Zec000ua1i6qv1C+cM3O6jeV+/woxutUtfs+bQND vuyAcg37+uKlkq/8PCarc2W5VdmU1h0Vu7Kdm6yrqpL/1JVRQ9d0WXB6sB/T wGNWud/WxLP32v+lmMyLWVwvvgmMZM5s30OfUdrQEsmYlHW9YStzQfKmml+s 5DVMsxW7zy9bv5zr6v5SPY93zj5Y9llQs2S8aCjzk9Hb5sv9t9Su6TIvICu1 Poa3M3lddTM/fo2z8ZZgtJ+39rfgP/c3qlHAHnuq9Bd4cEmxaAJ0iRHY8hkG Sg40muDiDe/qZsHxSa8tdNg74o1hGxzkN0PzFs5yf6WcDJP2Rqk1vG/JVmEK /Id+v/mHcGFJVUMjSW5oqf2HOJ/UYh66GyIG9IfwDN+v6j/YDvdXihXYYvst khJUueQLuQcdRdc2e8pVJS71N2WsDWU1SdIFSSWmbnF7BFv3XeTte10dRF53 /yhnE7j9RfEx3GGpM+mH3qenN1m0R4t/1Ptqlm5wrx5QWSe5mUbIP0eE6tZK z/t2qXrEA+6PZY+ETfbvxAGEemk6cRWz0B2bXM1Xin/VnTDu3eBSbasflbTA mKP+GeGjbVdO9N2iGinzcP8syxKzHEaJbpA7lwIEibuUjRu8ml+W/bP/WWFX yv3unSWToje2W5fVBCFNjpVpnpKaZ9TY5X5GJqPcZq/6OvvSwkbZen5OqXnT h7LA7Kt9F8tPp/zXVVopid7VuonCDapt6KfVeO6sZjL+t5w0/M2m2i5TKXjL Fq2Sugo+lWZuJKiHsnW9ObTdKb0dH+g3oy0tK5meQdp6X9ZBz9OWmRz+8h26 47xEW0yZL1i3aLvEESwote7/xhmbHd99k4OnZLezufOiy5tOcO8GsWvv8y54 njVd5D9cflvbAEy2PaNYD2YuthNHQ90lL/qawdXZC7pkYFCKc5s9uDbaoxEF OUEFNZ3gEc9zxo3Q8uU/NSaow26CnA2vWkyKFPCpku29Fjw/e1gnH/uWMrt1 JiaIXthAQX8HxVc3oCbPy4aNaIzLXPVGdLpdkGwj8mTxJeEb5FCJsueUJDPr fUe9GEqZ3OIqKoueVi8ThgWFWI6Qbp5X9Q8INxdP1XM81I4uG4flLZkhLEd1 JVU9Lqr5WW/b3ylOpvzdzJLPj55Ud0oaFuRlGStGPc/qVwsvuASp4klPO7MU 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 TrFeaFfy37Ol6rAKKcdfabvhNXeh7Fd8Gs9JciYomL9epFjRIrhAOtrFgBVY l6GCSav9W7ySZWXp4qewjhrvlH9mC3RXN+RzStRH4+5wVYr2wHe8i1L2ClKQ IppvlwyOw9sMYxg3WseIDjK1jXd4l1mudW7lbNYDi/f6z+yLBq84GXeUxiGw a4gKM2ZFKv+LeK9dOrCLYKlMorfZXThHNDVvgC0WlhYaS86SN0soGWYyqTwt Jow4X1Xqn0mk0tpdH+O/WL7WbfhpXrDyNHmyZAo2SC4vC2TtINorskpmEU5V gvQ/+C5qd/S/eBr9u//f+EhWhesF7F/uYuv/sMOCJYrn+AFqItqLr6MdYF7B XjKWFPtiCiaaHov5sN5HR6O/ODy/Xeh53jzXbegR/mOb4egN4Jb8NfqWS0Wa 0XrecsZBNIF3ragMHcvnDTltbghsoo4hBwV3/EqRHUC7ay1yGcRt7NDJEF32 HUlAUHg3MhfR0x/DDxCy0ABvRrLSFsB6xCeqEm5Elvithvcg41118B/4k004 kg3flS2D54pVQ760D6JPdG/osMiq4DlUI3RMrYA05PLId1A/4eX7BHqGB7oy 4BhslU0ufBpdLIWheeoqKAP8o7Kh6cHLCllBHLhVdnDdbXC35E0kDj4Xz/bd CLkJVw9xmQaJABsOnICtlHwH15pngVfAYOMC2mRwjm5H/gXgq2bauhJwrDIv ci4YI+v2rQRbxS9cUyAP4TgbCfQKXygxA4cbCLAC2FZ7i1oLiC1t+TlAvnHB uokAQyte8x9wUPnG1xN0lq1x9QQvi6Q2JqgWv4O3qWuzGdwM1fi8/IpiRU9h ePZpeUaJfdIF6a/yJWEnJNVVoat9xJ40vbOv8DHLf6mEHOBFY6+VfcVpnD2K +FKi/Lh8eHlfdph0R+XdpEJJOdUuDBZb0/WrZwvvsmydo8iNnF9L/yNqBLMx N/k+ykz2Y5mMqi6fLl1LH5dVI1nCkCTeE71lLQxbKjzBPu/1jGzn1jknEDX8 aqt5eCewH82Rfmb3s8dKbnLEZS7ifdx1Gz6KGnl2iWuFKv6I0COklP/eaych F3xwTsbbwSlWKdgVKAjRSWiQKytRXALRS3HResiyIViYBPUnvCZjoeOhfKIc +uBlwpXwUucM7Ay83kqELYYt8B3xarKP2S4KIWNK7gsDiL3rd5FexKQEHhGM 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 frhyf3xJrZncOCWuSsL+K3Nx+XVMaN7SUs/0VlRRsS5Chv2uPuP1lfxI8dx2 kjVN+rTdNpLWAVd6xglbPsvakmMac9m0DOPaQ0WPc32rvNIzkQNlzRGhWFTx A6/jZIbqm+125kbZ97ZLhe/T3CsuYvBZPrIo3OM8S/ZqIg85q4hOsUO/Suug L8Z9DXdkWZE9PW251fTL1jnCTO7cVluEU/7D8s7CRcjv0rCiu0XTWX64Xbjp 6C3ESeLctLmUjxTnsAOMIrrE4z3HkW1jXSiI4Uc1a3JP4/hlvyGmEbrhG4Vr SUcYrzBBlMeFjfhS+tJUG/JqZnaYMe0We79HC+sLj2it75gjLGp8lnWQ/rCE mufPdBPnIWpZAvrewp/snagabB13dkoBkczDhdZSRfx7HpnMh0KFNZWnBnMa cBlr9ZVZF2WfFQ5BK/OxwGqaDvU7wEduK7oB3EkewH8BM0PXU+LBmx7rGZ9E HGsW9wJkXm+VekdG0L7MPChbJFqaq5U2UDsR+dLliCdojKQ8eTVuq2RVyA5y FNzj/pxhC7tZ87le4t11Fim/6S/pTM9YVOwHBmR/1/xFeZj/Wc1CbCh0Us1J qsZuVjSHUEgkuZP7EbpYOmYNcCYkprWoJHmNsyYubbjKBKjOmii/TYnLO1sq LRhD2ensktZgLmsuhKwlTqpo7r209/JX1hAnTppWcyuR0FKqPp7a29gJ/Jk5 WcckX8h9XG1TkIDMLn+WeBZjXNITfI1orU1wF9CkyovWMPurLLk6h+ielq6q Is/MShdaUp7l+ZNn0h4jV+RjmTPQ3xP62bH42UEp3IPkKFeOQEd/a3EN7ODa Vj7CduYTlCj8FWSZYA7pD3QnaSElFjucV08bIRxLmMOMoswMvM9ZSie6hvMd 2ZYWXwAdP6kCRiOxPMUfmGf4w7xfeCRpNnEl8QElOPcCRUfTxLPpNMarQBVL xWa5mnLf8fwslwrrhCnls5EsGlLWig6k3+dWYT4wM/Bf8VtY+3Nukvo47nET 1AvcPYF/MN34KJfnnPtCZ0sbwT7QoXRT/lO+gzQH+Yz/nINBXxKU4e5jTwrN c1YRPgv3xq2mYAFSQBfjD9DC5QD7I/jFcoNgjuh2SWnuYfiBJLngHXyDzS38 Ax7E/YFxhrHZWfhi2CS2nmwrfhqQTJ8l3u7SxrYWay0T+ERxnq4/+5cGDwvz 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 mpXBxAfGVxVb6WnrEIokzrUMuvJn+pXE5cpt2XBkrDI7Pyxwg+IvlIPXYkUm JtLpT/kVQovVHjmGamTiLl/L/GvdS9lbXm96nexSXlSCr+wqgh3RJNtWOBbQ J+Ngl3oOyawITY7PpE8omVaXpNsZHiawdIgTvh4r3S2ITTsP3yociudI1mNS wm9KPPGzA0wlbsSrnokSK8oZxz0SO/oLq7uSALa5yW4JgwevPyvZKjyStgSy JiyI2wdtJFmEe0O/KLEbasXONInnXDGScc+xUdzFLrB6Iv7AfWXyFkYIyg2s 4YvgytQC4CAtJ249qKE/CxsRrWQKNtiLAPZyj92im5xTjioojtdr9R46L9Ca rhOzAJYBE14p8k05JBjj8GOrhNu44rBgQMhj+V8D5/MpHkKwViB1JIpchKPW c0SXgVemodCAyNhgWCyEXFOCeI+BrNgVAkfgcugloQVo768Q3gUlHoFAMfjO 0QdMFvGsZ4gWQQtNqaIpqMbgHvRTPCP5rj55aBBzkvdJsjK0TWAI7/GnC17C mR5pwk54jSMOAMRfrC3BQvETU41IJD5tOAeqEw/GX638mdAZGV0hSzkfRC9f krnex79Untvlck93Dcmx3Vlsiqk0D9IIiA8Mq1Sf6NS1q5VbOI/jTpZ9S9se kVz6MgsMFJcM5RV4g7oAJN2FpN1UtM+2RrOekGBOUrVSZxhNUyYzH64dV0Tw euOW6b7knAgv1tkVrAu4VGyNknk90zzBrHNZolbj79vyVc7ku/qa2C/pn41y 5Lc4jut85X8INsTytEuQZ8OeaQB0V4Czeghb6iVUDRJanY8p1eS7tkUKKj3c fEhOYO016pPV8uLWDUm/CAdirqvysafDUlSLCcYbNiuFJJV+BPZR5zh3yPfQ t9vmyv5iaczPyFZyUUYvpKAgaP1i6WLgRUyQ/DX5SOhh+Vtq9YZAeT2d4nlQ 9omZ78yUebNptoVSNbfL/I3kLf+6sYWkGPhjPVISL5oRvUt6llkZGiszYt30 fyCbzjHRX2PRcoXOsZKPvHe22RKyQGLxJ/wZWGmcA+8Fm9Z36esPvo6OlUzj O4Y8ltTy3/lXS4YErZ7pknxhprM9/AxwsQ2DtaCRxRrYRbTCWAavFn1dfx22 g7ZEfRcDou6QWjhZdMM/DW4WPfJ0hkmir85m8CLIyTZVfBwCLKzENdA54wZx i3itwe/ig+LUadOmpv4/kDEs52n6z4yZxtOm/fZf3/7H5//v92/TZ8z8fdbs OX/MnTd/wcJFi5f8uXTZ8hUrV61es3bdegNDI2MTUzNzC0sraxtbO3sHRydn F1c3dw9PL28fXz//DQGBQcEhoWHhEZFR0TGxcfEJiUnJKalp6RmZWdk5uXn5 BQgkqhBdhMHi8AQiiUyh0ugMJovN4fL4AiEAiiAxLJHK5AqlSq2vNK4rKS0r r6isqq6pratvaGxqbmlta+/o7Oru6e3rH9g4uGnz0PDI6NiW8a0T27bv2Llr cveevfv2Hzh46PCRo8eOnzh56vSZs+fOX7h46fKVq9eu37h56/adu/f+uv/g 4aPHT54+e/7i5avXb96+e//h46fPX75++/7j56+pab/9Nn36jBkz9R7Mmj17 zpw/9D7Mmz9/gd6KRYsXL9G7sXSZ3o8VK/WOrF6j90Rvit4VvS16X/TG/Jcz /7Lm3978P+b8yxu9NbFxCYnJKWkZmdm5+QgUGoMjkKl0FocPiGCpQq0tKauo rq1vbG5t7+zu7RsY3DQ0PDqmF/kvjf+PxH9r/JfI/1Kpl6nXqReqV6qXqtf6 8JFe7ZOner3PX+gVv3r9+o1e9Lv37z/odX/6/PnLl6967d9//Pj589c/+qd6 vF2mOsKjf7bFId52xTIe9cbKrvcl1pzpyeo50o0eOdhL3bqvl7dzshfeu6Nb eXhrp/LEWJvy7FCz6vLGBu2t7trqR38X/3D4t4f/+PCPD/9zLv0zHv4ZD/+M h//9fvlnXvwzL/73vAiL/tkei3jXHUN/1B8tvT4QV32mP737aB9y+NAAcXz/ IHvH7o3gnh0D0kNb+5THR3uUZzd2KC936SuRNTSU3vu7mOrxcpnq1HPoiEG8 64miPxqIlNzYFF15djC589hg3tDhIezYgRH6tj1j/MltQ/DB0QHlicEexdnu TsWl5lbF9cpm7e2/i6ne/8shuuBdbyTt8WA4fHMoouL8cHz78ZGMTUe3ooYP 7SCN7xjj7R7dDB/apOfQ2ys/09Ylu1DXLr9S2qq6/nfxbw6hMb86owre94dT n2wOFd8aCym7sDWy9eRE0sDxvbmDk9tIE2OjvL2bNsOH+wcUxzv6ZKcbu2Xn qjplF4vblVf+LqZ6PfXPQs+hOyL//UAo5elIEHRn24aSy5PBjWcORHft3507 tHWCtH3zCG9fv55D90b5sZZ+2cm6XumZ8m7ZeU2n4uLfxVSfnkOXnkNPeP6H TcHkZ1s2gPcmfbXXD/vVHD8c2bV9V+7o0Fbyzv4R/r7uzZJD7YOyo40D0hPV /dJTpb2yM+oexbm/i39zCImZ6gvJ+zgUQHqxzUfw4ICn8tYF97J9B6N6R3bk j/ePU3Z1jQj2dgxJDjZvkh2pG5QdqxiQndD1y0+p+hSn/y6m+j1cprqDY6YG gnI/jfoSXk16cJ+ccBWfPe9aue1ATN/AdsTWrnHarvZR4d6WYemBhs2yQ9V6 HmV6HtqN8uPKAcXJv4upfvd/cxj0z/4y4Yl9e9CZfueKnfDQWffq4f3x/V3b Cidaxxm7mseAPY0j0n21Q7IDFXoeJZvkhzWDiqPKQeWxv4upATeXqZ7AmKlh 78yvk86ox6ft8WfvmkHbz3jW9u5P7m/ZgRlvGGfurBsDd9eOSvdWjcj3lQ3L D+iG5AfVmxWHFJuVh/8upja6ukwN+EZNbXVJeXPEJvvqbWPM/jtmkk2n/epa D6T31u/CjdZMsLdVbQEnK8eku8tH5XtKRhV7tSOKfaph5X7FsOrA38XUJmeX qWHXsC97rWPvXDaNO/LEiDB220LWfiaopvZwVlflXsJg2S72aOl2cGvphHRb 8VbZDs24fJdqi2JSMabcLRtT7fm7mBpydJnabh3w5LRBwMlHa5MnXhmTu2/b SWvPh1WUnchpLj5E7NbuZw9o9gCblLuhYdku8Yh0l2QU3ikdg3bItoh2KMb/ LqZGbVzeHl7neu6vZT673q9N73tlQa675w6VXI0uVp3Nq1acJDbKjrHa4CO8 TtEhYTdwEOwRHhT18g+I+3j7Jf3c/dKBv4tvu9dZXb610HTvm2UBgz8NMpre 2BNKH27gK27HS+GrBVroIrFMcI5WxT3DqmWf5tYxT/EbGKeEjfSTYCPtBNRE PSFu/ru4dn7eqoMvF1oP/1wR1Dplllb+wb1I+TycBj1M5QvvISHOLZyMcYOi pF6jq8lXWVriVW4x4TJfh78sKMFdAkqwl0SlfxdTnd42U63hgVPNiWnf2hKL XncmsR90pSiud+TUnG0r6jraTBs+1CQc398k3b6nQb17V7V2/46y4kPbikuP bVVVnByT1Z4ZhVvPb4I6Lvyn+IfDv737x4d/fPifc+if8fDPePhnPPzv98p/ z4uWhNRv7fHo110J7Ic9SfLr3ZnV5zpQncdayUOHWrnj+1vE2/c0q3bvqlcf 2F6lPbK1VHdiTFN2ZkRRc3GztO1KL9x+6T/Fvzi06d+bLfGp3zri0G+641kP +xJkN3rTqs53F7Qf78RvOtTB2rK/Hdy+p02+e2ez6sC2OvXR8UrtqZGSkgub 1TVXe+XN19vlbZf/U/w3h9a41O+dseg3vbGsR/3x0psDKRXn+3PaTvRgNh7u po0d6BZs29MlmdzZoTywrVl5bKxOfWa4quTSxora622appuN6tar/ymmOr1s ptrCAqfaYlO/d8UUvu2LYT7aGCu9tSmx/OJgZsvJAVT/kQHSyMEBzta9A6Jd u/pk+7d1KY6NtavODDbpLnXWVF1vKG+6WVPScvU/xVTX/+UQk/K9O7rwbX8U 4/GmaPj2cFzZpeG0ptPD+b3HhnFDh0eZYwdGgW2Tw+J9Wwclxzbr1//d7ZpL TU3l16vrm26WV7Vc+0/x3xzao1O+90Si3m2MpD8ZihTfGYsuuTye1HB2a3bX yW1FG49P0jfv2y7cOjEq3rtZv+7t6ZOfbu5SXqxqK7la0lp/o7ix5dp/in9x aNc/i46olB+9Ech3m8JpT0fDobsTEcXXdsbXXtiT0Xr2UGHXob20TTu28SeG 9Rz6N8mPtPXJTtV2y8+XtKuvKNsqrinbm67+p5jq8rSZag8NnOqMTP7RH4Z8 vzmU+mw8BPxrV6j65v7oyqvHU+uPH0Z17ZqkDI9u5W0fGBHv69JzaNTvQVT2 yM5qOpUXpR0llyUdNf8xprr/xSFoqis8+edAKOLDSDDl+bYg4YN9wYo7J8N1 F84k1+47iOwd20ke2zjO29mt59C6WXa4bqPseJl+P0al33+QdBVfEHfpe6b/ h/hvDt1hSb8G/w977xXW1pk1bHuSTMpkJskkmWTG6bHjOLHj3o0rYHrvvYPo EgIJ9V6QhIQqqkgChCQkeu+9V4PtGFdsg3vv/fm2nfnyvf/Bb0OO3oMc3Of3 tfbeurTWs9Z69kfcq92Tcq11d/aFgb2U2SMHWENjXsrG7shSa3NqnaEuu1UH Oahe5P/QO8GHahAsqP5ANXInSCWCyT8KMGz5GRTa7gNGW09QvifsQYNN4s3u ncjzk3sw0zN7OO0jXpqKziiroSmtXleHaVVXUzrlv+X//TwrY5BVyhqmmjmj JDN/7I8CSl447N8HzHs9QPXOkEdt2+KujmxLPXFic/bAkd38miFvnbEzpkzb BK9X1mFb5dWUDij/7xZAuT/3Re5fxhqgWjmDJEvu0B8FGDf/DIogB6uNG2jY EnC7b2PEmSNbYsbOrcc3T+8Rmgd99drOuDJFc0adrB7XLKmhtouqGZ25UO6f U8nqYVawe6nlnD5yOe8PA0ybfgYlu/eAqq3Oj9rXeV+YWOt38OxqWOeZdaSy qf1i3WCAXt6VYJG0IqtFjfiGvHpqM7+W0cqtYbazq1mdjKqcLmjSvItSyev+ owDzhp+BZdsu0LjW/vrgT45HTv/g3XP1p5Sq0+upeij/zx8O1gp7Eo38jsyy 3FZ8FbeZUstuotUzGumNtAZmE6We1Uyqy2kh1nFb/yjAsu5nULV22/3uFTYn jn2zs//KsoCaqz+nF52GFn8dcs4TjIUpuYPJ+pzerBJmN66U1km0UjrI5aR2 aiWhjVaFa2VUY1tYNZgW9h8GlK35+XnLD+vOTS39ZejiF/vqHywLNlxdky47 Y0PiHfXgsqYixPSxFAVlOLOAOJitxw3gijD90B2hfSQDqpdSktVDM2b20E3I bqb5jwJql/9wdfizZWPzn6xuuv/FAePjFSHy65tTePPQ3vZTPjTyTDQHfzhF kD2FEGdNZkmRE9n5iHGsHD6GV6SPEZVpo2RV6ihVnTJC/8Pc6/rXfw6e/vu/ W+98sr4UfO2gfLo6iH/bJoF+2SWDMB+IxczGkDNPJdHhx9NZqceQOckzKE7S 0Wxu4q9YHuwIPjfhCJEff5jMjztMEfxRpqb+9l7HxX98VQb+tVEDltnngY2+ jAe2EcRbXjD01dB0+KXozOQLCWjYfComfg6OizuHJMScRRGiz2QTo89gSFFn cKTIWQI5YpZE+aMA3fbvgPrAFqD0cgYa76AHWt/Ea7qA7HPaUNYxdYJ0SgHX j8pwln4JvaZXzK3vFgiaO7mi1naWtKONJu9qpah6Woi63mZ8SX8D1tpf9wf4 0+G3uP0Zhz/j8D+/nz/fh/9l74Pmxe+kpzMo8Ap6oPOGXdP7Z8/pg5nHC2Il U6o03ag8u7RfSqnulebUdwn5zR28vLY2trizlZ7f00xR9TURdQONeONgNa50 sPIPAHTbvgeaA1uBysMZaD2CHhZ6wq4X+aDniwMYJwojxdMFSdoxVaZ5QE6o 6s1n1ndJeM0dAn57K0fU3cyU9jVSlYMNJN1ILd44asWbh0sJi+c3B/utQO3u DHTugQ+LPBJuGLxQ8yV+9JOGMOGhwnjNmBZuGlRjK3uV1PouOae5XcTraMkV 9DayxYP1NMVoLVk/YSUYAD9AwL8mSojG0WKSaWSxAP2LOEAOGjcnoHcNfGRw i79h9Mg6b/ahnTIF5x0uiVZPFKWUDOlQ5X0FpLouNau5PZ/T2ZyX21/PFY3U spXj1czigyXk4oM6inFMSzGOLpaXDgWQQ4GrEyh0CXhU4hp/0+yeecHiRT1t CeD/WhqhnDQlFo8YkNb+InxNt47e1K5mdzbJeP11QtFIRa58opSjn9LRi6ZV 9JJxJd04tlj+n4OLEyhyDnhsdIm7aXFFXizzIM9W+ObOlIfKp8ri9WMWuHmw FFPZY6Q0tOvpnXWqnP5yqWDUJJROFPILppQ5hdMylmFCyioZXyxAv/V7UGC3 FWidnUCxk/9jk1PsLatLxqVKN9KZGi/usZpg6aGamIKJmjTDSE22pceKb2g0 UDoqCpj9JgVvRC8VTapEqmkpv/CQkGeYFHJLxhfL7w46J0dgcPR/UuoYe7vc CXG52pVwtt4j50RjgOhIc5Ryui1VN9SYZWmvxNbXmEkdpYX0/kINZ0SlzJuA +pCn8qSFh3LzDJO8vJKJxfL/cShx8HticYi5U+kIv1LnjJ9rdmee6vATHOuJ lE71pqr7WpClTTXZ9eVlhA6DkdqnKWSPyLT8CYFaNsVVF06zpcWTORLDxGIB hdCz0ELPQu/oCIwH/J5a7aPvVh9Iu9roiD3f4Uo7M+DDOTEWzR8fTFF1diBK axvQdeYqfLvWSunLNzKH84p545xC6UFmoX6KrjJMMpSGicUCCrdADrZbod5i B2Cy831Wbht1r84u5XrrAfSlXhfSuQlf+syhOPbgSLKyuRtuLm9G1xbV4tuU FZQeEZR3c6Gcm24UTZBL1JPkIsMEWV8yvlh+dyiydwCl+32eV+2LuN+4L+lW lx3y8qgLZvaYP37icHhu52iiqqYnw2RswdQU1JFa8qto3S/O/lkW9jDFnDuG N8nGcabCMZy5ZNGAov/GwWB7AFj3eoPa3WGP2vbEXx+0TT13xC398El3Su90 kLBuKF5r7kJYdJCDop7cLIFyb14Fs5dZxh4gW3hD+FLRMNaiHsZYtIsGFG3+ Huj2bwUl++xBxS7P5407g+702kSdP2gbO3PaFjl4wpnRMBkgLR2IK9R1wq2K ZkytBHIQ1jDaX5z9M6Bzf0o5t49QltePLcuHUC4aULzpe6DftxWYd9mCmu1u j9q3+l0e3RF0/OTO6JH5PeiWGcccy3iAXNcfVyzvRFjFLdiavEZKI6+ODmW5 zHZGdU4npYrbRawUdOMqJT3YStmieelQtHsLKNu+DzRucrzZv9Ht9MwWz7H5 LQntcztxZb868nRjgYr8/oRiUVeGhd+Gq+S9yP+hzJ/ewGii1rFbSLWcNnxN bju2RtiBrREvGlCy4XtQsmMTqN6460Hnmv1zU2v3Tcyt8eu4sTG54sxOou6I c65sPESRN5io5/UgTTmdOCuznVRBbaVUk1voNdBe7DpcE7se08htQDcIGtEN eU2LBRjXfw+sG9eDplVbLo+u2DJ1ZsW+rhurgyuvbUzTn9lFkv7qxsudDJfl jCRrmAOZhbRebAmph2DGd5Et2E6qFdNBL0O3Myuy2nMqkW28KmRb7qIB5jXf gZqfV93u+371kVNf/tJzbZlD9aNVYYVXt6RLz+4ncI95sxmHIvOokyky4ihS hRtGF2QP4XSoQWJh5gC5CNlPLYbu5zTAe1klab0cY1oPd9EA68/fPm775vsT Mx9/0Xdl6cbax8ucix6tCZdet0nlzDthaKf9qcRjsTnYIyl81DRCiJzKkiAm MdL0CVx+6jhRnjJOViSPUZVJY3RV4ihLDRtlLxpQ//W/5yY/+GTw0j+/rXv0 xVYDWOGS/3hTKPfWfhj1skcGfj4Eiz4TS8o4lURLOwFnphzPZCfNoHNgMxhu wlE8N/5XIi/uCDk39gh0XfVhhiD6D3Bp4B9/Hz72/ocNDz5ebgRfbZeDVU68 5zsCaPedovA3/RKzroanp12KyUy6kIhOmE/DxM1l4GLOZeGjz6IJUWcxxEio /hBxhkCCag/k8FkqJew0bdGMTL73ZvPZ9z8xgU9XKMF3W3PBens62OuJf+oe mPkwICL1blhswu3ohJibsKSo6ykpEdfgqWHXMtJDr2alh1xFw4OvYBDBV7CI oMv4jMDLpBcgFwtQb1sKlAd+Afle+4DSx+O52i/8njo45aoqAjunSGCdkCFE h8U49UQevXiEz7MMcvIq+1iS2h66vKGbomrqIhU0dxEKWzpxJa2dGEtbR3Z1 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 Bp0Izok4GlASM+hbkzDg3Zrc69Wf2uU5ktbheS29hf9XeoP33bQan7tplb73 Uv8E+KEaQvYuRD9alkEB6osp198C1ca75mrNZT/X2Si/qSNrP6txMH5YzsHf yPdyuJQR6Ho6KdL7WGxi0GBEZmR/SEFsV2BFUrt/Y2qzb1d6o8+RzHqfi5k1 vrczK/zvZJQF3EkvDrib9ifAH9UQJoP6D1DuLUI9a5Xo+aw13PGjASfzscl6 /2QzSf1Js4Pe7Wpn68slHvTTuX6uw+lh3ocS44J7YlMj2yNz45pCS5PqgmvT qgPbMysCDmWVBZzNLgm8lVUYdDszP/h2Zl7wnfQ/8W8NEXsWQCaqoUR9NVQf 2AgN+tu+tZhIv223lH3eSVB62EbVHatnWZ2rcKMdL/ThHMoO9u5Oiw5qTUyK bIjNiquOKkouD69KLw5tySoI6c/OCzmZkxN6Myc77FZ2VtjtzIzwOxl/ADJA zb8CArYKQxTqFcuSQ7lXfRXUaq+HZt2tn9uNdk51m+952m8rd6fLXudyM8Pq ZA2XdriUz+nND+S3ZUUE1afFR1YlpceVxucnF8SUp+dENWZlRvbkpEUey02N GstNibqZnRJ1Kys56nbmn/i3hhiUcXJQDZXo76l6zXU/Ww9s+thtIPlyALdz fNB63/VeuwPn25wsj9VzqAOVnuz2Yn9+Q35YUFVWbERJekpcXnJOclZiaXoq eilqUlxnTnzc0dy4uCuImzlxcbey42JvZ/4JCETXIU5KHM0nLUFnk66ARvU1 3zu0Nrzr1938/LDJ1vtHLfZeHSBpn+pysBhqdqF017q7NFX4elUXBweW5EdF 5OUkxWVkZiUnpxWlx6fUZEUnt+dEJg/lhidfzI1IvpkTkXQrOzLxduaf+LeG hF3iUCC7GPX+L4MW1VVfu9XXvh48sO7piPH628fNZC4MEbWO9dLN+9ud7dua eM61td6epRWBAXklEeEZhfGxSXnpSbE5BekRWVVZoZktOUEZB3MDMs/lBmbe zAlKv5Udkno7809A0BYhSNophuYwUPZWXArtSsun+1VWTg5rrnx0Vnft2Enc njNHbTUOH6TiunqYdo1tXFZFk5dHQV2Af2ZVWFhSeWxMTElqYnhRXmpQQXmm X35Ttnd+fw4//zTiZrZP7q0sv6zbmX8CglENqdvF0AzEQmhUWPKzS17i/dB+ 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 wUtpMdKL/+diYsylIJqgABF0dQh20QcfTxx4BuOBG0cCl0zqHLPI4adjNeMH vdl5htrF/kY55PrF/gT3M/ky76Pd37y35FduE9Q3vPv0t25jDu/cLzq+8zjr 9HuAjVwQS1YUfBQXQzjKF7F6myDBbBfyQXIQS1WDCJYeBLnhwMcfP+sZbTfD S6V9Zec5fWKVsz4y6tkfHNtd39H7eW9ow+5T1PMek9S7Hs+okx736a89rzm+ 9brg9IZ/ivGGf5z5xvt3AAfVwN4rCv4Ki5GDWAmJqCclFbcTUvGykGSvCnFO Oj8jXE1mgnysP/uG233wSqS9dctiTHGKXSadq11fMJvdJpy6PZ44HvZ87HDG 65HDTf49xxf8UafX3ucYU74jrCnfI86v/A65/B5wRTVw96D+JLlFEKeCPIjO Bsg03Y56c/ZChp3SzxQH7a/xbOOPEZ5Wb4KDSZN+sbRn/DTmE/d89t+u5bz7 7HqPO84d/JvMgz5jjBHfUcZVv8uMp/5nWJP+x5wnAwbZLwP6OC8Dul1/D3CR j3KXFoGwf/I/6sXIPLAeco0lIc9q91wucf/XLJrmh1SWwVS8m8XzqADi45BI 2n3/JOYtfrbrmEex+xVeNf+ia7PveXa3/xmXw4GnnM8FnXC+H3yE/SK4n/M8 uMv1eXAb73lwC+/Fb/m3Bi8pEYiUWQipqC8mVxvNYqBno9hCaqaIIPexgKI6 leOk+yyNi/s7wdfmdmQo7VpIHOuSfxr3nHee5ynPMp8R9zr/YV5b0GHuQMgh 1xOhA65jYb3cibB23kRYs/tEWL3Hs9DaPwC8f3zUThGIQdk7Q2kpFGitQedy bporN9vxuRwv86bUTul5kYPWo1yO8S3UJnolPoh2PjKKdTIkiXcsIMtryLfI 7yC/MrDXsymky6M7vMP9aESb26XIFvcnkfWeTyOqvZ5GVPCfhpfxJ34LuG0T At8dIv/O7WUrorl75EorDDZ8rzKR/FBtKT1ZTZB7XElTvVPIMrqa5Y4/l+JH HYkLcz4cGccbCE3j9wTl+Xf4lwW3+NSFNXq3R9bxD0XVeJ2NruI/iC73fhxV 4vMkqsj3SWSB79OI3/FvDQHoO5G4Wxxy9y+BMs0VaBZk7Zc6o81vGsx3PGuw 2fOg1l7lWhnD8Hw+Dz+S4UMdSg5m9cVF8zqjkvitYVn+DcFFITWBVeGV/i1R ZX79McW+J2KL/G7G5vuPx+QGPI7OCXgclR3wJPJ3gDu6DkHIxSRLi0EBej4r NZbP1R1YPd2ov+FVi+nWx21Wu241kJRRt7jByWKO9ZFcL0pfeiCrIymC1xwX z69DW82VEfkhpaHlEYXBjdF5Qd2xOUHH4rKCRuMygx/FpgePx6SFPI5GRP0O 9CNfCEJQxkmVEoMi5Cmr1Zb+aNBc+b5Vd+2LTuMND7vMd15rISqdq3XQP1bO thoo9KB0Zvsxm9NDebXJsfzy+JSA4pickLyo0oisCFRRWGdcStiR+OSwy/FJ 4Y/iEsMfxSaGj8ckhj+O/h3ggWoI2yIM6VKiUCK/EGpVlnxrVl/2plN75USf wZq/ek13XG4nKJ5spOkNVTtb9pS62bcU+DBrs4O55elR/KKUJP/cxKyQjLii iJSYajRV2BYXGz0YHxN9ISE65u/46OhHsdHR4zExUegFfL8BPFENEZuEIBPt 9ZbJob53pUWf25SXvOrVWDo+qLvixoDJ9vNdNvuPtVB1++uYFu2VXHJ9CZ9R URDILcqJ8MrJjPdPT0sPSUopiIhNqoyJSmiJC084GB+acDYhJPFv9Oej2LD4 8ZiwuMfRvwO8tgpB1EaUe9HzWblP7FeTwoIPXfsXPT+ksujBsMby0UFjydN9 eIWhDnud7maGeVMtx66q0tOpuNTfNacwzDMtL9YvMSc1OCYzNyI8vTw6OK0x LiC1L94v9VS8X9r9eP/UR7EByeMxgUmPo38HeKPsH4NqyEN/Z9fsFf3Ruk/s bd8+safD+8Vun1BddvGo4dbjh6zkBnrI2m3tjma1TWxSaZ27Y26VLyetPMQj oSTaN7ooKSg0PzssMLckyjenPpaf0x3nmTMS75F7O84r+1Gsd+Z4jE/64+jf Ab7oPsSvF4RC9HzU7xH52iktMjkoJfzotIzQ2GkViTMj+psPH7GU7TpI0mrs oZuWdzgT8lvc6OmN3i6JdUHuUdUR3iEVCQH+ZRmh3qVFER7FtdG84s4Y1+Lh WE7J9RjXovFoXv7jKPfcJ78FAjcIQvI6QShB34umXULTfZJCz45vEfzr4nbB S+eVlhw/rbepf8R8b+sRokb1IZpxUR/LJrObS03s8GJGtQZwQ5rCvPwa4vy8 6tKCeLUFoeya6ghWdXsUo+YIYjSKUf0k0rn8SaRLydOI3wEhaP30tQJQuVlw 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 U2TRnFVpXZ/ZZFeT3uVYmTbiUpa6ya0kdYd7Ucpxj8LUWx4Faa/dCtK+uxak YRfAeS04HGqQwolwAQd6XsWOrsK686UONnS2hx8d7lEg7unSZ15os+KZaXYW naj3kR2pDlbpq4jS6ixNNGgtzjBuLMw3r80vt67Krbcty+lwLM4acinInHLL zVzyyMk84pGVed0jO+ule3bWN9fsLOzyb+BIqAH43q9FbOhGLRP6tZUFne8G 79/Pi1Ygk9rRq8s030Xnnmp3FBlt9pLpbwhU7qqN0GytitdvqEgzrinLNa8o KbUqKaq1LSxoc8zNH3DJypt0y8hb8EjLPeSRmncFeOGemvfVLTUPu6blYZe1 4GioQSYbelnKhP6op6AL7czodB+cfTjEg/YMyRIWBrWZNveZc41Bn9Rgh4d0 d0uAUmtTmEZDfaxedW2KUXl1tnlRZZFVfnm1bXZZi0NGSZ9zSvG4W1LxVveE ohWP+OJfgWfuCcVf3BKKsWtiEXZZC45lQziHBd2uIKJLTRR0pgvW/geZ0P71 XGjHqDRhbr0mZXLIlGOk31awt8dNqq3LT6GhPUS9ujVat6wpybCwMdMst77A MrO2wiatptE+qarHKb5yg2tMxZxbVMU+98iKi8ATeP3JNaoCu0SXY+e14AQW 9CWfjK5VE9D5Nlj776OgAyNw/sAYB9o6IYGmx9XJoxuM2fvXMwQ6hlwkGvt9 qNW9wapl3ZHahZ0JBjnt6SYZrXkWKS1l1glN9XYxjZ2OkQ3rncPqZ1xD6/e6 Bdefcwupf+QaUvfRJaQOO4fW/hOcQkGPixH6tR56/ztJ6NAgCe3ZQEILU6xo 87QoGp9WIQ1upLF2TljxNY05iVWPesmWjgQqFwyFa2YPxOml9aUaJfXmmMV1 l1hGddUywjva7YI7hh0D2zc7B7TvdvFvPws8cPZv++Dk34qdAlqx41pwBgHd KkfofDOcfwAZxPJ6IlqchPV32I8xPieIhuYUid2z+szNM3Tumk0OwqVTHlL5 kwEKWeOhaqljMdqJo8n6MeuzjCNGisxCh6otAwdbGf4Dg7Y+A9P2cIirg+fA aQfP/vsOnn3vAGzv2ftP3udB/lAD+UMHQgcgg9gO/nd2E/h/8J+Di7yoe0mO 0LKoTalZMOMo3WonkL/FTTxzzk82ZTZYKX5zlHr0pkTt8OkM/eCpAqOAjZWm vpPNFp4T/ZbuExutXSe2M1wmTgJ3Gc5jbxnOG7DNv3GnBGrQBPkD+O9d4H/n p8B/r/pPyEHa93Chpr1ShOq9GqSSPcasebsZPBk7XYSTdnhLxm4PlItcilAM XYxXC1xI0/Tblqfrva3CwH1rk5HL1j4Tpy2TZg5blsztt5wA7pjZzb8xt5v9 bmE7i+lr+aMKoRNQg+Vh8P8wBhuhD2EQ/F875CC1h1hRxWERVHRYmZhz2IAp 7ZAlR8JBR77oA57CYSsBEkErYTL++2PlffalKnnuy1V1XS7TcFpu1HZY7tW1 XZ7QZywv6lsvHzNgLP+pb73njYHV7m+GlrvwPzgHNTgAfRiLkMNMQw4zDGPQ Ab0YtXAuZtFJZpR9hg+ln5UjJJ3RJsWeMWOOOGPLEXzajTfgtJ+gz+kQUc9T 0RJup5KlnU9lyzmcLJW3PVmvxDjZo2x1clyVfnJBzeLUUeC2qsWJ12rmx79q mB3Dmms52gUZEIzBZhiDEchhOiEDqAUPXnSChNIhB4n7jRNF/y6Gwi+rEoIv 00gBl62YfC47sXlc9uJ0vRzI4/R7JL/97wlCtr9nilj/XixmeblOwvxyl5TZ 5TFpkyvbZIyvHAFuyhj//kLG6NdPcoaXMHUte2AMZmEMRuegBwHmQB30ghRB L0Y6nA0aA+eThtzhQoF3xJHfHSWC111dottdM7LTXRsm+3uuLLb3fNms7wVz WN6L5rK4n8xjej+Xz/h+uYDhg2ZBgwcDQvoPNgnrPtwtovvwrIjOw3siOvff iujc+/oPtsBzMAYZRDfkQPVwJseqfto56IH4jYAC4HxSn+c8yPOFOHJ9oUhw fKlFtH1pRLJ6RSdbvLKnmL12YzJ57cts+DqYxeBNNKvemxQ2nbd5HFpvKzk1 3rZxqb0b4VZ9P8uj8n4fj/L7c7xKH+7zKr179Q8m4DnshTlYD70oRZABrOpH /g49EJCDuL1kRk6feZDdF1Fk/UWOQP+qSjD9pks0+mZMNPhOJ+l+t4McwgVy CG8KbAyAHCKSSQknQQ6Ry0zFlSyyuJ1FBo+wSuNZVim8l1USn2KVwNf/QT/M wUbIIIqPgv5PoH8ZIV/Qd7yLkM0XCqJDDmKKBSGDkED6WJ6gg9UIGliHoIpp RDC7kENYQw7hADmEG+QQvpBDhEAOEUcWxpmQQ5SRBXAzhR8PUuDHuSm8eBHY 9w+a4RkoOQz6Z/+j73MT8o97CFm8QsgYE0CXHWljHqQOeYwKvA9FLIfksBJB GqsTJOC9iGEaQQSbEQSxFYEf3gsvdifyYH8iLNoTOXAykQ0XEFlxLQkOTCcx 4xESE974D7CODhHTNIl/ZQCmuiRsakzGpgwKNnZnxkbBbJgWz4n1s3mwbjkf 1mkSwNrdQlh7SBhrjQObRLDmVlGsuQPYBxwTw5rngVvAE+At8FXsqxYW/aKF xT5rYnFAYi1YD/IHY3UiNocMwALyGDqNjOlWFGzuyozN1rFhkxgubJTJi2kl /NigXhDrdwhjvQERrLdBFOtOAXNiWGcJ2CuOdQ4DZ4HrwCPxbzpvxD/rfhH/ qIvFP+hiifc6WPKdDpZaCzYAfTPw/6sZwGpvDGM1D6JTsLUTM7byY8P0SC5s nsqLTQsFsHG1EDZqFcGGvaKYNgLDMCmODWYksME2YJckNjgAnJL8anBZ8rPB A8kPBq8k3xp8lnxtgKWgM0X6pQGWeaGPZdeCjUCbDv6fAT7TDrIQRxgPRzMK drBnxnbe7NgmjBtbJ/Jhy1xBbFEOQ98I2VSnODYdlPhmskHyq8m05BfjeanP xtulPxnvk/5ofFz6vfEv0q+N70q/MH4p/dTks/RjYyz7yBhTHxpj+Qf/QQGu /wObrepD/uAAntsF3oc75FIexhTsxmDGLu7s2CmIGzvE8mPbDKGvjGLRz9a1 4h+tWiXeW/ZKvaOPSL+hT8i8tpiReWWxIPvSYo/sc4sjss8szss+tvhT9j79 hewdi0/U2+ZY4aY5VrphjpWv/QtwLDMB28sQsAv0mHtCFuELuZSfAfTG0Jmw txPbdw8/7s9ukfzvnVOE3zjmib20r5B4btco9dS2U+aJzYDsI8YGuYeMaep9 xhbqPeud8netD8r/yTgrf5NxS/4q45nCb9YflX+xxqoXrbHaeSusds4Kq68F M0DfCby3B6x1+8sS4KeYiDgYxiPIlOnrOjvW936eXK98QvifecYLP3LPFLvv Wix517lG5k+nVtlbjj3UGw7D8tfsJxT/sJ9Vumy3pPyr3T7lX+xOqly0u6b6 k/1T1VN2H9RP2GHNo3ZY6whwGDi0BmwHft8NfL8fEAy1CIe+kEgN0tdIQ8rb cCuW5yEunA8DA/juBEQJ3/RNFb/qlSd92aNc7pJ7g/xF13al8y59yj+5rFc9 4zyldsppXv2E0y6N406HNY86XdQ65PxAa7/TW51lJ6y7G9jljPV2/gvYCfy+ F/jeQPD+EVCLWFnC93gV4tt4XdLTODOme9EO7DcjfHiuhIYK/xyUIHEuIFPm jF+R/EmfKqVjXk2qRzw71Q95DGgecB/T2u++SWfZbUF3j9s+vV1up/V3uN3W X3R7ZbDV/Rtt3h3T5oDZfwG7gvf3Bc8ZBn3msSIIJ0kSPqbIE56lqhPvpdDI 15MYLJfi3Hl+ig4UPhkeLXk0JEXuUFCu4v51pSrL/jXqu/1atHb6duts9xnW W/Se1N/mNU+b99plOOd1zGjG6w+jaa9nxhu9PxtPeGPjcWDMBxutBbtD7rAO /G4UeP9EeB9pouh1pjS6n61IuJ6tQ/wlg85yJsWZ+1iCn/DB2HDJ5agEuV3h GUrbQwvUFoLLNbcE1evMrWvTmwnoM5j2HzXc6L/JeMJvyWTM76DpqN/PZiN+ j8yG/D+aDfpjs4EAbNr/H0zg+j+wF9QgGPzeqv9P4UWfswTQkzwRdKtAGl0q 0CCeyTVjPprpwLWS5i20OylYcik+Rm5rTIrSXFSO2uaIYq2psGrdidAmg7GQ LsP1wUPGw0GTpgOBW837ApctegPP0rsD79E7g95ZdARhi/ZgbA6Yta0B+0Lu EAZ+LwHeRwYXepfHg+4XwXl3JSLoXIkq8ViRMdNKni3XrmwPwYX0dRLzKZFy mxITlDbGZ6iPxeZrrY8u1xuKrKP1R7QZ9Yb3m3aFjZl3hM7S20J3W7aEnrRq Cr1t1Rj2xrIhDNMbwrFF/X8wh+v/wP7guyNhrTeZA33M5kCPoOf7RikH+rlC EJ2sUCIcLKMx7S625lzMdxWcy/ETn84MkxtPi1Van5yqPpSYo90XX6zXHVdN 64hpNm6N7jFrjlpv0RC5ybIucod1TeQx6+rIG4yqqFfWlVHfrCqjsSVAXwte B/cfzY5wKht6nMeCrpawoEuV4P2r+dCRGnnCcpU+ZanckmO+2FlgqsBHfCw3 WHY4K1qxPyNJrTstU6sjpUCvNamC1pTYYFwf32lWEzdEr4ydsiqPXWSUxh6y KYm9YlMc94JRHPfVqjgeW/4XOlz/Bw6CGsSxog8ZzOhGIQVdKmdG52rA+9eB 96+XI+ys0yFvrbZg31ThyD9e4iU2XBgo05cXodiVE6/WlpWm1ZSRp1efVkqr Sa01gQMvzcuSBujFSRPWBYnbGPmJB2xyEy/Z5iY9Y+QmfbHOTcJWucnwl2cN 0AYLc4EZPc0moT+KyehCFRM6Vc+MjjRyo71NMoTFRi3ybL0Z22SNPd9IhYdo f2mAdFdxmEJrQaxqY16KZm1Otm5ldjGtLLPauDijxbwgvdcyN23MOjt1i01m 6n7b9NSLtulpT2zS0z4zMtKwFWCZkf53cBgLfCaQ0e1chC6VkdCZWtj338SE Vlo40Y42KbSlVYM01WzCOtpgyztQ6ybSVeUn1VoeIt9QGq1SU5ykUVGYqVuS X2BQmFdpnJfbZJaV00PPyB61Ts2as0nOWrZNyjoHPLJJyvrISMrC1slZ2Aqw /BEcQUGfUwnoegGsu1fCvv8GMjrYSkZ7OjjQQqc42typRhpvN2IZamFwdze6 CLfW+0g21ARRq6silcsrEjTgp8118kvzDHKKy4wyiurNUgs76UkFI1bx+TOM 2PzdNjH5Z21j8h/A9QP8G1sDVoDlj+BoEnqeAb4X/P+ZGiI60kxCy9CHsAR5 0Bz0B23sVSaOdNOYezutuNrbnAQbW7wkqpsC5coawpWK6uLU82pStbOqcvTT KksMkytqTRPK2i1iS4esoko3MSJKdtqEl5yyCSu5xwgveW8dXoKtIkqw5Vpw HEJ3shH6uQx8Zz2s/bcR0c4eAtoC/RhTg4JodFCR2D+gx9TRR+do6nEQqOny ECvrCJApbAtTyG2JUc1sStZMbczSTawvosXWVRtH1baahdcM0EOqp6yCqrdb B1afYARW37EOrHprFVSFLf8LHa7/AycidCMfoZ/A+x6GDGIPeL9t/eA9R4ho wygfGhilErpgz1rziBl7zZAdX9mAm0hhn59UTm8INb07Sjm5M1E9viNDO6a9 QD+itdIwtKXZJLC5zzygeZLu17Ro6dN0DLht6dP4hu7b+J3u24At1vIiDaHf YBxO1sH5B+C/t4P+DPi/DeC/BiZ5UNdGGULzpCapZsKYtWycwV2wwUUoe9Rb PG0kUCZxOEIhdjBeJWogTSOsP087qK9cP6C30dC3p8fYq2fc1KN7m7l79xHg ppl712sz985vADZz7/g7d2Eczlf8pwa7IYOYB/0J8OD94L/aZzhR06w4qplV JZbO0JjyN1txZG5y5EuZ9hRJmAqQiJ4Mkw2fiFUIGU9RWTeWo+43VqrlvaFe 1320y8B1dIOh8/qtRk7rDxk5rr9u5Djy0shx+KuR4xA2XsvVwv/UYF8nrP8P wvr7BvD/4ME7wAPXLbCgikUhVLykSMhd1CNnLJqzJi3Yc8Vuc+eP3OonErol RCJwPlrGfy6J6jOXpegxW6ziOlOr7jTTqeWweVTbbvO8ru3mA7o2M3/o2mx6 ocuY/qLHmMJ6jI1Y/0cuQA0OtcIeEBiDzZABrN8I/hv068GDFu+BHoS9vChz WRalLmsS45dNmKL3MtjC9rpwBe3x5vPfHSjksztC1HNXgoTbrgxp552Fcg47 qxVsd7YrMXaMqFjtmFO13LmiSt95WZW+/bmqxdJndfNFrGG+8HdOQD/Onh6E 5kbAf0MG0As5TCPol+2GNfgDJJR4lAPFHRNDUceUCWHHDEhBx+gU/2MOrD5H PTg8jgZwux4N43M6EivocCRV2PZIvpj1kUoJyyOtUhZHhqXNjszKmB7ZJ2ty 5FdZ08PPZY0PfpIzOoDl17I6D7dBL8okzMF+yACaF6AHYQ/0QEAOkngczmGA c1rXnedD/hdkke8FTYLnBWOi2wUG2fmCC5PjBW8WuwtB7IwLUZxWF5K4LS7k 8JpdLOc3udgsYHRxUIh2cbOwwcVlYf2ffxY2uPBUSP/8BxG9c1hsLUsDMAdg Dg5CDtQK+hWr+nAuZiL0IoT+REI+l1iQy3VO5HRdBDncUER2N3QJNjfNiNY3 bUn0m65k81u+FNNbIUzGt2JZDG+lsRrcLmTTu13LoXO7m1P7zwkuzT+XuDTv nODSuHOHS+PWay71m1+41W9+4/mRTatzcBp+jxUygCqof+4h0IdejFD4fRJv 6AdxvMaEbB9xI+tHosjysTwyf6yJTJ7QCEZPLQi0p3ZEvWeuJJ1nviSt5yFk jecxFLXn6RSVF0VMyi8amBVf9jErvJxmkX+1m4X66iyL3Ot7LHIv37DIvXj3 N9avPgNwJkg16Of9Vz/kAkKekIPYXUeI/piCzN5zIeP3woj2QQbpfVBGOh+1 keYnGkHtkzlB5bMNQemzE1HhixeR+iWQKPM1iiT1NZUk8a2IJP69gSz6vZ8M /ReQR+wiC+GTwC3g7t/oghysBnKw/NX6w/2H/IyQxxXIPyCHMIEcxOADCelC L4Ym5kNqWAwpY1nIIJQQFWsgGayHoCECcgg6QRTbEoSxK+QQvpBDhBF4cSLk EPlELlwH9EIeMQl5xDZgBTj8N+p2wj4YmH9Jq/X/BfSvIsS4hZAR5CBaLxHo IqSEWZA85DGymB80RZE4lkIimIoEsTLih/fCi3URDzZCXJiOOLAdgQ27E5jx OgIZxxAIOJOAcAXQBkAQjKeBzX8Dq2sRsLY6AetCBqCnTcQ6NBLWtiJhLVcy 1ghkwmqxzFgliwUrl7JhpXp2rNTBgZUGOLHiKLCRCyvOAgvcWHE3cBA4BfwO 3Adecn9X/MT9RQlzf1pFEfNCZ8gqfD+CNUFfT4WADSADoEEOQtMnYgM6Ces5 k7GuPxPWjmbGmumsWL2IDavXcGC1Vk6s1suFVUe4seoEsJkHq27lwSo7gf28 WOUE8Avvd5U7vF9UX/B+VP3I814N87xVxXwA/xtVLPBG5e9gHdCnKRKwMWAC +YOpLmBOwsYOFGzow4QNwpmxXjIr1s3jwNqVnFi7iQtrdXFjrUEerLmBF2tO AXN8WHOJ77vmXr5vmkf5vmie5/+oeZvvneYzvldaH/heaGH+55pY8JkmFnqq iYXXgvVX9cH/mwMWkD9YrfamGEMmZEvG5h5M2DSYBRvHs2HDLE5MK+XCBnU8 3/TbeL/q9/J91hvh/6Q3wf9Rb7PAB71tAu/1dgm81Tso8EbvrMBLvRsCz/Se CDzSfy/4QA8L39fDInd1sehdPSx2R/fvYKNVffD/VtIEbLuaRcC8sIc5YWcJ mZALE7YKYMH0aPYvFmlcn8wKeN6bVvG+NWnif2PcJfDKeEDgpdEGwedGU0LP jOaFnhptF3pstF/okdEpoQdGV4XuGD8WumX0TuS6ERa7aoglrhhiSdgxJPmb IZb6EWy6qg/5gy34b2d47aoMWQCMh6sZ7JeyZ/rs4M3y3i6M/bVNItcL62ze p1al/I8t6wQe0lsF71v0Ct2zGBa+Yz4h8qf5jMgt80WRm+bLotfNj4teNb8s 9pv5I7Gfzd9JnjP/Ln3WDMucMcOyp/4FTF/VB+/tDHhAFuEtT8A+MDe9DUkf PK0pr9xcWZ66BLI/dIrhvueQxvunfYHATdtKoes2jcJ/MDpEL1sPiP1qPSr+ i9WUxEWrLZLnrXZJnbM6JHXW6oL0Ket70ses38getvpOPWiF5VcAOM1GYS3Y GrIPR+hz9wDP7SeK8DqoRaAy4UOgLvFFgDn5oa8j8x1vX7YbnuFcV9wS+S65 ZAtdcC4WOedYLX7WoVnitH2X1En7QenjdmOyR+02yx22XaAest1HPWB7Sn6/ 3U2FPXYvFHfafVHaboeVl4BFYGEN2E4QYVfwvb7g/YOEEA4VR5/CqYQX4eqE +6E00s1gG8rldR5sF/2DuM/6xAic9EoVOeaRJ37EvUzyoFut9Iprq+w+lx7q Xudh+d1Ok4o7neaUtjvtVF5yPKKy4Pibyhanx6qzTh/VNjthtU3OWG36X8CO oO0BnnM1gwiD11FC6HWMJHoQo4BuROsQLkXSKT+FO7OdCPHjPhwYLrgSkCC6 7JchsdunQHqnd4Xckle9/IJHu+JWjz7lefdRlVm3TWqb3RbVp91WNKbczmlO uN3XHHN/pznqjjXXAyOrePwdOIYaYR/w/iHwPqK40ac4XvQkQRDdTJRAvySq E87Em5KPxdizHoj04t4bHiy4MyRGdDEoRXLruhzZuYBi6oxfleK0b5PyRp8u 1QnvIfUx7wnNUa95rRGvPdpDXqd0Brz+1Onzfq0Dv7ql0+ODdbp9IG1eA2wF RTgAfHc4O/oSy4FeJnGiuylc6LdUIXQ2TZlwNMWQvD/JhnVXvDv3YkyA4JbI CLGZ8ASp6dB02cmQfIWxoDKl0cA61eF1reqDAX2a/f4btHv8ZnS7/Hbodfgd 02/3u67f6v9Sv8X/m15zAF5FF9D5EewJvjuIFWrAgp4kMqPrqSzocgac95fJ j45nKRBWMvVJu9KtWBZSXLjmEn0FpuNCRSdiYqQ2RKXIDUdkKwyGFyn3hVap dYc0aXQGd2m3BQ3rtgRO6TcFLho0BB6i1QX+RqsNekarCfpiUBOM9auDsd5a 4AgsGAcm9C6WjG6mkNCvmUzoQg4rOpXLiw7myaHduTqkhWwL5tkMR66pVC+B seQg0ZGESMmBuES53tgMha7ofOX2qDK1log6zcbwdu36sAG9mrAJg6rQrbSK 0BWj8tCLRmVhjw1Lwz7TSsOxAaC/FuwLvjucjB4mIPRHOpy3l0NBp/PB+xdy o+UiabRUqEWcyzdjnsqx4xzL8uAfTg8Q6UsNl+xKipNtT0xVaInPUW6MK1ar i63WrI5u0amI6tUvixqjFUfOGxZGLhsXRJ4zzo96aJQf9dEwPxrTAIO1YH8K ZEEEdDsZvH8W/OYgrL8fK6KglRJOtLNUEm0tVSduKjZmGiuw4RjOc+Pry/YT 6cwMkWhNj5ZpTE2Sr0vOVK5OKlSrSKzULE1o1CmK79bPjxul5cbOGGXH7jHO ij1jkhl73zgz7oNRZhw2zIzHNMDgR/A6Inofg2AegN/KJaATRSR0sAy8fzl4 /0oxNFOpSpwoN6SMlFiz9xU583bm+wi35AaJN2RHytRkJshXZKQrlablqRWl lmnmp9Tr5CZ36mclDdPSEzcZpSbuMklJPGWSnHjXJCXpnVFKEjYEaGvBQQg9 Ae99JQP23BfAnvdSWHevJKHt1axovkYETdUoE0arDSgDlZZsXWWOPC0lXkIN RevEqwvCpcvz4qjFOalKBdk5qrlZJZpZmbU66Rnt+inpQ7SktGmjhLQdJvFp J0zi0v4E3hrFp2FDgLYWHIrQXfDev4DvPAne9wB87dpVQ0Bb65jRpgZBNNag QBiq1yN311qwtlbbczdUeAhWl/mLlZWGShUVx8jlFyYrZhdkqWbkF2mk5lVr J+W26sXnDNBiszcaRWctGUdmHTWJzLoFvDGKysKGAG0tOAKhWykwDnnQe1AG 6941CC01gPduIqGJZn403EIl9DZrk9qbzFgaG2y5quvc+MtqfEWKqoIl8yqj ZLPKExXSyjJUkksK1BOKK7Vii5p0owr7DMILJgxDCxaMQgoOGwcXXDcOKXhl FJL/3TA0H9MAgx95F43QtXTovwDvexAyiJ2gv6UFfFcbrD138KC+ThnU0aFJ amw3Zq5uZXCUtbjwFTZ5C+c0BIpn1EfIpNbGUxNr0pTiqvPUoqrKNMMrG3RC Krr1gsrHaOvKthr6lx008i/7A64vDQNKv9ECSrHBWh7Fw/MA43C8FGoAGcQi 6G8C/7e+G7xnLxfq6JNATX1qxJpeQ0pZtxVbQZcjT3anp2B6e4BocluYZHxr rGxMc4pCRFO2cmhjiXpQQ51WQH2njm/dqJ533byBV92KgWfdbwaetc8NvGq+ 6HvV4FX0fuQOPJPnYC4eWq0B9ADMgf44eOC+AfBeQ+yocUQEVY8oEUqH9ckF QxYsWYP2nGkD7nyJ/X7CsX0h4lE9UVJh3YlywV2ZCus6i5R9O2rUvDraNT3a R7Td2md1XNr36bq0/6Lr0vZM16X1s65LC9Zxaf471+B5OLlag3rIH0B/CnKQ Ycgh2kchf4D9QRUTAqh4kkrIm9QmZU6YMqWM27DHj7lwR2/w4Q8fDRQOWR8h vm4kXspvJF3We7hA3mOoSsl1sFXFaXBI3WFws4b9wF4Nu8ELGnb9TzTs+j5p 2vXif3AR5uKhaqgBZBAzcP8bwIP3gH7jJKz/bgb/B3uksmalUNqcOiFx1pAc M2vFHDHjyB6y2ZM7cHMAv/+mMCHv6VhRj+lUCdepXGmnjRWyDhub5W03Digy JjcpWU/uVraaPKdkNfFYyXL8o7LlGFax3PB3TkEN9sIYbIXxn4D77wcP3AI5 SCXkADngg5Nhf1LCdhEUs12JELFdjxi63ZwcuN2O2W/Jjc17yZfTYymYx3Ux it9pMUnIfiFbxHahVMx6W6Ok5bY+KYttUzJm23YBZ2XMtj6UMd3yQdZkHsuZ zGHqjxyshWcRcqBpGP9huP928MDVkMMULCCUAj40Yh8FheznQ4ErMihgRYPg s2JE9FyxJrutODG5rHixOK6sY7NbCeewWYnnstqfwUvfX8xvtr9e0GR/j5DR /klhw/07RGj7T4sY7nsgbLD8XtRgLxbT34PFf2Q3PIMzkAONgn4X6NeBftES rMHvgR6IFdiHcJSMPE5yINeTwsjllAJyOq2D7E+bEmxP2xAZp11IVqd9yBan g5nMTkczm5xJZTU6k89GO1PDoX+mk1P3zDiXzplFbu2zJ7i1z9zj0jr1jlvz 5DdezROY70e29EEGtB7mANS/YR4yqO3QA7KMUDTkAOuOQw/EGRKyvcCCLH7l Qua/iiGz3xSR6e86yPiyKTK6YkugXXElGFzxI+r9EUrU+SOepH01i6x5tYyi frWFonpthEnl2jyT8vVDwA0mpasvmBWvfGJRvPyd9UcmIYfqB/0m0C8F/Yx9 CMUcAf1TsA/jJ/DgvxCQyRUmZHCXE+ndFUI6d2WQ9j1VpHlfD2ncN0NqD2yQ 6gMXgvJDH4LSwxCCwqM4IvVRFlHucQVR5nEHSfrJGEnyySJJ4ukJ4DZJ/PEr kvijT39jEOZ/C9S/DHphMveD/jHQP4OQC+QgVr9CBnANMoDbRKTxihOpveJH yq+hB+K1PJJ/o4bk3uoi2bfGSPqdFZJ854jE33si0Q+BBOEPMQTBj5kEgU8V BP5PnQS+z+NE3s9LRJ4vx4HrwKO/0TYLGRTcfxbox0Lt18G9O0MOYXkF8o8b CKnfQUjxFULy39kgf+BB0tCLIQG9GKLQiyEM+YMg1oQMwgDxYTPIIBiQQbgg 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 6sXTnLxOoCExXKQmIU68Mj5Vqiw2R7YkpkS+MLpGMS+6TSUnalAtM3KjRnrk klZa5FGt1MgbWqlRrzVTo75rpEZhdUDtR7AvQvdgHH5JAL8F3vdANvS858G5 /3ng/fMF0XiBPBrO1yX25pozdWTbszdnunPXp/vzV6eFCpenRIuVJCdJFiZl yeQlFlKzE6oUM+NbVNLi+tRT4iY0k2IXtBJiD2knxF7VToh7qZUQ900jIQ6r J8ZhtR/5HoDQ7SgYh2Tw/lng+fLBb4AHny0ko8kiPrS+WA71F2sROwtNKc35 tmx1ea5cVTm+fGVZwUJFmZFi+ekJkjlp6TKZqfnUtJQKxZTkJpXE5F61+KQx zdikrVrRiQe0o5IuAy+0opO+akQnYY2YJKz+I29hLlyPhXFIA++fCzWAr11b S8F3lhLQaBkPGiiXRl3lGsSWMmNKfQmDtarImbO00JuvMD9QKDcvQjQrJ04i PTtVOiUrVy4xs0wxPqNBOSa9Wy0yfYNGeNq8Vljafq3QtEvAM3j9RSMsDauH r+EJzIXLMA4nMmHffwHUoAxqUAmeAxiAc0q6qyVRa7Uaob6KRq6qtGQpLXfk KCjz5MkpCRDILA4TSS2KEU8qTJaKL8iWi8kvUYjMq1MKz+1UDclZrx6UM6sZ mL2stS7nota67Kea67I/awRmY3VA7UfuQw5zcXUuQg32lEANIAOYqgXfB3TX c6DWBlHU0KBMqGrQJ5XWWTAX1NqzZ9e4c6dX+/GnVIYIJ1REicWWJ0pGlWXK hJcWUkNKqhUDi9tUAoqG1fyKNqv7FO3R8C46p+FT+Bj4pO5TgNV8C7Dqj9yO gc+EDJiLMAe2w73PQg4y1gi+C74Gt7SworpWIVTZJk8oadMh5reaUrJabFjT ml04kxp9eOMaAgWj6yNEIurixUNr06WCavJlA6or5X2rWxS9qgZVPCqnVd0r d6m5VZ4FHqq5VXxUdS/Hq6j8yNXVz4Qc8N4wBttAf6oZagAetK0D9h90UVB5 Nx8q6pFFeT0ahMweI3JKtzVzQpcTe0ynJ1dkRwBfaHuYYFBbrEhAa4q4b2uu lFdLuax7cxPVtalfwblpo5Jj0w5lh6bTyg6ND5QcGz4oO9ZjJce6v3MR5uIh mIc7IIOYBf0N7VCDbvCe4ENLIQvIG+JCWXB2UNqICiFp2IAYO0ynRA7Zs4QN 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 tWzWx73XdJRnt+k0z07Tbbw7TJf5lkxP8S2Y3uLfYvZKYNbsmyD8ypPQpv8y Ddf/A5uDtjV4fwfIIJw50GcXbvTURQDddpJEvzmpo3POpoRTTg7Eow7e5IP2 Icz77GJZ99qksu9i5HLuYJRwLVlX8yxYNfFus+rk22I5yD9nOS4wYzkruNly p9C05VHhKcsrwhNWz0Q2WH0RGbXCouuBkVWsscj/gS3B+9uB9wb//cqdGd33 YEV33CF/cBdEZz2V0DFPGuGAB4MIp7RRdroGsCy5RLBtc0rgnHdM5551yOfd bF/GN21fK7DRrkVwwq5HaMx2vcio7bToettFsWHbA2KDthfF+20fiffafZTo scPi3UDXKvb/HziCGrIoAnrtAX7Lh4Cu+FHQL77wewPQH3PETw7t89cl7PKj Exd9nCjz3j4sM54h7NMe0VyTbsk8465ZfKMuhQIjLhVCQ84NwgNOHaJ9TgNi PY4T4l2OWyQ7HZel2h3PSrU63ZNqcXov1eSMV5FsXAO2hY9uV/Cc8NF+ZR14 viASOh0Ee/4DofcgSArtCNYkbA0yJc4E2lGmAjxYxv3WsY/6hnMNe8fzDnil 8fd55gr2eJQId3lUi7a7t4i1uvVKNLuNSjW6zUjXu+2SqXM7KVvj9qdstfsb mSp3vIp0pcdfSMH1L1b/tLzxROgm/Jm7GAJ7zcOh5x76IfZDHrQjXAxtiVBF m8MNiZOhDPJoiCvLUJAve/+6EK6egGjeTv8k/ja/TKEW3wKRJp8KsXrvBola 706paq9h6Uqvadlyr+1yZV5HqSVeN6jF3q/kir2/yxb54FVkfgQ7IfQIavBH MHidCPBb0eD5oqHnPooNbY0WRptjlNBEtD5xfZQleSDCibknzIu9IzSQqzUk grcpKJ6/ITBNqHZdrkh1QIlYRUCtRJl/m1SJ34BMkd+kXIHfAjXP75B8rt8f 8jn+L4Bv1JwALAfI/shf4+AP3j8MvD/oH4gD3xsP661xzGhzvACaSJBH6+N1 CQNx5uTuGHvm9mh3tuZIf876iFCemrAY/qrQZKHykCyRkpBCsaLgKsmCoGbp 3KA+2ezAcWpm4Fb5jMADCumBvyqkBT0DvlLTgrDcf5GF6198doe5GAjzIBK8 P+gvJ4HvhRxgLhG8fxJ4/2RZNJCsRehOMiG1JdgwNca7stbG+nJWxQTzlEdH 8pdEJggWRqaL5Efki+WEl0tmhTVKp4d1y6aGbqAmh84rJIXuU0wMvaiYEPpU ITHsi3xiGKYCcj/y0gu8P8yDM+A7D4L+rlTwvWmw3gn7Qjak8aDBdGnUna5O aEszIjWmWDPVJjuzViZ6cZQmrOMuig/ny4uNFciJTRXOjMkRS48ulUyJqpdO iuqUS4hcLx8XOasQE7lXMTryPPBYMSbys3xMFKYCcj/yxBe8P+QwJ6H++0B/ KQM8H3ztGYfrUCYX6smSQO3ZqoTGLBqxJtOSUpHuwFKS5sFekOLPlZscypuV FC2QnpgsnJKQJZaUUCwRH18rHRvXLhsdN0yNjN2sEB67RzEs9ifgoWJ47Cf5 8FhMXSUiFsv9Hw/hefgFvm4dhRrsAd1tOVAD+Aq4Hq69uZyoPU8UNeUrodo8 PWJFrjm5OMeOOT/LjT0n05crIyOYNzU9SiApLVEoITVDNDa1UCIqpUoqIrlV NixpkBqSNK0QlLRLMTDpNPAAXn+QD0rE1OBELPcjd4Kg9wC+eh6EGuzMhnlQ AOveRbDmCdf2Qug9KBJCNcXyqKJYh1BcZErOK7RhyipwYUvP9+ZMzgvkSciN 4I/LiReKzk4TicjKFw/NrJAMzmiWCczolwtIn5L3S9+h4Jt+ErgHvJf3S8NU QM7/B27C83A6AcYhE/ov8sF3lsC6cxmcPVAKa/9lzKi6nB+VV8iiogpNQl65 MSmz3JqSWubEklTqyR5fEsAVXRzGG1kUKxBWmCIcXJAjui6/TMI/v1HKJ69X 1it3Us4zd4nqkXtc3iP3DtUj5x3VMwfLeWZj2R+5DONwDHKY3ZDDbAH9jZXg +6og/wCqq0moBM7uKaiVQjl1aoSMOhoxpZZOTqixZ46pdmeLrPLjDKsK5g6u jOILrEgS9C/PEvEpKxHzLKuXcC/tlnYtHZdxLlmQdSo5KudUclvWufitrHMR llnLBXgeD0INtkP9Z0B/Qy3kD/Xgu4DiRui/b+ZCmS1iKLVVCSW26hJiW8xI US02lPBmF5bgJm+2wKZATv/GCB6fhng+z/oMQff6QmGXuhoxp9pOCYfaDZJ2 tVulbGsOAzelbKtfS9lWfZeyrcR/4zTUYAAvQNC/L4zB1gqoQR3UoAnyhxZY +22F/KEDvFcXG0roFkSxPXIoqkeTEN5jRAzusSKv63Zk8uv2YPHp8mfz7Arl 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 eeCoSXfmGdAX82bSB/aOdM3el12aF8HOzUvizszNFrxtVyw8aVclesu2QXzM tk1yxHaJ5LDNMrmDNkPyB2w2yu+z2aGwx+ag4m6bM4o7bT5SHLV9oLTV9nfp iC2uIDtetul/4O0k8KE45MQI6Bf4AN+7ydNdZxl9Ol+L3nMxoYuutvSOqwc7 6RrMHXOJFRx2ThUenJ8r3udUKtnjVCO327FJfqdjh8IOh27FUYeVStsc1kpH HLZKN9vvlW1yOKG8weGa8jqHeyprHJ+qDmET6NVg8H/g7bF8z4XosSdiPh/E /z7wH7zgP3gi/8HbmE76WNNRH2d2wNuP2+sVIdzpmSja4ZEh2eZeIDfiVq6w 2a1OcaNri9IG10XSdS59ysMugypDLhtVB112qq1yOaq20uWS+nKXr9X7XX/V 6HPlNXpBjxuv/ibj1vIfHsh3R/z9KW7x7yEX4XKgmM76w38InEiHgmbSniB7 NhboxW0LCBZu8Y8Rb/RLkVvnmy0/7FOkOORdKR30WiAb8FqovMJzieoyzxVq fZ5r1Xs8t2ss9TyoucTznNZiz5tai7x+0urw+hvwWu3evOabYLkjPUL9vwxG 3BuOXO9IzLPDseYf61MOhOnSrnAz2h5uyzaHuXHrQ/2FwyER4tXBCXIDQekK KwLzlPoDSmW9/jXK3f5Nqkv8OtW6/Po0On2HNNt9R7QX+u7TafU9rdPi94lu k98POo3+fwFeu+ElWji+ACmPdC8Aa92hfzkG+rGYZ8dgv70o7DkQrUVbY6bS xphZbG30fG4wyke4MjJUvCwiRq43LFlhaViW0uLQQtmikAqV9uB6tYXBbeot Qd2aTUGrtBuCNurUB+7WrQs6qVcTdEOvOuihXnXwn7pV+CPxQAdov+Z3L+SA hGDfhWjEnAmI/ZMQa+CRuzsOew7Eq9OGBGNak2BJq+AHLYvzFPTGBoqXxETK LYpOUOiISldaGJkna4koVWmMqFFbEN6sURfWpVUTtkKnKmy9bkXYmF5Z2PEJ pWHX9EvC7k8oCf9DrwSbtANdoPOax77oB7TBlTi0QTJi/zTMs1Mxz03iaGOy Cq1JmUQDKTOoP2Uu605yE3Ql+ovaE8IkrfGxCs1xKUoNsdmy+pgilZqYSrWq 6AaNiuhOrbKofp3iqGG9oqjRCQVRR/Xzo65MzIu6p58X/WxCXjSvB3Tz3+Ah +uHTKMT+qP8J6B/IROwPNuN8GPuEDqTrU3+GGS1Nt2GL0pwFbak+ouaUEElD crR8XVKiYnVihrQyIV+lPKFMrSS+XqMovk27IK5XJy9uSC8nbpt+VtzhiZlx l8Ad8Jt+Zhw/AegB3dfcx1j8EGPgHOp+LAuxfw5i/1zE/ijHqiwp9Wfr0tIc E+rMnsUWZjlxTZlewvqMQHFNeoR8ZVq8YllqqrQkNVe5MKVELT+5ViM3uVUr O6lbNzNpUC89aUQ/NengxJSki+Bb8FQ/JYmfAPRS3+BOGK4HjIPTGYj9ob0T U57NYDXOl+Up0tI8LerMn0Kt+VasMc+eq8t1F1bl+IvLs8PkSrJjFQqzUqT5 mVnKORlFqlkZVRoZ6c1aaelLdFLSVuklpW3RT0jbPzE+7Tz4GjzRj0/jJySk 8XpvchvX4hWMg5PZiP2hPVqCmK8YMR/OlxbKUUeROrUWG1FD8UxWWzyXqyxy FZQV+oqKCkIk+fnRCrn5SUpZeZmyjNwC1dTcCvXknEatxOwunfjslXqxWZsm RGft1Y/KOjsxKusr8Kt+dBaP7/F6b/IF+uEi+v54HsYi9LeWI+4FvTjvLBVR S5kqLSifRDXl5lRRbsNKyp0FhWXeorzSIEl2aaR8RkmCYlpxuiy5OE8lsahM La5wgWZMYYd2VMFy3YiCDRPC8vfoh+afATfBz/j6H72wPH4c3dd8hH44i3Fw GNPfnfBhNlWPe0CIuSoRd2KtVF21MlXVTKCyWhMqrp3F8mscuZwaD2FmdYA4 rTpcLrkqTiGxMlUprjJHOaaiRDWyvFY9vLxNK7SsTye4bJ1uYOkuvYDStyf4 l342IaD0J72Akr/1Akt43cDi//JeCtEptMH+MlyPNYg74UP01cH/AHU4r1ig RMWN2lTQOIVymyxZVtM8Lq3JTZDc6CtKbAiRxDVEy0cvSFKMXJApDasvUg6p q1YLqmvV8K/t0fKtHdb2qRnT8ao5qetV87GuV/VjHe+qvwCv413Ja7/mMsb/ cfT/btR/SwPivia8+weNoLwF8f9CecppU6fMdkNK65hByR22LKHDmYtt9xJE tweJItojJWFtCfLBC9MVAxfmS/1bK5R9WptUvVqWqnu0DGm6NY9quTYf13Jp /kDLtekHLdfG51quDfz/4R20wSG0+w7or2/FtbAQcVcb4p52xF1diH0XCyhl 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 3GUxLByz2CIatdwt2m55XLTV8l3xFqtvxButfpWst+Ll1lnzcmvB8Bu80Mft 5PFc3F7tCd6LkD6xwd9cnIP9H2yN6e251nR8rjMdnuvHDsyNYHvtErlddhnc mG2BYNS2XLjdtla41aZZtMWmU7TZple80WaVZL3NBsk6mx1ywzaH5dbYnJdf bfOl/IDtY4UVtn8rLLfjFZb9D+O27m/QvuOMmM8N/oMbo8vzkf/gAP9hPvwH 5xm0z9medjl7slHnYLZ1fgy32SlZsNEpW7jesVC01rFCPOxQLx5yaJUMOiyW G3BYLr/Sflhhuf1WxX77/Yp9DqeVehw+Vlrq+Ei62PG5tMuRH0dp0Rvwdrj9 Qv+mJ/R98Z4RvO3F0XF3+A8e8B88TWi7lw1t8XRlGzz9ubUe4dyQe7xg0D1N NOCWK17hWiJZ5lol1+fSKN/j0qHQ7dKjuMRlUKnLZZO002W3rN3lhHKby3Xl VtfvlVtc/1BuduWVm9142Zv86YDHjwdiTtjbF4Mwzw/Gu84AzPV95WnMV5NG /CfTBn9rGvZ3YoN+3txK32DBMt9oYZ9PkqjHO1O8xDtf0uVVJr/Iq1ahw7NV sc1zsbTVc4Ws2WO9cqPHmMoCz2Oq9Z5XVOs876nWej1TrfHiVV6hjOMLfkIb fIW6X4P2GTzmjuKRuw+PmbEgEW0JUqV1wYa0OmQmrQyZx5YFu7OeoADBksBw YVdgnKgjIFXc5p8j1+pfJN/sV6XY6NeotMC3U1bn269c4zusUuW7Xa3C97Ba ue8l9TK/b9VL/Z6qlfrxqqX+L1DB8QWP8Gj7DPW+BP2T0fA/YhBv4TgSxmhd uDINRujT8ggz6o2woSXhLmxRuA/XHhYibA2NFjWFJIkbQjLk6oPz5WuDyxSr g+qllUFtsvLAHpXSwNWqxYEj6oWBBzQKAs9r5Ad9DZ6o5wfxaq9QxfEF973Q DyGI/aMQ+8ch9k9AzInjenw9GCWlZdG61BMzjbpiZlFHjBNrjfbkmqICBQsi I0S1EfHi6ohUucrwHPny8BLF0rAaaXFYi3Jh2BKV/NBVarmhm9WzQ/dpZIWe 1cwMuwV+0cgM49WB2puM+3HjXthp6B6CD7IzBTEnjkOxiHfiFKkb+/csSphM bfCDmuPtWUO8O1cb5y+oig0TVsTEiEtjkiXF0VnyhdGFivlRldLcqEbl7Kgu 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 1I2zlurkrFW6YdYGXTdru6612q/jVlfrGvaMOTr7Th2xfkRXWf9Wh2w+0gHb 73Wl3ZT2X+IKjt87YG+6Maww1L7AMPeEC887yc/52bY6a+2mO22D8Vjiddou SzfaFeuGOdW6bk6Trp3TqeNz+nQN+8Zcbb9IR+yX6Sr7NTpkv1kH7PfoSofD usLhBu11uF17HB/SLseXtcPpY213ZoWZCzv+wJZLfO6J9RrA0BdC7B2I/+BH 3Md7tzEv5rSjg046++qES6SOuaToqGuuDruW6ZBrrQ64tmi/21ztc5unvW7D 2u02pl1uE9rhvk7b3Xdoq8cBbfa4Vps8b9EGzwe03usFrfP+QJM+32mNz5RW /xcfofsaw/uT0cS9kVzGGNpOBnHZJS/HPfndB293HfQJ1n7fOO3zzdBu3wLt 9KvQdvaM2erXqi1+Xdrk16+NfiNa779E6/xXa9J/s9YE7NOqgKu1IvBmTQSe 0/Kg32hZ0J+1JPgbLQ6eusg4R4M/oX8hnrpP5JLK8fpYnruTl6vIy4Eg/Icg J+0K9tO2kEhtCUnWptAcrQ8t1rrQKk2GNmp1aLtWhfZoReiQJsIWaVnYhJaG rdfi8F0aDz+sReGntDDiHtNoxFOmkch3TcORX5mG8V/mG+DBGLwVxyUvlUcb cIqh/SiXmQPkZU8M8X8kax/YO2djpKfWRYVoTVScVkWna0V0vpZHl2lpdI2W RDdrPLpTY9HztDBmgUZjlmhBzKSGY7drKPagaTD2elN/3J2meXGPm+bFv23q i/+nqTf+F5j6D6+g+VgW7Z/JLQ6wbJt5LsTe1MvGeJPWxtlpVbyrJuIDtDQh SosTkjWWkK2FCUUaTajUgsR6DSe2aSixW4OJQ+pPHNO8pFXqTdpi6knab+pO PmGam3y7qTPlUXjD1JHyOfxsak+ZukgHxwtons+dngNzNIdnvdnok5f1acTe 5G8i2VpLUpw0luKj0ZQwLUiN1/zUdA2m5mkgtVTzUmvUl9qknrROdaf1qytt VJ3pE6aO9I2mtvR9ptaMY6aWjFvNmjMeNmvKfBX+Af82NWVOmZoypnkWzXMF 9MN85n/AjjzmmpOX1eRjOfkbz5il0QwHDWd4ajAzWP2Z0erLTFZPZra6s4o0 N6tSnVn1as9qU1tWr1qzh9WcvdTUlL3O1Jiz29SQc7WpLueMWW3ueXgFPjWr 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 31lA0lUASkA5qAJ1oAm0g14wAO4qs8EDvnGPQe/ORDgQCj2wAw6EAl6RCvRf /1NQVFJWUVPX0NTW0dU3MDQyMTWzsBxuZW1ja2fv4Dhq9Jix4yc4u0yaPGXa 9BkzZ82eM3f+goWLFi95Zdmry19fsXLVmrXr1m/YuGnL1m3bd+7a/eaevfsO HHz7ncNHjh47cfLU6TNnz7lf8PD08vbx8w+QBQWHhIVHREZfiom9HJ+QlJyS mp6RmZWTm1dQWFRcWlZeWVVdU1ff0Njc0tre0dnV03vlav+1gRs3b92+e+/+ g0ePn7z3/rMP/vDRHz/+5NM/f/7FX778+q/ffPe373/48ad//PzPwf/0v/9a etrh9/L/n9X+CsOkFleVXF4Ln9eTnN4YrzeX3H6E5PcjcXwnyfPHSa4/Ed+f Kjm/q+T983B/N8n/l9IBXpN6wGqpC7xBH9gsdYIdUi94i26wX+oHh6SOcJye 8K7UFc7TFy5KncFX6g2BdIdQqT9ESR0ijh6RKHWJNKlPZNMp8qVeUUK3qJD6 Ra3UMZroGW1S1+iW+kYfneO61DvuSN3jIf3jqdRBPqSH/EnqIp9JfeQrOsm3 Ui/5u9RNfvnn4KG9JxkUeP4qMVYq/Lfe8L/7/Gt9/W8q7P+pxv7/rbL/7xr7 f62w/1ZfQkFh2DBFRSV8RkVVVU1NHb/R1NLSxnV09fT08R5DI/zHxBQPMreg RnAivAg3wo9wJMmT5K405Ev/zZnkvoQrvfa6NJQykm7eun3n7rf27j946Mix k++edffw8vEPDA6LiIqJi09MTk3PzGa4lEbLikqcQu4T/80lhnxC7hSSV+AW +AWOgWfgGvjGnz7GOz79M/7x+Rd4yJdfffU1TvLNt99+h598/8MPf//7j/jK P37++Zdf/vlPXl/+f3b5H/erW346oOP652t6O59e0Ynqb5hU1FO7qqqtcn9T Y8n5ruo8WX9ldsCtsoyAe8WpskeFyYFPAFVAqr8LkoLfz0sI/TA3Pvyj7Lio j38rfrdhqA5/r4ff6+Hf+9Lv/vC7P/zuD//358vv/eL3fvHv/eIRc5hPrmvP /HSAOcxV7aj+RpfCnrqVzGH2NcvnMPmy/oqcgFulmcxh0pjDpAQ+zU8Kej83 MeSDbOYw6Zcj/vhbgQ0Wf8SGT67r7HzcpxXV3zShsLv+9aq2qr3NDSXnuqvz A/rLsaEEG4qwoQAbcrEhOzH4g4yE0D+kYMdvxUNs+PCG1sw/3dDZ+ahPK7K/ ZRw2vFbdUrWvub7kfHdVQcC1MmwoxoZCbMhLkT3JTg58LzMp6FlqQvCHifFh f/itkGx4elNz5kc3tXc+7NeM7G8dW9jV8Fp1c+W+ljrJhvwhG4qwIT8t4GFO quxJZrLsvbSkwPeTE4M+uMy88rfiwTV1i8e3NGe8f0trx33JhrbRRR31r9c0 Ve5vqS0531OJDaXUQ0Gm/73c9ICHWakBj9NTAp6mYEcCdsTgF78V96+pmz/C hsd3tHbcvaYZebVtdHFb/YqahsoDrdUl7j0V2FCc438rP9P/bna6/4OMNP9H qan+jxOxIw47oplj/1bcw4aHtzWnP7yjuf32Nc3o3taxxS11q2rrKw62VhW7 95RhQ2GO/83cLL+7mRl+91PT/R4mpfk9uowdl7AjIjnovd+KuwPq5vex4f5d ze03+zViulrGlzTVra6rrTjYVokNJdiQjw3ZWX530jJ97yVn+N6Px44Y7Iik XcJSAp/8VtwZ0DC7d0dz2t27mjuu96vHtbe4lDbUrq2rrninraz4Qm9RgX9/ bq7fjYxs31spWb53ErAjFjui0/0ehKf5PwxOC3z0W3H7uobpnbuaU2/d0djd f009vqV5cnlt7fr6ivJD7cXFF3oKsCErz/d6aq7vzcRsn9txWT53ojN970Zk +t0LyfC/H5gue/BbcfOGhsmtu5rTr9/R2NPTp5lc3zSjoqpmY0Nx+eH2gpIL PbmFflfT832vJeX5XI/L9bkRneNzKyLb93Zott+doCz/OwGZsru/Fddvahhf v6vh2ndHY3/bFd306sa5VcXVWxrzy4+055Re6Mos9u1NLvTpu1zg0x+d7zMQ QZ2E5vreCKJ9AnICbvrlyG79Vly7qW7Wd1djbvcdjUN13SbZJfWLqnOrtzdm VhxtSy+70Jla4tsdX+zTe6nI92pEoW9faIFffxCQ5ftf88sPGPDJC/zNuHJL 3bL7nsbC1jsax8u7RuRm1y+rSa/Z2ZhSebQlufxCe2KZb2dMqW9XZIlvT2ix X29QsX+vrMj/in9RwBXfwsCr3oVBvxldt9Vs2u6rL627q3Em/4bp5ZSWV0oS anY3XK4+1hRX6d4SV+HbFlXu1xFa5tcZVOrfJSsN6PIvlXX7lgR2+5QEdXuV BP9mtN5VdWh4oL6i5LHm0bQnhgFxAzMTojo35kU2vVMRWXuuPqrKpzms0r81 uCKgTVYe0OZfLmv3LQ9s9ykPavcuD+7wLAv5zfihTc/4720mE39stln7We0o 92t5iwp6srdVdWQebWjJuNjalCbrrE+U9dRelvVVxwQOVEYF3SwPD75dFhJ6 tzQo4n6JLPphsf/lR0V+yY9fFr/bMFR3v9fD7/Xw733od3/43R/+5/mDrvS8 cJE/L+qcpOdFofx5kfVfnhe9z58X158/L+6UhYbeKw0Kf1Asi37E8+JxoX/y S+OHdl3jH9pNXP7eYr32szpH9/58t8KenK1VHVlHeGZ5tDZKz6zkgCs1CQHX KuNkN8ovBd4uiwq6VxIe8qA4NOxRUVDU08LA+PdyZUlPXhbft+sY/dBu7PL3 1hFrP6t3wIaFhT25Wyo7sg83tGRiQ7qsqy4l4Gp1UsBARTy/IcTK7pZcCnxQ HBX8uDAi9Gl+aNSzvNCEZ5nBSU9fFpIN33cYu/wg2dBgjw0LinpyN2PDIWy4 0NqYKeuqTQu4WpUccL08MeBOabzsfnFc4OPCmKCn+dGhz3KjIv+QFRn/QVpY 0tOXxd86dIz+1sGbvNqssGGke38BNuRtquzIwYasC60NWQHdtekBfZWpATfK kgPuliTKHhbGw0FcDn6WeznsDxKXkRYb/0FSdOJ7L4vvOrSN/tYp2TB87WeN du59BfOxYSM2vIMN7q0N2X7dNZkB/ZXpATfLUuFBkmWPC4jvJA4kKyHsD6mX wz9KTrj8YXxc4nsvi286tY2+6zR0+Vu75drPmmzd+wrnFffkb6jsyH27oSX7 fGtDjm93TXZAf0UmXEx6wP3CVNnjXPiHLPiHNHiQRHiQuIToD+OSEt9/WXwt 2dBl6Py3Dos1nzXbYMPcop6CNyo78rAh92xrQ55Pd01uwLUKftMqygi4n5cW 8CgrRfY0nZg7idg/DjuiE8M/iEqOe/9l8ZcuLcNvuw2cv+swxwZr976i2UU9 heux4WB9S/7p1oYCT4kPulaaHXC7ABuyiTHTibmTUwKexCcHvHcpOfD9iKTQ 98OSo997WXzWrWX4Tbe+87edZms+a7Fy7y92LeopWlfZkX+gvqXoRGtDsUe3 xEEUZfvfyoUHySDWTUnze5iQ5vc4NtX/SSR1EpoS/DQ4Jfyl8XG3puFfe/Sd v+kyXfNZm6V7f+mMop7iNRUdhXvrW8uOtNQWe0gcxEABPEgW8X8qcXcicXcc 8X808X84bROcGvRYlhr60viwR8Pw6169CV/3mKz+rN3cvb9samFv6cqKzrKd dU0V77RWFHv0FhPXSfF/OrFuEvH/ZeLuS9gSAScSCjdD3P0wID34pfGkV93g y6u6E768YrT68y4T92uVLoW95a+Vd9W9UVtD7F1SfLE3n/g/k1g3hbg7nrg7 Bg4gElvC4GaC4YhkmbJ7fplBL43HV9QNPu/XHv95n/6qz3sN3K/VjCm4Uruo rKFmU0Np+dGOAmzIKfTrSyvwvZaQ5zMQCwcQhS3hOb43Q3L8bgXiJwH4q192 4Evj4VV1/WcDmuM+GdBd+Wm/zvmBJru8jqbZ5eXV25vyy4935JRc7M4g/k8q 9LkaV+DTF13g2x8BHxGa7zsQnOc3IMvzv+6fG3DdNzfwxsvi3lV1vYc3NMY+ vqO54uFNzXMDnSZ5lQ1LqvOrdjdnlZ9sTy+72Jkij/99pfj/CvH/1TA4gGDi /0DaKIA+45cvu+aTH/jSuN2vrnv3lsboe/c0X7t5U8OjrtWhJK9uZV161d6m lIpTrcnlF+Xxfyx2SPF/GPF/cJFfbyDxf0BRwFX/woCrzzmAPniAl8KNa+ra N29rjIKLWdN9S8OnoHN8XkrthrrE6v2NCVWnWuIrLrbGlfu2R5f5dYSX+nWG lPp1BZX4d8tKArr9S2Q9vsWyHp/ioB6v4uDel8W1AXWt/jsa43vvamyqeKjp mTIwNuFy+6rC2Lp9tTHVp5ouVXm0XKr0a42o8GsLKfdvDyoP6JCVBXT4l8k6 /MoCO33Kgjq9S4M7vUpDXhq9N9T0uu+qT6l7pLEl4xODd+MeOwRG3Fh8Oax3 W2Zo++HC0Oaz5SENXlWBdT61/rV+9b41/g0+1QGN3tWyJs42e1YFNV+sCm7x qAx5aXTcUjVpvq/mmvtXnfWJf7XcH/nx+DOB783387v3RrjPjX1x3v0nkj2u nEk/3+OedbbrYs7pTu+8Ux2++Sc7/ApOtAcUHm+XFR5vCyo61hb80hisM9IZ rBvhNFg1ZskPpdMOvJ+7MLw3cXd5V+Lxmo7Ei/VtibLmlvjAtqaYoM6GyOCe utDQK7VB4X01sshr1X7RA1U+sTcqveJvVnom36q4mHmrzCPrhfG7DUN19ns9 /F4P/95/fveH/2n+YOU0WD16yQ9lUw+8n7cgojdpV3lX0jHGSY/61mT/5uaE wPbGuMCu+uig3trwkL7qkLBrVYER1ysDom5W+MbcLveOv1PulXK3xDPjbpFn 5u0XxWC9oc5g/XCnwZpR2DDl4Ht58yN6k3cO2ZDk3tCa4tfSlCTraIiXddfF BF6tiQy6VhUWcqMiOOxWuSzyTpn/pXulvvH3S31SHxR4p9/L9c6486L4LzaU Tz74Xv68SLkNyUdrOlLON7Sm+rQ0pcg64M17a+PgzS8FXq+MCL5VHhp651+c efyjAr+UR9m+6feyfDPuvigGGwx0BhssnQZrnZb8UD4JG+ZG9qbsKO9KPlLT nnq2oSXNW86D1CXBg8TLrlXGym6WRwXdKQ0PuV8SEvawKCj6CRzI05yA5McZ /mn30/wz7r4ontvgOFjruOT7iokH3yuYgw3bh2xIO9PQku71Lx4kER7ksuxW WUzgvZKo4IdF4aFPCkKj3s8LSXiWEZT8OCUw7X5SYPrdF8U/G/R1BhstHAfr JBtcsGE2Nmwr70o5XNOe/q78N4znPEgfPMiN8oSAOyWXZQ+KYoKeFESHvp8X GfWHrIj4D1JCk58khKQ9iA9Ov/ei+Gejvs4/5TY4LPm+0uXg08JZUb2p2JD6 Tk17xkk4CI8hHiRDzoPcLEuCg0ggDyI+6P08OQcS/XFqTPwHCZFJT+LCUx/E hqXfe1H88qsN9ZINztjgig1by7vSDta0Z56Ag3Bv+zce5FZpasD9In5fzksK fpZF3kEqORhJcCBxsUlPL0WnPoyOSrv/osAG7V+azB3/WW+/5PuqCUM2pGFD +v6a9uxjcBDn2hpy4UFy4CCyyAfJCHiQTw5EFjF/GvkPCQkhH8YmRn8Yk5j4 XlRcysPImLQHL4qfm/SGbGgYiQ3jDz4tmhnVm7alvCtzb3V7Dtxc/pm2hnzv 7po82bWyIQ7iQc7zHIjEZNn7sfAxkYkRzyKT498LT0x5FB6f+uBFIdnwc5OZ 4y8Ndou/rx538Gnx9Oje9M3l3dlvVnfkw8UUnYKDuNgt5WIUZ/vfzuU37ox0 /4fJ8CCX4UGi4IXCkkPfC0m59DQ0LeVRSErqgxfFP5r1tP/RbOrwSyM21Iw9 +KR4WnRvxqby7twd1R3FcBDlR/87B3E3hZhfyj+4RD5GOHUSnBr8RJYa8USW dvmhLD35wYvip2Yd7Z9aTBx+brJZ/H3tmINPSqdcupK1vryncGNVZ+WO2saK w3IOoggOIifX72YaHERilu/dWPiHyP/FPwQ+9E8PfeibHv3ANyPu/ovixxYd rR9bjR1+arZe/H2d08EnZRMvXcl7vbS3YkVFe93Guqryo+QgSByEX38GHERy rs/NODiIKGyBf7jzK//gmxl8zzsz4p5XZvQL47s2ba0f2gztf2y1WvR9g8PB xxUTYvpK5xdfaZ5TWluzraGE+D+/+GJPNjkIqfz2H89v/5fgICL47R/+4WYg HJE/vuqbHXTbKzv0tmd2+Avji3ZNrb91GNh/326x6Idm24OPq0bHDjSNym9s dKssqd7VlFd+oj0bDiIdDiKxyOdqLHkIkXAQYXAQwfnP+Ye8gOv8/n/dKzfk hmdu6AvjWZe65jfdeiO/7TJx+659+IH3O4zD29tGFpXWv1aTU7WnOaPiVFta mWdnMrF/XLFvTzS2hMNDhFAvgYX+fQHAr0DW51MQ2O9VENzvWRDywnjcrabx +VVtuy+vGCz8qsd4PzxAQHmLc0l23bq61Or9TcmV77YmwkHEl/l2XCr17Ywg 9g8t8esm/u+RFfv3BBQH9PgVy3p9igPlsb9nUXDvi+Jej5r6o2saNn+6oT3/ 4T3NHc33NWXZXVNykmo318VXv90YV3W6ObbyYksMsX9kuV97GAgu8+8IJP6H A+iEA+j0K4UDKA3qggPo8noJ3L6ipnrnhobVvbuaczoeab5Z+L6eT+L1yfGX utbmRLbsK41oOFkVUXuhPrLat4kchJaQCv/WICkPoUImz0PwIw/BdygPod2r nDyEl8D1PjWV67c0hvc80FhQ+pnOruSPh5+JeDxJFnz7tUuB/TuSZD2HM2Wd Z/L82twLfVovlng2e5VdbPIpv9DkW+He6F95vjGg6lyDrOpsQ2D1mfpgEFLz orjar6Zy5ba6XeUz9YVpPxtvjv561MHgj2ee9n22zNvr4ZZgzzsHIt1vHos9 O/Buwrv955JP9l1IOX71YtqxK17pR3t9Mo70+mUe7vHPPNQjy3qnOyj7ne7g F0bXdVWN2keqjpn/0JkTOzhiRehPzlv8v5m3z/PzFcfO/2nL2Xc/2ON57L13 fA8/Pi57+9Hp4AMPzoXuu+8RtveeZ/ieu94Rb931jXzzjn/k7juBUbtuB0fv uh3ywhgsN1MfLB85YrBkoutg/txNf8lYfvZRwta4KzHHy7pjLlR3xvnVtccF N7ZGhzS3hIe1NYWEdzQGRnU1+F/qrveJ7an3iu+t80y8UueRcrX2QkZfrXtu X9X5/BfC7zYM1dfv9fB7Pfx73/mf4Q+m6oMVdowPLowPczZ9kfnq2YeJWy73 xhwv7447X9152aeuPT6osTUmuKU5MqS9MSyssyEoors+IKq3zjfmaq335b4a z8T+Go+Ua9UXMq9VuucOlLrn9b8IBiskG2xHDJY6uw4WzN70Rdaycw8TN8f3 xB6r6Lp8proj3kviapta4oJamy4FdzREhHbXh4T11soir9b4Xeqv9okbqPJK uF51MfVGpUfWjZILOdcLL+RdexEMVpioD1ZiQ9kE18HCWdiw9NyDpE0JPXFH Krri3x3ii5MCJB6krTE2qLM+KrinNiz0ak1Q+LWqgKjrlb6xNyu8Em5VeKbe LrmYebvgYvaNnIu5Ay+CwUrJBhtsGI8Nrpu+yH7l3H3JhsuHKroSTtZ0JF2A i/Frbk6StTdeDuyuuxR0pSYiuL8qJOx6pSzyVrlfzJ0yn4S7Zd5p9wq8Mu7k eGXfzPTKHXgRDFYaqw1WYUM5NhTN3PR59pLz95M2JvbEv13RlQRvnny+/lce pCGB/MHYwL7qqKCByrCQm+VB4XdKAy7dL/FLeFgID5Pjk3E3wyfrZqpPzsCL YLBKssEaG8YN2ZCz+Py95I2JvQkHKrokLgYepDXNu6UpFS4mSdZbc1nWX3Up 8EZ5RPCd0pCw+8WB0Y+KAhKf5PinPMrwS7+X4pd1K8kv5/qLYLDKSLLBSm5D 8YxNn8tt2JDUm7ivQuIgOtJON7Sme7aQD9JJPsiV6gR4kDh4kOige8XhoY8K Q6LfywtKfD9DlvIoRZZ+LzEg61Z8QM71F4HchuoRVoMVY10Hi2ds/jxnEfWA DUl7KuAgqjvSTw3lxWQGdNX9mg8SL7tTEhv4sDA65GleRNSHmWEJz1JCUh4n wH/EBWXdig3Muf4i+JcNY7Bh+ubPc93c76WsT+5NfrMCDqK6Q+IgyMVozPLr qv2VB0lmPUhC4JP8y6xFiYv+OOVSwrP4yOTHseFp9y+FZt6ODsm+8SIYrDZU G5TqoRIbSqYN2ZC6Nrk3ZWdFd8b+6o5scpRyzrU25vh015KLUZlBLkZawANp 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 9ccdKuyOO13VGX+xtj0hoLE1LqilOVrOB3XVB0X01vlHX63xvtxffTF5oMoj 83q5e871ogt5/XkXCq5mexT1/KeQ21A80mRQsiFn/vK/p72+75OkDV6PErbH 9V8+WNQdf7KqM+FCbXuiXyO5e63k7sEHhXTXhYRfqQmI6q/yibtOvt7NiotZ t4o8sm/keeRey7qYfzXds6jnP8VgsZnyoGRD4URsmDdkQ/J6r0dJW+P64vcX dSccr+pMOlfXluTT2JIU2EpeTGd9dHAvfFC/lBNT4Rt7q9wr+U6RJzkontk3 szxzB9K88vtSvAp7/lMM2WA3ZEMuNqS/tu+TlLVej5I3xfUl7inqTjpS1Zl8 pq4txaupOUXW1pjAuhTyYqojggcqgsNvlfnH3CvxTXmQ651+N9M761aqd+5A kk9+X4JPYe9/isFiU+XBEskGF+fB3LnYsHz/J6mrvR6lvhHXl7S7qDv5narO 1FN1bWkeTc1pAe0NyfL1pP2V0YE3ysJC7xYHXnqUx3qgXzmYRDiYeL/8vji/ wt7/FIMlpkpyG4qe25CxfP+n6Su9HqWtjetL2VHUk3qgqjP9+P/F3nuGNX2G ff9x1FFrtcNardatte69J6gs2XtvCHtDJgkJBDIICUkgzATCCiNswt57CIIU ceBeuPc+/xe29/84nuN4UF4+L+4Xn9d8eiU2Ob+/73lF2ZBGrKlNozdWShjt X3Zz4iLPF8SyRuTRsWNpaBcnCfVQxJHp5+MiM/uEkTldgsjc9qnyr8Oq3yBv 2zbIPqL5Nk3D9V7aWcrFNN24boklemM5lTTLvCoaMkJqajLCmpQyRkephNFX mBx5IVfMvDKRgSTyEq+g/OMflH8M8tmZ53is7O4YZm7HVIGC32aCAjnkTzgc 1nyTpu56T6ZBuSg7K+pOM81tk9mVtGS5VTTkBNTU5JCblNmMjpJMxjm0D/IP 6mFcSUBdEGFC4lWeMHWEG5s2GB2T0R/Nze7hRMs7pwoo/sdh6zbIQQ7p6th7 mWqho1lqwp4MA3l7tmVxS55jeWOBV3WtIqShHO2aF2Qx+jPRLkYy6h7Efskf BCiDQNmDWDrEEsn6mbFZvUxeTudUAcWimVC48jcomHA4pPlGdgZ7P1uVfClX RdCbo5XTkW9Y2FZiWdJU4VxZURjcVIhmzZysiHNSNPvHoQwiGu1fRKZyRxnS hBGGBGUPiSh7iM/sYwhzuqYKFH5xWAQFW7aB/KDm20xV1we5x0mXFYf55xQn M7vK1PPbavSLKstcqgsLQ5pz0TnI0PyfhGb/WOSBugcXwtPYw2FpgmGaLHmI liYboKVk9tETsrunChT+OhOKViwCxeatkHtA823OcZdxxSHC1fJd3PNVu6U9 TQfk1VVGZYWlbrXyQlxzFnrmnoqe+8ejPQjUP+hHuw/n6TLmIEUWMxiaEXc+ NFPSH5qR2UeRZHdPFSj6ZSYU/7kICjdthbx9Wu/zDjk9KtsdcqN+Y9RIz8r4 uvojBYUoB8kp8ajLKMQ3paHn/6iD0CFAs/9E/2Bi94GG9h4mOgfkrNhzxOyE PmJOWi8xK7t7qkDxzzOhZPkiKNq4FfL3an0s2mP/rPZvvzu9KygdPasSi2pO FWdXWFeml3jXSYoIjSlo/o9DOQQvj94+0T9gyBlfegeoc9BDyonpIcqF3Xh5 UhcuVzZloOSnmVD6x69Qsn4rKHZpfarcZDXetQJ7fuyn0MqeDUlZtVpFkgr7 yuRS39rEYmJ9Apr/BeguBLSD8KV/EJHPaKflRU30DTrIedEdxDx+ByEvrgOX n9I+VaBs4QwoX/IrlK3dAqWb1Z+3rjAcvvKzfePYL9S83q0JqQ06uQlKp4q4 Mr9qUSmxVlhMq5/oIKD5f6J/0IzuQEC9g6gvnYPQAk4rqSCmlVAgaMUrxC1T BSp+nAHK336BipVb3tWvOHH54k+qLeM/OxeN/U6V9O8SxrXppsc2OOTzqn1L eEqCMqY8rDq6NLyWhe5CiEQdhIjiqIb/6R5QijiN5CJuE7GI30QoEjZOlZdV 82Z8qv7558/Vf2y+3b9gZ8f9BRqlzxe5pN1YTRIN7+Nw+3Ti2R12EmaLVyaz MUTOqCfl0+sohdSasKLQanoJqTq8lFDFKMNXRpXhKlnlwZWc8iAltyJAGTtl LtfNmv624cefHnf8uLr70ryt5W9/0sp4tdwh7t7mQM7YESpjRJdFG7Tlh53z iAvt9U8kdgcn4zrxkuAOkjSwPTTdvy1M5tdKz/BpjcjwbonM9GphZnk2c7Lc m2Oyp8o/DbOmXWqb8yPaRVmkvPfDzkxYpBH/fr0l5+k+bPj90wGhtwwIxDFb ashl1/CAUc8onxFfltdwIMfjQgjXbYgQgx0k81wGKXzn87RYp/PhAscBhsCh nym0748WTZWBplnTervnflc1OntJ9ucfd4hhuUo0bNMLf3/MkvzyrCPuqamb /0Mbb88HDv7Yu9ggl9teOKdbfgSHm0Ek+xs4su11YqjNNTLFeoxKtRqjhVle jaBZXImim1/hhE+V7pZZmOqBWbNz7s5amgC/bIqGtQfCYa8qGVTP4kDPyPeD iYX7Gytbp5f2jvbPXV1snnq6WT3x9bB4FOhp/ijE2+whwcd0nOxr8oDqZ/yA 7md0n+FveJ8ZYHAvOnCq1HR+h8m9NG1OAsz7jQtL1oTDpi1kOLAvBE4f9wHt M1gwPGsP5vrWn+2MzT86m5l+cLcweudjZfg2wFr/TYiN3huCre5rsp3OK6q9 ziu6g/ZLhuPZlywnrRcxzlMFJL/PgLTNC0FyaB0kqR+GOBODt3xHl4cxHrgb 3MCoi9HkuAEOI62HzZG3M3lFLZGC8uZwkbKJJq5soiZWNoamVDWSpNWNBFl1 Az6rugEnr2kIKahpCC6trgmZGv/r8O85/e85/HcOUvSeTN+E3pMH0XtSDb0n jQ3exjq4PuRj8dd5/swRLjG+P5ou64pm57dxYkpbmLEVzRFCZRM9vrKRmljV GJpc3UCS1DQQZDXoPVnbgMurbQgprK0NKalRThH44vD3QpAeWAfJakcg3sjw jcAOOy5wJlzje7OHeSEJfTFhmR3cqMIWLre8mcWraIoUVDbS46oawhJqGkKT a+tJkrp6gqyuDp9dXxeSX18bUlSnDCmuK8WV1E4FSEPnINuIHPYjhzNHQIwc RNbYcaED4ZrAg3OBH5jUywvNbucxilt40eXNnBhlY1RsVUOEqKY+TFxbH5pU V0eS1NcSMhpqcfKG2pDCBiWusKEUV1SvwBfXTgVI/88hDTmknEYOhkZv4iyx 43G2xDERlnMh1i+5h0+Ut/LDUVbKLm/icisbWfzqBoawto4WX19LSWqoJUka awgZTTW43KZKlI2W4hSNhfjChjxCcd1UQA7TIeOvhZC2bx2kIocEA6M3YnPs uNiaOBbnFD0k9E7uFuByW2NRXitgVjTxoisb2DFfMqlaelzDRB5VTZKgLCqz pQqf31qKL2hR4BVNeYTChmxiUf1UANl/Dul7kcOpfx0STLDjiRbEMbF99FCc e0q3MCivVUApbRZGVjTGcqoaorkTmVRDTbiwaSKPqiRJ2ioJ2e2leLSWjTKg XEJBcxZR0SgjFdVPhS8OmRsWwoSDRPUIJOobv0kywo4nmRLHEq2jh8QuKV1x /nmtIiLKhMIrGkWov8fj1E1kUtURgpaJzl4FWdJZTszpKiDIO+TEvLZMUn5L OlnRKCEX1U8FyEDnkLl+Acj2/OuQpGf8JsUAO55iRBhLMecMJTqmdIm981rj US4lDvvSEaoTsOtrUD+oMpLfjnpB3WVkKeoCZfXmkHK6Msi57Wmh+S2poYqm ZEpR/VSATOSQ9T8OKkchWdfoTaqe67jEgHBNYsIZSrFJ6Up0z2tNDCxtTiQr GxIZNbVxzIYqHru1ghnTVUqPO1eMdpGyURcnnZLdLaHktidT81sTqYomcVhR /VT412HdAsjYvQ6kyCFF2+itVNv1YZou/lq6PvuC1CK5O8U5ry3Zt7Q5BWVC KfSamkTUSxEy28s4nL7CCNFQTphkWBom608Oy+5OoMk7xLT81ji6oklEL2yY Cv+nw8mjkKpl9DZNy+Vhxlnc9Uxt1gWZcVKP1E7eJvUoaU4LqmhIo9TWSBjN FQmRXcWxzPN5LMElCSN1JCFCNhAXkdUjjJB3CBh5rbGMgmY+o7BhKkAWei2y 1y6AzF3rIA05SDQM38k0nB9laYTcyNFkDmfrJfRmWuS0Z6BuSpZPeUMWvqYm k9ZcnsboViRHDmfECe/EcVNGY1H/g8fK6o1hyTtjmHltXGZBM/pfa+NU+D8d ThyFNDXDd5lnnB/LzwTfzD8TeTFfM/5cnmFmR561ok3hWtJU5F9ZV0xqKEZd iAzUgxCg+ye5CcmjHNS9YPMz+1gxOV2s6Nx2Fie/hc1WNE4FyEbnkIPOIWvn OkhHDrLTBu9zVB2f5KsE3io6GX6pVFVwvkxD2l1hkNtVZ5NfW+GlLC4kNk3c hZCEnvtz0P2gEZK4i4yUtEFGfMY5hjC7mxEr74jk5bdGxiiapsK/Dmv+czh+ FDJV9D/knnB4WnTM/27FkbCrdYe4wy3HEnpaNTJraqyKi8q8q+XoDsB0lIWI smh9E90D6sTOQ0bq+TBpxrmwpOwemljeSRfltYULCpqnAuSgc5Ajh+wd60B2 7ChkH9f7qDhs96L8gM+D+n2km117GEPomW9dk2ZOYaVtWXapT216IbkpGeUQ fJRDRGZF9FEyOahvEN9Pypb1kWXZ3aGp8k5KYm4bNT6/ZSqAfDFyWI0ctq+D jKNHUW9PB0r3Wb2u3eU23rUj8PLoxrCWvv3i4kad3CylQ4W01L8GdQAa49Ed hBP7BxOzPyWH3UPMie1BM383LjezC58l7yCm5baTUvJbpgLIf5sOuat+hJyt 6yDr8FEoRBlE1XazJx2b7a9e3ODZfXl9RHnP4cTsRsPc1Ern8sSygJqJewiE aA+Bg3YQ0OzfRkVzPykvBs388WjmT20Pzs9qD5bnteEy8lumAuQumg55K3+E 3C1rIXfvISjfpvai5S+9a8PrjXturfatHv0rUt5zIjG12SRHXIMtFlUEVQpK KbU8tIfAQs//J/YOJnYNyAXc/2b+hJYQhaQlUJHVEpBf0DwVIO/X6ZC/4kfI 27QWCrfte1+/7sStgZWn+m4tt6i9vzogf3RzVGrfKXFcm7kstsENZQBBJTHK 0ApOOb06qjSiNrw4sh7dfdgYWhTdODHz44tEjbiixMaQYmlDQFFW41SAgp+n gWL5fCj4ay0o1+540L10T/+NxSr1T5dbK+6tC5Rc2sEQDagJYrosUzitbhms xiB5VB1JEV5DKQ6ropWSKyPKicqoClwFWxlcwa0MKo+tCiyPqwooT67yr5BV TgUoXDgNipbOh6J1aB9m8YahsYWbGp8sVit8s9JW+mCTv3DsQBjnHy1O5ICV MKLHLZHeGSChtOFkpBZSJr6JkhPcSJMHNkSg22yYqG/AKfCui1F41QkUHnVi hXudZEpAyY/ToPS3Hz7WLF46PDzvt+ZHC7cXf1yikfZunbXo0S4v9u0T+PCr OjTqRWtm6AU3Lv68T2zQucA4/z6c2LeHlOjdTUn27KKnuHcyUrGdTIlrR7TU pZ2f5tQuSnNsT0qfCi/Lv58Gyp/nXej5fl7Lpe+XFH/8aVc6LFcTfdxsyn5x yIn+UN2bfNcoCH/Tlhg45kL1veJJ97zkx3C7GBTlOoJnOf9D4jgOU6MdLtC5 dkORMbaDLJ7NIJdvfV7Atzwvjp0Kl6tnYkaaZ89sGZgzu+Te98vS4dcdIlir wobduvQPJ81Jr3XsQ56Zu/o+tvF0H3f0dbmPDXC86xVkf8c/xPZ2MM7mFp5g dZNMtLxBJVncCCebX48MNbvGophci6EYjwmpU2Go9jtMS8dsTOnF775P/zx/ mQiWbmbBpoM0OKhKBLWzgaBv4PXJxNTlvZWlwxt7G9vXLvZWL90dLV54O5k9 93cxeRbsavwMjzV6SnIzfEJxN3hCd9d/zPDQfczy1HkU4zUV2hq+w5T2z5yW fnP69yJY+DsLVq4Ng+3b8HBsnx+oHXUDbRVHMFSzBjMtC7DRMQVHfSPAGhqA p5H+Z18T3U8BpjofQ8y0PxDMz34ItdB6T7PUfBdhpf6OZa32NsZmKpS1T8fI RjHTRDBrNhN+/YkKa5fiYNdqHzj0tyuc3GEHGnstQe+QCZgcMwCrk7pgr6oN Lqe1wENNA3zU1SFAQw2CNU8DQesUhJ5VBZq2CjC0TwJL5wTwdKcC8ND/H4Qb 5oHw0DKI1dwGXDMVYDsafmC7Ozxn+vk+iCSSbkbQGVfDmNzRUK5omCRIHMTH pw6EJKX1B6fK+gLTMnsDMrN7/XJyenzz5T0+xbndPuW53d41uR0+Dbktvg3y b/G/Dv+e0f8T58BH7wfRhu9BhN4PAs3tEIPeD1wHw/fRWMdnHB+/+yw8+UZU WNTl8Cj+SFi0eCg0NmWAFJd2jpCY2YtLye4JTpN3B2XkdQXk5Hf65xd0+hUr On0rFB2+NYom/9qCuoBaxbeAWOQQhxzikYMQOfDMVIFna/Q+xtnxKdfT/x4n mHKdTUELuwzBhXBO0vkwnvRcqCizhyTO6SYk53XipAUdwRmF7UE5RW2B+cVt AcUlbf6VJU2BVSU1CGXQtwHBT9MgHjmIkYMIOfCRA9/a6D3f0ekpzy3gLtef ei2axL7IChcNRbJS+sNjZL1hgpyu0Pj8DlJSYTtBUow+wkpbQ7LLWoIKylsC S8sbgyrKa4IryisQJSHfBoTIQfyfQ5zGdog1VQWBpdF7gZ3T01iXgLs8n7Ax Lj56hEOLP89iSvoY3KxuemxeBzWusC00saSFlFrWTJBVNOFyKpuCFZVNQWWV NSHlSiWiJKS8ohBX8U1AhBwSkEMCOoc4jR0gMFIFkZnRe5G101OhY8DdWI+w q7yg6BFuqHiAE5nWy4zO6WTwC9roopIWakJ5Ezm1sokgq2rEyasag4uqakPK qipCUBUZV1apwJUr8/DlFd8C4pBD4vrvIRE5xKvvAJGBKsSbGL2Pt3B6GmcX cFfkGnY11o87zCMk9HPp6d0cdu6XvDZCWN5MEyu/5LQTGS0ut6Y++EsOVl2M K60uwJVV5eLLKrMJ5cpv8f87JB381yFeTxUSDA3fJ5o6Pk2wCrgb7xB2VeTJ HY4NTujnUWRd3Ki8Ng63pDlKUIGyuaqG0JSaekJGXT2uoK4S5WDFuOLafHxJ TQ6htCqTUFYpI5YrvwXEo3NIQueQdGAZiNV2gFhHFZL0DT8kGzk8Szb3v5to Q70qxnKHRX4J52KJGV288PzWGE5pM4uvbAwXVddTkutQHtZYjTKo4i8ZVFFd NqGkNoNYWp1GKquUkMqV3wLEyCEZOSRPOJzZAYlnVSBFx+BDqr7DM4mx371U C8pYsmP0PwmeCf1xwbIuAQoX+MyypuiYynqUi6FMrLGakNVSgrpIuQRFUybK oNJJxbUScml1SmhZZVJoufJbfHFImXDYvwwSkEOS5kmQnNX/mKZr/zzdwPd+ uknoNak1eyTFJb4/0Te9Kx4FTsLw0iY+p6qOya+voia2VhBzOnOJue0yUkGz hFzYkBxaXJtIKakWU8uq4qnlym8BCegcJhxSJhxO74QU9ZOQpqH3SXbW9kWm rveDLEPS9UxT5qjMXnRe6i7tTg7MbUuglDTFM6tqorlN5TRxdx7ayUoLlXcm U/JbEqiFDfFhxXVxtJIaIa2sSkArV36LLw6pEw77lkEickg9cwJkarqfszRs XuZoeY7n6hJu5hkyLudaxg7lOCX3ZXpndaTjC5tT6cpqEaulkC3uk9DQDg49 p0uE3iqCcEVjbHhRHT+8pIYXXlrFCy+r/BaQiM5hwiF1wuHUTpCeOg6Zp3VA fsbqdb66+6NCrZA7JTq0sVKj6ItlNnGDZVhJX1lQVmMusbwwNbxFKuT3CaLT z8eg7gcXZR/RTEVTdFRRfXRUcW10ZGl1dGRZ5bf44iCZcNi7DJJUd0C6yjHI VtGGfFWLt0WnXJ+WqwXcr9Yi32zQY4y1WUQPd7gL2mp9M8tKQsoysqnNglRO b1RS2nmGIKsnkpfbHsUtaI6KLmyI4hTXMdklNUxWadW3gCQ040iRgwQ5pJzc ARkog8g9rgVFx83eV5xwfFGr6v24VT34dp8+8cqwfWhPnyu/ptVLllsdVJqA 5m+mnNkdmpV8jpKa3RMmzm2nCfNb6LGKxnBeUX0Et6SWEV1a/S0gGTmkTTjs WQaSY9sh68gRKDisAWWHjd7XHrF92nbS5c6AhsfVq9pBvaMmjLp+e1FBq1eG tAZXLET370egu/4IckFXSG52JwHN++Sk/BaKWNFEFRU2hAmK62j8kppvASn/ OUh3L4O0w1tRF+QQFO8/87F6n97z1oOmdwZOWF66ehLbe+M0se4fPXZBj02i tNkzOx45oP37arRr30Qs4LWGFKS2BubntYZkFLTgJYomYlJhA1lcVBcqKq79 Fl8c0tfNhTTkkHFgCxTs2Q/KXSdfNu/SuNu/X/vi1QPm3XeOeNVdO0kpGNKN kXbbJMcjBx66A5ClpClppZG1pKIYNGsnNAYWZTT6KRRNgdmKxuD0wgZcalE9 Iam49luABJ2DbO1cSN+5DPU4N6FdlN3v6rccvt+77fjFq9s0uu7utql9cNBf cfUETTqox4vrtk2OQc/f2fX4/IhqakmokqHEl3Oqg8uENYFlqTV+pdm1XiXF db55xXUBWcV1QenFtd8CpMghY81ckO1YBvlbN0Dlxm2PO9bvGr28fl/X3c06 tc93OijuHQiUXjlJFw0ZxHB77ROY7T5pEc34bEo9JZ9QG14UVM0q9a/kl/lW JpT7VKaXeVbmlrspS5XuxeVKr7xvA+nIIWv1XMjY9geUbFj9smnV+isjy9d2 311zuPb53waKFzudpXcPBQmvnqZxho05jH5HEb3bNykU3YOIbyVnTOwd+DVG 5XrXc/M96kUF7nXJBW71mQWu9QUFTrXKQqfK6m8CGcghe+UcyFu/+GP18qU3 B35Z0nN7ycba56tPKD79bSR9sdtZdP9YAPu6Zmj4JbNIygVnLnHAWxDcFyT2 7yYm+XRSUz07GFK3dna6axtf5twqznBslSCyMxzaimW2LdWZ3wKyF2JA/ucc 1Mv56WHnjwv6bv64qO7571sUn1erSGGLkejlAUf2w1Pe9Nt6OPI1SwrusktE wEUvps9wQLTHII6HPR8a69JPFzqeY8bZ93HjbXuFYpvepATr3rREq97cRMve 0oRvAbkLMJC/dPbzhvlz0G/DzKp7+uNSxecl26Vo/hfCTn3W22PWtGearqSH xj7B92yCJvYgPK57kLFjflTnKyF0h8ukCLtLYZE2o4woq4tslsUIn232TzzH dDiFYzKcEW18Ie+bgGI+ZqIT09s5Z1rdyNy5BZ8WLpPCsm1C2HiMBfu0wj6f Mia+07UOfGnm6PXMBuv62NHTcdzNx+6Bj7/NvcBAq7v4YIs7oWj/gY4zvRX1 Ze/B6EYsyfBGPFn/egpZ73pG6Ld4VjoH09cwC1PbN3tawbXZ8yTw8zIBrNzE hG37qXBEBQ/qmv6gr+fx2cTE6YOVhd07B2vrN662Fq887U1f+jkavwh2NnpO cDF4RnHVe0rH6j6NctN5Eu2u/TjWQ+ux2FPzUarXtxionIGpaf0Okz88Y1rq 23nzYuG336Ng7VoK7N6GgxP7fFAG4Qo6KvZgdMYKzDXNwPasMTjpGoCbnh54 GeiAn6E2BBlpfSYYa34KNVH/RDdV+xhpduYDx/z0h1iLU+/jLb9Fbe0MTH7v NEzKGGYaH+bPYcCSn8mw8Y9A2LPGAw7/7Qgq26xBY7cp6O4zBOODemBxWBts j2qC43ENcD2hBh4nT4OPyikIUFWFkFMngXT6BFDPHIcItWPAVj8CPI1vUdCK waT8g34u/hVmWgQsmEmEP+b5wtqfXGDzYhvYs8wMjqwyhFPrdUBzoxbob1YD k22nwWq7KtjtPAnOu46D255j4LX3CPjvOwzB+w8B8cBBoB7cDxEH9wH70F7g H/4WQPtlGtBXz4LwPb8C7fRaCDXaDVTrk0B11oVQL8t3xGDnF3iK9+PgyOAH gVzSXT9h2C2fhPCbXimR1z3SWNfcszhj2Nzoq66KmCsupbwrzlW8y06N/MtO nfxLTv388y7neX2uX+d/Hf49H6Cj1yIcvRYR6LWgo9eCgl4LupUKhDvpAs3T 6i0l0PU5iez7EB+BuxfMCb0dGBt+wy8+6ppPMnvMKy36ikdmzGX3XP4lrEIw 6lomHHWpFo46N4tGnXtEg67nRD3Yc8IOt3OirwHhKH9gIAcGcghHDnTDPRBp qQKRjnqfGe7Wb2h+2GcUov84KZxwF88OuxnMZ1wLiGNf9UviXvaR8i95ZQou eshFF90K40ew5eJ/XGsRbQmDrj0JPW494jb3noQmj68DEcghctUsiEQOEafX AcNgD7AsUDZnr/eZ6Wb9muHr9pSOD3hAoZFuk5j0G/gY5tUgEfdyQCJ/1Fci HPHOiB/2zE244F6YeMGtImkIW588hO1M7nHvSm7z6Exu8OxMrvX6OsBADlHI gYkcIpEDU38PRJujPMhO73O0q/VrlrfbE0ZI4H06lXyLEhlxjchlX8EJeKNB CcIR/1TxBZ+MxCEvecqgZ1HqeXel5Lx7k7TXo13a5tUubUBUe7dLlT5fByLR fMFEDizkEIUcOHp7gG+qgrIYvc8xTtavoz3cn7ACg+4xyJSb9IjIq6Ec7iVC rGAkRCy+EJiSNOgnSx3wkaf1exWn93tWyfo8WjLavFtk9T4tGVW+LRlliGK/ FtnXgCjkwEIO7N2/AhM5xOjsBoGxCggs9D7H2lm/5rm6P472CbrHIlBuMGhR V2hM3kUyL+4CPi5pMDhZ0h8gSz/nK8/s8y7J6vWqzW73acqu823MUfo15pT6 N+YoApqy8wOasr4GMJEDGzlwkAPr9HqI1d6NcpCTEGeq+1lkbf1a4Oj2mO8R dJcbREXZGPMyIxLlc1zxIEmY2o9LSu8LTM/q8cuVd/uUoly2Pq/evy6vIqAu vziwLq8gqD5PHlSfmx3cIP8awEIOnJWzIBo5cE6tB9HZXSDWPQEJRjqQYG71 Jt4W+0ToGniP70O5ziUwL7PoscMR7ITzlFhpHyEhcyIb7ArILejwUyoaAmoU FYE1hYVBNYW5wTWK7JBaRQauLj/9GwALfZeLRg5c5MBVXQfxGrtQBnEckvW0 IdnE4m2SpevTBIeAe3FuoTdiA5mXuZTYYWZU4gA9Jr2XHJ/TiUsraA/ML2oJ qCpBj/xKFCGVJXJcVUkmvqo4nVBdJCHUFKYSawu+BrCRAxc5xCAHvso6SFDb CckaxyBV+yxIDMzfSUydn6Xa+D1IciLdjPeOvByL5w9z6Yn9kZz0bqoot50g LWoNKiyrQjmgAldRno1XlqcTlaUSYmVJCqmqOIlcXZRIrin8GsD5z4GHHAQq a9H8vwMkauj5v6YmyHRN38uMHF/IzH3G0+wIt1Kx4VcT/GP+EZLF/dGR6V3h sXktJEkp6kShDK6sMhPlX1JSRXkyWVmGrgAvFYdWlcRTqorjKNVFX+OLQww6 hwmHuJNrIVllO6ShflCGmjpkaxl9zNGzeyU38XicYxV8N9uBel3myRpOwYm6 hbS0BlZ0fjktobyALK+WEUtqUshlVQmUiop4qrJMRK0sFYZVlQjCqopjw6qL vgZEo3PgIQc+chCfWAOpJyb21Q5B9qkzkKdu8LlA2/pVoYHrw2Jzv1sldoRL Ci96T2aQoCGJnFbKjyzIYQoqJOGyWtR7qRPSSqtj6eVKPl1ZzqNXlsbQK0ti 6FXF3wK4C6YBHznEIoeEY6tBemwrZB1H97ScPAWFp3XflWiaP63Qd7hXbeY+ VuvoN1DuEdaS5x9bno6XysW0ghR+TIWAk1oXzSqqZ0eV1LCjyirZkRXl7Ehl GZtRWcpmVJUgir/Gvw4rZoEAOSQdWQXph7eA/Mh+UBw/CaWqWq+q1I0e1utZ 3moztxtptffurMFSq4t9+PnyYIlESsmPTWRVRIkSa2lCRT2dV1ITEV1WyeCU VzDYFeWRLGVZFLOyNIpZVfw1IAadQyxyEO5eBAApQNa/KYdWotl7E+Qd3AMl R459qDp55lmjmva9Tj39sQELs3Ndtp6NTS6U4krPGPR7DKlxclIuUxZZFiqJ qw5JzasjJpTUhApLq6j8ciUtpqKCzlWW0TmVJeGcquKvATz0nFeAHES7FoFk /wrI3rsRCvfvBOXBQ68bjp142HXm1M1hw1PDF01M2/ut3ZUdjmR5o3t0UpVf UnQpmnsLwouDcgVK79ycKr8M9E80uawSLy6vIIkqysmxlaWhvKpiSkx10dcA PnIQIoc45JC250/I3YXu29+97V3d3j2POo/svzGstv/itbOneseMjetHLLGF /fYEaacrK7bZWxxeFywLqaLleyljS1yV2eXYYmW5d1ZFub9UWRaUVFkaIq4q wYuqiwjCmsKvAbHIQbTiOxDv+hUyti8DxfY1n6q2bXzatnPLzaFDm4evHT/Y fVtNq+G6tmXJFWOPjBErfPx5p0hmn6eA1BmU6t9Cy/Jo4OW51EkVTnXlCufS 6iL33Ooir4zqIl9JTaF/cq0iIKG24GuAADnE//kdJO/4GXK2LEG/OfDnq6aN q28NbFl14dquzZ33Dh+ru6eiV3Rb3U52Q8cnbsyYxBy1jaQMuvNDeoMTfDrC pG6t0RnOzYnZTs15WXZNtXIHZX2uc2F9HlZen+eRUZ/rmdYg/xogRPNmAnKY 6Hnn/7XoQ/Wa3+/1rlx8YWzd8o5723fUPDmgWvjwuFH6g9OOcffO+rJuGpGo l+0icBc8ov0GgoXozoEEly5WimOHSGLXkS617SiRWrU3p9vUtWTYlTdnOBY2 ZzjlfR2IQw5JyCFz/Xx0j9SCJ22LFwxf+e3HjvtrVle/2LpX8XKvWtrzo6Zx z047scZ1fKi3TfH4Mccw/1HPSM/hII7rYCjfsT9SaHuOH2/dlyy27M1JsOir FJv1diSYt3YlWdZ2JlsrO1O+BiT8gIHU5WifdsWct3W/zBkZnjez496iX6pe rt5Q8H7LgbT3ezVE74+Zsl6pOYQ91vfE37MM9LvlSPC85klxvRIY7ojuPrAd iWBZDXM55hfiuaZDaTEmQwU846GaGOOh3hjj3gG+ScdA7NeApHkYSF8+E8p+ njHU+f30jtF5sypf/rY4D9b8LYWth4SwX50FJ43C3mrZ4J8bu/g/tvZ0f+Do 53zXI9j+VgDe5gaRZHmdFmo+xgozuRpLM7qSFG54OSNC/7ICUR2hd7knXH90 9KuA5HuUgfwybahhDqatbw6m8ua8ObmweEkqrP1bANsPMOHgKSqc1sF/0jP1 e2tq7f7K2sHpuZOr7RMPd6tHfl7m4zgfkweUiZ2HAAP0ZUvvjihY905KiPbt LNzZ2wr82VvVeK1brV8FZLMxI8qZmBa0h1ExOHua/MX8eSmwdGksbPgrCnbt ocCxYzjQOOMDetpYMDGw/2RlYv3B0cL8nZu1yRsfW8PXQfb6L4mOui9oTtrP mS5az3iumk/jsRpPU93Un2S5qz0p9DjzuOKrXFFgMK01MzFlXTMx2Ze+m54E C+fxYPliBvy9hgx7twTBib2eoHbYGXRO2oLRaQuw0DABOy0DcNHRA0/0ZctP XwtCDDWAbKT2mW585hPL9NRH9JD0Q7y5yodUi5PvsyxPvM/7Kh3l0zBljTMw WQPTMOLx76Zz4ee54bDyZyJs/sMfZRBucORve1Ddbgmau01Af78BmKIym/UR LXA4hvKH42fAE33A+qmoQrAqyh7Qgwfa6WPARIX1mIllDvVDkKJxCNI1v0Z5 1XRMZhcGE38Zg2HDnGk0+PW7EPjzBy9Y/7MTbFtiBfv+NIFjq/Xh9PqzoPWX BuhvOg2mW1TBautJsNt2HJx3HAX3nYfBZ9dBCNx9APB79gFl716I2LcH2Pt3 gQARf+BrZDVjMHFDGEzkLQyGAt9P84Mfp7vAL9/ZwPK5JrB+vh5s+0kL9i06 A0cXq8CpJcdB848joLv8EBj9eQDMVuwD61V7wH71bnBZsxM81u4Av3XbIBgt 3pE2bAH6X5uAtXET8L4KBKG+nP/KmeC34wfwVVkCvrrrIdBsFwTaHwN/N3Xw CTAAL7LFR3eG3Tss1+W1i8j9pVOS13MHqe8z+0z/J3a5gY9tC4MeW5cFP7Ku Dnlo1Yx7aNmNH7cYwd+xuoofs76OG7G9ibvwFf7fcVgxEwJ2zAe/k0sgQGcD hJjuApztMQjGaoC/ryH4Ei0/eEU4vHGPxr7ECjyfuyT6PnWSBDxxzAh6ZC8P eWhXiBu3LSOM29QQH1i3kB5Y9ZLuWl0kXbe5Shq1vUYcsL9OOvcVIBi9FgHI IRA5+J9cCsFnNwDBeDcQbY4D3kUTgr2NPvvjrd/70pxee7HdX7jH+jzFiv0f u6QGP3TKwI07ygkP7BWk+3Zl5Hu2taH3bFop96z7qTdsRimX7K5SztuPUbod xqhdjpMDIai7GIgcgpBDAHLAa234kotRrI4D2UkL8F7Gn4OCbd4FUJ1f+TA9 n3ny/B67xwc9xKbgxl1kxPtOOeR7DgrKXfvysDt2tbQ7tu302zaD9Ct2o/RB hyu0HsfL9Dany/TWrwC4X6dB0J8zIHj7fAhCDmTNDRBmsBtolschzFELQj2M P+EDbN8Gh7q+8I/0furDDXjkKcI9cE8m3nNND73rnBN220lBv+VQHn7Lvp5x 066Tcc3uAuOC4yij12k0st35YmSjy8XI+q8AeOQQghxwyCHkxFKgqm+ACP1d EGl+HBj2WkDDmnwk+9q9IRCwz4PDfR/7c4LHfQTEe56JlDtuabRbrtkRN50V kTccK5jXHRpZ1+37WCOOw6xe52FWm8swu8F1mF2NHWZXfQUgoEwMt3wG4JED 8dhSCFdbD0zdXcA2PQ4sGy2IdDH5SPeyex0a4vaMEOb3KJiJu+/PJ9/xFtNu eUgZN9yymddcFOwxJ2X0VccW7iXH89w+l0Fum+tgTL3bYEyV+2BMmcdgTKnH IHcygIgc8MiBgBxCjy5FWcx64GrvBJ7xMYix0oRoR+OPUe52r+n+7k9Dyf4P CQz8vaAY6i2/uIjrXqnMMfes6CuuhTGXnatRJtoV2+86ENvm1i+oc+8XKD36 BSWe/QKF10BswVcAEsqjCMtmAHHbfKAdXoIyiHUQe3YHCA2OgsBMA/i2Rp+4 rravmT4oG8MFjIfSiHfwbNqNQGHkmG8K54pnFu8Stkhw0aVeNOTSF9fu3htf 69EbX+7VG1/o3Ruf59MXl+PbJ8r2PTcpQEYORORARg4Rh5YAD83eE/2geN3D aE9KDUSWhp9iHWzecN2xT5kB/uP0UOIdchT9egifdcU/KWbUK1M44lYiHnZt Tex0706s9epKKvXuSirw7UqS+3UnZvp3J6T794jTAnrjJwNCkQPpjxkQihyi Dv4OgpNrUBdjGyRqHUJ9kNOQaKoPYhurt0Jn12cxXn7jTBzhNo1On8jnLgcl xI54Z4rPu5cl97l1pNZ5daSW+LZL8vzaJVkBHanpgZ0pkqCu5JSg7sTkoO6E yQAKyoLIyIGCHNj7f4e446vRs/ctkKp+ACTaqiAx0vmYYmH+Ksne6XGcm/c9 XgDuOjOUhq7OYp8jCIUdgZKkZp8CaZ13fXqJX2u6PKA1XRbUmi4JbpMmh7RL EkM6UsS4ruR4XFfSZHxxCEUOVOTA3bcYzd6rIPXkZkg7vQ9kWidBpq/1RmZq 8iTdxu6uxNn9WoJv4IVYIrWbGc5pDuOKqgkJKaiKICsMUGahC86ypCHNmcm4 lowEfGt6PKEtTURolwgInSkCYmfyZAAVnQMFOYRt/RF4e3+DpMMrQXr8b8hQ 3Q3ZGsfe5+iqP5cb6z+QW1neyHF2/ifN269bHEJtjKFylJHMOAVVKMkmpmWm 44tzUvCNOWJiY7aI1JwpILfI+OTWdB65XRpD7kiNIXemTAaEIQcqcqBvnQ+C Pb9BysE/QXb0L8g+uRPyzhx6rTir+qjI8OztEgujy4VOdn3ZHr7NqQEUpYjI KeBGxGdE8qTJtOSsOEp+biylPpdHbczhUpuyoqnNGRxqazqH2pbGpnakfo1/ HZbOgIgt80GE5n/JgeWQeXg96kBs+1B4av/zUs1j9ysNTl+vtTw7WG5v25aP 9anO8A0tTMaxM4RhcYlcjjSWKc5iM3JyIxn1eZGMBnlkRFN2ZHhzZmR4qyyS 3pYWSe+QIFInA2goCwpDDpGbfgDxzl/RztwfkHNgLSiObH5TdnLXo2r1A7eb 9I+ONplq9VTZ2tQXu3iX5HqRs9ODWMlJ5Dh+XJQkii/KCuNm5JK5VXkUToOc ymrKDmM2Z9KiWmW0yLY0OqNDgkidDKAjBxpyYP39AyShuTdj91LI27vqc8nB v15UH99yv1ltx/VuvX3n2401WxusrZRKJ6+8Ig+SRO7PFMgIQmZqRAolkZ+B i0+TB8RX5AYLG3PwvKYsIrc5g8RpTSez26ShzI7UrwHhyIGOHKL/mgepO35C ezmL0Z2gy99V7l39uOnI+ju9Z9ZfGtTa091jqF7XamlRVOfgIVO64eOLfRns PFwsNTssKVjGTfdJS83ySCvN9kptyvITN2cGCltkwfy2tJCYdik+uiMVH92Z MhkQgRzCl8wAHuqjSLctgNyti6Bs25KX9TuX3e8+uGzsourygVGNXS3n9c9U dJub5bTZYZMaXEJiqrzo9PIgLq6YEu+t4KS65ienO+YXy5zkrTK3tNZ0z+S2 NB9xu9RP1JEaENuZHBjbNSnAQHkUAzkIUQ9Dtmk+KDb+9L564y8POzb/cnVk 38LB6yf+7BxT314zqqeqGDQ1lvbaOAs6nAIiWzwoxIYApm9taCy2mi22r0xK tq4qSrFCM7Z9QUeqc2ZHKlbameKe3JXsldCd6CWeHIhEDlHIIWHNbMhGPcqy 1T88a1n5w7ULa+cOXN/+a/udI2trb57eXXxNWzXzsrG++B8rO/Z5B2/KOXd8 QI8/3b2LzLLvYPMsO5KEZh1FIpOOPpFFdW+8dXGP2C63R+yY2St2SeuNd5H0 xk0GMFEOw0K7rKmr0N1FK2e9rf19FupAzOy//ufc1gdbl1TdP7ix8K7KAdkt DbX4G7rG7Gsm9pQrNh5Bl1wDPUb9SA4jZJrlCDvSZCSZZfhPIcdwpJdt1D3I NWk4zzNXDsRaFg/E2uQNxNrKJwfYyIGL9oIy0HepskUzRrvmTe+//uP0lvE/ 5yufbF6e/3jf1rSHx4/EjatpsO/rGFPvGdsG3bXGetx18nG84xNsfZNINLsW RTG+GkczuJJJ17usDNe7MkQ36B9lGLaNRBnX/8M0VQ6zzMonB6JRDhOHPjvz F027WD8X09M3F9M8/uPM8ld//pT7avMq6ct920Uvjh9lvVDToL7QNQx+YWLl +cIKFX6d3Wwe+XiZP8D7Gd8NDzK4zcPp3Uoh6NzMI569WYu4SNQduUbU67sW qt92lWrQMjnARzmMZD7mUsUsTFfzbEzD+bmYspcLZ+V8WPFr6sfNawQf9+1g fjxxhPpJ/UzIJz1dtAdh4vTe2tL2tbOdxUtvJ+NnIa4GT8LcdR+zPbUfxnlr jaf7ajwo9FN/0Oin9mDET/PmLT/tkTv+2hfuBkwGiL7HXM2bjumu+g5T2z4L UzwyZ1oW/DwnCVb9xoeta6LgwDYKnDwQDBonPUFX3QmMtW3A2sD8s5Ox0UdP c/33gZY6b8k2Wm8YdhqvePZqL5McT7/IdDr1vMRZ9Xmji8rzIZdTj++6nB6/ NymP0zCY3tLpmJq6mRhF70yM7OrsaQmwaG4MrF3EgO0ryWgHIgBO7nQHtQMO oH3MCoxUTMHqjAE4auiC+9mz4KejATi9M2ggOAUsQ5XPAuMTn1JMjn/KNj32 scTs6Md686MfBsyPfLg0KefzMZha5XRMQet0jPTCdIzozbzpHPh9Dh3W/0SE HUt9Yf9qVzi60RZObTMHrV2GYLBPF8wPaoHtYXVwPnoaPI+rouHoBBBQ4ZCG HnywTx8C4ZmDqAx6ALI09kORxj6o09wHTZNSX4LBFNRhMJJeDIZ/FYOJgvnT qLD0u2BY84Mn/P2LI+xYYgn7/zSC46t1QW29FuhsVAOjTapgsWUifzgGLjuO gOfOQ+C/69/sIWwvelC8byJ32ImKwjtAdnA7KA5th+JJKVSiv9+OwfBGMBj6 EwyGiBy84acZzrBkljWs+t4YNi7QhZ2/aMLB307DiSUnQe2PY6C9/DAYTOQP K//NHxxX7wLsmh3gsxZlD+u2AHn9ZmBs+Bu4f22EuI1/geTvvyB9UqRN6O8P YDBh1zGYEMBgPFAWYwvzp5sgDx34/Ts1WDlLBTbOOQY7vj8E+3/YD0d/3AOq C3aC+sLtoP3TVjD4eTOY/vI3WP26ERwWbQDsb+vAe/FaCF68Gsi/r0IfRiuA u3QF8CYFXJdMB8c1M8Fm2yywPr4QHDSXgovhOnC12gbOLgfA0e8E2JPUwJah DVYx+mARbwzmKWZgKrMAE7nVZ+NCm09GZbYfDWvsPhq22H8w6HV4p3/Z4bX+ HYdnBg8cHho+crhj/MT+mslTh8kALNohdUIOtltngQ1ycFZfCm4G68Ddcjtg nQ6Ci89JcCSog324DthEG4KVyBQski3APN3qk2mOzUcThd0H4zL790Y1ju+N WpzeGfY5vTG44vzC4I7zY6MHzneNHzldN33sdMnsifNkgBtycF49E+y2zgbb YwsBq/YHivzWg5fFdvBwPAhYLxVwwaEaEE0P7NjGYCM0B6skq08WabYfzHPs 35spHN+Zljm9M6lxeWvc6vrG6JzrK8Nr2KdGd7D3TR643jB76HrJ/BF20OLx pHxxcEEO9sjB4ehC8Dj9x5dMys8MvcXsD4GHuypgg7TAhaoPjixTsIu1/GST aPvBSmr/3iLb6Z15gctbszLXN6Y12NcmbW6vjAfcnxtd93hoctfjltl998sW 4+5Dlg89eq0eTQq4o11a11UzwGHLbHA5vBB8Tv0BAdrrIchkBwTYHgIf7Cnw 9D8LbmRDcI40/+zAs/5gJ7Z/ZyNxemuV5fraMt/tlXmpx0uzWs+Xpu1ez02G vB+b3PC+Y3bH+4rlfa9BqwfevdbjPu02kwMeyAGLHJyQg/vBhRCg8gfgtNYD 3mgH4KwOQ6DzKfDx0QZPgjG4hVt+dObavXeMc3pjl+r62ibT/aVVvucLy1Lv 5+a1vs/MOv2emI763zO/6X/V6o7foPU9/26bewFttvcCGu0mBzzR57bbyhng jBy89y/8koOQNNZBqP4OIFscBoLDaQjy0AHfYJPPnmHWH9zYDm+dha6vHJM9 XtjJvJ/b5Pk+tSr1f2JZH/jYojvogcWV4GtWN4MG0UJhl93tkBb72yF1DrdD qhwnB7yQgztycN08G/z3LgQSykHCzqwDuu52oJseAqrtKSBidSDIz+SzL8nm nWek02s3vtsL50TvZw7pfhP55CObMpRLNqJcsh9/02qMMGR3g9Blf4PY5Hid VON0nVThfINY4jI54LNoGnismAFY5BC8ewFQUQbBOLUWmGe3QZTRQWBYnYIw Jx0gepl+CgqxfetHd3nlGe35DBvv98RZGvTQIRflguXE+9Yt5LvWI6EjdmPk LocxSqPTVWqly1VqqetVaiF2jJKHHQudDPBFDp7IwX3TbCDsXIBqbr8DW2U1 cDW3ANdgP3BQPyfK/uxELvWJ6Gf7NijU5aUv0+uphzDgkWsq7oGjnHTProJy x6Yj7IrdpS85XIPz5XCl66XwIrdL4fnul+k5HldomR5XwiYD/FAm5o2+x3lv nA2h238E5v7FwDuxCgQam0GotxftKZ2AGFvNDywXo1d0b5unJLzLeHC4912/ mKCbnonEq66Z1FGnEvoFh5aIcyiLm8jgKrAjUQr3kSi550V0udcoI91rNELi fSl8Mr44+CAHv79mo9l7PkSj2Vt4fAXai9mI9mJ2oyzm6HuRpfpLvqPBI7a7 Ffra5nw9lOp9KYQdPOgnIvd6SumdbvlRra7VrEbXfna5+wVOgecFTpb3MDvd Z5iV6jvCTPa9GJXoN8qYDPBH5+CDMrHA9aivtnk+mv8Xgfj4ckg6vQGStXZ8 TNY/9DLJ7NQjsa3OHYGr2Vi0v8OFCJJXbygjpC2ER2nwT2RUe2exyz1LuSUe Hbw8r/O8DJ/BGInfEDfJ/wJHHDDMjgsYYYoCL0ZNBgSgXM4XOYSsnQVRaO4V 7vkFko7+ARKUS6Wpb32TrrvvSZrxibtSK42xZBdDdF+MfTcnxKs5PAxXHcoO K8OJohSB0mi5n4Kf6dsokPr3C5ICBvjxQed5ouBBriD4AocfPMzmhYwwJwMC kYMfysQIa1BHauM8iN/9M6SifxvpJ1Z/yDz99/Pss7se5BgevpFjofpPuoNB T4KHfVNsoFcVi4wrDmfQ5KE8poyQFJMSIhckBFWL4oLPiQS4fgEPP8Dn4gdj ovFDXA7+AoeN/4c1GV8c/JEDCc040RvRrthudGfOgcWQeXTFG7nq+scFGltv F+nvuawwO3Eu206/VYK1q4738yri4XE5LBpNGs5hJVDjeQJyhiiGWB7PIfXG scnnhExyfyyTfJ4XRR7kRpEucCJJw6zJgCA0WwQgB8rK74D311xI2YXuitm3 6LP80B8vFCdWPyhV++tGpe7WoVLj4535Nnp1GS62pSnenvK44BApjxImZjNZ PIaQx6KniSJoxWIaupqSTusT0Wn9AnrYeT6dOhhDpw5F0ynD7MmA4AmHiTzq z5kg2DAHJDvnQ9buX94X7P/9SdmRZXdqTq+6XK+1ua/S8FhzkZVuhdzJJl/m 4ZGeHBAsjidSebERzCgunxfGThWRmIp4PKs9nhjVJyJF9gvIEef5oeGDMaH0 oWgKbZg9GRCCHAKRQ/iymRC3fjakb5uH7std+Kpk96/j1QcX32hR/f1Ci9qm jlqDIzXlFtpFhQ5WmXI3tySZbxA/FU+JSqBFUUXRMbjYJGEAPy/Ol98c7887 JwqK7heEsM7zcMzBGHzkhWgCY5g9GV8cgpBDJCJh3SzI3DT3s2LzD88qt/14 p3nvgiu9h3/r6zizsalJ71B5jZmWvNzOIrXQ1VWY6x3AygwmU9MoEbhUFsc3 Scz3SMwRYhPrRe7ifoGXYIDvyzvP8+cOcQM5FzhBrGHWZAAO5XIhS6cDG83/ Keg7nXz9rLel6+aMN/w153rv9tlD5/f92tF7akN1h84BRZOJRnqtjWm80tmJ U+LpS1MEEvC5ZJpvdhTTLVPEdcrI4ttn1vId0FUxLsmDMW7xQ1xP4QWOF3+Y 7RMzwpwMICAHIvoOEYNIQ98jClbOfF69fObtrj9njF5aO6Pn4p6fGwZV1pb2 nd2b3Wl0JqnFyojX4GgfUePuSVD6B/mVEcluJYxwhyIh07owg21RVMOxUFzg 2GRd4DhIh9nOSf+wXMUjTDfRxcjJACLKgqjoeZIQfXZlLZ/+sey36eNtC6eN XlqA6b22bmbz2N4FyksnVuVd0NwlGTBAl9aa60V12luR27AuAc2+Pu6NhBDH +giyVZ0gzLQ2I9y4rjrCqPZShGnJKMMyd5RhkznKsJNeinBIvhQ+GUBGDgx0 Fgk/oef/v2JG677HDPR+j+m+tXBa4611sytu7vkl//rxVelX1bfFXdI/yvrH TJMyZGsSNOBq53nOB+vUi/ex7okINO0R4gx7Mgl6vTVE3Z4bRIPGa6FGFWMU 06KrVPPcq1TLzLFJAQrKgqJRDpKG5v8ytIPQiDoI/XMxdfd/nl56f9338nu7 FkvuHF0nun1mJ+um9jHKdSP1oGtWBp5XnS2crnjbWV/Bu5hejnA3uCz01r2S 6Xv2arXf2bHrvtoDdwN02+4E69fdCjFQ3sIZFd/ETwbQ0N8XzcNcyZ2J6VXO wjShDkLV0FxM0ZNfZ2Q9Xjc/5fGupYJHRzYwH57ehX6T82jQuNEZjwcW2o4P HIysHniamz4ItjZ4QLPXfsBz0hiXupx5WII9/agfq3bnHlbz4rib1rmHntrt 4946DQ98JgOi5mHuS6Zh+otmYhprvsNUdM7CFIzOxcheLf4u8dWGhfxXu5dF vj66IfT1mZ1Br7UPebw2POn42lzN6rX9WZPX7nr6rwONzr6hmKq95Zifepto efJtrvWJN3U2x9+M2ao8fmh75uYzG7VLz+zUzz93mIzPQgxmKAeDaSqb8aWD ID/3HUZyd960+E9LZ3E/b1wYAXv+IMPxdQFweos7aO1xAP2DlmB2zBhsVXTB 9YwW+GqcQfcuTNy3cBwEukdBqn8ECg0PQbPRoc/XjQ6/e2p0/OlLI5W7bwwn 45IUdTAKMZgy1EHIRndBJA/PxMR+/HEaC5bPosGmBXjYs9gXDq9Ad0GstwX1 zWags8MAjPeg4XO/OjgdQsPHkRMQhC4aopw4BCyVAxB/aj+6fGkvFJ/ZAy1q e+CK+m54qr7v89tJ6czFYMpLMZjsRgwm8RwGEz02DcOAn6aRYfnMQNgwzwO2 /ewI+363hKPLjeEUyiA012mC/l+oA7HpBNhsOQou2w6B9479ELJrL4Tt3gWc vWgxed92yNi/DYoPboWGQ1th8NAWGEeFxP87SnQG2TUYTEIn6mBcxGCor2Zg cLBwmhf8NsMJVqAMYsM8E9i+QA/2oQzi6OLTqANxArRQB0J/+QEwXbEXbFbt RgPrDvD6L3ugrN8E7P9yh7S/N0D+pvVQuXk9dG6ZDHkF+vtoF4U1iMGQbmAw gfAdBgs/TLOBn1AGsXiGLqz4Th3Wz1aFrXOPwd55h+DI/H2gsmAXqP+0HXR+ 3gpGv2wGi1//Bvv/sge/xWuAgHKHCJQ78Jb+CUl//AkZ6EfCCtEPpv3fSWpA //19KH9BOZDPKwzGCeUg5jBrmh7KY9SRhwryOAIrZu6H9d/thi2ztsOu2Vvg wOy/4eicDaAyZx2oz10D2nNXgeHcFWD+/XKw+/4PwM5bAn4/LAbi/N8gYj4q Tf+ISqoLJgMsl00Hk/UzQG/nLNA+PAdMTi0EC+0lYGm6GiwcNoGZ904wwe8H w3B0/DEnQFd8CnQkZ0A7Sx3OFmiCVqkWaFafBY1mbVDv1QH1Kyi2uo94rvtB /bXua813uk/PftB5oPNB967Ox/8rXxxMkYM+ctA7OAfMVRaCzdklYGOyBqzt NoGl5y4wwx0EE/oxMIxWAf24M6Cbqv7/0fXWYVFv6//+GhoDsZMSpbu7hxhi mBmG7hiaobtbGhEEBBQQUBQMLLAba1t7e+xOLMQG9Pk9nPP5/q6z2ZxrX/eF /uOzZq017Hnd72etAXq3PTj1OYLjPjo4HMatepoB9n8wgfaICXYjrF+0MdYP +2+sT44/mG/p48wXzuOsp4yZAZ+VPOCBY2CpC4CLvhBevyIKgeiDAtnS4O+n BH6RWuCdYgge+WbgWkEFl3pbYLbZA6PLCZx30oE+wACnw0xwPMMCh6suYP+Y DfZv2eMOY+wvjt/Y75x/uLxk/GA/Yv50vc+aGfDFMXiu5QUXHIO7rhAEmM2H EPRBHJY0BPsoQ2CYNvglGoF3jgV4lNmAa509uLQ4AWurMzB2MMF5wAXoQ2xw OuMKjtfcwPGp+6TDe/dvTmPuH5y/ur9kfXN/5PLd41/sHx43/wfgh59fvHAM bDUB8NYSghDj+RBhswIiGWsg3FMZOME6EBRrDH6ZluBdYgcetY7g1uwM7A4W sHrZwNzrBowhD3A+6wn0G16TTs+9ftDfe48yxrxeuXzxesj+6v2X6zefP9y/ +1z6H4A/jsF7DS+4qvKDv4YQRBiKAtdqBcQ6SQPXTRkiA3QgNMoEglKp4F9g D95VdPBsZIHbFldw3e4BLnu8gDXk/ZtxznfS+ZbfT+dXfmPMD36v2J/8HriN +d9w/xxwyeNr4Fmvr4Gn/wcQgG7QR5oXPJX5IURV6N8eJNF8OSTbS0OSizLE +ehAVKgphCVYQ3AOKuIyJvjU/58f7PH+txt0GfKfZJ0PnHKCn1mvg96wPwQ9 dB8Nvub5KWTYe4xzymeMc9R3jHP4fwCBOAZfHIOvAj+EKwtBovY8SDdZBpm2 qyGDoQSpnjqQEGQK0dE2EJ7uBMHFLuBfi9q8xfuXZ5f/hPvuwHHXwyE/2Bc5 6ONC37mOhD7yfB96zftj+DmfjxHH/T5GDPp/jNgf8DFi4H8AQegG/VfzQqAs P8QoCEKahgjkGC2FfGspyKcrQo67NmT4m0BSuA1wE50mIvLYPzgVOKsb/T77 tQeNeu/gfPA8EP7O40zEG/e7kU88RyKv+byLPuv3LuYIftnVgcB33D1B72L6 gt/F7Ah+Hz0TEIxjCMAxcNZiv5qsIGRjT0qR4RIopUpAqaM8FLM1Id/XeCKL Y/0tOdZpLD6T/SG6xHskbH3gy+AWzrOA7ojHfnujH/gc5971uRl7w3ck9oz/ m/ihwNcJA8GvE/pC3iRs57yJ7w4didsaOhI7ExCCn6cD8fN0OH6uT8F8ka86 B8r0F0GVpRhUo5+rZKn9LPMy+FwUZPU+J8rxdVoK+1livs/DmMqgO+Ebw29y 2mOuBu2MuxQwmDgccDHpbMCL5MHglym7OS9SesNepnSFv0zuiHiVtDnidUJb 5JsZAc5SCgThGKKxby9Dmh9KVGZDtd4CqMM+pXqa9PgGhvLnWg/dd5X+5i9K wmmP8hJZt9Kzfa4mloZc5NZGnY3cFHcyrDvpKGdv6lDIqfSDIQ8y+sOeZfRE PMvoiHye3hb1InVT9IuUpuhXyY0xr5JmAkKXUCAYvdyUi8lezQ/lSsJQpysK jWbLfjXbSn5pdpJ/18jWfFHvY/SgmmNzs5TLupSX5ns2o4BzPKkiZjCuIXF/ THvq7sidmX0Rh7N7I27kbI16nN0W/SSrmfs0c2Pss/T62OdpdbEvUuriXs4I hP3fGKbyfx7ORZWiEGzUFoFWk8U/Nlut+rjFfu2rzUzlR62eujfrg6wvVkWx Tpck+R7Oyw7dn1HK3ZVSm9Sb0JLeFbstu517IK+NezF/U+zDvIa4R7l18U+y axOeZtYkPEuvSnieVpXwInUm8HEDBTg4B8n43L0Q/dx6fG9s0prze4vhgs+d 5stGum0ln/bQZW93uOpcbvannq4LZx6ujPcdKE4P3ZlXyO3OqkzektaYuSm5 M3dj4p6CDYlnC2uTHhRUJz/Mq0x+nFOe8iSrLOVpxrrk5+lI2kxAOOar8CkX hL8nSnAs9XIC0KYxa3yr7ryP24wXvdxpteJBn/2aa90u2uc2+1odaeIw963n +uysSAndWpLLbcsvS2nM3pC1PmNLXmV6X2FZ2omi0vT7hSXpD/KL0x/lFqc/ zi5Kf5pZlPYsvSjtedpMQASOIRL/v5WB748y/CzRKIO992pCX7dpznnbry/6 dMB80a09NtIXdzC1Tmz1tjzQFszoa4zy7lqfyGmtzOI2lBYnVxfVZpXlt+QX 5fYW5eUcKc7NvVeUm/ugIDfnYV5u9uOc3KwnWblZzzJyM5+nzwRETjlSnINs 7KOsxLFsWsP7u0tJ4NNOVaFXA1qzHwwZiF7bby11dhdDY2i7p8XuzkB6T2uE V1tjfEhDXXpMdXVBcml5VWZ+aVNeZnFPUVrxYHFKyb+KUoseFKQXPMxLz3+c k5H3JCsz91lGZs6z9JmAyCk3iL+n8vBnzXK8I2U1z/h2Gb73e+T5nw6pCtw6 rjPv4pCV5PF9dPV9/e5mvdv8ndo7Qz0b27jB1c0p0aUNuUm568sz0qsbchOr thbGVR4o4lZdL4orf1CQsO5RXlLJ4+zkoidZKYXPMlIKnqfPBERh7QT05kXo 5zbg/uwQp3ztk+R5dUiK58FpGZ5rp7XmnjlmIT446KjaP+BqsrXf16F5e4hb bVd04Lr2pMjc1uz4tObStPiNG7KjGzryw+sHCkMbrhSE1z3Mj6p+lMuteJId W/Y0M770WXp8yfO0mYBorJ2MlKITalxIoGc55ePAEsrTE4vJXxfFKRfOa8w5 dtps1cAxe6VtQy5Gbfu97TbsDmKX7Yz0y9seH5bWlcGN7yxKjtxSm8HZvDkn cPOePP/NF3MDWx7nhGx8kh1W9zQzouZZRlTl87ToihepMwExWH/Kg1TiHQyt omR853xy9/Bs8teF2eTKHysppy6rzjp4wXj5zrN28u0nmHobj3haVx4KYBTs D/NK3xsbHL8rLTJyZ0Fc8I7qZD/s0vLavivTo/dCpmfP0wzfLc8yAjY9Sw/a +DyNs+FFCmf9yxmBWHz9uZi914uQsc7Z5M6AMLl6TJhcuixMztxcSoZuKAnu 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 YLYgaZi2Mvo8Szr0rLdCwJlgNe/T0Tpup5INWKfyTOknqyzsT7ZSbU/2W9uc PIuMWFsdAzvqIF6iOQD2dn3gQNvxT96gA7leg2dAMH/vRwfRuwvr410IDSd5 SMUlQVL411yS+5c4Je0vFf74P43mRN20WRRyw3ml33UPKc/rgbLsa5FKjGtJ ao5X87TsrlbpWl9t1be61m9oce2coeW1EQOzK79MTC6BmdlpsDA/CpYWg2A1 nQel2AOC++AQOogdmH+34FmMenwGXj7MS3KvC5LUJ3NJ4hMxSswTRd6wx7pC AY8tRLwfOy5ye+y6nPXYT4z+OHy1/eOEtTaPs+WsHpcrWjxuVjZ9skPV5OlJ 5IWq0aNxdf2HoKV/B3QMroGe4WXQn86V9eiAthDSh30Q7dgHUY8eZh06gOyr PCTxrgCJeTufhL0VpwS+VeD1eact4PbOdDbzne08x3eMhbT3nkus3wctt3wf vcrsfaq48YciKYMPddJ6HzvX6IwekNH+dENG6+NnGa13IKPxFuQ0XoGi5nNQ ms7JFkJ2o4PoxH3YgGuwDu/EzMI7MeJuowN4KUACv80n3t/FKG7fZXmY39X5 HH8YCNj+tBC2+mk/23zcRcRk3FvUcCJkgd4Ed5H2RMYSjcl1y9R+NS5X+dW7 Uun38VWK8ExMYXJcTGEcxBS+wypk6uffGMA12IprsBEdxDr0QBmXCOHeIiTo ESFeXwUIG0SJMyxHByGNDkKJ1wK0+EzAiN8ALAXwwbOgFrCE1MFLWAWCZykC d44cnrmQgXKRNfjlYKuhf74UnF0gCW8WSsDkQnGAGelGD9SI74Oy41gfe1Fi /iLEH+u7vCLECbO/HXoQS1hETEGMYoD+ASM09kJo8qqCAa8imKOHsEUPQedf DW78kuAvIIZ9DysgTXAZlAktgU1Ci6FPeBGcFl4Iz5AfCMyaTjPugXL0UJno oaLRQ/k9Rv/xkhAb9CDmQIgRCKODECUa6GNUcBwKIE2RAXnKalDlkQBt9BCG 6CEs0EPYoYdgoIfwRA/BQQ+RiB6iiA+/XJRfGLbxC8EgvyBcQ579g8ohXP/z WP/mf+o74+u3eE+IAdbXRlSBhyjALCID88hqnA9xWEFZARKUJTiWhSBHEQVl ighoUuaAPs8sMOcRBDseDI08BHyRKCSTl0Al0orsRPAg2DRAH3OepgYPaKN/ 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 v56UVcxcsoqYc3Yhc8ouwN2IUUjWwhMcD7cLcM8ZMThRh7wTl14jLci74Aet W6BJqxeO4VYscBF1tnrJL2qZqdoyL0K7sTHecE5DullVXf6Ystpyu6Kaeof8 6jan7Mpul4yKta6pFSNuyRVn3ZMrvkP716SUCuaSWs6cU0uZU1oJcxwNi8Ja yMA8FKP2QBIDjH93K2rvFyLvWcyj1UvUqKfDguta4iRctNhDrmWhv3JjW5hW 7fxY/YqWVJOSphzLgnklNjmNtWMzG+Y7ptZ3TUiqWzMpfs4O19g5p9xi53yL 9s+JcbXMJb6WOSdUM6fESuY4mr9x2XlPMg+4/38Sc7B/PuZgEfKeJcg7ulB/ v0yZOrtNuEXLHPgtSyfLNHTNUKzpCNUob4/WLV6cZJS3MMs8a0HRmLTWarvk +U0O8S0dTjHNqyfMbhqeGNF0YlJE072JEfNeuUTOY86Rc5lTVANzjK5j40fz LInoS8zDBUkMkH/vhv7mTqKBZcg9VyD36RXTgj4Dau6z59X3ukpV93grlK0I Ui1cHqmVsyxBP2NpunFKV75FQkeFdeySuXaz29vHhS/ucwxdvNU5ePEx8LVz 8KLfnYIXMseQBWx86HzmMKv5Qx7jvHQDa/F0A2IAH2YY+uu64b+sxO9BQB7c PCBLjYPaNGftGK5ycIKwZMBTNn9NgGJWf5ha2upY7aRVqfpxfbnGUb1l5hEr 68eE9iy0DVqx0j5gxeZx/iuOOvit+GqcX/fLcX7L2Di/pWycfycbG9D+Ifdz cU6CF3UUa3AX8t+N0F/Vi/qPftz/XQf/YSOfKjapUulmMyrYPJ6fs3myKH2T r1zyxhDF+KEotegNSVoR67P0Zq0vNgxaN8c0YG2bxYy1K6y8BzdaT1972MZr 7RfWXgO/2UzrZzbTVjPbaauY7fQeZjOa/8ATPNOIGCzG/X/oD0C/ew32IMCH qEdKUrSDKGdETFm79Cl9ly2XvGsiP37ESxQ9EigbsTNcPGtnvHLQjnT1gB2F WjO2V+t6b59vMG14udHU4SGTKdsPmU7efttk8rbfTN23MHO3TczCbSPY8CFX JesAc7AD9TjroN8D/cXwYRq34jkQyIOz9xIlHBJR7GE1ij5iRpFHHLiwI5P5 IUd8hTOPhEj5H46W9T2cojD9cJ6S5+FK1SmHmtXdDy3TnHRovdbEQwe0XQ5/ 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 KHIdfM3cieXoVpyQbsTi9w3EqdGZBCs6mjCRtz/eR7QrNlR2e3Ss4paoNNWN kXma6yPKdAbD6/TXhLUYrpq1xKQ3tMesJ2StxfKQ7ZZLQ45adYV8bLUk5Eer 9tC/LRfhgeTAHL/pyGzBLGbaNgrmjbw7gOh5BPyPWNxnRL5xNZlPF5Ox5z9Z mY6kmdG+NCfeztRpwq3JQbJDibMV18Ynqa2Jy9JaFVukuzK6ymB51FzjZbMX mnVGLrNYErHGalHEFusF4QdsWsOv2LRE/GDTHPHauimSWQHLeZHMfG4kMxsN 80VJZTDRoyg8ax/619JQc5/B0akM7PmHH7Q324h2ZDvwNmdNFa7P8JcdSA9X 7EuNV+tJTtdalpSv15lQbrgkvs5kUdx887bYTquWmD7rpuiNto3Re+0aoi/Y 10U/tJsT86dtbQyzro1lVsASry1qYpj5eyTz8Ncsom+R891IRb6VhZwvF7l/ Lo/25eKZA/n6tLnAnluf7y7sz50h25sTqtidFaPWmZGi1Z6eo7cwtcSoNaXG tDm5yWJu0uIx9Yk9NrUJ6+2qE3aNrYw/O7Y84T54ZVeeyGzAGGBVnsAsRvN+ Hr5ORAzgQZzJw7V+IXL/Itzvw3MhNhfr0PoSG66/ZJJgZZG3zLKCYHFHfpTa otwkrdbsTL3mrEKjuZmVpnUZjRY1aQvHVKZ225anrrUvSdk5tijl1LjClLvj ClJ/ty9MZbbAGlgVpjDL0UhutzyRzANicCmH6AS0D5Qi9y/Dfe8yKVpfoUlr Kq24lRUugmXl06SXlAaKFxRHqLYUxWvNLUjXq8/PM6zNKzOtyqmzKMtuHVOc tdS2IHONfV7m8LiczOMO2ZlfjcvO/M0+O5PZAuucTDYmJ4NZAcv3sBCsBcla zEDuX4AYQH9PJXL/auz7ruJTf40araw155bVOvGX1HhILajyV2iuCFNpLI/V nFOaoltVkmNYXlxiUlJYa1FY0DImL7/TNjtvtX1G3tZxaXlHHVLzPh+Xmvdi bGoes0vLYzZpuWxMeg6zGs0bXG59i3n4CJd+p4oRA+jvrEXtQR1yDrCyXpmW NZrQkkYH3oKGKaLmuhnyDXNClWtrojUqq5N0SiuzDAoriozzyqvMs8vmWWWU LrFJLemzTyrePDah+PC4+OKb4Bf7hGJmm1DEbBKL2JikQmaVVPAvP+OY/DoF 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 pyD3T8I9Z+SByxOUqDPJkBYn21NbsiuvOclbMDcpSFSfGClTmxAvVxWfLq6I y1MqjStTLYqtUy+IadPMjenWzo5eq5sZPaKXHn1GLy36W/CnTlo00wKa6dFM Hai95xmOgS9mYR4w7sPQH0nHPe8M5P6p0Mf7jhQxLUrTo9Z0G2pKd+Ea0qfx 56QFiKpSw6TLU2PlSlNSxEXJOUr5SSWquUm16lmJ8zUzErq0UxMGdJPjd+gl xZ/SS4y/B/7QSYxnWkAzKZ5pAPX3PPHH+QBzfwbx3w/9YVx6rQMrM6GP9wsy 5KklS5vmZltRfY4zV5M9lV+R7ScszQqVLsqMls3PTFLIzchUykovUklPq1ZP TWvSTErt0E5I6deNSxnWi0k5oRedchf8rhOTwrRjkplmbDLTAOrveYTj8DrW oMQLk/hQW/KR84FludBHX5pyZagBe8XmFJhTVcF4rrxgMq+4wEdQkB8slZsX KZOVlyCfnpuumJqTr5yUXaEWnz1XIzarXSsqc5VOZOZW3YjMY3rhmV+Blzrh GUwrIoNpRqQzjch0pv6e+zgGL2MdSLwwiQ+1sRj+RxGu9wuhj1y0rkhIVdgr Vl5qTCWlY7nCUldeXul0QXZJoCijJFw6tThWLqkoVSG+KFcptrBMNaqgQT2i YJFmWH6vdmj+Zp3g/CO6Qfmf6wTlvdAOzmVaQDMkh2kA9ffciYAfh3mXeGHD 0F9Xjry3DDEAc+AFVeB9caUSFVbpU161DWVXu3AZ1R781Go/YVJVqFR8ZZRM bGWSfFRFljiivFh5Vvkc1ZCyNo2ZZT2aAaUbtfxKD2nPKL2l7Vfyq5ZfMdP0 L2Ya/kVMPaCIqb3nJo7Hk4jBHox7cwXWYjXWQRXu+4JKvC6cg3ufdQqUWa9N aQ0WlNI4nktsnMyLa/ThxzQECWc3REiF18fLzKpLlw+uKxQHzqlW9p8zX9W3 tlvdu3aDxvTaAxpetTc0vGp+0fCqZupeVUxteiWoYKrvuZaIecDc78C4N0Cv px71F3W49462pAF5RxP8h2b4D/NVKa7VmGJa7SmqdSIX0TqNF9bqzw9pnSUM mh8jFTA/RcavJU/Op6VSwau5SdGzeany1OZ1KpOb96m6N19XdZ/3XMV9LlOZ 3AgaQD1Tfs85xGAf5mAr0rKBebj3DVpANbTz5yP3Xojcp52j8CWKNKtDl0I6 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 sExlY1ihsj6sQrMurF4zGtauXR22VG8kbEhvOGxMfyhsh8Fg6GHD5aHnDZeF PmjUF/a6UW/YN0Y9YTrDJWE6A9CfIJQjfEN93w2nDbD9YBL1TybWSeA+I5ea A+GK7GLvlu2Rc2Vz9CLZGBMkY7ExMhqbqqyOzVVGYks1K2NqtCtimvUGYrr1 +2MGDPqiRw17o7caLYk+YNQVfca4M/p+k/bol03aor80bo3RGbXE6AxbonUG t9DnqP932uANLvVPYPtaOrkPcDSF+/6JrDH5fEsszx3Ez5Z1CS6yJtFPRpIi ZWVSkjKYlKVZnlSoWZZUqV2a1KDXk9ih353YZ9CZOGLYnrDJuDVhr0lzwknT xoT7TBsSXjCtT/jCtC5RZ1yXoDMCQzCoi5/k01D6gXo/gu3L2ayxYX8G8VYq a0z8GEviuYOU6TKc6iBDad4ykB4my9LjlaXp6Zqe9HxNd3qZtjO9Vq89rVW/ Na3HsDl1yKghdYNxXepuk5rUE6bVqVfMKlOfM6tI/ZtpRepvJhWpOuOKFJ0R GN7mr4yD52mDB7F9dz7xHkuf3TnYz8J+Gvne7J0zlGkjA1l2sizbQ3pzgmVJ TozSmZOqtOfkaFqzi7XN2dV6jdlNBvVZ3Ya1WYNG1VnrTCozd5qWZx4zK828 17w482n41Kwo81+mRZk64+JMnVFxhs7wNu8xDp+mDa5j+3wxGlQh+gu+rOf9 KvwYzNGTZblW0ps3T7rzF0lnQYC0FUQpLQVJSlNBlqahoFBbV1ChV5PfoF+V 32lYnt9vVJo3alKct920MO+oWX7u3eZ5uU+a5+Z+bJab+6tpbq7OOC9HZ3QL Q46Gf6Yf1GXw1SI0GHSQfSW0Aa9H8WUQP/r4mbzuwinSUWwrbSUu0lziK42l 4Up9abxSW5quqS7J11aWlOmVl9Tplxa3GRQV9xkVFK82zivaappTdNgsq+ii eWbR4+YZRR+aZRT9YppZqDMGo8wCnVFWgc5Q5VXG301s3VvGuVhBDkw5+gev h/Gnj3bpwqfWMp59KJ8pDRUOUlfpJTWVIVJVGatUVKZqyipzNCWVJdqiymr9 /IoWg9yKXsPs8mHjzPLNJunlB01Ty8+bpZQ/apZc/lez5LJ/miSX6oxTSnVG KSUTGHI0fInxp+ZEXazifKymHziuraQNoAt/WjjW89u1NTVTparWTirq3KWs LlBK6qKUorokpaAuS5NXV6jNqavUy6pr1M+o7TZIqx0ySq4ZN06s2W+SUHPW NK7mEfiLaVz1zyZxVTpjMIqv1Bne5hnG33Xqfa6O+QA21RL7Qx+01BB38lll A/tPNlpJcdNcKWx2lYIWX8lrCZOclnglqyVNyWjJ06S1lGlTWur1kpo79ROa BwzjmtcbxTTtNY5qOmMS2fSQSUTTu8YRjT8aRzTojCLrdYYT1HGEx+l3NSfq VDPnQxPnQiNtAN1Qz/uyFmJffkM4rwP9oXOmZHU6SEaXh6R3BUlqd7SkdCcr Sd3ZSkJ3sSauq0Yb09WmF9XVrx/Rtc4grHOXYUjnSaOgzhvwlmFQxw+GQe06 w6A2nUFwK7RM8hBtcKkBXbadfmgj9m8lBwXaeF3dQdzXRdzTw/3/pSaSzO+L J6LFJCxzlfh+X4ntD5OY/jiJ7k9XIvvzlfD+Ck1of5MmuL9XG9i/Ws+/f6e+ 77IT+j7L7tf37v8/fe++7/W9e3X63j2wRKfvc4trtPlZ7B/sRo/E3hAsgUbe l2E7exn6wwCxz5BWIldaSPjwTAkbXiihI+4SMhIgwasiJWhVkgRwIvuvKlF8 V9Up3qu6FM9Vwxr3VVu1i1cd07qtuk/ruuoVrevwt1rXIZ3WdQUM/od7aOu7 ejkf+hiLS4k7oR2qsV2I7bSV6A+riP/XEn+uNxafDVbivcFWvDY4iudGT/HY GCTu49GyeDxF3MbzxHW8UlzGW8VpfEBxGB9XFo4fVuzHLyt2m15S7DZ+oyxY r9MsWAdrdRq7W5xbwty4Aj1wkLGIzR5o4H3pMH2wmvvf63gGYSPx12buwW8n BttpJg538Fugd8wR+11OYrfLUxbsCpL5u2Nk3u40mbu7SObsrpPZe3pl1p51 MnPPPpmx56JM2/OsTN/1pUzfyXMgO2A7bJvkLmzvW8OcQF0HRxgH2K0cRX9Y Tw7KOM+gbKP+d/AcwB5yIPYTAx9WZPpRM5l6zBpsxeaYo1gf8xCr40EQK5bH M2XK8TKxuLNVzO8cgh1iducpMTl+U0yPfyxmR38T8yM6MT8MhyY5jL0dG8gJ w2YP1GO3aAt9sIP4H7uBB8iBOMw+GMd5DuMu8gBOk4NxTk9MLpqJ4QVrMbhg K/oXHETvoodoLgaLcjGeyYYT/iIn20UG1MUxOARX4HUWJ9+BjgsDnJtkNzY3 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 HebvkhfzKs8GvSB22FuMrSDqEYONVDSPXMovYZriORD8uBc/7qY9LuHHBXSQ 8+QKnaVPTpOTcpL/n8CT43h8jJOJHWRpIXXk/jc6A55/wa667Y+qf7zO6+eF 3/9kfD7EOXKdc+QKWsw9PDN2kT45z/NBZxgbpxijd6GDnEAHOY4ecwwd5Iis oPy1cpA+2U9b7OVfd+PhLmqwk/7YQS3VM2jbLbZyVPkXp/LXTPl/4XR+yRLt gynmBlPNNTHBrjU251EbV+z5YSsCO4nUMJORVyD7lDLZo9TKbk2z3KHpkp3a ftmuHZFtehtli94u2aR/TDbqX5QNBg/LmNGbss74axllj5Y1pv/ND9j9eAbT ENPJzdms86dz+bEm/sWXk4bmclx/uhwytJd9xh6y2yRI7jCNlh1mKbLNLFu2 mBfJJp4RGjevlw3mbbLeolfWWQzJWosxWWOxU1ZNOSIjlhdkpeXDMmT5lgxY fSf91ujT/8NX2H/Ljqnfgbh3IbYXcKnFnwN8vs9KT/ZaWMpOS1vZauUsm6x9 ZINNmIzZxMnaqWmyZmqurJpWIiPTqmTl9CYZmt4pg9P7ZfmMNdI/Y6v0zTwo vTPPSs+sG7Jk1mvSOfsb6bAl20xl9n/4BJsvu3K/mUvMOTcu7y7c48OfbXy+ GV82zTCT9TOny+hse1nFPi0r5wTKirlRMjA3SZbPy5Rl8/Klb36Z9M6vlZ75 rdK9oFe6FgxLh924tNntlVa7U9Jsf12a7P8gDfZfSv1Cst5U7G+BHvO+E5cj T9rAm3x7L+x7YBt/xvBlFF9WL+A3HxdYy6D9POlf6CpLHXylxzFMuh1jpcsp VTqccqTduVhanaukxblJml26pdFlUOpd1kud6y6pcT0hVa5XpdL1ealw+0LK 3NgByfV3uOjkTS4pj/uzlIBDftTfF+0Df0iflhX4stxFK33OlrLEdbZ0uTlK O1pM6+IgaVkcJU3uidLoniH1HvlS51EutR71Uu3ZIZWe/VLBTbgyzx1S4nlM Kfa8VynyekYp8PpMyff6Tcn3ZEcoFY9JXsbeQyGMg2Ceb2bZsTEQ+wGscX2I O2mXJbRLhwe5B57TpZm9Yhq8F0mdj5/U+oRLtW+cVPmmSqVfjpT7lUiZX42U +LVKsf9SKfRfLfn+25Q8/yNKjv/dSrb/U0qW/ydKpv+/QKdkor9M4KtTnsfe 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 pmVkZmXn5uUXFhWXlJVXVFbX1NY3jBjZ1Nwyqq29Y3RXd8+YvrHjxk+YODB5 yuDQtOkzZ82eM2/+goWLlyxdvmLlqtVr1q7fsHHT5Vuu2Lr9yqt2XHPtddff sOvGPXtvunn/LQcOHT5y69Fjx0/ccedd99x78tTpM/c/cO7Bhx45/+jjTzz5 m6efefa3zz3/wksvv/Lq67/7/R/++OZbb//5nXf/+rf3/v7Bhx998uk//vn5 v7746utvvv3+hx8v/nzp/+t//5177kH/f/7/b9W/n7+qcY0KeT0xb1JBbyPq o1TYx6u4dxP4XhX56Sr0c4j9AhX8pSr6qwj/OhX/jTSAVtUCOlUT6KUN9KtG MEm1gqk0gxmqHcxVDWERLWGZagqX0RbWqcawWbWGbTSHq1V72KkaxG5axD7V JA6qNnEbjeJ21Sruplncp9rFWdUwHqZlPKaaxlOqbVygcbyoWsdrqnm8Qfv4 k2ogf6GFvK+ayMeqjXxGI/lStZLvVDP56edLc6ctyVFtIMA3APtfrcHv/+Xv /+PlJX5+/v4BAYHETLBGExISStzo9HoDoRNmMpmJnnAr8RNhJ4Kiookhgogo IoyIIwJJRZIvlIZj6X8Fky+WCKXWUaorpSftHz9xYMrUaTNmzZ2/cMmylQBl QJq/q9du2LRl25U7rt25a/feffsPHDpyG92l6i3vO0VQ+GLif4XEcEz4gkJF BWFBXBAYRAahQWy8/3ei48OPiI9PPiVC/vnZZ58TJF98+eVXxMk333773Xff Eys/Xrz4008//3zp/3r+L92WFHzp1mzjpaOlkZdO1rkvPdSSe+nxnoafn5zY /8Vvhha898ScLX94cMHe5+9bcuLJO5adfeToyifOHlrz3Mn/h733DGv6fP+/ UTu0e7e2tXV8XVVbd1XcIg4QEJG9dyAhQAIJGYQESAgJBAIJZLGzIGGGvfce iljcAxX33uv8X9rv3ft33//jqNA++T3wwetxXsf5mef5eV9XFKzhAin3pDJN dOnf8tbhzxq+rcPbOvzPa+nt+fD2fHh7Pvzfz5e318Xb6+L/c12o/vsOo0bv MKU75kIdeodptdn5vMPF8U6Xd8hYRwDnaBNe1lsVqmspIdbU6kltBi21vyCX cSQnI/aERJp47t8CrxyU6D1Ks+FbKEMODWYroN1m55NuZ6db/V4hY32YuJEO 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 Otlkum601Ub+dQND+3EVx/pOCZ9xJSfU42xarP/xhNSwgZjcmP6I0sSe0D2p e4OaM9sCe7KbA47kNAZcya0LvJexJ/BxYlXQi6jK4OGg3wH+6MMEo85LQvJw TZTLi2MWROpHk87isTaTte86reWet9K17tW5Wl2r8HY8VxiELe1RfgdTk8J6 EzJj98YWJrVGVqY1hjdk1Ybuza0OOZS3O+R8fkXo3eyyMPQ+wp7FFIe9CikK ez0jWIMghGLOPAUpQE9oN3qlDSqzv7ZpL/rYabz6da+V7OO9NM1bTSzLi9U8 xxOl/nitQbhfb1Z8WEdqWmxTYl5SbVxZelV0TXZ5ZFteSUR/flHE6YLCqD9z 86MepOZFPY3LjXoZ9jsgAGsIw++INNTexVjDnu1i0Kws+WWv1oL3+wylh/Zb brvfQ911rc3F4nQdl354t6/7vuJQv468mLDGrOTYmrTspMqk4vSShKrsgrjm vNzY3oKs2OOFWfG38zPj7qdnxD2OT48bCv8d/9YQgZ/PDKyjdCNqb1lRaFOS GOvZNf/tAYMVTwcsttzpt9e4uJdpfrzJnba/xofTWRHk21QcGVqTlxhTkZ2R VJRekJ6bWpmdmdyQl5bUXZicdLQwKfl6YXLyvYykpMeJSUkvIpGImYBA9GGi cF1mYR3l+Plo2CbyvXPHrI/9GnNfD+otfXjUbNONg2T1Mz1OZofb3Bx6Grzd WqsD+LXl4aEVxXExRQVpSTm5eenpWeXZyRl1efHpewtj0g8XRqdfKYzJ+Dsz Nv1RUmzaiygkcib+rSEGdfev85N2r8fzD7cKT/UoiL0fUJv94oTuor9Pmmy8 PGirdqLf0XR/pyu1o4XnWl/v51NZHRpSVBETnVOanJhWlJ2WWFCSHZNXkxeR 214QlnOwMCT3YmFY3t9Z4TkPk8Kznkf9DtwGE4R49EHycV3swfe69s1CE/1y Im+Oqcx6cl5r3q2zRhvOHbNRGcQ7nHr2sSjNe7ns6hZf75KG4OCcmqiotKrE hISKzNSosqLM0JKq3KDilnz/4v0FviXnCgJK/84KKHqYHFjwPPp3QDCOn4Ta uwhrqVuD5w9sFPw0ICP88swO0QdXVeZevWiw7uRpa+X9Rx2M2g+6kGv3ubuU dfrw8toDA9OaIyLiG+LjIuvSk0P25Gf4V1dm+1Q15fKq+vI8q07nee35O8u7 8mGST9nz6N8BIVhDKu79ly1D3Skt8K1vrcDIiU2CT6/KCN35Q2nOhav6awYv WO3oPkUxaDzKtK085MYs6Pfipvf6+yV0hYVGdsRGB7elJPi25KbymsszPJoa s9yaerPZTaey3VruZXAaHiV61DyP+h0Qhv5HJmrv3UsEoH2ZwMTASoFXF1YI PLgnLXDtrqLkyVu6q/Zfs1Bou0jW3XOGYV10wpWeecTTLWHA1yfyYEhgUH90 OH9fcoxnb06CW09Zskt3fRqzuyedgacqOfXeT3HufBLv0joU8TsgCp9BHmr/ 2oUE9C4kPpycR9y7g30Ij6UFzj5UmHX4nvaKrttm2+tv2GqWXqGbZ19gUZLO erhEnuZzg04G8X2ORwVxjyWFuR7JjmIeKY11HKyPpw32JFCPnEigHr0X7zDw PIre9yoUCZkJSMDxS+YR0DKXeD4gSdw6L0Fc/UuSOPN8teDhZzskep5oL2t6 aLKl8h5JLfeOg1HyH5iBuOFOD7rmzfK5EuThcTnSm30pyd/pUnYQ7WJZKOVi Qzj5Yk+E3aWTEbaXH4TbnX8dTD751p984t2MQLqUAFTNIR53ixE3j4oTFy6J E6ceSBKHXq8V6nq1Y07TS+3llS+MNuc9s9qZ8oSiE/2IaRr8kGPj84+3g8f9 ICb7fhTb6V6yO+1ejqf9vXJv23uNfNK9fb7W90/7Wj34h2/99ztv0o1Rz98B +ZLEcJMw8cd+UeLcCVHi6K8+jGEpgY7360Ua3u+UKh/RXJ77zmBj8ltz+eg3 9qrBw0wd/rC7kecw39ztdYi1y+sYO8brVIrD6zwH++EKR7vhRgZpuJdp/eY4 0+rtLWfLN8POFs8/M3/HVKUQcadTkDh3SJg4jH0YvbfEidaJ+QI14xtFS8eV pLLGdy1NHNdfGzFutiVg3Fbee4yhjBuZ6uwxHy3n8RBdx/EYA9p4ihFlPNfE bqLczGai3sJ6otPS8sthK4svF63NJ59Ym335jIzNyP1GgriwDzMQR4SIrkvC ROM9MWL3j0WCRT+2iKX/VJgT+1NtUQj2YPDBdC0XSJvYQNvGBLacI3gpOqAg sceNWTtIULXBHhBrKNKwxEPyzaFF0wyDfyZwTNsYrmobwUsdI3g1I1c6CeLw QQGiE/sw6m4KEqVDYkQeLBNKgY2iUbBdMgCU5/FAa7ErGC13AstVDmC/1h6c 1tsCZ6M1+Gy2hOAt5hC1zQxfRk0gS/ZX74cBXlKvD63yerBPXheOKujANcXf cWQfQXQeJYjaSwRRjDmMzO+SAgmwVDAM1orwYessd1Cc4wzq82igt9AOTJdY A2mZBTgsNwXmCuwDkTYAr1XYA7JaFyJWa0PCGk3IWLsLCtepQ9V6NWharwpd G1RgADk8I10HcfyzmAHBXpQUzGHEwhyBIPRBeLBSmAUbROkgO8sOdkpawa45 pug/GILZfD0gLdAGykJNYCzSANYiNfBYrAI+S3ZC0JIdELVUAb/85dH83Q7F y2SherkMtP6W+hM4/lUc/x+CiPhCEH4gIcBBH4SBPggZVglb4pyYwHZxfdg5 Swt2SWiAnqQKGM9WAos5imA7Rx4oUtvBUUoGXOZuBfe5m8F77iYInLcBIuat h4T5ayFj/hoo/C3AxH+vaXIiQN8pBizVWcDRngMeJguAa7sUPFykwd1vPbjG bAFWliy4lMkDs34HOHXsBEafCjgOqgL9jBrQr2kA7W8NcHiyC6gvNYHyTgvs P2p9J49rT5KntMftfmh/toMZ+V8N20WAoSQGriqzwENrDngaLwCezVLgMVcB 13c9cKK3gmvGdmCVKIBLrRI4t6uA0z41YBxWB8apXeB4RRPof2oB7bE2OLzU AepbnR+UUd0p+3HdCfKU3mfyD71RMujMBDivEwI61sBUFAN3zMTwds0BH8MF wCctBT5jFXh7bwTPiG3gnioPboVoPVWrAqtFHVy6d4HzQS1gHtcBp4u6wLil D44PDYA2ZPjD4Y3RFHXUaJwybvyR8tX4PeWn0TsKGMwEuGANjlgDS14UuEqz gK8+G/z154O/1VIIpK0GP89N4BMqC7wkRfDIUwH3Sg1wa9QC9l4dYPXrg8sR A3A+awTM6ybA+Mf0p+MLs6+0N+bjDqMWo9QJixHqV4thh5+mrxzAeCb+V4Os CLjJiYI3ejH+qrMhSG8+hFgsg1Dqaghy3wz+QXLAj98JXtnqwC3TAo86PeC0 GYJrL/phA2bgcsoCnK9YAvO+9VfGcxL6QDajtI+2bx0m7F7RvpFe0MHyqSOY zwSw8P2NgTV44Pu0L+qbYJXZEK4zHyLMlkIkeQ2Es7dAiJ88BESroCelCd5F +uBZZQweTeY/OZ1WP1z3k76xj9p9dTlvP+V8hzru9NzhA+MNfZj+yXHI8YvD E8Y3+wdOYPOXE1jPBLCxBudfXhBmpAJ/+SC/esW05kGsyVKIs10Dsc5bIdJb EULD1CEwSfe7b67xV+9yy0nPWpsJj1b7Mbceh8/sAXR9TjFHna+5jDCfsF8z 3rk+ZXxi33eacLrN/Eq74fzD/qoL2M0EuKIfxd4ijF+7IhCKujtmhwQk7pqH uZylkGK9BpIdt0I8V+l7VJDmZGic4XhghuUn3yK7D167HUa4DU5vOB2s1+w+ zkuXo9wXzIteT53u+zxkvPG5zRzlXnMZd73ImmKeZX+nn3L9SZ0JcPvlieF+ nj9q/0jcY01E3Z2qMRev414CmZarIdNh69dUt53jCX7ao1GRpu9Ck22HA3Lo Qz6lLk+5e9wfcZq8HrC7fP9iHfK/43Im4A+XW4HXnF8FXmC99znt+ol73G3C dZAzxTzE+U6fCeBgDVzUNkGovWNRd6diPigLfbFcPeyRMl/9Nd9+61gOS/l9 mrfucHyI5fOIOOqjoDSXv33zPW57V3jf8KzzverRFnCJsy/4vNvRkLOul0JP uT4JO8p5E3jI/YP3fo/PHr3cCXa35xRzJoCDGo+He7yhqLsTUW9moubNx3VZ pLPoe4npqvEym63vC52UX2Vz9Z+k+JPuxUbS/whPYl8NzvK84F/MP8uvCjjp 1Rh8zLMzbJB7MGLA43TkQY8/I/vQg+nmvfPv8Br1avMa47R4f2HNBLhjDT64 LiNQ86bgfOSi5i1Wxvt6tRZMVhqvHK2y3vK63FH5aYGbwV+ZfNL15FD6xdg4 1zMRabzjIXm+hwPKgg761YT28Vsjerz3RXd5HYvp8LoW2+b9PKqZPxzUwB/h 1/l+4tb4jbvNBHisEgRfrCMa9WY6zkmBDHoQShI/qjXnjdUaLn9Xb7npebXD zvtlbP0beV6kCxlB9JNJUa6DsUm8A5FZfvtCi4I7g3aHtwc0RrX4dcY2+g7E 1fteiK/1exJXHfAqdHfAW//KwFFeeeBn95n4twZ/HD/ul+7FNVGMn9OqHbOm 6jTmjjbqL3vVYr7hUT1lx63dLnoXiz2tT+b40w+nh7v2J8XzumPT/dqj8oKb wssi6kJqo/cEt8XtDtyfUBF4OrEs6O/E0pChiOKQN4FFoR98CkM/cWcCuPgc AtGLSUBy8Hu7DL3KGgXxiSa1Oe/adBc/32u29u8WsuLVGqbemXIP6yOFvrT+ 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 CfRE1oOx6FqwEF0NtqJoVIgtB6bYUnAXXwy+4gshXHw+JM6ah1+C86B01lyo mBYw3yIIRjuEwRKxVRbFK4HEgWwoCXakuWDDXAjWPkvAKnI5WKavBPPiVWC2 Zw2YtawF0+51YHpgPZgc2wAm55GbG8HkCfJmE5h8Rr4i8P+y8YcJbJiOf2sw UfifD0JGL4aqIQ5UA0mgWM8FsuNCsOUtBZvwFUBKWQVWhWvAsmodWDStB4vO DWDevxHMj2xCBbcZzK4hD7eA2Wvk41Ywm0LgX37iz29msGXKDDZPBx7BKwhm cv/zIKiKokBXFQdHPUmgW84FqsNCoHCXATlkJdglrgabvHVAqtgA1vWbwLp9 M1jt2wKWA1vB8tQ2sLwsAxb3kJeyYDGKTG4HC9j+A/lqAbJfLGDbuAVsnQ6w 3CwIlrL/8yDo8iLgpCwOzjqS4Gw+FxiUReDotgxogauAGrcW7LM2ALl0M9jV bAXbFhmw6ZYF0oHtQDomB9YX5MH6tgJYPUcPagQ9qIkdX61+7vhiBTvGrUHh kzXIjaLBNx3/1kDaJoTXIf3PB2HvEAM3TUlwM5kLbLtF4MLCZea7GhhRG9CT 2gwOhduAin6QfQN6UR3oQ+3bAXaHd4LtGeWfNtdVvtk8Vp0kvVUbJ42rfyL9 UB+1AZX3trDzrR3sGLYDhekAq02CYLcFsyCbMQeBPoiHghjwNCTwmqq54Ela DB6MFeDGWwussE3gnCgDjBz5n/SyHd9pNcrfqC2qU5Qu9Un7A7u+kI9rjttd wvzRfZ1R29e672w/6w3b/dB5bQ+aLymg/pwKKk/x0J3pAOuNgkBB/8EZ9ZUH 6jxvzMX4oiflh56Ur+Ui8HFYCTz3dT89Ard+c4uVm2SlK00wC1U/Myp3faLX a4/S2vXeU/dh5uew0Vv7sybD5FtmQ3ZD5s/In8weU74bPXQAvQd00L6LBx/f cgT16QAS1kDHPWZX1LveqP0D0JcKVp4FIehJhZgtgiDyym/+rA0TPnyZT57h Oz5wktTesbO1h51L9F8yqo1f0JvMnzl0Wj2h7Cc9pJywfUC5ZvuX/TO7W5RR 0k3aN4vrDDC+xgSDS0zQOccErekAmw2C4IS699f+vx/WEoraPxL7xaI0Z0OU 0cKvkaSVY2FOG94Hem4f5gepDPFitJ5yUg0fsvPM7jmXW/3JrLW5xWi1u+HY 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 GGyMBN2NUaC9EPBF3XDUT0TfnYVr7gV4TSVy1IcyNdqzcgOm+6U27DcKPQUu 5IZKnsqIVzyamqlxIKlId298ldGu2CbTHdGdllsj+6w3RYzabQyfdFgftslx bdg+p6nQs86rQh86r4r4ZDsRDRYTMWAyEQsGE3GgtxAIwBpEof6c985F718i TL5XSlKvahSpB7Va9Js1FqwXyt34T2AedCgvRnFvVqrGTHqu3taUMuNNSbXm 6xNardbELbGdjB10mIhe6bQier3L8qidrsuijrsNR95xG4555zgcD9bDCWA2 kgTGiMFCIEgA64Cee857F+K1VPCTj3Ui5EmjNLndokJdajRhOVnjzHewwk9i N/YHbc9P0tiUk6W3LrPIeCq90nwitdF6RXKH3WjiUsfhhFGXgfgpt764rR69 cYc8u+N+8+xOeO3Sk/TTricFLHvTwLQ3HYwWAiHouxPQ72Wj9y7B66jhIW+a +MifbcLkersCdabViPlwowPvnlof8W0VYQobS+LV1xSm603k5RmPZZdZLMus sxlMb7XvS+t26kkZdl2cPOHembTJc1HSrFdb0iXvtpQX7ovSvju0Z4B1RxaY d2TjT50FQBjeexL6vTyknIO8reckT9q4yK0ubnJhsSx1vFOfebbNjmdHo5fY dG2w/FRljPp4aYruaFGO8VBBsXlfXpVNT06TfVdWl3N7Zr9ba/oKj6b0DV4N aXt86tLO+tSlP/FsyPrq1JgDNk25YNGcB6YLgQicBymsOBdZyfsqVnK7mYXc 6GAj17o5yOkeaXJoiS7Trk4b7s2t7qJrGwPlxmuj1EarknQHyzONeksKzBcX VVh3FNTbt+a3OzflLnWrz1nuWZO91rsya6dPRdYp3/LsR16VeV+cqwvArqYQ rGrxwPyFQBSOfzozgWJm8qCWTm60MZPLi1nJhaXs5Fi/BNm3VJuxrduKa32n q8iqVn/Z5U0RqoN1CTq91elGXZV5ZovKS62aS2vtG4pbnWqKut0qC0Y8y/Kn vIvzd/gW5h9H/vQpLvrkUloC9uWlYF1RBuYLgRicB5kM8rGMRm430MiVdib0 PLj2P8BKDg6JkZ2DmvRNfRacU90uwmOdvjJDbWEqvc1x2l34jrO2uhyzpppi q7qqaruqimansvLFbsWlQ54FJau9c0u2+maXHPXNKrnrk1v20TW/AhwKK8G6 qAosFgJx7ARyaOQJer4bzRS50IVnD/QxkyPDzGTvMmGybZk6fd2QGcd4n5Pg SLe31NKuEOWu9hitttZkg8bmLNPaxkKrivoKu5LaRqfCmk7X3KoBj6zKCe/0 ys0+qZWHfFMqb/mmV793y6oFh+w6sMmpA8uFYAsw5jCE3Ksh5EobhXOATo4M MsjscgaZWSFApleo0FaPGrONDjsI9A94SS7uDVJs647SaOxK1KvpyDApX5Rv UdxaZpvfXO+Y3dTukt7Q555Sv9IrsX7aJ77+gE9c/U2fxMZ3bslN4JDaDDbp zWC5EEhhkE/FhPxRj2v/uPZ9rI9G9uNejJ24F2LTKjx/YZUibcW4IevgmC1f 9zJ38UVDAfKNAxFq1X3xumU9aUZFS3LNcxeXWGd21tindrQ5Jy3qdYtrG/OI btvgFdU26x3Zdt0retEb19j2Xw7x7WCT0AGWC4F0Qh6VE3IN/f+pbjx/YIgi uzAD2IzvpFizlpuMr5WjhtfoMfeutuZpn3AVbVzhJ1u9PEyldFmsVsFwin7O YLZJen+RZXJflU380haHmJ5u54ieUbew7vXuId17PYK7r3iE9Lx2Ce/5aR/Z C9ZRvWCxEMjG/KEaxwC979E+7D/APogtmAGsRe+zcpqDjGySopZOazM6Nlhw Nq1zFqpe4y1ZOhmskL8qSj1rPFEnbWWGYeJYgWns8grLyNEmm7Bli+2DRpY5 BYysc/Eb2ePiO3IJP185Boz8sA0aAcvgETBfyNtCnIvo/08uwTMg0H9vQ/+7 DjOAlXP+cwcz6ZkRJR071OlN203Yqrfa85Vs9hTNmw6UydwYoZSyPl49fl2a TvTaPIPwNeUmwVMN5gGTXVa+kyO2XqvX2nms3mPvMXnJ3mP1Sxuv1T8svVeB mc8qMFnIA6zDhTZCDuMYzGAGsQFrMI4ZwCD6vy7MQVpn+UnDrBJVuc+AuXiv DVfOHjfB9F1+4kk7w2RiZ2IVI3ekqIVuz9EM3Faq67et3sBra6ex+9ZhU9ct a8ydt+42d9p6ydx5y0szl80/jF02g6HrJjBYyO84F0/gGOxdhnsgsAar1qH/ RP+3GPsAGjEHqTjORUqPS5OC49r0rGPmrClHnbjjj3gLRB0JFg07HC0VdChZ zu9QtqL3wRJVj4N1Gq4HOrScDgzrOBxYo2d3YI+e3cHLenb7X+nazf7UsdsH 2ojWQs5jHncA+3G2rMAeENyLMYK9IEswA2g6gPsQMAfJwb1BGZeESMolZSrh kiEj+qIta9hFd86gCwG8fhciBL0vJIh6nM+QcD1fJO10vkbW/nyHvO35IUXr 82uULc/vUba8cFXZ8txrJYuz35UszoCSxel/cgSzsB3L8RnADGIU50A3ZgBz +mXogXPOM0jidTYSfZuPRNyWJSG3tWgBd8wZvnccmT3veLO53QnhdL4Tw+Nw J5XP7k6egPWdSiHLO20i5nf7xUzvrhY3ubtT3PjeOXHjOy/EjW5/FTe8BRKG f/yT3ViDdZhBLMcMomcH6u//j34W9mLEX6eT0HusJOiZAPF7Lku8nmtQbs+N aE4vrBn2L1yYbF74sFi9DGUzfxnLbvoyndP4VSGXwatabv1XXTy6r0d5tV9v 5NN6cxC5zaf56i2f5otffJrPgXchG8cxg8LnsBfnYPMs6h8nJBP1Y3/DDOA2 9iG8ZyfunwWI8xcp4vBFhbL5okuz+GpKM/1qSzf65sIw+ObDpPs9hEn7ewyz xo80FrUfhawqP+rZlH4uYVP8uYJd4ddmdvlfRznk4C6H3M937LI/fvyDcXwO +3AOtmAO9Zd+DPaC+N/BHgjshXAAVmIDvJhBiGEGIYdZgBqlC7rYC2FCUwdr mgo4Yg7hgTlEAF0WIjGHSGZIQD4DX+jKJAKLmYRhjFkINjELwkHkOrMAPP0H A5gFtmIGUY4ZxNz9R98kxPcuIY6PCLHEHMQEGMQAuDCDEMAMQpyo4nUogQol B1qUNOhTEmCKOYQN5hDOmEN4YQ4RjDlELOYQmZhDVNA5oJ3ODsPIGjob7KCz wuF/sAifgYojqH8e9X8nxOc+IfaPCTF+QYgeEKKJqAALUcAcRBb4iSSIElGQ IkJ4LfygTHhBk+IGPYoLTCh2sKaweYNiAh+KgjCKQDJSiNTTsDkTWYbghrgF gLYODQzQ/5tgDmGqi5/GdDC0YYCeBzPohLKAZjIrqBeygVodO6h2coDqADKG THKCykZkO7IXOYqc5wTV2/h7T5H3yHcE2EFtHnO/Xoguahtj9mCGWGAeY25I B1NLBhi7MYNBMAvoJbCBTh47aFVzgNYiTtBciizjAs1VyHpkC7KbCzQO4ecZ 5CbyGHmLfEOA85cWcP78C03g+LkA0NegwAz9/1wGMNcbY419MVbmDLB0Zgaz AFYwiWUDoywOMCjnBP1mLtBbgkM/hKzkAb01PKA7jexAZnlB9wRyFXnAC3qv eX/pfeX5rgc8X5EvesD9+b/4hJ/zASNVCiyVKLDFDMIBc5C5vhRHE8yDHDAP 8mEFq0h2sEjjBLNiLjCt58Fv5pgJ9fGB8SiyCnOh9chWAVxNR44gFwR+GN0T +Gr8UuCT8WeB95j/vMX8580cJsD3+j/w4ud/A2Zz+nIUOMlS4II5gBv2prgb Yn+QDRM4e7CCYyg72GMmZZvHA9aYB1m18INVt+AvyyGhn5YrhH5YTAl/s5gW +WoxI/LF4oDIJ4vToh8s/hB9Y/FM9KXFJ9FnFiDyxBJEHluC8CMrEHpoBYIL ASt5Cl+NTYEb+m8v/PTFPUJ+WA9fCybwdmYFjwDsD4rlBudMvu9OpQJfHOuF Pjl0iHywXyr63m6Z2Fu7CYnXtuskXtlulXxps1fquc1x6ac216Qf2jyRuW/7 QfqO7S+pW3Yg8bs9iN+wB9Hf7EFkIWCL+YMr+lxvzB/megCCMX8IxXqEYD2C 7FnA34vjq28490evFP63nvnCr9yrRJ+7Nks8dVks9dh5QOah03LZPx0n5e85 TivcddipeNvhsNIfDheV/+XwUPmK43vFi06/5M85g+xZF5A+7QKSp1xBYiHg iLqe2Hvgj/4/FK8jCq8pBudntD79Z5QV86dwN/Y3IUE8z4LiBR75Z4ne9y2R vONdJ/OH5yL5Gx49itfch5WvuK1UveS2Vu2C61b1c677NM64ntI86XpH85jr a43D7j9UD2IvzgFPkN/vBbKzXiCDSM8HXFDXB31vMK51RwsRiMeaJClSv5K0 aB8STZlexjmwPYrx474bGSV4MzRV/GpwvvTFwAr5s/6Nyqd9O1RP+CxVP+Y9 onnEe0L7kNcGnQOeM7qznof19npe0d/l+VRvxvuL1nZfUN/mByrb/EER3ywk vxBwR+8fgPpzni8evX+qCPouGepThir1IkOf/iDNmuWPZE+uK/GhgudiEiRO RmbJHg0vVjwUWq26P7hZY29Ql/bugH7dGf/l+tv9Jw22+m022uy3z3ja94zJ Bt8/Tdb5fzBYGwjaa4JBY00IqCJKCwEvAQLB6Pdi0HunoP/NFCDfc8XI6zx5 6kGeJu33XHOmS5munKdSAwWPJMVI7I9PldsTk6c8E1Wmvi2iTmtzeJvudGi3 wfqQIaO1wStNpoLXm64OmjGfCDpmsTLolsVY8BuTsdBf+mPhoL08AjSWR4Lq QsAXxyAM/V4CkoHXkctLPhYKkCfF4uRWiRJ1qdiYcTLfkfMQ5kF7MyIkZlIS 5bYkZalsjC/SWBdbqTMV06i/KqrDcDxyqclYxKjZaPikxXDYFqvBsAPWA2FX rPvCX1j0RX036o8Gvf4Y0OqPBfWFgD/WIBL9XjKueWezk0+FnOQ19iHcwyzk aqUsOV1hwDhUYsexp9BLYHtuqMR0Zpzc2vQ0lcmUPI3xpFKdscRag2XxrcZD cUtM+2OGLJZGj1t1R2+0WRy117Yz6pxdR/QTm864r6ad8WDQhYejI5pdSX8H gubqgL47jZl8yGcm90uZye+VbORGDSc5VydFjtbo0vdW2rBvL/Xg31gUJL4m L1puIjtZeSwzW2MkvUhnMLXKoC+l0bgnqcNscWKfZUfCmHVb/Drblrid9k1x p+wb4x/YNSV+tmhOBqOWFNBrSQXtljTQmg+EYA3iGORXJp08KKLI7xVM5Eot 9v034HsXm8TJ/kYt+kydJdumKlf+NWX+YuPFEbKjBQnKQ7kZGn3Z+TrdWWUG XRl1xu1pbeatqT2WTSnLbOqTp+xqk7c7VCcfc6xMvudQnfrRsiYdTGozwKAu E3QWAmGYvyRQ5EMOIXdKsd+7hkHONzCT0y2s5HCrKNndokHb0mTOuq7OmW+i 2ld0tDxMZrAkTqm3KFV9cUGOTnteiUFrTrVxU3azeX3mYquajCHbyvTV9mXp WxxL0g87FqffcizNfG9dlg2m5TlgWJELupULgAj03cmEPEbvfbMC/U49nZxq YSJHF+G5Ax1CZHu7Km1DmynL6iZH3uX13qKDNSHSvZUxil1lyeqLSrK0m4sK 9esLK41r8hvNKvM6rcpyB2yLc8btC7I3OeZlH3TKzb7hlJ/71qYgH8yKCsCo uBD0FgJRc3OBkPvo+a5WYc857v8/uohBDnTi2YeLBcjmxcrUmk4jlhWL7LmH mz2FexuCpLrqohTbqhPVmioztOrK8/WrSsuMykvqzYqL2y0LivpscwtX2GcV bHTMKJh1Si+45pRZ+No2u/iXeU4JGOeVgj6iNx+IoZHPmdh7UIK9B7j+f6KV Igc7ce2/G3sPevnI+l4FaqLbgHlZly1XX7u70OLWAMm25gj5xoZ41dq6NK3K mly90uoSo8LKWtO8ijbL7PJem4yy5fappesdk0v3OiWWXnJKLntlm1rx0zy9 AowzKkF/IRBHyDOcCzfQd55txL0H6L/3dlNkex++A2GAm6wekKOW9+sxDfRa cy5Z4iq4qMtPorE9TK6mLValoiVFo6QpW7egscgwp77KJKOuxSK1tts6qWaZ XXz1WofY6t2OMdUXHGNrXtjG1/4wT6wF46Q6MEiuA/35QCIhD3EuXEH/f6IF vfdi9L7of6exD2ByhJOsWCZNhka0GT1DFuzt/c78TUt9xGq6Q2TKF0crFXUl qed1ZGpnLSrQT2urME5ubTSLb15sFdM0bBPZtMYuvGmnfVjTWfvwpmc2kc3f zaObwTimBfQX8jMV8wfMYc6h9z3cge+AQO+3GfXXYA4xhvuDhlaKk94VGvSO MVPWplEH3pphT5GywUCpwoFI+dy+BJWM3nTNlJ483cTuMoPYxfUmkV2d5mGd Q1YhnZM2gZ0ztgGdZ2wDO59aBXd+MwvpBKOwLtBH9ObzMgvrgM/DSRyDWfTf 2wfR+6H+SswhBiYZpHtKiHRMqdCaJo2Ya1bZcpWNuwsWrPAXzx4Lk0kbjVVM WpaiGjeSoxk9XKIbPlhrEDzQbhwwMGDm17/awqd/u6V3/ynkiblP/1djv34w 8O8H3YU8wjpcrP3PGOzqx/V/9J8TqD+EHrhrI/offFdsw7Q8VbVRj1GywYo9 f50Lb+ZaH+GUNSESCVPRMjGTSYoRq7JUQlcVaQRO1Gj7jbfpea/sN/RYucrY beV2Y9eVJ01cVzw2clvxVd99DHQ9xkAb0ZrPrTLMoZoJ2deD/n8Y5wBmAMtQ vxtzkOat+C6KGS5SNiNFimY0aTk7zJjTtztwJG3z5IvdGigcuSVCPHRzgnTQ pgw5v00FSt7TVaoeG1vVXTf2aTltnNB23LhNx2HjSR37DY91HNZ/1XJcDxqO 60BtIZdwDA5hHrcDa7B2DP035jC9qN86p78LewDwjJTsA0Ik/YAylXzAgB63 34Ylar8rR9isH0/QbJiA375YEe99qeIee/OkXPdWyDjtaZG337NU0XbPuLL1 nm3KVntOIk+UrXZ9VbLaCYpWM6CwkBOtOA/xOdgwNwcwA+jHDGAR6tfsxh6I AxRJxTNSY09zk+jTUiTitCYVctqUHnjagcn3tCer16kgDvdTUdwup5L5HE/l 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 pMOUedEiB87GFk/+mqYg0fLGSKni+gS5gtp0pZyaPLXM6jLN1Kp6naTKDv34 ikGjmPJVJlHl20wjy0+YRZY/NImu+KIfUwHasZWgEVcJavP5GI85ED4PZ8tx DBqw978Ne9+70Peg/xrtYSYDvSKku1eVau8xZmpaYsdR0+XOh9ughIsWhUvk tcbJZLWkKqQ356gkN5ZoJDTUasfWL9KLqus3DK+bMA6t3WoSXHsM+dM4tO6z XlgdaEXUgzqiNp8XyYT8hnU4MTcPWrD/AfXX9uDaL3rQ/kGKLBkSIIuGFKmm QX1GTb81W9lSV+7CXl/BnO4QMTy+Wiq1K0kusTNLKbajSDWqvVojfFGrdkjb Ur3AtpUG/q2bDf1ajxj5tt439G/9pBvQCpqBraAW1Aqq83mUgXXAuXh4bgxw /Dei/gTmEMPDmD8sx/XfMV7SMCZLqsd0aKWjFiwFy5w4s0e8+NKGgoSTBiPF 4wYSpKP70+Ui+vKVQpZWqgb2Nmv49fRoe/es0PXs2aTn0XNYz737rp5n90ct r25Q914CqojyfG7j83CqCscAa7AV9acGsAbogXvHMH9AH149yUnKJyVI0aQ6 lTtpwshcbceWMuHOlTDuzx+zMkw4YmWcWOiKVKnAsVxZv+XlCt6jjcoeo91q rsuWqzsvm9Z0WnYIuaPhNPJBzXkYVFyGQQlRnM/VEhyDRszBFuMeELz/lZjD 9KMHbcccogZ9eOE0E8nZJEgyNymS1E36tMRpK6aYjc5sERt8uEI3BPMFro8W 9FuXLOK9LlvcY22plOvaBlmnNYvlHdaMKtqt2ahku+agks2aO0o2kx8UbFeD PCJnuwpk53Ma58HedpyHWP9VeP9D6MG70IPWb0D/hT48fQb3AeziJnG7pEj0 Lk0qfJcpLWSXPVPALg9W350BHF47I7jdZxJ4XWYyBBx3FAnb76gTtdnRJW61 Y5mkxY4NkuY7DkqZ7bgjabbtg6TZVpA02wISZpv/ziH8u2B7L9YA678M7797 CnsgNmIPwDY8ixJ9aPwsRYIPs5CAI4LE/4gC8T2qS3kdtaC5H3Wiuxz1ZnI6 GsJifySGzfZIKofVkXwuiyPVPKZHOviMj4zwGx1ZL2Bw5CByV8Dg0EcB/YMg qH8ABPX2/51dS7AGQ3M5IM4B1G9BD1yxHd9Huhfv/yDuwzhGEa/TTMTxAidx uChC7C8qEduL+sTmkhVldcmFsrjkSzO7HEY3vpzAMLyczaR/uZxF93Irq/bl QTatK2vZNK/sZ9e8codN49J7dvULvzjUzgOn2jngms/0IPYB4fzrx/FvQ/1K HPucWdQ/QkjISfTg5zADuEwnZjfYiNEdXmJ4R4Lo31Uhevf0ie49K6J934Vo 3felNO6HU+p/JtFU/8yjKT+ooSs9WExXeLiSIf9wO0Pu4TmG7IMXDNn73xky 94BJ5u7fWYXP3yDOv3bUr0L93P2ofxzP4sQcwuMiIbbXsA8BswAdfGeu1kte ovFKlKi9kicqrzWI0mtDovDGksi9cSIyb72J1LtQSuJdIiX2Po8SfV9HiXzo oQl9WE0T/LiHJvDxOk3gw2sa/7sfNP438DeG8fnrxPrXoH7eAdQ/gfrnCXG7 QojVTUIM7mD+8Cchyh+YiOJ3LiKH+3Okf0oQyZ/yROyXGhH5pYe9EGYENwRg JuCOOUQQ5hBxBF8killELWYRvRQbZg+ssAcziavIc4oZPv2NxTj/a1E/f04f M6hgzIBcfyPE4hYhuvdR+xHmD28I9l4QzD3YMPfgxgxCAPXEMIOQxgxCETMI DcIG+oQZLAgu2GPe4IPgD0PAvwDnDgMCnHQwgeBEAxxkuP436nfMZYC4D2hO H+/d5XdCzO8Sov0Q84+nhIi/JEToJ8GsheA90vAe2VCTC3MPXsLAa6EwCyF4 LQSvheC1EDBArBA3JBhJRkoR/EEI+PDDGgQf+nmAEuYPqmoUqCGqmhQo6FMg bUEDcRcaiATRQSieDgK5dOCvRFqQbmQIWYFMIRvpwLcd2YscRc4jd5DnNOD/ hPxC4P/NnL4Gem1NRGPuOnQokDelgawjDaT86SARQwfRTDqIlDFApBHpQvoZ IDyKrELWIVuQXchBOgifRn5HnuD/8wH5Sf8hArTvIkCf49v/AqijtjZ6bR3M AHQwi5jLZdQxD1Kxo4GiNx3kI+ggm8oA6UIGSNUii5AezHeGkZXIFLIR2Y7/ fhY5gVxl/JJ6xPgu9Y7xWfo7/aM0MD4g7/+Ld/g5H9BGbX302oaYARhgH4Y+ XpM+1kPHmgaa7nRQD6GDSiIDlHOZQKkCc6EmpIsZFPuRUWQCWcf8U3EL8w/F 3czfFY8wf1W8wPxJ8U/md4pvmF4pfWN6qQTMzxE8uZb56f8C6KO2MXptUzEE cwBzHBMzzMlMzTFmc8ZMyJ8BujEM0M5gAq1i5p+atSzfNNtYvmp0s3zWGGL9 qDHG+kFjkvW9xkbWtxo7WN9oHGB9pXGG9bnGHdbHmq9YH2h+Y72vCWx3kdua wDrHrQWAkTgBc/TaVui/bTAHsJNBcF7YGlJghfUw96L/MA1n+mKcxPzBKI/l rWEF62uDRraXBp1sz/WXsj/VH2F/oj/O8Uh/HccD/a2cf+rv5bynf5Lzjv4f nDf1X3BdM/jCdRmbvC4aAOd55JwhcJxdAJihvjXmD3bo/52wB8AVx8RVETMJ HeqXowXts70L/a1NINML61jmJ5YZrA8titnuW9Rw3DVv5bxltoTrd7MB7hum y3mum07yXjWd5rtsupPvoukR/vOmV/hPmz7hP2H2mf+oGfAdNgfeQ+bAc9Ac uA8sAKxQ1x69tzN637kcwhuvyUeG/PRWoz54GlIvXO1oj1y8GXedIph/d0xm u26fy3nZroz7gm097znbRXynbboFTtkMCZ6wXiF0zHqN8BHrLSKHrPeJHLQ+ IzprfV90j/U7kZ02ILzDFgS324LANjvgQ3jnA7ao64zZgwf6fz+8jrl+jEBR 8j5Qnjz116Lu+VpQN33c6Je9gljOesRynHRL5z7mWsB32KVC4IBzg9CsU7vI Xqde0d2Ow2I7HcbFdzisl9juMCO51eGo1GaHG9IbHV5KrXf6Ib7WCUTXOIMw IjTlAgLzAUfMPdxxvdkXfWcQXkcoF/kcxkeehYqSOyGK5GqIEXU2yJFxPNCX 9ZB/BOesbxLvbu8sgRmvYuHtnlWiWzyaxDe5d0psdOuTWu82Kr0Wz3Sect0s t9p1Vn6V6wX5la5P5Fe4fZEe8wCJ5R4gNuoJIojwfMAFvb8Xev9AXO8NZ5Dn USzkcRS+8y8S8wfMhE5H6VJHIm0Ys+GerDtDQzi3BcfybQpME9wQkCey1q9U fMq3VnKVT4v0uM9i2RXeg3LLvVYqLPNarzjstUtpyPOkcr/nfeU+74/yS31A ZqkvSC71A3FEdD7gNjcGhHwPxbXWaEJuxdPJ9QQWchX78E/Hi5HDCZrU3ngL +vZYV9ZNUQGc6yIi+SbDE4UmQjNFV4QUSowGVUiNBDbIDgW2y/cH9Cou9R9V 6vGbUlnit021y++IWqffLfUO/3fK7YEg3x4E0u3BIImIzwc8GTgHCHmBP+bu oN+5iu2G51OZyBnck3E4RZjsSVWltqWY0jcmObGsSfDlnIgL4xuLiRMaiUoV HYzMlegLL5HuDauRWxLaotAVslipI2RIpS14Qq0leJN6U9ABjcbga5oNIa/V GkJ/KTaEgWxjOEgjkvPB5QbMYXAMYtDr4I+485gBnMB+jCMZTGRfJj/ZnqVE NmYa0afS7VlWpnhxLksK5htMiBZaGp8k2h2bKdEVUyjdEV0h1xbVoNgc2aHc GNGnWhe+Qr0mfINmVfhercrwC9oVES80KiN/KFdGgXxVNMggUvOZq8NH9N73 Egi5jPqnsvG7fi5FZvEcgBnsz5nOkydrcvVpK7NtmJdlunMMpAfw9qRGCHYl x4u2J6VJtCbkSjfFl8rVx9Uq1sa2KVfF9KhVRI9qlEav1SqO3qVdFH1WpzD6 qVZR7DeV4jhQKIkHWUR6PnNLHXN1+GNuDLLQ++fjmnMhei5s/9xcyE3WFsmQ 8UId2rJ8K6aBXBf27mw/ns7MMMG29FiRprQUifrUbOma5CK5qqQqxfLEZpWS hCVqRQkjmvnxU9q58TM6OfGndLLjH2nnJH5VzU0CxbxkkENk5gOBhDzBOvwr Dc89yEXfW4TrnfiVYyuyHs/nXFUmRZaXalEDJeZMPUVO7B353tytucECjTnR IrVZieJVmRlS5RkFsiXpFQqFaQ3K+amdajkpQ5qZyau105O36aQlH9dNTX6g k576WS0jDZQy00A+Mx1k5zM3Fx7gXLycScjxAhwD1N5Rgb6zEvd9V7KTsSpx MlSpTvVWmDI6yxzYWks8uRuKAvlrCiKEK/LjxUpz06SKcnJl87NLFXKy6pQz M9vV0jMHNFMyJrSTMrbqJGYc1Y3PuKeTmPlJPTkLlBGFlGyQnc8nnAt3k7AO 6P8PF+MYoPaWGvTetei9a1nIEO4XW1qnSnXVGtFbq+1YGyrduarL/fnKS8OE iktixQqKUyRzC7NlsgqKFdLza5RT8trUEvP6NOJzV2rF5m7Wic49rBOVe0cn Ju+jemwergrlg0J8PsjO5/XcXJirA86D/eU4Bqi9Ef3nqib03k10srRJkHQ1 K1FtjQb0hgZrluo6V46yGl/eouoQwbyqaNHsiiSJjPJM6dSyQvmk0iql+JIW 1ZjiXvXI4jHN8KJp7bCig9qhRbe0w4rfq0cUg3JkCSggsvN5Fos5ENbhGI7B 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 lT+OAd7/hTj0veh5DiSh50qgkW3xPGRDgiyZTNClVsRb0UfiXJn7Y/zYe6LD uBZHxvF1RKQKtIXnCDeHFYs2hlaL14e0SNaELJGpCh6Rqwieki8L3qFQEnxC sTj4gWJxyGeZklCQKAkDMUQEEf4L8MQ6BGO/ewzuvUDtQ6mon4Zrffi5MYWL TKZKkhWpWtRwijm9L8mJeUmCN3tHfAhXW1w0b3NMkkBDdKZwbVSBaHVkhXhF ZINUWUSnTHH4oFxh+CqF/PCtinnhR5Vywu8p5UZ8ks2LBMm8KBBHRBGRv/g5 NxfRe1/BrxsnUHcWvedMFn7Xxs+pDA6yIlOMjGSqU30ZJrQlaQ5M7amebC3J gZwNSRG8tQnxAlXxaULlcbmipXGl4kWxdVIFMe0yudH98tnR44qZ0ZuVMqIP KadF31ZOj/kgl4GH5WfEgUQmvrgPEf2Lj364ByUS64BjcCQDvX8O+p089BvI eA4rGckRIf25KmRJjhGtPduWqTnTjbU+3Z+zOi2MpyI1lr8kOVmwKDlbJD+p WDw3sVoqK6FVJiOhVz4tfoVicvy0UlL8AeXE+JvKiQnv5JMSQTo5ESRSEkEs JQlE/+LN3PM4VwccgwOoP1OAey/w69ckMlrARPoLBEl3oSJpL9CnNedbM+py XVircnw4yrJCuIszo/kKMhIFc9MzRbLSC8Qz0iolU1ObZZJTuuUTUpYrxiVv UIpNnlWOSbmOvJWPTQXpuFSQjE8FcUTsL17g83Bjrg44BvvwK9c2/Bq6rgzX vZGBEuw9KOUj7aVypLlUh6orsWBUFjmxlBZ6sRfmB3Hn5UXyZecmCGbkpAun ZueJJWeXSyZkNUrHZi6Wi85cphCZsU4pPGOvcljmFeXwzNcKEZkgE5kFklFZ II6I/cWTcMyBkrEOOAa7inEeoP+drMYxQLorsfe+koc0VUmTuiotqrLSjF5S 7sBcUObBllsawJlZEs6bVhwnkFyUKpxQmCMaV1AqEZ1fLx2R3ykbljcsH5K3 RjEob7dSYN5F5JV8cN4v6ZA8kETEQ/NA7C/+xK+c5/A5OIA12F6OOVgNzoN6 9H0NuO5ah73XdVykpl6cVNSrUcV1xrT8Olum7Bo31vRqX46UqhDuxMpovriK ZMHo8iyRiPJisbCyWsng0naZgNJBOb+SSXnfkp0KPiXnkRdyviU/pf1KQMK/ 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 +A7z8DZicB79P5KAGOBSvxWsx+c1+NmKaCVqiZlAS2KMqQ5+0MIYJ7Yq2ptX HhXEL42MFBZFJogKItJl8yLy5HPC54uzwmsUM8JalNPCulRTwobUksL2qSeG XdJICHusnhj+WiUxnFNMiuAkQAwUpDzGOHyEuJ9G3w9gybMjHTEA6+BHtONn zfESWpwwjmoTZtAC+EEVCQ5sabwHrygugF8QGy7IjY0VZcekyGbG5MinR5eI U6MXKiZHL1VOiFqlGh+1US02ao96TNQFjeioh+ox0b+rxERzSrHRnASI3yH1 BK9h/E8kwYOB9rYs5P7ZyPngR7QiHg3JCrQoRYuqUqbS/BQzKkmxZQqS3djc JF9+dlKoICMxWpSWmCSTkpAll5RQpJAQXy2Ji29Ujo7vVImM26AWEbdbPTz+ nEZY/DfYvlIJj+eUIuI5CRC/4w7G4VIcag/Q793Q3pyHfCMfzz5guyQD91wz UHuQoU6lGZOpKNOU8jOsmJwMZzYz3ZuXlh4sSEmLFCamJcjEp2bIxaYWKESn VEoiUxYrhSWvVAlJXq8anLxTPSj5jHpg8tfY/qoSlMwpBSdzEiB+x2cYh3OJ OB+g39uhPVj0xoNZgW1NDurO8axYcY4K5edOpJxcY8rMncek5zqyKTmevMSc AH58drgwNjtOFJWVJhuRlScfllUuDsmsVwzMXKHsn9Gn6pexXc0n8xS4o+aT 8YuKbwanCCR+GZz4HTcx76R+3N5cjEMxxmH+Gw+mBdtKtKMI5BQpUmaRLqUX T6eUYgtKLLZj4ovd2JgiP15UUaggojBGGFqYIhNckCMXWFCq4JdfK/HJb1Py yl+n7JE3ouKef0LVLf9LFfe8l8rueZyiRx4n8cjlxO+4ivl/DHNgN7Q2Yenb W/3Gg2nEtqwC+vhZWrkCJVVoUkKFAcVVzqLoSmsmstKZDa/wZkMqgvhB5ZGC gPJEke/8TBnv+cVynmULFdzKWiQuZWsVncu2KTmWHQOfKTmWvlB0LOUkTiVY oZVwCu+Q1qYdxBiMoN8bF2Au1rzxYOrqkHvXQh9/jsP3KEfVqFJE7SQKqzWi kLq5FFRrzwTUurN+tf6sT00Yz6smTuBeky50XVQo47yoWtZh0VJ5u4VdCrYL t4itFx6RWC/6RGy94LnYuppTAPLWVf9wCjHYUwr/Afp90O1YjNy3EfUHTah/ B4kgrImhwKUS8l+qQ37NU8mnGe/BbLYmz2Znxr3Zm3FtDmadm6N5jktT+HZL 8wQ2SyuEVk2NMvOaVsvOadosZ9F0WM686WM588afZM2XcLLmi0HDPxwuxDmh CjGoRwyg19aC3G+ZtA4Guc8K5D7tuP+7Es9AdMiRa4cquXROJKdOQ3LstCCH Tjuy63Qjm04/xroznLHsTGDndmbxLDrLeGYdDfxZHZ2CmR1DQpOOg0Ljjo+E xiufCY1WcEKj5aCNE71jL8Z8C/R7l2IeQLsJmu88mKQuxGAt8v91RA69DFn1 SWhenybN7dcni35jMu+fQ2b99jS734NmrQ+kmeujyWR9KmO0voiZ0V/DTutv Z6f2D7AG/fvZyf3X2cl9P/Imr/ubp9/D8fXX/sN2xH8D9Fej360dOB7XYB70 YB4gVY7aAA8GKaLzEGoQNiMH3CqgGdsUafo2LZo2rE9Th41pyvAcMhh2oMnD nqQ/EkJ6I/E0aSSbJoxU0viRVho30kc6I6OkPXKFtId/YLS3/sVobeFYrc3/ sKkZvjRivmIVzonoc1k/xmAjagCgGbgNz0Fsx3MYO5ED70YOvhd1AKhJ0T6o SFoHNUnzoB5pHDQkddSlqB2yJ9VDXqRyKJRUDieT8uEiUjrcQIqHu0hyeDuJ D58j8aHHJDnwB0n2cyTZ9w+9iH0HvK9GxLsS/c6BdvwIPKBd8ID24F0Q8ANM D+I5kCPwAOALqJ9CHnxWSPIXJCR3Xp1kz08gmfPTSXQe76C4YEeCC14Az4Bc wDMgF8qJudCKwlDs+PwBbG9i+wz8Cbj/sBqxb+59U4eTh34nQjtkH/QPQf8o 4n8CHsBp1CGcw3MgF+FBXCH4KQwxqEmhG0pAAxe9CSi6m4aF0GwsCG1xIfbC TRksRj7JAgsABvmTLeAkuAdegL8B2gGWYdwXYbwL0Pck9Dv0MPTRXyvomkBX H7raH8B/uQ4PAt0Q3Ca88Ap8yYPfgnbcUcRiWA0P4+piUW4AT2QmFmbW8CnQ jie4GD7JwYIdk+7bbrADwFz59j74GfwyRu0mnI/xVymIedgx6XNQ0L+A52DQ 30nQ1YCu4ifou1T3LvgGPASPwRMGC3IRFqRi+C3K8Fe0sEDWgxdiBH/CEl6I J/yJaCQOuAC+Xgww4K8R6NcQef05wA5BKeZbGoYqHDH3hLYV+mx0A/7TLfg/ +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 oQzfQQwPQoRaCBb+A00CJsAaeEAzBHrx6E8mdAoR3Qr4HjWYGkugswy+Rwd0 uqGxHvvfjOmzE77HIUzh8/A8PqNbaNVN7OUj7O1DcP1fcJrwH9RkEAsBfA/4 IArwYkSIBTMV8bVAP52g6Qe9SGglQycbbS/G4VEJm7IWCo3QacPh2gmNHmgM wH0ZRgT2YkacpAs4mM+jpWcxHqehfQq+y0nef8ONg/+gSWgHUEU7lBEPiRr9 LjeRfhIaw3Oxons8d1iiQfQJP4Zu8lPpQ0EuXRWU0BVBFV0S1NEFQROdFy6n s6iNOY3amJPCzXRcuJuOio7RYZlrdEjuIe2Xf0V7xagcArulSDja9ZaxVw2P gz54jUP7Fw0B/Bcxal3U6b48ajDkZ9MNBXv6QOxNF8VhdE4ST6cl6XRSkkfH JaV0VLGaDivW00GlFjqgtJL2KfXQHqVB2q28g3YpH6EdyldoWOUhbVF7RZvU ORoEG/8FvvYJXhAO9cmweHFquYfD+kttAX2hpEA3lLXpEp4ZO6M+j45ruNJh TX/arxlBe7USabdWBu3Uyqft2mU0or2Atmkvpq06y2izzioa0umnwXFbaWDc Plqve576de9Sz/gXTPcEjukCayZyzOr3wNdxjZW4PTLBadAUp3Js8ZosujhR hk6jXunIBH3aN3E27ZpkRyN6nrRVP5g260fT4ORkGpicRRsmF1D/5HLqnbyI 1k1upLUGK5gug7XMGoNBZpXBbqZjyklm5ZRPmOVTnzHLpnFsK2gBzW9gsGVe z8Bpbxbs77m43FjiXuc8XN7MsNY2Ymn/FAntnDaets4woiFDS9oAL6bPyJd6 jMKo2yiW1hil0CqjbKbDqIhpN65gVhjXMW3GLUyr8Sq2xXg9u9R4hG00PsIu MbnOa5j5Ha9u5p+82pkcW/OWRdhKeYnT6QPo3rRDvuWAnA/ss4X/MAf5t6k8 DeJ5rf7ZU2mtmTmtMbOnDtTFtJsHUpt5JLWaxzPN5mlMk3ku02hewiw2X8DW my9ha81X8GrMe3gLzbfwFpjv51eZX+ZXWjzil8/5nT9/Dscr+xc/mSMG0L/i gv67wf9wxxoXnzfjZxvmCmntXFVaZalH7VYzaZmVFTVbuVCTlS8ttgph6q2i mVqrJGaRVSa7wKqArbIqZyutannlVq38Mqs1/FKrQUGx1aigyOqcsMD6vjDf +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 tMj/vBb639CCgLc1L/BLzQlkt1sQMI638WkEl4AELmGp6A/p6B8c701kfRdN zhXM/gs/B20L8NbmwHBtCErS2uAcrQ4u0Yrgai0LadLSkE4tDunVwpBBLQid qXmhCzU3dLWGw7ZpVthBzQw7qxnh1zU9/A3T1Ii/mKZE3jRNvgP0mMngwzgu e2lcgrO5vOeyxgbHM8m9meZ34JtN4TZaG+6mlRFBWoYWszgqXQuj8jU/qlxz o+s0HN2i2dFdmhk9UdOjp2pazBxNiVmuyTGbNRi7zzQp9rRpIO5hU3/cK6YJ 8Z+Z+uJ/BDd/QtxN029SuPWRM6LBXChmqQMOFpDrZBn6B+u7OAst4ZnGC+P8 NDc+UsMJyZqVkK0ZCcWallilKYmNGkps12BijwYSB9WfNEsTkharL2m9qTdp l6k7+aRpfPJlU1fKi6ZxKZ+YOlP/DW6aOlN+wq8yWHbAeaWUGKhgDMDeMnJO PluDbxanjtbcZAfNSvHS9JRQTUmN11Bquial5as/rUwT02rVl9ai3rQudaf3 a3z6NHWlLzB1pq8xdWTsMLVlHDO1Zlwya8l8zqw58w9mzVnfmZozb5qagHE0 8Do+uFHCkqqS5V8Na2xwdzV1ztixHDvmYsf0DFtNznTXpMwg9WdFqy8rRT1Z OerOKlZXVpXGZTeoI7tD7dl9asuerNacuabmnJWmppxtpobcI6b63AtmdXnP mNXmfQi+BTdNt5DLEbwMz3X6fqGWpWYDcdDIGreeXAc7FuObmXw/yO9KTcx1 UW+un8bnRWhcXqI68jLUnleg1vwyteTXqjm/VU0F3WooGFR9wWxTXcEyU03h FlN14SGzqsLzZpVFT5pVFP0OfANuGjBVFI7gBXxwFb5z8B9rYRzAVpZfq3g/ v4paY/wxochC4wsd1VnkrfaiULUWxam5KFWNRbmqLypWfXG16oqbVFsyTtUl /aoqmWmqLF1iKi/dZCorPWBWWnbOrKTsCbPisvfAP8FNA6bi0hE8U86yl36f gftIO7l/B7EIVrRyv5fPB7FjfNkYtZfZq6XMQ41lQaovi1ZdWbJqyrNUXV6o qvJKVVY0qKKiQ+UVE1RaOV0llYtMRZUbTIWV+0wFVWfN8qseN8urftcsr+of 4KZZXuVNU/5tPAHHpSbmI3gPdnE+dKMDjWet30m+hT8mYkd7jUmNVbaqq3JV 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 i9nHubqbWpCdxMZ2YvQu7NhCfGwiTjdgx3rsWMu4sPOC9pcwKuuokNnBbrIj WHU/StHj7B56myhmHwg2GDDOcAMfc6l53Z1SPE/yTnC/64gMfxTb9pus6JsT /WIPCPrYesXDk05f8vB4KTzV8DTC085Z2s1IDGieaZrmmOZpttlKzTTbqumj DmjaqDOaMvoRTR7zhobGfqFBix81aMnTf27D0GCeD0D/CebSA07y+qA3aysX Lq92JmpZbLVqtIuWmftp8dgILbBI0DyLDM2xzNdsy1LNsqrRDKsmTbfq0FTr Xk22HtKQ9WxNslmifpuNmmizV322p9Vre009tm9ovN1fNN6eJxCxN+gOXg/k chOB/6PJdcAhLne7QljX+LME8WBd4ThG823tNcyznWfaBWqaXZSm2CdpyCFT kxwKNOBQpn6HWk1waFav4zj1OE7UeEf2YPC8lk6ntepw2qU251NqpQiyxflV Nbt8oSaekdvkBowjeBH+a3GMfxKXeLCXqf0uLjOU6WoJ9s3BT9OcrTXk7KwB fmtrgkuoel1j1e2aovGu2epyK1KnW4U63OrV5t6mVvceNbsPqcljjho8Vqre c7vqvI6rxutBVXu/BD5Tlc+PgNn3Np6B73IKt1jS8UEGyx6OG3m/PJ7lHz6Z zvgM+IxFz3FQl5eHOr0D1e4dqVbvBLX4pKvJJ1eNPiWq92X/gy/7H3zZ/+DH /ge0mEr/ZSr336qygCMqDXxAJYHPqzjoE/AD4Ne5buMGfb8I98kcYjCPZVYu Psgi32MZNCuBPCOKa3uImdoDbNUS4KLGAF/VB4aqLpBnHwQmqzooS5VBBaoI Kld5UJ3KgttVEtyn4pBpKgpZrMLQTcoPO6i8sPPKDX8GfKzciO8BdwXCR2Do QPfDe6yAfK+I3B+symd9y7J0Ot9NxI5O7GgMtVZtqKOqQz1VGRqo8rAIlYbF qyQsTcVhuSoKL1FheLXyI1qUF9Gt3MgpyolcoOyoDcqM3q+M6HNKj2HXXcwH 4FvALlWQAa7S57PwHymh5p9L/EawnNdz+WwydvRiRysxUhM9VuWR9iqNclNx lJ8Ko0KVHxWjvOhk5UZnKie6UNkxFcqKaVRmbJcy4gaVFjdXqfFrlRK/V8kJ Z5WU8IQSE38H/qWkRGoPErgyg8v4/zScBytY+laR74GlleQZpdQeYEcXdjRh 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 ------=_NextPart_000_00EB_01C2A9A6.320815FA-- From david@fromorbit.com Thu May 23 01:38:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0B91A7F37 for ; Thu, 23 May 2013 01:38:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D25648F8033 for ; Wed, 22 May 2013 23:38:42 -0700 (PDT) X-ASG-Debug-ID: 1369291117-04bdf078167d720001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id trJtAwhyIQAOoj6U for ; Wed, 22 May 2013 23:38:37 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqYNANq4nVF5LBBG/2dsb2JhbABagwi9KIUkBAGBCBd0giMBAQUnExwjEAgDGAklDwUlAyETiAy7DBaNTR2BHQeDVAOTZ4NQkUGDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl6.internode.on.net with ESMTP; 23 May 2013 16:08:37 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfPAZ-0006rD-1K; Thu, 23 May 2013 16:38:35 +1000 Date: Thu, 23 May 2013 16:38:35 +1000 From: Dave Chinner To: "Michael L. Semon" Cc: xfs@oss.sgi.com Subject: Re: Lockdep message on 3.9.3 (already fixed?)... Message-ID: <20130523063834.GZ24543@dastard> X-ASG-Orig-Subj: Re: Lockdep message on 3.9.3 (already fixed?)... References: <519B9EF5.5060809@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519B9EF5.5060809@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369291117 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131769 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Tue, May 21, 2013 at 12:21:09PM -0400, Michael L. Semon wrote: > Hi! I'm beginning to lose track of lockdep messages and feel like a > new message is sneaking in there. > > This lockdep comes from kernel 3.9.3, which I was asked to use in > order to gather DRM info. The PC was booted to a console and left > to do a long 24kB/s download and default distro cron duties (slocate > and such), in hopes that console inactivity, console blanking, and > monitor sleep would kick up a soft oops from DRM like it does on > 3.10.0-rc. > > This may also apply to the devel kernels, but the PC needs to be > left alone for me to verify this. > > I've read the Dave Chinner position on stable kernels but don't know > if they apply to the first stable kernel out of > mainline...especially because that kernel has a lifespan of a > housefly nowadays... > > As always, thanks for reading! > > Michael > > ================================= > [ INFO: inconsistent lock state ] > 3.9.3 #1 Not tainted > --------------------------------- > inconsistent {RECLAIM_FS-ON-R} -> {IN-RECLAIM_FS-W} usage. > kswapd0/18 [HC0[0]:SC0[0]:HE1:SE1] takes: > (&(&ip->i_lock)->mr_lock){++++-?}, at: [] xfs_ilock+0xff/0x15e > {RECLAIM_FS-ON-R} state was registered at: > [] mark_held_locks+0x80/0xcb > [] lockdep_trace_alloc+0x59/0x9d > [] __alloc_pages_nodemask+0x70/0x6f2 > [] __get_free_pages+0x1c/0x3d > [] pte_alloc_one_kernel+0x14/0x16 > [] __pte_alloc_kernel+0x16/0x71 > [] vmap_page_range_noflush+0x12e/0x13c > [] vm_map_ram+0x3b9/0x46c > [] _xfs_buf_map_pages+0x5b/0xe7 > [] xfs_buf_get_map+0x67/0x13a > [] xfs_buf_read_map+0x1f/0xc0 > [] xfs_buf_readahead_map+0x47/0x57 > [] xfs_da_reada_buf+0xaf/0xbd > [] xfs_dir2_data_readahead+0x2f/0x36 Known issue. vm_map_ram() won't let us pass GFP_NOFS, so it does GFP_KERNEL allocations in places that cause lockdep to go nuts. This one here is not going to deadlock, but there are other cases where it potentially could... The VM folk refuse to allow us to pass gfp flags, so we're stuck we're stuck with this lockdep noise. Cheers, Dave. -- Dave Chinner david@fromorbit.com From info@sparkasseonline.de Thu May 23 03:01:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=PLING_QUERY,T_FRT_CLICK autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 547EE7F37 for ; Thu, 23 May 2013 03:01:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 273A4304032 for ; Thu, 23 May 2013 01:01:18 -0700 (PDT) X-ASG-Debug-ID: 1369296075-04bdf0781781420001-w1Z2WR Received: from pmx.stpeter.com.ph (pmx.stpeter.com.ph [124.106.103.116]) by cuda.sgi.com with ESMTP id UfNKvD9JE6Cf6YGb for ; Thu, 23 May 2013 01:01:16 -0700 (PDT) X-Barracuda-Envelope-From: info@sparkasseonline.de X-Barracuda-Apparent-Source-IP: 124.106.103.116 Received: from pmx.stpeter.com.ph (pmx.stpeter.com.ph [127.0.0.1]) by localhost (Postfix) with SMTP id 903343988D4; Thu, 23 May 2013 15:51:59 +0800 (PHT) Received: from 192.168.1.6 (unknown [192.168.1.8]) by pmx.stpeter.com.ph (Postfix) with ESMTP id 9FB65398481; Thu, 23 May 2013 15:51:58 +0800 (PHT) Received: from ip153-83-211-87.adsl2.static.versatel.nl (ip153-83-211-87.adsl2.static.versatel.nl [87.211.83.153]) by webmail.stpeter.com.ph (Horde Framework) with HTTP; Thu, 23 May 2013 16:10:43 +0800 Message-ID: <20130523161043.7993496vc2jbzfac@webmail.stpeter.com.ph> Date: Thu, 23 May 2013 16:10:43 +0800 From: Sparkasse To: undisclosed-recipients:; Subject: =?iso-8859-1?b?S29udG9iZXN05HRpZ3VuZyE/?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?iso-8859-1?b?S29udG9iZXN05HRpZ3VuZyE/?= Content-Type: text/plain; charset=ISO-8859-1; DelSp="Yes"; format="flowed" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable User-Agent: Internet Messaging Program (IMP) H3 (4.3) X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2013.5.23.75116 X-PerlMx-Spam: Gauge=IIIIIIIII, Probability=9%, Report=' MULTIPLE_RCPTS 0.1, FROM_NAME_ONE_WORD 0.05, HTML_00_01 0.05, HTML_00_10 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_1400_1499 0, BODY_SIZE_2000_LESS 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, RDNS_GENERIC_BROADBAND 0, RDNS_GENERIC_POOLED 0, RDNS_SUSP 0, RDNS_SUSP_GENERIC 0, TO_UNDISCLOSED_RECIPIENTS 0, WEBMAIL_SOURCE 0, WEBMAIL_USER_AGENT 0, __ANY_URI 0, __CD 0, __CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __DATE_TZ_HK 0, __HAS_FROM 0, __HAS_MSGID 0, __LINES_OF_YELLING 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __PHISH_SPEAR_HTTP_RECEIVED 0, __PHISH_SPEAR_STRUCTURE_1 0, __PHISH_SPEAR_STRUCTURE_2 0, __SANE_MSGID 0, __SUBJ_HIGHBIT 0, __TO_MALFORMED_3 0, __URI_NO_MAILTO 0, __URI_NO_WWW 0, __USER_AGENT 0' X-Barracuda-Connect: pmx.stpeter.com.ph[124.106.103.116] X-Barracuda-Start-Time: 1369296076 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.33 X-Barracuda-Spam-Status: No, SCORE=1.33 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=PLING_QUERY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131775 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.33 PLING_QUERY Subject has exclamation mark and question mark --=20 Sehr geehrter Kunde, Bitte beachten Sie, dass Ihr Online-Zugang zu Ihrem Konto in K=FCrze =20 abl=E4uft. F=FCr diesen Dienst ohne Unterbrechung fortzusetzen, klicken =20 Sie auf das Symbol unten f=FCr eine manuelle Aktualisierung Ihres Kontos. http://texmir.com.ua/media/update/sparkasse Nach Abschluss der Anweisungen zum Konto zu aktualisieren, wird Ihr =20 Online-Zugang zu Ihrem Konto automatisch wiederhergestellt werden und =20 keine weitere Aktion wird von Ihnen verlangt werden. Sie werden durch =20 der konto-abteilung f=FCr weitere Informationen zum status ihres kontos =20 kontakiert. Beim Online-Banking haben Sie per Klick alles im Griff. Mit dem komfortablen Online-Banking haben Sie schnellen und =20 problemlosen Zugang zu Ihrem Girokonto. Beim Online-Banking erledigen =20 Sie =DCberweisungen und Dauerauftr=E4ge bequem per Mausklick. =20 Online-Banking bietet aber noch viel mehr DIE VORTEILE VON ONLINE-BANKING AUF EINEN BLICK: =D8 Kontozugang rund um die Uhr =D8 Schneller Zugriff aufs Girokonto =D8 Online-Banking bequem vom PC aus =D8 Flexibel in jedem Winkel der Welt =D8 =DCbersichtliche Kontof=FChrung =D8 Hohe Sicherheitsstandards beim Online-Banking =D8 Online-Banking kombinierbar mit Telefon-Banking Respektvoll, Kundendienst. ---------------------------------------------------------------- St. Peter Life Plan, Inc. - Email Facilities From info@jeftinaputovanja.rs Thu May 23 05:21:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_IMAGE_RATIO_06, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 612CA7F37 for ; Thu, 23 May 2013 05:21:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 04EF3304059 for ; Thu, 23 May 2013 03:21:21 -0700 (PDT) X-ASG-Debug-ID: 1369304475-04bdf063bd30dd0001-NocioJ Received: from server.cdftravel.gr (static.78-47-220-75.clients.your-server.de [78.47.220.75]) by cuda.sgi.com with ESMTP id eaE3C79UZ5sAKCyQ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 May 2013 03:21:16 -0700 (PDT) X-Barracuda-Envelope-From: info@jeftinaputovanja.rs X-Barracuda-Apparent-Source-IP: 78.47.220.75 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=jeftinaputovanja.rs; s=default; h=Content-Type:MIME-Version:Message-ID:Subject:Reply-To:From:To:Date; bh=5QrzK+cAmXDZgPwXpE/iEN30XnNvvkCId7hzp7XsO90=; b=wfDDZu2guQGo2s7jAXyB6UlLKoXc6ApkHYYyjDjwRoVikdmrXXaPamiL+ClATcaILcXgaq2N/K0Pk72y3SuleFmt30Hu+CZmbwXKuDkkb/fgTys0p/3TJB5J+1Ucsv1+jNJu8i0h8jk+iwX+/8fk/fKoG/sqZ9R+OLP3tziS7Rg=; Received: from [78.47.220.75] (port=48394 helo=jeftinaputovanja.rs) by server.cdftravel.gr with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80) (envelope-from ) id 1UfSjf-0005nv-EZ for xfs@oss.sgi.com; Thu, 23 May 2013 06:27:03 -0400 Date: Thu, 23 May 2013 06:27:03 -0400 To: Xfs From: Jeftina putovanja Reply-To: Jeftina putovanja Subject: =?utf-8?Q?7_dana_na_Tasosu_(Jun,Jul)_sme=C5=A1taj_sa_ishranom_od_118?= =?utf-8?Q?=E2=82=AC_po_osobi_i_druge_ponude?= Message-ID: X-ASG-Orig-Subj: =?utf-8?Q?7_dana_na_Tasosu_(Jun,Jul)_sme=C5=A1taj_sa_ishranom_od_118?= =?utf-8?Q?=E2=82=AC_po_osobi_i_druge_ponude?= X-Priority: 3 X-Mailer: PHPMailer (phpmailer.sourceforge.net) [version 2.0.4] MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_36ea0634f5a8ba2a2a074548f70cbac0" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.cdftravel.gr X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - jeftinaputovanja.rs X-Get-Message-Sender-Via: server.cdftravel.gr: authenticated_id: info@jeftinaputovanja.rs X-Barracuda-Connect: static.78-47-220-75.clients.your-server.de[78.47.220.75] X-Barracuda-Start-Time: 1369304476 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.00 X-Barracuda-Spam-Status: No, SCORE=2.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC3_MV0164, DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_06, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131784 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_IMAGE_RATIO_06 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 2.00 BSF_SC3_MV0164 Custom rule MV0164 --b1_36ea0634f5a8ba2a2a074548f70cbac0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Ne možete da vidite sadržaj?Kliknite ovde ( http://jeftinaputovanja.rs/index.php?option=com_acymailing&ctrl=archive&task=view&mailid=11&key=a11c407bc42c16f2b71c67f6a140a06f&subid=46806-4cdccf5cf529e707ea6f73be8ec6852f ) Putovanja viÅ¡e nisu luksuz PoÅ¡tovani, I dalje nastavljamo sa dobrim ponudama. Ovaj put Vam predlažemo 4 grÄke destinacije idealne za letnji odmor! Ukoliko ne želite viÅ¡e da Vas obaveÅ¡tavamo putem e-maila o naÅ¡im ponudama, molimo potvrdite klikom na dugme "Ne želim, hvala" Ako Vam se dopadaju naÅ¡e ponude i želite da ih podelite sa svojim prijateljima http://jeftinaputovanja.rs/index.php?option=com_acymailing&ctrl=archive&task=forward&mailid=11&key=a11c407bc42c16f2b71c67f6a140a06f&subid=46806-4cdccf5cf529e707ea6f73be8ec6852f Ako želite da Vam redovno Å¡aljemo ponude na ovaj e-mail, molimo Vas da nam to potvrdite super PROMOCIJA i dalje traje...Prilikom rezervacije paketa dovoljno je samo da naglasite da ste putem ovog mail-a ostvarili pravo na popust i ukupna cena paketa će Vam biti umanjena za 10€. 7 ili 10 dana na Tasosu (Jun i Jul) smeÅ¡taj, doruÄak i veÄera 7 ili 10 dana na Halkidikiju - Neos Marmaras (Jun i Jul), prevoz i smeÅ¡taj od 118€ po osobi od 225€ po osobi 8 dana na Rodosu, 15-22 Jun, avion+takse+smeÅ¡taj 8 dana na Krfu (11-18 Jul), avion+takse+smeÅ¡taj 170€ po osobi 195€ po osobi Posetite naÅ¡u stranicu za joÅ¡ viÅ¡e interesantnih ponuda. Svakodnevno novi turistiÄki paketi za nove destinacije. www.jeftinaputovanja.rs Skype: jeftinaputovanja.rs Direktni telefon: (možete biti usluženi na engleskom ili na srpskom jeziku po ceni meÄ‘unarodnog poziva) +3025411 - 04067 Internet stranica www.jeftinaputovanja.rs pripada udruženju "Prijatelji Elektronskog obaveÅ¡tavanja i Zabave" sa kraćim nazivom "Prometej". Udruženje ima legalnu dozvolu za rad kao turistiÄka agencija (CDF Travel) sa sediÅ¡tem u ulici Andreu Dimitriu 35-37, Xanthi, GrÄka. Dozvola je izdata od strane GrÄke turististiÄke organizacije (EOT) pod brojem 0104Ε60000033901. Dobili ste ovaj mail zato Å¡to ste se prijavili na naÅ¡u listu ili ste uÄestvovali u nekoj od naÅ¡ih promocija. Ukoliko Vam je mail poslat greÅ¡kom - iskreno Vam se izvinjavamo i molimo Vas da kliknete OVDE ZA UKLANJANJE SA NAÅ E LISTE (UNSUBSCRIBE). ( http://jeftinaputovanja.rs/index.php?option=com_acymailing&ctrl=user&task=saveunsub&subid=46806&key=4cdccf5cf529e707ea6f73be8ec6852f&unsuball=1 ) U sluÄaju da imate bilo kakav problem sa ovim linkom, molimo Vas da odgovorite na ovaj mail i da napiÅ¡ete reÄ Unsubscribe. --b1_36ea0634f5a8ba2a2a074548f70cbac0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit 7 dana na Tasosu (Jun,Jul) smeštaj sa ishranom od 118€ po osobi i druge ponude
social icon social icon social icon
Ne možete da vidite sadržaj?Kliknite ovde
Putovanja više nisu luksuz
summer1
Poštovani,

I dalje nastavljamo sa dobrim ponudama. Ovaj put Vam predlažemo 4 grčke destinacije idealne za letnji odmor!

Ukoliko ne želite više da Vas obaveštavamo putem e-maila o našim ponudama, molimo potvrdite klikom na dugme "Ne želim, hvala"


Ako Vam se dopadaju naše ponude i
želite da ih podelite sa svojim prijateljima

prosledi

Ako želite da Vam redovno šaljemo ponude na ovaj e-mail, molimo Vas da nam to potvrdite

prijavalite


super
PROMOCIJA
i dalje traje...Prilikom rezervacije paketa dovoljno je samo da naglasite da ste putem ovog mail-a ostvarili pravo na popust i ukupna cena paketa će Vam biti umanjena za 10€.
line
tassos
7 ili 10 dana na Tasosu (Jun i Jul) smeštaj, doručak i večera
  
neosmarmaras
7 ili 10 dana na Halkidikiju - Neos Marmaras (Jun i Jul), prevoz i smeštaj 
od 118€ po osobi od 225€ po osobi
8 dana na Rodosu, 15-22 Jun, avion+takse+smeštaj
8 dana na Krfu (11-18 Jul), avion+takse+smeštaj
170€ po osobi 195€ po osobi
line
Posetite našu stranicu za još više interesantnih ponuda. Svakodnevno novi turistički paketi za nove destinacije.
 

www.jeftinaputovanja.rs
Skype: jeftinaputovanja.rs

Direktni telefon: (možete biti usluženi na engleskom ili na srpskom jeziku po ceni međunarodnog poziva+3025411 - 04067 

 

Internet stranica www.jeftinaputovanja.rs pripada udruženju "Prijatelji Elektronskog obaveštavanja i Zabave" sa kraćim nazivom "Prometej".

Udruženje ima legalnu dozvolu za rad kao turistička agencija (CDF Travel) sa sedištem u ulici Andreu Dimitriu 35-37, Xanthi, Grčka. Dozvola je izdata od strane Grčke turistističke organizacije (EOT) pod brojem 0104Ε60000033901.

Dobili ste ovaj mail zato što ste se prijavili na našu listu ili ste učestvovali u nekoj od naših promocija. Ukoliko Vam je mail poslat greškom - iskreno Vam se izvinjavamo i molimo Vas da kliknete OVDE ZA UKLANJANJE SA NAŠE LISTE (UNSUBSCRIBE). U slučaju da imate bilo kakav problem sa ovim linkom, molimo Vas da odgovorite na ovaj mail i da napišete reč Unsubscribe.

 

 

 

 

--b1_36ea0634f5a8ba2a2a074548f70cbac0-- From ironport@mooreconcepts.com Thu May 23 06:17:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY, WEIRD_PORT autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 085247F37 for ; Thu, 23 May 2013 06:17:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 78978AC002 for ; Thu, 23 May 2013 04:17:28 -0700 (PDT) X-ASG-Debug-ID: 1369307839-04cbb0049e8de90002-w1Z2WR Received: from ironport.mooreconcepts.com (ironport.mooreconcepts.com [208.82.8.198]) by cuda.sgi.com with ESMTP id uZGxmmDkDQWYxjfG for ; Thu, 23 May 2013 04:17:23 -0700 (PDT) X-Barracuda-Envelope-From: ironport@mooreconcepts.com X-Barracuda-Apparent-Source-IP: 208.82.8.198 Received: from localhost by ironport.mooreconcepts.com; 23 May 2013 06:17:19 -0500 Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Message-Id: From: =?utf-8?q?Moore_Concepts_Spam_Filter?= Sender: ironport@mooreconcepts.com To: linux-xfs@oss.sgi.com Date: 23 May 2013 06:17:19 -0500 Subject: Moore Concepts Spam Quarantine Notification X-Barracuda-Connect: ironport.mooreconcepts.com[208.82.8.198] X-Barracuda-Start-Time: 1369307843 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Orig-Subj: Moore Concepts Spam Quarantine Notification X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY, WEIRD_PORT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131786 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 WEIRD_PORT URI: Uses non-standard port number for HTTP 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message CjwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25h bC8vRU4iCiAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MC9sb29zZS5kdGQiPgo8aHRtbD4K PGhlYWQ+CiAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0 bWw7IGNoYXJzZXQ9VVRGLTgiPgogIDx0aXRsZT4KICAgIE1vb3JlIENvbmNlcHRzIFNwYW0gUXVh cmFudGluZSBOb3RpZmljYXRpb24KICA8L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keSBzdHlsZT0iY29s b3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMXB4OyI+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJv cmRlcj0iMCIgd2lkdGg9IjEwMCUiPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICAg IDxoMSBpZD0icGFnZV90aXRsZSIgc3R5bGU9ImNvbG9yOiAjNjE2MTMyOyBmb250LWZhbWlseTog dmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMS42ZW07IHBhZGRpbmc6IDBw eDsiPgogICAgICAgIE1vb3JlIENvbmNlcHRzIFNwYW0gUXVhcmFudGluZSBOb3RpZmljYXRpb24K ICAgICAgPC9oMT4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPGJyPgo8ZGl2IGlkPSJjb250 ZW50Ij4KICBUaGUgbWVzc2FnZShzKSBiZWxvdyBoYXZlIGJlZW4gYmxvY2tlZCBieSBNb29yZSBD b25jZXB0cyBhcyBzdXNwZWN0ZWQgc3BhbS48YnI+Cjxicj4KVGhlcmUgYXJlIDEgbmV3IG1lc3Nh Z2VzIGluIHlvdXIgRW1haWwgUXVhcmFudGluZSBzaW5jZSB5b3UgcmVjZWl2ZWQgeW91ciBsYXN0 IE1vb3JlIENvbmNlcHRzIFF1YXJhbnRpbmUgTm90aWZpY2F0aW9uLiBJZiB0aGUgbWVzc2FnZXMg YmVsb3cgYXJlIHNwYW0sIHlvdSBkbyBub3QgbmVlZCB0byB0YWtlIGFueSBhY3Rpb24uICBNZXNz YWdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBxdWFyYW50aW5lIGFm dGVyIDkwIGRheShzKS48YnI+Cjxicj4KSWYgYW55IG9mIHRoZSBtZXNzYWdlcyBiZWxvdyBhcmUg bm90IHNwYW0sIGNsaWNrIHRoZSBSZWxlYXNlIGxpbmsgdG8gaGF2ZSB0aGVtIHNlbnQgdG8geW91 ciBJbmJveC4gVG8gc2VlIGFsbCBxdWFyYW50aW5lZCBtZXNzYWdlcyB2aWV3IDxhIGhyZWY9Imh0 dHBzOi8vaXJvbnBvcnQubW9vcmVjb25jZXB0cy5jb206ODMvU2VhcmNoP2g9NTc4Nzc2ZTdkYjU2 OTkxZDc2ZDkyNDZjZTg1MGJjNGEmZW1haWw9bGludXgteGZzJTQwb3NzLnNnaS5jb20iPnlvdXIg ZW1haWwgcXVhcmFudGluZTwvYT4uPGJyPgo8YnI+CgogICAgPHRhYmxlIGNlbGxwYWRkaW5nPSIw IiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7IG1hcmdp bjogMHB4OyBwYWRkaW5nOiAwcHg7IGZvbnQtZmFtaWx5OiB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1z ZXJpZjsgZm9udC1zaXplOiAxMXB4OyB3aWR0aDogMTAwJSI+CiAgICAgIDx0cj4KICAgICAgICA8 dGggY29sc3Bhbj0iNCIgc3R5bGU9ImZvbnQtc2l6ZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0 OyBwYWRkaW5nOiA0cHg7IGJhY2tncm91bmQtY29sb3I6ICM2YTZhOGQ7IGNvbG9yOiAjZmZmZmZm OyBtYXJnaW46IDBweDsiPgogICAgICAgIDxiPlF1YXJhbnRpbmVkIEVtYWlsPC9iPgogICAgICAg IDwvdGg+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGggc3R5bGU9IndpZHRoOjEy JTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNBQUFBQUE7IGJvcmRlci1sZWZ0OiAxcHggc29saWQg I0FBQUFBQTsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgbWFyZ2lu OiAwcHg7IHBhZGRpbmc6IDRweCA2cHggNHB4IDZweDsgYmFja2dyb3VuZC1jb2xvcjogI0VDRURF MzsgY29sb3I6ICMwMDAwMDA7IHdoaXRlLXNwYWNlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3Jt YWw7Ij4mbmJzcDs8L3RoPgogICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MzAlOyBib3JkZXItdG9w OiAxcHggc29saWQgI0FBQUFBQTsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQUFBQUFBOyB0ZXh0 LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyBtYXJnaW46IDBweDsgcGFkZGlu ZzogNHB4IDZweCA0cHggNnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFREUzOyBjb2xvcjogIzAw MDAwMDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsiPgogICAgICAg ICAgRnJvbQogICAgICAgIDwvdGg+CiAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo0NSU7IGJvcmRl ci10b3A6IDFweCBzb2xpZCAjQUFBQUFBOyBib3JkZXItbGVmdDogMXB4IHNvbGlkICNBQUFBQUE7 IHRleHQtYWxpZ246IGxlZnQ7IHZlcnRpY2FsLWFsaWduOiBib3R0b207IG1hcmdpbjogMHB4OyBw YWRkaW5nOiA0cHggNnB4IDRweCA2cHg7IGJhY2tncm91bmQtY29sb3I6ICNFQ0VERTM7IGNvbG9y OiAjMDAwMDAwOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyI+CiAg ICAgICAgICBTdWJqZWN0CiAgICAgICAgPC90aD4KICAgICAgICA8dGggc3R5bGU9IndpZHRoOjEz JTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNBQUFBQUE7IGJvcmRlci1sZWZ0OiAxcHggc29saWQg I0FBQUFBQTsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0FBQUFBQTsgdGV4dC1hbGlnbjogbGVm dDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDRweCA2cHgg NHB4IDZweDsgYmFja2dyb3VuZC1jb2xvcjogI0VDRURFMzsgY29sb3I6ICMwMDAwMDA7IHdoaXRl LXNwYWNlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7Ij4KICAgICAgICAgIERhdGUKICAg ICAgICA8L3RoPgogICAgICA8L3RyPgogICAgICAKPHRyIHZhbGlnbj0idG9wIiBzdHlsZT0iYmFj a2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsiPgogIDx0ZCBzdHlsZT0id2hpdGUtc3BhY2U6IG5vd3Jh cDsgd2lkdGg6IDEyJTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNBQUFBQUE7IGJvcmRlci1sZWZ0 OiAxcHggc29saWQgI0FBQUFBQTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDNweDsiPgogICAgPGEg aHJlZj0iaHR0cHM6Ly9pcm9ucG9ydC5tb29yZWNvbmNlcHRzLmNvbTo4My9NZXNzYWdlP2FjdGlv bj1SZWxlYXNlJm1pZD01NDQ1NTYyJmg9MjNiMjdkMTcyYzZkOGZkOGUwNDE5YTQxYTNlNDA3NzYm ZW1haWw9bGludXgteGZzJTQwb3NzLnNnaS5jb20iPlJlbGVhc2U8L2E+PC90ZD4KICA8dGQgc3R5 bGU9IndoaXRlLXNwYWNlOiBub3JtYWw7IHdpZHRoOiAzMCU7IGJvcmRlci10b3A6IDFweCBzb2xp ZCAjQUFBQUFBOyBib3JkZXItbGVmdDogMXB4IHNvbGlkICNBQUFBQUE7IG1hcmdpbjogMHB4OyBw YWRkaW5nOiAzcHg7Ij4KICAgIDxzcGFuIHRpdGxlPSIiRnJhbmNpcyBQIFJlZWQiJmx0O2ZyYW5j aXNwQHVzLmNvbSZndDsiPiJGcmFuY2lzIFAgUmVlZCImbHQ7ZnJhbmNpc3BAdXMuY29tJmd0Ozwv c3Bhbj48L3RkPgogIDx0ZCBzdHlsZT0id2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkdGg6IDQ1JTsg Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNBQUFBQUE7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0FB QUFBQTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDNweDsiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9p cm9ucG9ydC5tb29yZWNvbmNlcHRzLmNvbTo4My9NZXNzYWdlP2FjdGlvbj1EZXRhaWwmbWlkPTU0 NDU1NjImaD0yM2IyN2QxNzJjNmQ4ZmQ4ZTA0MTlhNDFhM2U0MDc3NiZlbWFpbD1saW51eC14ZnMl NDBvc3Muc2dpLmNvbSI+W1NQQU1dIERvIHlvdSB3aXNoIHRvIGJlIGFuIEVudHJlcHJlbnVlcjwv YT48L3RkPgogIDx0ZCBzdHlsZT0id2hpdGUtc3BhY2U6IG5vd3JhcDsgd2lkdGg6IDEzJTsgYm9y ZGVyLXRvcDogMXB4IHNvbGlkICNBQUFBQUE7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0FBQUFB QTsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0FBQUFBQTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6 IDNweDsiPjIzIE1heSAyMDEzPC90ZD4KPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQgY29s c3Bhbj0iNCIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyBiYWNrZ3JvdW5kLWNvbG9yOiAjQzBD MEMwOyBtYXJnaW46IDBweDsgcGFkZGluZzogNHB4IDZweCA0cHggNnB4OyBib3JkZXI6IG5vbmU7 Ij4KICAgICAgICA8YSBocmVmPSJodHRwczovL2lyb25wb3J0Lm1vb3JlY29uY2VwdHMuY29tOjgz L1NlYXJjaD9oPTU3ODc3NmU3ZGI1Njk5MWQ3NmQ5MjQ2Y2U4NTBiYzRhJmVtYWlsPWxpbnV4LXhm cyU0MG9zcy5zZ2kuY29tIj5WaWV3IEFsbCBRdWFyYW50aW5lZCBNZXNzYWdlcygxKTwvYT4KICAg ICAgICA8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCjxicj4KPHNwYW4gc3R5bGU9ImNv bG9yOiAjNTU1NTU1OyBmb250LXN0eWxlOiBpdGFsaWM7Ij5Ob3RlOiBUaGlzIG1lc3NhZ2UgaGFz IGJlZW4gc2VudCBieSBhIG5vdGlmaWNhdGlvbiBvbmx5IHN5c3RlbS4gUGxlYXNlIGRvIG5vdApy ZXBseTxicj48YnI+SWYgdGhlIGFib3ZlIGxpbmtzIGRvIG5vdCB3b3JrLCBwbGVhc2UgY29weSBh bmQgcGFzdGUgdGhlIGZvbGxvd2luZyBVUkwgaW50byBhCldlYiBicm93c2VyOgogIDxicj4KICBo dHRwczovL2lyb25wb3J0Lm1vb3JlY29uY2VwdHMuY29tOjgzL1NlYXJjaD9oPTU3ODc3NmU3ZGI1 Njk5MWQ3NmQ5MjQ2Y2U4NTBiYzRhJmVtYWlsPWxpbnV4LXhmcyU0MG9zcy5zZ2kuY29tCjwvc3Bh bj4KCjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K From if.qeyfgjhwznohplqtsibl@institution-global.e-mailinghub.com Thu May 23 06:49:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.1 required=5.0 tests=HTML_IMAGE_RATIO_04, HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 777907F37 for ; Thu, 23 May 2013 06:49:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4883F8F8074 for ; Thu, 23 May 2013 04:49:48 -0700 (PDT) X-ASG-Debug-ID: 1369309785-04bdf063bd35930001-w1Z2WR Received: from institution-global.e-mailinghub.com (institution-global.e-mailinghub.com [207.99.108.246]) by cuda.sgi.com with ESMTP id SzcNmE4O7IyBtWVo for ; Thu, 23 May 2013 04:49:45 -0700 (PDT) X-Barracuda-Envelope-From: if.qeyfgjhwznohplqtsibl@institution-global.e-mailinghub.com X-Barracuda-Apparent-Source-IP: 207.99.108.246 X-Barracuda-Registry: Level1 [institution-global.e-mailinghub.com/207.99.108.246] Date: Thu, 23 May 2013 07:49:45 -0400 (EDT) X-Barracuda-Registry: Level1 [institution-global.e-mailinghub.com/207.99.108.246] From: Anthem Blue Cross and Blue Shield To: linux-xfs@oss.sgi.com Message-ID: <1574534699.1369309785026.if.qeyfgjhwznohplqtsibl@institution-global.e-mailinghub.com.131326442> Subject: Affordable Health Plans Since 1944 MIME-Version: 1.0 X-ASG-Orig-Subj: Affordable Health Plans Since 1944 Content-Type: multipart/alternative; boundary="----=_Part_166191807_1945578243.1369309785025" List-Unsubscribe: X-JLH: mid 1 29fe 9a1eni hjfkgm X-Barracuda-Connect: institution-global.e-mailinghub.com[207.99.108.246] X-Barracuda-Start-Time: 1369309785 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.17 X-Barracuda-Spam-Status: No, SCORE=0.17 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_IMAGE_RATIO_04, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131787 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.17 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message ------=_Part_166191807_1945578243.1369309785025 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable ***************************************************************************= ******* Lower Cost Individual Health Plans in Indiana ***************************************************************************= ******* Affordable monthly premiums, Prescription drug benefits, Your choice of doc= tors Compare and save on health insurance =20 Medical costs are at an all-time high. So having good health insurance is m= ore important than ever. That's where we can help. Get coverage at a great price now! =20 Click here to start an instant quote:=20 http://h.e-mailinghub.com/ling/chhpxpfRoiwthnRliihRs96dnuRfvigRpsapvg/2/get= .anthem.com/in/index.aspx?Referrer=3Dspyder Or call (866) 807-0553 to speak with a representative today. ---------------------------------------------------------------------------= -- =09 Anthem Blue Cross and Blue Shield is the trade name of Anthem Insurance Com= panies, Inc.=20 Independent licensee of the Blue Cross and Blue Shield Association. =C2=AE = ANTHEM is a registered=20 trademark of Anthem Insurance Companies, Inc. The Blue Cross and Blue Shiel= d names and symbols=20 are registered marks of the Blue Cross and Blue Shield Association.=20 To unsubscribe from this newsletter, click here.=20 http://h.e-mailinghub.com/ling/chhpxpfRoiwthnRliihRs96dnuRfvigRpsapvg/2/get= .anthem.com/unsubscribe.aspx Or write to: Anthem Blue Cross and Blue Shield Unsubscribe,=20 160 East Via Verde Avenue, Suite 100, San Dimas, CA 91773, USA. ---------------------------------------------------------------------------= -- Please click here to opt out of future email communication:http://h.e-maili= nghub.com/hubm/0/chhpxpfRoiwthnRliihRs96dnuRfvigRpsapvg ------=_Part_166191807_1945578243.1369309785025 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit

Click here if you cannot view this email.
Indiana residents call us toll free at:
866-807-0553
Compare and save on health insurance
 
Medical costs are at an all-time high. So having good health insurance is more important than ever. That's where we can help. Get coverage at a great price now!
 
Indiana residents call us toll free at:
866-807-0553
This policy has exclusions, limitations, and terms under which the policy may be continued in force or discontinued. For costs and complete details of the coverage, contact your insurance agent, ®ANTHEM or visit us on the web.

Anthem Blue Cross and Blue Shield is the trade name of Anthem Insurance Companies, Inc. Independent licensee of the Blue Cross and Blue Shield Association. ®ANTHEM is a registered trademark of Anthem Insurance Companies, Inc. The Blue Cross and Blue Shield names and symbols are registered marks of the Blue Cross and Blue Shield Association.

160 East Via Verde Avenue, Suite 100, San Dimas, CA 91773, USA.

 

Anthem - Health. Join In.

------=_Part_166191807_1945578243.1369309785025-- From dave@fromorbit.com Thu May 23 07:30:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 916C67F37 for ; Thu, 23 May 2013 07:30:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2CAD5AC00B for ; Thu, 23 May 2013 05:30:52 -0700 (PDT) X-ASG-Debug-ID: 1369312247-04bdf078178fae0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id c3azI2DmmpHkU8s4 for ; Thu, 23 May 2013 05:30:50 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmsOAMUKnlF5LBBG/2dsb2JhbABagwgwvkuDWwSBChd0giMBAQUnLyMQCBgYGTkDGxmIDA26Po4AgS6DSgOoeIMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 23 May 2013 22:00:46 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfUfM-0007Xx-2a; Thu, 23 May 2013 22:30:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfUfL-0001YR-Uh; Thu, 23 May 2013 22:30:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 2/2] xfs: fix split buffer vector log recovery support Date: Thu, 23 May 2013 22:30:40 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfs: fix split buffer vector log recovery support Message-Id: <1369312240-5925-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369312240-5925-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369312240-5925-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369312249 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner A long time ago in a galaxy far away.... .. the was a commit made to fix some ilinux specific "fragmented buffer" log recovery problem: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=b29c0bece51da72fb3ff3b61391a391ea54e1603 That problem occurred when a contiguous dirty region of a buffer was split across across two pages of an unmapped buffer. It's been a long time since that has been done in XFS, and the changes to log the entire inode buffers for CRC enabled filesystems has re-introduced that corner case. And, of course, it turns out that the above commit didn't actually fix anything - it just ensured that log recovery is guaranteed to fail when this situation occurs. And now for the gory details. xfstest xfs/085 is failing with this assert: XFS (vdb): bad number of regions (0) in inode log format XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 1583 Largely undocumented factoid #1: Log recovery depends on all log buffer format items starting with this format: struct foo_log_format { __uint16_t type; __uint16_t size; .... As recoery uses the size field and assumptions about 32 bit alignment in decoding format items. So don't pay much attention to the fact log recovery thinks that it decoding an inode log format item - it just uses them to determine what the size of the item is. But why would it see a log format item with a zero size? Well, luckily enough xfs_logprint uses the same code and gives the same error, so with a bit of gdb magic, it turns out that it isn't a log format that is being decoded. What logprint tells us is this: Oper (130): tid: a0375e1a len: 28 clientid: TRANS flags: none BUF: #regs: 2 start blkno: 144 (0x90) len: 16 bmap size: 2 flags: 0x4000 Oper (131): tid: a0375e1a len: 4096 clientid: TRANS flags: none BUF DATA ---------------------------------------------------------------------------- Oper (132): tid: a0375e1a len: 4096 clientid: TRANS flags: none xfs_logprint: unknown log operation type (4e49) ********************************************************************** * ERROR: data block=2 * ********************************************************************** That we've got a buffer format item (oper 130) that has two regions; the format item itself and one dirty region. The subsequent region after the buffer format item and it's data is them what we are tripping over, and the first bytes of it at an inode magic number. Not a log opheader like there is supposed to be. That means there's a problem with the buffer format item. It's dirty data region is 4096 bytes, and it contains - you guessed it - initialised inodes. But inode buffers are 8k, not 4k, and we log them in their entirety. So something is wrong here. The buffer format item contains: (gdb) p /x *(struct xfs_buf_log_format *)in_f $22 = {blf_type = 0x123c, blf_size = 0x2, blf_flags = 0x4000, blf_len = 0x10, blf_blkno = 0x90, blf_map_size = 0x2, blf_data_map = {0xffffffff, 0xffffffff, .... }} Two regions, and a signle dirty contiguous region of 64 bits. 64 * 128 = 8k, so this should be followed by a single 8k region of data. And the blf_flags tell us that the type of buffer is a XFS_BLFT_DINO_BUF. It contains inodes. And because it doesn't have the XFS_BLF_INODE_BUF flag set, that means it's an inode allocation buffer. So, it should be followed by 8k of inode data. But we know that the next region has a header of: (gdb) p /x *ohead $25 = {oh_tid = 0x1a5e37a0, oh_len = 0x100000, oh_clientid = 0x69, oh_flags = 0x0, oh_res2 = 0x0} and so be32_to_cpu(oh_len) = 0x1000 = 4096 bytes. It's simply not long enough to hold all the logged data. There must be another region. There is - there's a following opheader for another 4k of data that contains the other half of the inode cluster data - the one we assert fail on because it's not a log format header. So why is the second part of the data not being accounted to the correct buffer log format structure? It took a little more work with gdb to work out that the buffer log format structure was both expecting it to be there but hadn't accounted for it. It was at that point I went to the kernel code, as clearly this wasn't a bug in xfs_logprint and the kernel was writing bad stuff to the log. First port of call was the buffer item formatting code, and the discontiguous memory/contiguous dirty region handling code immediately stood out. I've wondered for a long time why the code had this comment in it: vecp->i_addr = xfs_buf_offset(bp, buffer_offset); vecp->i_len = nbits * XFS_BLF_CHUNK; vecp->i_type = XLOG_REG_TYPE_BCHUNK; /* * You would think we need to bump the nvecs here too, but we do not * this number is used by recovery, and it gets confused by the boundary * split here * nvecs++; */ vecp++; And it didn't account for the extra vector pointer. The case being handled here is that a contiguous dirty region lies across a boundary that cannot be memcpy()d across, and so has to be split into two separate operations for xlog_write() to perform. What this code assumes is that what is written to the log is two consecutive blocks of data that are accounted in the buf log format item as the same contiguous dirty region and so will get decoded as such by the log recovery code. The thing is, xlog_write() knows nothing about this, and so just does it's normal thing of adding an opheader for each vector. That means the 8k region gets written to the log as two separate regions of 4k each, but because nvecs has not been incremented, the buf log format item accounts for only one of them. Hence when we come to log recovery, we process the first 4k region and then expect to come across a new item that starts with a log format structure of some kind that tells us whenteh next data is going to be. Instead, we hit raw buffer data and things go bad real quick. So, the commit from 2002 that commented out nvecs++ is just plain wrong. It breaks log recovery completely, and it would seem the only reason this hasn't been since then is that we don't log large contigous regions of multi-page unmapped buffers very often. Never would be a closer estimate, at least until the CRC code came along.... So, lets fix that by restoring the nvecs accounting for the extra region when we hit this case..... .... and there's the problemin log recovery it is apparently working around: XFS: Assertion failed: i == item->ri_total, file: fs/xfs/xfs_log_recover.c, line: 2135 Yup, xlog_recover_do_reg_buffer() doesn't handle contigous dirty regions being broken up into multiple regions by the log formatting code. That's an easy fix, though - if the number of contiguous dirty bits exceeds the length of the region being copied out of the log, only account for the number of dirty bits that region covers, and then loop again and copy more from the next region. It's a 2 line fix. Now xfstests xfs/085 passes, we have one less piece of mystery code, and one more important piece of knowledge about how to structure new log format items.. Signed-off-by: Dave Chinner --- fs/xfs/xfs_buf_item.c | 7 +------ fs/xfs/xfs_log_recover.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index cf26347..4ec4317 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c @@ -262,12 +262,7 @@ xfs_buf_item_format_segment( vecp->i_addr = xfs_buf_offset(bp, buffer_offset); vecp->i_len = nbits * XFS_BLF_CHUNK; vecp->i_type = XLOG_REG_TYPE_BCHUNK; -/* - * You would think we need to bump the nvecs here too, but we do not - * this number is used by recovery, and it gets confused by the boundary - * split here - * nvecs++; - */ + nvecs++; vecp++; first_bit = next_bit; last_bit = next_bit; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 0be37d7..d6204d1 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2097,6 +2097,17 @@ xlog_recover_do_reg_buffer( ((uint)bit << XFS_BLF_SHIFT) + (nbits << XFS_BLF_SHIFT)); /* + * The dirty regions logged in the buffer, even though + * contiguous, may span multiple chunks. This is because the + * dirty region may span a physical page boundary in a buffer + * and hence be split into two separate vectors for writing into + * the log. Hence we need to trim nbits back to the length of + * the current region being copied out of the log. + */ + if (item->ri_buf[i].i_len < (nbits << XFS_BLF_SHIFT)) + nbits = item->ri_buf[i].i_len >> XFS_BLF_SHIFT; + + /* * Do a sanity check if this is a dquot buffer. Just checking * the first dquot in the buffer should do. XXXThis is * probably a good thing to do for other buf types also. -- 1.7.10.4 From dave@fromorbit.com Thu May 23 07:30:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E85FB7F37 for ; Thu, 23 May 2013 07:30:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 932ACAC00C for ; Thu, 23 May 2013 05:30:50 -0700 (PDT) X-ASG-Debug-ID: 1369312247-04bdf078178fae0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id gxpOfRoCRKGG8JYJ for ; Thu, 23 May 2013 05:30:48 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArwLAMUKnlF5LBBG/2dsb2JhbABagwjCVgQBgQkXdIIjAQEFJy8jEAgYMTkDGxmIDLpLjW0TgRiDYAOoeIMhKoEtAR4G Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 23 May 2013 22:00:46 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfUfM-0007Xw-1z; Thu, 23 May 2013 22:30:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfUfL-0001YN-TJ; Thu, 23 May 2013 22:30:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 1/2] xfs: rework dquot CRCs Date: Thu, 23 May 2013 22:30:39 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfs: rework dquot CRCs Message-Id: <1369312240-5925-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369312240-5925-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369312240-5925-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369312248 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Calculating dquot CRCs when the backing buffer is written back just doesn't work reliably. There are several places which manipulate dquots directly in the buffers, and they don't calculate CRCs appropriately, nor do they always set the buffer up to calculate CRCs appropriately. Firstly, if we log a dquot buffer (e.g. during allocation) it gets logged without valid CRC, and so on recovery we end up with a dquot that is not valid. Secondly, if we recover/repair a dquot, we don't have a verifier attached to the buffer and hence CRCs arenot calculate don the way down to disk. Thirdly, calculating the CRC after we've changed the contents means that if we re-read the dquot from the buffer, we cannot verify the contents of the dquot are valid, as the CRC is invalid. So, to avoid all the dquot CRC errors that are being detected by the read verifier, change to using the same model as for inodes. that is, dquot CRCs are calculated and written to the backing buffer at the time the dquot is flushed to the backing buffer. If we modify the dquuot directly in the backing buffer, calculate the CRC immediately after the modification is complete. Hence the dquot in the on-disk buffer should always have a valid CRC. Signed-off-by: Dave Chinner --- fs/xfs/xfs_dquot.c | 37 ++++++++++++++++--------------------- fs/xfs/xfs_log_recover.c | 10 ++++++++++ fs/xfs/xfs_qm.c | 36 ++++++++++++++++++++++++++---------- fs/xfs/xfs_quota.h | 2 ++ 4 files changed, 54 insertions(+), 31 deletions(-) diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index a41f8bf..044e97a 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -249,8 +249,11 @@ xfs_qm_init_dquot_blk( d->dd_diskdq.d_version = XFS_DQUOT_VERSION; d->dd_diskdq.d_id = cpu_to_be32(curid); d->dd_diskdq.d_flags = type; - if (xfs_sb_version_hascrc(&mp->m_sb)) + if (xfs_sb_version_hascrc(&mp->m_sb)) { uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); + xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); + } } xfs_trans_dquot_buf(tp, bp, @@ -286,23 +289,6 @@ xfs_dquot_set_prealloc_limits(struct xfs_dquot *dqp) dqp->q_low_space[XFS_QLOWSP_5_PCNT] = space * 5; } -STATIC void -xfs_dquot_buf_calc_crc( - struct xfs_mount *mp, - struct xfs_buf *bp) -{ - struct xfs_dqblk *d = (struct xfs_dqblk *)bp->b_addr; - int i; - - if (!xfs_sb_version_hascrc(&mp->m_sb)) - return; - - for (i = 0; i < mp->m_quotainfo->qi_dqperchunk; i++, d++) { - xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), - offsetof(struct xfs_dqblk, dd_crc)); - } -} - STATIC bool xfs_dquot_buf_verify_crc( struct xfs_mount *mp, @@ -328,12 +314,11 @@ xfs_dquot_buf_verify_crc( for (i = 0; i < ndquots; i++, d++) { if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), - offsetof(struct xfs_dqblk, dd_crc))) + XFS_DQUOT_CRC_OFF)) return false; if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_uuid)) return false; } - return true; } @@ -393,6 +378,11 @@ xfs_dquot_buf_read_verify( } } +/* + * we don't calculate the CRC here as that is done when the dquot is flushed to + * the buffer after the update is done. This ensures that the dquot in the + * buffer always has an up-to-date CRC value. + */ void xfs_dquot_buf_write_verify( struct xfs_buf *bp) @@ -404,7 +394,6 @@ xfs_dquot_buf_write_verify( xfs_buf_ioerror(bp, EFSCORRUPTED); return; } - xfs_dquot_buf_calc_crc(mp, bp); } const struct xfs_buf_ops xfs_dquot_buf_ops = { @@ -1151,11 +1140,17 @@ xfs_qm_dqflush( * copy the lsn into the on-disk dquot now while we have the in memory * dquot here. This can't be done later in the write verifier as we * can't get access to the log item at that point in time. + * + * We also calculate the CRC here so that the on-disk dquot in the + * buffer always has a valid CRC. This ensures there is no possibility + * of a dquot without an up-to-date CRC getting to disk. */ if (xfs_sb_version_hascrc(&mp->m_sb)) { struct xfs_dqblk *dqb = (struct xfs_dqblk *)ddqp; dqb->dd_lsn = cpu_to_be64(dqp->q_logitem.qli_item.li_lsn); + xfs_update_cksum((char *)dqb, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); } /* diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 93f03ec..0be37d7 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2255,6 +2255,12 @@ xfs_qm_dqcheck( d->dd_diskdq.d_flags = type; d->dd_diskdq.d_id = cpu_to_be32(id); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); + xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); + } + return errs; } @@ -2782,6 +2788,10 @@ xlog_recover_dquot_pass2( } memcpy(ddq, recddq, item->ri_buf[1].i_len); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + xfs_update_cksum((char *)ddq, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); + } ASSERT(dq_f->qlf_size == 2); ASSERT(bp->b_target->bt_mount == mp); diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index f41702b..d181542 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -41,6 +41,7 @@ #include "xfs_qm.h" #include "xfs_trace.h" #include "xfs_icache.h" +#include "xfs_cksum.h" /* * The global quota manager. There is only one of these for the entire @@ -839,7 +840,7 @@ xfs_qm_reset_dqcounts( xfs_dqid_t id, uint type) { - xfs_disk_dquot_t *ddq; + struct xfs_dqblk *dqb; int j; trace_xfs_reset_dqcounts(bp, _RET_IP_); @@ -853,8 +854,12 @@ xfs_qm_reset_dqcounts( do_div(j, sizeof(xfs_dqblk_t)); ASSERT(mp->m_quotainfo->qi_dqperchunk == j); #endif - ddq = bp->b_addr; + dqb = bp->b_addr; for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { + struct xfs_disk_dquot *ddq; + + ddq = (struct xfs_disk_dquot *)&dqb[j]; + /* * Do a sanity check, and if needed, repair the dqblk. Don't * output any warnings because it's perfectly possible to @@ -871,7 +876,8 @@ xfs_qm_reset_dqcounts( ddq->d_bwarns = 0; ddq->d_iwarns = 0; ddq->d_rtbwarns = 0; - ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); + xfs_update_cksum((char *)&dqb[j], sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); } } @@ -907,19 +913,29 @@ xfs_qm_dqiter_bufs( XFS_FSB_TO_DADDR(mp, bno), mp->m_quotainfo->qi_dqchunklen, 0, &bp, &xfs_dquot_buf_ops); - if (error) - break; /* - * XXX(hch): need to figure out if it makes sense to validate - * the CRC here. + * CRC and validation errors will return a EFSCORRUPTED here. If + * this occurs, re-read without CRC validation so that we can + * repair the damage via xfs_qm_reset_dqcounts(). This process + * will leave a trace in the log indicating corruption has + * been detected. */ + if (error == EFSCORRUPTED) { + error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, + XFS_FSB_TO_DADDR(mp, bno), + mp->m_quotainfo->qi_dqchunklen, 0, &bp, + NULL); + } + + if (error) + break; + xfs_qm_reset_dqcounts(mp, bp, firstid, type); xfs_buf_delwri_queue(bp, buffer_list); xfs_buf_relse(bp); - /* - * goto the next block. - */ + + /* goto the next block. */ bno++; firstid += mp->m_quotainfo->qi_dqperchunk; } diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index c61e31c..c38068f 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -87,6 +87,8 @@ typedef struct xfs_dqblk { uuid_t dd_uuid; /* location information */ } xfs_dqblk_t; +#define XFS_DQUOT_CRC_OFF offsetof(struct xfs_dqblk, dd_crc) + /* * flags for q_flags field in the dquot. */ -- 1.7.10.4 From dave@fromorbit.com Thu May 23 07:30:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4D8D87F52 for ; Thu, 23 May 2013 07:30:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2BEB830408B for ; Thu, 23 May 2013 05:30:56 -0700 (PDT) X-ASG-Debug-ID: 1369312247-04bdf078178fae0003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id ocBfbVV1gsMKllQG for ; Thu, 23 May 2013 05:30:54 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkLAMUKnlF5LBBG/2dsb2JhbABagwjCVgSBChd0giQBBVYjEAhJOQMbiCW6S44AgTqDPgOoeIMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 23 May 2013 22:00:54 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfUfM-0007Xv-0v; Thu, 23 May 2013 22:30:44 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfUfL-0001YK-Rq; Thu, 23 May 2013 22:30:43 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 0/2] xfs: more fixes for 3.10-rc3 Date: Thu, 23 May 2013 22:30:38 +1000 X-ASG-Orig-Subj: [PATCH 0/2] xfs: more fixes for 3.10-rc3 Message-Id: <1369312240-5925-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369312251 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Ben, A couple more fixes for 3.10-rc3 for you to look at. The first fixes random dquot CRC corruptions I have been seeing, and the second fixes a log recovery failure that xfs/085 reproduces 100% of the time with CRC enabled filesystems - it's a bug in the buffer formatting code that's been there since 2002... Cheers, Dave. From dave@fromorbit.com Thu May 23 07:36:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D42367F3F for ; Thu, 23 May 2013 07:36:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6C29BAC00D for ; Thu, 23 May 2013 05:36:10 -0700 (PDT) X-ASG-Debug-ID: 1369312568-04cbb0049e923f0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id h5qiHMIyqhmWoDZb for ; Thu, 23 May 2013 05:36:08 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtkLANsLnlF5LBBG/2dsb2JhbABagwiMRrYQBIEKF3SCJAEFVjMISTkDG4glukaOAIE6gz4DqHiDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 23 May 2013 22:06:08 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfUkZ-0007Z4-66 for xfs@oss.sgi.com; Thu, 23 May 2013 22:36:07 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfUkZ-0001du-10 for xfs@oss.sgi.com; Thu, 23 May 2013 22:36:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/2] xfsprogs: yet more CRC support patches Date: Thu, 23 May 2013 22:36:03 +1000 X-ASG-Orig-Subj: [PATCH 0/2] xfsprogs: yet more CRC support patches Message-Id: <1369312565-6266-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369032783-24973-1-git-send-email-david@fromorbit.com> References: <1369032783-24973-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369312568 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Just a couple for xfs_db - dquot and attribute structure printing. These go on top of the previous two patches that this one is threaded to. -Dave. From dave@fromorbit.com Thu May 23 07:36:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 60FD77F5A for ; Thu, 23 May 2013 07:36:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4E16B8F809E for ; Thu, 23 May 2013 05:36:14 -0700 (PDT) X-ASG-Debug-ID: 1369312568-04cbb0049e923f0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id NZT3Ir7hXyTqpacq for ; Thu, 23 May 2013 05:36:13 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkLANsLnlF5LBBG/2dsb2JhbABagwjCVgSBChd0giMBAQVWMwgYMTkDGxmIDLpGjgCBOoM+A6FTD4cWgyEq Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 23 May 2013 22:06:13 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfUkZ-0007Z5-74 for xfs@oss.sgi.com; Thu, 23 May 2013 22:36:07 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfUkZ-0001dx-2G for xfs@oss.sgi.com; Thu, 23 May 2013 22:36:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/2] xfs_db: add CRC information to dquot output Date: Thu, 23 May 2013 22:36:04 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfs_db: add CRC information to dquot output Message-Id: <1369312565-6266-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369312565-6266-1-git-send-email-david@fromorbit.com> References: <1369032783-24973-1-git-send-email-david@fromorbit.com> <1369312565-6266-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369312569 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When dumping a dqblk, also output the CRC related fields. For non-CRC filesystems, these fields should always be zero. Signed-off-by: Dave Chinner --- db/dquot.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/db/dquot.c b/db/dquot.c index daa47a3..35eb0bd 100644 --- a/db/dquot.c +++ b/db/dquot.c @@ -48,6 +48,9 @@ const field_t dqblk_flds[] = { { "diskdq", FLDT_DISK_DQUOT, OI(DDOFF(diskdq)), C1, 0, TYP_NONE }, { "fill", FLDT_CHARS, OI(DDOFF(fill)), CI(DDSZC(fill)), FLD_SKIPALL, TYP_NONE }, + { "crc", FLDT_UINT32X, OI(DDOFF(crc)), C1, 0, TYP_NONE }, + { "lsn", FLDT_UINT64X, OI(DDOFF(lsn)), C1, 0, TYP_NONE }, + { "uuid", FLDT_UUID, OI(DDOFF(uuid)), C1, 0, TYP_NONE }, { NULL } }; -- 1.7.10.4 From dave@fromorbit.com Thu May 23 07:36:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5F86F7F62 for ; Thu, 23 May 2013 07:36:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C23A9AC00F for ; Thu, 23 May 2013 05:36:21 -0700 (PDT) X-ASG-Debug-ID: 1369312568-04cbb0049e923f0003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id KvWkY6PCQGSWJn9D for ; Thu, 23 May 2013 05:36:18 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AroLANsLnlF5LBBG/2dsb2JhbABagwjCVgSBChd0giMBAQUnLzMIGDE5AxsZiAy6Ro4AhHgDoVOHJYMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 23 May 2013 22:06:18 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfUkj-0007Z6-84 for xfs@oss.sgi.com; Thu, 23 May 2013 22:36:17 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfUkZ-0001e1-4E for xfs@oss.sgi.com; Thu, 23 May 2013 22:36:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/2] xfs_db: add CRC support for attribute fork structures. Date: Thu, 23 May 2013 22:36:05 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfs_db: add CRC support for attribute fork structures. Message-Id: <1369312565-6266-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369312565-6266-1-git-send-email-david@fromorbit.com> References: <1369032783-24973-1-git-send-email-david@fromorbit.com> <1369312565-6266-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369312573 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Signed-off-by: Dave Chinner --- db/attr.c | 393 ++++++++++++++++++++++++++++++++++++------------------------ db/attr.h | 4 + db/field.c | 13 ++ db/field.h | 8 ++ db/type.c | 4 +- db/type.h | 2 +- 6 files changed, 268 insertions(+), 156 deletions(-) diff --git a/db/attr.c b/db/attr.c index 05049ba..f74e4e2 100644 --- a/db/attr.c +++ b/db/attr.c @@ -148,84 +148,141 @@ const field_t attr_node_hdr_flds[] = { { NULL } }; -/*ARGSUSED*/ static int attr_leaf_entries_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; + struct xfs_attr_leafblock *leaf = obj; ASSERT(startoff == 0); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) + if (be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) return 0; - return be16_to_cpu(block->hdr.count); + return be16_to_cpu(leaf->hdr.count); +} + +static int +attr3_leaf_entries_count( + void *obj, + int startoff) +{ + struct xfs_attr3_leafblock *leaf = obj; + + ASSERT(startoff == 0); + if (be16_to_cpu(leaf->hdr.info.hdr.magic) != XFS_ATTR_LEAF_MAGIC) + return 0; + return be16_to_cpu(leaf->hdr.count); } -/*ARGSUSED*/ static int attr_leaf_hdr_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; + struct xfs_attr_leafblock *leaf = obj; ASSERT(startoff == 0); - block = obj; - return be16_to_cpu(block->hdr.info.magic) == XFS_ATTR_LEAF_MAGIC; + return be16_to_cpu(leaf->hdr.info.magic) == XFS_ATTR_LEAF_MAGIC; } static int -attr_leaf_name_local_count( +attr3_leaf_hdr_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; - int i; - int off; + struct xfs_attr3_leafblock *leaf = obj; - ASSERT(bitoffs(startoff) == 0); - off = byteize(startoff); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) + ASSERT(startoff == 0); + return be16_to_cpu(leaf->hdr.info.hdr.magic) == XFS_ATTR3_LEAF_MAGIC; +} + +typedef int (*attr_leaf_entry_walk_f)(struct xfs_attr_leafblock *, + struct xfs_attr_leaf_entry *, int); +static int +attr_leaf_entry_walk( + void *obj, + int startoff, + attr_leaf_entry_walk_f func) +{ + struct xfs_attr_leafblock *leaf = obj; + struct xfs_attr3_icleaf_hdr leafhdr; + struct xfs_attr_leaf_entry *entries; + struct xfs_attr_leaf_entry *e; + int i; + int off; + + ASSERT(startoff == 0); + if (be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC || + be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR3_LEAF_MAGIC) return 0; - for (i = 0; i < be16_to_cpu(block->hdr.count); i++) { - e = &block->entries[i]; + + off = byteize(startoff); + xfs_attr3_leaf_hdr_from_disk(&leafhdr, leaf); + entries = xfs_attr3_leaf_entryp(leaf); + + for (i = 0; i < leafhdr.count; i++) { + e = &entries[i]; if (be16_to_cpu(e->nameidx) == off) - return (e->flags & XFS_ATTR_LOCAL) != 0; + return func(leaf, e, i); } return 0; } static int +__attr_leaf_name_local_count( + struct xfs_attr_leafblock *leaf, + struct xfs_attr_leaf_entry *e, + int i) +{ + return (e->flags & XFS_ATTR_LOCAL) != 0; +} + +static int +attr_leaf_name_local_count( + void *obj, + int startoff) +{ + return attr_leaf_entry_walk(obj, startoff, + __attr_leaf_name_local_count); +} + +static int +__attr_leaf_name_local_name_count( + struct xfs_attr_leafblock *leaf, + struct xfs_attr_leaf_entry *e, + int i) +{ + struct xfs_attr_leaf_name_local *l; + + if (!(e->flags & XFS_ATTR_LOCAL)) + return 0; + + l = xfs_attr3_leaf_name_local(leaf, i); + return l->namelen; +} + +static int attr_leaf_name_local_name_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; - int i; - xfs_attr_leaf_name_local_t *l; - int off; + return attr_leaf_entry_walk(obj, startoff, + __attr_leaf_name_local_name_count); +} - ASSERT(bitoffs(startoff) == 0); - off = byteize(startoff); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) +static int +__attr_leaf_name_local_value_count( + struct xfs_attr_leafblock *leaf, + struct xfs_attr_leaf_entry *e, + int i) +{ + struct xfs_attr_leaf_name_local *l; + + if (!(e->flags & XFS_ATTR_LOCAL)) return 0; - for (i = 0; i < be16_to_cpu(block->hdr.count); i++) { - e = &block->entries[i]; - if (be16_to_cpu(e->nameidx) == off) { - if (e->flags & XFS_ATTR_LOCAL) { - l = xfs_attr3_leaf_name_local(block, i); - return l->namelen; - } else - return 0; - } - } - return 0; + + l = xfs_attr3_leaf_name_local(leaf, i); + return be16_to_cpu(l->valuelen); } static int @@ -233,84 +290,66 @@ attr_leaf_name_local_value_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; - int i; - xfs_attr_leaf_name_local_t *l; - int off; + return attr_leaf_entry_walk(obj, startoff, + __attr_leaf_name_local_value_count); +} - ASSERT(bitoffs(startoff) == 0); - off = byteize(startoff); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) - return 0; - for (i = 0; i < be16_to_cpu(block->hdr.count); i++) { - e = &block->entries[i]; - if (be16_to_cpu(e->nameidx) == off) { - if (e->flags & XFS_ATTR_LOCAL) { - l = xfs_attr3_leaf_name_local(block, i); - return be16_to_cpu(l->valuelen); - } else - return 0; - } - } - return 0; +static int +__attr_leaf_name_local_value_offset( + struct xfs_attr_leafblock *leaf, + struct xfs_attr_leaf_entry *e, + int i) +{ + struct xfs_attr_leaf_name_local *l; + char *vp; + + l = xfs_attr3_leaf_name_local(leaf, i); + vp = (char *)&l->nameval[l->namelen]; + + return (int)bitize(vp - (char *)l); } -/*ARGSUSED*/ static int attr_leaf_name_local_value_offset( void *obj, int startoff, int idx) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_name_local_t *l; - char *vp; - int off; - xfs_attr_leaf_entry_t *e; - int i; - - ASSERT(bitoffs(startoff) == 0); - off = byteize(startoff); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) - return 0; - - for (i = 0; i < be16_to_cpu(block->hdr.count); i++) { - e = &block->entries[i]; - if (be16_to_cpu(e->nameidx) == off) - break; - } - if (i >= be16_to_cpu(block->hdr.count)) - return 0; + return attr_leaf_entry_walk(obj, startoff, + __attr_leaf_name_local_value_offset); +} - l = xfs_attr3_leaf_name_local(block, i); - vp = (char *)&l->nameval[l->namelen]; - return (int)bitize(vp - (char *)l); +static int +__attr_leaf_name_remote_count( + struct xfs_attr_leafblock *leaf, + struct xfs_attr_leaf_entry *e, + int i) +{ + return (e->flags & XFS_ATTR_LOCAL) == 0; } static int attr_leaf_name_remote_count( - void *obj, - int startoff) + void *obj, + int startoff) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; - int i; - int off; + return attr_leaf_entry_walk(obj, startoff, + __attr_leaf_name_remote_count); +} - ASSERT(bitoffs(startoff) == 0); - off = byteize(startoff); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) +static int +__attr_leaf_name_remote_name_count( + struct xfs_attr_leafblock *leaf, + struct xfs_attr_leaf_entry *e, + int i) +{ + struct xfs_attr_leaf_name_remote *r; + + if (e->flags & XFS_ATTR_LOCAL) return 0; - for (i = 0; i < be16_to_cpu(block->hdr.count); i++) { - e = &block->entries[i]; - if (be16_to_cpu(e->nameidx) == off) - return (e->flags & XFS_ATTR_LOCAL) == 0; - } - return 0; + + r = xfs_attr3_leaf_name_remote(leaf, i); + return r->namelen; } static int @@ -318,117 +357,125 @@ attr_leaf_name_remote_name_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; - int i; - int off; - xfs_attr_leaf_name_remote_t *r; - - ASSERT(bitoffs(startoff) == 0); - off = byteize(startoff); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) - return 0; - for (i = 0; i < be16_to_cpu(block->hdr.count); i++) { - e = &block->entries[i]; - if (be16_to_cpu(e->nameidx) == off) { - if (!(e->flags & XFS_ATTR_LOCAL)) { - r = xfs_attr3_leaf_name_remote(block, i); - return r->namelen; - } else - return 0; - } - } - return 0; + return attr_leaf_entry_walk(obj, startoff, + __attr_leaf_name_remote_name_count); } -/*ARGSUSED*/ int attr_leaf_name_size( void *obj, int startoff, int idx) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; - xfs_attr_leaf_name_local_t *l; - xfs_attr_leaf_name_remote_t *r; + struct xfs_attr_leafblock *leaf = obj; + struct xfs_attr_leaf_entry *e; + struct xfs_attr_leaf_name_local *l; + struct xfs_attr_leaf_name_remote *r; ASSERT(startoff == 0); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) + if (be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC || + be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR3_LEAF_MAGIC) return 0; - e = &block->entries[idx]; + e = &xfs_attr3_leaf_entryp(leaf)[idx]; if (e->flags & XFS_ATTR_LOCAL) { - l = xfs_attr3_leaf_name_local(block, idx); + l = xfs_attr3_leaf_name_local(leaf, idx); return (int)bitize(xfs_attr_leaf_entsize_local(l->namelen, be16_to_cpu(l->valuelen))); } else { - r = xfs_attr3_leaf_name_remote(block, idx); + r = xfs_attr3_leaf_name_remote(leaf, idx); return (int)bitize(xfs_attr_leaf_entsize_remote(r->namelen)); } } -/*ARGSUSED*/ static int attr_leaf_nvlist_count( void *obj, int startoff) { - xfs_attr_leafblock_t *block; + struct xfs_attr_leafblock *leaf = obj; + + ASSERT(startoff == 0); + if (be16_to_cpu(leaf->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) + return 0; + return be16_to_cpu(leaf->hdr.count); +} + +static int +attr3_leaf_nvlist_count( + void *obj, + int startoff) +{ + struct xfs_attr3_leafblock *leaf = obj; ASSERT(startoff == 0); - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_ATTR_LEAF_MAGIC) + if (be16_to_cpu(leaf->hdr.info.hdr.magic) != XFS_ATTR3_LEAF_MAGIC) return 0; - return be16_to_cpu(block->hdr.count); + return be16_to_cpu(leaf->hdr.count); } -/*ARGSUSED*/ static int attr_leaf_nvlist_offset( void *obj, int startoff, int idx) { - xfs_attr_leafblock_t *block; - xfs_attr_leaf_entry_t *e; + struct xfs_attr_leafblock *leaf = obj; + struct xfs_attr_leaf_entry *e; ASSERT(startoff == 0); - block = obj; - e = &block->entries[idx]; + e = &xfs_attr3_leaf_entryp(leaf)[idx]; return bitize(be16_to_cpu(e->nameidx)); } -/*ARGSUSED*/ static int attr_node_btree_count( void *obj, int startoff) { - xfs_da_intnode_t *block; + struct xfs_da_intnode *node = obj; ASSERT(startoff == 0); /* this is a base structure */ - block = obj; - if (be16_to_cpu(block->hdr.info.magic) != XFS_DA_NODE_MAGIC) + if (be16_to_cpu(node->hdr.info.magic) != XFS_DA_NODE_MAGIC) + return 0; + return be16_to_cpu(node->hdr.__count); +} + +static int +attr3_node_btree_count( + void *obj, + int startoff) +{ + struct xfs_da3_intnode *node = obj; + + ASSERT(startoff == 0); + if (be16_to_cpu(node->hdr.info.hdr.magic) != XFS_DA3_NODE_MAGIC) return 0; - return be16_to_cpu(block->hdr.__count); + return be16_to_cpu(node->hdr.__count); } -/*ARGSUSED*/ + static int attr_node_hdr_count( void *obj, int startoff) { - xfs_da_intnode_t *block; + struct xfs_da_intnode *node = obj; + + ASSERT(startoff == 0); + return be16_to_cpu(node->hdr.info.magic) == XFS_DA_NODE_MAGIC; +} + +static int +attr3_node_hdr_count( + void *obj, + int startoff) +{ + struct xfs_da3_intnode *node = obj; ASSERT(startoff == 0); - block = obj; - return be16_to_cpu(block->hdr.info.magic) == XFS_DA_NODE_MAGIC; + return be16_to_cpu(node->hdr.info.hdr.magic) == XFS_DA3_NODE_MAGIC; } -/*ARGSUSED*/ int attr_size( void *obj, @@ -437,3 +484,41 @@ attr_size( { return bitize(mp->m_sb.sb_blocksize); } + +/* + * CRC enabled attribute block field definitions + */ +const field_t attr3_hfld[] = { + { "", FLDT_ATTR3, OI(0), C1, 0, TYP_NONE }, + { NULL } +}; + +#define L3OFF(f) bitize(offsetof(struct xfs_attr3_leafblock, f)) +#define N3OFF(f) bitize(offsetof(struct xfs_da3_intnode, f)) +const field_t attr3_flds[] = { + { "hdr", FLDT_ATTR3_LEAF_HDR, OI(L3OFF(hdr)), attr3_leaf_hdr_count, + FLD_COUNT, TYP_NONE }, + { "hdr", FLDT_DA3_NODE_HDR, OI(N3OFF(hdr)), attr3_node_hdr_count, + FLD_COUNT, TYP_NONE }, + { "entries", FLDT_ATTR_LEAF_ENTRY, OI(L3OFF(entries)), + attr3_leaf_entries_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, + { "btree", FLDT_ATTR_NODE_ENTRY, OI(N3OFF(__btree)), + attr3_node_btree_count, FLD_ARRAY|FLD_COUNT, TYP_NONE }, + { "nvlist", FLDT_ATTR_LEAF_NAME, attr_leaf_nvlist_offset, + attr3_leaf_nvlist_count, FLD_ARRAY|FLD_OFFSET|FLD_COUNT, TYP_NONE }, + { NULL } +}; + +#define LH3OFF(f) bitize(offsetof(struct xfs_attr3_leaf_hdr, f)) +const field_t attr3_leaf_hdr_flds[] = { + { "info", FLDT_DA3_BLKINFO, OI(LH3OFF(info)), C1, 0, TYP_NONE }, + { "count", FLDT_UINT16D, OI(LH3OFF(count)), C1, 0, TYP_NONE }, + { "usedbytes", FLDT_UINT16D, OI(LH3OFF(usedbytes)), C1, 0, TYP_NONE }, + { "firstused", FLDT_UINT16D, OI(LH3OFF(firstused)), C1, 0, TYP_NONE }, + { "holes", FLDT_UINT8D, OI(LH3OFF(holes)), C1, 0, TYP_NONE }, + { "pad1", FLDT_UINT8X, OI(LH3OFF(pad1)), C1, FLD_SKIPALL, TYP_NONE }, + { "freemap", FLDT_ATTR_LEAF_MAP, OI(LH3OFF(freemap)), + CI(XFS_ATTR_LEAF_MAPSIZE), FLD_ARRAY, TYP_NONE }, + { NULL } +}; + diff --git a/db/attr.h b/db/attr.h index f659ac2..4a84b70 100644 --- a/db/attr.h +++ b/db/attr.h @@ -26,5 +26,9 @@ extern const field_t attr_leaf_name_flds[]; extern const field_t attr_node_entry_flds[]; extern const field_t attr_node_hdr_flds[]; +extern const field_t attr3_flds[]; +extern const field_t attr3_leaf_hdr_flds[]; +extern const field_t attr3_node_hdr_flds[]; + extern int attr_leaf_name_size(void *obj, int startoff, int idx); extern int attr_size(void *obj, int startoff, int idx); diff --git a/db/field.c b/db/field.c index cb15318..6a7a0e2 100644 --- a/db/field.c +++ b/db/field.c @@ -56,6 +56,8 @@ const ftattr_t ftattrtab[] = { FTARG_SKIPNULL, fa_agino, NULL }, { FLDT_AGNUMBER, "agnumber", fp_num, "%u", SI(bitsz(xfs_agnumber_t)), FTARG_DONULL, NULL, NULL }, + +/* attr fields */ { FLDT_ATTR, "attr", NULL, (char *)attr_flds, attr_size, FTARG_SIZE, NULL, attr_flds }, { FLDT_ATTR_BLKINFO, "attr_blkinfo", NULL, (char *)attr_blkinfo_flds, @@ -84,6 +86,17 @@ const ftattr_t ftattrtab[] = { fa_attrblock, NULL }, { FLDT_ATTRSHORT, "attrshort", NULL, (char *)attr_shortform_flds, attrshort_size, FTARG_SIZE, NULL, attr_shortform_flds }, + +/* attr3 specific fields */ + { FLDT_ATTR3, "attr", NULL, (char *)attr3_flds, attr_size, FTARG_SIZE, + NULL, attr3_flds }, + { FLDT_ATTR3_LEAF_HDR, "attr_leaf_hdr", NULL, + (char *)attr3_leaf_hdr_flds, SI(bitsz(struct xfs_attr3_leaf_hdr)), + 0, NULL, attr3_leaf_hdr_flds }, + { FLDT_ATTR3_NODE_HDR, "attr_node_hdr", NULL, + (char *)da3_node_hdr_flds, SI(bitsz(struct xfs_da3_node_hdr)), + 0, NULL, da3_node_hdr_flds }, + { FLDT_BMAPBTA, "bmapbta", NULL, (char *)bmapbta_flds, btblock_size, FTARG_SIZE, NULL, bmapbta_flds }, { FLDT_BMAPBTA_CRC, "bmapbta", NULL, (char *)bmapbta_crc_flds, diff --git a/db/field.h b/db/field.h index 5671571..9a12f1c 100644 --- a/db/field.h +++ b/db/field.h @@ -27,6 +27,8 @@ typedef enum fldt { FLDT_AGINO, FLDT_AGINONN, FLDT_AGNUMBER, + + /* attr fields */ FLDT_ATTR, FLDT_ATTR_BLKINFO, FLDT_ATTR_LEAF_ENTRY, @@ -39,6 +41,12 @@ typedef enum fldt { FLDT_ATTR_SF_HDR, FLDT_ATTRBLOCK, FLDT_ATTRSHORT, + + /* attr 3 specific fields */ + FLDT_ATTR3, + FLDT_ATTR3_LEAF_HDR, + FLDT_ATTR3_NODE_HDR, + FLDT_BMAPBTA, FLDT_BMAPBTA_CRC, FLDT_BMAPBTAKEY, diff --git a/db/type.c b/db/type.c index 0c64422..692ad73 100644 --- a/db/type.c +++ b/db/type.c @@ -53,6 +53,7 @@ static const typ_t __typtab[] = { { TYP_AGFL, "agfl", handle_struct, agfl_hfld }, { TYP_AGI, "agi", handle_struct, agi_hfld }, { TYP_ATTR, "attr", handle_struct, attr_hfld }, + { TYP_ATTR3, NULL, NULL, NULL }, { TYP_BMAPBTA, "bmapbta", handle_struct, bmapbta_hfld }, { TYP_BMAPBTD, "bmapbtd", handle_struct, bmapbtd_hfld }, { TYP_BNOBT, "bnobt", handle_struct, bnobt_hfld }, @@ -77,7 +78,8 @@ static const typ_t __typtab_crc[] = { { TYP_AGF, "agf", handle_struct, agf_hfld }, { TYP_AGFL, "agfl", handle_struct, agfl_crc_hfld }, { TYP_AGI, "agi", handle_struct, agi_hfld }, - { TYP_ATTR, "attr", handle_struct, attr_hfld }, + { TYP_ATTR, NULL, NULL, NULL }, + { TYP_ATTR3, "attr3", handle_struct, attr_hfld }, { TYP_BMAPBTA, "bmapbta", handle_struct, bmapbta_crc_hfld }, { TYP_BMAPBTD, "bmapbtd", handle_struct, bmapbtd_crc_hfld }, { TYP_BNOBT, "bnobt", handle_struct, bnobt_crc_hfld }, diff --git a/db/type.h b/db/type.h index 8fd8dc3..10946ad 100644 --- a/db/type.h +++ b/db/type.h @@ -23,7 +23,7 @@ struct field; typedef enum typnm { - TYP_AGF, TYP_AGFL, TYP_AGI, TYP_ATTR, TYP_BMAPBTA, + TYP_AGF, TYP_AGFL, TYP_AGI, TYP_ATTR, TYP_ATTR3, TYP_BMAPBTA, TYP_BMAPBTD, TYP_BNOBT, TYP_CNTBT, TYP_DATA, TYP_DIR2, TYP_DIR3, TYP_DQBLK, TYP_INOBT, TYP_INODATA, TYP_INODE, TYP_LOG, TYP_RTBITMAP, TYP_RTSUMMARY, TYP_SB, TYP_SYMLINK, -- 1.7.10.4 From rjohnston@sgi.com Thu May 23 09:01:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from lnx-rjohnston2.americas.sgi.com (lnx-rjohnston2.americas.sgi.com [128.162.233.55]) by oss.sgi.com (Postfix) with ESMTP id D0AB47F37 for ; Thu, 23 May 2013 09:01:01 -0500 (CDT) Received: from lnx-rjohnston2.americas.sgi.com (localhost [127.0.0.1]) by lnx-rjohnston2.americas.sgi.com (8.14.4/8.14.4/Debian-2ubuntu2) with ESMTP id r4NE1mZu020101 for ; Thu, 23 May 2013 09:01:48 -0500 Received: (from rjohnston@localhost) by lnx-rjohnston2.americas.sgi.com (8.14.4/8.14.4/Submit) id r4NE1lt4020100; Thu, 23 May 2013 09:01:47 -0500 Date: Thu, 23 May 2013 08:52:52 -0500 X-Authentication-Warning: lnx-rjohnston2.americas.sgi.com: rjohnston set sender to rjohnston@sgi.com using -f Message-Id: <20130523133837.333783222@sgi.com> User-Agent: quilt/0.47-15.17.1 From: rjohnston@sgi.com To: xfs@oss.sgi.com Subject: [PATCH V2] xfsprogs: libhandle/Makefile - fix make install-dev References: <20130522205819.586978467@gulag1.americas.sgi.com> The dependency for install-dev: is incorrect "default" and prevents libhandle from being installed correctly. After make && make install-dev # ls -l /lib64/libhandle* /usr/lib64/libhandle* lrwxrwxrwx 1 root root /lib64/libhandle.a -> /usr/lib64/libhandle.a lrwxrwxrwx 1 root root /lib64/libhandle.la -> /usr/lib64/libhandle.la lrwxrwxrwx 1 root root /lib64/libhandle.so -> libhandle.so.1 -rw-r--r-- 1 root root /usr/lib64/libhandle.a -rw-r--r-- 1 root root /usr/lib64/libhandle.la lrwxrwxrwx 1 root root /usr/lib64/libhandle.so -> /lib64/libhandle.so The shared library /lib64/libhandle.so.1.0.3 is not installed and the link /lib64/libhandle.so.1 -> libhandle.so.1.0.3 is not created. Change the dependency for install-dev: to "install" so the install looks like this. # ls -l /lib64/libhandle* /usr/lib64/libhandle* lrwxrwxrwx 1 root root /lib64/libhandle.a -> /usr/lib64/libhandle.a lrwxrwxrwx 1 root root /lib64/libhandle.la -> /usr/lib64/libhandle.la lrwxrwxrwx 1 root root /lib64/libhandle.so -> libhandle.so.1 lrwxrwxrwx 1 root root /lib64/libhandle.so.1 -> libhandle.so.1.0.3 -rwxr-xr-x 1 root root /lib64/libhandle.so.1.0.3 -rw-r--r-- 1 root root /usr/lib64/libhandle.a -rw-r--r-- 1 root root /usr/lib64/libhandle.la lrwxrwxrwx 1 root root /usr/lib64/libhandle.so -> /lib64/libhandle.so Signed-off-by: Rich Johnston -- V1->V2 As Dave pointed out removing the ltdepend would prevent proper rebuilds. Don't just make the install work ;) correct the dependency for install-dev. diff --git a/libhandle/Makefile b/libhandle/Makefile index 865ca22..081a386 100644 --- a/libhandle/Makefile +++ b/libhandle/Makefile @@ -22,7 +22,7 @@ include $(BUILDRULES) install: default $(INSTALL_LTLIB) -install-dev: default +install-dev: install $(INSTALL_LTLIB_DEV) install-qa: install-dev From p.pisati@gmail.com Thu May 23 09:35:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9A8537F37 for ; Thu, 23 May 2013 09:35:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 861708F8068 for ; Thu, 23 May 2013 07:35:02 -0700 (PDT) X-ASG-Debug-ID: 1369319700-04cbb0049e99950001-NocioJ Received: from mail-ea0-f178.google.com (mail-ea0-f178.google.com [209.85.215.178]) by cuda.sgi.com with ESMTP id ITMaq5yGxhkI2UcR (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 23 May 2013 07:35:01 -0700 (PDT) X-Barracuda-Envelope-From: p.pisati@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.178 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.178] Received: by mail-ea0-f178.google.com with SMTP id q16so1901295ead.37 for ; Thu, 23 May 2013 07:35:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.178] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.178] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=7pZSAZCAzGK6YLFls7rnFluUp1C0n/kF8w1s8R/uums=; b=yOxZz4eKkpXJdfJ5OyDuKt7EUEzrlfKhu78rpOp+FnDzfTPxb/ojgkEbH/ROPoxsza Z+1ntO9i4g+EOBGWG1RqO3ydZGkreyNBBIlltKLUyT58y0lFC/cVpQ5Ig0SYNYgArizg 9LOGXkEFSiF0zwFshzf4fKgKr1yz3MDp0fxjD6gldIYLRUytXWJM/x6aiBJz9tRjI8lh ExZ0qovbStgOm3tluNoIDM4VaFtLscb2ZxjkIvAaCuJaxwY+OCW8EtyZO+Bc1PpPRleq irBY9rOdpr17qovJ0ATSh5ZRlfYnFDeIu7Y9q5z+A3j9w+Tiwn2qLC/tefQh3MWw8HEl sFpw== X-Received: by 10.14.246.137 with SMTP id q9mr31569453eer.39.1369319700007; Thu, 23 May 2013 07:35:00 -0700 (PDT) Received: from gmail.com (2-230-238-136.ip204.fastwebnet.it. [2.230.238.136]) by mx.google.com with ESMTPSA id bn53sm17242975eeb.7.2013.05.23.07.34.58 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 23 May 2013 07:34:59 -0700 (PDT) Date: Thu, 23 May 2013 16:34:56 +0200 From: Paolo Pisati To: Dave Chinner Cc: Paolo Pisati , xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130523143456.GB19815@luxor.wired.org> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> <20130519011354.GE6495@dastard> <20130520170710.GA2591@luxor.wired.org> <20130521000208.GF24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130521000208.GF24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-ea0-f178.google.com[209.85.215.178] X-Barracuda-Start-Time: 1369319700 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131799 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, May 21, 2013 at 10:02:09AM +1000, Dave Chinner wrote: > > And that fix I mentioned will be useless if you don't apply the > patch that avoids the vmap allocation problem.... ok, so i recompiled a kernel+aforementioend fix, i repartitioned my disk and i ran the swift-bench for 2 days in a row until i got this: dmesg: ... [163596.605253] updatedb.mlocat: page allocation failure: order:0, mode:0x20 [163596.605299] [] (unwind_backtrace+0x0/0x104) from [] (dump_stack+0x20/0x24) [163596.605320] [] (dump_stack+0x20/0x24) from [] (warn_alloc_failed+0xd8/0x118) [163596.605335] [] (warn_alloc_failed+0xd8/0x118) from [] (__alloc_pages_nodemask+0x524/0x708) [163596.605354] [] (__alloc_pages_nodemask+0x524/0x708) from [] (new_slab+0x22c/0x248) [163596.605370] [] (new_slab+0x22c/0x248) from [] (__slab_alloc.constprop.46+0x1a4/0x4c8) [163596.605383] [] (__slab_alloc.constprop.46+0x1a4/0x4c8) from [] (kmem_cache_alloc+0x158/0x190) [163596.605402] [] (kmem_cache_alloc+0x158/0x190) from [] (scsi_pool_alloc_command+0x30/0x74) [163596.605417] [] (scsi_pool_alloc_command+0x30/0x74) from [] (scsi_host_alloc_command+0x24/0x78) [163596.605428] [] (scsi_host_alloc_command+0x24/0x78) from [] (__scsi_get_command+0x1c/0xa0) [163596.605439] [] (__scsi_get_command+0x1c/0xa0) from [] (scsi_get_command+0x3c/0xb0) [163596.605453] [] (scsi_get_command+0x3c/0xb0) from [] (scsi_get_cmd_from_req+0x50/0x60) [163596.605466] [] (scsi_get_cmd_from_req+0x50/0x60) from [] (scsi_setup_fs_cmnd+0x4c/0xac) [163596.605482] [] (scsi_setup_fs_cmnd+0x4c/0xac) from [] (sd_prep_fn+0x114/0xaf4) [163596.605501] [] (sd_prep_fn+0x114/0xaf4) from [] (blk_peek_request+0xc8/0x214) [163596.605514] [] (blk_peek_request+0xc8/0x214) from [] (scsi_request_fn+0x40/0x504) [163596.605524] [] (scsi_request_fn+0x40/0x504) from [] (blk_queue_bio+0x300/0x384) [163596.605536] [] (blk_queue_bio+0x300/0x384) from [] (generic_make_request+0xb8/0xd8) [163596.605548] [] (generic_make_request+0xb8/0xd8) from [] (submit_bio+0xc4/0x17c) [163596.605756] [] (submit_bio+0xc4/0x17c) from [] (_xfs_buf_ioapply+0x1bc/0x224 [xfs]) [163596.606002] [] (_xfs_buf_ioapply+0x1bc/0x224 [xfs]) from [] (xfs_buf_iorequest+0x4c/0x98 [xfs]) [163596.606241] [] (xfs_buf_iorequest+0x4c/0x98 [xfs]) from [] (_xfs_buf_read+0x34/0x50 [xfs]) [163596.606481] [] (_xfs_buf_read+0x34/0x50 [xfs]) from [] (xfs_buf_read+0xe0/0x108 [xfs]) [163596.606781] [] (xfs_buf_read+0xe0/0x108 [xfs]) from [] (xfs_trans_read_buf+0x1e4/0x3e8 [xfs]) [163596.607115] [] (xfs_trans_read_buf+0x1e4/0x3e8 [xfs]) from [] (xfs_imap_to_bp+0x54/0x128 [xfs]) [163596.607432] [] (xfs_imap_to_bp+0x54/0x128 [xfs]) from [] (xfs_iread+0x6c/0x150 [xfs]) [163596.607719] [] (xfs_iread+0x6c/0x150 [xfs]) from [] (xfs_iget+0x210/0x72c [xfs]) [163596.607982] [] (xfs_iget+0x210/0x72c [xfs]) from [] (xfs_lookup+0xf4/0x114 [xfs]) [163596.608247] [] (xfs_lookup+0xf4/0x114 [xfs]) from [] (xfs_vn_lookup+0x54/0x98 [xfs]) [163596.608387] [] (xfs_vn_lookup+0x54/0x98 [xfs]) from [] (__lookup_hash+0x64/0xec) [163596.608402] [] (__lookup_hash+0x64/0xec) from [] (lookup_slow+0x50/0xac) [163596.608415] [] (lookup_slow+0x50/0xac) from [] (path_lookupat+0x730/0x794) [163596.608428] [] (path_lookupat+0x730/0x794) from [] (do_path_lookup+0x2c/0xd0) [163596.608439] [] (do_path_lookup+0x2c/0xd0) from [] (user_path_at_empty+0x64/0x8c) [163596.608451] [] (user_path_at_empty+0x64/0x8c) from [] (user_path_at+0x24/0x2c) [163596.608462] [] (user_path_at+0x24/0x2c) from [] (vfs_fstatat+0x40/0x78) [163596.608473] [] (vfs_fstatat+0x40/0x78) from [] (vfs_lstat+0x28/0x2c) [163596.608482] [] (vfs_lstat+0x28/0x2c) from [] (sys_lstat64+0x24/0x40) [163596.608495] [] (sys_lstat64+0x24/0x40) from [] (ret_fast_syscall+0x0/0x30) [163596.608503] Mem-info: [163596.608509] Normal per-cpu: [163596.608515] CPU 0: hi: 186, btch: 31 usd: 38 [163596.608521] CPU 1: hi: 186, btch: 31 usd: 218 [163596.608528] CPU 2: hi: 186, btch: 31 usd: 152 [163596.608533] CPU 3: hi: 186, btch: 31 usd: 171 [163596.608538] HighMem per-cpu: [163596.608544] CPU 0: hi: 186, btch: 31 usd: 46 [163596.608549] CPU 1: hi: 186, btch: 31 usd: 171 [163596.608555] CPU 2: hi: 186, btch: 31 usd: 168 [163596.608561] CPU 3: hi: 186, btch: 31 usd: 177 [163596.608574] active_anon:26367 inactive_anon:29153 isolated_anon:0 [163596.608574] active_file:396338 inactive_file:397959 isolated_file:0 [163596.608574] unevictable:0 dirty:0 writeback:5 unstable:0 [163596.608574] free:5145 slab_reclaimable:57625 slab_unreclaimable:7729 [163596.608574] mapped:1703 shmem:10 pagetables:581 bounce:0 [163596.608602] Normal free:15256kB min:3508kB low:4384kB high:5260kB active_anon:0kB inactive_anon:8kB active_file:848kB inactive_file:1560kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:772160kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:230500kB slab_unreclaimable:30916kB kernel_stack:2208kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no [163596.608607] lowmem_reserve[]: 0 26423 26423 [163596.608628] HighMem free:5324kB min:512kB low:4352kB high:8192kB active_anon:105468kB inactive_anon:116604kB active_file:1584504kB inactive_file:1590276kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:3382264kB mlocked:0kB dirty:0kB writeback:20kB mapped:6812kB shmem:40kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:2324kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no [163596.608634] lowmem_reserve[]: 0 0 0 [163596.608643] Normal: 216*4kB 215*8kB 216*16kB 216*32kB 36*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 15256kB [163596.608668] HighMem: 233*4kB 67*8kB 141*16kB 22*32kB 8*64kB 1*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 5324kB [163596.608692] 794329 total pagecache pages [163596.608697] 12 pages in swap cache [163596.608703] Swap cache stats: add 79, delete 67, find 9/11 [163596.608708] Free swap = 8378092kB [163596.608712] Total swap = 8378364kB [163596.670667] 1046784 pages of RAM [163596.670674] 6801 free pages [163596.670679] 12533 reserved pages [163596.670683] 36489 slab pages [163596.670687] 631668 pages shared [163596.670692] 12 pages swap cached [163596.670701] SLUB: Unable to allocate memory on node -1 (gfp=0x8020) [163596.670710] cache: kmalloc-192, object size: 192, buffer size: 192, default order: 0, min order: 0 [163596.670718] node 0: slabs: 2733, objs: 57393, free: 0 df -h: ... /dev/sda6 216G 53G 163G 25% /mnt/sdb1 df -i: ... /dev/sda6 56451072 19721920 36729152 35% /mnt/sdb1 flag@c13:~$ cat /proc/meminfo MemTotal: 4137004 kB MemFree: 1191096 kB Buffers: 23172 kB Cached: 2074116 kB SwapCached: 48 kB Active: 1301568 kB Inactive: 1016024 kB Active(anon): 103748 kB Inactive(anon): 116600 kB Active(file): 1197820 kB Inactive(file): 899424 kB Unevictable: 0 kB Mlocked: 0 kB HighTotal: 3408896 kB HighFree: 1108444 kB LowTotal: 728108 kB LowFree: 82652 kB SwapTotal: 8378364 kB SwapFree: 8378092 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 220284 kB Mapped: 7068 kB Shmem: 44 kB Slab: 263216 kB SReclaimable: 232212 kB SUnreclaim: 31004 kB KernelStack: 2192 kB PageTables: 2312 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 10446864 kB Committed_AS: 1051868 kB VmallocTotal: 245760 kB VmallocUsed: 2360 kB VmallocChunk: 241428 kB flag@c13:~$ sudo xfs_db -r "-c freesp -s" /dev/sda6 from to extents blocks pct 1 1 27058 27058 0.06 2 3 124367 358831 0.84 4 7 17656 121693 0.29 8 15 2856900 42122381 98.81 total free extents 3025981 total free blocks 42629963 average free extent size 14.088 -- bye, p. From davej@redhat.com Thu May 23 10:17:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 60A0C7F37 for ; Thu, 23 May 2013 10:17:32 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D3759AC011 for ; Thu, 23 May 2013 08:17:28 -0700 (PDT) X-ASG-Debug-ID: 1369322247-04cbb0049c9c680001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id vdW3XqAkFtmnjgNf for ; Thu, 23 May 2013 08:17:27 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NFHOxR019000 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 11:17:24 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4NFHNm3009518 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 11:17:24 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4NFHMFv022046; Thu, 23 May 2013 11:17:22 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4NFHLZ0022045; Thu, 23 May 2013 11:17:21 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 11:17:21 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130523151721.GC16419@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522142252.GB1407@redhat.com> <20130522161946.GA25906@redhat.com> <20130522220933.GV24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522220933.GV24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369322247 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, May 23, 2013 at 08:09:33AM +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 12:19:46PM -0400, Dave Jones wrote: > > On Wed, May 22, 2013 at 10:22:52AM -0400, Dave Jones wrote: > > > On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > > > > > > > > Tomorrow I'll also try running some older kernels with the same > > > > > options to see if it's something new, or an older bug. This is a > > > > > new machine, so it may be something that's been around for a > > > > > while, and for whatever reason, my other machines don't hit > > > > > this. > > > > > > > > Another thing that just occurred to me - what compiler are you > > > > using? We had a report last week on #xfs that xfsdump was failing > > > > with bad checksums because of link time optimisation (LTO) in > > > > gcc-4.8.0. When they turned that off, everything worked fine. So if > > > > you are using 4.8.0, perhaps trying a different compiler might be a > > > > good idea, too. > > > > > > Yeah, this is 4.8.0. This box is running F19-beta. > > > I managed to shoehorn the gcc-4.7 from f18 on there though. > > > Bug reproduced instantly, so I think we can rule out compiler. > > > > > > I ran 3.9 with the same debug options. Seems stable. > > > I'll do a bisect. > > > > good news. It wasn't until I started bisecting I realised I was still > > carrying this patch from you to fix slab corruption I was seeing. > > > > It seems to be the culprit (or is masking another problem -- I had to apply > > it at each step of the bisect to get past the slab corruption bug). > > That doesn't make a whole lot of sense to me. The fix in the xfsdev > tree is a little different: > > http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs.git;a=commitdiff;h=52c24ad39ff02d7bd73c92eb0c926fb44984a41d I did an rc2 build with just that commit on top, and can't reproduce this at all now. (At least not with the reproducer that worked previously). > but I can't set how this makes any difference to the problem at all. Mysterious. Dave From bpm@sgi.com Thu May 23 10:23:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D791C7F4E for ; Thu, 23 May 2013 10:23:39 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 56126AC004; Thu, 23 May 2013 08:23:39 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id C679A500B5E; Thu, 23 May 2013 10:23:38 -0500 (CDT) Date: Thu, 23 May 2013 10:23:38 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write Message-ID: <20130523152338.GS20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-9-git-send-email-david@fromorbit.com> <20130522222608.GR20028@sgi.com> <20130523000327.GQ29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523000327.GQ29466@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, May 23, 2013 at 10:03:27AM +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 05:26:08PM -0500, Ben Myers wrote: > > On Tue, May 21, 2013 at 06:02:07PM +1000, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > We write the superblock every 30s or so which results in the > > > verifier being called. Right now that results in this output > > > every 30s: > > > > > > XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! > > > Use of these features in this kernel is at your own risk! > > > > > > And spamming the logs. Stop this output from occurring on superblock > > > writes. > > > > > > Signed-off-by: Dave Chinner > > > --- > > > fs/xfs/xfs_mount.c | 18 +++++++++++------- > > > 1 file changed, 11 insertions(+), 7 deletions(-) > > > > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > > index f6bfbd7..e8e310c 100644 > > > --- a/fs/xfs/xfs_mount.c > > > +++ b/fs/xfs/xfs_mount.c > > > @@ -314,7 +314,8 @@ STATIC int > > > xfs_mount_validate_sb( > > > xfs_mount_t *mp, > > > xfs_sb_t *sbp, > > > - bool check_inprogress) > > > + bool check_inprogress, > > > + bool check_version) > > > { > > > > > > /* > > > @@ -337,9 +338,10 @@ xfs_mount_validate_sb( > > > > > > /* > > > * Version 5 superblock feature mask validation. Reject combinations the > > > - * kernel cannot support up front before checking anything else. > > > + * kernel cannot support up front before checking anything else. For > > > + * write validation, we don't need to check feature masks. > > > */ > > > - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > > > + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > > > > if (!quiet_version) { > > > xfs_alert(mp, > > > "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" > > > "Use of these features in this kernel is at your own risk!"); > > > > } > > > > Since the stated goal of the patch is to be quieter and not to disable useful > > tests in the verifier, I suggest you disable the print rather than disable the > > test. > > Checking the feature fields for whether the kernel supports the > features in them on write is not useful in any way. Could it not detect corruption of the feature flags before they're written out? My impression was that this was among the design goals of the verifiers. > That's why the > variable is named "check_version" because it skips the v5 > version field checking. This is stuff that is used by the mount > path (i.e. superblock read path), not the writeback path. You were saying above that it's the write path that is spamming the logs. -Ben From rjohnston@sgi.com Thu May 23 10:37:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A27AD7F3F for ; Thu, 23 May 2013 10:37:59 -0500 (CDT) Received: from gulag1.americas.sgi.com (gulag1.americas.sgi.com [128.162.236.41]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3CEA9AC004 for ; Thu, 23 May 2013 08:37:59 -0700 (PDT) Received: by gulag1.americas.sgi.com (Postfix, from userid 48222) id 08322AD11BBF; Thu, 23 May 2013 10:37:58 -0500 (CDT) Message-Id: <20130523143005.713972968@sgi.com> User-Agent: quilt/0.47-15.17.1 From: rjohnston@sgi.com To: xfs@oss.sgi.com Subject: [PATCH V3] xfsprogs: libhandle/Makefile - fix make install-dev References: <20130522205819.586978467@gulag1.americas.sgi.com> Date: Thu, 23 May 2013 10:37:59 -0500 (CDT) Both make install and make install-dev are required to install all the pieces of libhandle. # rm -f /lib64/libhandle* /usr/lib64/libhandle* # make install # ls -l /lib64/libhandle* /usr/lib64/libhandle* ls: cannot access /usr/lib64/libhandle*: No such file or directory lrwxrwxrwx 1 root root /lib64/libhandle.so.1 -> libhandle.so.1.0.3 -rwxr-xr-x 1 root root /lib64/libhandle.so.1.0.3 # rm -f /lib64/libhandle* /usr/lib64/libhandle* # make install-dev # ls -l /lib64/libhandle* /usr/lib64/libhandle* lrwxrwxrwx 1 root root /lib64/libhandle.a -> /usr/lib64/libhandle.a lrwxrwxrwx 1 root root /lib64/libhandle.la -> /usr/lib64/libhandle.la lrwxrwxrwx 1 root root /lib64/libhandle.so -> libhandle.so.1 -rw-r--r-- 1 root root /usr/lib64/libhandle.a -rw-r--r-- 1 root root /usr/lib64/libhandle.la lrwxrwxrwx 1 root root /usr/lib64/libhandle.so -> /lib64/libhandle.so Fix the libtool macros INSTALL_LTLIB and INSTALL_LTLIB_DEV. Signed-off-by: Rich Johnston -- V1->V2 As Dave pointed out removing the ltdepend would prevent proper rebuilds. Don't just make the install work ;) correct the dependancy for install-dev. V2->V3 Not a libtool expert, make the change to the libtool macros instead of cluttering up the Makefile. diff --git a/include/buildmacros b/include/buildmacros index 7a01880..98d25af 100644 --- a/include/buildmacros +++ b/include/buildmacros @@ -54,13 +54,7 @@ LTLDFLAGS += -rpath $(PKG_ROOT_LIB_DIR) LTLDFLAGS += -version-info $(LTVERSION) endif -ifeq ($(ENABLE_SHARED),yes) -INSTALL_LTLIB = \ - cd $(TOPDIR)/$(LIBNAME)/.libs; \ - ../$(INSTALL) -m 755 -d $(PKG_ROOT_LIB_DIR); \ - ../$(INSTALL) -m 755 -T so_dot_version $(LIBNAME).lai $(PKG_ROOT_LIB_DIR); \ - ../$(INSTALL) -T so_dot_current $(LIBNAME).lai $(PKG_ROOT_LIB_DIR) -endif +INSTALL_LTLIB = $(INSTALL_LTLIB_DEV) # Libtool thinks the static and shared libs should be in the same dir, so # make the static lib appear in the place we chose as rpath (using the two @@ -75,6 +69,8 @@ INSTALL_LTLIB_DEV = \ ../$(INSTALL) -m 644 -T old_lib $(LIBNAME).lai $(PKG_LIB_DIR); \ ../$(INSTALL) -m 644 $(LIBNAME).lai $(PKG_LIB_DIR)/$(LIBNAME).la ; \ ../$(INSTALL) -m 755 -d $(PKG_ROOT_LIB_DIR); \ + ../$(INSTALL) -m 755 -T so_dot_version $(LIBNAME).lai $(PKG_ROOT_LIB_DIR); \ + ../$(INSTALL) -T so_dot_current $(LIBNAME).lai $(PKG_ROOT_LIB_DIR); \ ../$(INSTALL) -T so_base $(LIBNAME).lai $(PKG_ROOT_LIB_DIR); \ if test "x$(PKG_LIB_DIR)" != "x$(PKG_ROOT_LIB_DIR)" ; then \ ../$(INSTALL) -S $(PKG_LIB_DIR)/$(LIBNAME).a $(PKG_ROOT_LIB_DIR)/$(LIBNAME).a; \ From sandeen@sandeen.net Thu May 23 10:47:47 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 38CC87F37 for ; Thu, 23 May 2013 10:47:47 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B48EAAC003 for ; Thu, 23 May 2013 08:47:46 -0700 (PDT) X-ASG-Debug-ID: 1369324064-04cbb0049d9eec0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id jGupTrwUCJlWOhlv for ; Thu, 23 May 2013 08:47:45 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 95ABC651AC21; Thu, 23 May 2013 10:47:44 -0500 (CDT) Message-ID: <519E3A20.7060102@sandeen.net> Date: Thu, 23 May 2013 10:47:44 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss Subject: [PATCH, V2] xfstests: fail test if it causes a kernel taint References: <51916146.80308@redhat.com> X-ASG-Orig-Subj: [PATCH, V2] xfstests: fail test if it causes a kernel taint In-Reply-To: <51916146.80308@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369324064 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131803 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This modification will fail a test if it introduces one of a handful of "serious" kernel taints. I mask on a few taint values because using an out of tree module or a non-GPL module should never fail a test, for example. Signed-off-by: Eric Sandeen --- Tested by modifying tests/generic/001 to modprobe a "staging" driver, and adding the staging taint bit (1024) to the mask. V2: fail test by modifying the test output so the golden output check will fail, per dchinner's suggestion. diff --git a/check b/check index a79747e..7ba6696 100755 --- a/check +++ b/check @@ -446,6 +446,11 @@ do fi rm -f core $seqres.notrun + if [ "$HOSTOS" == "Linux" ]; then + tainted=`sysctl -n kernel.tainted` + let "tainted &= $TAINT_FAIL" + fi + start=`_wallclock` $timestamp && echo -n " ["`date "+%T"`"]" [ ! -x $seq ] && chmod u+x $seq # ensure we can run it @@ -458,6 +463,19 @@ do _fix_malloc <$tmp.rawout >$tmp.out rm -f $tmp.rawout + # See if this run tainted the kernel due to oops, etc + # If so, break the test via the golden output file + if [ "$HOSTOS" == "Linux" ] + then + tainted2=`sysctl -n kernel.tainted` + let "tainted2 &= $TAINT_FAIL" + if [ "$tainted" != "$tainted2" ] + then + echo " Kernel taint changed from $tainted to $tainted2." >> $tmp.out + echo " See dmesg for details." >> $tmp.out + fi + fi + if [ -f core ] then echo -n " [dumped core]" diff --git a/common/config b/common/config index 67c1498..6483ded 100644 --- a/common/config +++ b/common/config @@ -82,6 +82,15 @@ export PWD=`pwd` export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a} export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes} +# kernel taint values on Linux (from kernel.taint sysctl) +TAINT_MACHINE_CHECK=16 +TAINT_BAD_PAGE=32 +TAINT_DIED=128 +TAINT_WARNING=512 +# If a test introduces one of these taints we consider it to have failed +let "TAINT_FAIL=( $TAINT_MACHINE_CHECK | $TAINT_BAD_PAGE | $TAINT_DIED | $TAINT_WARNING )" +export TAINT_FAIL + # $1 = prog to look for, $2* = default pathnames if not found in $PATH set_prog_path() { From sandeen@redhat.com Thu May 23 11:36:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 55CF87F37 for ; Thu, 23 May 2013 11:36:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 32DD1304077 for ; Thu, 23 May 2013 09:36:36 -0700 (PDT) X-ASG-Debug-ID: 1369326995-04cbb0049ca2d70001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id WLGx8iDxSaftaF55 for ; Thu, 23 May 2013 09:36:35 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NGaX4i011874 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 12:36:34 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4NGaWv5021497 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 23 May 2013 12:36:33 -0400 Message-ID: <519E4590.4080309@redhat.com> Date: Thu, 23 May 2013 11:36:32 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , linux-btrfs CC: Koen De Wit Subject: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369326995 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 From: Koen De Wit # Tests file clone functionality of btrfs ("reflinks"): # - Reflink a file # - Reflink the reflinked file # - Modify the original file # - Modify the reflinked file [sandeen: add helpers, make several mostly-cosmetic changes to the original testcase] Signed-off-by: Koen De Wit Signed-off-by: Eric Sandeen --- Originally submitted as test 297 diff --git a/common/rc b/common/rc index fe6bbfc..4560715 100644 --- a/common/rc +++ b/common/rc @@ -2098,6 +2098,27 @@ _require_dumpe2fs() fi } +_require_cp_reflink() +{ + cp --help | grep -q reflink || \ + _notrun "This test requires a cp with --reflink support." +} + +# Given 2 files, verify that they have the same mapping but different +# inodes - i.e. an undisturbed reflink +# Silent if so, make noise if not +_verify_reflink() +{ + # not a hard link or symlink? + cmp -s <(stat -c '%i' $1) <(stat -c '%i' $2) \ + && echo "$1 and $2 are not reflinks: same inode number" + + # same mapping? + diff -u <($XFS_IO_PROG -F -c "fiemap" $1 | grep -v $1) \ + <($XFS_IO_PROG -F -c "fiemap" $2 | grep -v $2) \ + || echo "$1 and $2 are not reflinks: different extents" +} + _create_loop_device() { file=$1 diff --git a/tests/btrfs/308 b/tests/btrfs/308 new file mode 100755 index 0000000..1bb8f02 --- /dev/null +++ b/tests/btrfs/308 @@ -0,0 +1,87 @@ +#! /bin/bash +# FS QA Test No. btrfs/308 +# +# Tests file clone functionality of btrfs ("reflinks"): +# - Reflink a file +# - Reflink the reflinked file +# - Modify the original file +# - Modify the reflinked file +# +#----------------------------------------------------------------------- +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. common/rc +. common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux + +_require_xfs_io_fiemap +_require_cp_reflink + +TESTDIR1=$TEST_DIR/test-$seq +rm -rf $TESTDIR1 +mkdir $TESTDIR1 + +_checksum_files() { + for F in original copy1 copy2 + do + md5sum $TESTDIR1/$F | _filter_test_dir + done +} + +rm -f $seqres.full + +echo "Create the original file and reflink to copy1, copy2" +$XFS_IO_PROG -F -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original >> $seqres.full 2>&1 +cp --reflink $TESTDIR1/original $TESTDIR1/copy1 +cp --reflink $TESTDIR1/copy1 $TESTDIR1/copy2 +_verify_reflink $TESTDIR1/original $TESTDIR1/copy1 +_verify_reflink $TESTDIR1/original $TESTDIR1/copy2 +echo "Original md5sums:" +_checksum_files + +echo "Overwrite original file with new data" +$XFS_IO_PROG -c 'pwrite -S 0x62 0 9000' $TESTDIR1/original >> $seqres.full 2>&1 +echo "md5sums after overwriting original:" +_checksum_files + +echo "Overwrite copy1 with different new data" +$XFS_IO_PROG -c 'pwrite -S 0x63 0 9000' $TESTDIR1/copy1 >> $seqres.full 2>&1 +echo "md5sums after overwriting copy1:" +_checksum_files + +# success, all done +status=0 +exit diff --git a/tests/btrfs/308.out b/tests/btrfs/308.out new file mode 100644 index 0000000..7bccf08 --- /dev/null +++ b/tests/btrfs/308.out @@ -0,0 +1,16 @@ +QA output created by 308 +Create the original file and reflink to copy1, copy2 +Original md5sums: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/original +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy1 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy2 +Overwrite original file with new data +md5sums after overwriting original: +4a847a25439532bf48b68c9e9536ed5b TEST_DIR/test-308/original +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy1 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy2 +Overwrite copy1 with different new data +md5sums after overwriting copy1: +4a847a25439532bf48b68c9e9536ed5b TEST_DIR/test-308/original +e271cd47d9f62ebc96cb4e67ae4d16db TEST_DIR/test-308/copy1 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy2 diff --git a/tests/btrfs/group b/tests/btrfs/group index bc6c256..f24628c 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -9,3 +9,4 @@ 276 auto rw metadata 284 auto 307 auto quick +308 auto quick reflink From sandeen@redhat.com Thu May 23 11:43:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E4BF57F37 for ; Thu, 23 May 2013 11:43:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B3D3F8F807A for ; Thu, 23 May 2013 09:43:35 -0700 (PDT) X-ASG-Debug-ID: 1369327414-04bdf07817a2b30001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id xwHAHOpo8TNf9RoS for ; Thu, 23 May 2013 09:43:34 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NGhXgG007249 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 12:43:33 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4NGhWFu027083 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 23 May 2013 12:43:33 -0400 Message-ID: <519E4734.40904@redhat.com> Date: Thu, 23 May 2013 11:43:32 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , linux-btrfs CC: Koen De Wit Subject: [PATCH] xfstests: btrfs/309: sparse copy of a directory tree on btrfs X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: btrfs/309: sparse copy of a directory tree on btrfs Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369327414 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com # Tests file clone functionality of btrfs ("reflinks") on directory trees. # - Create directory and subdirectory, each having one file # - Create 2 recursive reflinked copies of the tree # - Modify the original files # - Modify one of the copies [sandeen: mostly cosmetic changes] Signed-off-by: Koen De Wit Signed-off-by: Eric Sandeen --- Originally submitted as xfstests: 298: sparse copy of a directory tree on btrfs diff --git a/tests/btrfs/309 b/tests/btrfs/309 new file mode 100755 index 0000000..b3927ba --- /dev/null +++ b/tests/btrfs/309 @@ -0,0 +1,98 @@ +#! /bin/bash +# FS QA Test No. btrfs/309 +# +# Tests file clone functionality of btrfs ("reflinks") on directory trees. +# - Create directory and subdirectory, each having one file +# - Create 2 recursive reflinked copies of the tree +# - Modify the original files +# - Modify one of the copies +# +#----------------------------------------------------------------------- +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. common/rc +. common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux + +_require_xfs_io_fiemap +_require_cp_reflink + +TESTDIR1=$TEST_DIR/test-$seq +rm -rf $TESTDIR1 +mkdir $TESTDIR1 + +_checksum_files() { + for F in original/file1 original/subdir/file2 \ + copy1/file1 copy1/subdir/file2 \ + copy2/file1 copy2/subdir/file2 + do + md5sum $TESTDIR1/$F | _filter_test_dir + done +} + +rm -f $seqres.full + +mkdir $TESTDIR1/original +mkdir $TESTDIR1/original/subdir + +echo "Create the original files and reflink dirs" +$XFS_IO_PROG -F -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original/file1 >> $seqres.full 2>&1 +$XFS_IO_PROG -F -f -c 'pwrite -S 0x62 0 11000' $TESTDIR1/original/subdir/file2 >> $seqres.full 2>&1 +cp --recursive --reflink $TESTDIR1/original $TESTDIR1/copy1 +cp --recursive --reflink $TESTDIR1/copy1 $TESTDIR1/copy2 + +_verify_reflink $TESTDIR1/original/file1 $TESTDIR1/copy1/file1 +_verify_reflink $TESTDIR1/original/subdir/file2 $TESTDIR1/copy1/subdir/file2 +_verify_reflink $TESTDIR1/original/file1 $TESTDIR1/copy2/file1 +_verify_reflink $TESTDIR1/original/subdir/file2 $TESTDIR1/copy2/subdir/file2 + +echo "Original md5sums:" +_checksum_files + +echo "Overwrite original/file1 and original/subdir/file2 with new data" +$XFS_IO_PROG -c 'pwrite -S 0x63 0 13000' $TESTDIR1/original/file1 >> $seqres.full 2>&1 +$XFS_IO_PROG -c 'pwrite -S 0x64 5000 1000' $TESTDIR1/original/subdir/file2 >> $seqres.full 2>&1 +echo "md5sums now:" +_checksum_files + +echo "Overwrite copy1/file1 and copy1/subdir/file2 with new data" +$XFS_IO_PROG -c 'pwrite -S 0x65 0 9000' $TESTDIR1/copy1/file1 >> $seqres.full 2>&1 +$XFS_IO_PROG -c 'pwrite -S 0x66 5000 25000' $TESTDIR1/copy1/subdir/file2 >> $seqres.full 2>&1 +echo "md5sums now:" +_checksum_files + +# success, all done +status=0 +exit diff --git a/tests/btrfs/309.out b/tests/btrfs/309.out new file mode 100644 index 0000000..93197d8 --- /dev/null +++ b/tests/btrfs/309.out @@ -0,0 +1,25 @@ +QA output created by 309 +Create the original files and reflink dirs +Original md5sums: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/original/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/original/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy1/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy1/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 +Overwrite original/file1 and original/subdir/file2 with new data +md5sums now: +260f6785c0537fd12582dcae28a3c1a9 TEST_DIR/test-309/original/file1 +b8d91fb600f6f2191f2ba66665374860 TEST_DIR/test-309/original/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy1/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy1/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 +Overwrite copy1/file1 and copy1/subdir/file2 with new data +md5sums now: +260f6785c0537fd12582dcae28a3c1a9 TEST_DIR/test-309/original/file1 +b8d91fb600f6f2191f2ba66665374860 TEST_DIR/test-309/original/subdir/file2 +b20229a003e3985c4b0e6806abcd6642 TEST_DIR/test-309/copy1/file1 +b815b24069db14e0a3a07169fd563e93 TEST_DIR/test-309/copy1/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 diff --git a/tests/btrfs/group b/tests/btrfs/group index f24628c..a5bd6aa 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -10,3 +10,4 @@ 284 auto 307 auto quick 308 auto quick reflink +309 auto quick reflink From sandeen@redhat.com Thu May 23 11:50:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2AFED7F37 for ; Thu, 23 May 2013 11:50:25 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 169D0304053 for ; Thu, 23 May 2013 09:50:25 -0700 (PDT) X-ASG-Debug-ID: 1369327821-04cbb0049aa3950001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 4w8q9oj42ju5amhA for ; Thu, 23 May 2013 09:50:21 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NGoEwk028930 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 12:50:19 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4NGoCJE029584 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 23 May 2013 12:50:13 -0400 Message-ID: <519E48C4.9080807@redhat.com> Date: Thu, 23 May 2013 11:50:12 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , linux-btrfs , Koen De Wit Subject: [PATCH] xfstests: btrfs/310: moving and deleting sparse copies on btrfs X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: btrfs/310: moving and deleting sparse copies on btrfs Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369327821 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 # Moving and deleting cloned ("reflinked") files on btrfs: # - Create a file and a reflink # - Move both to a directory # - Delete the original (moved) file, check that the copy still exists. [sandeen: mostly cosmetic changes] Signed-off-by: Koen De Wit Signed-off-by: Eric Sandeen --- Originally submitted as xfstests: 299: moving and deleting sparse copies on btrfs diff --git a/tests/btrfs/310 b/tests/btrfs/310 new file mode 100755 index 0000000..f87e782 --- /dev/null +++ b/tests/btrfs/310 @@ -0,0 +1,79 @@ +#! /bin/bash +# FS QA Test No. btrfs/310 +# +# Moving and deleting cloned ("reflinked") files on btrfs: +# - Create a file and a reflink +# - Move both to a directory +# - Delete the original (moved) file, check that the copy still exists. +# +#----------------------------------------------------------------------- +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux + +_require_xfs_io_fiemap +_require_cp_reflink + +rm -f $seqres.full + +TESTDIR1=$TEST_DIR/test-$seq +rm -rf $TESTDIR1 +mkdir $TESTDIR1 + +echo "Create the original files and reflink dirs" +$XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original >> $seqres.full +cp --reflink $TESTDIR1/original $TESTDIR1/copy + +_verify_reflink $TESTDIR1/original $TESTDIR1/copy + +echo "Move orig & reflink copy to subdir and md5sum:" +mkdir $TESTDIR1/subdir +mv $TESTDIR1/original $TESTDIR1/subdir/original_moved +mv $TESTDIR1/copy $TESTDIR1/subdir/copy_moved +_verify_reflink $TESTDIR1/subdir/original_moved $TESTDIR1/subdir/copy_moved + +md5sum $TESTDIR1/subdir/original_moved | _filter_test_dir +md5sum $TESTDIR1/subdir/copy_moved | _filter_test_dir + +echo "remove orig from subdir and md5sum reflink copy:" +rm $TESTDIR1/subdir/original_moved +md5sum $TESTDIR1/subdir/copy_moved | _filter_test_dir +rm -rf $TESTDIR1/subdir + +# success, all done +status=0 +exit diff --git a/tests/btrfs/310.out b/tests/btrfs/310.out new file mode 100644 index 0000000..dae889d --- /dev/null +++ b/tests/btrfs/310.out @@ -0,0 +1,7 @@ +QA output created by 310 +Create the original files and reflink dirs +Move orig & reflink copy to subdir and md5sum: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-310/subdir/original_moved +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-310/subdir/copy_moved +remove orig from subdir and md5sum reflink copy: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-310/subdir/copy_moved diff --git a/tests/btrfs/group b/tests/btrfs/group index a5bd6aa..bd624c4 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -11,3 +11,4 @@ 307 auto quick 308 auto quick reflink 309 auto quick reflink +310 auto quick reflink From sandeen@redhat.com Thu May 23 12:06:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ED9D87F37 for ; Thu, 23 May 2013 12:06:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id CA64130407B for ; Thu, 23 May 2013 10:06:33 -0700 (PDT) X-ASG-Debug-ID: 1369328792-04cb6c4741a1a50001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id WEWsrTQMJu093UL0 for ; Thu, 23 May 2013 10:06:33 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NH6VTg016835 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 13:06:31 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4NH6U2D001986 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 13:06:30 -0400 Message-ID: <519E4C96.3000901@redhat.com> Date: Thu, 23 May 2013 12:06:30 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , linux-btrfs , Koen De Wit Subject: [PATCH] xfstests: btrfs/311: sparse copy between different filesystems/mountpoints on btrfs X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: btrfs/311: sparse copy between different filesystems/mountpoints on btrfs Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369328793 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 From: Koen De Wit # Check if creating a sparse copy ("reflink") of a file on btrfs # expectedly fails when it's done between different filesystems or # different mount points of the same filesystem. # # For both situations, these actions are executed: # - Copy a file with the reflink=auto option. # A normal copy should be created. # - Copy a file with the reflink=always option. Should result in error, # no file should be created. [sandeen: mostly cosmetic changes] Signed-off-by: Koen De Wit Signed-off-by: Eric Sandeen --- Originally submitted as: xfstests: 301: sparse copy between different filesystems/mountpoints on btrfs diff --git a/tests/btrfs/311 b/tests/btrfs/311 new file mode 100755 index 0000000..9256e7a --- /dev/null +++ b/tests/btrfs/311 @@ -0,0 +1,106 @@ +#! /bin/bash +# FS QA Test No. 311 +# +# Check if creating a sparse copy ("reflink") of a file on btrfs +# expectedly fails when it's done between different filesystems or +# different mount points of the same filesystem. +# +# For both situations, these actions are executed: +# - Copy a file with the reflink=auto option. +# A normal copy should be created. +# - Copy a file with the reflink=always option. Should result in error, +# no file should be created. +# +#----------------------------------------------------------------------- +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + umount $SCRATCH_MNT &>/dev/null + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux + +_require_scratch +_require_cp_reflink + +SOURCE_DIR=$TEST_DIR/test-$seq +CROSS_DEV_DIR=$SCRATCH_MNT/test-$seq +# mount point & target for twice-mounted device +TEST_DIR2=$TEST_DIR/mount2 +DUAL_MOUNT_DIR=$SCRATCH_MNT/test-bis-$seq + +rm -rf $SOURCE_DIR +mkdir $SOURCE_DIR + +rm -f $seqres.full + +_scratch_mkfs +$XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $SOURCE_DIR/original >> $seqres.fll + +_filter_testdirs() +{ + _filter_test_dir | _filter_scratch +} + +_create_reflinks_to() +{ + # auto reflink, should fall back to non-reflink + rm -rf $1; mkdir $1 + echo "reflink=auto:" + cp --reflink=auto $SOURCE_DIR/original $1/copy + md5sum $SOURCE_DIR/original | _filter_testdirs + md5sum $1/copy | _filter_testdirs + + # always reflink, should fail outright + rm -rf $1; mkdir $1 + echo "reflink=always:" + cp --reflink=always $SOURCE_DIR/original $1/copyfail 2>&1 | _filter_testdirs + + # The failed target actually gets created by cp: + ls $1/copyfail | _filter_testdirs +} + +echo "test reflinks across different devices" +_scratch_mount +_create_reflinks_to $CROSS_DEV_DIR +_scratch_unmount + +echo "test reflinks across different mountpoints of same device" +mount $TEST_DEV $SCRATCH_MNT || _fail "Couldn't double-mount $TEST_DEV" +_create_reflinks_to $DUAL_MOUNT_DIR +umount $SCRATCH_MNT + +# success, all done +status=0 +exit diff --git a/tests/btrfs/311.out b/tests/btrfs/311.out new file mode 100644 index 0000000..210727b --- /dev/null +++ b/tests/btrfs/311.out @@ -0,0 +1,15 @@ +QA output created by 311 +test reflinks across different devices +reflink=auto: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-311/original +42d69d1a6d333a7ebdf64792a555e392 SCRATCH_MNT/test-311/copy +reflink=always: +cp: failed to clone `SCRATCH_MNT/test-311/copyfail': Invalid cross-device link +SCRATCH_MNT/test-311/copyfail +test reflinks across different mountpoints of same device +reflink=auto: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-311/original +42d69d1a6d333a7ebdf64792a555e392 SCRATCH_MNT/test-bis-311/copy +reflink=always: +cp: failed to clone `SCRATCH_MNT/test-bis-311/copyfail': Invalid cross-device link +SCRATCH_MNT/test-bis-311/copyfail diff --git a/tests/btrfs/group b/tests/btrfs/group index bd624c4..c897118 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -12,3 +12,4 @@ 308 auto quick reflink 309 auto quick reflink 310 auto quick reflink +311 auto quick reflink From sandeen@sandeen.net Thu May 23 12:08:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 48BA729DF8 for ; Thu, 23 May 2013 12:08:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 34B798F8073 for ; Thu, 23 May 2013 10:08:00 -0700 (PDT) X-ASG-Debug-ID: 1369328878-04cbb0049da4960001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id zAghxEwRdJ6ikMbL for ; Thu, 23 May 2013 10:07:58 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id CC63B651AC1D; Thu, 23 May 2013 12:07:57 -0500 (CDT) Message-ID: <519E4CED.9020509@sandeen.net> Date: Thu, 23 May 2013 12:07:57 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , linux-btrfs , Koen De Wit Subject: Re: [PATCH] xfstests: btrfs/309: sparse copy of a directory tree on btrfs References: <519E4734.40904@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs/309: sparse copy of a directory tree on btrfs In-Reply-To: <519E4734.40904@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369328878 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131809 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This and the other reflink tests should all be: From: Koen De Wit to maintain original authorship, sorry I forgot to add that on the patches in the middle. Rich, if you can fix that up on commit it'd be great, unless I need to submit V2s then I can do it. Koen, I haven't gone over all of them, will try to get the rest tidied up and resubmitted unless you want to - which would be just fine! -Eric On 5/23/13 11:43 AM, Eric Sandeen wrote: > # Tests file clone functionality of btrfs ("reflinks") on directory trees. > # - Create directory and subdirectory, each having one file > # - Create 2 recursive reflinked copies of the tree > # - Modify the original files > # - Modify one of the copies > > [sandeen: mostly cosmetic changes] > > Signed-off-by: Koen De Wit > Signed-off-by: Eric Sandeen > --- > > Originally submitted as > xfstests: 298: sparse copy of a directory tree on btrfs > > diff --git a/tests/btrfs/309 b/tests/btrfs/309 > new file mode 100755 > index 0000000..b3927ba > --- /dev/null > +++ b/tests/btrfs/309 > @@ -0,0 +1,98 @@ > +#! /bin/bash > +# FS QA Test No. btrfs/309 > +# > +# Tests file clone functionality of btrfs ("reflinks") on directory trees. > +# - Create directory and subdirectory, each having one file > +# - Create 2 recursive reflinked copies of the tree > +# - Modify the original files > +# - Modify one of the copies > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. common/rc > +. common/filter > + > +# real QA test starts here > +_supported_fs btrfs > +_supported_os Linux > + > +_require_xfs_io_fiemap > +_require_cp_reflink > + > +TESTDIR1=$TEST_DIR/test-$seq > +rm -rf $TESTDIR1 > +mkdir $TESTDIR1 > + > +_checksum_files() { > + for F in original/file1 original/subdir/file2 \ > + copy1/file1 copy1/subdir/file2 \ > + copy2/file1 copy2/subdir/file2 > + do > + md5sum $TESTDIR1/$F | _filter_test_dir > + done > +} > + > +rm -f $seqres.full > + > +mkdir $TESTDIR1/original > +mkdir $TESTDIR1/original/subdir > + > +echo "Create the original files and reflink dirs" > +$XFS_IO_PROG -F -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original/file1 >> $seqres.full 2>&1 > +$XFS_IO_PROG -F -f -c 'pwrite -S 0x62 0 11000' $TESTDIR1/original/subdir/file2 >> $seqres.full 2>&1 > +cp --recursive --reflink $TESTDIR1/original $TESTDIR1/copy1 > +cp --recursive --reflink $TESTDIR1/copy1 $TESTDIR1/copy2 > + > +_verify_reflink $TESTDIR1/original/file1 $TESTDIR1/copy1/file1 > +_verify_reflink $TESTDIR1/original/subdir/file2 $TESTDIR1/copy1/subdir/file2 > +_verify_reflink $TESTDIR1/original/file1 $TESTDIR1/copy2/file1 > +_verify_reflink $TESTDIR1/original/subdir/file2 $TESTDIR1/copy2/subdir/file2 > + > +echo "Original md5sums:" > +_checksum_files > + > +echo "Overwrite original/file1 and original/subdir/file2 with new data" > +$XFS_IO_PROG -c 'pwrite -S 0x63 0 13000' $TESTDIR1/original/file1 >> $seqres.full 2>&1 > +$XFS_IO_PROG -c 'pwrite -S 0x64 5000 1000' $TESTDIR1/original/subdir/file2 >> $seqres.full 2>&1 > +echo "md5sums now:" > +_checksum_files > + > +echo "Overwrite copy1/file1 and copy1/subdir/file2 with new data" > +$XFS_IO_PROG -c 'pwrite -S 0x65 0 9000' $TESTDIR1/copy1/file1 >> $seqres.full 2>&1 > +$XFS_IO_PROG -c 'pwrite -S 0x66 5000 25000' $TESTDIR1/copy1/subdir/file2 >> $seqres.full 2>&1 > +echo "md5sums now:" > +_checksum_files > + > +# success, all done > +status=0 > +exit > diff --git a/tests/btrfs/309.out b/tests/btrfs/309.out > new file mode 100644 > index 0000000..93197d8 > --- /dev/null > +++ b/tests/btrfs/309.out > @@ -0,0 +1,25 @@ > +QA output created by 309 > +Create the original files and reflink dirs > +Original md5sums: > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/original/file1 > +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/original/subdir/file2 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy1/file1 > +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy1/subdir/file2 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 > +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 > +Overwrite original/file1 and original/subdir/file2 with new data > +md5sums now: > +260f6785c0537fd12582dcae28a3c1a9 TEST_DIR/test-309/original/file1 > +b8d91fb600f6f2191f2ba66665374860 TEST_DIR/test-309/original/subdir/file2 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy1/file1 > +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy1/subdir/file2 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 > +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 > +Overwrite copy1/file1 and copy1/subdir/file2 with new data > +md5sums now: > +260f6785c0537fd12582dcae28a3c1a9 TEST_DIR/test-309/original/file1 > +b8d91fb600f6f2191f2ba66665374860 TEST_DIR/test-309/original/subdir/file2 > +b20229a003e3985c4b0e6806abcd6642 TEST_DIR/test-309/copy1/file1 > +b815b24069db14e0a3a07169fd563e93 TEST_DIR/test-309/copy1/subdir/file2 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 > +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 > diff --git a/tests/btrfs/group b/tests/btrfs/group > index f24628c..a5bd6aa 100644 > --- a/tests/btrfs/group > +++ b/tests/btrfs/group > @@ -10,3 +10,4 @@ > 284 auto > 307 auto quick > 308 auto quick reflink > +309 auto quick reflink > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From zelianaiou.matina@mfa.gr Thu May 23 12:27:47 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE, T_KHOP_FOREIGN_CLICK autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 31BD97F4C for ; Thu, 23 May 2013 12:27:47 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CB0FAAC003 for ; Thu, 23 May 2013 10:27:46 -0700 (PDT) X-ASG-Debug-ID: 1369330060-04bdf07817a53e0001-w1Z2WR Received: from ferekis.mfa.gr (mailhost.mfa.gr [84.205.251.31]) by cuda.sgi.com with ESMTP id G9hLlJey16E1aCHo for ; Thu, 23 May 2013 10:27:40 -0700 (PDT) X-Barracuda-Envelope-From: zelianaiou.matina@mfa.gr X-Barracuda-Apparent-Source-IP: 84.205.251.31 Received: from cluster.mfa.gr (spinos.mfa.gr [10.5.225.26]) by ferekis.mfa.gr (Postfix) with ESMTP id AD85A4803C3; Thu, 23 May 2013 17:59:02 +0300 (EEST) Received: from cluster.mfa.gr (localhost [127.0.0.1]) by cluster.mfa.gr (Postfix) with ESMTP id 88D60ED807CE; Thu, 23 May 2013 17:59:01 +0300 (EEST) Received: from cluster.mfa.gr (cluster.mfa.gr [10.5.225.27]) by cluster.mfa.gr (Postfix) with ESMTP id 6258DED80006; Thu, 23 May 2013 17:58:59 +0300 (EEST) Date: Thu, 23 May 2013 17:58:59 +0300 (EEST) From: KBC-Online Message-ID: <1353049881.390902.1369321139312.JavaMail.root@mfa.gr> Subject: =?utf-8?Q?Alerte_de_s=C3=A9curit=C3=A9?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?utf-8?Q?Alerte_de_s=C3=A9curit=C3=A9?= Content-Type: multipart/alternative; boundary="----=_Part_390901_1727957066.1369321139309" X-Originating-IP: [79.172.242.136] X-Mailer: Zimbra 8.0.2_GA_5569 (zclient/8.0.2_GA_5569) Thread-Topic: Alerte de =?utf-8?B?c8OpY3VyaXTDqQ==?= Thread-Index: GzfYSUjdWZHKinzMWB+8pHo1boZmdg== X-MFA-MailScanner-Information: Please contact the ISP for more information X-MFA-MailScanner-ID: AD85A4803C3.A9A9B X-MFA-MailScanner: Found to be clean X-MFA-MailScanner-From: zelianaiou.matina@mfa.gr X-Barracuda-Connect: mailhost.mfa.gr[84.205.251.31] X-Barracuda-Start-Time: 1369330060 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.93 X-Barracuda-Spam-Status: No, SCORE=1.93 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA074, BSF_SC0_SA074b, HTML_MESSAGE, INFO_TLD, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.50 BSF_SC0_SA074 URI: Custom Rule SA074 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header 0.20 BSF_SC0_SA074b Custom Rule SA074b To: undisclosed-recipients:; ------=_Part_390901_1727957066.1369321139309 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Services bancaires en ligne Alerte de sécuritéCher clientKBC-= Online Belgique montre une grande préoccupation et d'attention &agra= ve; la sécurité et à l'intégrité de tous= nos comptes bancaires. Nous tenons à attirer votre attention sur ce= qui suit. L'an dernier, KBC Belgique et beaucoup d'autres banques Belge on= t eu une fraude sur Internet à grande échelle. Les fraudeurs = ont constamment travaillé dur pour accéder à vos compt= es bancaires.Comme mesure préventive, KBC-Online lance un logiciel a= mélioré Trusteer Rapport de sécurité. Tous les = comptes bancaires d'KBC en ligne seront désormais liés avec c= e logiciel de détection de fraude nouvellement développ&eacut= e;. Il est absolument gratuit et détecte les activités suspec= tes dans vos comptes bancaires en ligne. Rapport travaille aux côt&ea= cute;s de votre logiciel anti-virus et pare-feu existant, afin d'assurer un= e protection maximale de vos données bancaires en ligne, même = si votre ordinateur est infecté par un virus.Il semble que votre com= pte bancaire en ligne KBC est pas encore équipé du nouveau l= ogiciel de sécurité Trusteer Rapport. Seulement 5 minutes de = votre temps est nécessaire pour vous prémunir contre le vol d= 'identité bancaire en ligne et la fraude bancaire en ligne.Pour comm= encer ce processus, vous pouvez utiliser le lien suivant: cliquez iciVous s= erez contacté par un colaborateur de la banque KBC, après la = mise à jour pour compléter l'ensemble du processus. Lorsque l= e processus est terminé, vous continuez à utiliser nos servic= es bancaires en ligne, avec l'appui d'un système de sécurit&e= acute; renforcée. Nous vous remercions d'avance pour votre coop&eacu= te;ration.Cordialement,Service à la clientèle --=20 This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. ------=_Part_390901_1727957066.1369321139309 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable

Services bancaires en ligne Alerte de sécurité

Cher client

KBC-Online Belgique montre une grande pr&eac= ute;occupation et d'attention à la sécurité et à= ; l'intégrité de tous nos comptes bancaires. Nous tenons &agr= ave; attirer votre attention sur ce qui suit. L'an dernier, KBC Belgique et= beaucoup d'autres banques Belge ont eu une fraude sur Internet à gr= ande échelle. Les fraudeurs ont constamment travaillé dur pou= r accéder à vos comptes bancaires.

Comme mesure pr= éventive, KBC-Online lance un logiciel amélioré Truste= er Rapport de sécurité. Tous les comptes bancaires d'KBC en l= igne seront désormais liés avec ce logiciel de détecti= on de fraude nouvellement développé. Il est absolument gratui= t et détecte les activités suspectes dans vos comptes bancair= es en ligne. Rapport travaille aux côtés de votre logiciel ant= i-virus et pare-feu existant, afin d'assurer une protection maximale de vos= données bancaires en ligne, même si votre ordinateur est infe= cté par un virus.

Il semble que votre compte bancaire en = ligne KBC  est pas encore équipé du nouveau logiciel de = sécurité Trusteer Rapport. Seulement 5 minutes de votre temps= est nécessaire pour vous prémunir contre le vol d'identit&ea= cute; bancaire en ligne et la fraude bancaire en ligne.

Pour com= mencer ce processus, vous pouvez utiliser le lien suivant: cliquez ici=

Vous serez contacté par un colaborateur de la banque KBC= , après la mise à jour pour compléter l'ensemble du pr= ocessus. Lorsque le processus est terminé, vous continuez à u= tiliser nos services bancaires en ligne, avec l'appui d'un système d= e sécurité renforcée. Nous vous remercions d'avance po= ur votre coopération.

Cordialement,

Service &a= grave; la clientèle

--=20
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean. ------=_Part_390901_1727957066.1369321139309-- From sekharan@us.ibm.com Thu May 23 13:09:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3310A7F37 for ; Thu, 23 May 2013 13:09:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1FB4D304032 for ; Thu, 23 May 2013 11:09:36 -0700 (PDT) X-ASG-Debug-ID: 1369332572-04cb6c473fa5810001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id 1A61jVMPtSTazdI4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 May 2013 11:09:33 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 23 May 2013 12:09:32 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 23 May 2013 12:09:31 -0600 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id BA4261FF0074 for ; Thu, 23 May 2013 12:04:21 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4NI9CAW118184 for ; Thu, 23 May 2013 12:09:12 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4NI98OZ031112 for ; Thu, 23 May 2013 12:09:09 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4NI93Ni030845; Thu, 23 May 2013 12:09:04 -0600 Subject: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone From: Chandra Seetharaman X-ASG-Orig-Subj: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: XFS mailing list In-Reply-To: <20130522234129.GN29466@dastard> References: <1369264363.10223.2994.camel@chandra-dt.ibm.com> <20130522234129.GN29466@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Thu, 23 May 2013 13:09:02 -0500 Message-ID: <1369332542.10223.5271.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052318-3620-0000-0000-000002A81ADB X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1369332573 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, 2013-05-23 at 09:41 +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 06:12:43PM -0500, Chandra Seetharaman wrote: > > Hello, > > > > While testing and rearranging my pquota/gquota code, I stumbled on a > > xfs_shutdown() during a mount. But the mount just hung. > > > > I debugged and found that it is in a code path where > > &log->l_cilp->xc_ctx_lock is first acquired in read mode and some levels > > down the same semaphore is being acquired in write mode causing a > > deadlock. > > > > This is the stack: > > xfs_log_commit_cil -> acquires &log->l_cilp->xc_ctx_lock in read mode > > xlog_print_tic_res > > xfs_force_shutdown > > xfs_log_force_umount > > xlog_cil_force > > xlog_cil_force_lsn > > xlog_cil_push_foreground > > xlog_cil_push - tries to acquire same semaphore in write mode > > Which means you had a transaction reservation overrun. Is it > reproducable? iDo you have the output from xlog_print_tic_res()? > Because: Here it is: May 23 10:48:52 test46 kernel: [ 77.500728] XFS (sdh8): xlog_write: reservation summary: May 23 10:48:52 test46 kernel: [ 77.500728] trans type = QM_SBCHANGE (26) May 23 10:48:52 test46 kernel: [ 77.500728] unit res = 2740 bytes May 23 10:48:52 test46 kernel: [ 77.500728] current res = -48 bytes May 23 10:48:52 test46 kernel: [ 77.500728] total reg = 0 bytes (o/flow = 0 bytes) May 23 10:48:52 test46 kernel: [ 77.500728] ophdrs = 0 (ophdr space = 0 bytes) May 23 10:48:52 test46 kernel: [ 77.500728] ophdr + reg = 0 bytes May 23 10:48:52 test46 kernel: [ 77.500728] num regions = 0 May 23 10:48:52 test46 kernel: [ 77.500728] Yes. I can readily reproduce the problem, but it is with my mangled up patchsets :). There is a small change that makes this problem reproduce consistently. > > > xfs_trans_commit+0x79/0x270 [xfs] > > xfs_qm_write_sb_changes+0x61/0x90 [xfs] > > xfs_qm_mount_quotas+0x82/0x180 [xfs] > > xfs_mountfs+0x5f6/0x6b0 [xfs] > > This transaction only modifies the superblock, and it has a buffer > reservation for a superblock sized buffer, and hence should never > overrun. > > IOWs, I'm ifar more concerned about the fact there was a > transaction overrun than they was a hang in the path that handles As I mentioned above, it may be a manipulation of my patch entanglement. > the overrun. The fact this hang has been there since 2.6.35 tells > you how rare transactions overruns are.... > > FWIW, the fix for the hang is to make xlog_print_tic_res() return an > error and have the caller handle the shutdown. > > Cheers, > > Dave. From davej@redhat.com Thu May 23 13:13:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B0DB07F37 for ; Thu, 23 May 2013 13:13:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7302B8F806F for ; Thu, 23 May 2013 11:13:58 -0700 (PDT) X-ASG-Debug-ID: 1369332837-04bdf07818a8930001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id JQRZWJ8bJy8HEbSu for ; Thu, 23 May 2013 11:13:57 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NIDt1P013123 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 14:13:55 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4NIDsLR025203 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 14:13:54 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4NIDpsr008983; Thu, 23 May 2013 14:13:51 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4NIDoDT008982; Thu, 23 May 2013 14:13:50 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 14:13:50 -0400 From: Dave Jones To: Dave Chinner , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130523181350.GA8071@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522142252.GB1407@redhat.com> <20130522161946.GA25906@redhat.com> <20130522220933.GV24543@dastard> <20130523151721.GC16419@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523151721.GC16419@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369332837 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On Thu, May 23, 2013 at 11:17:21AM -0400, Dave Jones wrote: > On Thu, May 23, 2013 at 08:09:33AM +1000, Dave Chinner wrote: > > On Wed, May 22, 2013 at 12:19:46PM -0400, Dave Jones wrote: > > > On Wed, May 22, 2013 at 10:22:52AM -0400, Dave Jones wrote: > > > > On Wed, May 22, 2013 at 03:51:47PM +1000, Dave Chinner wrote: > > > > > > > > > > Tomorrow I'll also try running some older kernels with the same > > > > > > options to see if it's something new, or an older bug. This is a > > > > > > new machine, so it may be something that's been around for a > > > > > > while, and for whatever reason, my other machines don't hit > > > > > > this. > > > > > > > > > > Another thing that just occurred to me - what compiler are you > > > > > using? We had a report last week on #xfs that xfsdump was failing > > > > > with bad checksums because of link time optimisation (LTO) in > > > > > gcc-4.8.0. When they turned that off, everything worked fine. So if > > > > > you are using 4.8.0, perhaps trying a different compiler might be a > > > > > good idea, too. > > > > > > > > Yeah, this is 4.8.0. This box is running F19-beta. > > > > I managed to shoehorn the gcc-4.7 from f18 on there though. > > > > Bug reproduced instantly, so I think we can rule out compiler. > > > > > > > > I ran 3.9 with the same debug options. Seems stable. > > > > I'll do a bisect. > > > > > > good news. It wasn't until I started bisecting I realised I was still > > > carrying this patch from you to fix slab corruption I was seeing. > > > > > > It seems to be the culprit (or is masking another problem -- I had to apply > > > it at each step of the bisect to get past the slab corruption bug). > > > > That doesn't make a whole lot of sense to me. The fix in the xfsdev > > tree is a little different: > > > > http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs.git;a=commitdiff;h=52c24ad39ff02d7bd73c92eb0c926fb44984a41d > > I did an rc2 build with just that commit on top, and can't reproduce this at all now. > (At least not with the reproducer that worked previously). Ok, scratch all that. I can reproduce it again, it just takes longer. (And typically, I didn't have your debug patch on top for that run.. nnnngh) Dave From davej@redhat.com Thu May 23 13:49:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 794207F37 for ; Thu, 23 May 2013 13:49:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id EF54BAC002 for ; Thu, 23 May 2013 11:49:54 -0700 (PDT) X-ASG-Debug-ID: 1369334993-04cbb0049eaaed0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ABiLMcQyCeaCqPUH for ; Thu, 23 May 2013 11:49:53 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NInp6R002981 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 14:49:51 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4NInoPh010366 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 14:49:50 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4NInmKa011854; Thu, 23 May 2013 14:49:48 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4NInmad011853; Thu, 23 May 2013 14:49:48 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 14:49:48 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130523184948.GA11151@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130521235410.GY29466@dastard> <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522215454.GL29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369334993 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, May 23, 2013 at 07:54:54AM +1000, Dave Chinner wrote: > Gah, I've got not idea what the hell I was smoking yesterday > afternoon. 0x2000 is actually ATTR_FILE, and 0x8000 is ATTR_OPEN. > > So a mask of 0xa068 is correct and valid from the open path, and > 0x2068 is just file from the truncate path. > > But, neither of those should trigger that assert. indeed, on a test > kernel (3.10-rc2 based): > > # echo I need a new drug > /mnt/scr/bah/blah/black/sheep/foo > [ 296.742990] XFS (vdb): xfs_setattr_size: mask 0xa068, masked # 0x0 ii 0xffff88003e6297c0, d 0xffff88003e5b9cb0 path /bah/blah/black/sheep/foo > # > > And there's not assert failure. Indeed, the "masked # 0x0" is what > the assert is checking. > > And yeah, path output works. Trick for anyone who doesn't read the > code closely - the buffer is filled from the end backwards, and the > start of the path is the return variable. So, the above code is: > > { > struct dentry *d = d_find_alias(VFS_I(ip)); > char buf[MAXPATHLEN]; > char *ptr; > > memset(buf, 0, MAXPATHLEN); > ptr = dentry_path(d, buf, MAXPATHLEN); > xfs_warn(mp, "%s: mask 0x%x, masked 0x%x ii 0x%p, d 0x%p path %s", > __func__, mask, > (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| > ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| > ATTR_KILL_PRIV|ATTR_TIMES_SET)), > ip, d, ptr); > dput(d); > } > > Which I put just before the assert that is firing on your machine. > > And, obviously, it isn't firing on mine and obviously shouldn't be firing on a > mask of 0xa068. With this, I get a spew of these when I start a kernel build.. [ 964.378690] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff880221b5d970 path /davej/tmp/ccN2RrM5.s [ 964.651927] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ff80b90 path /davej/tmp/ccB1Cdmo.s [ 964.867444] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff8802218a5bc0 path /davej/tmp/ccCUaXbG.s [ 965.102661] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ffacde0 path /davej/tmp/cckMLf2X.s [ 967.743312] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff88022212c250 path /davej/tmp/ccFMkBbA.s [ 967.947154] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff8802226cc6f0 path /davej/tmp/cc5iX4SR.s [ 968.009414] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a988000, d 0xffff8802219f1970 path /davej/tmp/ccvWCHTZ.o [ 968.091504] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a9898c0, d 0xffff88022208de10 path /davej/tmp/cc9n6fnm.ld [ 968.107997] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a98dac0, d 0xffff880221160de0 path /davej/tmp/cc5rlvHu.le Dave From bpm@sgi.com Thu May 23 16:54:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2E86C7F37 for ; Thu, 23 May 2013 16:54:09 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id E3DE5304059; Thu, 23 May 2013 14:54:05 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 8C038500B5E; Thu, 23 May 2013 16:54:05 -0500 (CDT) Date: Thu, 23 May 2013 16:54:05 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 09/11] xfs: rework remote attr CRCs Message-ID: <20130523215405.GT20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-10-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-10-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Dave, On Tue, May 21, 2013 at 06:02:08PM +1000, Dave Chinner wrote: > From: Dave Chinner > > Note: this changes the on-disk remote attribute format. I assert > that this is OK to do as CRCs are marked experimental and the first > kernel it is included in has not yet reached release yet. Further, > the userspace utilities are still evolving and so anyone using this > stuff right now is a developer or tester using volatile filesystems > for testing this feature. Hence changing the format right now to > save longer term pain is the right thing to do. I have no objection to changing the on-disk format for an experimental feature even after it has released. People know what they're signing up for when they're turning on experimental features. Or they soon will. We should probably be nice and use feature bits though. I'm thinking about the unlinked list modifications... > The fundamental change is to move from a header per extent in the > attribute to a header per filesytem block in the attribute. This > means there are more header blocks and the parsing of the attribute > data is slightly more complex, but it has the advantage that we > always know the size of the attribute on disk based on the length of > the data it contains. > > This is where the header-per-extent method has problems. We don't > know the size of the attribute on disk without first knowing how > many extents are used to hold it. And we can't tell from a > mapping lookup, either, because remote attributes can be allocated > contiguously with other attribute blocks and so there is no obvious > way of determining the actual size of the atribute on disk short of > walking and mapping buffers. You can't tell exactly how many extents will be required to store the attribute until after they've been allocated. At least... not until you're down to trying to allocate the last block. > The problem with this approach is that if we map a buffer > incorrectly (e.g. we make the last buffer for the attribute data too > long), we then get buffer cache lookup failure when we map it > correctly. i.e. we get a size mismatch on lookup. Ah. The resulting block count of a fragmented remote attribute is not reflected in 'valuelen' in the remote attribute entry, so the number of headers to account for is unknown. typedef struct xfs_attr_leaf_name_remote { __be32 valueblk; /* block number of value bytes */ __be32 valuelen; /* number of bytes in value */ __u8 namelen; /* length of name bytes */ __u8 name[1]; /* name bytes */ } xfs_attr_leaf_name_remote_t; Other options: valuelen could be changed to a block count. Now that you have offset and payload length in the header you can get valuelen from there on the last extent. valuelen could be split in two, half is the block count and the other half is the payload length in the last extent. > This is not > necessarily fatal, but it's a cache coherency problem that can lead > to returning the wrong data to userspace or writing the wrong data > to disk. And debug kernels will assert fail if this occurs. What data was being exposed? The data after the attribute? I thought testing for valuelen would take care of that. > I found lots of niggly little problems trying to fix this issue on a > 4k block size filesystem, finally getting it to pass with lots of > fixes. The thing is, 1024 byte filesystems still failed, and it was > getting really complex handling all the corner cases that were > showing up. And there were clearly more that I hadn't found yet. > > It is complex, fragile code, and if we don't fix it now, it will be > complex, fragile code forever more. LOL. Forever more! ;) > Hence the simple fix is to add a header to each filesystem block. > This gives us the same relationship between the attribute data > length and the number of blocks on disk as we have without CRCs - > it's a linear mapping and doesn't require us to guess anything. It > is simple to implement, too - the remote block count calculated at > lookup time can be used by the remote attribute set/get/remove code > without modification for both CRC and non-CRC filesystems. The world > becomes sane again. > > Because the copy-in and copy-out now need to iterate over each > filesystem block, I moved them into helper functions so we separate > the block mapping and buffer manupulations from the attribute data > and CRC header manipulations. The code becomes much clearer as a > result, and it is a lot easier to understand and debug. It also > appears to be much more robust - once it worked on 4k block size > filesystems, it has worked without failure on 1k block size > filesystems, too. > > Signed-off-by: Dave Chinner I agree this code is much clearer with this method than it used to be. I have two comments below. Otherwise consider it Reviewed-by: Ben Myers > --- > fs/xfs/xfs_attr_leaf.c | 13 +- > fs/xfs/xfs_attr_remote.c | 381 +++++++++++++++++++++++++++------------------- > fs/xfs/xfs_attr_remote.h | 10 ++ > fs/xfs/xfs_buf.c | 1 + > 4 files changed, 247 insertions(+), 158 deletions(-) > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > index 5b03d15..d788302 100644 > --- a/fs/xfs/xfs_attr_leaf.c > +++ b/fs/xfs/xfs_attr_leaf.c > @@ -1412,7 +1412,7 @@ xfs_attr3_leaf_add_work( > name_rmt->valuelen = 0; > name_rmt->valueblk = 0; > args->rmtblkno = 1; > - args->rmtblkcnt = XFS_B_TO_FSB(mp, args->valuelen); > + args->rmtblkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); > } > xfs_trans_log_buf(args->trans, bp, > XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), > @@ -2354,8 +2354,9 @@ xfs_attr3_leaf_lookup_int( > args->index = probe; > args->valuelen = be32_to_cpu(name_rmt->valuelen); > args->rmtblkno = be32_to_cpu(name_rmt->valueblk); > - args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, > - args->valuelen); > + args->rmtblkcnt = xfs_attr3_rmt_blocks( > + args->dp->i_mount, > + args->valuelen); > return XFS_ERROR(EEXIST); > } > } > @@ -2406,7 +2407,8 @@ xfs_attr3_leaf_getvalue( > ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0); > valuelen = be32_to_cpu(name_rmt->valuelen); > args->rmtblkno = be32_to_cpu(name_rmt->valueblk); > - args->rmtblkcnt = XFS_B_TO_FSB(args->dp->i_mount, valuelen); > + args->rmtblkcnt = xfs_attr3_rmt_blocks(args->dp->i_mount, > + valuelen); > if (args->flags & ATTR_KERNOVAL) { > args->valuelen = valuelen; > return 0; > @@ -2732,7 +2734,8 @@ xfs_attr3_leaf_list_int( > args.valuelen = valuelen; > args.value = kmem_alloc(valuelen, KM_SLEEP | KM_NOFS); > args.rmtblkno = be32_to_cpu(name_rmt->valueblk); > - args.rmtblkcnt = XFS_B_TO_FSB(args.dp->i_mount, valuelen); > + args.rmtblkcnt = xfs_attr3_rmt_blocks( > + args.dp->i_mount, valuelen); > retval = xfs_attr_rmtval_get(&args); > if (retval) > return retval; > diff --git a/fs/xfs/xfs_attr_remote.c b/fs/xfs/xfs_attr_remote.c > index d8bcb2d..ef6b0c1 100644 > --- a/fs/xfs/xfs_attr_remote.c > +++ b/fs/xfs/xfs_attr_remote.c > @@ -47,7 +47,7 @@ > * Each contiguous block has a header, so it is not just a simple attribute > * length to FSB conversion. > */ > -static int > +int > xfs_attr3_rmt_blocks( > struct xfs_mount *mp, > int attrlen) > @@ -59,12 +59,43 @@ xfs_attr3_rmt_blocks( > return XFS_B_TO_FSB(mp, attrlen); > } > > +/* > + * Checking of the remote attribute header is split into two parts. The verifier > + * does CRC, location and bounds checking, the unpacking function checks the > + * attribute parameters and owner. > + */ > +static bool > +xfs_attr3_rmt_hdr_ok( > + struct xfs_mount *mp, > + void *ptr, > + xfs_ino_t ino, > + uint32_t offset, > + uint32_t size, > + xfs_daddr_t bno) > +{ > + struct xfs_attr3_rmt_hdr *rmt = ptr; > + > + if (bno != be64_to_cpu(rmt->rm_blkno)) > + return false; > + if (offset != be32_to_cpu(rmt->rm_offset)) > + return false; > + if (size != be32_to_cpu(rmt->rm_bytes)) > + return false; > + if (ino != be64_to_cpu(rmt->rm_owner)) > + return false; > + > + /* ok */ > + return true; > +} > + > static bool > xfs_attr3_rmt_verify( > - struct xfs_buf *bp) > + struct xfs_mount *mp, > + void *ptr, > + int fsbsize, > + xfs_daddr_t bno) > { > - struct xfs_mount *mp = bp->b_target->bt_mount; > - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; > + struct xfs_attr3_rmt_hdr *rmt = ptr; > > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return false; > @@ -72,7 +103,9 @@ xfs_attr3_rmt_verify( > return false; > if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) > return false; > - if (bp->b_bn != be64_to_cpu(rmt->rm_blkno)) > + if (be64_to_cpu(rmt->rm_blkno) != bno) > + return false; > + if (be32_to_cpu(rmt->rm_bytes) > fsbsize - sizeof(*rmt)) > return false; > if (be32_to_cpu(rmt->rm_offset) + > be32_to_cpu(rmt->rm_bytes) >= XATTR_SIZE_MAX) > @@ -88,17 +121,40 @@ xfs_attr3_rmt_read_verify( > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > + char *ptr; > + int len; > + bool corrupt = false; > + xfs_daddr_t bno; > > /* no verification of non-crc buffers */ > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return; > > - if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), > - XFS_ATTR3_RMT_CRC_OFF) || > - !xfs_attr3_rmt_verify(bp)) { > + ptr = bp->b_addr; > + bno = bp->b_bn; > + len = BBTOB(bp->b_length); > + ASSERT(len >= XFS_LBSIZE(mp)); > + > + while (len > 0) { > + if (!xfs_verify_cksum(ptr, XFS_LBSIZE(mp), > + XFS_ATTR3_RMT_CRC_OFF)) { > + corrupt = true; > + break; > + } > + if (!xfs_attr3_rmt_verify(mp, ptr, XFS_LBSIZE(mp), bno)) { > + corrupt = true; > + break; > + } > + len -= XFS_LBSIZE(mp); > + ptr += XFS_LBSIZE(mp); > + bno += mp->m_bsize; > + } > + > + if (corrupt) { > XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); > xfs_buf_ioerror(bp, EFSCORRUPTED); > - } > + } else > + ASSERT(len == 0); > } > > static void > @@ -107,23 +163,39 @@ xfs_attr3_rmt_write_verify( > { > struct xfs_mount *mp = bp->b_target->bt_mount; > struct xfs_buf_log_item *bip = bp->b_fspriv; > + char *ptr; > + int len; > + xfs_daddr_t bno; > > /* no verification of non-crc buffers */ > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return; > > - if (!xfs_attr3_rmt_verify(bp)) { > - XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); > - xfs_buf_ioerror(bp, EFSCORRUPTED); > - return; > - } > + ptr = bp->b_addr; > + bno = bp->b_bn; > + len = BBTOB(bp->b_length); > + ASSERT(len >= XFS_LBSIZE(mp)); > + > + while (len > 0) { > + if (!xfs_attr3_rmt_verify(mp, ptr, XFS_LBSIZE(mp), bno)) { > + XFS_CORRUPTION_ERROR(__func__, > + XFS_ERRLEVEL_LOW, mp, bp->b_addr); > + xfs_buf_ioerror(bp, EFSCORRUPTED); > + return; > + } > + if (bip) { > + struct xfs_attr3_rmt_hdr *rmt; > > - if (bip) { > - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; > - rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); > + rmt = (struct xfs_attr3_rmt_hdr *)ptr; > + rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); > + } > + xfs_update_cksum(ptr, XFS_LBSIZE(mp), XFS_ATTR3_RMT_CRC_OFF); > + > + len -= XFS_LBSIZE(mp); > + ptr += XFS_LBSIZE(mp); > + bno += mp->m_bsize; > } > - xfs_update_cksum(bp->b_addr, BBTOB(bp->b_length), > - XFS_ATTR3_RMT_CRC_OFF); > + ASSERT(len == 0); > } > > const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { > @@ -131,15 +203,16 @@ const struct xfs_buf_ops xfs_attr3_rmt_buf_ops = { > .verify_write = xfs_attr3_rmt_write_verify, > }; > > -static int > +STATIC int > xfs_attr3_rmt_hdr_set( > struct xfs_mount *mp, > + void *ptr, > xfs_ino_t ino, > uint32_t offset, > uint32_t size, > - struct xfs_buf *bp) > + xfs_daddr_t bno) > { > - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; > + struct xfs_attr3_rmt_hdr *rmt = ptr; > > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return 0; > @@ -149,36 +222,107 @@ xfs_attr3_rmt_hdr_set( > rmt->rm_bytes = cpu_to_be32(size); > uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); > rmt->rm_owner = cpu_to_be64(ino); > - rmt->rm_blkno = cpu_to_be64(bp->b_bn); > - bp->b_ops = &xfs_attr3_rmt_buf_ops; > + rmt->rm_blkno = cpu_to_be64(bno); > > return sizeof(struct xfs_attr3_rmt_hdr); > } > > /* > - * Checking of the remote attribute header is split into two parts. the verifier > - * does CRC, location and bounds checking, the unpacking function checks the > - * attribute parameters and owner. > + * Helper functions to copy attribute data in and out of the one disk extents > */ > -static bool > -xfs_attr3_rmt_hdr_ok( > - struct xfs_mount *mp, > - xfs_ino_t ino, > - uint32_t offset, > - uint32_t size, > - struct xfs_buf *bp) > +STATIC int > +xfs_attr_rmtval_copyout( > + struct xfs_mount *mp, > + struct xfs_buf *bp, > + xfs_ino_t ino, > + int *offset, > + int *valuelen, > + char **dst) > { > - struct xfs_attr3_rmt_hdr *rmt = bp->b_addr; > + char *src = bp->b_addr; > + xfs_daddr_t bno = bp->b_bn; > + int len = BBTOB(bp->b_length); > > - if (offset != be32_to_cpu(rmt->rm_offset)) > - return false; > - if (size != be32_to_cpu(rmt->rm_bytes)) > - return false; > - if (ino != be64_to_cpu(rmt->rm_owner)) > - return false; > + ASSERT(len >= XFS_LBSIZE(mp)); > > - /* ok */ > - return true; > + while (len > 0 && *valuelen > 0) { > + int hdr_size = 0; > + int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); > + > + byte_cnt = min_t(int, *valuelen, byte_cnt); > + > + if (xfs_sb_version_hascrc(&mp->m_sb)) { > + if (!xfs_attr3_rmt_hdr_ok(mp, src, ino, *offset, > + byte_cnt, bno)) { > + xfs_alert(mp, > +"remote attribute header mismatch bno/off/len/owner (0x%llx/0x%x/Ox%x/0x%llx)", > + bno, *offset, byte_cnt, ino); > + return EFSCORRUPTED; > + } > + hdr_size = sizeof(struct xfs_attr3_rmt_hdr); > + } > + > + memcpy(*dst, src + hdr_size, byte_cnt); > + > + /* roll buffer forwards */ > + len -= XFS_LBSIZE(mp); > + src += XFS_LBSIZE(mp); > + bno += mp->m_bsize; > + > + /* roll attribute data forwards */ > + *valuelen -= byte_cnt; > + *dst += byte_cnt; > + *offset += byte_cnt; > + } > + return 0; > +} > + > +STATIC void > +xfs_attr_rmtval_copyin( > + struct xfs_mount *mp, > + struct xfs_buf *bp, > + xfs_ino_t ino, > + int *offset, > + int *valuelen, > + char **src) > +{ > + char *dst = bp->b_addr; > + xfs_daddr_t bno = bp->b_bn; > + int len = BBTOB(bp->b_length); > + > + ASSERT(len >= XFS_LBSIZE(mp)); > + > + while (len > 0 && *valuelen > 0) { > + int hdr_size; > + int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); > + > + byte_cnt = min(*valuelen, byte_cnt); ^^^ You used 'min_t(int,...)' above and min() here. Any reason? > + hdr_size = xfs_attr3_rmt_hdr_set(mp, dst, ino, *offset, > + byte_cnt, bno); > + > + memcpy(dst + hdr_size, *src, byte_cnt); > + > + /* > + * If this is the last block, zero the remainder of it. > + * Check that we are actually the last block, too. > + */ > + if (byte_cnt + hdr_size < XFS_LBSIZE(mp)) { > + ASSERT(*valuelen - byte_cnt == 0); > + ASSERT(len == XFS_LBSIZE(mp)); > + memset(dst + hdr_size + byte_cnt, 0, > + XFS_LBSIZE(mp) - hdr_size - byte_cnt); > + } > + > + /* roll buffer forwards */ > + len -= XFS_LBSIZE(mp); > + dst += XFS_LBSIZE(mp); > + bno += mp->m_bsize; > + > + /* roll attribute data forwards */ > + *valuelen -= byte_cnt; > + *src += byte_cnt; > + *offset += byte_cnt; > + } > } > > /* > @@ -192,13 +336,12 @@ xfs_attr_rmtval_get( > struct xfs_bmbt_irec map[ATTR_RMTVALUE_MAPSIZE]; > struct xfs_mount *mp = args->dp->i_mount; > struct xfs_buf *bp; > - xfs_daddr_t dblkno; > xfs_dablk_t lblkno = args->rmtblkno; > - void *dst = args->value; > + char *dst = args->value; > int valuelen = args->valuelen; > int nmap; > int error; > - int blkcnt; > + int blkcnt = args->rmtblkcnt; > int i; > int offset = 0; > > @@ -208,7 +351,6 @@ xfs_attr_rmtval_get( > > while (valuelen > 0) { > nmap = ATTR_RMTVALUE_MAPSIZE; > - blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); > error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, > blkcnt, map, &nmap, > XFS_BMAPI_ATTRFORK); > @@ -217,45 +359,29 @@ xfs_attr_rmtval_get( > ASSERT(nmap >= 1); > > for (i = 0; (i < nmap) && (valuelen > 0); i++) { > - int byte_cnt; > - char *src; > + xfs_daddr_t dblkno; > + int dblkcnt; > > ASSERT((map[i].br_startblock != DELAYSTARTBLOCK) && > (map[i].br_startblock != HOLESTARTBLOCK)); > dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); > - blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); > + dblkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); > error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, > - dblkno, blkcnt, 0, &bp, > + dblkno, dblkcnt, 0, &bp, > &xfs_attr3_rmt_buf_ops); > if (error) > return error; > > - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); > - byte_cnt = min_t(int, valuelen, byte_cnt); > - > - src = bp->b_addr; > - if (xfs_sb_version_hascrc(&mp->m_sb)) { > - if (!xfs_attr3_rmt_hdr_ok(mp, args->dp->i_ino, > - offset, byte_cnt, bp)) { > - xfs_alert(mp, > -"remote attribute header does not match required off/len/owner (0x%x/Ox%x,0x%llx)", > - offset, byte_cnt, args->dp->i_ino); > - xfs_buf_relse(bp); > - return EFSCORRUPTED; > - > - } > - > - src += sizeof(struct xfs_attr3_rmt_hdr); > - } > - > - memcpy(dst, src, byte_cnt); > + error = xfs_attr_rmtval_copyout(mp, bp, args->dp->i_ino, > + &offset, &valuelen, > + &dst); > xfs_buf_relse(bp); > + if (error) > + return error; > > - offset += byte_cnt; > - dst += byte_cnt; > - valuelen -= byte_cnt; > - > + /* roll attribute extent map forwards */ > lblkno += map[i].br_blockcount; > + blkcnt -= map[i].br_blockcount; > } > } > ASSERT(valuelen == 0); > @@ -273,17 +399,13 @@ xfs_attr_rmtval_set( > struct xfs_inode *dp = args->dp; > struct xfs_mount *mp = dp->i_mount; > struct xfs_bmbt_irec map; > - struct xfs_buf *bp; > - xfs_daddr_t dblkno; > xfs_dablk_t lblkno; > xfs_fileoff_t lfileoff = 0; > - void *src = args->value; > + char *src = args->value; > int blkcnt; > int valuelen; > int nmap; > int error; > - int hdrcnt = 0; > - bool crcs = xfs_sb_version_hascrc(&mp->m_sb); > int offset = 0; > > trace_xfs_attr_rmtval_set(args); > @@ -292,21 +414,14 @@ xfs_attr_rmtval_set( > * Find a "hole" in the attribute address space large enough for > * us to drop the new attribute's value into. Because CRC enable > * attributes have headers, we can't just do a straight byte to FSB > - * conversion. We calculate the worst case block count in this case > - * and we may not need that many, so we have to handle this when > - * allocating the blocks below. > + * conversion and have to take the header space into account. > */ > blkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); > - > error = xfs_bmap_first_unused(args->trans, args->dp, blkcnt, &lfileoff, > XFS_ATTR_FORK); > if (error) > return error; > > - /* Start with the attribute data. We'll allocate the rest afterwards. */ > - if (crcs) > - blkcnt = XFS_B_TO_FSB(mp, args->valuelen); > - > args->rmtblkno = lblkno = (xfs_dablk_t)lfileoff; > args->rmtblkcnt = blkcnt; > > @@ -349,31 +464,6 @@ xfs_attr_rmtval_set( > (map.br_startblock != HOLESTARTBLOCK)); > lblkno += map.br_blockcount; > blkcnt -= map.br_blockcount; > - hdrcnt++; > - > - /* > - * If we have enough blocks for the attribute data, calculate > - * how many extra blocks we need for headers. We might run > - * through this multiple times in the case that the additional > - * headers in the blocks needed for the data fragments spills > - * into requiring more blocks. e.g. for 512 byte blocks, we'll > - * spill for another block every 9 headers we require in this > - * loop. > - * > - * Note that this can result in contiguous allocation of blocks, > - * so we don't use all the space we allocate for headers as we > - * have one less header for each contiguous allocation that > - * occurs in the map/write loop below. > - */ > - if (crcs && blkcnt == 0) { > - int total_len; > - > - total_len = args->valuelen + > - hdrcnt * sizeof(struct xfs_attr3_rmt_hdr); > - blkcnt = XFS_B_TO_FSB(mp, total_len); > - blkcnt -= args->rmtblkcnt; > - args->rmtblkcnt += blkcnt; > - } > > /* > * Start the next trans in the chain. > @@ -390,17 +480,15 @@ xfs_attr_rmtval_set( > * the INCOMPLETE flag. > */ > lblkno = args->rmtblkno; > - valuelen = args->valuelen; > blkcnt = args->rmtblkcnt; > + valuelen = args->valuelen; > while (valuelen > 0) { > - int byte_cnt; > - int hdr_size; > - int dblkcnt; > - char *buf; > + struct xfs_buf *bp; > + xfs_daddr_t dblkno; > + int dblkcnt; > + > + ASSERT(blkcnt > 0); > > - /* > - * Try to remember where we decided to put the value. > - */ > xfs_bmap_init(args->flist, args->firstblock); > nmap = 1; > error = xfs_bmapi_read(dp, (xfs_fileoff_t)lblkno, > @@ -419,29 +507,17 @@ xfs_attr_rmtval_set( > if (!bp) > return ENOMEM; > bp->b_ops = &xfs_attr3_rmt_buf_ops; > - buf = bp->b_addr; > - > - byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, BBTOB(bp->b_length)); > - byte_cnt = min_t(int, valuelen, byte_cnt); > - hdr_size = xfs_attr3_rmt_hdr_set(mp, dp->i_ino, offset, > - byte_cnt, bp); > - ASSERT(hdr_size + byte_cnt <= BBTOB(bp->b_length)); > > - memcpy(buf + hdr_size, src, byte_cnt); > - > - if (byte_cnt + hdr_size < BBTOB(bp->b_length)) > - xfs_buf_zero(bp, byte_cnt + hdr_size, > - BBTOB(bp->b_length) - byte_cnt - hdr_size); > + xfs_attr_rmtval_copyin(mp, bp, args->dp->i_ino, &offset, > + &valuelen, &src); > > error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */ > xfs_buf_relse(bp); > if (error) > return error; > > - src += byte_cnt; > - valuelen -= byte_cnt; > - offset += byte_cnt; > > + /* roll attribute extent map forwards */ > lblkno += map.br_blockcount; > blkcnt -= map.br_blockcount; > } > @@ -454,19 +530,17 @@ xfs_attr_rmtval_set( > * out-of-line buffer that it is stored on. > */ > int > -xfs_attr_rmtval_remove(xfs_da_args_t *args) > +xfs_attr_rmtval_remove( > + struct xfs_da_args *args) > { > - xfs_mount_t *mp; > - xfs_bmbt_irec_t map; > - xfs_buf_t *bp; > - xfs_daddr_t dblkno; > - xfs_dablk_t lblkno; > - int valuelen, blkcnt, nmap, error, done, committed; > + struct xfs_mount *mp = args->dp->i_mount; > + xfs_dablk_t lblkno; > + int blkcnt; > + int error; > + int done; > > trace_xfs_attr_rmtval_remove(args); > > - mp = args->dp->i_mount; > - > /* > * Roll through the "value", invalidating the attribute value's blocks. > * Note that args->rmtblkcnt is the minimum number of data blocks we'll I believe this comment is now out of date and needs to be updated. > @@ -476,10 +550,13 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) > * lookups. > */ > lblkno = args->rmtblkno; > - valuelen = args->valuelen; > - blkcnt = xfs_attr3_rmt_blocks(mp, valuelen); > - while (valuelen > 0) { > - int dblkcnt; > + blkcnt = args->rmtblkcnt; > + while (blkcnt > 0) { > + struct xfs_bmbt_irec map; > + struct xfs_buf *bp; > + xfs_daddr_t dblkno; > + int dblkcnt; > + int nmap; > > /* > * Try to remember where we decided to put the value. > @@ -506,21 +583,19 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args) > bp = NULL; > } > > - valuelen -= XFS_ATTR3_RMT_BUF_SPACE(mp, > - XFS_FSB_TO_B(mp, map.br_blockcount)); > - > lblkno += map.br_blockcount; > blkcnt -= map.br_blockcount; > - blkcnt = max(blkcnt, xfs_attr3_rmt_blocks(mp, valuelen)); > } > > /* > * Keep de-allocating extents until the remote-value region is gone. > */ > - blkcnt = lblkno - args->rmtblkno; > lblkno = args->rmtblkno; > + blkcnt = args->rmtblkcnt; > done = 0; > while (!done) { > + int committed; > + > xfs_bmap_init(args->flist, args->firstblock); > error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, > XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, > diff --git a/fs/xfs/xfs_attr_remote.h b/fs/xfs/xfs_attr_remote.h > index c7cca60..92a8fd7 100644 > --- a/fs/xfs/xfs_attr_remote.h > +++ b/fs/xfs/xfs_attr_remote.h > @@ -20,6 +20,14 @@ > > #define XFS_ATTR3_RMT_MAGIC 0x5841524d /* XARM */ > > +/* > + * There is one of these headers per filesystem block in a remote attribute. > + * This is done to ensure there is a 1:1 mapping between the attribute value > + * length and the number of blocks needed to store the attribute. This makes the > + * verification of a buffer a little more complex, but greatly simplifies the > + * allocation, reading and writing of these attributes as we don't have to guess > + * the number of blocks needed to store the attribute data. > + */ > struct xfs_attr3_rmt_hdr { > __be32 rm_magic; > __be32 rm_offset; > @@ -39,6 +47,8 @@ struct xfs_attr3_rmt_hdr { > > extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops; > > +int xfs_attr3_rmt_blocks(struct xfs_mount *mp, int attrlen); > + > int xfs_attr_rmtval_get(struct xfs_da_args *args); > int xfs_attr_rmtval_set(struct xfs_da_args *args); > int xfs_attr_rmtval_remove(struct xfs_da_args *args); > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c > index 0d25542..1b2472a 100644 > --- a/fs/xfs/xfs_buf.c > +++ b/fs/xfs/xfs_buf.c > @@ -513,6 +513,7 @@ _xfs_buf_find( > xfs_alert(btp->bt_mount, > "%s: Block out of range: block 0x%llx, EOFS 0x%llx ", > __func__, blkno, eofs); > + WARN_ON(1); > return NULL; > } > > -- > 1.7.10.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Thu May 23 17:30:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BCD5D7F37 for ; Thu, 23 May 2013 17:30:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 47C24AC001 for ; Thu, 23 May 2013 15:30:44 -0700 (PDT) X-ASG-Debug-ID: 1369348241-04cbb0049db9e90001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id dU5mBHPpf9fZDaFD for ; Thu, 23 May 2013 15:30:42 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUOANyXnlF5LBBG/2dsb2JhbABZgwi9OoUgBAGBCxd0giMBAQU6HDMIAxgJJQ8FJQMhARKIDLoSFo1qgSSCc2EDlzqRQYMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 08:00:41 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ufe1u-0000Kb-KU; Fri, 24 May 2013 08:30:38 +1000 Date: Fri, 24 May 2013 08:30:38 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130523223038.GB24543@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522000803.GA19891@redhat.com> <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523184948.GA11151@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369348241 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131831 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 02:49:48PM -0400, Dave Jones wrote: > On Thu, May 23, 2013 at 07:54:54AM +1000, Dave Chinner wrote: > > > Gah, I've got not idea what the hell I was smoking yesterday > > afternoon. 0x2000 is actually ATTR_FILE, and 0x8000 is ATTR_OPEN. > > > > So a mask of 0xa068 is correct and valid from the open path, and > > 0x2068 is just file from the truncate path. > > > > But, neither of those should trigger that assert. indeed, on a test > > kernel (3.10-rc2 based): > > > > # echo I need a new drug > /mnt/scr/bah/blah/black/sheep/foo > > [ 296.742990] XFS (vdb): xfs_setattr_size: mask 0xa068, masked # 0x0 ii 0xffff88003e6297c0, d 0xffff88003e5b9cb0 path /bah/blah/black/sheep/foo > > # > > > > And there's not assert failure. Indeed, the "masked # 0x0" is what > > the assert is checking. > > > > And yeah, path output works. Trick for anyone who doesn't read the > > code closely - the buffer is filled from the end backwards, and the > > start of the path is the return variable. So, the above code is: > > > > { > > struct dentry *d = d_find_alias(VFS_I(ip)); > > char buf[MAXPATHLEN]; > > char *ptr; > > > > memset(buf, 0, MAXPATHLEN); > > ptr = dentry_path(d, buf, MAXPATHLEN); > > xfs_warn(mp, "%s: mask 0x%x, masked 0x%x ii 0x%p, d 0x%p path %s", > > __func__, mask, > > (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| > > ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| > > ATTR_KILL_PRIV|ATTR_TIMES_SET)), > > ip, d, ptr); > > dput(d); > > } > > > > Which I put just before the assert that is firing on your machine. > > > > And, obviously, it isn't firing on mine and obviously shouldn't be firing on a > > mask of 0xa068. > > With this, I get a spew of these when I start a kernel build.. > > [ 964.378690] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff880221b5d970 path /davej/tmp/ccN2RrM5.s > [ 964.651927] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ff80b90 path /davej/tmp/ccB1Cdmo.s > [ 964.867444] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff8802218a5bc0 path /davej/tmp/ccCUaXbG.s > [ 965.102661] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ffacde0 path /davej/tmp/cckMLf2X.s > [ 967.743312] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff88022212c250 path /davej/tmp/ccFMkBbA.s > [ 967.947154] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff8802226cc6f0 path /davej/tmp/cc5iX4SR.s > [ 968.009414] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a988000, d 0xffff8802219f1970 path /davej/tmp/ccvWCHTZ.o > [ 968.091504] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a9898c0, d 0xffff88022208de10 path /davej/tmp/cc9n6fnm.ld > [ 968.107997] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a98dac0, d 0xffff880221160de0 path /davej/tmp/cc5rlvHu.le Right, It's printing them out for every truncate that is done. Just print on the conditional that is was triggering the assert... Cheers, Dave. -- Dave Chinner david@fromorbit.com From bpm@sgi.com Thu May 23 17:51:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 24CB97F37 for ; Thu, 23 May 2013 17:51:23 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0921F30404E; Thu, 23 May 2013 15:51:22 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 798C8500B5E; Thu, 23 May 2013 17:51:22 -0500 (CDT) Date: Thu, 23 May 2013 17:51:22 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 06/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Message-ID: <20130523225122.GU20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-7-git-send-email-david@fromorbit.com> <20130522205059.GP20028@sgi.com> <20130522235450.GO29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522235450.GO29466@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, May 23, 2013 at 09:54:50AM +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 03:50:59PM -0500, Ben Myers wrote: > > On Tue, May 21, 2013 at 06:02:05PM +1000, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining > > > the entries in two leaves when the destination leaf requires > > > compaction. The temporary buffer ends up being copied back over the > > > original destination buffer, so the header in the temporary buffer > > > needs to contain all the information that is in the destination > > > buffer. > > > > > > To make sure the temporary buffer is fully initialised, once we've > > > set up the temporary incore header appropriately, write is back to > > > the temporary buffer before starting to move entries around. > > > > > > Signed-off-by: Dave Chinner > > > > > > --- > > > fs/xfs/xfs_attr_leaf.c | 16 +++++++++++++--- > > > 1 file changed, 13 insertions(+), 3 deletions(-) > > > > > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > > > index 0bce1b3..79ece72 100644 > > > --- a/fs/xfs/xfs_attr_leaf.c > > > +++ b/fs/xfs/xfs_attr_leaf.c > > > @@ -2181,14 +2181,24 @@ xfs_attr3_leaf_unbalance( > > > struct xfs_attr_leafblock *tmp_leaf; > > > struct xfs_attr3_icleaf_hdr tmphdr; > > > > > > - tmp_leaf = kmem_alloc(state->blocksize, KM_SLEEP); > > > - memset(tmp_leaf, 0, state->blocksize); > > > - memset(&tmphdr, 0, sizeof(tmphdr)); > > > + tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP); > > > + > > > + /* > > > + * Copy the header into the temp leaf so that all the stuff > > > + * not in the incore header is present and gets copied back in > > > + * once we've moved all the entries. > > > + */ > > > + memcpy(tmp_leaf, save_leaf, xfs_attr3_leaf_hdr_size(save_leaf)); > > > > > > + memset(&tmphdr, 0, sizeof(tmphdr)); > > > tmphdr.magic = savehdr.magic; > > > tmphdr.forw = savehdr.forw; > > > tmphdr.back = savehdr.back; > > > tmphdr.firstused = state->blocksize; > > > + > > > + /* write the header to the temp buffer to initialise it */ > > > + xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr); > > > + > > > > Hrm. It seemed like the memset 0 for the incore temp header should have been > > enough for the purposes of moveents. Why did you have to add this additional > > hdr_to_disk? > > Because we've modified the tmphdr so it is different to what is in > the tmp_leaf, and I'm being paranoid and not making any assumptions > that a callee doesn't reread the tmphdr from the tmp_leaf. > > i.e. I'm initialising both the on-disk and the incore headers to > be identical before we do anything else. Once bitten, twice shy. Reviewed-by: Ben Myers From bpm@sgi.com Thu May 23 17:51:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 32ED129E03 for ; Thu, 23 May 2013 17:51:42 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1342C30404E; Thu, 23 May 2013 15:51:42 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id D98EA500B5E; Thu, 23 May 2013 17:51:41 -0500 (CDT) Date: Thu, 23 May 2013 17:51:41 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 07/11] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Message-ID: <20130523225141.GV20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-8-git-send-email-david@fromorbit.com> <20130522215934.GQ20028@sgi.com> <20130522235820.GP29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130522235820.GP29466@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, May 23, 2013 at 09:58:20AM +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 04:59:34PM -0500, Ben Myers wrote: > > On Tue, May 21, 2013 at 06:02:06PM +1000, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > xfs_attr3_leaf_compact() uses a temporary buffer for compacting the > > > the entries in a leaf. It copies the the original buffer into the > > > temporary buffer, then zeros the original buffer completely. It then > > > copies the entries back into the original buffer. However, the > > > original buffer has not been correctly initialised, and so the > > > movement of the entries goes horribly wrong. > > > > > > Make sure the zeroed destination buffer is fully initialised, and > > > once we've set up the destination incore header appropriately, write > > > is back to the buffer before starting to move entries around. > > it > > > > > > > > While debugging this, the _d/_s prefixes weren't sufficient to > > > remind me what buffer was what, so rename then all _src/_dst. > > > > Yeah, it helps. > > > > > Signed-off-by: Dave Chinner > > > --- > > > fs/xfs/xfs_attr_leaf.c | 42 ++++++++++++++++++++++++++---------------- > > > 1 file changed, 26 insertions(+), 16 deletions(-) > > > > > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > > > index 79ece72..5b03d15 100644 > > > --- a/fs/xfs/xfs_attr_leaf.c > > > +++ b/fs/xfs/xfs_attr_leaf.c > > > @@ -1445,11 +1445,12 @@ xfs_attr3_leaf_add_work( > > > STATIC void > > > xfs_attr3_leaf_compact( > > > struct xfs_da_args *args, > > > - struct xfs_attr3_icleaf_hdr *ichdr_d, > > > + struct xfs_attr3_icleaf_hdr *ichdr_dst, > > > struct xfs_buf *bp) > > > { > > > - xfs_attr_leafblock_t *leaf_s, *leaf_d; > > > - struct xfs_attr3_icleaf_hdr ichdr_s; > > > + struct xfs_attr_leafblock *leaf_src; > > > + struct xfs_attr_leafblock *leaf_dst; > > > + struct xfs_attr3_icleaf_hdr ichdr_src; > > > struct xfs_trans *trans = args->trans; > > > struct xfs_mount *mp = trans->t_mountp; > > > char *tmpbuffer; > > > @@ -1457,29 +1458,38 @@ xfs_attr3_leaf_compact( > > > trace_xfs_attr_leaf_compact(args); > > > > > > tmpbuffer = kmem_alloc(XFS_LBSIZE(mp), KM_SLEEP); > > > - ASSERT(tmpbuffer != NULL); > > > memcpy(tmpbuffer, bp->b_addr, XFS_LBSIZE(mp)); > > > memset(bp->b_addr, 0, XFS_LBSIZE(mp)); > > > + leaf_src = (xfs_attr_leafblock_t *)tmpbuffer; > > > + leaf_dst = bp->b_addr; > > > > > > /* > > > - * Copy basic information > > > + * Copy the on-disk header back into the destination buffer to ensure > > > + * all the information in the header that is not part of the incore > > > + * header structure is preserved. > > > */ > > > - leaf_s = (xfs_attr_leafblock_t *)tmpbuffer; > > > - leaf_d = bp->b_addr; > > > - ichdr_s = *ichdr_d; /* struct copy */ > > > - ichdr_d->firstused = XFS_LBSIZE(mp); > > > - ichdr_d->usedbytes = 0; > > > - ichdr_d->count = 0; > > > - ichdr_d->holes = 0; > > > - ichdr_d->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_s); > > > - ichdr_d->freemap[0].size = ichdr_d->firstused - ichdr_d->freemap[0].base; > > > + memcpy(bp->b_addr, tmpbuffer, xfs_attr3_leaf_hdr_size(leaf_src)); > > > + > > > + /* Initialise the incore headers */ > > > + ichdr_src = *ichdr_dst; /* struct copy */ > > > + ichdr_dst->firstused = XFS_LBSIZE(mp); > > > + ichdr_dst->usedbytes = 0; > > > + ichdr_dst->count = 0; > > > + ichdr_dst->holes = 0; > > > + ichdr_dst->freemap[0].base = xfs_attr3_leaf_hdr_size(leaf_src); > > > + ichdr_dst->freemap[0].size = ichdr_dst->firstused - > > > + ichdr_dst->freemap[0].base; > > > + > > > + > > > + /* write the header back to initialise the underlying buffer */ > > > + xfs_attr3_leaf_hdr_to_disk(leaf_dst, ichdr_dst); > > > > I can see that the memcpy is necessary but again I'm having a hard time > > understanding what field was messed up for moveents. > > moveents wasn't messed up - it was all the non-incore headers that > were invalid (owner, uuid, blkno, etc) due to the zeroing of the tmp > buffer and then only writing the incore header back to it after > moveents. That's what the addition memcpy of the header fixes, and > then the xfs_attr3_leaf_hdr_to_disk() call updates all the fields > modified by initialisation so that before we start the in-core and > "on-disk" structures are identical. Reviewed-by: Ben Myers From david@fromorbit.com Thu May 23 18:13:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CB0257F37 for ; Thu, 23 May 2013 18:13:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B969B8F8066 for ; Thu, 23 May 2013 16:13:35 -0700 (PDT) X-ASG-Debug-ID: 1369350813-04cbb0049dbe1d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Yd6VkLlV6DVJm1BJ for ; Thu, 23 May 2013 16:13:34 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkYOAIGhnlF5LBBG/2dsb2JhbABZgwi9O4UgBAGBCxd0giMBAQQBOhwjEAgDDgcDCSUPBSUDIROIBwW6ChaNaoEdB4JzYQOXOpFBgyEqgS4k Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 08:43:33 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UfehQ-0000Pb-EB; Fri, 24 May 2013 09:13:32 +1000 Date: Fri, 24 May 2013 09:13:32 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write Message-ID: <20130523231332.GD24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 08/11] xfs: don't emit v5 superblock warnings on write References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-9-git-send-email-david@fromorbit.com> <20130522222608.GR20028@sgi.com> <20130523000327.GQ29466@dastard> <20130523152338.GS20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523152338.GS20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369350813 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131833 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 10:23:38AM -0500, Ben Myers wrote: > On Thu, May 23, 2013 at 10:03:27AM +1000, Dave Chinner wrote: > > On Wed, May 22, 2013 at 05:26:08PM -0500, Ben Myers wrote: > > > On Tue, May 21, 2013 at 06:02:07PM +1000, Dave Chinner wrote: > > > > From: Dave Chinner > > > > > > > > We write the superblock every 30s or so which results in the > > > > verifier being called. Right now that results in this output > > > > every 30s: > > > > > > > > XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! > > > > Use of these features in this kernel is at your own risk! > > > > > > > > And spamming the logs. Stop this output from occurring on superblock > > > > writes. > > > > > > > > Signed-off-by: Dave Chinner > > > > --- > > > > fs/xfs/xfs_mount.c | 18 +++++++++++------- > > > > 1 file changed, 11 insertions(+), 7 deletions(-) > > > > > > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > > > index f6bfbd7..e8e310c 100644 > > > > --- a/fs/xfs/xfs_mount.c > > > > +++ b/fs/xfs/xfs_mount.c > > > > @@ -314,7 +314,8 @@ STATIC int > > > > xfs_mount_validate_sb( > > > > xfs_mount_t *mp, > > > > xfs_sb_t *sbp, > > > > - bool check_inprogress) > > > > + bool check_inprogress, > > > > + bool check_version) > > > > { > > > > > > > > /* > > > > @@ -337,9 +338,10 @@ xfs_mount_validate_sb( > > > > > > > > /* > > > > * Version 5 superblock feature mask validation. Reject combinations the > > > > - * kernel cannot support up front before checking anything else. > > > > + * kernel cannot support up front before checking anything else. For > > > > + * write validation, we don't need to check feature masks. > > > > */ > > > > - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > > > > + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > > > > > > if (!quiet_version) { > > > > xfs_alert(mp, > > > > "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" > > > > "Use of these features in this kernel is at your own risk!"); > > > > > > } > > > > > > Since the stated goal of the patch is to be quieter and not to disable useful > > > tests in the verifier, I suggest you disable the print rather than disable the > > > test. > > > > Checking the feature fields for whether the kernel supports the > > features in them on write is not useful in any way. > > Could it not detect corruption of the feature flags before they're written out? > My impression was that this was among the design goals of the verifiers. It might, but we don't verify any of the existing feature flags, either. For that matter, how do you verify them when the in-core superblock can be modified asynchronously to the on-disk version in the buffer without locking the incore superblock? And if we do lock the incore superblock, how do we deal with the lock inversion that this causes? > > That's why the > > variable is named "check_version" because it skips the v5 > > version field checking. This is stuff that is used by the mount > > path (i.e. superblock read path), not the writeback path. > > You were saying above that it's the write path that is spamming the logs. The function is used by both the read and the write verifiers, but the feature mask checks are only relevant to the read path which occurs during mount. Doing the checks on write is what is spamming the logs. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 23 18:35:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3A86F7F37 for ; Thu, 23 May 2013 18:35:32 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id BDBD4AC002 for ; Thu, 23 May 2013 16:35:28 -0700 (PDT) X-ASG-Debug-ID: 1369352125-04cbb0049ebfb30001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id jVhuf9zhCwnSLeyz for ; Thu, 23 May 2013 16:35:26 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkYOAFunnlF5LBBG/2dsb2JhbABZgwi9O4UgBAGBCRd0giMBAQQBJxMcIwULCAMOBwMJDBkPBSUDIROIBwW6JxaNaoEdBwqCaWEDlzqRQYMhKg Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 09:05:04 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uff2E-0000Rf-0v; Fri, 24 May 2013 09:35:02 +1000 Date: Fri, 24 May 2013 09:35:01 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 09/11] xfs: rework remote attr CRCs Message-ID: <20130523233501.GE24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 09/11] xfs: rework remote attr CRCs References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-10-git-send-email-david@fromorbit.com> <20130523215405.GT20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523215405.GT20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369352125 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131835 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 04:54:05PM -0500, Ben Myers wrote: > Hi Dave, > > On Tue, May 21, 2013 at 06:02:08PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > Note: this changes the on-disk remote attribute format. I assert > > that this is OK to do as CRCs are marked experimental and the first > > kernel it is included in has not yet reached release yet. Further, > > the userspace utilities are still evolving and so anyone using this > > stuff right now is a developer or tester using volatile filesystems > > for testing this feature. Hence changing the format right now to > > save longer term pain is the right thing to do. > > I have no objection to changing the on-disk format for an experimental feature > even after it has released. People know what they're signing up for when > they're turning on experimental features. Or they soon will. We should > probably be nice and use feature bits though. I'm thinking about the unlinked > list modifications... > > > The fundamental change is to move from a header per extent in the > > attribute to a header per filesytem block in the attribute. This > > means there are more header blocks and the parsing of the attribute > > data is slightly more complex, but it has the advantage that we > > always know the size of the attribute on disk based on the length of > > the data it contains. > > > > This is where the header-per-extent method has problems. We don't > > know the size of the attribute on disk without first knowing how > > many extents are used to hold it. And we can't tell from a > > mapping lookup, either, because remote attributes can be allocated > > contiguously with other attribute blocks and so there is no obvious > > way of determining the actual size of the atribute on disk short of > > walking and mapping buffers. > > You can't tell exactly how many extents will be required to store the attribute > until after they've been allocated. At least... not until you're down to > trying to allocate the last block. > > > The problem with this approach is that if we map a buffer > > incorrectly (e.g. we make the last buffer for the attribute data too > > long), we then get buffer cache lookup failure when we map it > > correctly. i.e. we get a size mismatch on lookup. > > Ah. The resulting block count of a fragmented remote attribute is not > reflected in 'valuelen' in the remote attribute entry, so the number of headers > to account for is unknown. > > typedef struct xfs_attr_leaf_name_remote { > __be32 valueblk; /* block number of value bytes */ > __be32 valuelen; /* number of bytes in value */ > __u8 namelen; /* length of name bytes */ > __u8 name[1]; /* name bytes */ > } xfs_attr_leaf_name_remote_t; > > Other options: > > valuelen could be changed to a block count. Now that you have offset and > payload length in the header you can get valuelen from there on the last > extent. Which is an on-disk format change. If valuelen is stored a block count, how do you know how long the attribute data is in bytes? You don't - it's not stored on disk anymore in the the attribute entry. How do you return the length of the attribute to userspace on a lookup without now having to read the data blocks directly? > valuelen could be split in two, half is the block count and the other half is > the payload length in the last extent. Also an on disk format change. And it doesn't solve the problem, as you still can't work out the attribute data length because you don't know how many extents (and therefore headers) make up that block count. And both of these mean that all the remote attr code needs to handle the remote attribute data length information differently. i.e. Handle one type of indexing for existing filesystems and a different type of indexing for v5 superblocks. It just adds more complexity to what is already complex and fragile. > > This is not > > necessarily fatal, but it's a cache coherency problem that can lead > > to returning the wrong data to userspace or writing the wrong data > > to disk. And debug kernels will assert fail if this occurs. > > What data was being exposed? The data after the attribute? I thought testing > for valuelen would take care of that. Stale data. e.g. we do an attribute write and get a buffer length of 16 blocks at bno X. we then do an attribute read, and get a length of 8 blocks at bno X because we've failed to calculate the length correctly. A debug kernel will assert fail in _xfs_buf_find here because of the length mismatch. A production kernel may fail to find a match, and if it does fail, then we'll read from bno X to fill the buffer. So what is returned is not attribute data but whatever stale data is on disk at bno X.... > > + ASSERT(len >= XFS_LBSIZE(mp)); > > + > > + while (len > 0 && *valuelen > 0) { > > + int hdr_size; > > + int byte_cnt = XFS_ATTR3_RMT_BUF_SPACE(mp, XFS_LBSIZE(mp)); > > + > > + byte_cnt = min(*valuelen, byte_cnt); > ^^^ > > You used 'min_t(int,...)' above and min() here. Any reason? Both are of the same type, so min is appropriate. I'll fix it up. > > - xfs_mount_t *mp; > > - xfs_bmbt_irec_t map; > > - xfs_buf_t *bp; > > - xfs_daddr_t dblkno; > > - xfs_dablk_t lblkno; > > - int valuelen, blkcnt, nmap, error, done, committed; > > + struct xfs_mount *mp = args->dp->i_mount; > > + xfs_dablk_t lblkno; > > + int blkcnt; > > + int error; > > + int done; > > > > trace_xfs_attr_rmtval_remove(args); > > > > - mp = args->dp->i_mount; > > - > > /* > > * Roll through the "value", invalidating the attribute value's blocks. > > * Note that args->rmtblkcnt is the minimum number of data blocks we'll > > I believe this comment is now out of date and needs to be updated. Yup, good catch. Will fix. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 23 18:39:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 812847F37 for ; Thu, 23 May 2013 18:39:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 09BB4AC001 for ; Thu, 23 May 2013 16:39:28 -0700 (PDT) X-ASG-Debug-ID: 1369352366-04cbb0049abff40001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id N1CJrHkZSLhCDxHM for ; Thu, 23 May 2013 16:39:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUOAFunnlF5LBBG/2dsb2JhbABZgwi9O4UgBAGBCRd0giMBAQU6HCMQCAMVAwklDwUlAyETiAy6JxaNaoEdB4JzYQOXOpFBgyEq Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 09:09:26 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uff6T-0000SJ-Oy; Fri, 24 May 2013 09:39:25 +1000 Date: Fri, 24 May 2013 09:39:25 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss , linux-btrfs , Koen De Wit Subject: Re: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs Message-ID: <20130523233925.GF24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs References: <519E4590.4080309@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519E4590.4080309@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369352366 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131835 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 11:36:32AM -0500, Eric Sandeen wrote: > From: Koen De Wit > > # Tests file clone functionality of btrfs ("reflinks"): > # - Reflink a file > # - Reflink the reflinked file > # - Modify the original file > # - Modify the reflinked file > > [sandeen: add helpers, make several mostly-cosmetic > changes to the original testcase] > > Signed-off-by: Koen De Wit > Signed-off-by: Eric Sandeen > --- > > Originally submitted as test 297 FWIW, this will conflict with Josef's new btrfs/308 patch. You don't have to use monatomically increasing numbers for the tests anymore in the fileystem specifc test directories - you could make these tests btrfs/00[1-4].... :) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 23 18:42:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id F22CA7F37 for ; Thu, 23 May 2013 18:42:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7FDAAAC001 for ; Thu, 23 May 2013 16:42:18 -0700 (PDT) X-ASG-Debug-ID: 1369352536-04cb6c4741bd050001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id aOYspK0dqnUJBNJE for ; Thu, 23 May 2013 16:42:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUOAHGonlF5LBBG/2dsb2JhbABZgwi9O4UgBAGBCRd0giMBAQUnExwjEAgDDgoJJQ8FJQMhE4gMuioWjWqBHQeDVAOXOoochyWDISo Received: from ppp121-44-16-70.lns20.syd6.internode.on.net (HELO dastard) ([121.44.16.70]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 09:12:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uff9C-0000ST-VN; Fri, 24 May 2013 09:42:15 +1000 Date: Fri, 24 May 2013 09:42:14 +1000 From: Dave Chinner To: Chandra Seetharaman Cc: XFS mailing list Subject: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone Message-ID: <20130523234214.GG24543@dastard> X-ASG-Orig-Subj: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone References: <1369264363.10223.2994.camel@chandra-dt.ibm.com> <20130522234129.GN29466@dastard> <1369332542.10223.5271.camel@chandra-dt.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369332542.10223.5271.camel@chandra-dt.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369352536 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131835 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 01:09:02PM -0500, Chandra Seetharaman wrote: > On Thu, 2013-05-23 at 09:41 +1000, Dave Chinner wrote: > > On Wed, May 22, 2013 at 06:12:43PM -0500, Chandra Seetharaman wrote: > > > Hello, > > > > > > While testing and rearranging my pquota/gquota code, I stumbled on a > > > xfs_shutdown() during a mount. But the mount just hung. > > > > > > I debugged and found that it is in a code path where > > > &log->l_cilp->xc_ctx_lock is first acquired in read mode and some levels > > > down the same semaphore is being acquired in write mode causing a > > > deadlock. > > > > > > This is the stack: > > > xfs_log_commit_cil -> acquires &log->l_cilp->xc_ctx_lock in read mode > > > xlog_print_tic_res > > > xfs_force_shutdown > > > xfs_log_force_umount > > > xlog_cil_force > > > xlog_cil_force_lsn > > > xlog_cil_push_foreground > > > xlog_cil_push - tries to acquire same semaphore in write mode > > > > Which means you had a transaction reservation overrun. Is it > > reproducable? iDo you have the output from xlog_print_tic_res()? > > Because: > > Here it is: > > May 23 10:48:52 test46 kernel: [ 77.500728] XFS (sdh8): xlog_write: reservation summary: > May 23 10:48:52 test46 kernel: [ 77.500728] trans type = QM_SBCHANGE (26) > May 23 10:48:52 test46 kernel: [ 77.500728] unit res = 2740 bytes > May 23 10:48:52 test46 kernel: [ 77.500728] current res = -48 bytes > May 23 10:48:52 test46 kernel: [ 77.500728] total reg = 0 bytes (o/flow = 0 bytes) > May 23 10:48:52 test46 kernel: [ 77.500728] ophdrs = 0 (ophdr space = 0 bytes) > May 23 10:48:52 test46 kernel: [ 77.500728] ophdr + reg = 0 bytes > May 23 10:48:52 test46 kernel: [ 77.500728] num regions = 0 > May 23 10:48:52 test46 kernel: [ 77.500728] > > Yes. I can readily reproduce the problem, but it is with my mangled up > patchsets :). There is a small change that makes this problem reproduce > consistently. Interesting. That implies that the CIL stole the reservation for the checkpoint headers from this reservation, and then it overran by 48 bytes. An increase in the number of quotas should not affect this. What is the xfs_info output on the filesystem that is triggering this? Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Thu May 23 19:49:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 003207F37 for ; Thu, 23 May 2013 19:49:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C33A3304053 for ; Thu, 23 May 2013 17:49:13 -0700 (PDT) X-ASG-Debug-ID: 1369356552-04bdf07816c4870001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id uzUu3obG6UlXdTKh for ; Thu, 23 May 2013 17:49:12 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O0nAXo026224 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 20:49:10 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O0n83G027855 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 20:49:09 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4O0n7RV025645; Thu, 23 May 2013 20:49:07 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4O0n6cg025644; Thu, 23 May 2013 20:49:06 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 20:49:06 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524004906.GA21171@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522001603.GZ29466@dastard> <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523223038.GB24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369356552 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, May 24, 2013 at 08:30:38AM +1000, Dave Chinner wrote: > > > Which I put just before the assert that is firing on your machine. > > > > > > And, obviously, it isn't firing on mine and obviously shouldn't be firing on a > > > mask of 0xa068. > > > > With this, I get a spew of these when I start a kernel build.. > > > > [ 964.378690] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff880221b5d970 path /davej/tmp/ccN2RrM5.s > > [ 964.651927] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ff80b90 path /davej/tmp/ccB1Cdmo.s > > [ 964.867444] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff8802218a5bc0 path /davej/tmp/ccCUaXbG.s > > [ 965.102661] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ffacde0 path /davej/tmp/cckMLf2X.s > > [ 967.743312] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff88022212c250 path /davej/tmp/ccFMkBbA.s > > [ 967.947154] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff8802226cc6f0 path /davej/tmp/cc5iX4SR.s > > [ 968.009414] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a988000, d 0xffff8802219f1970 path /davej/tmp/ccvWCHTZ.o > > [ 968.091504] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a9898c0, d 0xffff88022208de10 path /davej/tmp/cc9n6fnm.ld > > [ 968.107997] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a98dac0, d 0xffff880221160de0 path /davej/tmp/cc5rlvHu.le > > Right, It's printing them out for every truncate that is done. > Just print on the conditional that is was triggering the assert... I'm missing something.. That's what I did ? - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| + + if ((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| - ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); + ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0) { + struct dentry *d = d_find_alias(VFS_I(ip)); + char buf[MAXPATHLEN]; + char *ptr; + + memset(buf, 0, MAXPATHLEN); + ptr = dentry_path(d, buf, MAXPATHLEN); + xfs_warn(mp, "%s: mask 0x%x, masked 0x%x ii 0x%p, d 0x%p path %s", + __func__, mask, + (mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| + ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| + ATTR_KILL_PRIV|ATTR_TIMES_SET)), + ip, d, ptr); + dput(d); + } From david@fromorbit.com Thu May 23 20:26:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9097E7F37 for ; Thu, 23 May 2013 20:26:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3C56FAC001 for ; Thu, 23 May 2013 18:26:30 -0700 (PDT) X-ASG-Debug-ID: 1369358788-04bdf063bd6ed70001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id wInVcbFpMTcAKfd4 for ; Thu, 23 May 2013 18:26:28 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUOAA3BnlF5LEc//2dsb2JhbABZgwi9OoUgBAGBChd0giMBAQU6HDMIAxgJJQ8FJQMhARKIDLoyFo1qgSSDVAOXOpFBgyEq Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl6.internode.on.net with ESMTP; 24 May 2013 10:56:27 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ufgm1-0000cT-9h; Fri, 24 May 2013 11:26:25 +1000 Date: Fri, 24 May 2013 11:26:25 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524012625.GH24543@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522025605.GA29767@redhat.com> <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524004906.GA21171@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369358788 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131842 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 08:49:06PM -0400, Dave Jones wrote: > On Fri, May 24, 2013 at 08:30:38AM +1000, Dave Chinner wrote: > > > > > Which I put just before the assert that is firing on your machine. > > > > > > > > And, obviously, it isn't firing on mine and obviously shouldn't be firing on a > > > > mask of 0xa068. > > > > > > With this, I get a spew of these when I start a kernel build.. > > > > > > [ 964.378690] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff880221b5d970 path /davej/tmp/ccN2RrM5.s > > > [ 964.651927] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ff80b90 path /davej/tmp/ccB1Cdmo.s > > > [ 964.867444] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff8802218a5bc0 path /davej/tmp/ccCUaXbG.s > > > [ 965.102661] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a95dac0, d 0xffff88020ffacde0 path /davej/tmp/cckMLf2X.s > > > [ 967.743312] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff88022212c250 path /davej/tmp/ccFMkBbA.s > > > [ 967.947154] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a93c200, d 0xffff8802226cc6f0 path /davej/tmp/cc5iX4SR.s > > > [ 968.009414] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a988000, d 0xffff8802219f1970 path /davej/tmp/ccvWCHTZ.o > > > [ 968.091504] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a9898c0, d 0xffff88022208de10 path /davej/tmp/cc9n6fnm.ld > > > [ 968.107997] XFS (sda2): xfs_setattr_size: mask 0xa068, masked 0x0 ii 0xffff88020a98dac0, d 0xffff880221160de0 path /davej/tmp/cc5rlvHu.le > > > > Right, It's printing them out for every truncate that is done. > > Just print on the conditional that is was triggering the assert... > > I'm missing something.. That's what I did ? > > - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| > + > + if ((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| > ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| > - ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); > + ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0) { You want to print the debug output if the masked value != 0. Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Thu May 23 20:37:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 331E17F37 for ; Thu, 23 May 2013 20:37:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B16A5AC003 for ; Thu, 23 May 2013 18:37:06 -0700 (PDT) X-ASG-Debug-ID: 1369359425-04cbb0049ec6a10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id XcUPOdSgLqjSSxSk for ; Thu, 23 May 2013 18:37:05 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O1b3vf010122 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 21:37:03 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O1b2Zq010389 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 21:37:03 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4O1b15E027421; Thu, 23 May 2013 21:37:01 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4O1b0n2027420; Thu, 23 May 2013 21:37:00 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 21:36:59 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524013659.GA25979@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524012625.GH24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369359425 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, May 24, 2013 at 11:26:25AM +1000, Dave Chinner wrote: > You want to print the debug output if the masked value != 0. Derp. Thanks. Rerunning the tests now. Hopefully I'll have something in a few hours. Dave From davej@redhat.com Thu May 23 20:52:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 812DC7F37 for ; Thu, 23 May 2013 20:52:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0B4CAAC001 for ; Thu, 23 May 2013 18:52:25 -0700 (PDT) X-ASG-Debug-ID: 1369360344-04cb6c4741c48c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id vi12NhUy2EcsM71V for ; Thu, 23 May 2013 18:52:25 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O1qMV8007527 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 21:52:22 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4O1qLk4032203 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 21:52:22 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4O1qKm2028538; Thu, 23 May 2013 21:52:20 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4O1qJ6w028537; Thu, 23 May 2013 21:52:19 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 21:52:19 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524015219.GA28486@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522040318.GG29466@dastard> <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524012625.GH24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369360344 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, May 24, 2013 at 11:26:25AM +1000, Dave Chinner wrote: > You want to print the debug output if the masked value != 0. XFS (sda2): xfs_setattr_size: mask 0xaa69, masked 0x801 ii 0xffff8802129e98c0, d 0xffff88021757d970 path /davej/src/trinity/tmp/tmp.5/ Dave From davej@redhat.com Thu May 23 22:03:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8B7957F37 for ; Thu, 23 May 2013 22:03:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 15D31AC005 for ; Thu, 23 May 2013 20:03:08 -0700 (PDT) X-ASG-Debug-ID: 1369364587-04cbb0049ccb780001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id yQSp8HGDNLBK1EVa for ; Thu, 23 May 2013 20:03:07 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O335Nt030479 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 23:03:05 -0400 Received: from gelk.kernelslacker.org (ovpn-113-119.phx2.redhat.com [10.3.113.119]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O333Zv004636 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 23 May 2013 23:03:04 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4O332c4031480; Thu, 23 May 2013 23:03:02 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4O331ns031479; Thu, 23 May 2013 23:03:01 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Thu, 23 May 2013 23:03:00 -0400 From: Dave Jones To: Dave Chinner , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524030300.GA30760@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522041521.GA1837@redhat.com> <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> <20130524015219.GA28486@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130524015219.GA28486@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369364587 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, May 23, 2013 at 09:52:19PM -0400, Dave Jones wrote: > On Fri, May 24, 2013 at 11:26:25AM +1000, Dave Chinner wrote: > =20 > > You want to print the debug output if the masked value !=3D 0. >=20 > XFS (sda2): xfs_setattr_size: mask 0xaa69, masked 0x801 ii 0xffff8802129= e98c0, d 0xffff88021757d970 path /davej/src/trinity/tmp/tmp.5/ ah, sneaky. There's some unprintable characters there that didn't show up i= n my terminal when I cut-n-pasted. They made it to the logs though.. XFS (sda2): xfs_setattr_size: mask 0xaa69, masked 0x801 ii 0xffff8802129e98= c0, d 0xffff88021757d970 path /davej/src/trinity/tmp/tmp.5/=01=01 Hexdump: of that part.. 706d 352e 012f 0a01=20 So filename is 0x01 0x01 Don't know if that's relevant to the bug or not.. Dave From eguan@redhat.com Thu May 23 22:09:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5ADDF7F37 for ; Thu, 23 May 2013 22:09:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1A4F2304043 for ; Thu, 23 May 2013 20:09:13 -0700 (PDT) X-ASG-Debug-ID: 1369364953-04bdf07816cc880001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ZkjoLfEfhXdKLrc4 for ; Thu, 23 May 2013 20:09:13 -0700 (PDT) X-Barracuda-Envelope-From: eguan@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O397jC032045 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 23:09:07 -0400 Received: from localhost (dhcp12-135.nay.redhat.com [10.66.12.135] (may be forged)) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O394TQ006402; Thu, 23 May 2013 23:09:05 -0400 Date: Fri, 24 May 2013 11:09:03 +0800 From: Eryu Guan To: Eric Sandeen Cc: xfs-oss , linux-btrfs , Koen De Wit Subject: Re: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs Message-ID: <20130524030903.GL2460@eguan-t400.nay.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs References: <519E4590.4080309@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519E4590.4080309@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369364953 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On Thu, May 23, 2013 at 11:36:32AM -0500, Eric Sandeen wrote: > From: Koen De Wit > > # Tests file clone functionality of btrfs ("reflinks"): > # - Reflink a file > # - Reflink the reflinked file > # - Modify the original file > # - Modify the reflinked file > > [sandeen: add helpers, make several mostly-cosmetic > changes to the original testcase] > > Signed-off-by: Koen De Wit > Signed-off-by: Eric Sandeen > --- > > Originally submitted as test 297 > > diff --git a/common/rc b/common/rc > index fe6bbfc..4560715 100644 > --- a/common/rc > +++ b/common/rc > @@ -2098,6 +2098,27 @@ _require_dumpe2fs() > fi > } > > +_require_cp_reflink() > +{ > + cp --help | grep -q reflink || \ > + _notrun "This test requires a cp with --reflink support." > +} > + > +# Given 2 files, verify that they have the same mapping but different > +# inodes - i.e. an undisturbed reflink > +# Silent if so, make noise if not > +_verify_reflink() > +{ > + # not a hard link or symlink? > + cmp -s <(stat -c '%i' $1) <(stat -c '%i' $2) \ > + && echo "$1 and $2 are not reflinks: same inode number" > + > + # same mapping? > + diff -u <($XFS_IO_PROG -F -c "fiemap" $1 | grep -v $1) \ > + <($XFS_IO_PROG -F -c "fiemap" $2 | grep -v $2) \ > + || echo "$1 and $2 are not reflinks: different extents" I'm not sure if "-F" is still needed after commit 96fce07 xfstests: automatically add -F to xfs_io on non-xfs > +} > + > _create_loop_device() > { > file=$1 > diff --git a/tests/btrfs/308 b/tests/btrfs/308 > new file mode 100755 > index 0000000..1bb8f02 > --- /dev/null > +++ b/tests/btrfs/308 > @@ -0,0 +1,87 @@ > +#! /bin/bash > +# FS QA Test No. btrfs/308 > +# > +# Tests file clone functionality of btrfs ("reflinks"): > +# - Reflink a file > +# - Reflink the reflinked file > +# - Modify the original file > +# - Modify the reflinked file > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. common/rc > +. common/filter > + > +# real QA test starts here > +_supported_fs btrfs > +_supported_os Linux > + > +_require_xfs_io_fiemap > +_require_cp_reflink > + > +TESTDIR1=$TEST_DIR/test-$seq > +rm -rf $TESTDIR1 > +mkdir $TESTDIR1 > + > +_checksum_files() { > + for F in original copy1 copy2 > + do > + md5sum $TESTDIR1/$F | _filter_test_dir > + done > +} > + > +rm -f $seqres.full > + > +echo "Create the original file and reflink to copy1, copy2" > +$XFS_IO_PROG -F -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original >> $seqres.full 2>&1 Here too, maybe we can drop "-F" option? Also 309 has this issue too. 310 and 311 are fine. Thanks, Eryu Guan > +cp --reflink $TESTDIR1/original $TESTDIR1/copy1 > +cp --reflink $TESTDIR1/copy1 $TESTDIR1/copy2 > +_verify_reflink $TESTDIR1/original $TESTDIR1/copy1 > +_verify_reflink $TESTDIR1/original $TESTDIR1/copy2 > +echo "Original md5sums:" > +_checksum_files > + > +echo "Overwrite original file with new data" > +$XFS_IO_PROG -c 'pwrite -S 0x62 0 9000' $TESTDIR1/original >> $seqres.full 2>&1 > +echo "md5sums after overwriting original:" > +_checksum_files > + > +echo "Overwrite copy1 with different new data" > +$XFS_IO_PROG -c 'pwrite -S 0x63 0 9000' $TESTDIR1/copy1 >> $seqres.full 2>&1 > +echo "md5sums after overwriting copy1:" > +_checksum_files > + > +# success, all done > +status=0 > +exit > diff --git a/tests/btrfs/308.out b/tests/btrfs/308.out > new file mode 100644 > index 0000000..7bccf08 > --- /dev/null > +++ b/tests/btrfs/308.out > @@ -0,0 +1,16 @@ > +QA output created by 308 > +Create the original file and reflink to copy1, copy2 > +Original md5sums: > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/original > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy1 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy2 > +Overwrite original file with new data > +md5sums after overwriting original: > +4a847a25439532bf48b68c9e9536ed5b TEST_DIR/test-308/original > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy1 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy2 > +Overwrite copy1 with different new data > +md5sums after overwriting copy1: > +4a847a25439532bf48b68c9e9536ed5b TEST_DIR/test-308/original > +e271cd47d9f62ebc96cb4e67ae4d16db TEST_DIR/test-308/copy1 > +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-308/copy2 > diff --git a/tests/btrfs/group b/tests/btrfs/group > index bc6c256..f24628c 100644 > --- a/tests/btrfs/group > +++ b/tests/btrfs/group > @@ -9,3 +9,4 @@ > 276 auto rw metadata > 284 auto > 307 auto quick > +308 auto quick reflink > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From qcai@redhat.com Thu May 23 22:33:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CA1B37F37 for ; Thu, 23 May 2013 22:33:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id B8A908F8052 for ; Thu, 23 May 2013 20:33:46 -0700 (PDT) X-ASG-Debug-ID: 1369366424-04cb6c4742ca240001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 1zqjw33EFG6aWfIr for ; Thu, 23 May 2013 20:33:45 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4O3Xd0k008329; Thu, 23 May 2013 23:33:39 -0400 Date: Thu, 23 May 2013 23:33:39 -0400 (EDT) From: CAI Qian To: linux-s390 , linuxppc-dev@lists.ozlabs.org Cc: LKML , stable@vger.kernel.org, xfs@oss.sgi.com, Steve Best , Hendrik Brueckner , Dave Chinner Message-ID: <806463874.5711876.1369366419059.JavaMail.root@redhat.com> In-Reply-To: <1125086079.5019070.1369285040855.JavaMail.root@redhat.com> References: <40971621.4497871.1369211701112.JavaMail.root@redhat.com> <1805266998.4499261.1369211998387.JavaMail.root@redhat.com> <20130522095300.GK29466@dastard> <1483868349.4996990.1369279016162.JavaMail.root@redhat.com> <20130523034611.GX24543@dastard> <1125086079.5019070.1369285040855.JavaMail.root@redhat.com> Subject: Re: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xfstests triggered panic) MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xfstests triggered panic) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xfstests triggered panic) Thread-Index: UrqmsS7Y5wTYDzl3iTO6fgrXyEgS3liyEEZW X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369366425 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 OK, here is clearer stack output from the run. CAI Qian + ./check FSTYP -- xfs (non-debug) PLATFORM -- Linux/s390x ibm-z10-23 3.9.3 001=09 29s 002=09 3s 003=09 2s 004=09 [not run] this test requires a valid $SCRATCH_DEV 005=09 2s 006=09 9s 007=09 10s 008=09 7s 009=09 [not run] this test requires a valid $SCRATCH_DEV 010=09 [not run] dbtest was not built for this platform 011=09 9s 012=09 10s 013=09 35s 014=09 5s 015=09 [not run] this test requires a valid $SCRATCH_DEV 016=09 [not run] this test requires a valid $SCRATCH_DEV 017=09 [not run] this test requires a valid $SCRATCH_DEV 018=09 [not run] this test requires a valid $SCRATCH_DEV 019=09 [not run] this test requires a valid $SCRATCH_DEV 020=09 [ 1316.571227] XFS (dm-0): Mounting Filesystem [ 1316.697803] XFS (dm-0): Ending clean mount [ 1318.080615] XFS (dm-0): Ending clean mount [ 1348.791125] XFS (dm-0): Mounting Filesystem [ 1348.989166] XFS (dm-0): Ending clean mount [ 1353.335478] XFS (dm-0): Mounting Filesystem [ 1353.496364] XFS (dm-0): Ending clean mount [ 1357.495427] XFS (dm-0): Mounting Filesystem [ 1357.676971] XFS (dm-0): Ending clean mount [ 1361.646399] XFS (dm-0): Mounting Filesystem [ 1361.890426] XFS (dm-0): Ending clean mount [ 1371.798944] XFS (dm-0): Mounting Filesystem [ 1371.976922] XFS (dm-0): Ending clean mount [ 1384.559103] XFS (dm-0): Mounting Filesystem [ 1384.725657] XFS (dm-0): Ending clean mount [ 1393.131347] XFS (dm-0): Mounting Filesystem [ 1393.357927] XFS (dm-0): Ending clean mount [ 1407.282708] XFS (dm-0): Mounting Filesystem [ 1407.745176] XFS (dm-0): Ending clean mount [ 1422.927074] XFS (dm-0): Mounting Filesystem [ 1423.136266] XFS (dm-0): Ending clean mount [ 1425.500910] XFS (dm-0): Mounting Filesystem [ 1425.608851] XFS (dm-0): Ending clean mount [ 1450.978110] XFS (dm-0): Mounting Filesystem [ 1451.255368] XFS (dm-0): Ending clean mount [ 1453.603742] XFS (dm-0): Mounting Filesystem [ 1453.680657] XFS (dm-0): Ending clean mount [ 1456.262266] XFS (dm-0): Mounting Filesystem [ 1456.330515] XFS (dm-0): Ending clean mount [ 1457.053767] XFS (dm-0): Mounting Filesystem [ 1457.107258] XFS (dm-0): Ending clean mount [ 1462.049374] XFS (dm-0): Mounting Filesystem [ 1462.111389] XFS (dm-0): Ending clean mount [ 1471.109589] ODEBUG: deactivate not available (active state 0) object typ= e: ti mer_list hint: process_timeout+0x0/0x8 [ 1471.109683] ------------[ cut here ]------------ [ 1471.109688] WARNING: at lib/debugobjects.c:260 [ 1471.109692] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.109848] CPU: 0 Tainted: GF 3.9.3 #2 [ 1471.109858] Process swapper/0 (pid: 0, task: 0000000000a2b4d0, ksp: 0000= 00000 0a17d28) [ 1471.109868] Krnl PSW : 0404c00180000000 000000000046c84a (debug_print_ob= ject+ 0xca/0xd8) [ 1471.114762] R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:= 0 EA: 3 Krnl GPRS: 0000000000000000 0000000000a2b4d0 0000000000000067 000000000101f= 708 [ 1471.114769] 000000000046c846 0000000084a4d448 000000000086936= a 000 0000001040700 [ 1471.114773] 0000000001a0f290 0400000000000001 0000000000874cf= 8 000 0000000a395d8 [ 1471.114777] 000000000195f820 000000000001bd20 000000000046c84= 6 000 000000001bc20 [ 1471.114792] Krnl Code: 000000000046c83a: e34410000004 lg %r4= ,0(%r 4,%r1) 000000000046c840: c0e500139f88 brasl %r14,6e0750 #000000000046c846: a7f40001 brc 15,46c848 >000000000046c84a: a7f4ffc2 brc 15,46c7ce 000000000046c84e: a7290000 lghi %r2,0 000000000046c852: a7f4ffd7 brc 15,46c800 000000000046c856: 0707 bcr 0,%r7 000000000046c858: ebaff0680024 stmg %r10,%r15,104(%r15) [ 1471.114825] Call Trace: [ 1471.114828] ([<000000000046c846>] debug_print_object+0xc6/0xd8) [ 1471.114833] [<000000000046d35c>] debug_object_deactivate+0x15c/0x160 [ 1471.114838] [<0000000000148244>] run_timer_softirq+0x180/0x464 [ 1471.114843] [<000000000013d8d6>] __do_softirq+0x112/0x42c [ 1471.114847] [<000000000013ddf8>] irq_exit+0xc8/0xe8 [ 1471.114851] [<000000000010d55e>] do_extint+0x25e/0x318 [ 1471.114859] [<00000000006f0d90>] ext_skip+0x40/0x44 [ 1471.114866] [<00000000006f05d6>] vtime_stop_cpu+0x52/0xbc [ 1471.114870] ([<00000000006f05b4>] vtime_stop_cpu+0x30/0xbc) [ 1471.114874] [<000000000010476e>] cpu_idle+0x112/0x1b8 [ 1471.114879] [<0000000000aaf99a>] start_kernel+0x42e/0x43c [ 1471.114885] [<0000000000100020>] _stext+0x20/0x80 [ 1471.114891] 2 locks held by swapper/0/0: [ 1471.114894] #0: (&(&base->lock)->rlock){-.-.-.}, at: [<000000000014812= 8>] r un_timer_softirq+0x64/0x464 [ 1471.114908] #1: (&obj_hash[i].lock){-.-.-.}, at: [<000000000046d2ba>] = debug _object_deactivate+0xba/0x160 [ 1471.114918] Last Breaking-Event-Address: [ 1471.114921] [<000000000046c846>] debug_print_object+0xc6/0xd8 [ 1471.114927] ---[ end trace dd87895f75677361 ]--- [ 1471.117683] ODEBUG: object is on stack, but not annotated [ 1471.117723] ------------[ cut here ]------------ [ 1471.117726] WARNING: at lib/debugobjects.c:300 [ 1471.117729] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.117791] CPU: 0 Tainted: GF W 3.9.3 #2 [ 1471.117794] Process rcu_sched (pid: 10, task: 00000000fffe8000, ksp: 000= 00000 fffe7ae0) [ 1471.117797] Krnl PSW : 0404c00180000000 000000000046ccce (__debug_object= _init +0x35a/0x480) [ 1471.117804] R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:= 0 EA: 3 Krnl GPRS: 0000000000000000 00000000fffe8000 000000000000002d 000000000101f= 708 [ 1471.117811] 000000000046ccca 0000000000000001 0000000000a395d= 8 070 0000000000000 [ 1471.117814] 0000000000a78750 0000000001a0f298 00000000fffe7cf= 0 000 00000f8daa938 [ 1471.117818] 0000000001a0f290 00000000007434c0 000000000046ccc= a 00 00000fffe7a40 [ 1471.117852] Krnl Code: 000000000046ccbe: c02000217617 larl %r2= ,89b8 ec 000000000046ccc4: c0e500139d46 brasl %r14,6e0750 #000000000046ccca: a7f40001 brc 15,46cccc >000000000046ccce: a7f4ff03 brc 15,46cad4 000000000046ccd2: a7380000 lhi %r3,0 000000000046ccd6: a7f4ffe9 brc 15,46cca8 000000000046ccda: c02000217622 larl %r2,89b91e 000000000046cce0: c0e500139d38 brasl %r14,6e0750 [ 1471.117884] Call Trace: [ 1471.117887] ([<000000000046ccca>] __debug_object_init+0x356/0x480) [ 1471.117891] [<0000000000146f42>] init_timer_key+0x3a/0x164 [ 1471.117897] [<0000000000147eac>] timer_fixup_assert_init+0x50/0xa8 [ 1471.117901] [<000000000046d7a4>] debug_object_assert_init+0x124/0x154 [ 1471.117906] [<0000000000148676>] try_to_del_timer_sync+0x2e/0x94 [ 1471.117910] [<000000000014878e>] del_timer_sync+0xb2/0x104 [ 1471.117915] [<00000000006ea950>] schedule_timeout+0x190/0x37c [ 1471.117922] [<00000000001f1118>] rcu_gp_kthread+0x320/0x59c [ 1471.117927] [<0000000000164176>] kthread+0xe6/0xec [ 1471.117934] [<00000000006f0906>] kernel_thread_starter+0x6/0xc [ 1471.117938] [<00000000006f0900>] kernel_thread_starter+0x0/0xc [ 1471.117943] 1 lock held by rcu_sched/10: [ 1471.117945] #0: (&obj_hash[i].lock){-.-.-.}, at: [<000000000046caba>] = __deb ug_object_init+0x146/0x480 [ 1471.117955] Last Breaking-Event-Address: [ 1471.117958] [<000000000046ccca>] __debug_object_init+0x356/0x480 [ 1471.117962] ---[ end trace dd87895f75677362 ]--- [ 1471.117967] ODEBUG: assert_init not available (active state 0) object ty= pe: t imer_list hint: stub_timer+0x0/0x8 [ 1471.117984] ------------[ cut here ]------------ [ 1471.117987] WARNING: at lib/debugobjects.c:260 [ 1471.117990] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.118053] CPU: 0 Tainted: GF W 3.9.3 #2 [ 1471.118075] Process rcu_sched (pid: 10, task: 00000000fffe8000, ksp: 000= 00000 fffe7ae0) [ 1471.118079] Krnl PSW : 0704e00180000000 000000000046c84a (debug_print_ob= ject+ 0xca/0xd8) [ 1471.118085] R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:= 0 EA: 3 Krnl GPRS: 0000000000000000 00000000fffe8000 0000000000000063 0000000000000= 001 [ 1471.118092] 000000000046c846 0000000000000001 000000000086936= a 000 0000000a1d300 [ 1471.118095] 0000000001a0f290 07000000006ed3fc 000000000089ba1= 4 000 0000000a395d8 [ 1471.118099] 000000000195f820 00000000fffe7bc8 000000000046c84= 6 000 00000fffe7ac8 [ 1471.118109] Krnl Code: 000000000046c83a: e34410000004 lg %r4= ,0(%r 4,%r1) 000000000046c840: c0e500139f88 brasl %r14,6e0750 #000000000046c846: a7f40001 brc 15,46c848 >000000000046c84a: a7f4ffc2 brc 15,46c7ce 000000000046c84e: a7290000 lghi %r2,0 000000000046c852: a7f4ffd7 brc 15,46c800 000000000046c856: 0707 bcr 0,%r7 000000000046c858: ebaff0680024 stmg %r10,%r15,104(%r15) [ 1471.118141] Call Trace: [ 1471.118144] ([<000000000046c846>] debug_print_object+0xc6/0xd8) [ 1471.118149] [<000000000046d7ce>] debug_object_assert_init+0x14e/0x154 [ 1471.118153] [<0000000000148676>] try_to_del_timer_sync+0x2e/0x94 [ 1471.118158] [<000000000014878e>] del_timer_sync+0xb2/0x104 [ 1471.118163] [<00000000006ea950>] schedule_timeout+0x190/0x37c [ 1471.118167] [<00000000001f1118>] rcu_gp_kthread+0x320/0x59c [ 1471.118172] [<0000000000164176>] kthread+0xe6/0xec [ 1471.118176] [<00000000006f0906>] kernel_thread_starter+0x6/0xc [ 1471.118180] [<00000000006f0900>] kernel_thread_starter+0x0/0xc [ 1471.118185] no locks held by rcu_sched/10. [ 1471.118188] Last Breaking-Event-Address: [ 1471.118190] [<000000000046c846>] debug_print_object+0xc6/0xd8 [ 1471.118195] ---[ end trace dd87895f75677363 ]--- [ 1471.121980] Unable to handle kernel pointer dereference at virtual kerne= l add ress 000003ff8072c000 [ 1471.123714] Oops: 0011 [#1] SMP [ 1471.123720] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.123777] CPU: 0 Tainted: GF W 3.9.3 #2 [ 1471.123781] Process systemd-journal (pid: 516, task: 00000000f5ad8000, k= sp: 0 0000000f544fbd0) [ 1471.123784] Krnl PSW : 0704e00180000000 000003ff80749cc2 (xfs_vm_page_mk= write +0x12/0x1c [xfs]) [ 1471.154773] R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:= 0 EA: 3 Krnl GPRS: 00000000000015e8 000003ff8072cc30 0000000000000001 0000000000000= 000 [ 1471.154781] 00000000006ef176 00000000007036b8 00000000f97b7d9= 8 000 003fffb3e7000 [ 1471.154784] 000003fffb3e7000 00000000f8f65a00 00000000f847273= 8 000 00000f8ffc2c0 [ 1471.154788] 00000000f8472738 000000000070d5e0 000003ff80749cb= 6 000 00000f544fc28 [ 1471.154802] Krnl Code: 000003ff80749cb6: 1222 ltr %r2= ,%r2 000003ff80749cb8: a784ffd8 brc 8,3ff80749c68 #000003ff80749cbc: c010ffff17ba larl %r1,3ff8072cc30 >000003ff80749cc2: e31010000004 lg %r1,0(%r1) 000003ff80749cc8: e32010000012 lt %r2,0(%r1) 000003ff80749cce: a7740032 brc 7,3ff80749d32 000003ff80749cd2: e31003180004 lg %r1,792 000003ff80749cd8: e330101c0012 lt %r3,28(%r1) [ 1471.154838] Call Trace: [ 1471.154841] ([<0000000000261870>] do_wp_page+0x6f8/0xa4c) [ 1471.154851] [<0000000000262f2c>] handle_pte_fault+0x65c/0xa10 [ 1471.154856] [<0000000000264a22>] handle_mm_fault+0x182/0x260 [ 1471.154860] [<00000000006f21d0>] do_protection_exception+0x1b8/0x3cc [ 1471.154867] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.154871] [<000000008001d60a>] 0x8001d60a [ 1471.154894] INFO: lockdep is turned off. [ 1471.154897] Last Breaking-Event-Address: [ 1471.154899] [<00000000001ed7ca>] rcu_lockdep_current_cpu_online+0x6e/0x= 84 [ 1471.154909] [ 1471.154913] ---[ end trace dd87895f75677364 ]--- [ 1471.157438] ------------[ cut here ]------------ [ 1471.157446] Kernel BUG at 00000000006eb186 [verbose debug info unavailab= le] [ 1471.157508] addressing exception: 0005 [#2] SMP [ 1471.157514] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.157574] CPU: 0 Tainted: GF D W 3.9.3 #2 [ 1471.157577] Process systemd-journal (pid: 516, task: 00000000f5ad8000, k= sp: 0 0000000f544f578) [ 1471.157580] Krnl PSW : 0404d00180000000 00000000006eb186 (mutex_lock_nes= ted+0 xde/0x36c) [ 1471.157591] R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:1 PM:= 0 EA: 3 Krnl GPRS: 000000000000166e 0000000000000000 00000000ffffffff 0000000000a78= 630 [ 1471.157597] 0000000000000000 0000000000000000 000000000000000= 2 000 00000100073f8 [ 1471.157601] 00000000f5ad8000 000000000101f708 000000000000000= 0 070 0000000000000 [ 1471.157604] 0000000010007388 0000000010007380 00000000006eb17= 0 000 00000f544f658 [ 1471.157616] Krnl Code: 00000000006eb178: a7180000 lhi %r1= ,0 00000000006eb17c: c027ffffffff xilf %r2,4294967295 #00000000006eb182: ba12d008 cs %r1,%r2,8(%r13) >00000000006eb186: 1211 ltr %r1,%r1 00000000006eb188: a774011b brc 7,6eb3be 00000000006eb18c: e31090000012 lt %r1,0(%r9) 00000000006eb192: a7740007 brc 7,6eb1a0 00000000006eb196: e3d0d0700020 cg %r13,112(%r13) [ 1471.157650] Call Trace: [ 1471.157652] ([<00000000006eb170>] mutex_lock_nested+0xc8/0x36c) [ 1471.157657] [<0000000000260e3e>] unmap_single_vma+0x786/0x7d0 [ 1471.157663] [<000000000026219c>] unmap_vmas+0x50/0x74 [ 1471.157666] [<000000000026b7aa>] exit_mmap+0x186/0x224 [ 1471.157671] [<000000000012ef88>] mmput+0x84/0x110 [ 1471.157677] [<0000000000139fd2>] do_exit+0x2c6/0xce8 [ 1471.157682] [<0000000000100ef2>] die+0x13e/0x158 [ 1471.157687] [<000000000011dd6e>] do_no_context+0xba/0xf0 [ 1471.157692] [<00000000006f2714>] do_dat_exception+0x330/0x390 [ 1471.157697] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.157701] [<000003ff80749cc2>] xfs_vm_page_mkwrite+0x12/0x1c [xfs] [ 1471.157800] ([<0000000000261870>] do_wp_page+0x6f8/0xa4c) [ 1471.157805] [<0000000000262f2c>] handle_pte_fault+0x65c/0xa10 [ 1471.157809] [<0000000000264a22>] handle_mm_fault+0x182/0x260 [ 1471.157813] [<00000000006f21d0>] do_protection_exception+0x1b8/0x3cc [ 1471.157817] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.157821] [<000000008001d60a>] 0x8001d60a [ 1471.157827] INFO: lockdep is turned off. [ 1471.157829] Last Breaking-Event-Address: [ 1471.157832] [<00000000001af490>] trace_hardirqs_off_caller+0x7c/0xb0 [ 1471.157840] [ 1471.157857] ---[ end trace dd87895f75677365 ]--- [ 1471.157863] Fixing recursive fault but reboot is needed! [ 1471.157867] BUG: scheduling while atomic: systemd-journal/516/0x00000002 [ 1471.157870] INFO: lockdep is turned off. [ 1471.157872] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.157928] CPU: 0 Tainted: GF D W 3.9.3 #2 [ 1471.157931] Process systemd-journal (pid: 516, task: 00000000f5ad8000, k= sp: 0 0000000f544f578) [ 1471.157934] 00000000f544f168 00000000f544f178 0000000000000002 00= 00000 000000000 00000000f544f208 00000000f544f180 00000000f544f180 0000000000100a1e 0000000000000000 0000000000ffb000 000000000000000a 000000000000000a 00000000f544f1c8 00000000f544f168 0000000000000000 0000000000000000 00000000f5ad8000 0000000000100a1e 00000000f544f168 00000000f544f1b8 [ 1471.157966] Call Trace: [ 1471.157968] ([<0000000000100920>] show_trace+0xf0/0x148) [ 1471.157973] [<00000000006e0e88>] __schedule_bug+0x80/0x98 [ 1471.157977] [<00000000006ed9ea>] __schedule+0xc6a/0xcc8 [ 1471.157981] [<000000000013a99e>] do_exit+0xc92/0xce8 [ 1471.157985] [<0000000000100ef2>] die+0x13e/0x158 [ 1471.157990] [<00000000006f02ac>] do_per_trap+0x0/0xb4 [ 1471.157993] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.157997] [<00000000006eb186>] mutex_lock_nested+0xde/0x36c [ 1471.158002] ([<00000000006eb170>] mutex_lock_nested+0xc8/0x36c) [ 1471.158006] [<0000000000260e3e>] unmap_single_vma+0x786/0x7d0 [ 1471.158010] [<000000000026219c>] unmap_vmas+0x50/0x74 [ 1471.158014] [<000000000026b7aa>] exit_mmap+0x186/0x224 [ 1471.158018] [<000000000012ef88>] mmput+0x84/0x110 [ 1471.158021] [<0000000000139fd2>] do_exit+0x2c6/0xce8 [ 1471.158025] [<0000000000100ef2>] die+0x13e/0x158 [ 1471.158029] [<000000000011dd6e>] do_no_context+0xba/0xf0 [ 1471.158033] [<00000000006f2714>] do_dat_exception+0x330/0x390 [ 1471.158037] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.158041] [<000003ff80749cc2>] xfs_vm_page_mkwrite+0x12/0x1c [xfs] [ 1471.158070] ([<0000000000261870>] do_wp_page+0x6f8/0xa4c) [ 1471.158074] [<0000000000262f2c>] handle_pte_fault+0x65c/0xa10 [ 1471.158078] [<0000000000264a22>] handle_mm_fault+0x182/0x260 [ 1471.158082] [<00000000006f21d0>] do_protection_exception+0x1b8/0x3cc [ 1471.158086] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.158090] [<000000008001d60a>] 0x8001d60a [ 1471.158094] INFO: lockdep is turned off. [ 1471.158221] Unable to handle kernel paging request at virtual user addre= ss (null) [ 1471.158247] Oops: 0004 [#3] SMP [ 1471.158251] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) qeth= _l2(F ) vmur(F) xfs(F) libcrc32c(F) dasd_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_= mod(F ) ctcm(F) qeth(F) qdio(F) ccwgroup(F) fsm(F) dm_mirror(F) dm_region_hash(F)= dm_l og(F) dm_mod(F) [ 1471.158306] CPU: 0 Tainted: GF D W 3.9.3 #2 [ 1471.158309] Process in:imklog (pid: 765, task: 00000000fc7f2430, ksp: 00= 00000 0fc36fd50) [ 1471.158312] Krnl PSW : 0404e00180000000 0000000000183520 (tg_load_down+0= x60/0 xb0) [ 1471.158320] R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:= 0 EA: 3 Krnl GPRS: 0000000000000040 0000000000000000 0000000000000000 0000000000000= 008 [ 1471.158327] 0000000000000000 0000000000000000 00000000f925340= 0 000 0000000aa0854 [ 1471.158330] 0000000000aa0852 00000000001834c0 0000000000170ed= c 000 0000000000000 [ 1471.158333] 00000000f9187e00 00000000fcd5c800 000000000017a33= 0 000 00000fc36fb48 [ 1471.158343] Krnl Code: 0000000000183512: a7290000 lghi %r2= ,0 0000000000183516: e31310000004 lg %r1,0(%r3,%r1) #000000000018351c: b9040045 lgr %r4,%r5 >0000000000183520: e34010980024 stg %r4,152(%r1) 0000000000183526: ebbcf0700004 lmg %r11,%r12,112(%r15) 000000000018352c: 07fe bcr 15,%r14 000000000018352e: eb430003000d sllg %r4,%r3,3 0000000000183534: c05000451512 larl %r5,a25f58 [ 1471.158377] Call Trace: [ 1471.158380] ([<000000000018bd96>] load_balance+0x236/0xc7c) [ 1471.158385] [<000000000018be16>] load_balance+0x2b6/0xc7c [ 1471.158389] [<000000000018d0a2>] idle_balance+0x212/0x494 [ 1471.158393] [<00000000006ed9ae>] __schedule+0xc2e/0xcc8 [ 1471.158397] [<00000000006f0c30>] io_reschedule+0xa/0x1a [ 1471.158402] [<000003fffd3bea22>] 0x3fffd3bea22 [ 1471.158406] INFO: lockdep is turned off. [ 1471.158408] Last Breaking-Event-Address: [ 1471.158411] [<000000000017a32e>] walk_tg_tree_from+0x46/0x190 [ 1471.158416] [ 1471.158418] ---[ end trace dd87895f75677366 ]--- [ 1471.158423] BUG: sleeping function called from invalid context at kernel= /rwse m.c:20 [ 1471.158426] in_atomic(): 1, irqs_disabled(): 0, pid: 765, name: in:imklo= g [ 1471.158429] INFO: lockdep is turned off. [ 1471.158432] CPU: 0 Tainted: GF D W 3.9.3 #2 [ 1471.158435] Process in:imklog (pid: 765, task: 00000000fc7f2430, ksp: 00= 00000 0fc36fd50) [ 1471.158438] 00000000fc36f690 00000000fc36f6a0 0000000000000002 00= 00000 000000000 00000000fc36f730 00000000fc36f6a8 00000000fc36f6a8 0000000000100a1e 0000000000000000 00000000fc7f2870 000000000000000a 0404e0010000000a 00000000fc36f6f0 00000000fc36f690 0000000000000000 0000000000000000 00000000006fdbc8 0000000000100a1e 00000000fc36f690 00000000fc36f6e0 [ 1471.158470] Call Trace: [ 1471.158473] ([<0000000000100920>] show_trace+0xf0/0x148) [ 1471.158477] [<0000000000175c0a>] __might_sleep+0x17a/0x238 [ 1471.158482] [<00000000006ec4de>] down_read+0x42/0xe0 [ 1471.158487] [<000000000014fea0>] exit_signals+0x38/0x144 [ 1471.158492] [<0000000000139dd6>] do_exit+0xca/0xce8 [ 1471.158496] [<0000000000100ef2>] die+0x13e/0x158 [ 1471.158500] [<000000000011dd6e>] do_no_context+0xba/0xf0 [ 1471.158504] [<00000000006f23de>] do_protection_exception+0x3c6/0x3cc [ 1471.158508] [<00000000006f0a44>] pgm_check_handler+0x138/0x13c [ 1471.158513] [<0000000000183520>] tg_load_down+0x60/0xb0 [ 1471.158517] ([<000000000018bd96>] load_balance+0x236/0xc7c) [ 1471.158521] [<000000000018be16>] load_balance+0x2b6/0xc7c [ 1471.158525] [<000000000018d0a2>] idle_balance+0x212/0x494 [ 1471.158529] [<00000000006ed9ae>] __schedule+0xc2e/0xcc8 [ 1471.158533] [<00000000006f0c30>] io_reschedule+0xa/0x1a [ 1471.158537] [<000003fffd3bea22>] 0x3fffd3bea22 [ 1471.158541] INFO: lockdep is turned off. [ 1471.158545] note: in:imklog[765] exited with preempt_count 3 [ 1573.704911] Unable to handle kernel pointer dereference at virtual kerne= l add ress 00c040077ff00000 [ 1573.705014] Oops: 0038 [#4] SMP [ 1573.705029] Modules linked in: lockd(F) sunrpc(F) nf_conntrack_netbios_n= s(F) nf_conntrack_broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) = ip6ta ble_mangle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable= _nat( F) nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ip= v4(F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtabl= es(F) ip6table_filter(F) ip6_tables(F)00: HCPGSP2629I The virtual machine is pla= ced i n CP mode due to a SIGP stop from CPU 01. iptable_filter(F) ip_tables(F) sg(F) qeth_l2(F) vmur(F) xfs(F) libcrc32c(F= ) das d_fba_mod(F) dasd_eckd_mod(F) lcs(F) dasd_mod(F) ctcm(F) qeth(F) qdio(F) cc= wgrou p(F) fsm(F) dm_mirror(F) dm_region_hash(F) dm_log(F) dm_mod(F) [ 1573.705173] CPU: 1 Tainted: GF D W 3.9.3 #2 [ 1573.705177] Process attr (pid: 22262, task: 00000000b1190000, ksp: 00000= 000b0 f43eb0) [ 1573.705180] Krnl PSW : 0404e00180000000 000000000046c738 (lookup_object+= 0x20/ 0x68) [ 1573.705193] R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:= 0 EA: 3 Krnl GPRS: 7440000000000000 00c040077ff000e8 00000000fadd1eb8 0000000000000= 003 [ 1573.705199] 000000000046d2ba 0000000000000000 0000000084c1a82= 8 000 0000084c1a868 [ 1573.705203] 0000000001964250 04000000001b5d64 0000000000a3bdf= 8 000 0000001964258 [ 1573.705206] 00000000fadd1eb8 00000000007434f0 000000000046d2c= c 000 00000feb0b488 [ 1573.705221] Krnl Code: 000000000046c72c: a7380001 lhi %r3= ,1 000000000046c730: a7f40009 brc 15,46c742 #000000000046c734: a73a0001 ahi %r3,1 >000000000046c738: e32010180020 cg %r2,24(%r1) 000000000046c73e: a7840016 brc 8,46c76a 000000000046c742: e31010000002 ltg %r1,0(%r1) 000000000046c748: a774fff6 brc 7,46c734 000000000046c74c: c010002dcfc0 larl %r1,a266cc [ 1573.705254] Call Trace: [ 1573.705257] ([<000000000046d2ba>] debug_object_deactivate+0xba/0x160) [ 1573.705263] [<0000000000168890>] __run_hrtimer+0x58/0x474 [ 1573.705269] [<0000000000169af2>] hrtimer_interrupt+0x116/0x2b0 [ 1573.705273] [<0000000000104036>] clock_comparator_work+0x4a/0x54 [ 1573.705279] [<000000000010d5b4>] do_extint+0x2b4/0x318 [ 1573.705285] [<00000000006f0d90>] ext_skip+0x40/0x44 [ 1573.705292] [<000003ff80108ba4>] ipt_do_table+0x298/0x8d0 [ip_tables] [ 1573.705300] ([<000003ff801089d2>] ipt_do_table+0xc6/0x8d0 [ip_tables]) [ 1573.705305] [<000003ff80165318>] nf_nat_ipv4_fn+0x1b4/0x354 [iptable_na= t] [ 1573.705310] [<000003ff80165598>] nf_nat_ipv4_in+0x38/0x98 [iptable_nat] [ 1573.705314] [<00000000005d047c>] nf_iterate+0xd4/0x1b0 [ 1573.705903] [<00000000005d0680>] nf_hook_slow+0x128/0x2cc [ 1573.705909] [<00000000005de956>] ip_rcv+0x272/0x360 [ 1573.705914] [<0000000000592af6>] __netif_receive_skb_core+0xac2/0xe70 [ 1573.705919] [<00000000005957e4>] netif_receive_skb+0x48/0x260 [ 1573.705924] [<000003ff80095d16>] qeth_l2_poll+0x30a/0x540 [qeth_l2] [ 1573.705938] [<0000000000595f58>] net_rx_action+0x158/0x340 [ 1573.705942] [<000000000013d8d6>] __do_softirq+0x112/0x42c [ 1573.705947] [<000000000013ddf8>] irq_exit+0xc8/0xe8 [ 1573.705951] [<000000000010d55e>] do_extint+0x25e/0x318 [ 1573.705956] [<00000000006f0d90>] ext_skip+0x40/0x44 [ 1573.705961] [<000000000045a634>] memmove+0x14/0x5c [ 1573.705968] ([<000003ff807d7a10>] __func__.41994+0x10/0xffffffffffffb600= [xfs ]) [ 1573.706104] [<000003ff8076e6d2>] xfs_attr_leaf_compact+0xee/0x24c [xfs] [ 1573.706224] [<000003ff80772036>] xfs_attr_leaf_add+0x10a/0x268 [xfs] [ 1573.706272] [<000003ff8076a814>] xfs_attr_leaf_addname+0x11c/0x5a4 [xfs= ] [ 1573.706303] [<000003ff8076b028>] xfs_attr_set_int+0x38c/0x4b8 [xfs] [ 1573.706333] [<000003ff8076c9aa>] xfs_attr_set+0xb2/0xb8 [xfs] [ 1573.706363] [<000003ff8075d17e>] xfs_xattr_set+0x66/0xa0 [xfs] [ 1573.706393] [<00000000002d0a36>] generic_setxattr+0x7e/0x98 [ 1573.706400] [<00000000002d1430>] __vfs_setxattr_noperm+0x78/0x1dc [ 1573.706404] [<00000000002d1652>] vfs_setxattr+0xbe/0xc4 [ 1573.706408] [<00000000002d17b8>] setxattr+0x160/0x1c4 [ 1573.706412] [<00000000002d1ba0>] SyS_lsetxattr+0xac/0xe8 [ 1573.706416] [<00000000006f08b4>] sysc_tracego+0x14/0x1a [ 1573.706420] [<000003fffd2c2d1a>] 0x3fffd2c2d1a [ 1573.706427] INFO: lockdep is turned off. [ 1573.706430] Last Breaking-Event-Address: [ 1573.706433] [<000000000046c748>] lookup_object+0x30/0x68 [ 1573.706439] [ 1573.706443] Kernel panic - not syncing: Fatal exception in interrupt 01: HCPGIR450W CP entered; disabled wait PSW 00020001 80000000 00000000 001= 0F384 ----- Original Message ----- > From: "CAI Qian" > To: "linux-s390" , linuxppc-dev@lists.ozlabs.= org > Cc: "LKML" , stable@vger.kernel.org, xfs@os= s.sgi.com, "Steve Best" , > "Hendrik Brueckner" , "Dave Chinner" > Sent: Thursday, May 23, 2013 12:57:20 PM > Subject: 3.9.2/3.9.3: stack overrun on s390x and ppc64 (WAS Re: 3.9.2: xf= stests triggered panic) >=20 > Original report: > http://oss.sgi.com/archives/xfs/2013-05/msg00683.html >=20 > Also seen on Power7: > http://marc.info/?l=3Dlinux-kernel&m=3D136927904900692&w=3D2 >=20 > CAI Qian >=20 > ----- Original Message ----- > > From: "Dave Chinner" > > To: "CAI Qian" > > Cc: "LKML" , stable@vger.kernel.org, > > xfs@oss.sgi.com > > Sent: Thursday, May 23, 2013 11:46:11 AM > > Subject: Re: 3.9.2: xfstests triggered panic > >=20 > > On Wed, May 22, 2013 at 11:16:56PM -0400, CAI Qian wrote: > > > ----- Original Message ----- > > > > From: "Dave Chinner" > > > > To: "CAI Qian" > > > > Cc: "LKML" , stable@vger.kernel.org, > > > > xfs@oss.sgi.com > > > > Sent: Wednesday, May 22, 2013 5:53:00 PM > > > > Subject: Re: 3.9.2: xfstests triggered panic > > > >=20 > > > > On Wed, May 22, 2013 at 04:39:58AM -0400, CAI Qian wrote: > > > > > Reproduced on almost all s390x guests by running xfstests. > > > > >=20 > > > > > 14634.396658=C2=A8 XFS (dm-1): Mounting Filesystem > > > > > 14634.525522=C2=A8 XFS (dm-1): Ending clean mount > > > > > 14640.413007=C2=A8 <000000000017c6d4>=C2=A8 idle_balance+0x1a0/0= x340 > > > > > 14640.413010=C2=A8 <000000000063303e>=C2=A8 __schedule+0xa22/0xa= f0 > > > > > 14640.428279=C2=A8 <0000000000630da6>=C2=A8 schedule_timeout+0x1= 86/0x2c0 > > > > > 14640.428289=C2=A8 <00000000001cf864>=C2=A8 rcu_gp_kthread+0x1bc= /0x298 > > > > > 14640.428300=C2=A8 <0000000000158c5a>=C2=A8 kthread+0xe6/0xec > > > > > 14640.428304=C2=A8 <0000000000634de6>=C2=A8 kernel_thread_starte= r+0x6/0xc > > > > > 14640.428308=C2=A8 <0000000000634de0>=C2=A8 kernel_thread_starte= r+0x0/0xc > > > > > 14640.428311=C2=A8 Last Breaking-Event-Address: > > > > > 14640.428314=C2=A8 <000000000016bd76>=C2=A8 walk_tg_tree_from+0x= 3a/0xf4 > > > > > 14640.428319=C2=A8 list_add corruption. next->prev should be pre= v > > > > > (0000000000000918 > > > > > ), but was (null). (next=3D (null)). > > > >=20 > > > > Where's XFS in this? walk_tg_tree_from() is part of the scheduler > > > > code. This kind of implies a stack corruption.... > > > >=20 > > > > > Sometimes, this pops up, > > > > > [16907.275002] WARNING: at kernel/rcutree.c:1960 > > > > >=20 > > > > > or this, > > > > > 15316.154171=C2=A8 XFS (dm-1): Mounting Filesystem > > > > > 15316.255796=C2=A8 XFS (dm-1): Ending clean mount > > > > > 15320.364246=C2=A8 00000000006367a2: e310b0080004 = lg > > > > > %r1,8(%r > > > > > 11) > > > > > 15320.364249=C2=A8 00000000006367a8: 41101010 = la > > > > > %r1,16(% > > > > > r1) > > > > > 15320.364251=C2=A8 00000000006367ac: e33010000004 = lg > > > > > %r3,0(%r > > > > > 1) > > > > > 15320.364252=C2=A8 Call Trace: > > > > > 15320.364252=C2=A8 Last Breaking-Event-Address: > > > > > 15320.364253=C2=A8 =EF=BF=BD <0000000000000000>=C2=A8 Kernel sta= ck overflow. > > > > > 15320.364308=C2=A8 CPU: 0 Tainted: GF W 3.9.2 #1 > > > > > 15320.364309=C2=A8 Process rhts-test-runne (pid: 625, task: > > > > > 000000003dccc890, > > > > > ksp: 0 > > > >=20 > > > > .... and there you go - a stack overflow. Your kernel stack size is > > > > too small. > > > >=20 > > > > I'd suggest that you need 16k stacks on s390 - IIRC every function > > > > call has 128 byte stack frame, and there are call chains 70-80 > > > > functions deep in the storage stack... > > > Hmm, I am unsure how to set to 16k stack there > >=20 > > Are you build a 64 bit s390 kernel or a 32 bit kernel? 32 bit > > kernels only have an 8k stack size, 64 bit kernels are 16k (see > > arch/s390/Makefile). > >=20 > > $ git grep STACK_SIZE arch/s390 |head -2 > > arch/s390/Makefile:STACK_SIZE :=3D 8192 > > arch/s390/Makefile:STACK_SIZE :=3D 16384 > >=20 > > As it is, the stack frame usage is worse than I thought: > >=20 > > $ git grep STACK_FRAME_OVERHEAD arch/s390 |head -2 > > arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 96 = /* > > size of minimum stack frame */ > > arch/s390/include/uapi/asm/ptrace.h:#define STACK_FRAME_OVERHEAD 160 > > /* > > size of minimum stack frame */ > >=20 > > Overhead is 96 bytes for 32 bit and 160 bytes for 64 bit. So 16k > > stack size is going to have big troubles with a 70-80 function deep > > call chain. > >=20 > > As for powerpc: > >=20 > > arch/powerpc/include/asm/ppc_asm.h:#define STACKFRAMESIZE 256 > >=20 > > Yeah, same issue. > >=20 > > But, seriously, these stack traces are meaningless to anyone not > > familiar with s390 or power7 - they indicate a problem detected > > in the idle loop, not where ever the stack overran. > >=20 > > Can you please work with the s390/power7 people to obtain whatever > > stack it was that overflowed, and we can go from there. > >=20 > > Cheers, > >=20 > > Dave. > > -- > > Dave Chinner > > david@fromorbit.com > >=20 >=20 From sandeen@redhat.com Thu May 23 23:21:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 052137F37 for ; Thu, 23 May 2013 23:21:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D96F7304051 for ; Thu, 23 May 2013 21:21:32 -0700 (PDT) X-ASG-Debug-ID: 1369369288-04bdf07816d2f10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id OAyQ8bc4BDB3iHDE for ; Thu, 23 May 2013 21:21:28 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O4LQ8F030886 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 May 2013 00:21:26 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O4LPHm027455 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 24 May 2013 00:21:25 -0400 Message-ID: <519EEAC4.606@redhat.com> Date: Thu, 23 May 2013 23:21:24 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eryu Guan CC: xfs-oss , linux-btrfs , Koen De Wit Subject: Re: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs References: <519E4590.4080309@redhat.com> <20130524030903.GL2460@eguan-t400.nay.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: btrfs/308: simple sparse copy testcase for btrfs In-Reply-To: <20130524030903.GL2460@eguan-t400.nay.redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369369288 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/23/13 10:09 PM, Eryu Guan wrote: > On Thu, May 23, 2013 at 11:36:32AM -0500, Eric Sandeen wrote: >> From: Koen De Wit >> >> # Tests file clone functionality of btrfs ("reflinks"): >> # - Reflink a file >> # - Reflink the reflinked file >> # - Modify the original file >> # - Modify the reflinked file >> >> [sandeen: add helpers, make several mostly-cosmetic >> changes to the original testcase] >> >> Signed-off-by: Koen De Wit >> Signed-off-by: Eric Sandeen >> --- >> >> Originally submitted as test 297 >> >> diff --git a/common/rc b/common/rc >> index fe6bbfc..4560715 100644 >> --- a/common/rc >> +++ b/common/rc >> @@ -2098,6 +2098,27 @@ _require_dumpe2fs() >> fi >> } >> >> +_require_cp_reflink() >> +{ >> + cp --help | grep -q reflink || \ >> + _notrun "This test requires a cp with --reflink support." >> +} >> + >> +# Given 2 files, verify that they have the same mapping but different >> +# inodes - i.e. an undisturbed reflink >> +# Silent if so, make noise if not >> +_verify_reflink() >> +{ >> + # not a hard link or symlink? >> + cmp -s <(stat -c '%i' $1) <(stat -c '%i' $2) \ >> + && echo "$1 and $2 are not reflinks: same inode number" >> + >> + # same mapping? >> + diff -u <($XFS_IO_PROG -F -c "fiemap" $1 | grep -v $1) \ >> + <($XFS_IO_PROG -F -c "fiemap" $2 | grep -v $2) \ >> + || echo "$1 and $2 are not reflinks: different extents" > > I'm not sure if "-F" is still needed after commit > 96fce07 xfstests: automatically add -F to xfs_io on non-xfs Right, it's not, oops. :( Old habits (and old patch, TBH) I can fix & resend all of them I guess. Thanks, -Eric From tytso@thunk.org Thu May 23 23:33:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7C7BA7F37 for ; Thu, 23 May 2013 23:33:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0B19DAC001 for ; Thu, 23 May 2013 21:33:07 -0700 (PDT) X-ASG-Debug-ID: 1369369985-04cb6c4742d0630001-NocioJ Received: from imap.thunk.org (li9-11.members.linode.com [67.18.176.11]) by cuda.sgi.com with ESMTP id XVGwx6SZFwOpbeIM (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 23 May 2013 21:33:06 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 67.18.176.11 Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.80) (envelope-from ) id 1UfjjO-0008Nv-FH; Fri, 24 May 2013 04:35:54 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 050715814B2; Fri, 24 May 2013 00:33:02 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Ext4 Developers List , Theodore Ts'o Subject: [PATCH] add generic/286 to the auto and quick groups Date: Fri, 24 May 2013 00:33:01 -0400 X-ASG-Orig-Subj: [PATCH] add generic/286 to the auto and quick groups Message-Id: <1369369981-7035-1-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 1.7.12.rc0.22.gcdd159b X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: li9-11.members.linode.com[67.18.176.11] X-Barracuda-Start-Time: 1369369986 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131855 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words The generic/286 test tests SEEK_HOLE and SEEK_DATA, and is reasonably fast. We should just run the test by default. Signed-off-by: "Theodore Ts'o" --- tests/generic/group | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generic/group b/tests/generic/group index e2ef70e..bd443c1 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -103,7 +103,7 @@ 277 auto ioctl quick metadata 280 auto quota freeze dangerous 285 auto rw -286 other +286 auto quick other 288 auto quick ioctl trim 294 auto quick 299 auto aio enospc rw stress -- 1.7.12.rc0.22.gcdd159b From sandeen@redhat.com Thu May 23 23:54:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 00B6C7F37 for ; Thu, 23 May 2013 23:54:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C19D2304059 for ; Thu, 23 May 2013 21:54:24 -0700 (PDT) X-ASG-Debug-ID: 1369371263-04bdf07817d60f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id GtjJFrG2e2aypMt8 for ; Thu, 23 May 2013 21:54:24 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O4sM3w031076 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 May 2013 00:54:22 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O4sJMs009272 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 24 May 2013 00:54:21 -0400 Message-ID: <519EF27B.7040001@redhat.com> Date: Thu, 23 May 2013 23:54:19 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: "Theodore Ts'o" CC: xfs@oss.sgi.com, Ext4 Developers List Subject: Re: [PATCH] add generic/286 to the auto and quick groups References: <1369369981-7035-1-git-send-email-tytso@mit.edu> X-ASG-Orig-Subj: Re: [PATCH] add generic/286 to the auto and quick groups In-Reply-To: <1369369981-7035-1-git-send-email-tytso@mit.edu> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369371263 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/23/13 11:33 PM, Theodore Ts'o wrote: > The generic/286 test tests SEEK_HOLE and SEEK_DATA, and is reasonably > fast. We should just run the test by default. > > Signed-off-by: "Theodore Ts'o" Seems fine to me Reviewed-by: Eric Sandeen another patch to follow to fix it on kernels that don't support it. > --- > tests/generic/group | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tests/generic/group b/tests/generic/group > index e2ef70e..bd443c1 100644 > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -103,7 +103,7 @@ > 277 auto ioctl quick metadata > 280 auto quota freeze dangerous > 285 auto rw > -286 other > +286 auto quick other > 288 auto quick ioctl trim > 294 auto quick > 299 auto aio enospc rw stress > From sandeen@redhat.com Fri May 24 00:03:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F0ACE7F37 for ; Fri, 24 May 2013 00:03:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id DFF6C8F8065 for ; Thu, 23 May 2013 22:03:45 -0700 (PDT) X-ASG-Debug-ID: 1369371824-04cb6c4741d3710001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id C2qm3FahLVw6ud6i for ; Thu, 23 May 2013 22:03:44 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O53irl000570 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 May 2013 01:03:44 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4O53gkL013333 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 24 May 2013 01:03:43 -0400 Message-ID: <519EF4AE.60702@redhat.com> Date: Fri, 24 May 2013 00:03:42 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , ext4 development Subject: [PATCH] xfstests: fix src/seek_sanity_test -t option X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: fix src/seek_sanity_test -t option Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369371824 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 _require_seek_data_hole() does not work because the -t (test) option of seek_sanity_test is broken, because of an early check for (argc != 2): # src/seek_sanity_test -t foo Usage: src/seek_sanity_test base_file_path So _require_seek_data_hole() doesn't see the "Kernel does not support" string it's looking for, and passes the check. So rather than _notrun-ing the test, it proceeds to fail with noisy errors. Fix that, make a common usage() function, and check for too many args as well. Signed-off-by: Eric Sandeen --- diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index 4275a84..f957178 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -656,6 +656,12 @@ out: return ret; } +void usage(char *cmd) +{ + fprintf(stdout, "Usage: %s [-t] base_file_path\n", cmd); + exit(1); +} + int main(int argc, char **argv) { int ret = -1; @@ -664,23 +670,20 @@ int main(int argc, char **argv) int check_support = 0; int numtests = sizeof(seek_tests) / sizeof(struct testrec); - if (argc != 2) { - fprintf(stdout, "Usage: %s base_file_path\n", argv[0]); - return ret; - } - while ((opt = getopt(argc, argv, "t")) != -1) { switch (opt) { case 't': check_support++; break; default: - fprintf(stderr, "Usage: %s [-t] base_file_path\n", - argv[0]); - return ret; + usage(argv[0]); } } + /* should be exactly one arg left, the filename */ + if (!argv[optind] || argv[optind+1]) + usage(argv[0]); + base_file_path = (char *)strdup(argv[optind]); ret = test_basic_support(); From sandeen@redhat.com Fri May 24 00:14:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 566997F37 for ; Fri, 24 May 2013 00:14:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 45D36304051 for ; Thu, 23 May 2013 22:14:43 -0700 (PDT) X-ASG-Debug-ID: 1369372482-04cbb0049cd7140001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 2ZhFDUL9Y1HkG4zF for ; Thu, 23 May 2013 22:14:42 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4O5Efm0018623 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 May 2013 01:14:41 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4O5Ee2i023855 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 24 May 2013 01:14:41 -0400 Message-ID: <519EF740.1000907@redhat.com> Date: Fri, 24 May 2013 00:14:40 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , ext4 development Subject: [PATCH V2] xfstests: fix src/seek_sanity_test -t option References: <519EF4AE.60702@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: fix src/seek_sanity_test -t option In-Reply-To: <519EF4AE.60702@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369372482 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 _require_seek_data_hole() does not work because the -t (test) option of seek_sanity_test is broken, because of an early check for (argc != 2): # src/seek_sanity_test -t foo Usage: src/seek_sanity_test base_file_path So _require_seek_data_hole() doesn't see the "Kernel does not support" string it's looking for, and passes the check. So rather than _notrun-ing the test, it proceeds to fail with noisy errors. Fix that, make a common usage() function, and check for too many args as well. Signed-off-by: Eric Sandeen --- V2: saner test for too many args diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index 4275a84..f957178 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -656,6 +656,12 @@ out: return ret; } +void usage(char *cmd) +{ + fprintf(stdout, "Usage: %s [-t] base_file_path\n", cmd); + exit(1); +} + int main(int argc, char **argv) { int ret = -1; @@ -664,23 +670,20 @@ int main(int argc, char **argv) int check_support = 0; int numtests = sizeof(seek_tests) / sizeof(struct testrec); - if (argc != 2) { - fprintf(stdout, "Usage: %s base_file_path\n", argv[0]); - return ret; - } - while ((opt = getopt(argc, argv, "t")) != -1) { switch (opt) { case 't': check_support++; break; default: - fprintf(stderr, "Usage: %s [-t] base_file_path\n", - argv[0]); - return ret; + usage(argv[0]); } } + /* should be exactly one arg left, the filename */ + if (optind != argc - 1) + usage(argv[0]); + base_file_path = (char *)strdup(argv[optind]); ret = test_basic_support(); From jeff.liu@oracle.com Fri May 24 01:54:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5CBFB7CBF for ; Fri, 24 May 2013 01:54:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 46B5C304032 for ; Thu, 23 May 2013 23:54:43 -0700 (PDT) X-ASG-Debug-ID: 1369378482-04cb6c4742d9d80001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id ITgRo0r3gVa9DUu3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 May 2013 23:54:42 -0700 (PDT) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4O6seKh031320 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 May 2013 06:54:41 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4O6saFP020573 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 24 May 2013 06:54:37 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4O6sZjk007274; Fri, 24 May 2013 06:54:35 GMT Received: from [192.168.1.104] (/123.119.103.55) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 23 May 2013 23:54:35 -0700 Message-ID: <519F0EA8.8010305@oracle.com> Date: Fri, 24 May 2013 14:54:32 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , ext4 development Subject: Re: [PATCH V2] xfstests: fix src/seek_sanity_test -t option References: <519EF4AE.60702@redhat.com> <519EF740.1000907@redhat.com> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: fix src/seek_sanity_test -t option In-Reply-To: <519EF740.1000907@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1369378482 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131865 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 05/24/2013 01:14 PM, Eric Sandeen wrote: > _require_seek_data_hole() does not work because > the -t (test) option of seek_sanity_test is broken, > because of an early check for (argc != 2): > > # src/seek_sanity_test -t foo > Usage: src/seek_sanity_test base_file_path > > So _require_seek_data_hole() doesn't see the > "Kernel does not support" string it's looking for, > and passes the check. > > So rather than _notrun-ing the test, it proceeds to > fail with noisy errors. > > Fix that, make a common usage() function, and check for > too many args as well. > > Signed-off-by: Eric Sandeen > --- > > V2: saner test for too many args > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index 4275a84..f957178 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -656,6 +656,12 @@ out: > return ret; > } > > +void usage(char *cmd) > +{ > + fprintf(stdout, "Usage: %s [-t] base_file_path\n", cmd); > + exit(1); > +} > + > int main(int argc, char **argv) > { > int ret = -1; > @@ -664,23 +670,20 @@ int main(int argc, char **argv) > int check_support = 0; > int numtests = sizeof(seek_tests) / sizeof(struct testrec); > > - if (argc != 2) { > - fprintf(stdout, "Usage: %s base_file_path\n", argv[0]); > - return ret; > - } > - > while ((opt = getopt(argc, argv, "t")) != -1) { > switch (opt) { > case 't': > check_support++; > break; > default: > - fprintf(stderr, "Usage: %s [-t] base_file_path\n", > - argv[0]); > - return ret; > + usage(argv[0]); > } > } > > + /* should be exactly one arg left, the filename */ > + if (optind != argc - 1) > + usage(argv[0]); > + > base_file_path = (char *)strdup(argv[optind]); > > ret = test_basic_support(); This looks good to me. Reviewed-by: Jie Liu Thanks, -Jeff From james.dingwall@zynstra.com Fri May 24 02:30:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 739607CBF for ; Fri, 24 May 2013 02:30:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5411F30404E for ; Fri, 24 May 2013 00:30:35 -0700 (PDT) X-ASG-Debug-ID: 1369380633-04cbb0049dde2a0001-NocioJ Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1lp0014.outbound.protection.outlook.com [213.199.154.14]) by cuda.sgi.com with ESMTP id 5C1Ns3BgHwubY0BA (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 May 2013 00:30:33 -0700 (PDT) X-Barracuda-Envelope-From: james.dingwall@zynstra.com X-Barracuda-Apparent-Source-IP: 213.199.154.14 Received: from AMSPRD0111HT004.eurprd01.prod.exchangelabs.com (157.56.250.229) by AMSPR03MB049.eurprd03.prod.outlook.com (10.242.79.146) with Microsoft SMTP Server (TLS) id 15.0.698.13; Fri, 24 May 2013 07:30:26 +0000 Message-ID: <519F1708.10603@zynstra.com> Date: Fri, 24 May 2013 08:30:16 +0100 From: James Dingwall User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0 SeaMonkey/2.17.1 MIME-Version: 1.0 To: Konrad Rzeszutek Wilk CC: Dave Chinner , Ben Myers , Subject: Re: Cleancache support in XFS References: <51810CED.4080003@zynstra.com> <20130501162044.GN29359@sgi.com> <20130501223022.GQ10481@dastard> <518222D3.3080109@zynstra.com> <20130522192834.GD10617@phenom.dumpdata.com> X-ASG-Orig-Subj: Re: Cleancache support in XFS In-Reply-To: <20130522192834.GD10617@phenom.dumpdata.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [157.56.250.229] X-ClientProxiedBy: AMXPR03CA004.eurprd03.prod.outlook.com (10.242.64.14) To AMSPR03MB049.eurprd03.prod.outlook.com (10.242.79.146) X-Forefront-Antispam-Report: SFV:SKI;SFS:;DIR:OUT;SFP:;SCL:0;SRVR:AMSPR03MB049;H:AMSPRD0111HT004.eurprd01.prod.exchangelabs.com;LANG:en; X-OriginatorOrg: zynstra.com X-Barracuda-Connect: mail-am1lp0014.outbound.protection.outlook.com[213.199.154.14] X-Barracuda-Start-Time: 1369380633 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131867 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Konrad Rzeszutek Wilk wrote: > On Thu, May 02, 2013 at 09:24:51AM +0100, James Dingwall wrote: >> Dave Chinner wrote: >>> On Wed, May 01, 2013 at 11:20:44AM -0500, Ben Myers wrote: >>>> Hi James, > Hey folks, > I am walking through my vacation-emails-mbox. > >>>> On Wed, May 01, 2013 at 01:39:09PM +0100, James Dingwall wrote: >>>>> In reference to: http://oss.sgi.com/archives/xfs/2012-05/msg00046.html >>>>> >>>>> $ grep -r cleancache fs/xfs >>>>> on the 3.9 kernel source suggests that no patch was submitted to >>>>> enable cleancache for the XFS filesystem. Since it was suggested >>>>> that this could be a one liner I've had a go and my first effort is >>>>> inline below. While this seems to compile OK I have no experience >>>>> in filesystems so I would appreciate it if anyone can point out that >>>>> it is obviously wrong and likely to eat my data before I try booting >>>>> the kernel. >>>>> >>>>> If it seems a reasonable attempt what would be the best way to check >>>>> that it isn't doing nasty things? >>>> Hrm.. Looks like there is a doc in Documentation/vm/cleancache.txt which >>>> includes a list of attributes the filesystem needs to have to work properly >>>> with cleancache. >>> So, those points are: >> I had started to look at these too but I feel very out of my depth! >> I had similar conclusions to what Dave wrote but I don't think my >> thoughts should carry very much (any) weight. Anyway I gambled and >> booted my xen domU with this patch and so far so good... xen top >> shows that tmem is now being used where previously it wasn't. I'll >> try running the xfstests at the weekend after a couple more days up >> time to see what happens. > And how did it go? I am running the patch I created on 3.9.3 on half of my xen guests now and have not noticed any stability or filesystem problems. xl top with 'T' shows that the guests running with it are using ephemeral pages were those without do not. I did do some runs with xfstests which had some failures but they were present with and without the patch. The best I can really offer is that it works for me, ymmv. The patch is available as commit c725011c4fc5d47e12d131f61bd91a58a40036b5 in https://github.com/JKDingwall/linux.git xfs-enable-cleancache or in the first message of this thread. Regards, James From gnehzuil.liu@gmail.com Fri May 24 02:44:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6B6647CBF for ; Fri, 24 May 2013 02:44:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 587EE304059 for ; Fri, 24 May 2013 00:44:38 -0700 (PDT) X-ASG-Debug-ID: 1369381476-04cb6c4742dca70001-NocioJ Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by cuda.sgi.com with ESMTP id kpDCdqU6rupuwrCQ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 24 May 2013 00:44:37 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.54 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.54] Received: by mail-pa0-f54.google.com with SMTP id kx1so3988694pab.13 for ; Fri, 24 May 2013 00:44:36 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.54] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.54] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=21VdcrNDKQgGmE5kCkCBdBINbJx58yAoMn2b/I8hsJ0=; b=B5J2QsY817ithOI6c6neI0J6ZWlE81W5Mj2w4FjjLp9pYkTn3WMw1Rhzq6Yi4S51Nd xCS+do1TvV7/Yr91UzTEiIKpAAwuvdUPNUzsAiwLBcu+/LU+Fr/5fN60gGgJxjiV+jgb t6gTksQbnzEGuaGzbKeO1Oej6JVUU++sfAFq0WZHuRl+1quYWizp51iEC6VZxDIk12En 63kNROlvgr/Wv0KMUIlNfYF0IGAHwVgiPwrqfhQ04p0CtMn6pYxeo1AOHaS2RdhQw+SS oTtT4CfTJjM52PTKgcTs9M5mL9QJLphRU76qfzXtmd9iRliAE9YsLGFpeJSEGeeTPEpR XDAA== X-Received: by 10.68.75.110 with SMTP id b14mr16732270pbw.89.1369381476703; Fri, 24 May 2013 00:44:36 -0700 (PDT) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPSA id vb8sm15200731pbc.11.2013.05.24.00.44.34 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 24 May 2013 00:44:35 -0700 (PDT) Date: Fri, 24 May 2013 16:02:32 +0800 From: Zheng Liu To: Eric Sandeen Cc: xfs-oss , ext4 development Subject: Re: [PATCH V2] xfstests: fix src/seek_sanity_test -t option Message-ID: <20130524080232.GA32562@gmail.com> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: fix src/seek_sanity_test -t option Mail-Followup-To: Eric Sandeen , xfs-oss , ext4 development References: <519EF4AE.60702@redhat.com> <519EF740.1000907@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <519EF740.1000907@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-pa0-f54.google.com[209.85.220.54] X-Barracuda-Start-Time: 1369381477 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131867 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Fri, May 24, 2013 at 12:14:40AM -0500, Eric Sandeen wrote: > _require_seek_data_hole() does not work because > the -t (test) option of seek_sanity_test is broken, > because of an early check for (argc != 2): > > # src/seek_sanity_test -t foo > Usage: src/seek_sanity_test base_file_path > > So _require_seek_data_hole() doesn't see the > "Kernel does not support" string it's looking for, > and passes the check. > > So rather than _notrun-ing the test, it proceeds to > fail with noisy errors. > > Fix that, make a common usage() function, and check for > too many args as well. > > Signed-off-by: Eric Sandeen Sorry, my apologies. I made a mistake when I rebased the patch. Thanks for fixing it. Reviewed-by: Zheng Liu - Zheng > --- > > V2: saner test for too many args > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index 4275a84..f957178 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -656,6 +656,12 @@ out: > return ret; > } > > +void usage(char *cmd) > +{ > + fprintf(stdout, "Usage: %s [-t] base_file_path\n", cmd); > + exit(1); > +} > + > int main(int argc, char **argv) > { > int ret = -1; > @@ -664,23 +670,20 @@ int main(int argc, char **argv) > int check_support = 0; > int numtests = sizeof(seek_tests) / sizeof(struct testrec); > > - if (argc != 2) { > - fprintf(stdout, "Usage: %s base_file_path\n", argv[0]); > - return ret; > - } > - > while ((opt = getopt(argc, argv, "t")) != -1) { > switch (opt) { > case 't': > check_support++; > break; > default: > - fprintf(stderr, "Usage: %s [-t] base_file_path\n", > - argv[0]); > - return ret; > + usage(argv[0]); > } > } > > + /* should be exactly one arg left, the filename */ > + if (optind != argc - 1) > + usage(argv[0]); > + > base_file_path = (char *)strdup(argv[optind]); > > ret = test_basic_support(); > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Fri May 24 03:03:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4FF237CBF for ; Fri, 24 May 2013 03:03:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id EAFD7AC013 for ; Fri, 24 May 2013 01:03:35 -0700 (PDT) X-ASG-Debug-ID: 1369382611-04bdf063bd88cb0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Ni5oSnGrUMeQMPZ6 for ; Fri, 24 May 2013 01:03:31 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArkNAFsen1F5LEc//2dsb2JhbABZgwi9LYUgBAGBABd0giMBAQQBJxMcKAsIAxQBAwklDwUlAyEBEogHBboKFo1qaigSg1QDlzqRQYMhKg Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 17:33:02 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ufmxo-0001I0-8L; Fri, 24 May 2013 18:03:00 +1000 Date: Fri, 24 May 2013 18:03:00 +1000 From: Dave Chinner To: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524080300.GI24543@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> <20130524015219.GA28486@redhat.com> <20130524030300.GA30760@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20130524030300.GA30760@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369382611 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 11:03:00PM -0400, Dave Jones wrote: > On Thu, May 23, 2013 at 09:52:19PM -0400, Dave Jones wrote: > > On Fri, May 24, 2013 at 11:26:25AM +1000, Dave Chinner wrote: > > =20 > > > You want to print the debug output if the masked value !=3D 0. > >=20 > > XFS (sda2): xfs_setattr_size: mask 0xaa69, masked 0x801 ii 0xffff88021= 29e98c0, d 0xffff88021757d970 path /davej/src/trinity/tmp/tmp.5/ >=20 > ah, sneaky. There's some unprintable characters there that didn't > show up in my terminal when I cut-n-pasted. They made it to the > logs though.. >=20 > XFS (sda2): xfs_setattr_size: mask 0xaa69, masked 0x801 ii 0xffff8802129e= 98c0, d 0xffff88021757d970 path /davej/src/trinity/tmp/tmp.5/=01=01 So the mask is: ATTR_OPEN | ATTR_FILE | ATTR_KILL_SUID | ATTR_FORCE | \ ATTR_CTIME | ATTR_MTIME | ATTR_MODE And so the mask is tripping the assert is (ATTR_KILL_SUID | ATTR_MODE). Ok, that now makes sense - that's consistent with open(O_TRUNCATE) on a suid file. How the hell has this gone unnoticed? > Hexdump: of that part.. 706d 352e 012f 0a01=20 > So filename is 0x01 0x01 >=20 > Don't know if that's relevant to the bug or not.. No, it's not. It seems like the XFS code is simply broken, and has been for a couple of years. This is the commit that changed the code into the split we currently have now: commit c4ed4243c40f97ed5b7b121777bbbc6aeaa722f0 Author: Christoph Hellwig Date: Fri Jul 8 14:34:23 2011 +0200 xfs: split xfs_setattr =20 Split up xfs_setattr into two functions, one for the complex truncate handling, and one for the trivial attribute updates. Also move both new routines to xfs_iops.c as they are fairly Linux-specific. =20 Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Clearly there's a simple test that xfstests is missing, not to mention every other test suite out there that is run regularly on linux.... Awww, hell. xfstest generic/193 is *supposed* to test behaviour of suid/sgid bits and clearing them is various situations. You know what I'm about to say, don't you? The test doesn't test what it thinks it is testing. it puts the destination file in root directory of the xfstests harness, not in the filesystems being tested. So, on all my machines, it runs on ext3 filesystems, never on the ext4, btrfs, xfs, etc filesystems that I'm actually testing. That's beside the point, because it doesn't test truncate behaviour. But at least I know now why my attempts to reproduce the problem didn't work... Right, patch below should fix the problem. What a frustrating bug. Now, where's my bottle of scotch? Cheers, Dave. --=20 Dave Chinner david@fromorbit.com xfs: kill suid/sgid through the truncate path. =46rom: Dave Chinner XFS has failed to kill suid/sgid bits correctly when truncating files of non-zero size since commit c4ed4243 ("xfs: split xfs_setattr") introduced in the 3.1 kernel. Fix it. Fix it. Signed-off-by: Dave Chinner --- fs/xfs/xfs_iops.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa..c255382 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -455,6 +455,24 @@ xfs_vn_getattr( return 0; } =20 +static void +xfs_setattr_mode( + struct inode *inode, + struct iattr *iattr) +{ + struct xfs_inode *ip =3D XFS_I(inode); + umode_t mode =3D iattr->ia_mode; + + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) + mode &=3D ~S_ISGID; + + ip->i_d.di_mode &=3D S_IFMT; + ip->i_d.di_mode |=3D mode & ~S_IFMT; + + inode->i_mode &=3D S_IFMT; + inode->i_mode |=3D mode & ~S_IFMT; +} + int xfs_setattr_nonsize( struct xfs_inode *ip, @@ -606,18 +624,8 @@ xfs_setattr_nonsize( /* * Change file access modes. */ - if (mask & ATTR_MODE) { - umode_t mode =3D iattr->ia_mode; - - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) - mode &=3D ~S_ISGID; - - ip->i_d.di_mode &=3D S_IFMT; - ip->i_d.di_mode |=3D mode & ~S_IFMT; - - inode->i_mode &=3D S_IFMT; - inode->i_mode |=3D mode & ~S_IFMT; - } + if (mask & ATTR_MODE) + xfs_setattr_mode(inode, iattr); =20 /* * Change file access or modified times. @@ -714,9 +722,8 @@ xfs_setattr_size( return XFS_ERROR(error); =20 ASSERT(S_ISREG(ip->i_d.di_mode)); - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| - ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| - ATTR_KILL_PRIV|ATTR_TIMES_SET)) =3D=3D 0); + ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| + ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) =3D=3D 0); =20 if (!(flags & XFS_ATTR_NOLOCK)) { lock_flags |=3D XFS_IOLOCK_EXCL; @@ -860,6 +867,12 @@ xfs_setattr_size( xfs_inode_clear_eofblocks_tag(ip); } =20 + /* + * Change file access modes. + */ + if (mask & ATTR_MODE) + xfs_setattr_mode(inode, iattr); + if (mask & ATTR_CTIME) { inode->i_ctime =3D iattr->ia_ctime; ip->i_d.di_ctime.t_sec =3D iattr->ia_ctime.tv_sec; From qcai@redhat.com Fri May 24 03:52:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 27D837CBF for ; Fri, 24 May 2013 03:52:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 907A2AC001 for ; Fri, 24 May 2013 01:52:11 -0700 (PDT) X-ASG-Debug-ID: 1369385529-04cb6c4742e0f40001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id aZGYAL13N7Ndajeh for ; Fri, 24 May 2013 01:52:09 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4O8q68U024101; Fri, 24 May 2013 04:52:06 -0400 Date: Fri, 24 May 2013 04:52:06 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: xfs@oss.sgi.com, stable@vger.kernel.org Message-ID: <986348673.5787542.1369385526612.JavaMail.root@redhat.com> In-Reply-To: <20130523035115.GY24543@dastard> References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> Subject: Re: 3.9.3: Oops running xfstests MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: Ml+6Iu7W3NCC5IvYXtmga2cdFgiAlg== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369385529 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.12 X-Barracuda-Spam-Status: No, SCORE=0.12 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.10 BSF_SC0_SA085 Custom Rule SA085 ----- Original Message ----- > From: "Dave Chinner" > To: "CAI Qian" > Cc: xfs@oss.sgi.com, stable@vger.kernel.org > Sent: Thursday, May 23, 2013 11:51:15 AM > Subject: Re: 3.9.3: Oops running xfstests > > On Wed, May 22, 2013 at 11:21:17PM -0400, CAI Qian wrote: > > Fedora-19 based distro and LVM partitions. > > Cai: As I've asked previously please include all the relevant > information about your test system and the workload it is running > when the problem occurs. Stack traces aren't any good to us in > isolation, and just dumping them on us causes unnecessary round > trips. > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F Sometimes, those information is going to drive me crazy due to the amount of information need to gather from a system that been already returned to the automation testing system pool and I never have access to it anymore. Some of the information has like very little percentage of the relevant as far as I can tell. I knew sometimes that 1% percentage does count but the amount of efforts need to gather that 1% just crazy. :) Since we have been in the same company, feel free to ping me and I can give you the instruction to access the system and reproducer for it. Also, I have been reproduced this on several x64 systems and nothing special about the hardware and this panic at memmove is also very much similar to those s390x/ppc64 stack overrun cases which has memove, xfs-leaf on the trace, http://oss.sgi.com/archives/xfs/2013-05/msg00768.html I will provide the information as far I knew for now. - kernel version (uname -a): 3.9.3 - xfsprogs version (xfs_repair -V): Fedora-19 xfsprogs-3.1.10 - number of CPUs: 8 - contents of /proc/meminfo: MemTotal: 16367152 kB MemFree: 15723040 kB Buffers: 1172 kB Cached: 313016 kB SwapCached: 0 kB Active: 252388 kB Inactive: 172832 kB Active(anon): 111376 kB Inactive(anon): 260 kB Active(file): 141012 kB Inactive(file): 172572 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 8257532 kB SwapFree: 8257532 kB Dirty: 5008 kB Writeback: 0 kB AnonPages: 110800 kB Mapped: 22944 kB Shmem: 564 kB Slab: 69100 kB SReclaimable: 26524 kB SUnreclaim: 42576 kB KernelStack: 1488 kB PageTables: 5896 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 16441108 kB Committed_AS: 265500 kB VmallocTotal: 34359738367 kB VmallocUsed: 45288 kB VmallocChunk: 34347010568 kB HardwareCorrupted: 0 kB AnonHugePages: 2048 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 77440 kB DirectMap2M: 16764928 kB - contents of /proc/mounts: nothing special. Just Fedora-19 autopart - contents of /proc/partitions: nothing special. Just Fedora-19 autopart - RAID layout (hardware and/or software): Nothing special, 06:21:51,812 INFO kernel:[ 27.480775] mptsas: ioc0: attaching ssp device: fw_channel 0, fw_id 0, phy 0, sas_addr 0x500000e0130ddbe2 06:21:51,812 NOTICE kernel:[ 27.539634] scsi 0:0:0:0: Direct-Access IBM-ESXS MAY2073RC T107 PQ: 0 ANSI: 5 06:21:51,812 INFO kernel:[ 27.592421] mptsas: ioc0: attaching ssp device: fw_channel 0, fw_id 1, phy 1, sas_addr 0x500000e0130fa8f2 06:21:51,812 NOTICE kernel:[ 27.651334] scsi 0:0:1:0: Direct-Access IBM-ESXS MAY2073RC T107 PQ: 0 ANSI: 5 06:21:51,812 NOTICE kernel:[ 27.753114] sd 0:0:0:0: [sda] 143374000 512-byte logical blocks: (73.4 GB/68.3 GiB) 06:21:51,812 NOTICE kernel:[ 27.798987] sd 0:0:1:0: [sdb] 143374000 512-byte logical blocks: (73.4 GB/68.3 GiB) 06:21:51,812 NOTICE kernel:[ 27.847388] sd 0:0:0:0: [sda] Write Protect is off 06:21:51,812 NOTICE kernel:[ 27.847396] sd 0:0:1:0: [sdb] Write Protect is off 06:21:51,812 DEBUG kernel:[ 27.847398] sd 0:0:1:0: [sdb] Mode Sense: d7 00 00 08 06:21:51,812 DEBUG kernel:[ 27.904710] sd 0:0:0:0: [sda] Mode Sense: d7 00 00 08 06:21:51,812 NOTICE kernel:[ 27.905323] sd 0:0:1:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA 06:21:51,812 NOTICE kernel:[ 27.960059] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA 06:21:51,812 INFO kernel:[ 27.998854] sdb: sdb1 06:21:51,812 NOTICE kernel:[ 28.025249] sd 0:0:1:0: [sdb] Attached SCSI disk 06:21:51,812 INFO kernel:[ 28.096714] sda: sda1 sda2 06:21:51,812 NOTICE kernel:[ 28.139844] sd 0:0:0:0: [sda] Attached SCSI disk - LVM configuration: nothing special. Just Fedora-19 autopart. The below information from the installation time. Later, everything been formatted to XFS. name = vg_ibmls4102-lv_root status = True kids = 0 id = 7 parents = ['existing 139508MB lvmvg vg_ibmls4102 (3)'] uuid = wVn1JV-DQ4U-vXHD-liJi-kX0M-O6eA-geU4gs size = 51200.0 format = existing ext4 filesystem major = 0 minor = 0 exists = True protected = False sysfs path = /devices/virtual/block/dm-1 partedDevice = parted.Device instance -- model: Linux device-mapper (linear) path: /dev/mapper/vg_ibmls4102-lv_root type: 12 sectorSize: 512 physicalSectorSize: 512 length: 104857600 openCount: 0 readOnly: False externalMode: False dirty: False bootDirty: False host: 13107 did: 13107 busy: False hardwareGeometry: (6527, 255, 63) biosGeometry: (6527, 255, 63) PedDevice: <_ped.Device object at 0x7f5ffd504b00> target size = 51200.0 path = /dev/mapper/vg_ibmls4102-lv_root format args = [] originalFormat = ext4 target = None dmUuid = None VG device = LVMVolumeGroupDevice instance (0x7f5fee7e3590) -- name = vg_ibmls4102 status = True kids = 3 id = 3 parents = ['existing 69505MB partition sda2 (2) with existing lvmpv', 'existing 70005MB partition sdb1 (5) with existing lvmpv'] uuid = X0Bee2-lAuT-egUe-AXc1-a69j-dfmK-3ex1CB size = 139508 format = existing None major = 0 minor = 0 exists = True protected = False sysfs path = partedDevice = None target size = 0 path = /dev/mapper/vg_ibmls4102 format args = [] originalFormat = None target = None dmUuid = None free = 0.0 PE Size = 4.0 PE Count = 34877 PE Free = 0 PV Count = 2 LV Names = ['lv_home', 'lv_root', 'lv_swap'] modified = False extents = 34877.0 free space = 0 free extents = 0.0 reserved percent = 0 reserved space = 0 PVs = ['existing 69505MB partition sda2 (2) with existing lvmpv', 'existing 70005MB partition sdb1 (5) with existing lvmpv'] LVs = ['existing 71028MB lvmlv vg_ibmls4102-lv_home (6) with existing ext4 filesystem', 'existing 51200MB lvmlv vg_ibmls4102-lv_root (7) with existing ext4 filesystem', 'existing 17280MB lvmlv vg_ibmls4102-lv_swap (8) with existing swap'] percent = 0 mirrored = False stripes = 1 snapshot total = 0MB VG space used = 51200MB - type of disks you are using: nothing special - write cache status of drives: missed; need to reprovision the system. - size of BBWC and mode it is running in: missed; need to reprovision the system. - xfs_info output on the filesystem in question: missed; need to reprovision the system. - dmesg output showing all error messages and stack traces: http://people.redhat.com/qcai/stable/console.txt > > > > [ 304.898489] > > ============================================================================= > > [ 304.898489] BUG kmalloc-4096 (Tainted: G D ): Padding > > overwritten. 0xffff8801fbeb7c28-0xffff8801fbeb7fff > > [ 304.898490] > > ----------------------------------------------------------------------------- > > [ 304.898490] > > [ 304.898491] INFO: Slab 0xffffea0007efac00 objects=7 used=7 fp=0x > > (null) flags=0x20000000004080 > > [ 304.898492] Pid: 357, comm: systemd-udevd Tainted: G B D 3.9.3 > > #1 > > [ 304.898492] Call Trace: > > [ 304.898495] [] slab_err+0xc2/0xf0 > > [ 304.898497] [] ? init_object+0x3d/0x70 > > [ 304.898498] [] slab_pad_check.part.41+0xf5/0x170 > > [ 304.898500] [] ? seq_read+0x2e3/0x3b0 > > [ 304.898501] [] check_slab+0x73/0x100 > > [ 304.898503] [] alloc_debug_processing+0x21/0x118 > > [ 304.898504] [] __slab_alloc+0x3b8/0x4a2 > > [ 304.898506] [] ? vma_link+0xb7/0xc0 > > [ 304.898508] [] ? seq_read+0x2e3/0x3b0 > > [ 304.898509] [] kmem_cache_alloc_trace+0x1b1/0x200 > > [ 304.898510] [] seq_read+0x2e3/0x3b0 > > [ 304.898512] [] vfs_read+0x9c/0x170 > > [ 304.898513] [] sys_read+0x49/0xa0 > > [ 304.898514] [] system_call_fastpath+0x16/0x1b > > That's something different, and indicates memory corruption is being > seen as a result of something that is occuring through the /proc or > /sys filesystems. Unrelated to XFS, I think... > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > From dave@fromorbit.com Fri May 24 03:54:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8A57F7F4C for ; Fri, 24 May 2013 03:54:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E7B41AC002 for ; Fri, 24 May 2013 01:54:28 -0700 (PDT) X-ASG-Debug-ID: 1369385665-04cbb0049ae32f0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id wvK3EZHoqLLVg3dE for ; Fri, 24 May 2013 01:54:26 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgYMABEqn1F5LEc//2dsb2JhbABZgwjCTQSBARd0giMBAQVWFh0IGDE5AxsZiAy6C41tE4R4A6h7gyEqgS0 Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 18:24:24 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfnlX-0001NY-LE for xfs@oss.sgi.com; Fri, 24 May 2013 18:54:23 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfnlX-0004QP-H9 for xfs@oss.sgi.com; Fri, 24 May 2013 18:54:23 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/2] xfstests: ensure all mkfs output is redirected properly Date: Fri, 24 May 2013 18:54:19 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfstests: ensure all mkfs output is redirected properly Message-Id: <1369385659-16970-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369385659-16970-1-git-send-email-david@fromorbit.com> References: <1369385659-16970-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369385665 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner mkfs.xfs with experimental CRC support outputs extra warnings about being experimental on stderr, and so some tests do not redirect the output correctly. These tests fail with a golden output mismatch due to this. Fix these tests by redirecting stderr to either seqres.full or /dev/null. Signed-off-by: Dave Chinner --- common/dump | 4 ++-- common/rc | 2 +- common/repair | 2 ++ tests/xfs/004 | 3 ++- tests/xfs/021 | 2 +- tests/xfs/029 | 2 +- tests/xfs/030 | 2 +- tests/xfs/031 | 2 ++ tests/xfs/033 | 4 ++-- tests/xfs/041 | 5 +++-- tests/xfs/042 | 2 +- tests/xfs/050 | 2 +- tests/xfs/052 | 2 +- tests/xfs/067 | 4 ++-- tests/xfs/071 | 2 +- tests/xfs/072 | 3 +-- tests/xfs/073 | 5 +++-- tests/xfs/104 | 2 +- tests/xfs/106 | 2 +- tests/xfs/107 | 2 +- tests/xfs/108 | 2 +- tests/xfs/109 | 3 ++- tests/xfs/110 | 2 +- tests/xfs/118 | 2 +- tests/xfs/178 | 2 +- tests/xfs/189 | 2 +- tests/xfs/244 | 6 ++++-- tests/xfs/287 | 4 ++-- 28 files changed, 43 insertions(+), 34 deletions(-) diff --git a/common/dump b/common/dump index 7fe50f6..9c998e5 100644 --- a/common/dump +++ b/common/dump @@ -236,8 +236,8 @@ _wipe_fs() { _require_scratch - _scratch_mkfs_xfs >>$seqres.full || _fail "mkfs failed" - _scratch_mount >>$seqres.full || _fail "mount failed" + _scratch_mkfs_xfs >>$seqres.full 2>&1 || _fail "mkfs failed" + _scratch_mount >>$seqres.full 2>&1 || _fail "mount failed" } # diff --git a/common/rc b/common/rc index fe6bbfc..88d38ef 100644 --- a/common/rc +++ b/common/rc @@ -1078,7 +1078,7 @@ _require_dm_flakey() # _require_projid32bit() { - _scratch_mkfs_xfs -f -i projid32bit=0 2>&1 >/dev/null \ + _scratch_mkfs_xfs -f -i projid32bit=0 >/dev/null 2>&1 \ || _notrun "mkfs.xfs doesn't have projid32bit feature" } diff --git a/common/repair b/common/repair index db160bb..243f70f 100644 --- a/common/repair +++ b/common/repair @@ -80,6 +80,8 @@ s/\s+- \d+:\d\d:\d\d:.*\n//g; # crc enabled filesystem output /XFS_CORRUPTION_ERROR/ && next; /^bad uuid/ && next; +/^Version 5 superblock detected./ && next; +/^Use of these features/ && next; print;' } diff --git a/tests/xfs/004 b/tests/xfs/004 index 978943d..3cb7a08 100755 --- a/tests/xfs/004 +++ b/tests/xfs/004 @@ -41,7 +41,8 @@ trap "_cleanup" 0 1 2 3 15 _populate_scratch() { echo "=== mkfs output ===" >>$seqres.full - _scratch_mkfs_xfs | tee -a $seqres.full | _filter_mkfs 2>$tmp.mkfs + _scratch_mkfs_xfs 2> /dev/null | tee -a $seqres.full \ + | _filter_mkfs 2>$tmp.mkfs . $tmp.mkfs _scratch_mount dd if=/dev/zero of=$SCRATCH_MNT/foo count=200 bs=4096 >/dev/null 2>&1 & diff --git a/tests/xfs/021 b/tests/xfs/021 index a727b51..46a3f1b 100755 --- a/tests/xfs/021 +++ b/tests/xfs/021 @@ -83,7 +83,7 @@ rm -f $seqres.full umount $SCRATCH_DEV >/dev/null 2>&1 echo "*** mkfs" -_scratch_mkfs_xfs >/dev/null \ +_scratch_mkfs_xfs >/dev/null 2>&1 \ || _fail "mkfs failed" echo "*** mount FS" diff --git a/tests/xfs/029 b/tests/xfs/029 index 0709fce..ffe6e5a 100755 --- a/tests/xfs/029 +++ b/tests/xfs/029 @@ -58,7 +58,7 @@ _supported_os Linux _require_scratch echo -_scratch_mkfs_xfs | _filter_mkfs 2>/dev/null +_scratch_mkfs_xfs > /dev/null 2>&1 echo _scratch_xfs_logprint | _filter_logprint diff --git a/tests/xfs/030 b/tests/xfs/030 index af03166..c89ffe1 100755 --- a/tests/xfs/030 +++ b/tests/xfs/030 @@ -98,7 +98,7 @@ src/devzero -v -1 -n "$clear" $SCRATCH_DEV >/dev/null # now kick off the real repair test... # -_scratch_mkfs_xfs $DSIZE | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs $DSIZE 2>/dev/null | _filter_mkfs 2>$tmp.mkfs . $tmp.mkfs _check_ag 0 _check_ag -1 diff --git a/tests/xfs/031 b/tests/xfs/031 index 48a97e1..3fbc7de 100755 --- a/tests/xfs/031 +++ b/tests/xfs/031 @@ -56,6 +56,8 @@ _check_repair() fi # echo all interesting stuff... perl -ne ' + /EXPERIMENTAL/d; + /Use of these features/d; s/(rebuilding directory inode) (\d+)/\1 INO/g; s/internal log/ log/g; s/external log on \S+/ log/g; diff --git a/tests/xfs/033 b/tests/xfs/033 index bf906e0..bfdffce 100755 --- a/tests/xfs/033 +++ b/tests/xfs/033 @@ -81,10 +81,10 @@ _require_scratch _require_no_large_scratch_dev # devzero blows away 512byte blocks, so make 512byte inodes (at least) -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs . $tmp.mkfs [ $isize -lt 512 ] && \ - _scratch_mkfs_xfs -isize=512 | _filter_mkfs >/dev/null 2>&1 + _scratch_mkfs_xfs -isize=512 2> /dev/null | _filter_mkfs >/dev/null 2>&1 `xfs_db -r -c sb -c p $SCRATCH_DEV | grep 'ino = ' | \ sed -e 's/ //g' -e 's/^/export /'` diff --git a/tests/xfs/041 b/tests/xfs/041 index 8b109fc..f25975a 100755 --- a/tests/xfs/041 +++ b/tests/xfs/041 @@ -63,8 +63,9 @@ _do_die_on_error=message_only rm -f $seqres.full agsize=32 echo -n "Make $agsize megabyte filesystem on SCRATCH_DEV and mount... " -_scratch_mkfs_xfs -dsize=${agsize}m,agcount=1 2>&1 >/dev/null || _fail "mkfs failed" -bsize=`_scratch_mkfs_xfs -dsize=${agsize}m,agcount=1 2>&1 | _filter_mkfs 2>&1 \ +_scratch_mkfs_xfs -dsize=${agsize}m,agcount=1 >/dev/null 2>&1 || _fail "mkfs failed" +bsize=`_scratch_mkfs_xfs -dsize=${agsize}m,agcount=1 2> /dev/null \ + |_filter_mkfs 2>&1 \ | perl -ne 'if (/dbsize=(\d+)/) {print $1;}'` onemeginblocks=`expr 1048576 / $bsize` _scratch_mount || _fail "mount failed" diff --git a/tests/xfs/042 b/tests/xfs/042 index db0fa28..bb9ab03 100755 --- a/tests/xfs/042 +++ b/tests/xfs/042 @@ -91,7 +91,7 @@ rm -f $seqres.full _do_die_on_error=message_only echo -n "Make a 48 megabyte filesystem on SCRATCH_DEV and mount... " -_scratch_mkfs_xfs -dsize=48m,agcount=3 2>&1 >/dev/null || _fail "mkfs failed" +_scratch_mkfs_xfs -dsize=48m,agcount=3 >/dev/null 2>&1 || _fail "mkfs failed" _scratch_mount || _fail "mount failed" echo "done" diff --git a/tests/xfs/050 b/tests/xfs/050 index 6641e7d..ab85107 100755 --- a/tests/xfs/050 +++ b/tests/xfs/050 @@ -116,7 +116,7 @@ _qsetup() _exercise() { - _scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs + _scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >>$seqres.full # keep the blocksize and data size for dd later diff --git a/tests/xfs/052 b/tests/xfs/052 index c2cf596..0d3d6b7 100755 --- a/tests/xfs/052 +++ b/tests/xfs/052 @@ -59,7 +59,7 @@ _require_nobody # setup a default run _qmount_option uquota -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >>$seqres.full chmod a+w $seqres.full # arbitrary users will write here diff --git a/tests/xfs/067 b/tests/xfs/067 index 27f5713..fd664b6 100755 --- a/tests/xfs/067 +++ b/tests/xfs/067 @@ -47,10 +47,10 @@ _require_scratch # set up fs for 1K inodes isize=0 -_scratch_mkfs_xfs | _filter_mkfs >$seqres.full 2>$tmp.mkfs +_scratch_mkfs_xfs 2>&1 | _filter_mkfs >$seqres.full 2>$tmp.mkfs [ $? -eq 0 ] && source $tmp.mkfs if [ "$isize" -lt 1024 ]; then - _scratch_mkfs_xfs -i size=1024 >>$seqres.full \ + _scratch_mkfs_xfs -i size=1024 >>$seqres.full 2>&1 \ || _notrun "Cannot mkfs for this test using MKFS_OPTIONS specified" fi _scratch_mount >>$seqres.full || _fail "mount failed" diff --git a/tests/xfs/071 b/tests/xfs/071 index 86c6899..52c56ac 100755 --- a/tests/xfs/071 +++ b/tests/xfs/071 @@ -105,7 +105,7 @@ _supported_os IRIX Linux [ -n "$XFS_IO_PROG" ] || _notrun "xfs_io executable not found" _require_scratch -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs . $tmp.mkfs echo _scratch_mount diff --git a/tests/xfs/072 b/tests/xfs/072 index 9949749..e71bb08 100755 --- a/tests/xfs/072 +++ b/tests/xfs/072 @@ -51,9 +51,8 @@ _supported_os IRIX Linux _require_scratch rm -f $seqres.full -umount $SCRATCH_DEV >/dev/null 2>&1 -_scratch_mkfs_xfs >/dev/null || _fail "mkfs failed" +_scratch_mkfs_xfs >/dev/null 2>&1 || _fail "mkfs failed" _scratch_mount >/dev/null || _fail "mount failed" # check there's enough freespace on $SCRATCH_MNT ... (1GiB + 1MiB) diff --git a/tests/xfs/073 b/tests/xfs/073 index ad38059..b3204f8 100755 --- a/tests/xfs/073 +++ b/tests/xfs/073 @@ -133,7 +133,7 @@ _supported_os Linux _require_scratch _require_loop -_scratch_mkfs_xfs -dsize=41m,agcount=2 | _filter_mkfs 2>/dev/null +_scratch_mkfs_xfs -dsize=41m,agcount=2 2> /dev/null | _filter_mkfs 2>/dev/null _scratch_mount 2>/dev/null || _fail "initial scratch mount failed" echo @@ -153,7 +153,8 @@ _verify_copy $imgs.image $SCRATCH_DEV $SCRATCH_MNT echo echo === copying scratch device to single target, large ro device -${MKFS_PROG}.xfs -dfile,name=$imgs.source,size=100g | _filter_mkfs 2>/dev/null +${MKFS_PROG}.xfs -dfile,name=$imgs.source,size=100g 2> /dev/null \ + | _filter_mkfs 2>/dev/null rmdir $imgs.source_dir 2>/dev/null mkdir $imgs.source_dir diff --git a/tests/xfs/104 b/tests/xfs/104 index d31cf16..5938f54 100755 --- a/tests/xfs/104 +++ b/tests/xfs/104 @@ -71,7 +71,7 @@ _stress_scratch() # real QA test starts here _supported_fs xfs _require_scratch -_scratch_mkfs_xfs | tee -a $seqres.full | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | tee -a $seqres.full | _filter_mkfs 2>$tmp.mkfs . $tmp.mkfs # extract blocksize and data size for scratch device endsize=`expr 550 \* 1048576` # stop after growing this big diff --git a/tests/xfs/106 b/tests/xfs/106 index 7f97722..3fb914a 100755 --- a/tests/xfs/106 +++ b/tests/xfs/106 @@ -44,7 +44,7 @@ _require_scratch _require_xfs_quota # real QA test starts here -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >$seqres.full . $tmp.mkfs diff --git a/tests/xfs/107 b/tests/xfs/107 index 2bd20a3..72c2642 100755 --- a/tests/xfs/107 +++ b/tests/xfs/107 @@ -56,7 +56,7 @@ _require_scratch _require_xfs_quota # real QA test starts here -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >$seqres.full . $tmp.mkfs diff --git a/tests/xfs/108 b/tests/xfs/108 index 5a47009..0d41988 100755 --- a/tests/xfs/108 +++ b/tests/xfs/108 @@ -83,7 +83,7 @@ _require_prjquota $SCRATCH_DEV # real QA test starts here rm -f $tmp.projects $seqres.full umount $SCRATCH_DEV 2>/dev/null -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >>$seqres.full _scratch_mount diff --git a/tests/xfs/109 b/tests/xfs/109 index 5578c90..e7a6d15 100755 --- a/tests/xfs/109 +++ b/tests/xfs/109 @@ -102,7 +102,8 @@ if [ -n "$FASTSTART" -a -f $SCRATCH_MNT/f0 ]; then fi umount $SCRATCH_DEV -_scratch_mkfs_xfs -dsize=160m,agcount=4 $faststart | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs -dsize=160m,agcount=4 $faststart 2> /dev/null \ + | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >>$seqres.full _scratch_mount diff --git a/tests/xfs/110 b/tests/xfs/110 index 48bea45..46fe2f7 100755 --- a/tests/xfs/110 +++ b/tests/xfs/110 @@ -42,7 +42,7 @@ _require_scratch # real QA test starts here umount $SCRATCH_DEV 2>/dev/null -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs STR1=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA STR2=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB diff --git a/tests/xfs/118 b/tests/xfs/118 index 8414594..a0c1a54 100755 --- a/tests/xfs/118 +++ b/tests/xfs/118 @@ -72,7 +72,7 @@ _chowning_file() } echo "mkfs on scratch" -_scratch_mkfs_xfs >$seqres.full +_scratch_mkfs_xfs >$seqres.full 2> /dev/null echo "mount with quotas" export MOUNT_OPTIONS="-o uquota" diff --git a/tests/xfs/178 b/tests/xfs/178 index 9db8d05..4efba35 100755 --- a/tests/xfs/178 +++ b/tests/xfs/178 @@ -74,7 +74,7 @@ _supported_os Linux # fix filesystem, new mkfs.xfs will be fine. _require_scratch -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs \ +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>$tmp.mkfs \ || _fail "mkfs failed!" # By executing the followint tmp file, will get on the mkfs options stored in diff --git a/tests/xfs/189 b/tests/xfs/189 index 27bfb63..9f6921a 100755 --- a/tests/xfs/189 +++ b/tests/xfs/189 @@ -241,7 +241,7 @@ _require_scratch unset SCRATCH_RTDEV unset SCRATCH_LOGDEV -_scratch_mkfs_xfs | _filter_mkfs 2>/dev/null +_scratch_mkfs_xfs 2> /dev/null | _filter_mkfs 2>/dev/null _add_scratch_fstab _test_remount_rw diff --git a/tests/xfs/244 b/tests/xfs/244 index d899a3d..7d2a2d3 100755 --- a/tests/xfs/244 +++ b/tests/xfs/244 @@ -52,7 +52,8 @@ _require_projid32bit export MOUNT_OPTIONS="-opquota" # make fs with no projid32bit -_scratch_mkfs_xfs -i projid32bit=0 >> $seqres.full || _fail "mkfs failed" +_scratch_mkfs_xfs -i projid32bit=0 2> /dev/null >> $seqres.full \ + || _fail "mkfs failed" _qmount # make sure project quota is supported _require_prjquota ${SCRATCH_DEV} @@ -96,7 +97,8 @@ fi # Do testing on filesystem with projid32bit feature enabled umount $SCRATCH_DEV 2>/dev/null -_scratch_mkfs_xfs -i projid32bit=1 >> $seqres.full || _fail "mkfs failed" +_scratch_mkfs_xfs -i projid32bit=1 >> $seqres.full 2> /dev/null \ + || _fail "mkfs failed" _qmount mkdir $dir diff --git a/tests/xfs/287 b/tests/xfs/287 index 10853d1..9de0b3d 100755 --- a/tests/xfs/287 +++ b/tests/xfs/287 @@ -58,8 +58,8 @@ _require_scratch _require_projid32bit # create xfs fs without projid32bit ability, will be gained by xfs_admin -_scratch_mkfs_xfs -i projid32bit=0 -d size=200m >> $seqres.full \ - || _fail "mkfs failed" +_scratch_mkfs_xfs -i projid32bit=0 -d size=200m 2> /dev/null >> $seqres.full \ + || _fail "mkfs failed" _qmount_option "pquota" _qmount # require project quotas -- 1.7.10.4 From dave@fromorbit.com Fri May 24 03:54:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3AC9A7F4E for ; Fri, 24 May 2013 03:54:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 27FE4304051 for ; Fri, 24 May 2013 01:54:30 -0700 (PDT) X-ASG-Debug-ID: 1369385665-04cbb0049ae32f0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 1R8klRUDoR6ztB04 for ; Fri, 24 May 2013 01:54:27 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgYMABEqn1F5LEc//2dsb2JhbABZgwjCTQSBARd0giMBAQUnLzMIGDE5AxsZiAy6C44AhHgDqHuDISo Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 18:24:24 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfnlX-0001NX-KR for xfs@oss.sgi.com; Fri, 24 May 2013 18:54:23 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfnlX-0004QM-G8 for xfs@oss.sgi.com; Fri, 24 May 2013 18:54:23 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/2] xfstests: generic/193 needs some help Date: Fri, 24 May 2013 18:54:18 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfstests: generic/193 needs some help Message-Id: <1369385659-16970-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369385659-16970-1-git-send-email-david@fromorbit.com> References: <1369385659-16970-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369385667 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words From: Dave Chinner generic/192 runs the test in $here - the root of the xfstests source tree/installation. IOWs, it doesn't test the filesystem on either the TEST_DIR or SCRATCH_MNT, and so it not testing the filesystem we think it is testing. Bad. Fixing this is the majority of the change - introducing $test_root and $test_user for the files with different owners, and then redirecting error output and filtering the output appropriately. And then add checks that truncate clears the suid/sgid bits appropriately, somethign that has never been tested on XFS (and likely other filesystems) so will cause kernels between 3.1 and 3.9 to assert fail as Dave Jones has recently reported. Signed-off-by: Dave Chinner --- tests/generic/193 | 135 ++++++++++++++++++++++++++++++++----------------- tests/generic/193.out | 17 ++++++- 2 files changed, 105 insertions(+), 47 deletions(-) diff --git a/tests/generic/193 b/tests/generic/193 index cdf04c2..4fa20ff 100755 --- a/tests/generic/193 +++ b/tests/generic/193 @@ -43,9 +43,9 @@ tag="added by qa $seq" # _create_files() { - touch test.root - touch test.${qa_user} - chown ${qa_user}:${qa_user} test.${qa_user} + touch $test_root + touch $test_user + chown ${qa_user}:${qa_user} $test_user } # @@ -53,8 +53,13 @@ _create_files() # _cleanup_files() { - rm -f test.${qa_user} - rm -f test.root + rm -f $test_user + rm -f $test_root +} + +_filter_files() +{ + sed -e "s,$test_root,test.root,g" -e "s,$test_user,test.user,g" } # get standard environment, filters and checks @@ -68,6 +73,9 @@ _supported_os Linux _require_user _need_to_be_root +test_root=$TEST_DIR/$seq.$$.root +test_user=$TEST_DIR/$seq.$$.user + # # make sure we have a normal umask set # @@ -83,17 +91,17 @@ echo _create_files echo "user: chown root owned file to qa_user (should fail)" -su ${qa_user} -c "chown ${qa_user} test.root" +su ${qa_user} -c "chown ${qa_user} $test_root" 2>&1 | _filter_files echo "user: chown root owned file to root (should fail)" -su ${qa_user} -c "chown root test.root" +su ${qa_user} -c "chown root $test_root" 2>&1 | _filter_files echo "user: chown qa_user owned file to qa_user (should succeed)" -su ${qa_user} -c "chown ${qa_user} test.${qa_user}" +su ${qa_user} -c "chown ${qa_user} $test_user" # this would work without _POSIX_CHOWN_RESTRICTED echo "user: chown qa_user owned file to root (should fail)" -su ${qa_user} -c "chown root test.${qa_user}" +su ${qa_user} -c "chown root $test_user" 2>&1 | _filter_files _cleanup_files @@ -107,19 +115,19 @@ echo _create_files echo "user: chgrp root owned file to root (should fail)" -su ${qa_user} -c "chgrp root test.root" +su ${qa_user} -c "chgrp root $test_root" 2>&1 | _filter_files echo "user: chgrp qa_user owned file to root (should fail)" -su ${qa_user} -c "chgrp root test.${qa_user}" +su ${qa_user} -c "chgrp root $test_user" 2>&1 | _filter_files echo "user: chgrp root owned file to qa_user (should fail)" -su ${qa_user} -c "chgrp ${qa_user} test.root" +su ${qa_user} -c "chgrp ${qa_user} $test_root" 2>&1 | _filter_files echo "user: chgrp qa_user owned file to qa_user (should succeed)" -su ${qa_user} -c "chgrp ${qa_user} test.${qa_user}" +su ${qa_user} -c "chgrp ${qa_user} $test_user" #echo "user: chgrp qa_user owned file to secondary group (should succeed)" -#su ${qa_user} -c "chgrp ${group2} test.${qa_user}" +#su ${qa_user} -c "chgrp ${group2} $test_user" _cleanup_files @@ -133,10 +141,10 @@ echo _create_files echo "user: chmod a+r on qa_user owned file (should succeed)" -su ${qa_user} -c "chmod a+r test.${qa_user}" +su ${qa_user} -c "chmod a+r $test_user" echo "user: chmod a+r on root owned file (should fail)" -su ${qa_user} -c "chmod a+r test.root" +su ${qa_user} -c "chmod a+r $test_root" 2>&1 | _filter_files # # Setup a file owned by the qa_user, but with a group ID that @@ -153,12 +161,12 @@ su ${qa_user} -c "chmod a+r test.root" # reg file + file's gid not in process' group set + no approp. privileges -> clear sgid # echo "check that the sgid bit is cleared" -chown ${qa_user}:root test.${qa_user} -chmod g+s test.${qa_user} +chown ${qa_user}:root $test_user +chmod g+s $test_user # and let the qa_user change permission bits -su ${qa_user} -c "chmod a+w test.${qa_user}" -stat -c '%A' test.${qa_user} +su ${qa_user} -c "chmod a+w $test_user" +stat -c '%A' $test_user # # Setup a file owned by the qa_user and with the suid bit set. @@ -166,9 +174,9 @@ stat -c '%A' test.${qa_user} # There is nothing in Posix that says it should but just checking. # echo "check that suid bit is not cleared" -chmod u+s test.${qa_user} -chmod a+w test.${qa_user} -stat -c '%A' test.${qa_user} +chmod u+s $test_user +chmod a+w $test_user +stat -c '%A' $test_user _cleanup_files @@ -196,35 +204,72 @@ _create_files echo "check that suid/sgid bits are cleared after successful chown..." echo "with no exec perm" -chmod ug+s test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user echo "with user exec perm" -chmod ug+s test.${qa_user} -chmod u+x test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +chmod u+x $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user echo "with group exec perm" -chmod ug+s test.${qa_user} -chmod g+x test.${qa_user} -chmod u-x test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +chmod g+x $test_user +chmod u-x $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user echo "with user+group exec perm" -chmod ug+s test.${qa_user} -chmod ug+x test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +chmod ug+x $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user _cleanup_files +_create_files +# Now test out the clear of suid/sgid for truncate +# +echo "check that suid/sgid bits are cleared after successful truncate..." + +echo "with no exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + +echo "with user exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +chmod u+x $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + +echo "with group exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +chmod g+x $test_user +chmod u-x $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + +echo "with user+group exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +chmod ug+x $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + # # Test ATTR_*TIMES_SET # @@ -235,10 +280,10 @@ echo _create_files echo "user: touch qa_user file (should succeed)" -su ${qa_user} -c "touch test.${qa_user}" +su ${qa_user} -c "touch $test_user" echo "user: touch root file (should fail)" -su ${qa_user} -c "touch test.root" +su ${qa_user} -c "touch $test_root" 2>&1 | _filter_files _cleanup_files diff --git a/tests/generic/193.out b/tests/generic/193.out index b89add3..357a7c1 100644 --- a/tests/generic/193.out +++ b/tests/generic/193.out @@ -8,14 +8,14 @@ user: chown root owned file to root (should fail) chown: changing ownership of `test.root': Operation not permitted user: chown qa_user owned file to qa_user (should succeed) user: chown qa_user owned file to root (should fail) -chown: changing ownership of `test.fsgqa': Operation not permitted +chown: changing ownership of `test.user': Operation not permitted testing ATTR_GID user: chgrp root owned file to root (should fail) chgrp: changing group of `test.root': Operation not permitted user: chgrp qa_user owned file to root (should fail) -chgrp: changing group of `test.fsgqa': Operation not permitted +chgrp: changing group of `test.user': Operation not permitted user: chgrp root owned file to qa_user (should fail) chgrp: changing group of `test.root': Operation not permitted user: chgrp qa_user owned file to qa_user (should succeed) @@ -42,6 +42,19 @@ after: -rw-r-xr-- with user+group exec perm before: -rwsr-sr-- after: -rwxr-xr-- +check that suid/sgid bits are cleared after successful truncate... +with no exec perm +before: -rwSr-Sr-- +after: -rw-r-Sr-- +with user exec perm +before: -rwsr-Sr-- +after: -rwxr-Sr-- +with group exec perm +before: -rwSr-sr-- +after: -rw-r-xr-- +with user+group exec perm +before: -rwsr-sr-- +after: -rwxr-xr-- testing ATTR_*TIMES_SET -- 1.7.10.4 From dave@fromorbit.com Fri May 24 03:54:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8CACC7F56 for ; Fri, 24 May 2013 03:54:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 150BCAC001 for ; Fri, 24 May 2013 01:54:35 -0700 (PDT) X-ASG-Debug-ID: 1369385665-04cbb0049ae32f0003-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id FYniR0VUaG3RLO5Y for ; Fri, 24 May 2013 01:54:34 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ai4MABEqn1F5LEc//2dsb2JhbABZgwiMSLYFBIEBF3SDADuBAgOIQJkXoHSOAIE6gz4DqHuDISo Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 18:24:34 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ufnlh-0001Nf-Js for xfs@oss.sgi.com; Fri, 24 May 2013 18:54:33 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfnlX-0004QJ-Eq for xfs@oss.sgi.com; Fri, 24 May 2013 18:54:23 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/2] xfstests: a fix or two Date: Fri, 24 May 2013 18:54:17 +1000 X-ASG-Orig-Subj: [PATCH 0/2] xfstests: a fix or two Message-Id: <1369385659-16970-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369385669 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The first patch fixes generic/193 to ctually test suig/sgid behaviour on target filesytems, and to test truncate as well. The second filters a bunch of noise that causes tests to fail when testing CRC-enabled filesystems. From dave@fromorbit.com Fri May 24 03:58:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2665D7F37 for ; Fri, 24 May 2013 03:58:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9FC09AC001 for ; Fri, 24 May 2013 01:58:44 -0700 (PDT) X-ASG-Debug-ID: 1369385922-04cb6c473fe16b0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id CpBRTHrLpwyDhuXQ for ; Fri, 24 May 2013 01:58:42 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 18:28:14 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfnpC-0001Nq-0c; Fri, 24 May 2013 18:58:10 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfnpB-0004UL-SO; Fri, 24 May 2013 18:58:09 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [patch 0/2] xfs: yet more fixes for 3.10-rc3 Date: Fri, 24 May 2013 18:58:06 +1000 X-ASG-Orig-Subj: [patch 0/2] xfs: yet more fixes for 3.10-rc3 Message-Id: <1369385888-17214-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369312240-5925-1-git-send-email-david@fromorbit.com> References: <1369312240-5925-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369385922 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The first disabled swap extents for CRC enabled filesystems as it "corrupts" owner information in the BMBT blocks. The second fixes the suid/sgid truncate issue that Dave Jones reported. This one is definitely a stable kernel candidate. -dave. From dave@fromorbit.com Fri May 24 03:58:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F31457F51 for ; Fri, 24 May 2013 03:58:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D33BC8F8089 for ; Fri, 24 May 2013 01:58:45 -0700 (PDT) X-ASG-Debug-ID: 1369385922-04cb6c473fe16b0002-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id pp2wDv5qcxqIa8Ek for ; Fri, 24 May 2013 01:58:44 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 18:28:14 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfnpC-0001Nr-2Q; Fri, 24 May 2013 18:58:10 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfnpB-0004US-UQ; Fri, 24 May 2013 18:58:09 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 2/2] xfs: kill suid/sgid through the truncate path. Date: Fri, 24 May 2013 18:58:08 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfs: kill suid/sgid through the truncate path. Message-Id: <1369385888-17214-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369385888-17214-1-git-send-email-david@fromorbit.com> References: <1369312240-5925-1-git-send-email-david@fromorbit.com> <1369385888-17214-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369385923 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner XFS has failed to kill suid/sgid bits correctly when truncating files of non-zero size since commit c4ed4243 ("xfs: split xfs_setattr") introduced in the 3.1 kernel. Fix it. Fix it. cc: stable kernel Signed-off-by: Dave Chinner --- fs/xfs/xfs_iops.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa..c255382 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -455,6 +455,24 @@ xfs_vn_getattr( return 0; } +static void +xfs_setattr_mode( + struct inode *inode, + struct iattr *iattr) +{ + struct xfs_inode *ip = XFS_I(inode); + umode_t mode = iattr->ia_mode; + + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) + mode &= ~S_ISGID; + + ip->i_d.di_mode &= S_IFMT; + ip->i_d.di_mode |= mode & ~S_IFMT; + + inode->i_mode &= S_IFMT; + inode->i_mode |= mode & ~S_IFMT; +} + int xfs_setattr_nonsize( struct xfs_inode *ip, @@ -606,18 +624,8 @@ xfs_setattr_nonsize( /* * Change file access modes. */ - if (mask & ATTR_MODE) { - umode_t mode = iattr->ia_mode; - - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) - mode &= ~S_ISGID; - - ip->i_d.di_mode &= S_IFMT; - ip->i_d.di_mode |= mode & ~S_IFMT; - - inode->i_mode &= S_IFMT; - inode->i_mode |= mode & ~S_IFMT; - } + if (mask & ATTR_MODE) + xfs_setattr_mode(inode, iattr); /* * Change file access or modified times. @@ -714,9 +722,8 @@ xfs_setattr_size( return XFS_ERROR(error); ASSERT(S_ISREG(ip->i_d.di_mode)); - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| - ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| - ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); + ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| + ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); if (!(flags & XFS_ATTR_NOLOCK)) { lock_flags |= XFS_IOLOCK_EXCL; @@ -860,6 +867,12 @@ xfs_setattr_size( xfs_inode_clear_eofblocks_tag(ip); } + /* + * Change file access modes. + */ + if (mask & ATTR_MODE) + xfs_setattr_mode(inode, iattr); + if (mask & ATTR_CTIME) { inode->i_ctime = iattr->ia_ctime; ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; -- 1.7.10.4 From dave@fromorbit.com Fri May 24 03:58:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D19A07F56 for ; Fri, 24 May 2013 03:58:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7D5ABAC002 for ; Fri, 24 May 2013 01:58:54 -0700 (PDT) X-ASG-Debug-ID: 1369385932-04bdf063bd8c790001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id SUjS7EVV5rg79mjI for ; Fri, 24 May 2013 01:58:53 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgYMAHArn1F5LEc//2dsb2JhbABZgwjCTQSBARd0giMBAQUnLyMQCBgxOQMbGYgMugeOAIE6gz4DqHuDISo Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail06.adl2.internode.on.net with ESMTP; 24 May 2013 18:28:20 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UfnpM-0001Ny-2Y; Fri, 24 May 2013 18:58:20 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UfnpB-0004UO-TQ; Fri, 24 May 2013 18:58:09 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 1/2] xfs: disable swap extents ioctl on CRC enabled filesystems Date: Fri, 24 May 2013 18:58:07 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfs: disable swap extents ioctl on CRC enabled filesystems Message-Id: <1369385888-17214-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369385888-17214-1-git-send-email-david@fromorbit.com> References: <1369312240-5925-1-git-send-email-david@fromorbit.com> <1369385888-17214-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369385932 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Currently, swapping extents from one inode to another is a simple act of switching data and attribute forks from one inode to another. This, unfortunately in no longer so simple with CRC enabled filesystems as there is owner information embedded into the BMBT blocks that are swapped between inodes. Hence swapping the forks between inodes results in the inodes having mapping blocks that point to the wrong owner and hence are considered corrupt. To fix this we need an extent tree block or record based swap algorithm so that the BMBT block owner information can be updated atomically in the swap transaction. This is a significant piece of new work, so for the moment simply don't allow swap extent operations to succeed on CRC enabled filesystems. Signed-off-by: Dave Chinner --- fs/xfs/xfs_dfrag.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index f852b08..c407e1c 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c @@ -219,6 +219,14 @@ xfs_swap_extents( int taforkblks = 0; __uint64_t tmp; + /* + * We have no way of updating owner information in the BMBT blocks for + * each inode on CRC enabled filesystems, so to avoid corrupting the + * this metadata we simply don't allow extent swaps to occur. + */ + if (xfs_sb_version_hascrc(&mp->m_sb)) + return XFS_ERROR(EINVAL); + tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL); if (!tempifp) { error = XFS_ERROR(ENOMEM); -- 1.7.10.4 From ole.tange.work@gmail.com Fri May 24 04:59:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E1A547CBF for ; Fri, 24 May 2013 04:59:25 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id CCE678F80B7 for ; Fri, 24 May 2013 02:59:25 -0700 (PDT) X-ASG-Debug-ID: 1369389563-04cbb0049de7fb0001-NocioJ Received: from mail-pa0-f41.google.com (mail-pa0-f41.google.com [209.85.220.41]) by cuda.sgi.com with ESMTP id 2Hk7vkrK3uNGIygU (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 24 May 2013 02:59:23 -0700 (PDT) X-Barracuda-Envelope-From: ole.tange.work@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.41 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.41] Received: by mail-pa0-f41.google.com with SMTP id rl6so4114384pac.0 for ; Fri, 24 May 2013 02:59:23 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.41] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.41] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:from:date:x-google-sender-auth:message-id :subject:to:content-type; bh=UOkpar/x+VxQ5/Svfv7jpqSfX9B8uUIbO+d0aMw8pRs=; b=paxAEP2M+RYKgyxI1WAu2kAmKIaQw0RG1ypo6qUjXoUUWFtJ7dK1FTCWN6gf3vT1Om OO7d36dV8PRfzZtP+uAF9p07sG1MFvqF8oD+AulceKjmu4hraXCSuyQdYl9+JJQ4Zm+C 7ZcdsseVzDBCznGEvp+AIij0iEUSns0LbjUtaSC/hc9xGtqukuzDttnfhXP++eMu0Kyu VVXJkoMBIq4MBfUnLT5KR0TFrpDqOPf4vWtkDSmLQmbZ1AJQX4KrYp/suk3euS3ohied vBondKWInGxCePzuln8q04idqxVGxnGruP+Nsbk9Rqcc5CHUUgEOsUmEi1ip0Q7KuojT HwaA== X-Received: by 10.68.35.3 with SMTP id d3mr17081282pbj.155.1369389562987; Fri, 24 May 2013 02:59:22 -0700 (PDT) MIME-Version: 1.0 Sender: ole.tange.work@gmail.com Received: by 10.68.23.34 with HTTP; Fri, 24 May 2013 02:59:02 -0700 (PDT) From: Ole Tange Date: Fri, 24 May 2013 11:59:02 +0200 X-Google-Sender-Auth: cU0cY6nZWcXqzMZo66A6eJjSOhc Message-ID: Subject: Intermittent crashes - xfs_repair finds no errors To: xfs@oss.sgi.com X-ASG-Orig-Subj: Intermittent crashes - xfs_repair finds no errors Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-pa0-f41.google.com[209.85.220.41] X-Barracuda-Start-Time: 1369389563 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131877 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature I have a 50 TB file system that has crashed 4 times during the past week. The filesystem runs on RAID, and the RAID is not complaining. This leads me to believe it is not due to hardware error on the disks. My guess is that the CPU has had a hiccup and that xfs somehow got corrupted due to this. And now I cannot clean out the corruption. Errors from syslog below. I have tried: # Do fsck on an overlay file so it is easy to revert if we get a nasty surprise DEVICES=/dev/md3 parallel 'rm overlay-{/};truncate -s4000G overlay-{/}' ::: $DEVICES parallel 'size=$(blockdev --getsize {}); loop=$(losetup -f --show -- overlay-{/}); echo 0 $size snapshot {} $loop P 8 | dmsetup create {/}' ::: $DEVICES mount /dev/mapper/md3 /mnt/disk umount /dev/mapper/md3 ./xfsprogs-3.1.9/repair/xfs_repair /dev/mapper/md3 <> mount /dev/mapper/md3 /mnt/disk ls /mnt/disk/lost+found <> umount /mnt/disk # Good: No nasty surprise. Dump the metadata ./xfsprogs-3.1.9/db/xfs_metadump.sh -o /dev/mapper/md3 - | pbzip2 > xfs_dump_after_repair_3.1.9.bz2 # Cleanup the overlay file parallel 'dmsetup remove {/}; rm overlay-{/}' ::: $DEVICES parallel losetup -d ::: /dev/loop[0-9]* # Do the fsck for real mount /dev/md3 /mnt/disk umount /dev/md3 ./xfsprogs-3.1.9/repair/xfs_repair /dev/md3 <> mount /dev/md3 /mnt/disk ls /mnt/disk/lost+found <> umount /mnt/disk /Ole Dump after repair: http://dna.ku.dk/~tange/xfs/xfs_dump_after_repair_3.1.9.bz2 # uname -a Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux May 13 11:43:31 lemaitre kernel: [507964.074856] XFS (md3): metadata I/O error: block 0x18dcf8 ("xfs_trans_read_buf") error 5 buf count 4096 May 13 11:44:03 lemaitre kernel: [507996.306827] XFS (md3): metadata I/O error: block 0x190a98 ("xfs_trans_read_buf") error 5 buf count 4096 May 13 11:44:14 lemaitre kernel: [508006.731931] XFS (md3): metadata I/O error: block 0x1926b0 ("xfs_trans_read_buf") error 5 buf count 4096 [... filesystem still operational ...] May 14 10:27:02 lemaitre kernel: [589775.551542] XFS (md3): metadata I/O error: block 0x186f38 ("xfs_trans_read_buf") error 5 buf count 4096 May 14 10:27:29 lemaitre kernel: [589801.821276] XFS (md3): metadata I/O error: block 0x18af68 ("xfs_trans_read_buf") error 5 buf count 4096 May 14 15:23:12 lemaitre kernel: [607544.768253] XFS (md3): metadata I/O error: block 0x4aff80 ("xfs_trans_read_buf") error 5 buf count 4096 May 14 15:34:34 lemaitre kernel: [608227.324389] XFS (md3): metadata I/O error: block 0x6563e8 ("xfs_trans_read_buf") error 5 buf count 4096 May 14 21:33:11 lemaitre kernel: [629744.136229] XFS (md3): metadata I/O error: block 0x130a07a4a0 ("xfs_trans_read_buf") error 5 buf count 4096 May 14 21:33:11 lemaitre kernel: [629744.136324] XFS (md3): xfs_do_force_shutdown(0x1) called from line 394 of file /build/buildd-linux-2.6_3.2.4-1~bpo60+1-amd64-Ns0wYl/linux-2.6-3.2.4/debian/build/source_amd64_none/fs/xfs/xfs_trans_buf.c. Return address = 0xffffffffa049aead May 14 21:33:12 lemaitre kernel: [629745.203860] XFS (md3): I/O Error Detected. Shutting down filesystem May 14 21:33:12 lemaitre kernel: [629745.203914] XFS (md3): Please umount the filesystem and rectify the problem(s) May 14 21:33:31 lemaitre kernel: [629763.936215] XFS (md3): xfs_log_force: error 5 returned. May 14 21:34:01 lemaitre kernel: [629794.016047] XFS (md3): xfs_log_force: error 5 returned. May 14 21:34:31 lemaitre kernel: [629824.096189] XFS (md3): xfs_log_force: error 5 returned. Filesystem offline here. Fsck run and remounted. May 15 15:31:53 lemaitre kernel: [694466.016078] XFS (md3): xfs_log_force: error 5 returned. May 15 15:31:54 lemaitre kernel: [694467.551968] XFS (md3): xfs_log_force: error 5 returned. May 15 15:31:54 lemaitre kernel: [694467.551978] XFS (md3): xfs_do_force_shutdown(0x1) called from line 1033 of file /build/buildd-linux-2.6_3.2.4 -1~bpo60+1-amd64-Ns0wYl/linux-2.6-3.2.4/debian/build/source_amd64_none/fs/xfs/xfs_buf.c. Return address = 0xffffffffa0453fc3 May 15 15:32:18 lemaitre kernel: [694490.937571] XFS (md3): xfs_log_force: error 5 returned. May 15 15:32:18 lemaitre kernel: [694490.939155] XFS (md3): xfs_log_force: error 5 returned. May 15 15:39:02 lemaitre kernel: [694895.438967] device-mapper: uevent: version 1.0.3 Filesystem offline here. Fsck run and remounted. May 15 15:58:18 lemaitre kernel: [696050.756430] XFS (md3): Mounting Filesystem May 15 15:58:18 lemaitre kernel: [696051.044107] XFS (md3): Starting recovery (logdev: internal) May 15 15:58:19 lemaitre kernel: [696052.068526] XFS (md3): Ending recovery (logdev: internal) May 15 16:06:52 lemaitre kernel: [696564.817562] XFS (md3): Mounting Filesystem May 15 16:06:52 lemaitre kernel: [696565.459025] XFS (md3): Ending clean mount May 15 16:07:00 lemaitre kernel: [696573.319085] XFS (md3): Mounting Filesystem May 15 16:07:00 lemaitre kernel: [696573.500547] XFS (md3): Ending clean mount May 15 16:13:41 lemaitre kernel: [696974.019574] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory May 15 16:13:41 lemaitre kernel: [696974.028698] NFSD: starting 90-second grace period May 15 20:28:12 lemaitre kernel: [712245.349494] XFS (md3): metadata I/O error: block 0x338eb0 ("xfs_trans_read_buf") error 5 buf count 4096 May 15 20:29:43 lemaitre kernel: [712335.934214] XFS (md3): metadata I/O error: block 0x17bb08 ("xfs_trans_read_buf") error 5 buf count 4096 May 15 20:30:27 lemaitre kernel: [712380.590518] XFS (md3): metadata I/O error: block 0x52f5b0 ("xfs_trans_read_buf") error 5 buf count 4096 May 15 20:30:51 lemaitre kernel: [712404.002788] XFS (md3): metadata I/O error: block 0x50a8a0 ("xfs_trans_read_buf") error 5 buf count 4096 May 15 20:42:27 lemaitre kernel: [713100.456611] XFS (md3): metadata I/O error: block 0x1f7a30 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 05:32:29 lemaitre kernel: [744902.528045] [Hardware Error]: CPU:24 MC4_STATUS[-|CE|MiscV|-|AddrV|CECC]: 0x9d404433001c011b May 16 05:32:29 lemaitre kernel: [744902.528141] [Hardware Error]: MC4_ADDR: 0x00000031acadd6fc May 16 05:32:29 lemaitre kernel: [744902.528190] [Hardware Error]: Northbridge Error (node 1): L3 ECC data cache error. May 16 05:32:29 lemaitre kernel: [744902.528274] [Hardware Error]: cache level: L3/GEN, tx: GEN, mem-tx: RD ( This CPU hiccup error may or may not be related to the xfs error ) May 16 06:31:11 lemaitre kernel: [748424.640189] XFS (md3): metadata I/O error: block 0x10f50 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 06:34:08 lemaitre kernel: [748600.981856] XFS (md3): metadata I/O error: block 0x1abe8 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 06:37:28 lemaitre kernel: [748801.549961] XFS (md3): metadata I/O error: block 0x8d2a1a10 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 06:43:40 lemaitre kernel: [749173.254919] XFS (md3): metadata I/O error: block 0x1214d8 ("xfs_trans_read_buf") error 5 buf count 4096 [...] May 16 12:24:38 lemaitre kernel: [769631.380902] XFS (md3): metadata I/O error: block 0x186360 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 12:24:39 lemaitre kernel: [769632.453609] XFS (md3): metadata I/O error: block 0x1862d0 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 15:26:01 lemaitre kernel: [780514.048738] idba_ud[17842]: segfault at 0 ip 000000000040bcc6 sp 00007fff1a6ad000 error 4 in idba_ud[400000+c7000] May 16 17:29:29 lemaitre kernel: [787921.801014] XFS (md3): metadata I/O error: block 0x140c507bf8 ("xfs_trans_read_buf") error 5 buf count 4096 May 16 17:29:29 lemaitre kernel: [787921.801138] XFS (md3): page discard on page ffffea00ddeeb9d0, inode 0xa301b6, offset 0. May 16 17:29:29 lemaitre kernel: [787921.826000] XFS: Internal error XFS_WANT_CORRUPTED_RETURN at line 341 of file /build/buildd-linux-2.6_3.2.4-1~bpo60+1-amd64-Ns0wYl/linux-2.6-3.2.4/debian/build/source_amd64_none/fs/xfs/xfs_alloc.c. Caller 0xffffffffa04679e6 May 16 17:29:29 lemaitre kernel: [787921.826005] Filesystem offline here. Fsck run and remounted. May 22 02:57:07 lemaitre kernel: [1253980.123621] XFS (md3): metadata I/O error: block 0x50a0f4e10 ("xfs_trans_read_buf") error 5 buf count 4096 May 22 02:57:07 lemaitre kernel: [1253980.123741] XFS (md3): page discard on page ffffea00a3ee6df8, inode 0xdeb24f, offset 4194304. May 22 05:27:28 lemaitre kernel: [1263001.003821] XFS (md3): metadata I/O error: block 0xd0cd54fe0 ("xfs_trans_read_buf") error 5 buf count 4096 May 22 05:27:28 lemaitre kernel: [1263001.003919] XFS (md3): xfs_do_force_shutdown(0x1) called from line 394 of file /build/buildd-linux-2.6_3.2.4-1~bpo60+1-amd64-Ns0wYl/linux-2.6-3.2.4/debian/build/source_amd64_none/fs/xfs/xfs_trans_buf.c. Return address = 0xffffffffa049aead May 22 05:27:29 lemaitre kernel: [1263002.295623] XFS (md3): I/O Error Detected. Shutting down filesystem May 22 05:27:29 lemaitre kernel: [1263002.295679] XFS (md3): Please umount the filesystem and rectify the problem(s) Filesystem offline here. Fsck run and remounted. From BATV+b91b25b766f10faca50b+3561+infradead.org+hch@bombadil.srs.infradead.org Fri May 24 05:02:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6202A7CBF for ; Fri, 24 May 2013 05:02:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4174C304039 for ; Fri, 24 May 2013 03:02:49 -0700 (PDT) X-ASG-Debug-ID: 1369389767-04cbb0049de8470001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 9jZZImCKa2PKfW9R (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Fri, 24 May 2013 03:02:48 -0700 (PDT) X-Barracuda-Envelope-From: BATV+b91b25b766f10faca50b+3561+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1Ufopi-00042A-Md; Fri, 24 May 2013 10:02:46 +0000 Date: Fri, 24 May 2013 06:02:46 -0400 From: Christoph Hellwig To: Dave Chinner Cc: xfs@oss.sgi.com, bpm@sgi.com Subject: Re: [PATCH 2/2] xfs: kill suid/sgid through the truncate path. Message-ID: <20130524100246.GA15373@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: kill suid/sgid through the truncate path. References: <1369312240-5925-1-git-send-email-david@fromorbit.com> <1369385888-17214-1-git-send-email-david@fromorbit.com> <1369385888-17214-3-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369385888-17214-3-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1369389767 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131877 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, May 24, 2013 at 06:58:08PM +1000, Dave Chinner wrote: > From: Dave Chinner > > XFS has failed to kill suid/sgid bits correctly when truncating > files of non-zero size since commit c4ed4243 ("xfs: split > xfs_setattr") introduced in the 3.1 kernel. Fix it. This should get a testcase in xfstests. > +xfs_setattr_mode( > + struct inode *inode, > + struct iattr *iattr) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + umode_t mode = iattr->ia_mode; > + > + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) > + mode &= ~S_ISGID; > + > + ip->i_d.di_mode &= S_IFMT; > + ip->i_d.di_mode |= mode & ~S_IFMT; > + > + inode->i_mode &= S_IFMT; > + inode->i_mode |= mode & ~S_IFMT; This function should have assers that the xfs_inode is locked exclusively and joined to a transaction. From BATV+b91b25b766f10faca50b+3561+infradead.org+hch@bombadil.srs.infradead.org Fri May 24 05:07:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DC9C17CBF for ; Fri, 24 May 2013 05:07:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id CB2368F80B6 for ; Fri, 24 May 2013 03:07:56 -0700 (PDT) X-ASG-Debug-ID: 1369390075-04cb6c473fe6960001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id pcD4PAobZlGgk6S3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Fri, 24 May 2013 03:07:56 -0700 (PDT) X-Barracuda-Envelope-From: BATV+b91b25b766f10faca50b+3561+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1Ufouh-0005P5-Cw; Fri, 24 May 2013 10:07:55 +0000 Date: Fri, 24 May 2013 06:07:55 -0400 From: Christoph Hellwig To: Dave Chinner Cc: bpm@sgi.com, xfs@oss.sgi.com Subject: Re: [PATCH 2/2] xfs: kill suid/sgid through the truncate path. Message-ID: <20130524100755.GA20767@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: kill suid/sgid through the truncate path. References: <1369312240-5925-1-git-send-email-david@fromorbit.com> <1369385888-17214-1-git-send-email-david@fromorbit.com> <1369385888-17214-3-git-send-email-david@fromorbit.com> <20130524100246.GA15373@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524100246.GA15373@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1369390075 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131877 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, May 24, 2013 at 06:02:46AM -0400, Christoph Hellwig wrote: > On Fri, May 24, 2013 at 06:58:08PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > XFS has failed to kill suid/sgid bits correctly when truncating > > files of non-zero size since commit c4ed4243 ("xfs: split > > xfs_setattr") introduced in the 3.1 kernel. Fix it. > > This should get a testcase in xfstests. Ok, saw the testcase in the other thread. From eflorac@intellique.com Fri May 24 08:10:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1F3B07CBF for ; Fri, 24 May 2013 08:10:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id F0BD0304067 for ; Fri, 24 May 2013 06:10:29 -0700 (PDT) X-ASG-Debug-ID: 1369401025-04bdf07816f9760001-NocioJ Received: from smtp4-g21.free.fr (smtp4-g21.free.fr [212.27.42.4]) by cuda.sgi.com with ESMTP id 5UBvIKVbUoyRm5XE for ; Fri, 24 May 2013 06:10:26 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.4 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp4-g21.free.fr (Postfix) with ESMTP id 6429C4C81FE; Fri, 24 May 2013 15:10:21 +0200 (CEST) Date: Fri, 24 May 2013 15:10:22 +0200 From: Emmanuel Florac To: Ole Tange Cc: xfs@oss.sgi.com Subject: Re: Intermittent crashes - xfs_repair finds no errors Message-ID: <20130524151022.160656e9@harpe.intellique.com> X-ASG-Orig-Subj: Re: Intermittent crashes - xfs_repair finds no errors In-Reply-To: References: Organization: Intellique X-Mailer: Claws Mail 3.9.1 (GTK+ 2.24.10; i486-slackware-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp4-g21.free.fr[212.27.42.4] X-Barracuda-Start-Time: 1369401025 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131889 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Fri, 24 May 2013 11:59:02 +0200 Ole Tange =E9crivait: > # uname -a > Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 > x86_64 GNU/Linux >=20 > May 13 11:43:31 lemaitre kernel: [507964.074856] XFS (md3): metadata > I/O error: block 0x18dcf8 ("xfs_trans_read_buf") error 5 buf count > 4096 What are the few previous lines of /var/log/messages before these? There could be some hardware related message, or some hint of corrupted metadata. --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From sandeen@sandeen.net Fri May 24 09:09:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9B9467CBF for ; Fri, 24 May 2013 09:09:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2D898AC004 for ; Fri, 24 May 2013 07:09:30 -0700 (PDT) X-ASG-Debug-ID: 1369404569-04cbb0049dfb650001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id tLha15amEjpYxA94 for ; Fri, 24 May 2013 07:09:29 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2322E63B97A6; Fri, 24 May 2013 09:09:29 -0500 (CDT) Message-ID: <519F7498.8020500@sandeen.net> Date: Fri, 24 May 2013 09:09:28 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Emmanuel Florac CC: Ole Tange , xfs@oss.sgi.com Subject: Re: Intermittent crashes - xfs_repair finds no errors References: <20130524151022.160656e9@harpe.intellique.com> X-ASG-Orig-Subj: Re: Intermittent crashes - xfs_repair finds no errors In-Reply-To: <20130524151022.160656e9@harpe.intellique.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369404569 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131892 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/24/13 8:10 AM, Emmanuel Florac wrote: > Le Fri, 24 May 2013 11:59:02 +0200 > Ole Tange écrivait: > >> # uname -a >> Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 >> x86_64 GNU/Linux >> >> May 13 11:43:31 lemaitre kernel: [507964.074856] XFS (md3): metadata >> I/O error: block 0x18dcf8 ("xfs_trans_read_buf") error 5 buf count >> 4096 "metadata IO error" kind of speaks for itself. And error 5 is EIO. It looks for all the world like you are getting read errors from the device. > What are the few previous lines of /var/log/messages before these? > There could be some hardware related message, or some hint of corrupted > metadata. Yep, full dmesg might be good. tracing on xfs_trans_read_buf_io and xfs_buf_read might give some insight if dmesg doesn't. -Eric From tzefrios@yen.gr Fri May 24 09:58:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE, T_KHOP_FOREIGN_CLICK autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BDD897CBF for ; Fri, 24 May 2013 09:58:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A0B3930404E for ; Fri, 24 May 2013 07:58:00 -0700 (PDT) X-ASG-Debug-ID: 1369407475-04cbb0049efed30001-w1Z2WR Received: from mail.hcg.gr (mail.hcg.gr [195.167.19.151]) by cuda.sgi.com with ESMTP id PnT90ZBgLEgqcgcR for ; Fri, 24 May 2013 07:57:55 -0700 (PDT) X-Barracuda-Envelope-From: tzefrios@yen.gr X-Barracuda-Apparent-Source-IP: 195.167.19.151 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.hcg.gr (Postfix) with ESMTP id C5E245E04A7; Fri, 24 May 2013 17:58:06 +0300 (EEST) X-Virus-Scanned: amavisd-new at hcg.gr Received: from mail.hcg.gr ([127.0.0.1]) by localhost (mail.hcg.gr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nPKMyTcory88; Fri, 24 May 2013 17:57:57 +0300 (EEST) Received: from mail.hcg.gr (mail.hcg.gr [195.167.19.151]) by mail.hcg.gr (Postfix) with ESMTP id 944235E04A2; Fri, 24 May 2013 17:56:49 +0300 (EEST) Date: Fri, 24 May 2013 17:56:49 +0300 (EEST) From: KBC Online Message-ID: <469986409.119750.1369407409375.JavaMail.root@mail.hcg.gr> Subject: lieve gewaardeerde klant MIME-Version: 1.0 X-ASG-Orig-Subj: lieve gewaardeerde klant Content-Type: multipart/alternative; boundary="----=_Part_119749_1119763471.1369407409366" X-Originating-IP: [46.246.123.197] X-Mailer: Zimbra 6.0.5_GA_2213.RHEL5_64 (zclient/6.0.5_GA_2213.RHEL5_64) To: undisclosed-recipients:; X-Barracuda-Connect: mail.hcg.gr[195.167.19.151] X-Barracuda-Start-Time: 1369407475 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA578_CH, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131896 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC7_SA578_CH Custom Rule SA578_CH ------=_Part_119749_1119763471.1369407409366 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable KBC-Online Belgi=C3=AB toont grote zorg en aandacht voor de veiligheid en= =20 integriteit van al onze bankrekeningen. Wij willen graag uw aandacht=20 vestigen op het volgende. Vorig jaar, KBC Belgi=C3=AB en vele andere=20 Belgische banken hebben een Internet fraude op grote schaal. Oplichters=20 hebben altijd hard gewerkt om uw bankrekeningen openen. Als=20 preventieve maatregel, KBC-Online lanceert een verbeterde Trusteer=20 Rapport beveiligingssoftware. Het is helemaal gratis en detecteert=20 verdachte in uw bankrekeningen online activiteiten. Verslag werkt naast=20 uw anti-virus en firewall software bestaat om maximale bescherming van=20 uw online banking gegevens te garanderen, zelfs als uw computer is=20 ge=C3=AFnfecteerd met een virus. Het lijkt erop dat uw online=20 bankrekening KBC nog niet is uitgerust met de nieuwe=20 beveiligingssoftware Trusteer Rapport. Slechts 5 minuten van uw tijd=20 nodig om te waken tegen identiteitsdiefstal online bankieren en online=20 bankieren fraude Om dit proces te beginnen, kunt u gebruik maken van de volgende link: klik = hier U wordt gecontacteerd door een vertegenwoordiger van de KBC-bank, na de=20 update om het hele proces te voltooien. Wanneer het proces voltooid is,=20 je blijft onze online bankieren te gebruiken, met de steun van een=20 systeem van verbeterde beveiliging. Wij willen u alvast bedanken voor uw medewerking. Hoogachtend,=20 Klantenservice. ------=_Part_119749_1119763471.1369407409366 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable KBC-Online Belgi=C3=AB toont = grote zorg en aandacht voor de veiligheid en=20 integriteit van al onze bankrekeningen. Wij willen graag uw aandacht=20 vestigen op het volgende. Vorig jaar, KBC Belgi=C3=AB en vele andere=20 Belgische banken hebben een Internet fraude op grote schaal. Oplichters=20 hebben altijd hard gewerkt om uw bankrekeningen openen.

Als=20 preventieve maatregel, KBC-Online lanceert een verbeterde Trusteer=20 Rapport beveiligingssoftware. Het is helemaal gratis en detecteert=20 verdachte in uw bankrekeningen online activiteiten. Verslag werkt naast=20 uw anti-virus en firewall software bestaat om maximale bescherming van=20 uw online banking gegevens te garanderen, zelfs als uw computer is=20 ge=C3=AFnfecteerd met een virus.

Het lijkt erop dat uw online=20 bankrekening KBC nog niet is uitgerust met de nieuwe=20 beveiligingssoftware Trusteer Rapport. Slechts 5 minuten van uw tijd=20 nodig om te waken tegen identiteitsdiefstal online bankieren en online=20 bankieren fraude

Om dit proces te beginnen, kunt u gebruik maken van= de volgende link: klik hier

U wordt gecontacteerd door een vertegenwoordiger van de KBC-bank, na de=20 update om het hele proces te voltooien. Wanneer het proces voltooid is,=20 je blijft onze online bankieren te gebruiken, met de steun van een=20 systeem van verbeterde beveiliging.

Wij willen u alvast bedanken voo= r uw medewerking.
Hoogachtend,
Klantenservice. ------=_Part_119749_1119763471.1369407409366-- From sandeen@sandeen.net Fri May 24 10:36:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 03E727CBF for ; Fri, 24 May 2013 10:36:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 97083AC002 for ; Fri, 24 May 2013 08:36:31 -0700 (PDT) X-ASG-Debug-ID: 1369409789-04bdf078161058f0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id agRJrSVaYBGiFkUE for ; Fri, 24 May 2013 08:36:29 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3795163D0FC8; Fri, 24 May 2013 10:36:29 -0500 (CDT) Message-ID: <519F88FC.30801@sandeen.net> Date: Fri, 24 May 2013 10:36:28 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , linux-btrfs , Koen De Wit Subject: [PATCH V2] xfstests: btrfs/309: sparse copy of a directory tree on btrfs References: <519E4734.40904@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: btrfs/309: sparse copy of a directory tree on btrfs In-Reply-To: <519E4734.40904@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369409789 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131898 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Koen De Wit # Tests file clone functionality of btrfs ("reflinks") on directory trees. # - Create directory and subdirectory, each having one file # - Create 2 recursive reflinked copies of the tree # - Modify the original files # - Modify one of the copies [sandeen: mostly cosmetic changes] Signed-off-by: Koen De Wit Signed-off-by: Eric Sandeen --- Originally submitted as xfstests: 298: sparse copy of a directory tree on btrfs V2: drop -F from $XFS_IO_PROG diff --git a/tests/btrfs/309 b/tests/btrfs/309 new file mode 100755 index 0000000..b3927ba --- /dev/null +++ b/tests/btrfs/309 @@ -0,0 +1,98 @@ +#! /bin/bash +# FS QA Test No. btrfs/309 +# +# Tests file clone functionality of btrfs ("reflinks") on directory trees. +# - Create directory and subdirectory, each having one file +# - Create 2 recursive reflinked copies of the tree +# - Modify the original files +# - Modify one of the copies +# +#----------------------------------------------------------------------- +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. common/rc +. common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux + +_require_xfs_io_fiemap +_require_cp_reflink + +TESTDIR1=$TEST_DIR/test-$seq +rm -rf $TESTDIR1 +mkdir $TESTDIR1 + +_checksum_files() { + for F in original/file1 original/subdir/file2 \ + copy1/file1 copy1/subdir/file2 \ + copy2/file1 copy2/subdir/file2 + do + md5sum $TESTDIR1/$F | _filter_test_dir + done +} + +rm -f $seqres.full + +mkdir $TESTDIR1/original +mkdir $TESTDIR1/original/subdir + +echo "Create the original files and reflink dirs" +$XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original/file1 >> $seqres.full 2>&1 +$XFS_IO_PROG -f -c 'pwrite -S 0x62 0 11000' $TESTDIR1/original/subdir/file2 >> $seqres.full 2>&1 +cp --recursive --reflink $TESTDIR1/original $TESTDIR1/copy1 +cp --recursive --reflink $TESTDIR1/copy1 $TESTDIR1/copy2 + +_verify_reflink $TESTDIR1/original/file1 $TESTDIR1/copy1/file1 +_verify_reflink $TESTDIR1/original/subdir/file2 $TESTDIR1/copy1/subdir/file2 +_verify_reflink $TESTDIR1/original/file1 $TESTDIR1/copy2/file1 +_verify_reflink $TESTDIR1/original/subdir/file2 $TESTDIR1/copy2/subdir/file2 + +echo "Original md5sums:" +_checksum_files + +echo "Overwrite original/file1 and original/subdir/file2 with new data" +$XFS_IO_PROG -c 'pwrite -S 0x63 0 13000' $TESTDIR1/original/file1 >> $seqres.full 2>&1 +$XFS_IO_PROG -c 'pwrite -S 0x64 5000 1000' $TESTDIR1/original/subdir/file2 >> $seqres.full 2>&1 +echo "md5sums now:" +_checksum_files + +echo "Overwrite copy1/file1 and copy1/subdir/file2 with new data" +$XFS_IO_PROG -c 'pwrite -S 0x65 0 9000' $TESTDIR1/copy1/file1 >> $seqres.full 2>&1 +$XFS_IO_PROG -c 'pwrite -S 0x66 5000 25000' $TESTDIR1/copy1/subdir/file2 >> $seqres.full 2>&1 +echo "md5sums now:" +_checksum_files + +# success, all done +status=0 +exit diff --git a/tests/btrfs/309.out b/tests/btrfs/309.out new file mode 100644 index 0000000..93197d8 --- /dev/null +++ b/tests/btrfs/309.out @@ -0,0 +1,25 @@ +QA output created by 309 +Create the original files and reflink dirs +Original md5sums: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/original/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/original/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy1/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy1/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 +Overwrite original/file1 and original/subdir/file2 with new data +md5sums now: +260f6785c0537fd12582dcae28a3c1a9 TEST_DIR/test-309/original/file1 +b8d91fb600f6f2191f2ba66665374860 TEST_DIR/test-309/original/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy1/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy1/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 +Overwrite copy1/file1 and copy1/subdir/file2 with new data +md5sums now: +260f6785c0537fd12582dcae28a3c1a9 TEST_DIR/test-309/original/file1 +b8d91fb600f6f2191f2ba66665374860 TEST_DIR/test-309/original/subdir/file2 +b20229a003e3985c4b0e6806abcd6642 TEST_DIR/test-309/copy1/file1 +b815b24069db14e0a3a07169fd563e93 TEST_DIR/test-309/copy1/subdir/file2 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-309/copy2/file1 +ca390545f0aedb54b808d6128c56a7dd TEST_DIR/test-309/copy2/subdir/file2 diff --git a/tests/btrfs/group b/tests/btrfs/group index f24628c..a5bd6aa 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -10,3 +10,4 @@ 284 auto 307 auto quick 308 auto quick reflink +309 auto quick reflink From sandeen@sandeen.net Fri May 24 12:34:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4CD8B7CBF for ; Fri, 24 May 2013 12:34:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2ECB2304053 for ; Fri, 24 May 2013 10:34:32 -0700 (PDT) X-ASG-Debug-ID: 1369416871-04cb6c474010a310001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id fKuiHvxGTnkCsLzI for ; Fri, 24 May 2013 10:34:31 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6D23F651AC26; Fri, 24 May 2013 12:34:31 -0500 (CDT) Message-ID: <519FA4A6.5050003@sandeen.net> Date: Fri, 24 May 2013 12:34:30 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , linux-btrfs , Koen De Wit Subject: [PATCH V2] xfstests: btrfs/306: simple sparse copy testcase for btrfs References: <519E4590.4080309@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: btrfs/306: simple sparse copy testcase for btrfs In-Reply-To: <519E4590.4080309@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369416871 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131906 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Koen De Wit # Tests file clone functionality of btrfs ("reflinks"): # - Reflink a file # - Reflink the reflinked file # - Modify the original file # - Modify the reflinked file [sandeen: add helpers, make several mostly-cosmetic changes to the original testcase] Signed-off-by: Koen De Wit Signed-off-by: Eric Sandeen --- Originally submitted as test 297 V2: move to test 306, remove "-F" from $XFS_IO_PROG diff --git a/common/rc b/common/rc index fe6bbfc..4560715 100644 --- a/common/rc +++ b/common/rc @@ -2098,6 +2098,27 @@ _require_dumpe2fs() fi } +_require_cp_reflink() +{ + cp --help | grep -q reflink || \ + _notrun "This test requires a cp with --reflink support." +} + +# Given 2 files, verify that they have the same mapping but different +# inodes - i.e. an undisturbed reflink +# Silent if so, make noise if not +_verify_reflink() +{ + # not a hard link or symlink? + cmp -s <(stat -c '%i' $1) <(stat -c '%i' $2) \ + && echo "$1 and $2 are not reflinks: same inode number" + + # same mapping? + diff -u <($XFS_IO_PROG -c "fiemap" $1 | grep -v $1) \ + <($XFS_IO_PROG -c "fiemap" $2 | grep -v $2) \ + || echo "$1 and $2 are not reflinks: different extents" +} + _create_loop_device() { file=$1 diff --git a/tests/btrfs/306 b/tests/btrfs/306 new file mode 100755 index 0000000..1bb8f02 --- /dev/null +++ b/tests/btrfs/306 @@ -0,0 +1,87 @@ +#! /bin/bash +# FS QA Test No. btrfs/306 +# +# Tests file clone functionality of btrfs ("reflinks"): +# - Reflink a file +# - Reflink the reflinked file +# - Modify the original file +# - Modify the reflinked file +# +#----------------------------------------------------------------------- +# Copyright (c) 2013, Oracle and/or its affiliates. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. common/rc +. common/filter + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux + +_require_xfs_io_fiemap +_require_cp_reflink + +TESTDIR1=$TEST_DIR/test-$seq +rm -rf $TESTDIR1 +mkdir $TESTDIR1 + +_checksum_files() { + for F in original copy1 copy2 + do + md5sum $TESTDIR1/$F | _filter_test_dir + done +} + +rm -f $seqres.full + +echo "Create the original file and reflink to copy1, copy2" +$XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $TESTDIR1/original >> $seqres.full 2>&1 +cp --reflink $TESTDIR1/original $TESTDIR1/copy1 +cp --reflink $TESTDIR1/copy1 $TESTDIR1/copy2 +_verify_reflink $TESTDIR1/original $TESTDIR1/copy1 +_verify_reflink $TESTDIR1/original $TESTDIR1/copy2 +echo "Original md5sums:" +_checksum_files + +echo "Overwrite original file with new data" +$XFS_IO_PROG -c 'pwrite -S 0x62 0 9000' $TESTDIR1/original >> $seqres.full 2>&1 +echo "md5sums after overwriting original:" +_checksum_files + +echo "Overwrite copy1 with different new data" +$XFS_IO_PROG -c 'pwrite -S 0x63 0 9000' $TESTDIR1/copy1 >> $seqres.full 2>&1 +echo "md5sums after overwriting copy1:" +_checksum_files + +# success, all done +status=0 +exit diff --git a/tests/btrfs/306.out b/tests/btrfs/306.out new file mode 100644 index 0000000..7bccf08 --- /dev/null +++ b/tests/btrfs/306.out @@ -0,0 +1,16 @@ +QA output created by 306 +Create the original file and reflink to copy1, copy2 +Original md5sums: +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-306/original +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-306/copy1 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-306/copy2 +Overwrite original file with new data +md5sums after overwriting original: +4a847a25439532bf48b68c9e9536ed5b TEST_DIR/test-306/original +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-306/copy1 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-306/copy2 +Overwrite copy1 with different new data +md5sums after overwriting copy1: +4a847a25439532bf48b68c9e9536ed5b TEST_DIR/test-306/original +e271cd47d9f62ebc96cb4e67ae4d16db TEST_DIR/test-306/copy1 +42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-306/copy2 diff --git a/tests/btrfs/group b/tests/btrfs/group index bc6c256..f24628c 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -9,3 +9,4 @@ 276 auto rw metadata 284 auto +306 auto quick reflink 307 auto quick From bpm@oss.sgi.com Fri May 24 13:24:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 12F977F37; Fri, 24 May 2013 13:24:07 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. for-linus-v3.10-rc1-2-14696-gad1858d X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 X-Git-Newrev: ad1858d77771172e08016890f0eb2faedec3ecee Message-Id: <20130524182407.12F977F37@oss.sgi.com> Date: Fri, 24 May 2013 13:24:06 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated ad1858d xfs: rework remote attr CRCs d4c712b xfs: fully initialise temp leaf in xfs_attr3_leaf_compact 8517de2 xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance 6863ef8 xfs: correctly map remote attr buffers during removal 4af3644 xfs: remote attribute tail zeroing does too much 913e96b xfs: remote attribute read too short 90253cf xfs: remote attribute allocation may be contiguous f648167 xfs: avoid nesting transactions in xfs_qm_scall_setqlim() from e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ad1858d77771172e08016890f0eb2faedec3ecee Author: Dave Chinner Date: Tue May 21 18:02:08 2013 +1000 xfs: rework remote attr CRCs Note: this changes the on-disk remote attribute format. I assert that this is OK to do as CRCs are marked experimental and the first kernel it is included in has not yet reached release yet. Further, the userspace utilities are still evolving and so anyone using this stuff right now is a developer or tester using volatile filesystems for testing this feature. Hence changing the format right now to save longer term pain is the right thing to do. The fundamental change is to move from a header per extent in the attribute to a header per filesytem block in the attribute. This means there are more header blocks and the parsing of the attribute data is slightly more complex, but it has the advantage that we always know the size of the attribute on disk based on the length of the data it contains. This is where the header-per-extent method has problems. We don't know the size of the attribute on disk without first knowing how many extents are used to hold it. And we can't tell from a mapping lookup, either, because remote attributes can be allocated contiguously with other attribute blocks and so there is no obvious way of determining the actual size of the atribute on disk short of walking and mapping buffers. The problem with this approach is that if we map a buffer incorrectly (e.g. we make the last buffer for the attribute data too long), we then get buffer cache lookup failure when we map it correctly. i.e. we get a size mismatch on lookup. This is not necessarily fatal, but it's a cache coherency problem that can lead to returning the wrong data to userspace or writing the wrong data to disk. And debug kernels will assert fail if this occurs. I found lots of niggly little problems trying to fix this issue on a 4k block size filesystem, finally getting it to pass with lots of fixes. The thing is, 1024 byte filesystems still failed, and it was getting really complex handling all the corner cases that were showing up. And there were clearly more that I hadn't found yet. It is complex, fragile code, and if we don't fix it now, it will be complex, fragile code forever more. Hence the simple fix is to add a header to each filesystem block. This gives us the same relationship between the attribute data length and the number of blocks on disk as we have without CRCs - it's a linear mapping and doesn't require us to guess anything. It is simple to implement, too - the remote block count calculated at lookup time can be used by the remote attribute set/get/remove code without modification for both CRC and non-CRC filesystems. The world becomes sane again. Because the copy-in and copy-out now need to iterate over each filesystem block, I moved them into helper functions so we separate the block mapping and buffer manupulations from the attribute data and CRC header manipulations. The code becomes much clearer as a result, and it is a lot easier to understand and debug. It also appears to be much more robust - once it worked on 4k block size filesystems, it has worked without failure on 1k block size filesystems, too. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit d4c712bcf26a25c2b67c90e44e0b74c7993b5334 Author: Dave Chinner Date: Tue May 21 18:02:06 2013 +1000 xfs: fully initialise temp leaf in xfs_attr3_leaf_compact xfs_attr3_leaf_compact() uses a temporary buffer for compacting the the entries in a leaf. It copies the the original buffer into the temporary buffer, then zeros the original buffer completely. It then copies the entries back into the original buffer. However, the original buffer has not been correctly initialised, and so the movement of the entries goes horribly wrong. Make sure the zeroed destination buffer is fully initialised, and once we've set up the destination incore header appropriately, write is back to the buffer before starting to move entries around. While debugging this, the _d/_s prefixes weren't sufficient to remind me what buffer was what, so rename then all _src/_dst. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 8517de2a81da830f5d90da66b4799f4040c76dc9 Author: Dave Chinner Date: Tue May 21 18:02:05 2013 +1000 xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining the entries in two leaves when the destination leaf requires compaction. The temporary buffer ends up being copied back over the original destination buffer, so the header in the temporary buffer needs to contain all the information that is in the destination buffer. To make sure the temporary buffer is fully initialised, once we've set up the temporary incore header appropriately, write is back to the temporary buffer before starting to move entries around. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 6863ef8449f1908c19f43db572e4474f24a1e9da Author: Dave Chinner Date: Tue May 21 18:02:04 2013 +1000 xfs: correctly map remote attr buffers during removal If we don't map the buffers correctly (same as for get/set operations) then the incore buffer lookup will fail. If a block number matches but a length is wrong, then debug kernels will ASSERT fail in _xfs_buf_find() due to the length mismatch. Ensure that we map the buffers correctly by basing the length of the buffer on the attribute data length rather than the remote block count. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 4af3644c9a53eb2f1ecf69cc53576561b64be4c6 Author: Dave Chinner Date: Tue May 21 18:02:03 2013 +1000 xfs: remote attribute tail zeroing does too much When an attribute data does not fill then entire remote block, we zero the remaining part of the buffer. This, however, needs to take into account that the buffer has a header, and so the offset where zeroing starts and the length of zeroing need to take this into account. Otherwise we end up with zeros over the end of the attribute value when CRCs are enabled. While there, make sure we only ask to map an extent that covers the remaining range of the attribute, rather than asking every time for the full length of remote data. If the remote attribute blocks are contiguous with other parts of the attribute tree, it will map those blocks as well and we can potentially zero them incorrectly. We can also get buffer size mistmatches when trying to read or remove the remote attribute, and this can lead to not finding the correct buffer when looking it up in cache. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 913e96bc292e1bb248854686c79d6545ef3ee720 Author: Dave Chinner Date: Tue May 21 18:02:02 2013 +1000 xfs: remote attribute read too short Reading a maximally size remote attribute fails when CRCs are enabled with this verification error: XFS (vdb): remote attribute header does not match required off/len/owner) There are two reasons for this, the first being that the length of the buffer being read is determined from the args->rmtblkcnt which doesn't take into account CRC headers. Hence the mapped length ends up being too short and so we need to calculate it directly from the value length. The second is that the byte count of valid data within a buffer is capped by the length of the data and so doesn't take into account that the buffer might be longer due to headers. Hence we need to calculate the data space in the buffer first before calculating the actual byte count of data. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 90253cf142469a40f89f989904abf0a1e500e1a6 Author: Dave Chinner Date: Tue May 21 18:02:01 2013 +1000 xfs: remote attribute allocation may be contiguous When CRCs are enabled, there may be multiple allocations made if the headers cause a length overflow. This, however, does not mean that the number of headers required increases, as the second and subsequent extents may be contiguous with the previous extent. Hence when we map the extents to write the attribute data, we may end up with less extents than allocations made. Hence the assertion that we consume the number of headers we calculated in the allocation loop is incorrect and needs to be removed. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit f648167f3ac79018c210112508c732ea9bf67c7b Author: Dave Chinner Date: Tue May 21 18:02:00 2013 +1000 xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_attr_leaf.c | 71 ++++++--- fs/xfs/xfs_attr_remote.c | 408 +++++++++++++++++++++++++++++------------------ fs/xfs/xfs_attr_remote.h | 10 ++ fs/xfs/xfs_buf.c | 1 + fs/xfs/xfs_qm_syscalls.c | 40 +++-- 5 files changed, 330 insertions(+), 200 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Fri May 24 13:24:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 7A12229E03; Fri, 24 May 2013 13:24:18 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. for-linus-v3.10-rc1-2-14696-gad1858d X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 X-Git-Newrev: ad1858d77771172e08016890f0eb2faedec3ecee Message-Id: <20130524182418.7A12229E03@oss.sgi.com> Date: Fri, 24 May 2013 13:24:17 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated ad1858d xfs: rework remote attr CRCs d4c712b xfs: fully initialise temp leaf in xfs_attr3_leaf_compact 8517de2 xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance 6863ef8 xfs: correctly map remote attr buffers during removal 4af3644 xfs: remote attribute tail zeroing does too much 913e96b xfs: remote attribute read too short 90253cf xfs: remote attribute allocation may be contiguous f648167 xfs: avoid nesting transactions in xfs_qm_scall_setqlim() from e461fcb194172b3f709e0b478d2ac1bdac7ab9a3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ad1858d77771172e08016890f0eb2faedec3ecee Author: Dave Chinner Date: Tue May 21 18:02:08 2013 +1000 xfs: rework remote attr CRCs Note: this changes the on-disk remote attribute format. I assert that this is OK to do as CRCs are marked experimental and the first kernel it is included in has not yet reached release yet. Further, the userspace utilities are still evolving and so anyone using this stuff right now is a developer or tester using volatile filesystems for testing this feature. Hence changing the format right now to save longer term pain is the right thing to do. The fundamental change is to move from a header per extent in the attribute to a header per filesytem block in the attribute. This means there are more header blocks and the parsing of the attribute data is slightly more complex, but it has the advantage that we always know the size of the attribute on disk based on the length of the data it contains. This is where the header-per-extent method has problems. We don't know the size of the attribute on disk without first knowing how many extents are used to hold it. And we can't tell from a mapping lookup, either, because remote attributes can be allocated contiguously with other attribute blocks and so there is no obvious way of determining the actual size of the atribute on disk short of walking and mapping buffers. The problem with this approach is that if we map a buffer incorrectly (e.g. we make the last buffer for the attribute data too long), we then get buffer cache lookup failure when we map it correctly. i.e. we get a size mismatch on lookup. This is not necessarily fatal, but it's a cache coherency problem that can lead to returning the wrong data to userspace or writing the wrong data to disk. And debug kernels will assert fail if this occurs. I found lots of niggly little problems trying to fix this issue on a 4k block size filesystem, finally getting it to pass with lots of fixes. The thing is, 1024 byte filesystems still failed, and it was getting really complex handling all the corner cases that were showing up. And there were clearly more that I hadn't found yet. It is complex, fragile code, and if we don't fix it now, it will be complex, fragile code forever more. Hence the simple fix is to add a header to each filesystem block. This gives us the same relationship between the attribute data length and the number of blocks on disk as we have without CRCs - it's a linear mapping and doesn't require us to guess anything. It is simple to implement, too - the remote block count calculated at lookup time can be used by the remote attribute set/get/remove code without modification for both CRC and non-CRC filesystems. The world becomes sane again. Because the copy-in and copy-out now need to iterate over each filesystem block, I moved them into helper functions so we separate the block mapping and buffer manupulations from the attribute data and CRC header manipulations. The code becomes much clearer as a result, and it is a lot easier to understand and debug. It also appears to be much more robust - once it worked on 4k block size filesystems, it has worked without failure on 1k block size filesystems, too. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit d4c712bcf26a25c2b67c90e44e0b74c7993b5334 Author: Dave Chinner Date: Tue May 21 18:02:06 2013 +1000 xfs: fully initialise temp leaf in xfs_attr3_leaf_compact xfs_attr3_leaf_compact() uses a temporary buffer for compacting the the entries in a leaf. It copies the the original buffer into the temporary buffer, then zeros the original buffer completely. It then copies the entries back into the original buffer. However, the original buffer has not been correctly initialised, and so the movement of the entries goes horribly wrong. Make sure the zeroed destination buffer is fully initialised, and once we've set up the destination incore header appropriately, write is back to the buffer before starting to move entries around. While debugging this, the _d/_s prefixes weren't sufficient to remind me what buffer was what, so rename then all _src/_dst. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 8517de2a81da830f5d90da66b4799f4040c76dc9 Author: Dave Chinner Date: Tue May 21 18:02:05 2013 +1000 xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance xfs_attr3_leaf_unbalance() uses a temporary buffer for recombining the entries in two leaves when the destination leaf requires compaction. The temporary buffer ends up being copied back over the original destination buffer, so the header in the temporary buffer needs to contain all the information that is in the destination buffer. To make sure the temporary buffer is fully initialised, once we've set up the temporary incore header appropriately, write is back to the temporary buffer before starting to move entries around. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 6863ef8449f1908c19f43db572e4474f24a1e9da Author: Dave Chinner Date: Tue May 21 18:02:04 2013 +1000 xfs: correctly map remote attr buffers during removal If we don't map the buffers correctly (same as for get/set operations) then the incore buffer lookup will fail. If a block number matches but a length is wrong, then debug kernels will ASSERT fail in _xfs_buf_find() due to the length mismatch. Ensure that we map the buffers correctly by basing the length of the buffer on the attribute data length rather than the remote block count. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 4af3644c9a53eb2f1ecf69cc53576561b64be4c6 Author: Dave Chinner Date: Tue May 21 18:02:03 2013 +1000 xfs: remote attribute tail zeroing does too much When an attribute data does not fill then entire remote block, we zero the remaining part of the buffer. This, however, needs to take into account that the buffer has a header, and so the offset where zeroing starts and the length of zeroing need to take this into account. Otherwise we end up with zeros over the end of the attribute value when CRCs are enabled. While there, make sure we only ask to map an extent that covers the remaining range of the attribute, rather than asking every time for the full length of remote data. If the remote attribute blocks are contiguous with other parts of the attribute tree, it will map those blocks as well and we can potentially zero them incorrectly. We can also get buffer size mistmatches when trying to read or remove the remote attribute, and this can lead to not finding the correct buffer when looking it up in cache. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 913e96bc292e1bb248854686c79d6545ef3ee720 Author: Dave Chinner Date: Tue May 21 18:02:02 2013 +1000 xfs: remote attribute read too short Reading a maximally size remote attribute fails when CRCs are enabled with this verification error: XFS (vdb): remote attribute header does not match required off/len/owner) There are two reasons for this, the first being that the length of the buffer being read is determined from the args->rmtblkcnt which doesn't take into account CRC headers. Hence the mapped length ends up being too short and so we need to calculate it directly from the value length. The second is that the byte count of valid data within a buffer is capped by the length of the data and so doesn't take into account that the buffer might be longer due to headers. Hence we need to calculate the data space in the buffer first before calculating the actual byte count of data. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit 90253cf142469a40f89f989904abf0a1e500e1a6 Author: Dave Chinner Date: Tue May 21 18:02:01 2013 +1000 xfs: remote attribute allocation may be contiguous When CRCs are enabled, there may be multiple allocations made if the headers cause a length overflow. This, however, does not mean that the number of headers required increases, as the second and subsequent extents may be contiguous with the previous extent. Hence when we map the extents to write the attribute data, we may end up with less extents than allocations made. Hence the assertion that we consume the number of headers we calculated in the allocation loop is incorrect and needs to be removed. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers commit f648167f3ac79018c210112508c732ea9bf67c7b Author: Dave Chinner Date: Tue May 21 18:02:00 2013 +1000 xfs: avoid nesting transactions in xfs_qm_scall_setqlim() Lockdep reports: ============================================= [ INFO: possible recursive locking detected ] 3.9.0+ #3 Not tainted --------------------------------------------- setquota/28368 is trying to acquire lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 but task is already holding lock: (sb_internal){++++.?}, at: [] xfs_trans_alloc+0x26/0x50 from xfs_qm_scall_setqlim()->xfs_dqread() when a dquot needs to be allocated. xfs_qm_scall_setqlim() is starting a transaction and then not passing it into xfs_qm_dqet() and so it starts it's own transaction when allocating the dquot. Splat! Fix this by not allocating the dquot in xfs_qm_scall_setqlim() inside the setqlim transaction. This requires getting the dquot first (and allocating it if necessary) then dropping and relocking the dquot before joining it to the setqlim transaction. Reported-by: Michael L. Semon Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_attr_leaf.c | 71 ++++++--- fs/xfs/xfs_attr_remote.c | 408 +++++++++++++++++++++++++++++------------------ fs/xfs/xfs_attr_remote.h | 10 ++ fs/xfs/xfs_buf.c | 1 + fs/xfs/xfs_qm_syscalls.c | 40 +++-- 5 files changed, 330 insertions(+), 200 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Fri May 24 13:29:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AE6277CBF for ; Fri, 24 May 2013 13:29:41 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2FBC7AC007; Fri, 24 May 2013 11:29:38 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id B4747500B50; Fri, 24 May 2013 13:29:37 -0500 (CDT) Date: Fri, 24 May 2013 13:29:37 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 00/11] xfs: fixes for 3.10-rc3 Message-ID: <20130524182937.GY19505@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:01:59PM +1000, Dave Chinner wrote: > This is my current kernel bug fix patch series. I've updated it > against a current xfsdev tree, and contains all the fixes mentioned > in the "fixes for 3.10-rc2 (updated)" thread. The first 7 patches > are patches from that series. The last 4 are new patches. > > The first new patch stops CRC enabled filesystems from spamming the > log. It currently emits an "Experimental" warning ever time the > superblock is written, which is typically every 30s. > > The second path ("rework remote attr CRCs") is the changes I > mentioned in the "fixes for 3.10-rc2 (updated)" thread. The code is > far more robust as a result of these changes, and I think we really > need to change the format as done in this patch. Once we have > decided on the way forward, I'll port this to userspace. > > The third patch fixes a remote symlink problem - I didn't hit this > until I'd redone the remote attr CRCs and the 1k block size > filesystem testing made it passed the attribute tests it was failing > on. > > Finally, the last patch is another on-disk format change - one that > removes the 25 entry limit on ACLs. It doesn't invalidate anything > that is already on disk, just allows ACLs on v5 superblock > filesystems to store more than 25 ACLs in an xattr. In fact, it > allows (65536 - 4) / 12 = 5461 entries to be stored in a single > ACL, so I don't see anyone running out on v5 superblocks.... Pulled in patches 3-7, and 9. Still reviewing the others. From davej@redhat.com Fri May 24 15:17:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 48FAC7CBF for ; Fri, 24 May 2013 15:17:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 293018F8033 for ; Fri, 24 May 2013 13:17:04 -0700 (PDT) X-ASG-Debug-ID: 1369426624-04bdf0781611c3f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KusK1Kx1WNgTc7lR for ; Fri, 24 May 2013 13:17:04 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4OKH2F5022224 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 May 2013 16:17:02 -0400 Received: from gelk.kernelslacker.org (ovpn-113-91.phx2.redhat.com [10.3.113.91]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4OKH0Mh030790 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 24 May 2013 16:17:01 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4OKGwlx010069; Fri, 24 May 2013 16:16:58 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4OKGuoG010068; Fri, 24 May 2013 16:16:56 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Fri, 24 May 2013 16:16:55 -0400 From: Dave Jones To: Dave Chinner Cc: Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130524201655.GA23086@redhat.com> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) Mail-Followup-To: Dave Jones , Dave Chinner , Linux Kernel , xfs@oss.sgi.com References: <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> <20130524015219.GA28486@redhat.com> <20130524030300.GA30760@redhat.com> <20130524080300.GI24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524080300.GI24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369426624 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, May 24, 2013 at 06:03:00PM +1000, Dave Chinner wrote: > xfstest generic/193 is *supposed* to test behaviour of suid/sgid bits > and clearing them is various situations. > > You know what I'm about to say, don't you? The test doesn't test > what it thinks it is testing. it puts the destination file in root > directory of the xfstests harness, not in the filesystems being > tested. awesome, two bugs for the price of one! > So, on all my machines, it runs on ext3 filesystems, never on the > ext4, btrfs, xfs, etc filesystems that I'm actually testing. > > That's beside the point, because it doesn't test truncate behaviour. > But at least I know now why my attempts to reproduce the problem > didn't work... > > Right, patch below should fix the problem. Haven't seen anything out of the ordinary since I applied that, so I'd call it good. > What a frustrating bug. Now, where's my bottle of scotch? heh, enjoy the weekend. Dave From bpm@sgi.com Fri May 24 15:36:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4C2EF7CBF for ; Fri, 24 May 2013 15:36:37 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id BEAEEAC004; Fri, 24 May 2013 13:36:33 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 677FC500B50; Fri, 24 May 2013 15:36:33 -0500 (CDT) Date: Fri, 24 May 2013 15:36:33 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/11] xfs: fix incorrect remote symlink block count Message-ID: <20130524203633.GW20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-11-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369123330-9579-11-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 21, 2013 at 06:02:09PM +1000, Dave Chinner wrote: > From: Dave Chinner > > When CRCs are enabled, the number of blocks needed to hold a remote > symlink on a 1k block size filesystem may be 2 instead of 1. The > transaction reservation for the allocated bloks was not taking this blocks > into account and only allocating one block. hence when trying to H fixed. > read or invalidate such symlinks, we are mapping a hole where there > should be a block and things go bad at that point. > > Fix the reservation to use the correct block count, clean up the > block count calculation similar to the remote attribute calculation, > and add a debug guard to detect when we don't write the entire > symlink to disk. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_symlink.c | 20 ++++++-------------- > 1 file changed, 6 insertions(+), 14 deletions(-) > > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 5f234389..195a403 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -56,16 +56,9 @@ xfs_symlink_blocks( > struct xfs_mount *mp, > int pathlen) > { > - int fsblocks = 0; > - int len = pathlen; > + int buflen = XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > > - do { > - fsblocks++; > - len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > - } while (len > 0); > - > - ASSERT(fsblocks <= XFS_SYMLINK_MAPS); > - return fsblocks; > + return (pathlen + buflen - 1) / buflen; Nice to get rid of that loop. > } > > static int > @@ -405,7 +398,7 @@ xfs_symlink( > if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) > fs_blocks = 0; > else > - fs_blocks = XFS_B_TO_FSB(mp, pathlen); > + fs_blocks = xfs_symlink_blocks(mp, pathlen); > resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); > error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, > XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); > @@ -512,7 +505,7 @@ xfs_symlink( > cur_chunk = target_path; > offset = 0; > for (n = 0; n < nmaps; n++) { > - char *buf; > + char *buf; > > d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); > byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); > @@ -525,9 +518,7 @@ xfs_symlink( > bp->b_ops = &xfs_symlink_buf_ops; > > byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); > - if (pathlen < byte_cnt) { > - byte_cnt = pathlen; > - } > + byte_cnt = min(byte_cnt, pathlen); The min is necessary due since we can have up to three extents in here, according to the comment above the define for XFS_SYMLINK_MAPS. So byte_cnt can be less than pathlen. Looks good. Reviewed-by: Ben Myers From bpm@sgi.com Fri May 24 15:39:10 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id ACC247CBF for ; Fri, 24 May 2013 15:39:10 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 919278F8033; Fri, 24 May 2013 13:39:10 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 5D50E500B50; Fri, 24 May 2013 15:39:10 -0500 (CDT) Date: Fri, 24 May 2013 15:39:10 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/11] xfs: fix incorrect remote symlink block count Message-ID: <20130524203910.GX20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-11-git-send-email-david@fromorbit.com> <20130524203633.GW20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524203633.GW20028@sgi.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Fri, May 24, 2013 at 03:36:33PM -0500, Ben Myers wrote: > On Tue, May 21, 2013 at 06:02:09PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > When CRCs are enabled, the number of blocks needed to hold a remote > > symlink on a 1k block size filesystem may be 2 instead of 1. The > > transaction reservation for the allocated bloks was not taking this > blocks > > into account and only allocating one block. hence when trying to > H > > fixed. > > > read or invalidate such symlinks, we are mapping a hole where there > > should be a block and things go bad at that point. > > > > Fix the reservation to use the correct block count, clean up the > > block count calculation similar to the remote attribute calculation, > > and add a debug guard to detect when we don't write the entire > > symlink to disk. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_symlink.c | 20 ++++++-------------- > > 1 file changed, 6 insertions(+), 14 deletions(-) > > > > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > > index 5f234389..195a403 100644 > > --- a/fs/xfs/xfs_symlink.c > > +++ b/fs/xfs/xfs_symlink.c > > @@ -56,16 +56,9 @@ xfs_symlink_blocks( > > struct xfs_mount *mp, > > int pathlen) > > { > > - int fsblocks = 0; > > - int len = pathlen; > > + int buflen = XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > > > > - do { > > - fsblocks++; > > - len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > > - } while (len > 0); > > - > > - ASSERT(fsblocks <= XFS_SYMLINK_MAPS); > > - return fsblocks; > > + return (pathlen + buflen - 1) / buflen; > > Nice to get rid of that loop. > > > } > > > > static int > > @@ -405,7 +398,7 @@ xfs_symlink( > > if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) > > fs_blocks = 0; > > else > > - fs_blocks = XFS_B_TO_FSB(mp, pathlen); > > + fs_blocks = xfs_symlink_blocks(mp, pathlen); > > resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); > > error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, > > XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); > > @@ -512,7 +505,7 @@ xfs_symlink( > > cur_chunk = target_path; > > offset = 0; > > for (n = 0; n < nmaps; n++) { > > - char *buf; > > + char *buf; > > > > d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); > > byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); > > @@ -525,9 +518,7 @@ xfs_symlink( > > bp->b_ops = &xfs_symlink_buf_ops; > > > > byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); > > - if (pathlen < byte_cnt) { > > - byte_cnt = pathlen; > > - } > > + byte_cnt = min(byte_cnt, pathlen); > > The min is necessary due since we can have up to three extents in here, > according to the comment above the define for XFS_SYMLINK_MAPS. So byte_cnt > can be less than pathlen. D'oh. I wanted to point out that it looks like this issue with 'min' here should be causing problems with symlinks on non-crc enabled filesystems. -Ben From bpm@oss.sgi.com Fri May 24 16:40:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 7CA267F37; Fri, 24 May 2013 16:40:58 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. for-linus-v3.10-rc1-2-14687-g7ae0778 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 X-Git-Newrev: 7ae077802c9f12959a81fa1a16c1ec2842dbae05 Message-Id: <20130524214058.7CA267F37@oss.sgi.com> Date: Fri, 24 May 2013 16:40:57 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated 7ae0778 xfs: remote attribute lookups require the value length cf257ab xfs: xfs_attr_shortform_allfit() does not handle attr3 format. 7ced60c xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC b17cb36 xfs: fix missing KM_NOFS tags to keep lockdep happy 509e708 xfs: Don't reference the EFI after it is freed 7031d0e xfs: fix rounding in xfs_free_file_space 480d746 xfs: fix sub-page blocksize data integrity writes 8769e07 Merge tag 'for-linus-v3.10-rc1-2' of git://oss.sgi.com/xfs/xfs a27bb33 aio: don't include aio.h in sched.h c8d8566 Merge tag 'for-linus-v3.10-rc1' of git://oss.sgi.com/xfs/xfs 8d71db4 lift sb_start_write/sb_end_write out of ->aio_write() 10b3866 Merge tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs e001873 xfs: ensure we capture IO errors correctly 3325bee xfs: fix xfs_iomap_eof_prealloc_initial_size type 83cdadd xfs: fix potential infinite loop in xfs_iomap_prealloc_size() 7f78e03 fs: Limit sys_mount to only request filesystem modules. from 7dfbcbefad4b24d9822d04dbd7b5dd5c3fd45076 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7ae077802c9f12959a81fa1a16c1ec2842dbae05 Author: Dave Chinner Date: Mon May 20 09:51:16 2013 +1000 xfs: remote attribute lookups require the value length When reading a remote attribute, to correctly calculate the length of the data buffer for CRC enable filesystems, we need to know the length of the attribute data. We get this information when we look up the attribute, but we don't store it in the args structure along with the other remote attr information we get from the lookup. Add this information to the args structure so we can use it appropriately. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers (cherry picked from commit e461fcb194172b3f709e0b478d2ac1bdac7ab9a3) commit cf257abf02709dba3cc745d950f144ce49432b4f Author: Dave Chinner Date: Mon May 20 09:51:14 2013 +1000 xfs: xfs_attr_shortform_allfit() does not handle attr3 format. xfstests generic/117 fails with: XFS: Assertion failed: leaf->hdr.info.magic == cpu_to_be16(XFS_ATTR_LEAF_MAGIC) indicating a function that does not handle the attr3 format correctly. Fix it. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers (cherry picked from commit b38958d715316031fe9ea0cc6c22043072a55f49) commit 7ced60cae46cb37273a03c196e6f473b089bd8e1 Author: Dave Chinner Date: Mon May 20 09:51:13 2013 +1000 xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers (cherry picked from commit 72916fb8cbcf0c2928f56cdc2fbe8c7bf5517758) commit b17cb364dbbbf65add79f1610599d01bcb6851f9 Author: Dave Chinner Date: Mon May 20 09:51:12 2013 +1000 xfs: fix missing KM_NOFS tags to keep lockdep happy There are several places where we use KM_SLEEP allocation contexts and use the fact that they are called from transaction context to add KM_NOFS where appropriate. Unfortunately, there are several places where the code makes this assumption but can be called from outside transaction context but with filesystem locks held. These places need explicit KM_NOFS annotations to avoid lockdep complaining about reclaim contexts. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers (cherry picked from commit ac14876cf9255175bf3bdad645bf8aa2b8fb2d7c) commit 509e708a8929c5b75a16c985c03db5329e09cad4 Author: Dave Chinner Date: Mon May 20 09:51:10 2013 +1000 xfs: Don't reference the EFI after it is freed Checking the EFI for whether it is being released from recovery after we've already released the known active reference is a mistake worthy of a brown paper bag. Fix the (now) obvious use after free that it can cause. Reported-by: Dave Jones Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers (cherry picked from commit 52c24ad39ff02d7bd73c92eb0c926fb44984a41d) commit 7031d0e1c46e2b1c869458233dd216cb72af41b2 Author: Dave Chinner Date: Mon May 20 09:51:09 2013 +1000 xfs: fix rounding in xfs_free_file_space The offset passed into xfs_free_file_space() needs to be rounded down to a certain size, but the rounding mask is built by a 32 bit variable. Hence the mask will always mask off the upper 32 bits of the offset and lead to incorrect writeback and invalidation ranges. This is not actually exposed as a bug because we writeback and invalidate from the rounded offset to the end of the file, and hence the offset we are actually punching a hole out of will always be covered by the code. This needs fixing, however, if we ever want to use exact ranges for writeback/invalidation here... Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers (cherry picked from commit 28ca489c63e9aceed8801d2f82d731b3c9aa50f5) commit 480d7467e4aaa3dc38088baf56bc3eb3599f5d26 Author: Dave Chinner Date: Mon May 20 09:51:08 2013 +1000 xfs: fix sub-page blocksize data integrity writes FSX on 512 byte block size filesystems has been failing for some time with corrupted data. The fault dates back to the change in the writeback data integrity algorithm that uses a mark-and-sweep approach to avoid data writeback livelocks. Unfortunately, a side effect of this mark-and-sweep approach is that each page will only be written once for a data integrity sync, and there is a condition in writeback in XFS where a page may require two writeback attempts to be fully written. As a result of the high level change, we now only get a partial page writeback during the integrity sync because the first pass through writeback clears the mark left on the page index to tell writeback that the page needs writeback.... The cause is writing a partial page in the clustering code. This can happen when a mapping boundary falls in the middle of a page - we end up writing back the first part of the page that the mapping covers, but then never revisit the page to have the remainder mapped and written. The fix is simple - if the mapping boundary falls inside a page, then simple abort clustering without touching the page. This means that the next ->writepage entry that write_cache_pages() will make is the page we aborted on, and xfs_vm_writepage() will map all sections of the page correctly. This behaviour is also optimal for non-data integrity writes, as it results in contiguous sequential writeback of the file rather than missing small holes and having to write them a "random" writes in a future pass. With this fix, all the fsx tests in xfstests now pass on a 512 byte block size filesystem on a 4k page machine. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers (cherry picked from commit 49b137cbbcc836ef231866c137d24f42c42bb483) ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 20 ++++++++++++++++++++ fs/xfs/xfs_attr_leaf.c | 27 +++++++++++++++------------ fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_da_btree.c | 7 +++++-- fs/xfs/xfs_dir2_leaf.c | 2 +- fs/xfs/xfs_extfree_item.c | 5 +++-- fs/xfs/xfs_file.c | 4 +--- fs/xfs/xfs_log_cil.c | 2 +- fs/xfs/xfs_super.c | 1 + fs/xfs/xfs_vnodeops.c | 4 ++-- 10 files changed, 50 insertions(+), 24 deletions(-) hooks/post-receive -- XFS development tree From sekharan@us.ibm.com Fri May 24 16:41:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8D0507F4E for ; Fri, 24 May 2013 16:41:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6D65F8F8039 for ; Fri, 24 May 2013 14:41:18 -0700 (PDT) X-ASG-Debug-ID: 1369431677-04cbb0049e121340001-NocioJ Received: from e36.co.us.ibm.com (e36.co.us.ibm.com [32.97.110.154]) by cuda.sgi.com with ESMTP id wcIuwKmh7JnGpCiT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 14:41:17 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.154 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from /spool/local by e36.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 15:41:16 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e36.co.us.ibm.com (192.168.1.136) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 15:41:14 -0600 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 0D3CD19D803E for ; Fri, 24 May 2013 15:41:06 -0600 (MDT) Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OLfCMM133746 for ; Fri, 24 May 2013 15:41:12 -0600 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OLfBvk024066 for ; Fri, 24 May 2013 15:41:12 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OLfBZ5024055; Fri, 24 May 2013 15:41:11 -0600 Subject: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone From: Chandra Seetharaman X-ASG-Orig-Subj: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: XFS mailing list In-Reply-To: <20130523234214.GG24543@dastard> References: <1369264363.10223.2994.camel@chandra-dt.ibm.com> <20130522234129.GN29466@dastard> <1369332542.10223.5271.camel@chandra-dt.ibm.com> <20130523234214.GG24543@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 16:41:11 -0500 Message-ID: <1369431671.9551.919.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052421-7606-0000-0000-00000BC6EDD9 X-Barracuda-Connect: e36.co.us.ibm.com[32.97.110.154] X-Barracuda-Start-Time: 1369431677 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, 2013-05-24 at 09:42 +1000, Dave Chinner wrote: > On Thu, May 23, 2013 at 01:09:02PM -0500, Chandra Seetharaman wrote: > > On Thu, 2013-05-23 at 09:41 +1000, Dave Chinner wrote: > > > On Wed, May 22, 2013 at 06:12:43PM -0500, Chandra Seetharaman wrote: > > > > Hello, > > > > > > > > While testing and rearranging my pquota/gquota code, I stumbled on a > > > > xfs_shutdown() during a mount. But the mount just hung. > > > > > > > > I debugged and found that it is in a code path where > > > > &log->l_cilp->xc_ctx_lock is first acquired in read mode and some levels > > > > down the same semaphore is being acquired in write mode causing a > > > > deadlock. > > > > > > > > This is the stack: > > > > xfs_log_commit_cil -> acquires &log->l_cilp->xc_ctx_lock in read mode > > > > xlog_print_tic_res > > > > xfs_force_shutdown > > > > xfs_log_force_umount > > > > xlog_cil_force > > > > xlog_cil_force_lsn > > > > xlog_cil_push_foreground > > > > xlog_cil_push - tries to acquire same semaphore in write mode > > > > > > Which means you had a transaction reservation overrun. Is it > > > reproducable? iDo you have the output from xlog_print_tic_res()? > > > Because: > > > > Here it is: > > > > May 23 10:48:52 test46 kernel: [ 77.500728] XFS (sdh8): xlog_write: reservation summary: > > May 23 10:48:52 test46 kernel: [ 77.500728] trans type = QM_SBCHANGE (26) > > May 23 10:48:52 test46 kernel: [ 77.500728] unit res = 2740 bytes > > May 23 10:48:52 test46 kernel: [ 77.500728] current res = -48 bytes > > May 23 10:48:52 test46 kernel: [ 77.500728] total reg = 0 bytes (o/flow = 0 bytes) > > May 23 10:48:52 test46 kernel: [ 77.500728] ophdrs = 0 (ophdr space = 0 bytes) > > May 23 10:48:52 test46 kernel: [ 77.500728] ophdr + reg = 0 bytes > > May 23 10:48:52 test46 kernel: [ 77.500728] num regions = 0 > > May 23 10:48:52 test46 kernel: [ 77.500728] > > > > Yes. I can readily reproduce the problem, but it is with my mangled up > > patchsets :). There is a small change that makes this problem reproduce > > consistently. > > Interesting. That implies that the CIL stole the reservation for the > checkpoint headers from this reservation, and then it overran by 48 > bytes. An increase in the number of quotas should not affect this. > > What is the xfs_info output on the filesystem that is triggering > this? I have the same set of patches, but it is not happening any more :(. I will keep trying. > > Cheers, > > Dave. From sekharan@us.ibm.com Fri May 24 16:45:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5FAFC7CBF for ; Fri, 24 May 2013 16:45:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id E36A4AC002 for ; Fri, 24 May 2013 14:45:03 -0700 (PDT) X-ASG-Debug-ID: 1369431902-04cb6c474111c770001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id q18o6wig0D0Drp6d (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 14:45:03 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 17:45:02 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from d01dlp01.pok.ibm.com (9.56.250.166) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 17:44:59 -0400 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 8A47638C805C for ; Fri, 24 May 2013 17:44:58 -0400 (EDT) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OLixtW292274 for ; Fri, 24 May 2013 17:44:59 -0400 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OLiwPw009869 for ; Fri, 24 May 2013 17:44:58 -0400 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OLiw8j009856; Fri, 24 May 2013 17:44:58 -0400 Subject: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone From: Chandra Seetharaman X-ASG-Orig-Subj: Re: deadlock with &log->l_cilp->xc_ctx_lock semaphone Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: XFS mailing list In-Reply-To: <20130522234129.GN29466@dastard> References: <1369264363.10223.2994.camel@chandra-dt.ibm.com> <20130522234129.GN29466@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 16:44:57 -0500 Message-ID: <1369431897.9551.932.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052421-7182-0000-0000-000006EACA65 X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1369431902 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, 2013-05-23 at 09:41 +1000, Dave Chinner wrote: > On Wed, May 22, 2013 at 06:12:43PM -0500, Chandra Seetharaman wrote: > > Hello, > > > > While testing and rearranging my pquota/gquota code, I stumbled on a > > xfs_shutdown() during a mount. But the mount just hung. > > > > I debugged and found that it is in a code path where > > &log->l_cilp->xc_ctx_lock is first acquired in read mode and some levels > > down the same semaphore is being acquired in write mode causing a > > deadlock. > > > > This is the stack: > > xfs_log_commit_cil -> acquires &log->l_cilp->xc_ctx_lock in read mode > > xlog_print_tic_res > > xfs_force_shutdown > > xfs_log_force_umount > > xlog_cil_force > > xlog_cil_force_lsn > > xlog_cil_push_foreground > > xlog_cil_push - tries to acquire same semaphore in write mode > > Which means you had a transaction reservation overrun. Is it > reproducable? iDo you have the output from xlog_print_tic_res()? > Because: > > > xfs_trans_commit+0x79/0x270 [xfs] > > xfs_qm_write_sb_changes+0x61/0x90 [xfs] > > xfs_qm_mount_quotas+0x82/0x180 [xfs] > > xfs_mountfs+0x5f6/0x6b0 [xfs] > > This transaction only modifies the superblock, and it has a buffer > reservation for a superblock sized buffer, and hence should never > overrun. > > IOWs, I'm ifar more concerned about the fact there was a > transaction overrun than they was a hang in the path that handles > the overrun. The fact this hang has been there since 2.6.35 tells > you how rare transactions overruns are.... > > FWIW, the fix for the hang is to make xlog_print_tic_res() return an > error and have the caller handle the shutdown. Can I wait to call shutdown till I finish with the read mode semaphore ? > > Cheers, > > Dave. From sekharan@us.ibm.com Fri May 24 16:46:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E5D267CBF for ; Fri, 24 May 2013 16:46:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D1E22304039 for ; Fri, 24 May 2013 14:46:07 -0700 (PDT) X-ASG-Debug-ID: 1369431966-04cbb0049e121920001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id 8jivOAZLDP2pf52F (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 14:46:06 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 15:46:06 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 15:46:04 -0600 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id CAC7C6E803A for ; Fri, 24 May 2013 17:45:29 -0400 (EDT) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OLjXbV285606 for ; Fri, 24 May 2013 17:45:33 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OLjWNb028687 for ; Fri, 24 May 2013 18:45:33 -0300 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OLjV8B028634; Fri, 24 May 2013 18:45:32 -0300 Subject: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 1/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: xfs@oss.sgi.com In-Reply-To: <20130517025515.GM24635@dastard> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-2-git-send-email-sekharan@us.ibm.com> <20130517025515.GM24635@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 16:45:31 -0500 Message-ID: <1369431931.9551.933.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052421-3620-0000-0000-000002AFCEDD X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1369431966 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, 2013-05-17 at 12:55 +1000, Dave Chinner wrote: > On Fri, May 10, 2013 at 04:21:25PM -0500, Chandra Seetharaman wrote: > > Remove all incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, > > start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts for GQUOTA and > > PQUOTA respectively. > > > > On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. > > > > Read and write of the superblock does the conversion from *OQUOTA* > > to *[PG]QUOTA*. > > > > Signed-off-by: Chandra Seetharaman > > Reviewed-by: Dave Chinner > > --- > > fs/xfs/xfs_mount.c | 41 +++++++++++++++++++++++++++++++++++++++++ > > fs/xfs/xfs_qm.c | 9 ++++++--- > > fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++------------------ > > fs/xfs/xfs_quota.h | 42 ++++++++++++++++++++++++++++-------------- > > fs/xfs/xfs_quotaops.c | 6 ++++-- > > fs/xfs/xfs_super.c | 16 ++++++++-------- > > fs/xfs/xfs_trans_dquot.c | 4 ++-- > > 7 files changed, 110 insertions(+), 47 deletions(-) > > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > index f6bfbd7..1b79906 100644 > > --- a/fs/xfs/xfs_mount.c > > +++ b/fs/xfs/xfs_mount.c > > @@ -564,6 +564,8 @@ xfs_sb_from_disk( > > struct xfs_sb *to, > > xfs_dsb_t *from) > > { > > + bool force_quota_check = false; > > + > > to->sb_magicnum = be32_to_cpu(from->sb_magicnum); > > to->sb_blocksize = be32_to_cpu(from->sb_blocksize); > > to->sb_dblocks = be64_to_cpu(from->sb_dblocks); > > @@ -599,6 +601,21 @@ xfs_sb_from_disk( > > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > > to->sb_qflags = be16_to_cpu(from->sb_qflags); > > + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > > + (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > > + "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > > + force_quota_check = true; > > + } > > We can't do these quota check manipulations to the superblock quota > flags during disk->incore translation anymore - there is more than > one place that converts the superblock from on-disk to incore format > (e.g. the verification callbacks) and so emitting this message when > we are *writing* the superblock is not good. > > Also, if the XFS_PQUOTA_CHKD/XFS_PQUOTA_ENFD flags are set and > the superblock is not a V5 superblock, then I think we should refuse > to mount the filesystem because that is an invalid state - those > flags should only be set now on a V5 superblock, and never at any > other time. Hence this specific check should probably be moved to > xfs_mount_validate_sb() and cause an EFSCORRUPTED return if it > fails. That will catch something setting the flags incorrectly (i.e. > at superblock write) as well as prevent mounting in this situation. > > I know, this is different to what I've said in the past, but the > on-disk format checking is now a lot stricter and so I think that if > the filesystem is in some kind of wierd state we should just throw > an error and let the administrator work out how this problem > happened and how to resolve it. > will do. > > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > > + > > This translation of the quota flags needs to be external to > this function, and then only called in the mount path where we are > initially setting up the in-core superblock (i.e. in xfs_readsb()) > because that is the only place where the incore values are > permanently stored. > > > @@ -636,11 +656,30 @@ xfs_sb_to_disk( > > xfs_sb_field_t f; > > int first; > > int size; > > + __uint16_t qflags = from->sb_qflags; > > > > ASSERT(fields); > > if (!fields) > > return; > > > > + if (fields & XFS_SB_QFLAGS) { > > + /* > > + * The in-core version of sb_qflags do not have > > + * XFS_OQUOTA_* flags, whereas the on-disk version > > + * does. So, convert incore XFS_{PG}QUOTA_* flags > > + * to on-disk XFS_OQUOTA_* flags. > > + */ > > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > > + > > + if (from->sb_qflags & > > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > > + qflags |= XFS_OQUOTA_ENFD; > > + if (from->sb_qflags & > > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > > + qflags |= XFS_OQUOTA_CHKD; > > + } > > Given that we have a new superblock version, we can write the new > XFS_[PG]QUOTA_CHKD/XFS_[PG]QUOTA_ENFD flags directly into the > sb_qflags knowing that we can't get an older kernel to interpret > these new fields because they'll fail the superblck version test. So > that would mean we only need to do this translation for filesystems > for non-v5 superblock filesystems. > > Ah, I see that in a later patch you introduce > xfs_sb_version_has_pquota() and modify this code path to do > something similar, and it becomes rather complex and nasty. > > OK, I know this is a bit of work, but can you introduce > xfs_sb_version_has_pquota() in this patch (as we already have the > pquota inode defined in the on-disk format) as: > > static inline int xfs_sb_version_haspquota(xfs_sb_t *sbp) > { > return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5; > } > > and make these OQUOTA flag translations dependent on this not being > set right from the start? I am starting to use pquotino only in patch 3, and hence introduced the above helper in that patch. IMO, it would be helpful w.r.t readability and patch coherency, if I leave the introduction in patch 3. > > Also, given how nasty this manipulation ends up, can you push it out > into a function that is called from xfs_sb_to_disk(). That way > xfs_sb_to_disk() doesn't end up mostly being 70% quota field > manipulation code... I will talk about this in patch 3. > > > > /* > > + * Start differentiating group quota and project quota in-core > > + * using distinct flags, instead of using the combined OQUOTA flags. > > + * > > + * Conversion to and from the combined OQUOTA flag (if necessary) > > + * is done only in xfs_sb_{to,from}_disk() > > + */ > > +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ > > +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ > > +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ > > +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ > > These become new on-disk fields for xfs_sb_version_haspquota() > filesystems, so they are not specifically in-core values. will fix. > > Other than these to/from disk changes, the patch looks fine. > > Cheers, > > Dave. From sekharan@us.ibm.com Fri May 24 16:57:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 328647CBF for ; Fri, 24 May 2013 16:57:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 10E7B304039 for ; Fri, 24 May 2013 14:57:12 -0700 (PDT) X-ASG-Debug-ID: 1369432630-04cb6c473f11d410001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id sMHJCPozvG3uAvbm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 14:57:10 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 17:57:10 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from d01dlp01.pok.ibm.com (9.56.250.166) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 17:57:07 -0400 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 547DA38C8045 for ; Fri, 24 May 2013 17:57:06 -0400 (EDT) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OLv6HN301740 for ; Fri, 24 May 2013 17:57:06 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OLv6vD030118 for ; Fri, 24 May 2013 18:57:06 -0300 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OLv5Lj030108; Fri, 24 May 2013 18:57:06 -0300 Subject: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 2/5] xfs: Add pquota fields where gquota is used. Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: xfs@oss.sgi.com In-Reply-To: <20130517042303.GN24635@dastard> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-3-git-send-email-sekharan@us.ibm.com> <20130517042303.GN24635@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 16:57:05 -0500 Message-ID: <1369432625.9551.946.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052421-7182-0000-0000-000006EAD0EF X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1369432630 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, 2013-05-17 at 14:23 +1000, Dave Chinner wrote: > On Fri, May 10, 2013 at 04:21:26PM -0500, Chandra Seetharaman wrote: > > Add project quota changes to all the places where group quota field > > is used: > > * add separate project quota members into various structures > > * split project quota and group quotas so that instead of overriding > > the group quota members incore, the new project quota members are > > used instead > > * get rid of usage of the OQUOTA flag incore, in favor of separate > > * group > > and project quota flags. > > * add a project dquot argument to various functions. > > > > No externally visible interfaces changed. > > Looks pretty good. Some relatively minor changes below. > > > @@ -568,6 +567,17 @@ xfs_qm_dqrepair( > > return 0; > > } > > > > +struct xfs_inode * > > +xfs_dq_to_quota_inode(struct xfs_dquot *dqp) > > +{ > > + if (XFS_QM_ISUDQ(dqp)) > > + return dqp->q_mount->m_quotainfo->qi_uquotaip; > > + if (XFS_QM_ISGDQ(dqp)) > > + return dqp->q_mount->m_quotainfo->qi_gquotaip; > > + ASSERT(XFS_QM_ISPDQ(dqp)); > > + return dqp->q_mount->m_quotainfo->qi_pquotaip; > > +} > > Consolidate this with xfs_dquot_tree() as a static inline function, > I think. Let's try and keep all these little helpers together so > they are easy to find ;) will do. > > > + > > /* > > * Maps a dquot to the buffer containing its on-disk version. > > * This returns a ptr to the buffer containing the on-disk dquot > > @@ -584,7 +594,7 @@ xfs_qm_dqtobp( > > xfs_bmbt_irec_t map; > > int nmaps = 1, error; > > xfs_buf_t *bp; > > - xfs_inode_t *quotip = XFS_DQ_TO_QIP(dqp); > > + xfs_inode_t *quotip = xfs_dq_to_quota_inode(dqp); > > convert to struct xfs_inode a the same time.... will do > > > @@ -52,7 +51,8 @@ typedef struct xfs_dquot { > > @@ -144,9 +146,6 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > > #define XFS_QM_ISPDQ(dqp) ((dqp)->dq_flags & XFS_DQ_PROJ) > > #define XFS_QM_ISGDQ(dqp) ((dqp)->dq_flags & XFS_DQ_GROUP) > > #define XFS_DQ_TO_QINF(dqp) ((dqp)->q_mount->m_quotainfo) > > -#define XFS_DQ_TO_QIP(dqp) (XFS_QM_ISUDQ(dqp) ? \ > > - XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ > > - XFS_DQ_TO_QINF(dqp)->qi_gquotaip) > > XFS_DQ_TO_QINF can go away, too. sure > > > --- a/fs/xfs/xfs_ioctl.c > > +++ b/fs/xfs/xfs_ioctl.c > > @@ -928,7 +928,7 @@ xfs_ioctl_setattr( > > struct xfs_trans *tp; > > unsigned int lock_flags = 0; > > struct xfs_dquot *udqp = NULL; > > - struct xfs_dquot *gdqp = NULL; > > + struct xfs_dquot *pdqp = NULL; > > struct xfs_dquot *olddquot = NULL; > > int code; > > > > @@ -957,7 +957,7 @@ xfs_ioctl_setattr( > > if (XFS_IS_QUOTA_ON(mp) && (mask & FSX_PROJID)) { > > code = xfs_qm_vop_dqalloc(ip, ip->i_d.di_uid, > > ip->i_d.di_gid, fa->fsx_projid, > > - XFS_QMOPT_PQUOTA, &udqp, &gdqp); > > + XFS_QMOPT_PQUOTA, &udqp, NULL, &pdqp); > > We're only passing in XFS_QMOPT_PQUOTA, so we do not need to pass in > uid, gid, udqp or gdqp here.... > > Can you add a comment here that this may cause user/group quotas > to be allocated, but we don't need it here in this function because > we are only specifically changing the project quota via a chown > operation. > > Indeed, the only reason a user quota is passed in is to make use of > the dquot hint that the udq might hold that points to the other > dquots on the inode.... will do > > > if (code) > > return code; > > } > > @@ -994,8 +994,8 @@ xfs_ioctl_setattr( > > XFS_IS_PQUOTA_ON(mp) && > > xfs_get_projid(ip) != fa->fsx_projid) { > > ASSERT(tp); > > - code = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, > > - capable(CAP_FOWNER) ? > > + code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, > > + pdqp, capable(CAP_FOWNER) ? > > XFS_QMOPT_FORCE_RES : 0); > > @@ -1113,7 +1113,7 @@ xfs_ioctl_setattr( > > if (xfs_get_projid(ip) != fa->fsx_projid) { > > if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { > > olddquot = xfs_qm_vop_chown(tp, ip, > > - &ip->i_gdquot, gdqp); > > + &ip->i_pdquot, pdqp); > > xfs_qm_vop_chown() is only called on one dquot at a time, so it can > only exchange one dquot at a time. and udqp is not used for hints, > so it looks to me like udqp and gdqp are wholly unnecessary in this > function.... Did not fully understand this comment. Can you please elaborate ? > > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > > index d82efaa..7c54ea4 100644 > > --- a/fs/xfs/xfs_iops.c > > +++ b/fs/xfs/xfs_iops.c > > @@ -517,7 +517,7 @@ xfs_setattr_nonsize( > > ASSERT(udqp == NULL); > > ASSERT(gdqp == NULL); > > error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip), > > - qflags, &udqp, &gdqp); > > + qflags, &udqp, &gdqp, NULL); > > Why is there no project quota support here, even though we pass in a > project ID? I know the answer, but please add a comment so that a > couple of years down the track I don't need to go remind myself of > why.... Not clear what you are expecting here. > > > /* > > - * Given a udquot and gdquot, attach a ptr to the group dquot in the > > + * Given a udquot and gdquot, attach a ptr to the group/project dquot in the > > * udquot as a hint for future lookups. > > */ > > STATIC void > > -xfs_qm_dqattach_grouphint( > > - xfs_dquot_t *udq, > > - xfs_dquot_t *gdq) > > +xfs_qm_dqattach_grouphint(xfs_inode_t *ip, int type) > > Wrong format for the function header And it's not longer just for > the group dquot, so I'd rename just to xfs_qm_dqattach_hint. i.e: will fix. > > STATIC void > xfs_qm_dqattach_hint( > struct xfs_inode *ip, > int type) > > > { > > - xfs_dquot_t *tmp; > > + struct xfs_dquot **dqhint; > > + struct xfs_dquot *gpdq; > > not a group dquot. so perhaps just call it dqp? sure. > > > @@ -1395,19 +1453,27 @@ xfs_qm_init_quotainos( > > if (XFS_IS_UQUOTA_ON(mp) && > > mp->m_sb.sb_uquotino != NULLFSINO) { > > ASSERT(mp->m_sb.sb_uquotino > 0); > > - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > > - 0, 0, &uip))) > > + error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, > > + 0, 0, &uip); > > + if (error) > > return XFS_ERROR(error); > > } > > - if (XFS_IS_OQUOTA_ON(mp) && > > + if (XFS_IS_GQUOTA_ON(mp) && > > mp->m_sb.sb_gquotino != NULLFSINO) { > > ASSERT(mp->m_sb.sb_gquotino > 0); > > - if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > > - 0, 0, &gip))) { > > - if (uip) > > - IRELE(uip); > > - return XFS_ERROR(error); > > - } > > + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > > + 0, 0, &gip); > > + if (error) > > + goto error_rele; > > + } > > + /* Use sb_gquotino for now */ > > + if (XFS_IS_PQUOTA_ON(mp) && > > + mp->m_sb.sb_gquotino != NULLFSINO) { > > + ASSERT(mp->m_sb.sb_gquotino > 0); > > + error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, > > + 0, 0, &pip); > > + if (error) > > + goto error_rele; > > There is no need for this trickery, right? All that is needed is: > Will be taken care of in the next patch. > > > qino = xfs_sb_version_has_pquota(&mp->m_sb) ? > mp->m_sb.sb_pquotino : > mp->m_sb.sb_gquotino; > > And the correct on-disk inode is read.... > The object of this patch is to replace all gquota with pquota stuff. I am not using the pquotino or xfs_sb_version_has_pquota() until patch 3. If I get the change forward, I have to merge patch 3 and part of this patch into patch 1, which adds up lots of work. The way the patches are split now, IMO, is easy to follow and works independently. > > > @@ -1804,15 +1896,21 @@ xfs_qm_vop_chown( > > */ > > int > > xfs_qm_vop_chown_reserve( > > - xfs_trans_t *tp, > > - xfs_inode_t *ip, > > - xfs_dquot_t *udqp, > > - xfs_dquot_t *gdqp, > > - uint flags) > > + xfs_trans_t *tp, > > + xfs_inode_t *ip, > > struct xfs_trans, struct xfs_inode. > > > + struct xfs_dquot *udqp, > > + struct xfs_dquot *gdqp, > > + struct xfs_dquot *pdqp, > > + uint flags) > > { > > xfs_mount_t *mp = ip->i_mount; > > uint delblks, blkflags, prjflags = 0; > > - xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; > > + struct xfs_dquot *unresudq = NULL; > > + struct xfs_dquot *unresgdq = NULL; > > + struct xfs_dquot *unrespdq = NULL; > > + struct xfs_dquot *delblksudq = NULL; > > + struct xfs_dquot *delblksgdq = NULL; > > + struct xfs_dquot *delblkspdq = NULL; > > int error; > > You may as well line up the other 3 declarations, and make is a > struct xfs_mount.... > > .... and I just realised that looking through this code reviewing > the xfs_ioctl_setattr() changes that I'd not read the existing > code correctly. > > Why not? becuse unresudq and unresgdq are not very different. The > classic case of the brain not really seeing the difference between > single letters inside a larger word, and that's where the single > letter difference in the variables are. i.e: this phenomenon: > > http://www.ecenglish.com/learnenglish/lessons/can-you-read > > I can read that mess as fast as if it were spelt correctly, hence > the importance of the first/last letter of variable names... > > So, can you rename these variables: > > udq_unres > gdq_unres > pdq_unres > udq_delblks > gdq_delblks > pdq_delblks > > so it's a little more obvious to my easily tricked brain that they > are different.... > Why not :) > > > @@ -1935,13 +2039,18 @@ xfs_qm_vop_create_dqattach( > > } > > if (gdqp) { > > ASSERT(ip->i_gdquot == NULL); > > - ASSERT(XFS_IS_OQUOTA_ON(mp)); > > - ASSERT((XFS_IS_GQUOTA_ON(mp) ? > > - ip->i_d.di_gid : xfs_get_projid(ip)) == > > - be32_to_cpu(gdqp->q_core.d_id)); > > - > > + ASSERT(XFS_IS_GQUOTA_ON(mp)); > > + ASSERT(ip->i_d.di_gid == be32_to_cpu(gdqp->q_core.d_id)); > > ip->i_gdquot = xfs_qm_dqhold(gdqp); > > xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); > > } > > + if (pdqp) { > > + ASSERT(ip->i_pdquot == NULL); > > + ASSERT(XFS_IS_PQUOTA_ON(mp)); > > + ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); > > + > > + ip->i_pdquot = xfs_qm_dqhold(pdqp); > > + xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1); > > + } > > } > > Something this just triggered. All transaction reservations that > reserve space for dquots need to be upped from 2 to 3 dquots. Can you elaborate please. > > > -extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); > > -extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, > > - xfs_dquot_t *, xfs_dquot_t *, long, long, uint); > > -extern void xfs_trans_dqjoin(xfs_trans_t *, xfs_dquot_t *); > > -extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); > > +extern void xfs_trans_mod_dquot(xfs_trans_t *, struct xfs_dquot *, uint, long); > > +extern void xfs_trans_dqjoin(xfs_trans_t *, struct xfs_dquot *); > > +extern void xfs_trans_log_dquot(xfs_trans_t *, struct xfs_dquot *); > > Remove the typedefs at the same time. sure > > > > /* > > - * We keep the usr and grp dquots separately so that locking will be easier > > - * to do at commit time. All transactions that we know of at this point > > + * We keep the usr, grp, and prj dquots separately so that locking will be > > + * easier to do at commit time. All transactions that we know of at this point > > * affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value. > > */ > > +enum { > > + XFS_QM_TRANS_USR = 0, > > + XFS_QM_TRANS_GRP, > > + XFS_QM_TRANS_PROJ, > > + XFS_QM_TRANS_DQTYPES > > +}; > > #define XFS_QM_TRANS_MAXDQS 2 > > -typedef struct xfs_dquot_acct { > > - xfs_dqtrx_t dqa_usrdquots[XFS_QM_TRANS_MAXDQS]; > > - xfs_dqtrx_t dqa_grpdquots[XFS_QM_TRANS_MAXDQS]; > > -} xfs_dquot_acct_t; > > +struct xfs_dquot_acct { > > + struct xfs_dqtrx dqs[XFS_QM_TRANS_DQTYPES][XFS_QM_TRANS_MAXDQS]; > > +}; > > > > /* > > * Users are allowed to have a usage exceeding their softlimit for > > diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c > > index 2d02eac..72a4fdd 100644 > > --- a/fs/xfs/xfs_qm_bhv.c > > +++ b/fs/xfs/xfs_qm_bhv.c > > @@ -115,7 +115,7 @@ xfs_qm_newmount( > > (pquotaondisk && !XFS_IS_PQUOTA_ON(mp)) || > > (!pquotaondisk && XFS_IS_PQUOTA_ON(mp)) || > > (gquotaondisk && !XFS_IS_GQUOTA_ON(mp)) || > > - (!gquotaondisk && XFS_IS_OQUOTA_ON(mp))) && > > + (!gquotaondisk && XFS_IS_GQUOTA_ON(mp))) && > > xfs_dev_is_read_only(mp, "changing quota state")) { > > xfs_warn(mp, "please mount with%s%s%s%s.", > > (!quotaondisk ? "out quota" : ""), > > Shouldn't this hunk be in the first patch? No, the object of the first patch is to just handle on disk .*OQUOTA.* flags in the sb_flags. In this patch I replace the rest of OQUOTA > > > > index 1501f4f..cd0d133 100644 > > --- a/fs/xfs/xfs_vnodeops.c > > +++ b/fs/xfs/xfs_vnodeops.c > > @@ -498,6 +498,7 @@ xfs_create( > > prid_t prid; > > struct xfs_dquot *udqp = NULL; > > struct xfs_dquot *gdqp = NULL; > > + struct xfs_dquot *pdqp = NULL; > > uint resblks; > > uint log_res; > > uint log_count; > > @@ -516,7 +517,7 @@ xfs_create( > > * Make sure that we have allocated dquot(s) on disk. > > */ > > error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, > > - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); > > + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); > > break that into two lines. > > XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, > &udqp, &gdqp, &pdqp); > will do > Cheers, > > Dave. From sekharan@us.ibm.com Fri May 24 17:09:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 542C429DF8 for ; Fri, 24 May 2013 17:09:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 42CB630404E for ; Fri, 24 May 2013 15:09:09 -0700 (PDT) X-ASG-Debug-ID: 1369433347-04cbb0049d122fb0001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id HtY29KGjWNgC0Fn8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 15:09:08 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 18:09:07 -0400 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.182.139] Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 18:09:06 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id ADE3C6E803A for ; Fri, 24 May 2013 18:09:02 -0400 (EDT) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OM96bL286306 for ; Fri, 24 May 2013 18:09:06 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OM94pe000718 for ; Fri, 24 May 2013 19:09:05 -0300 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OM94p0000696; Fri, 24 May 2013 19:09:04 -0300 Subject: Re: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 3/5] xfs: Start using pquotaino from the superblock Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: xfs@oss.sgi.com In-Reply-To: <20130517044604.GO24635@dastard> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-4-git-send-email-sekharan@us.ibm.com> <20130517044604.GO24635@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 17:09:03 -0500 Message-ID: <1369433343.9551.958.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052422-7182-0000-0000-000006EADC39 X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1369433348 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, 2013-05-17 at 14:46 +1000, Dave Chinner wrote: > On Fri, May 10, 2013 at 04:21:27PM -0500, Chandra Seetharaman wrote: > > Define a macro to check if the superblock has pquotino. > > > > Keep backward compatibilty by alowing mount of older superblock > > with no separate pquota inode. > .... > > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > > index 1b79906..233f88e 100644 > > --- a/fs/xfs/xfs_mount.c > > +++ b/fs/xfs/xfs_mount.c > > @@ -601,21 +601,6 @@ xfs_sb_from_disk( > > to->sb_uquotino = be64_to_cpu(from->sb_uquotino); > > to->sb_gquotino = be64_to_cpu(from->sb_gquotino); > > to->sb_qflags = be16_to_cpu(from->sb_qflags); > > - if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && > > - (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > > - XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD))) { > > - xfs_notice(NULL, "Super block has XFS_OQUOTA bits along with " > > - "XFS_PQUOTA and/or XFS_GQUOTA bits. Quota check forced.\n"); > > - force_quota_check = true; > > - } > > - if (to->sb_qflags & XFS_OQUOTA_ENFD) > > - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > - XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > > - if (to->sb_qflags & XFS_OQUOTA_CHKD) > > - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > - XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > > - to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > > - > > to->sb_flags = from->sb_flags; > > to->sb_shared_vn = from->sb_shared_vn; > > to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); > > @@ -636,6 +621,44 @@ xfs_sb_from_disk( > > to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > > to->sb_lsn = be64_to_cpu(from->sb_lsn); > > > > + if (xfs_sb_version_has_pquota(to)) { > > + if (to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { > > + xfs_notice(NULL, "Super block has XFS_OQUOTA bits " > > + "with version PQUOTINO. Quota check forced.\n"); > > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > > + force_quota_check = true; > > + } > > + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > > + } else { > > + if (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { > > + xfs_notice(NULL, "Super block has XFS_[G|P]UOTA " > > + "bits in version older than PQUOTINO. " > > + "Quota check forced.\n"); > > + > > + to->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | > > + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD); > > + force_quota_check = true; > > + } > > + > > + /* > > + * On disk superblock qflags uses XFS_OQUOTA.* to support > > + * either PQUOTA or GQUOTA. But, in memory qflags uses > > + * XFS_PQUOTA.* or XFS_GQUOTA.* depending on which quota > > + * is used. > > + * Following block translates XFS_OQUOTA.* to either > > + * GQUOTA or PQUOTA. > > + */ > > + if (to->sb_qflags & XFS_OQUOTA_ENFD) > > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; > > + if (to->sb_qflags & XFS_OQUOTA_CHKD) > > + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? > > + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; > > + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); > > + > > + } > > + > > if (force_quota_check) > > to->sb_qflags &= ~(XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD); > > } > > This all gets restructured here - as per my previous comments, this > probably should all be in xfs_readsb(), not here. > > > @@ -657,27 +680,51 @@ xfs_sb_to_disk( > > int first; > > int size; > > __uint16_t qflags = from->sb_qflags; > > + xfs_ino_t gquotino = from->sb_gquotino; > > > > ASSERT(fields); > > if (!fields) > > return; > > > > - if (fields & XFS_SB_QFLAGS) { > > + if (!xfs_sb_version_has_pquota(from)) { > > This should be moved to a separate function, I think. > > > + if (fields & XFS_SB_QFLAGS) { > > + /* > > + * The in-core version of sb_qflags do not have > > + * XFS_OQUOTA_* flags, whereas the on-disk version > > + * does. So, convert incore XFS_{PG}QUOTA_* flags > > + * to on-disk XFS_OQUOTA_* flags. > > + */ > > + qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > > + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > > + > > + if (from->sb_qflags & > > + (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > > + qflags |= XFS_OQUOTA_ENFD; > > + if (from->sb_qflags & > > + (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > > + qflags |= XFS_OQUOTA_CHKD; > > Now that we have the new flags set correct, write it directly to > to->sb_qflags and clear XFS_SB_QFLAGS from the fields varaible. So, you are suggesting to move this block of functionality to a new function, and set the fields in the "to" data structure in that function and clear the appropriate bits in the same function ? > > > + } > > + > > /* > > - * The in-core version of sb_qflags do not have > > - * XFS_OQUOTA_* flags, whereas the on-disk version > > - * does. So, convert incore XFS_{PG}QUOTA_* flags > > - * to on-disk XFS_OQUOTA_* flags. > > + * On-disk version earlier than pquota doesn't have > > + * sb_pquotino. so, we need to copy the value to gquotino. > > */ > > - qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | > > - XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); > > + if (fields & XFS_SB_PQUOTINO) { > > + fields &= (__int64_t)~XFS_SB_PQUOTINO; > > + fields |= (__int64_t)XFS_SB_GQUOTINO; > > + gquotino = from->sb_pquotino; > > + } > > Same here - write the inode number directly to the to->sb_gquotino > field and clear the XFS_SB_PQUOTINO flag. > > > > > - if (from->sb_qflags & > > - (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) > > - qflags |= XFS_OQUOTA_ENFD; > > - if (from->sb_qflags & > > - (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) > > - qflags |= XFS_OQUOTA_CHKD; > > + /* If any quota inodes are written, write all quota inodes */ > > + if (fields & (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO)) > > + fields |= (XFS_SB_UQUOTINO|XFS_SB_GQUOTINO); > > Why write things that haven't been modified? fixed it > > > + > > + } else { > > + /* If any quota inodes are written, write all quota inodes */ > > + if (fields & (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO > > + | XFS_SB_PQUOTINO)) > > + fields |= (XFS_SB_UQUOTINO | XFS_SB_GQUOTINO > > + | XFS_SB_PQUOTINO); > > Same - the flags pssed in are supposed to document everything that > has been modified. If the flags passed in are wrong, then fix the > bad callers..... fixed it. > > } > > > > > while (fields) { > > @@ -691,6 +738,8 @@ xfs_sb_to_disk( > > memcpy(to_ptr + first, from_ptr + first, size); > > } else if (f == XFS_SBS_QFLAGS) { > > *(__be16 *)(to_ptr + first) = cpu_to_be16(qflags); > > + } else if (f == XFS_SBS_GQUOTINO) { > > + *(__be64 *)(to_ptr + first) = cpu_to_be64(gquotino); > > If we clear the XFS_SBS_GQUOTINO/XFS_SBS_QFLAGS flags like I > suggested above, this grot can go away and the loop remain > completely generic. sure. > > > } else { > > switch (size) { > > case 2: > > @@ -872,6 +921,18 @@ reread: > > */ > > xfs_sb_from_disk(&mp->m_sb, XFS_BUF_TO_SBP(bp)); > > > > + if (!xfs_sb_version_has_pquota(&mp->m_sb) && XFS_IS_PQUOTA_ON(mp)) { > > + /* > > + * On disk superblock only has sb_gquotino, and in memory > > + * superblock has both sb_gquotino and sb_pquotino. But, > > + * only one them is supported at any point of time. > > + * So, if PQUOTA is set in disk superblock, copy over > > + * sb_gquotino to sb_pquotino. > > + */ > > + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino; > > + mp->m_sb.sb_gquotino = NULLFSINO; > > + } > > Yup, that's the right place for doing all this on-disk->incore > translation stuff at mount time ;) > > > - if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { > > + if (ino == mp->m_sb.sb_uquotino || > > + ino == mp->m_sb.sb_gquotino || > > + ino == mp->m_sb.sb_pquotino) { > > Seeing how often this is repeated, perhaps we need a helper function > called "xfs_is_quota_inode(mp, ino)"? will do. > > > @@ -1505,7 +1506,7 @@ xfs_qm_init_quotainos( > > } > > if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { > > error = xfs_qm_qino_alloc(mp, &pip, > > - sbflags | XFS_SB_GQUOTINO, > > + sbflags | XFS_SB_PQUOTINO, > > flags | XFS_QMOPT_PQUOTA); > > Isn't that fixing a bug in the previous patch? No, pquotino is not being used until this function. > > > @@ -412,17 +413,20 @@ xfs_qm_scall_getqstat( > > struct fs_quota_stat *out) > > { > > struct xfs_quotainfo *q = mp->m_quotainfo; > > - struct xfs_inode *uip, *gip; > > - bool tempuqip, tempgqip; > > + struct xfs_inode *uip = NULL; > > + struct xfs_inode *gip = NULL; > > + struct xfs_inode *pip = NULL; > > + bool tempuqip = false; > > + bool tempgqip = false; > > + bool temppqip = false; > > See my previous comments about naming variables. At least > add an underscore into the name like temp_uqip.... > why not. > > @@ -420,12 +420,6 @@ xfs_parseargs( > > } > > #endif > > > > - if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && > > - (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { > > - xfs_warn(mp, "cannot mount with both project and group quota"); > > - return EINVAL; > > - } > > - > > if ((dsunit && !dswidth) || (!dsunit && dswidth)) { > > xfs_warn(mp, "sunit and swidth must be specified together"); > > return EINVAL; > > @@ -1388,6 +1382,14 @@ xfs_finish_flags( > > return XFS_ERROR(EROFS); > > } > > > > + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && > > + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) && > > + !xfs_sb_version_has_pquota(&mp->m_sb)) { > > + xfs_warn(mp, "Super block does not support " > > + "project and group quota together"); > > + return XFS_ERROR(EINVAL); > > + } > > Why move this check? just leave it where it is and add the extra > check to it... Superblock hasn't been read yet at the old place. So, this block has to be moved to a place after superblock is read. > > > @@ -157,7 +157,8 @@ xfs_trans_mod_dquot_byino( > > if (!XFS_IS_QUOTA_RUNNING(mp) || > > !XFS_IS_QUOTA_ON(mp) || > > ip->i_ino == mp->m_sb.sb_uquotino || > > - ip->i_ino == mp->m_sb.sb_gquotino) > > + ip->i_ino == mp->m_sb.sb_gquotino || > > + ip->i_ino == mp->m_sb.sb_pquotino) > > return; > > I see a helper.... > > > if (tp->t_dqinfo == NULL) > > @@ -825,6 +826,7 @@ xfs_trans_reserve_quota_nblks( > > > > ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); > > ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); > > + ASSERT(ip->i_ino != mp->m_sb.sb_pquotino); > > And that becomes ASSERT(!xfs_is_quota_inode(mp, ip->i_ino)).... > > > diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h > > index 8655280..f17e3bb 100644 > > --- a/include/uapi/linux/dqblk_xfs.h > > +++ b/include/uapi/linux/dqblk_xfs.h > > @@ -155,6 +155,7 @@ typedef struct fs_quota_stat { > > __s8 qs_pad; /* unused */ > > fs_qfilestat_t qs_uquota; /* user quota storage information */ > > fs_qfilestat_t qs_gquota; /* group quota storage information */ > > +#define qs_pquota qs_gquota > > __u32 qs_incoredqs; /* number of dquots incore */ > > __s32 qs_btimelimit; /* limit for blks timer */ > > __s32 qs_itimelimit; /* limit for inodes timer */ > > Ugly, but will do until the next patch ;) > > Cheers, > > Dave. From sekharan@us.ibm.com Fri May 24 17:17:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 125DC29DF8 for ; Fri, 24 May 2013 17:17:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 969A9AC002 for ; Fri, 24 May 2013 15:17:45 -0700 (PDT) X-ASG-Debug-ID: 1369433864-04cb6c473f11e790001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id nXUbbkHJ62IPNiuI (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 15:17:44 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 16:17:44 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d01dlp03.pok.ibm.com (9.56.250.168) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 16:17:42 -0600 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id E671BC90050 for ; Fri, 24 May 2013 18:17:40 -0400 (EDT) Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OMHeGS344448 for ; Fri, 24 May 2013 18:17:41 -0400 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OMHdnc032304 for ; Fri, 24 May 2013 16:17:40 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OMHdpn032245; Fri, 24 May 2013 16:17:39 -0600 Subject: Re: [PATCH v8 5/5] xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 5/5] xfs: Use new qs_pquota field in fs_quota_stat for Q_XGETQSTAT Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: xfs@oss.sgi.com In-Reply-To: <20130517051441.GQ24635@dastard> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-6-git-send-email-sekharan@us.ibm.com> <20130517051441.GQ24635@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 17:17:39 -0500 Message-ID: <1369433859.9551.968.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052422-3620-0000-0000-000002AFEDD7 X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1369433864 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, 2013-05-17 at 15:14 +1000, Dave Chinner wrote: > On Fri, May 10, 2013 at 04:21:29PM -0500, Chandra Seetharaman wrote: > > For the Q_XGETQSTAT quota command, if the new version of fs_quota_stat > > data structure is used, fill the project quota information. > > > > Signed-off-by: Chandra Seetharaman > > --- > > fs/xfs/xfs_qm_syscalls.c | 39 +++++++++++++++++++++++++-------------- > > 1 files changed, 25 insertions(+), 14 deletions(-) > > > > diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c > > index c27b0e4..7c5876b 100644 > > --- a/fs/xfs/xfs_qm_syscalls.c > > +++ b/fs/xfs/xfs_qm_syscalls.c > > @@ -420,20 +420,14 @@ xfs_qm_scall_getqstat( > > bool tempgqip = false; > > bool temppqip = false; > > > > - if (!xfs_sb_version_hasquota(&mp->m_sb)) { > > - out->qs_uquota.qfs_ino = NULLFSINO; > > - out->qs_gquota.qfs_ino = NULLFSINO; > > - out->qs_pquota.qfs_ino = NULLFSINO; > > + out->qs_uquota.qfs_ino = NULLFSINO; > > + out->qs_gquota.qfs_ino = NULLFSINO; > > + out->qs_pquota.qfs_ino = NULLFSINO; > > + > > + if (!xfs_sb_version_hasquota(&mp->m_sb)) > > return (0); > > - } > > out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & > > - (XFS_ALL_QUOTA_ACCT| > > - XFS_ALL_QUOTA_ENFD)); > > - out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; > > - out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; > > - if (&out->qs_gquota != &out->qs_pquota) > > - out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; > > - > > + (XFS_ALL_QUOTA_ACCT| XFS_ALL_QUOTA_ENFD)); > > if (q) { > > uip = q->qi_uquotaip; > > gip = q->qi_gquotaip; > > @@ -454,21 +448,38 @@ xfs_qm_scall_getqstat( > > 0, 0, &pip) == 0) > > temppqip = true; > > } > > + > > if (uip) { > > + out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; > > out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; > > out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; > > if (tempuqip) > > IRELE(uip); > > } > > if (gip) { > > + out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; > > out->qs_gquota.qfs_nblks = gip->i_d.di_nblocks; > > out->qs_gquota.qfs_nextents = gip->i_d.di_nextents; > > if (tempgqip) > > IRELE(gip); > > } > > if (pip) { > > - out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; > > - out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; > > + if (out->qs_version >= FS_QSTAT_VERSION_2) { > > + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; > > + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; > > + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; > > + } else { > > + /* > > + * In FS_QSTAT_VERSION version, there is no > > + * qs_pquota, and there is no combined support > > + * for gquota/pquota. qs_gquota is shared for > > + * providing the pquota/gquota information to > > + * the user space. > > + */ > > Move that comment to the head of the function. i.e.: > > /* > * We support two different versions of the fs_quota_stat structure > * here. If the version is FS_QSTAT_VERSION, then there is no > * separate project quota fields, and so we write project quota > * information into the group quota fields. With FS_QSTAT_VERSION_2, > * there is a separate project quota field so we can use that > * instead to pass both group and project quota back to user space > * in the one call. > */ > sure > Cheers, > > Dave. From sekharan@us.ibm.com Fri May 24 17:18:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 50CD729E07 for ; Fri, 24 May 2013 17:18:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 23318304051 for ; Fri, 24 May 2013 15:18:04 -0700 (PDT) X-ASG-Debug-ID: 1369433882-04bdf063bdcde50001-NocioJ Received: from e37.co.us.ibm.com (e37.co.us.ibm.com [32.97.110.158]) by cuda.sgi.com with ESMTP id 4h837sA7NWcfS8uY (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 May 2013 15:18:03 -0700 (PDT) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.158 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] Received: from /spool/local by e37.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 24 May 2013 16:18:01 -0600 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e37.co.us.ibm.com (192.168.1.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 24 May 2013 16:17:24 -0600 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id E2D7F1FF001C for ; Fri, 24 May 2013 16:12:14 -0600 (MDT) Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4OMHNas118072 for ; Fri, 24 May 2013 16:17:23 -0600 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4OMHNiM010120 for ; Fri, 24 May 2013 16:17:23 -0600 Received: from [9.41.106.170] (chandra-dt.austin.ibm.com [9.41.106.170]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r4OMHM3K010109; Fri, 24 May 2013 16:17:23 -0600 Subject: Re: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [PATCH v8 4/5] xfs: Add proper versioning support to fs_quota_stat Reply-To: sekharan@us.ibm.com To: Dave Chinner Cc: xfs@oss.sgi.com In-Reply-To: <20130517051001.GP24635@dastard> References: <1368220889-25188-1-git-send-email-sekharan@us.ibm.com> <1368220889-25188-5-git-send-email-sekharan@us.ibm.com> <20130517051001.GP24635@dastard> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Fri, 24 May 2013 17:17:22 -0500 Message-ID: <1369433842.9551.967.camel@chandra-dt.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-30.el6) Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052422-7408-0000-0000-0000108CD8E8 X-Barracuda-Connect: e37.co.us.ibm.com[32.97.110.158] X-Barracuda-Start-Time: 1369433882 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On Fri, 2013-05-17 at 15:10 +1000, Dave Chinner wrote: > On Fri, May 10, 2013 at 04:21:28PM -0500, Chandra Seetharaman wrote: > > Added appropriate pads and code for backward compatibility. > > > > Copied over the old version as it is different from the newer padded > > version. > > > > New callers of the system call have to just set the version of the data > > structure being passed, and kernel will fill as much data as requested. > > > > Signed-off-by: Chandra Seetharaman > > This needs to be cc'd to Steve Whitehouse so he's aware that we are > changing the quota interface... Will do. > > > --- > > fs/gfs2/quota.c | 3 --- > > fs/quota/quota.c | 40 ++++++++++++++++++++++++++++++++++++++-- > > fs/xfs/xfs_qm_syscalls.c | 4 ---- > > include/uapi/linux/dqblk_xfs.h | 38 ++++++++++++++++++++++++++++++++++++-- > > 4 files changed, 74 insertions(+), 11 deletions(-) > > > > diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c > > index c7c840e..ca0dccd 100644 > > --- a/fs/gfs2/quota.c > > +++ b/fs/gfs2/quota.c > > @@ -1443,9 +1443,6 @@ static int gfs2_quota_get_xstate(struct super_block *sb, > > { > > struct gfs2_sbd *sdp = sb->s_fs_info; > > > > - memset(fqs, 0, sizeof(struct fs_quota_stat)); > > - fqs->qs_version = FS_QSTAT_VERSION; > > - > > switch (sdp->sd_args.ar_quota) { > > case GFS2_QUOTA_ON: > > fqs->qs_flags |= (FS_QUOTA_UDQ_ENFD | FS_QUOTA_GDQ_ENFD); > > diff --git a/fs/quota/quota.c b/fs/quota/quota.c > > index c7314f1..510464e 100644 > > --- a/fs/quota/quota.c > > +++ b/fs/quota/quota.c > > @@ -207,12 +207,48 @@ static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr) > > static int quota_getxstate(struct super_block *sb, void __user *addr) > > { > > struct fs_quota_stat fqs; > > - int ret; > > + struct fs_quota_stat_v1 fqs_v1; > > + int ret, size; > > + void *cp = &fqs; > > What's "cp" mean? Wouldn't fqsp be a better name? And initialise it > just before it gets used makes more sense, too. > will do > > > > if (!sb->s_qcop->get_xstate) > > return -ENOSYS; > > + > > + memset(&fqs, 0, sizeof(struct fs_quota_stat)); > > + if (copy_from_user(&fqs, addr, 1)) /* just get the version */ > > + return -EFAULT; > > + > > + switch (fqs.qs_version) { > > + case FS_QSTAT_VERSION_2: > > + size = FS_QSTAT_V2_SIZE; > > + break; > > + default: > > + fqs.qs_version = FS_QSTAT_VERSION; > > + /* fallthrough */ > > + case FS_QSTAT_VERSION: > > + size = FS_QSTAT_V1_SIZE; > > + cp = &fqs_v1; > > + } > > Missing a break on the last case there. will add. > > > + > > ret = sb->s_qcop->get_xstate(sb, &fqs); > > - if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) > > + if (ret) > > + return ret; > > + > > + if (fqs.qs_version == FS_QSTAT_VERSION) { > > + fqs_v1.qs_version = fqs.qs_version; > > + fqs_v1.qs_flags = fqs.qs_flags; > > + fqs_v1.qs_pad = 0; > > + fqs_v1.qs_uquota = fqs.qs_uquota; > > + fqs_v1.qs_gquota = fqs.qs_gquota; > > + fqs_v1.qs_incoredqs = fqs.qs_incoredqs; > > + fqs_v1.qs_btimelimit = fqs.qs_btimelimit; > > + fqs_v1.qs_itimelimit = fqs.qs_itimelimit; > > + fqs_v1.qs_rtbtimelimit = fqs.qs_rtbtimelimit; > > + fqs_v1.qs_bwarnlimit = fqs.qs_bwarnlimit; > > + fqs_v1.qs_iwarnlimit = fqs.qs_iwarnlimit; > > fsqp = &fsq_v1; > } else { > fsqp = &fsq_v2; > } > sure > > + > > + if (copy_to_user(addr, &cp, size)) > > return -EFAULT; > > return ret; > > } > > diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h > > index f17e3bb..d9629c1 100644 > > --- a/include/uapi/linux/dqblk_xfs.h > > +++ b/include/uapi/linux/dqblk_xfs.h > > @@ -18,6 +18,7 @@ > > #define _LINUX_DQBLK_XFS_H > > > > #include > > +#include > > Really? What's new that requires this include? will fix. > > > > > /* > > * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). > > @@ -137,8 +138,12 @@ typedef struct fs_disk_quota { > > * Provides a centralized way to get meta information about the quota subsystem. > > * eg. space taken up for user and group quotas, number of dquots currently > > * incore. > > + * User space caller should set qs_version to the appropriate version > > + * of the fs_quota_stat data structure they are providing. Not providing > > + * a version will be treated as FS_QSTAT_VERSION. > > */ > > #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ > > +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ > > > > /* > > * Some basic information about 'quota files'. > > @@ -149,19 +154,48 @@ typedef struct fs_qfilestat { > > __u32 qfs_nextents; /* number of extents */ > > } fs_qfilestat_t; > > > > +typedef struct fs_quota_stat_v1 { > > Kill the typedef. Add a comment stating that this structure is > likely to have compatibility problems across architectures due to > implicit padding and offset alignment in the structure definition > and that the v2 structure should be used if these problems are being > seen. will do > > > + __s8 qs_version; /* version number for future changes */ > > + __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ > > + __u8 qs_pad; /* unused */ > > + fs_qfilestat_t qs_uquota; /* user quota storage information */ > > + fs_qfilestat_t qs_gquota; /* group quota storage information */ > > + __u32 qs_incoredqs; /* number of dquots incore */ > > + __s32 qs_btimelimit; /* limit for blks timer */ > > + __s32 qs_itimelimit; /* limit for inodes timer */ > > + __s32 qs_rtbtimelimit;/* limit for rt blks timer */ > > + __u16 qs_bwarnlimit; /* limit for num warnings */ > > + __u16 qs_iwarnlimit; /* limit for num warnings */ > > +} fs_quota_stat_v1_t; > > + > > typedef struct fs_quota_stat { > > Kill the typedef. > > > __s8 qs_version; /* version number for future changes */ > > + __u8 qs_pad1; /* unused */ > > __u16 qs_flags; /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ > > - __s8 qs_pad; /* unused */ > > + __u8 qs_pad2[4]; /* unused */ > > fs_qfilestat_t qs_uquota; /* user quota storage information */ > > fs_qfilestat_t qs_gquota; /* group quota storage information */ > > -#define qs_pquota qs_gquota > > __u32 qs_incoredqs; /* number of dquots incore */ > > __s32 qs_btimelimit; /* limit for blks timer */ > > __s32 qs_itimelimit; /* limit for inodes timer */ > > __s32 qs_rtbtimelimit;/* limit for rt blks timer */ > > __u16 qs_bwarnlimit; /* limit for num warnings */ > > __u16 qs_iwarnlimit; /* limit for num warnings */ > > + __u8 qs_pad3[4]; /* unused */ > > + fs_qfilestat_t qs_pquota; /* project quota storage information */ > > + /* End of Data structure for FS_QSTAT_VERSION_2 */ > > No need for that comment. > > > } fs_quota_stat_t; > > Use pahole on the built object file to determine if the end ofthe > structure is 64 bit aligned. If it isn't, please pad it to 64 bit > alignment. sure. > > Um. fs_qfilestat_t is { u64, u64, u32 }, and so there's going to be > alignment problems with that. We need a fs_qfilestat_v1 definition > and add padding to fs_qfilestat_t so that it is 64 bit aligned..... > will do. > > > > > +/* > > + * Since Version 1 did not have padding at appropriate places, > > + * a new data structure has been defined for the older version to > > + * provide backward compatibility. > > + * Future extentions of this data structure won't require new > > + * data structure definitions as the current one can be extended > > + * with the logic and padding in place now. > > + */ > > +#define FS_QSTAT_V1_SIZE (sizeof(struct fs_quota_stat_v1)) > > +#define FS_QSTAT_V2_SIZE (offsetof(struct fs_quota_stat, qs_pquota) + \ > > + sizeof(fs_qfilestat_t)) > > Just use sizeof(struct fs_quota_stat) as the size. Indeed, for My thinking w.r.t not making it sizeof (fs_quota_stat) is ...future changes doesn't have to touch the macro definitions of earlier versions, they can define a new macro just by copying the last V?_SIZE macro and changing the last field name. > future enhancements, maybe we should add 64 bytes of empty space at > the end of the structure.... Since this version is fully backward compatible, I didn't think a future pad was needed. Do you want me to add ? > Cheers, > > Dave. From david@fromorbit.com Fri May 24 18:41:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0F3A029DF8 for ; Fri, 24 May 2013 18:41:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id AFFC7AC002 for ; Fri, 24 May 2013 16:41:52 -0700 (PDT) X-ASG-Debug-ID: 1369438907-04bdf0781712afd0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 3oeC7h5UhN3ueuRB for ; Fri, 24 May 2013 16:41:48 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AsAMADL6n1F5LEc//2dsb2JhbABagwiDAro+hSIEAYEGF3SCIwEBBScTHCMQCAMOBwMJDBkPBSUDIROIDLliFo1qgR0HCoNKA5c6kUGDISo Received: from ppp121-44-71-63.lns20.syd6.internode.on.net (HELO dastard) ([121.44.71.63]) by ipmail05.adl6.internode.on.net with ESMTP; 25 May 2013 09:11:47 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ug1cG-00036d-Rf; Sat, 25 May 2013 09:41:44 +1000 Date: Sat, 25 May 2013 09:41:44 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/11] xfs: fix incorrect remote symlink block count Message-ID: <20130524234144.GJ24543@dastard> X-ASG-Orig-Subj: Re: [PATCH 10/11] xfs: fix incorrect remote symlink block count References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-11-git-send-email-david@fromorbit.com> <20130524203633.GW20028@sgi.com> <20130524203910.GX20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524203910.GX20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369438907 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131930 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, May 24, 2013 at 03:39:10PM -0500, Ben Myers wrote: > On Fri, May 24, 2013 at 03:36:33PM -0500, Ben Myers wrote: > > On Tue, May 21, 2013 at 06:02:09PM +1000, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > When CRCs are enabled, the number of blocks needed to hold a remote > > > symlink on a 1k block size filesystem may be 2 instead of 1. The > > > transaction reservation for the allocated bloks was not taking this > > blocks > > > into account and only allocating one block. hence when trying to > > H > > > > fixed. > > > > > read or invalidate such symlinks, we are mapping a hole where there > > > should be a block and things go bad at that point. > > > > > > Fix the reservation to use the correct block count, clean up the > > > block count calculation similar to the remote attribute calculation, > > > and add a debug guard to detect when we don't write the entire > > > symlink to disk. > > > > > > Signed-off-by: Dave Chinner ... > > > @@ -525,9 +518,7 @@ xfs_symlink( > > > bp->b_ops = &xfs_symlink_buf_ops; > > > > > > byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); > > > - if (pathlen < byte_cnt) { > > > - byte_cnt = pathlen; > > > - } > > > + byte_cnt = min(byte_cnt, pathlen); > > > > The min is necessary due since we can have up to three extents in here, > > according to the comment above the define for XFS_SYMLINK_MAPS. So byte_cnt > > can be less than pathlen. > > D'oh. I wanted to point out that it looks like this issue with 'min' here > should be causing problems with symlinks on non-crc enabled filesystems. What issue might that be? The result is identical in either case, I just converted this to min to be more concise and consistent with the same code loops in the remote attr copyin/copyout. Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Fri May 24 23:58:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 531F37CBF for ; Fri, 24 May 2013 23:58:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B0258AC002 for ; Fri, 24 May 2013 21:58:16 -0700 (PDT) X-ASG-Debug-ID: 1369457894-04cbb0049e147d70001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id cWYmzESF8iplfBag for ; Fri, 24 May 2013 21:58:15 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 893AD651AF1D; Fri, 24 May 2013 23:58:14 -0500 (CDT) Message-ID: <51A044E5.1030105@sandeen.net> Date: Fri, 24 May 2013 23:58:13 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: Dave Jones , Linux Kernel , xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> <20130524015219.GA28486@redhat.com> <20130524030300.GA30760@redhat.com> <20130524080300.GI24543@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) In-Reply-To: <20130524080300.GI24543@dastard> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369457894 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131952 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/24/13 3:03 AM, Dave Chinner wrote: > Right, patch below should fix the problem. > > What a frustrating bug. Now, where's my bottle of scotch? In your pantry, Dave. Next to the others! ;) -Eric > Cheers, > > Dave. > From stan@hardwarefreak.com Sat May 25 01:39:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1B8F57F37 for ; Sat, 25 May 2013 01:39:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7C607AC006 for ; Fri, 24 May 2013 23:39:18 -0700 (PDT) X-ASG-Debug-ID: 1369463954-04cbb0049e14db60001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id T4NX4PlJApKIuTAw for ; Fri, 24 May 2013 23:39:14 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id B10426C192 for ; Sat, 25 May 2013 01:39:13 -0500 (CDT) Message-ID: <51A05C96.1070101@hardwarefreak.com> Date: Sat, 25 May 2013 01:39:18 -0500 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522051243.GH29466@dastard> <20130522052938.GA2573@redhat.com> <20130522055147.GI29466@dastard> <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> <20130524015219.GA28486@redhat.com> <20130524030300.GA30760@redhat.com> <20130524080300.GI24543@dastard> <51A044E5.1030105@sandeen.net> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) In-Reply-To: <51A044E5.1030105@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1369463954 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/24/2013 11:58 PM, Eric Sandeen wrote: > On 5/24/13 3:03 AM, Dave Chinner wrote: > >> Right, patch below should fix the problem. >> >> What a frustrating bug. Now, where's my bottle of scotch? > > In your pantry, Dave. Next to the others! ;) Be careful with that stuff lest you have more bugs to fix. ;) Heheh, how bout a T-Shirt: "Don't drink and code" on the front, w/a graphic of intoxicated Calvin tangled up in a wrecked PC on the back. At least he won't be pissing on anything in this one. ;) -- Stan From monikastephanyuu@gmx.com Sat May 25 06:46:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1D5677F37 for ; Sat, 25 May 2013 06:46:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7A966AC004 for ; Sat, 25 May 2013 04:46:52 -0700 (PDT) X-ASG-Debug-ID: 1369482408-04cbb0049e1645d0001-NocioJ Received: from mout-xforward.gmx.net (mout-xforward.gmx.net [82.165.159.13]) by cuda.sgi.com with ESMTP id 5lbdqOffLh5gZSgQ for ; Sat, 25 May 2013 04:46:49 -0700 (PDT) X-Barracuda-Envelope-From: monikastephanyuu@gmx.com X-Barracuda-Apparent-Source-IP: 82.165.159.13 Received: from mailout-eu.gmx.com ([10.1.101.215]) by mrigmx.server.lan (mrigmx002) with ESMTP (Nemesis) id 0LpReN-1UCf0v0B5p-00fByk for ; Sat, 25 May 2013 13:46:48 +0200 Received: (qmail 6361 invoked by uid 0); 25 May 2013 11:46:47 -0000 Received: from 78.26.128.167 by rms-eu015 with HTTP Content-Type: multipart/alternative; boundary="========GMXBoundary327221369482405534327" Date: Sat, 25 May 2013 13:46:44 +0200 From: "Monika Stephan" Message-ID: <20130525114645.327220@gmx.com> MIME-Version: 1.0 Subject: =?utf-8?B?0YPQvdC4a2HQu9GM0L3Ri9C1INGHYWPRiyAgLiDQt9Cw0LrQsNC3INC90LAg0YHQsNC50YLQtS4=?= To: info@tover.com,support_ip@rutvn.ru,tds@tempdorstroy.ru,xfs@oss.sgi.com,alexey@agora.rdrop.com X-ASG-Orig-Subj: =?utf-8?B?0YPQvdC4a2HQu9GM0L3Ri9C1INGHYWPRiyAgLiDQt9Cw0LrQsNC3INC90LAg0YHQsNC50YLQtS4=?= X-Flags: 0001 X-Mailer: GMX.com Web Mailer x-registered: 0 X-GMX-UID: 8sHScbYeeSEqJlBHjXwhXCh+IGRvb0AY X-Barracuda-Connect: mout-xforward.gmx.net[82.165.159.13] X-Barracuda-Start-Time: 1369482408 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA584, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131977 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC0_SA584 Custom Rule SA584 --========GMXBoundary327221369482405534327 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit http://bit.ly/123wSMI --========GMXBoundary327221369482405534327 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable http://bit.ly/123wSMI --========GMXBoundary327221369482405534327-- From newyorktimes@ln-mail.com Sat May 25 10:10:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=ACT_NOW_CAPS,HTML_MESSAGE, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B1F097F37 for ; Sat, 25 May 2013 10:10:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9B2358F804B for ; Sat, 25 May 2013 08:10:11 -0700 (PDT) X-ASG-Debug-ID: 1369494609-04cb6c4742168db0001-w1Z2WR Received: from nyt.ln-mail.com (nyt.ln-mail.com [216.242.230.111]) by cuda.sgi.com with ESMTP id BcDa53Gl8NTBWk3z for ; Sat, 25 May 2013 08:10:09 -0700 (PDT) X-Barracuda-Envelope-From: newyorktimes@ln-mail.com X-Barracuda-Apparent-Source-IP: 216.242.230.111 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dk1; d=ln-mail.com; h=MIME-Version:Content-type:List-Unsubscribe:From:To:Subject:Message-ID:Date; i=NewYorkTimes@ln-mail.com; bh=1//opzeXDRAEiethNjeiMsoQcWM=; b=hONT8zTPuAsrKSHh9ya/L3cgCZ3yb4NOhrGmtf8sV9RPSvqs/MjCQ1aJOuA8qQCRdUMEqfkLtvqD xoFEdIQ7wQpwIRFeJvZiYr49dV6XAF6bZEwSCcbDuoUc6mMks/EGfWGKp45FStzm/mrNhIOJO7TC 641VDyX9ZLLlJ1Cqjao= MIME-Version: 1.0 Content-type: multipart/alternative; boundary="001nevereditthisline002" x-job: 120828 List-Unsubscribe: From: "New York Times" To: linux-xfs@oss.sgi.com Subject: Memorial Day Sale: 50% Off for 16 weeks of a Times Subscription. Limited-Time Only Message-ID: <0.0.1F.A82.1CE5959F238D6AE.0@nyt.ln-mail.com> X-ASG-Orig-Subj: Memorial Day Sale: 50% Off for 16 weeks of a Times Subscription. Limited-Time Only Date: Sat, 25 May 2013 11:10:09 -0400 X-Barracuda-Connect: nyt.ln-mail.com[216.242.230.111] X-Barracuda-Start-Time: 1369494609 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=ACT_NOW_CAPS, BSF_SC5_SA161f, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131992 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 ACT_NOW_CAPS BODY: Talks about 'acting now' with capitals -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC5_SA161f Custom Rule SA161f --001nevereditthisline002 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit You are receiving this email because you have opted in to receive special online promotions and offers from Tabletweek. This message is from Tabletweek on behalf of the New York Times. Limited-time only: Save 50% for 16 weeks on a Times subscription: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW View in browser: http://www.ln-mail.com/ets/klc.asp?120828X2M20818473?e=linux-xfs@oss.sgi.com MEMORIAL DAY SALE SAVE 50% FOR 16 WEEKS on a Digital or Home Delivery Subscription. OFFER ENDS MAY 28* REDEEM SPECIAL OFFER: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW ----------------------------------------------------------------- 50% FOR 16 WEEKS! Unlimited access to: -- Unrivaled journalism -- Influential opinions -- Innovative multimedia REDEEM SPECIAL OFFER: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW It's our Memorial Day sale, so for a limited time only, celebrate with The Times and enjoy special savings of 50% for a full 16 weeks on a digital or home delivery subscription. By subscribing today, you'll stay on top of all the news that's important to you, covered by more than 1,000 of the world's finest journalists. You'll get the latest breaking news, reviews of the big summer movies and articles to help you make the very best travel plans. Choose from digital subscription options that include full access to our smartphone or tablet apps, or both. Or select one of our convenient home delivery options, such as 7-day delivery, The Weekender or Sunday delivery. All home delivery options come with free, unlimited access to NYTimes.com and our apps. ACT NOW. THIS SPECIAL OFFER ENDS MAY 28, 2013. REDEEM SPECIAL OFFER: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW ----------------------------------------------------------------- *Offer expires on May 29, 2013, 9 a.m. E.D.T. Promotional offers valid for new subscribers only. New York Times digital subscriptions are sold separately from e-reader editions, Premium Crosswords and The New York Times Crosswords apps. Smartphone and tablet apps are not supported on all devices. Home Delivery Subscription options are available at the introductory rate of 50% off the regular rate for the first 16 weeks when paying by credit card. This introductory offer is valid only in areas served by The New York Times delivery service to readers who have not had home delivery of The New York Times within the past 90 days. At the end of your introductory period, delivery will continue at the regular rate unless you notify us otherwise. Prices are subject to change. Product availability and price may vary by region. Digital and home delivery subscriptions will automatically renew and the credit card will be charged in advance of each 4-week billing period unless canceled. If the subscription is canceled, refunds and termination of access will follow the Terms of Sale policy. Other restrictions and taxes may apply. To ensure delivery of e-mails from The New York Times, please add nytimes@email.nytimes.com to your address book. Privacy Policy: http://www.nytimes.com/content/help/rights/privacy/policy/privacy-policy.html Contact Us help@nytimes.com Unsubscribe: https://myaccount.nytimes.com/gst/unsub.html?email=linux-xfs@oss.sgi.com Copyright 2013 The New York Times Company P.O. Box 8041, Davenport, IA 52808-8041 You are receiving this message as part of Tabletweek. [ linux-xfs@oss.sgi.com ] The preceding is vendor information. If you no longer want to receive this type of information you may indicate that here http://www.ln-mail.com/r/km.asp?m=ZKqfqnXC&o=fZKqZq&j=Ygqgge&t=2&e=linux-xfs@oss.sgi.com 20818473 --001nevereditthisline002 Content-type: text/html; charset="US-ASCII" Content-transfer-encoding: 7bit
You are receiving this email because you have opted in to receive special online promotions and offers from Tabletweek. This message is from Tabletweek on behalf of the New York Times.

The New York Times Limited-time only: Save 50% for 16 weeks on a Times subscription.
View in browser.
Memorial Day Sale - Save 50% for 16 weeks.


It’s our Memorial Day sale, so for a limited time only, celebrate with The Times and enjoy special savings of 50% for a full 16 weeks on a digital or home delivery subscription.

By subscribing today, you’ll stay on top of all the news that’s important to you, covered by more than 1,000 of the world’s finest journalists. You’ll get the latest breaking news, reviews of the big summer movies and articles to help you make the very best travel plans.

Choose from digital subscription options that include full access to our smartphone or tablet apps, or both.

Or select one of our convenient home delivery options, such as 7-day delivery, The Weekender or Sunday delivery. All home delivery options come with free, unlimited access to NYTimes.com and our apps.

ACT NOW. THIS SPECIAL OFFER
ENDS MAY 28, 2013.

REDEEM SPECIAL OFFER


50% off for 16 weeks!

REDEEM SPECIAL OFFER
*Offer expires on May 29, 2013, 9 a.m. E.D.T. =

Promotional offers valid for new subscribers only. New York Times digital subscriptions are sold separately from e-reader editions, Premium Crosswords and The New York Times Crosswords apps. Smartphone and tablet apps are not supported on all devices.

Home Delivery Subscription options are available at the introductory rate of 50% off the regular rate for the first 16 weeks when paying by credit card. This introductory offer is valid only in areas served by The New York Times delivery service to readers who have not had home delivery of The New York Times within the past 90 days. At the end of your introductory period, delivery will continue at the regular rate unless you notify us otherwise. Prices are subject to change. Product availability and price may vary by region.

Digital and home delivery subscriptions will automatically renew and the credit card will be charged in advance of each 4-week billing period unless canceled. If the subscription is canceled, refunds and termination of access will follow the Terms of Sale policy. Other restrictions and taxes may apply.

To ensure delivery of e-mails from The New York Times, please add nytimes@email.nytimes.com to your address book.

Privacy Policy | Contact Us | Unsubscribe

© 2013 The New York Times Company | P.O. Box 8041, Davenport, IA 52808-8041



You are receiving this message as part of Tabletweek.

[ linux-xfs@oss.sgi.com ]
The preceding is vendor information.

If you no longer want to receive this type of information you may indicate that here
http://www.ln-mail.com/r/km.asp?m=ZKqfqnXC&o=fZKqZq&j=Ygqgge&t=2&e=linux-xfs@oss.sgi.com
20818473



--001nevereditthisline002-- From bpm@sgi.com Sat May 25 10:16:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 55FC87F37 for ; Sat, 25 May 2013 10:16:36 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id CFA81AC008; Sat, 25 May 2013 08:16:32 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 22A5F500B50; Sat, 25 May 2013 10:16:32 -0500 (CDT) Date: Sat, 25 May 2013 10:16:32 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/11] xfs: fix incorrect remote symlink block count Message-ID: <20130525151631.GY20028@sgi.com> References: <1369123330-9579-1-git-send-email-david@fromorbit.com> <1369123330-9579-11-git-send-email-david@fromorbit.com> <20130524203633.GW20028@sgi.com> <20130524203910.GX20028@sgi.com> <20130524234144.GJ24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130524234144.GJ24543@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) On Sat, May 25, 2013 at 09:41:44AM +1000, Dave Chinner wrote: > On Fri, May 24, 2013 at 03:39:10PM -0500, Ben Myers wrote: > > On Fri, May 24, 2013 at 03:36:33PM -0500, Ben Myers wrote: > > > On Tue, May 21, 2013 at 06:02:09PM +1000, Dave Chinner wrote: > > > > From: Dave Chinner > > > > > > > > When CRCs are enabled, the number of blocks needed to hold a remote > > > > symlink on a 1k block size filesystem may be 2 instead of 1. The > > > > transaction reservation for the allocated bloks was not taking this > > > blocks > > > > into account and only allocating one block. hence when trying to > > > H > > > > > > fixed. > > > > > > > read or invalidate such symlinks, we are mapping a hole where there > > > > should be a block and things go bad at that point. > > > > > > > > Fix the reservation to use the correct block count, clean up the > > > > block count calculation similar to the remote attribute calculation, > > > > and add a debug guard to detect when we don't write the entire > > > > symlink to disk. > > > > > > > > Signed-off-by: Dave Chinner > ... > > > > > @@ -525,9 +518,7 @@ xfs_symlink( > > > > bp->b_ops = &xfs_symlink_buf_ops; > > > > > > > > byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); > > > > - if (pathlen < byte_cnt) { > > > > - byte_cnt = pathlen; > > > > - } > > > > + byte_cnt = min(byte_cnt, pathlen); > > > > > > The min is necessary due since we can have up to three extents in here, > > > according to the comment above the define for XFS_SYMLINK_MAPS. So byte_cnt > > > can be less than pathlen. > > > > D'oh. I wanted to point out that it looks like this issue with 'min' here > > should be causing problems with symlinks on non-crc enabled filesystems. > > What issue might that be? The result is identical in either case, I > just converted this to min to be more concise and consistent with > the same code loops in the remote attr copyin/copyout. My impression was that if you have byte_cnt < pathlen we'll copy past the end of the extent. Looks like I was wrong. From bpm@sgi.com Sat May 25 10:21:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E7E6C7F37 for ; Sat, 25 May 2013 10:21:12 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id A67CE304039; Sat, 25 May 2013 08:21:09 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 1B1FB500B50; Sat, 25 May 2013 10:21:09 -0500 (CDT) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS fixes for 3.10-rc3 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20130525152109.1B1FB500B50@whiskey.americas.sgi.com> Date: Sat, 25 May 2013 10:21:09 -0500 (CDT) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull these XFS fixes for -rc3. Here are fixes for corruption on 512 byte filesystems, a rounding error, a use-after-free, some flags to fix lockdep reports, and several fixes related to CRCs. We have a somewhat larger post -rc1 queue than usual due to fixes related to the CRC feature we merged for 3.10. These few are those which made Stephen's linux-next Tree for May 23. Thanks, Ben The following changes since commit f722406faae2d073cc1d01063d1123c35425939e: Linux 3.10-rc1 (2013-05-11 17:14:08 -0700) are available in the git repository at: git://oss.sgi.com/xfs/xfs tags/for-linus-v3.10-rc3 for you to fetch changes up to 7ae077802c9f12959a81fa1a16c1ec2842dbae05: xfs: remote attribute lookups require the value length (2013-05-24 16:31:20 -0500) ---------------------------------------------------------------- xfs: fixes for 3.10-rc3 - Fix for corruption with FSX on 512 byte blocksize filesystems - Fix rounding error in xfs_free_file_space - Fix use-after-free with extent free intents - Add several missing KM_NOFS flags to fix lockdep reports - Several fixes for CRC related code ---------------------------------------------------------------- Dave Chinner (7): xfs: fix sub-page blocksize data integrity writes xfs: fix rounding in xfs_free_file_space xfs: Don't reference the EFI after it is freed xfs: fix missing KM_NOFS tags to keep lockdep happy xfs: xfs_da3_node_read_verify() doesn't handle XFS_ATTR3_LEAF_MAGIC xfs: xfs_attr_shortform_allfit() does not handle attr3 format. xfs: remote attribute lookups require the value length fs/xfs/xfs_aops.c | 19 +++++++++++++++++++ fs/xfs/xfs_attr_leaf.c | 27 +++++++++++++++------------ fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_da_btree.c | 7 +++++-- fs/xfs/xfs_dir2_leaf.c | 2 +- fs/xfs/xfs_extfree_item.c | 5 +++-- fs/xfs/xfs_log_cil.c | 2 +- fs/xfs/xfs_vnodeops.c | 4 ++-- 8 files changed, 47 insertions(+), 21 deletions(-) From zwu.kernel@gmail.com Sat May 25 11:29:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8AFD57F37 for ; Sat, 25 May 2013 11:29:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 743608F8039 for ; Sat, 25 May 2013 09:29:16 -0700 (PDT) X-ASG-Debug-ID: 1369499352-04cbb0049d175aa0001-NocioJ Received: from mail-qa0-f41.google.com (mail-qa0-f41.google.com [209.85.216.41]) by cuda.sgi.com with ESMTP id oFzFXjUKVn4Yro56 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 25 May 2013 09:29:12 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.41 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.41] Received: by mail-qa0-f41.google.com with SMTP id bn16so400779qab.7 for ; Sat, 25 May 2013 09:29:12 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.41] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.41] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=7qB+4/Kt/tJKm3YeGQyKDq3NPOZJAVn4Z8MTDYSUuGM=; b=rFWI3SUfbOTBlwzh2VuniAnhlRTJmopAyIsTWhep/TAmDrtc+VsIC5uvT11fEMx+Ot uekoZx3J/fHad4j5mjdIjOt68a73Qbzn1QOwkqOVS0adBJsG67qXgrMWcxkyUoriHLNL 1UGKMn+Vz4VuFjA2jbuBEFQB/q0wgjHLvls7EidZUdTJjbqRGotXs4jAQaDKJn0BUiUY ZbpDCXsMUWlX4Az7eYTbKld/h+c+qvZVdDYkYnK7ScREN7THi+W4lS2BOortvEwvEygm a8gYny9r0ABxTl5e9nQlZEOOTv2CIqlyNbOkbAKXOejbQKwKahBracxCClFAy1B/QhfB ns7g== MIME-Version: 1.0 X-Received: by 10.229.166.193 with SMTP id n1mr7821459qcy.113.1369499352122; Sat, 25 May 2013 09:29:12 -0700 (PDT) Received: by 10.49.72.165 with HTTP; Sat, 25 May 2013 09:29:11 -0700 (PDT) Date: Sun, 26 May 2013 00:29:11 +0800 Message-ID: Subject: xfsprogs: is it one issue? From: Zhi Yong Wu X-ASG-Orig-Subj: xfsprogs: is it one issue? To: xfs@oss.sgi.com Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-qa0-f41.google.com[209.85.216.41] X-Barracuda-Start-Time: 1369499352 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.131998 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature HI, Did anyone hit this issue? [root@f15 xfsprogs]# make Building include Building libxfs [TEST] CRC32 In file included from ../include/libxfs.h:584:0, from crc32.c:36: ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name =91umode_t=92 gmake[2]: *** [crc32selftest] Error 1 gmake[1]: *** [libxfs] Error 2 make: *** [default] Error 2 -- Regards, Zhi Yong Wu From sales@asic-technologies.com Sat May 25 13:51:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=HTML_MESSAGE,INVALID_MSGID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 166E27F37 for ; Sat, 25 May 2013 13:51:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8C472AC003 for ; Sat, 25 May 2013 11:51:55 -0700 (PDT) X-ASG-Debug-ID: 1369507912-04cbb0049d17ea30001-NocioJ Received: from cust-smtp-195.fasthosts.co.uk (smtp-out-60.livemail.co.uk [213.171.216.60]) by cuda.sgi.com with ESMTP id qGp165bRz0UUMJjZ for ; Sat, 25 May 2013 11:51:53 -0700 (PDT) X-Barracuda-Envelope-From: sales@asic-technologies.com X-Barracuda-Apparent-Source-IP: 213.171.216.60 Received: from neils-pc (dab-bas1-h-16-3.dab.02.net [82.132.213.70]) by cust-smtp-195.fasthosts.co.uk (Postfix) with ESMTP id CC68019C11D for ; Sat, 25 May 2013 19:51:51 +0100 (BST) From: "sales@asic-technologies.com" To: "xfs" Subject: Asic-technologies.com Message-ID: <73bf73c4f57f2d4c979cbd3e2f86c5e2@asic-technologies.com" X-ASG-Orig-Subj: Asic-technologies.com Date: Sat, 25 May 2013 19:49:45 +0100 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0001_E6A5F4E0.10290344" X-Priority: 3 X-Mailer: Microsoft Office Outlook 12.0 X-Barracuda-Connect: smtp-out-60.livemail.co.uk[213.171.216.60] X-Barracuda-Start-Time: 1369507913 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.72 X-Barracuda-Spam-Status: No, SCORE=1.72 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, INVALID_MSGID, K2_INVALID_MSGID X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132008 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 INVALID_MSGID Message-Id is not valid, according to RFC 2822 1.71 K2_INVALID_MSGID INVALID_MSGID This is a multi-part message in MIME format. ------=_NextPart_000_0001_E6A5F4E0.10290344 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Asic-technologies.com=0D=0AWe make ASIC Bitcoin Mining Gear = using the ASIC chips Sourced from Taiwan.=0D=0A3.1 -3.3 GHash/sec = 4 Board (has 32 chips) - 15 BTC=0D=0A9.3-9.9 GHash/sec 12 Board = (has 96 chips) - 30 BTC=0D=0AEach module board uses about 39 = Watts of power.=0D=0AMining board's supplied (No case) power = supply , On-board heat sink , USB connectors.=0D=0AReady assembled=0D=0A= (suggest that you insert board's into a case and add cooling = fans)=0D=0AAll the boards are linked together , With one main = controller.=0D=0AEasy to Install Software (Disk Provided)=0D=0ASimple = Plug and play.=0D=0AAsic-technologies.com ------=_NextPart_000_0001_E6A5F4E0.10290344 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable =0D=0A=0D=0A=0D=0A=0D=0A=0D=0A
=0D=0A

Asic-technologie= s.com

=0D=0A

We make ASIC Bitcoin Mining Gear using = the ASIC chips Sourced from Taiwan.

=0D=0A

3.1 -3.3 GHash/sec = 4 Board (has 32 chips) - 15 BTC

=0D=0A

9.3-9.9 GHash/sec = 12 Board (has 96 chips) - 30 BTC

=0D=0A

Each module = board uses about 39 Watts of power.

=0D=0A

Mining board's = supplied (No case) power supply , On-board heat sink , USB connectors.=

=0D=0A

Ready assembled
(suggest that you insert board's = into a case and add cooling fans)

=0D=0A

All the boards = are linked together , With one main controller.
Easy to Install = Software (Disk Provided)
Simple Plug and play.

=0D=0A

Asic-technologies.com

------=_NextPart_000_0001_E6A5F4E0.10290344-- From mlsemon35@gmail.com Sat May 25 14:43:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0484E7F3F for ; Sat, 25 May 2013 14:43:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id E50808F8037 for ; Sat, 25 May 2013 12:43:09 -0700 (PDT) X-ASG-Debug-ID: 1369510988-04cb6c474117a150001-NocioJ Received: from mail-gh0-f179.google.com (mail-gh0-f179.google.com [209.85.160.179]) by cuda.sgi.com with ESMTP id bPu1CxrsUW4KNjlL (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 25 May 2013 12:43:09 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.179 X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.179] Received: by mail-gh0-f179.google.com with SMTP id f16so1709490ghb.10 for ; Sat, 25 May 2013 12:43:08 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.179] X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.179] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=bOCWoeQmf1pk7ic1zBEPMEN/k0T2c/LG1GghTdGoNiw=; b=xEnQSksSIzLMZrLz3RM1gvoT6l46LFUXrFUL4cWNvtVfHNn8Lcu6FKfCPSRnt4ZVMe +mKhTnHztwiIwgAT0OjLOIY7Hfco/022MftPDd9ub9iLZYla7Z+M03KR/DYJaOo1rZgL lsRzRUFVG87NQBDpbEdwH/FoV8bl+SAYYve9FOfIZtoNoxZG4Aa6a5YSuVL5wuMWM4eL u+ieYLFVN5kWPuqZ6H3WGd/sBS5jkR6p4fzzDxge+U8KLtBJrLoSJ6kiyCF5JZ8CbRKF YpVVOzZsgMssE4eRWOZ96SEoTlYCk4R1Z7eQukr8R2OHm5CCFXxSmBFyhLsmRON5hVOA MtHg== X-Received: by 10.236.142.65 with SMTP id h41mr12047998yhj.84.1369510988689; Sat, 25 May 2013 12:43:08 -0700 (PDT) Received: from [192.168.0.129] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id g40sm11950910yhj.15.2013.05.25.12.43.07 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 25 May 2013 12:43:08 -0700 (PDT) Message-ID: <51A1144A.4020600@gmail.com> Date: Sat, 25 May 2013 15:43:06 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Zhi Yong Wu CC: xfs@oss.sgi.com Subject: Re: xfsprogs: is it one issue? References: X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: mail-gh0-f179.google.com[209.85.160.179] X-Barracuda-Start-Time: 1369510989 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132010 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain On 05/25/2013 12:29 PM, Zhi Yong Wu wrote: > HI, > > Did anyone hit this issue? > > [root@f15 xfsprogs]# make > Building include > Building libxfs > [TEST] CRC32 > In file included from ../include/libxfs.h:584:0, > from crc32.c:36: > ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name ‘umode_t’ > gmake[2]: *** [crc32selftest] Error 1 > gmake[1]: *** [libxfs] Error 2 > make: *** [default] Error 2 > > > -- > Regards, > > Zhi Yong Wu Yes. I've been getting around it by inserting the following in one of the two files above, perhaps in xfs_ialloc.h... typedef unsigned short umode_t; It's something in the private kernel headers that doesn't get exported to the public headers by `make headers_install` from the kernel build...at least not for the 3.9 kernel series and later, maybe 3.8 as well. However, I've been told that umode_t is in the Debian 2.6 kernel headers. The main questions here are 1) when did umode_t go away? and 2) what is the proper solution? I use slackware-current, which is unaltered in many places where other distros would add extra tweaks, so it may not be a good reference distribution in this case. If you mention your distribution and have an idea of which kernel version made the headers in /usr/include/linux, it might help the pros here come up with a solutio...or at least tell the people in charge of the public headers that they might export umode_t. Thanks! Michael From sandeen@sandeen.net Sat May 25 16:07:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C2C727F37 for ; Sat, 25 May 2013 16:07:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9CFCF8F8033 for ; Sat, 25 May 2013 14:07:28 -0700 (PDT) X-ASG-Debug-ID: 1369516046-04bdf063bd130750001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id jsHHRqixGHn23ub6 for ; Sat, 25 May 2013 14:07:27 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 98C2F651AC26; Sat, 25 May 2013 16:07:26 -0500 (CDT) Message-ID: <51A1280D.701@sandeen.net> Date: Sat, 25 May 2013 16:07:25 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Zhi Yong Wu CC: xfs@oss.sgi.com Subject: Re: xfsprogs: is it one issue? References: X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? In-Reply-To: X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369516046 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132016 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/25/13 11:29 AM, Zhi Yong Wu wrote: > HI, > > Did anyone hit this issue? > > [root@f15 xfsprogs]# make > Building include > Building libxfs > [TEST] CRC32 > In file included from ../include/libxfs.h:584:0, > from crc32.c:36: > ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name ‘umode_t’ > gmake[2]: *** [crc32selftest] Error 1 > gmake[1]: *** [libxfs] Error 2 > make: *** [default] Error 2 For starters, which version of xfsprogs? And what version of kernel headers? -Eric From zwu.kernel@gmail.com Sat May 25 17:46:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BBA8D7F37 for ; Sat, 25 May 2013 17:46:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4C642AC002 for ; Sat, 25 May 2013 15:46:31 -0700 (PDT) X-ASG-Debug-ID: 1369521989-04cb6c4740182260001-NocioJ Received: from mail-qa0-f52.google.com (mail-qa0-f52.google.com [209.85.216.52]) by cuda.sgi.com with ESMTP id VCPFFPvyNihY4DEC (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 25 May 2013 15:46:30 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.52 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.52] Received: by mail-qa0-f52.google.com with SMTP id bv4so471825qab.4 for ; Sat, 25 May 2013 15:46:29 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.52] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.52] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=udFkxaJ76M1NyLrdYVWlmEGyHnQt1/xOTVWComv1DbE=; b=j+ahgHO19I+LSvA6hkJecrUB1mAFLogZ7tIY+troOH5fPw0Gs4Mytpm9HdOznLxSQI GGU61MqHGyWruJcQaSgJdM8kQGyK/2H5ZmEcE9Dzp7Yk0bYussX4QS6qDeeVGDI/pq7I 0LUDj+0/QyvT9iOi/gqdpdRVpNMrc7TwEJZtfpQCSkLNRcS1shnR7bMhQzA+LKrFGnvN OkTs9hfhQzb4S7sND8Y6tQptHXrDZh/dSdBhfbosFcmA72wWTyq46086csPgaHhbbtiH sSBEnlj/J3Ns6/Q/YOdvPYyfm1NkahVPqRSLAP/zC2s7Ie1LlhIVlWRWYW37p+CNj113 fjWQ== MIME-Version: 1.0 X-Received: by 10.229.166.193 with SMTP id n1mr8189659qcy.113.1369521989521; Sat, 25 May 2013 15:46:29 -0700 (PDT) Received: by 10.49.72.165 with HTTP; Sat, 25 May 2013 15:46:29 -0700 (PDT) In-Reply-To: <51A1280D.701@sandeen.net> References: <51A1280D.701@sandeen.net> Date: Sun, 26 May 2013 06:46:29 +0800 Message-ID: Subject: Re: xfsprogs: is it one issue? From: Zhi Yong Wu X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? To: Eric Sandeen Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-qa0-f52.google.com[209.85.216.52] X-Barracuda-Start-Time: 1369521989 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132022 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature HI, xfsprogs should be latest, Last year i tried it, and it worked well, and today pull the latest one and want to replay with it, but fail. below are the logs on two different boxes: [root@f15 xfsprogs]# git describe v3.1.11-8-g8e78288 [root@f15 xfsprogs]# uname -r 3.6.6-rc1+ Also i also tried this on another box: [root@f17 xfsprogs]# git describe v3.1.11-8-g8e78288 [root@f17 xfsprogs]# uname -r 3.9.0-rc1+ On Sun, May 26, 2013 at 5:07 AM, Eric Sandeen wrote: > On 5/25/13 11:29 AM, Zhi Yong Wu wrote: >> HI, >> >> Did anyone hit this issue? >> >> [root@f15 xfsprogs]# make >> Building include >> Building libxfs >> [TEST] CRC32 >> In file included from ../include/libxfs.h:584:0, >> from crc32.c:36: >> ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name =91umode_t=92 >> gmake[2]: *** [crc32selftest] Error 1 >> gmake[1]: *** [libxfs] Error 2 >> make: *** [default] Error 2 > > For starters, which version of xfsprogs? And what version of kernel head= ers? > > -Eric > --=20 Regards, Zhi Yong Wu From zwu.kernel@gmail.com Sat May 25 17:57:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 18BAB7F37 for ; Sat, 25 May 2013 17:57:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id EB2AD8F8033 for ; Sat, 25 May 2013 15:57:05 -0700 (PDT) X-ASG-Debug-ID: 1369522624-04cbb0049e18b9d0001-NocioJ Received: from mail-qe0-f45.google.com (mail-qe0-f45.google.com [209.85.128.45]) by cuda.sgi.com with ESMTP id BlanrNnulvP0OvC0 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 25 May 2013 15:57:04 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.128.45 X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.45] Received: by mail-qe0-f45.google.com with SMTP id q19so3178936qeb.4 for ; Sat, 25 May 2013 15:57:04 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.45] X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.45] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=cJQM5NRGi3V0T6DBcLssNaum91ps10it3vLxGI7ck08=; b=nlg4PZ/63d5SDHkk4Z9IAH+C3cbfS1AiXRS/LkiblDmcgt3s0WQnznmmurLtYGjPc1 01H2xoz/4tbRRG3uo78Dhz8fiuhxKNMC/5HgQ7YpfxrcbsfCUeR2M33eziS7EMUeh3c0 TEcl1V8RvgZGZIIRrXfpqwap/FdTEIJWWvYK63aVO9gvzZ3ozdo0ZSzRgdITo0y7uWrK G95QbnnmwfR6v3gplfLPQODWRUrzhndE1KPgYSYRss9gMnYB5DGS0K2xIhc+7q0Whlp2 Jl/D1Zih8tMs9z1w9ExgjA4wD6Gl1TokVZsItjrZbacKQmOsHKCdFc2echnNogMhT3sG yRBQ== MIME-Version: 1.0 X-Received: by 10.224.174.6 with SMTP id r6mr21715158qaz.87.1369522624455; Sat, 25 May 2013 15:57:04 -0700 (PDT) Received: by 10.49.72.165 with HTTP; Sat, 25 May 2013 15:57:04 -0700 (PDT) In-Reply-To: <51A1144A.4020600@gmail.com> References: <51A1144A.4020600@gmail.com> Date: Sun, 26 May 2013 06:57:04 +0800 Message-ID: Subject: Re: xfsprogs: is it one issue? From: Zhi Yong Wu X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? To: "Michael L. Semon" Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-qe0-f45.google.com[209.85.128.45] X-Barracuda-Start-Time: 1369522624 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132024 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Yes, now xfsprogs can be compiled and installed well, but xfstests is still failed to build. [root@f15 xfstests]# make loggen.c: In function 'loggen_unmount': loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' loggen.c: In function 'loggen_empty': loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' gmake[3]: *** [loggen] Error 1 gmake[2]: *** [src] Error 2 make[1]: *** [default] Error 2 make: *** [default] Error 2 On Sun, May 26, 2013 at 3:43 AM, Michael L. Semon wro= te: > On 05/25/2013 12:29 PM, Zhi Yong Wu wrote: >> >> HI, >> >> Did anyone hit this issue? >> >> [root@f15 xfsprogs]# make >> Building include >> Building libxfs >> [TEST] CRC32 >> In file included from ../include/libxfs.h:584:0, >> from crc32.c:36: >> ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name =91umode_t=92 >> gmake[2]: *** [crc32selftest] Error 1 >> gmake[1]: *** [libxfs] Error 2 >> make: *** [default] Error 2 >> >> >> -- >> Regards, >> >> Zhi Yong Wu > > > Yes. I've been getting around it by inserting the following in one of th= e > two files above, perhaps in xfs_ialloc.h... > > typedef unsigned short umode_t; > > It's something in the private kernel headers that doesn't get exported to > the public headers by `make headers_install` from the kernel build...at > least not for the 3.9 kernel series and later, maybe 3.8 as well. Howeve= r, > I've been told that umode_t is in the Debian 2.6 kernel headers. The mai= n > questions here are 1) when did umode_t go away? and 2) what is the proper > solution? I use slackware-current, which is unaltered in many places whe= re > other distros would add extra tweaks, so it may not be a good reference > distribution in this case. > > If you mention your distribution and have an idea of which kernel version > made the headers in /usr/include/linux, it might help the pros here come = up > with a solutio...or at least tell the people in charge of the public head= ers > that they might export umode_t. > > Thanks! > > Michael --=20 Regards, Zhi Yong Wu From zwu.kernel@gmail.com Sat May 25 18:11:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 423107F37 for ; Sat, 25 May 2013 18:11:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2F0998F8033 for ; Sat, 25 May 2013 16:11:05 -0700 (PDT) X-ASG-Debug-ID: 1369523463-04cb6c47411833d0001-NocioJ Received: from mail-qe0-f47.google.com (mail-qe0-f47.google.com [209.85.128.47]) by cuda.sgi.com with ESMTP id IYroXUh2Bir2YCbs (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 25 May 2013 16:11:04 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.128.47 X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.47] Received: by mail-qe0-f47.google.com with SMTP id f6so2312740qej.34 for ; Sat, 25 May 2013 16:11:03 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.47] X-Barracuda-IPDD: Level1 [gmail.com/209.85.128.47] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=oimMGsn7z69B4N3f3AkMGUqnFBlrEu11U29X+LfEvPc=; b=jiyJFSBAmcVSe4Lac2R1ii4TjpYJW4dFYjQ/ukP2Pk0bJtWYjvwt9NM5cz0Gn5QqJb WoIy3vw1MNEVYFo8F2TPbVvdHMJB/kdlMWrT1OwV4/7zuCUVkZTi/x/uv6o7hcEftAKu MgPalMAFNFY+vEWLxYNBDn/kjpmvMp8ovolGPAGLY77ZZ5E+iQ7yPNm0h9/YAicz4X8w 2iBSYV+ZCpGLasyYIjkM5asrSUuODwN4p2DOzKcmcFW0d+SgXTXs3so+mXyPXU+Im3BL 7zBt9N4XbCnLHD30JuH1AApfSyYN51AzfkN0X/AM7vR2BxpXIXo5Jmh1AOObkpG85vbT S7dw== MIME-Version: 1.0 X-Received: by 10.229.17.140 with SMTP id s12mr6941184qca.79.1369523463671; Sat, 25 May 2013 16:11:03 -0700 (PDT) Received: by 10.49.72.165 with HTTP; Sat, 25 May 2013 16:11:03 -0700 (PDT) In-Reply-To: References: <51A1144A.4020600@gmail.com> Date: Sun, 26 May 2013 07:11:03 +0800 Message-ID: Subject: Re: xfsprogs: is it one issue? From: Zhi Yong Wu X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? To: "Michael L. Semon" Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-qe0-f47.google.com[209.85.128.47] X-Barracuda-Start-Time: 1369523464 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132024 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain I remove the lines related to h_chksum, then it can work well, so i guess that i should send out one patch to fix it. On Sun, May 26, 2013 at 6:57 AM, Zhi Yong Wu wrote: > Yes, now xfsprogs can be compiled and installed well, but xfstests is > still failed to build. > > [root@f15 xfstests]# make > loggen.c: In function 'loggen_unmount': > loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > loggen.c: In function 'loggen_empty': > loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > gmake[3]: *** [loggen] Error 1 > gmake[2]: *** [src] Error 2 > make[1]: *** [default] Error 2 > make: *** [default] Error 2 > > > > On Sun, May 26, 2013 at 3:43 AM, Michael L. Semon w= rote: >> On 05/25/2013 12:29 PM, Zhi Yong Wu wrote: >>> >>> HI, >>> >>> Did anyone hit this issue? >>> >>> [root@f15 xfsprogs]# make >>> Building include >>> Building libxfs >>> [TEST] CRC32 >>> In file included from ../include/libxfs.h:584:0, >>> from crc32.c:36: >>> ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name =91umode_t= =92 >>> gmake[2]: *** [crc32selftest] Error 1 >>> gmake[1]: *** [libxfs] Error 2 >>> make: *** [default] Error 2 >>> >>> >>> -- >>> Regards, >>> >>> Zhi Yong Wu >> >> >> Yes. I've been getting around it by inserting the following in one of t= he >> two files above, perhaps in xfs_ialloc.h... >> >> typedef unsigned short umode_t; >> >> It's something in the private kernel headers that doesn't get exported t= o >> the public headers by `make headers_install` from the kernel build...at >> least not for the 3.9 kernel series and later, maybe 3.8 as well. Howev= er, >> I've been told that umode_t is in the Debian 2.6 kernel headers. The ma= in >> questions here are 1) when did umode_t go away? and 2) what is the prope= r >> solution? I use slackware-current, which is unaltered in many places wh= ere >> other distros would add extra tweaks, so it may not be a good reference >> distribution in this case. >> >> If you mention your distribution and have an idea of which kernel versio= n >> made the headers in /usr/include/linux, it might help the pros here come= up >> with a solutio...or at least tell the people in charge of the public hea= ders >> that they might export umode_t. >> >> Thanks! >> >> Michael > > > > -- > Regards, > > Zhi Yong Wu --=20 Regards, Zhi Yong Wu From zwu.kernel@gmail.com Sat May 25 18:15:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 885D97F37 for ; Sat, 25 May 2013 18:15:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 453AF304039 for ; Sat, 25 May 2013 16:15:52 -0700 (PDT) X-ASG-Debug-ID: 1369523750-04bdf0781618efd0001-NocioJ Received: from e9.ny.us.ibm.com (e9.ny.us.ibm.com [32.97.182.139]) by cuda.sgi.com with ESMTP id GD1Cx0EwLYc0rE0J (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 25 May 2013 16:15:51 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 32.97.182.139 Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Sat, 25 May 2013 19:15:49 -0400 Received: from d01dlp02.pok.ibm.com (9.56.250.167) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Sat, 25 May 2013 19:15:48 -0400 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 30EEE6E8039 for ; Sat, 25 May 2013 19:15:44 -0400 (EDT) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4PNFlrJ306328 for ; Sat, 25 May 2013 19:15:47 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4PNFlO4031526 for ; Sat, 25 May 2013 20:15:47 -0300 Received: from us.ibm.com ([9.115.122.94]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with SMTP id r4PNFi3O031471; Sat, 25 May 2013 20:15:45 -0300 Received: by us.ibm.com (sSMTP sendmail emulation); Sun, 26 May 2013 07:15:33 +0800 From: zwu.kernel@gmail.com To: xfs@oss.sgi.com Cc: Zhi Yong Wu Subject: [PATCH] xfstests: cleanup the codes related to h_chksum Date: Sun, 26 May 2013 07:15:32 +0800 X-ASG-Orig-Subj: [PATCH] xfstests: cleanup the codes related to h_chksum Message-Id: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> X-Mailer: git-send-email 1.7.6.5 X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13052523-7182-0000-0000-000006ED045A X-Barracuda-Connect: e9.ny.us.ibm.com[32.97.182.139] X-Barracuda-Start-Time: 1369523750 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132024 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name From: Zhi Yong Wu Since h_chksum field has gone away, we should cleanup the related codes [CC] loggen loggen.c: In function 'loggen_unmount': loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' loggen.c: In function 'loggen_empty': loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' Signed-off-by: Zhi Yong Wu --- src/loggen.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/src/loggen.c b/src/loggen.c index 4b55667..522c917 100644 --- a/src/loggen.c +++ b/src/loggen.c @@ -134,7 +134,6 @@ loggen_unmount(int count) head->h_cycle = cpu_to_be32(param_cycle); head->h_version = cpu_to_be32(1); head->h_len = cpu_to_be32(20); - head->h_chksum = cpu_to_be32(0); head->h_prev_block = cpu_to_be32(-1); head->h_num_logops = cpu_to_be32(1); head->h_cycle_data[0] = cpu_to_be32(0xb0c0d0d0); @@ -202,7 +201,6 @@ loggen_empty(int count) sizeof(xfs_trans_header_t)+ sizeof(xfs_buf_log_format_t)+ sizeof(int)); - head->h_chksum = cpu_to_be32(0); head->h_prev_block = cpu_to_be32(-1); head->h_num_logops = cpu_to_be32(5); head->h_cycle_data[0] = cpu_to_be32(0xb0c0d0d0); -- 1.7.6.5 From bivib@server39.cretaforce.gr Sat May 25 19:29:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLYTO, SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 948B07F37 for ; Sat, 25 May 2013 19:29:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 716BE8F8035 for ; Sat, 25 May 2013 17:29:06 -0700 (PDT) X-ASG-Debug-ID: 1369528142-04cbb0049c18f620001-w1Z2WR Received: from server39.cretaforce.gr (server39.cretaforce.gr [5.9.58.217]) by cuda.sgi.com with ESMTP id 1hS7KtTEXekH3Iha (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 25 May 2013 17:29:02 -0700 (PDT) X-Barracuda-Envelope-From: bivib@server39.cretaforce.gr X-Barracuda-Apparent-Source-IP: 5.9.58.217 Received: by server39.cretaforce.gr (Postfix, from userid 1085) id 82ABC54122; Sun, 26 May 2013 03:22:48 +0300 (EEST) To: linux-xfs@oss.sgi.com Subject: ORDER ENQUIRY X-PHP-Script: kosm1.wysiwyg.gr/wp-content/themes/welcome_inn/cache/wp-indent.php for 197.255.169.144 X-ASG-Orig-Subj: ORDER ENQUIRY X-PHP-Originating-Script: 1085:wp-indent.php From: Michael Sasse. Reply-To: sasseoffice85@gmail.com MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit Message-Id: <20130526002248.82ABC54122@server39.cretaforce.gr> Date: Sun, 26 May 2013 03:22:48 +0300 (EEST) X-Barracuda-Connect: server39.cretaforce.gr[5.9.58.217] X-Barracuda-Start-Time: 1369528142 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132030 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email Hello, I will like to order and supply some of your products to a sister company of ours at Tavakubu Lautoka, Republic of Fiji Islands If you have never ship to this country before, then that will not be a problem as we have a shipping company that has been handling our shipments for a long time without any problem. Kindly get back to me at sasseoffice85@gmail.com with the type of credit card you accept and the availability of your products. Also email me with your website address. Michael Sasse. From bivib@server39.cretaforce.gr Sat May 25 20:31:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLYTO, SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4F7C57F37 for ; Sat, 25 May 2013 20:31:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id DF090AC002 for ; Sat, 25 May 2013 18:31:45 -0700 (PDT) X-ASG-Debug-ID: 1369531900-04cb6c4741189440001-w1Z2WR Received: from server39.cretaforce.gr (server39.cretaforce.gr [5.9.58.217]) by cuda.sgi.com with ESMTP id WcJIXvIbWrvoVnnD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 25 May 2013 18:31:41 -0700 (PDT) X-Barracuda-Envelope-From: bivib@server39.cretaforce.gr X-Barracuda-Apparent-Source-IP: 5.9.58.217 Received: by server39.cretaforce.gr (Postfix, from userid 1085) id 73895553B5; Sun, 26 May 2013 04:28:41 +0300 (EEST) To: linux-xfs@oss.sgi.com Subject: ORDER ENQUIRY!!! X-PHP-Script: kosm1.wysiwyg.gr/wp-content/themes/welcome_inn/cache/wp-indent.php for 197.255.169.144 X-ASG-Orig-Subj: ORDER ENQUIRY!!! X-PHP-Originating-Script: 1085:wp-indent.php From: Michael Sasse. Reply-To: sasseoffice85@gmail.com MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit Message-Id: <20130526012841.73895553B5@server39.cretaforce.gr> Date: Sun, 26 May 2013 04:28:41 +0300 (EEST) X-Barracuda-Connect: server39.cretaforce.gr[5.9.58.217] X-Barracuda-Start-Time: 1369531901 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.46 X-Barracuda-Spam-Status: No, SCORE=0.46 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MAILTO_TO_SPAM_ADDR, PLING_PLING X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132034 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.46 PLING_PLING Subject has lots of exclamation marks Hello, I will like to order and supply some of your products to a sister company of ours at Tavakubu Lautoka, Republic of Fiji Islands If you have never ship to this country before, then that will not be a problem as we have a shipping company that has been handling our shipments for a long time without any problem. Kindly get back to me at sasseoffice85@gmail.com with the type of credit card you accept and the availability of your products. Also email me with your website address. Michael Sasse. From zwu.kernel@gmail.com Sun May 26 04:35:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3148B7F37 for ; Sun, 26 May 2013 04:35:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1249E8F8033 for ; Sun, 26 May 2013 02:35:47 -0700 (PDT) X-ASG-Debug-ID: 1369560946-04cbb0049e1a3930001-NocioJ Received: from mail-ie0-f181.google.com (mail-ie0-f181.google.com [209.85.223.181]) by cuda.sgi.com with ESMTP id EQCBICGJzlpsJ8if (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 26 May 2013 02:35:46 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.223.181 X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.181] Received: by mail-ie0-f181.google.com with SMTP id x12so15844081ief.40 for ; Sun, 26 May 2013 02:35:46 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.181] X-Barracuda-IPDD: Level1 [gmail.com/209.85.223.181] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=mFhV4eO/kBcDD+j/z5UG4Rsj0ATaF+V26hp5G+BWe7I=; b=paOrPeZ8k0d+HdDsVMIjdphjmOw/smU4jJyef7itFLSWqMzvzyzqOEWXg8nmiR7Z99 z43OXaO+XW28vKzsYg2V5/tVkusZoJIGzrPTkN8wnyRpe4/w23Liz6IZKNUBapJA6Ml7 OWG2T1wVJq/RdknREUi4/GqZOhgsZ7vS7T8P3LyauudNDOKW2YBopFOc7TbJXB9ABLKe o08qOu1Vy8OQTCtX6Y0ORgod+gj06WpG0H6rPjZqjwNWUG2cfj7pOdZZLwh8k5zpq7n3 0nwE3K8NZSGoDYax8TqQ1CvjfUcOm1XAKi6VE+4GztSpKIkp5r544pL91S/DxM8LXrL3 TVrg== MIME-Version: 1.0 X-Received: by 10.50.93.100 with SMTP id ct4mr2829030igb.48.1369560945932; Sun, 26 May 2013 02:35:45 -0700 (PDT) Received: by 10.64.44.207 with HTTP; Sun, 26 May 2013 02:35:45 -0700 (PDT) In-Reply-To: <51363CE6.1010807@sgi.com> References: <512DB284.1090806@gmail.com> <51363CE6.1010807@sgi.com> Date: Sun, 26 May 2013 17:35:45 +0800 Message-ID: Subject: Re: [PATCH] xfstests 276: fix error 'FIBMAP: Invalid argument' From: Zhi Yong Wu X-ASG-Orig-Subj: Re: [PATCH] xfstests 276: fix error 'FIBMAP: Invalid argument' To: Rich Johnston Cc: Wang Sheng-Hui , list.btrfs@jan-o-sch.net, linux-btrfs@vger.kernel.org, xfstests Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-ie0-f181.google.com[209.85.223.181] X-Barracuda-Start-Time: 1369560946 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132064 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature HI, This issue still exists when xfstests is run on debian although xfstests has contained this patch. root@debian-i386:/home/zwu/xfstests# git describe linux-v3.8-122-gdc75401 root@debian-i386:/home/zwu/xfstests# uname -a Linux debian-i386 3.10.0-rc2+ #3 SMP Sun May 26 14:04:13 CST 2013 x86_64 GNU/Linux root@debian-i386:/home/zwu/xfstests# - output mismatch (see /home/zwu/xfstests/results/btrfs/276.out.bad) --- tests/btrfs/276.out 2013-05-25 15:09:01.000000000 +0000 +++ /home/zwu/xfstests/results/btrfs/276.out.bad 2013-05-26 09:31:49.962876905 +0000 @@ -1,3 +1,32393 @@ QA output created by 276 *** test backref walking +FIBMAP: Invalid argument +FIBMAP: Invalid argument +FIBMAP: Invalid argument +FIBMAP: Invalid argument +FIBMAP: Invalid argument ... (Run 'diff -u tests/btrfs/276.out /home/zwu/xfstests/results/btrfs/276.out.bad' to see the entire diff) [ 3877.215268] device fsid 8367602a-14fa-49eb-aff0-44da1faa3b45 devid 1 transid 239 /dev/vdb [ 3877.218417] btrfs: disk space caching is enabled Ran: btrfs/276 Failures: btrfs/276 Failed 1 of 1 tests On Wed, Mar 6, 2013 at 2:43 AM, Rich Johnston wrote: > This patch has been committed. > > --Rich > > commit eba3a5206cd7f8df73d6e6dbf2bb0afca677fca8 > Author: Wang Sheng-Hui > Date: Thu Feb 28 02:05:56 2013 +0000 > > xfstests 276: fix error 'FIBMAP: Invalid argument' > > > Commit 05dadc0 ("Btrfs: add fiemap's flag check") added validity > checks to the fiemap flags and hence invalid flags are now being > rejected. Test 276 passes an invalid fiemap flag to btrfs, and so > that test fails since this commit was added. > > Btrfs doesn't support FIEMAP_FLAG_XATTR, which is enabled by -x option > of filefrag, and will fail with > 'FIBMAP: Invalid argument' > for 'filefrag -vx'. 'filefrag -vx' fails on btrfs with > 'FIEMAP failed with unsupported flags 2' > Remove the '-x' option. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -- Regards, Zhi Yong Wu From prvs=08581ce341=moha0019@tm.net.my Sun May 26 06:58:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=FREEMAIL_FORGED_REPLYTO, FREEMAIL_REPLYTO_END_DIGIT,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AA2E27F37 for ; Sun, 26 May 2013 06:58:46 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 85D66304051 for ; Sun, 26 May 2013 04:58:46 -0700 (PDT) X-ASG-Debug-ID: 1369569523-04cb6c474219e970001-NocioJ Received: from pp-out.tm.net.my (ipop3.tm.net.my [202.188.0.247]) by cuda.sgi.com with ESMTP id YsbaQOHzpvalnGTJ for ; Sun, 26 May 2013 04:58:44 -0700 (PDT) X-Barracuda-Envelope-From: prvs=08581ce341=moha0019@tm.net.my X-Barracuda-Apparent-Source-IP: 202.188.0.247 Received: from tm.net.my ([192.168.10.151]) by pp-outbound01.tm.net.my (8.14.4/8.14.4) with ESMTP id r4QBwRlD007410; Sun, 26 May 2013 19:58:27 +0800 Received: from [192.168.10.130] (Forwarded-For: [192.168.10.130]) by mstore2.secure.tmnet (mshttpd); Sun, 26 May 2013 12:58:27 +0100 From: Reply-To: hkyc121@yahoo.com.hk Message-ID: Date: Sun, 26 May 2013 12:58:27 +0100 X-Mailer: Sun Java(tm) System Messenger Express 6.2-8.04 (built Feb 28 2007) MIME-Version: 1.0 Content-Language: en Subject: Re: X-Accept-Language: en X-ASG-Orig-Subj: Re: Priority: normal Content-Type: multipart/alternative; boundary="--af7ee46b1810f439e75ab" X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8626,1.0.431,0.0.0000 definitions=2013-05-26_04:2013-05-24,2013-05-26,1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=20 spamscore=20 ipscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=6.0.2-1211240000 definitions=main-1305260087 X-Barracuda-Connect: ipop3.tm.net.my[202.188.0.247] X-Barracuda-Start-Time: 1369569523 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.41 X-Barracuda-Spam-Status: No, SCORE=1.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA298e, HTML_MESSAGE, MISSING_HEADERS, NO_REAL_NAME, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132074 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 1.21 MISSING_HEADERS Missing To: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header 0.20 BSF_SC7_SA298e Custom Rule SA298e To: undisclosed-recipients:; This is a multi-part message in MIME format. ----af7ee46b1810f439e75ab Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: 7bit ----af7ee46b1810f439e75ab Content-Type: text/html; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: 7bit
----af7ee46b1810f439e75ab-- From newyorktimes@ln-mail.com Sun May 26 07:10:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=ACT_NOW_CAPS,HTML_MESSAGE, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 624D97F37 for ; Sun, 26 May 2013 07:10:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5150C8F8033 for ; Sun, 26 May 2013 05:10:00 -0700 (PDT) X-ASG-Debug-ID: 1369570195-04cb6c474119ef80001-w1Z2WR Received: from nyt.ln-mail.com (nyt.ln-mail.com [216.242.230.111]) by cuda.sgi.com with ESMTP id ztCDDPiDifUDauly for ; Sun, 26 May 2013 05:09:55 -0700 (PDT) X-Barracuda-Envelope-From: newyorktimes@ln-mail.com X-Barracuda-Apparent-Source-IP: 216.242.230.111 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dk1; d=ln-mail.com; h=MIME-Version:Content-type:List-Unsubscribe:From:To:Subject:Message-ID:Date; i=NewYorkTimes@ln-mail.com; bh=QPPrf/a1jL6SPsY/jM63FesCfOw=; b=tnPLxiY3W4htCU3fDQQplI5geXHrkpCBP1zhfSVpcQF7XR8SnTFugTldnJsg5bNM0Un4qYoJpDMO 1An7OQI7G9WUmKfYm19TwAgi2jsOriNq0mf04FgnnD4w+mLiC56R2ipDe08qiPwdvWYwEJ32qZFL NcMac0htjdhUAa76tLQ= MIME-Version: 1.0 Content-type: multipart/alternative; boundary="001nevereditthisline002" x-job: 120829 List-Unsubscribe: From: "New York Times" To: linux-xfs@oss.sgi.com Subject: Memorial Day Sale: 50% Off for 16 weeks of a Times Subscription. Limited-Time Only Message-ID: <0.0.1A.20.1CE5A09EC6ACCB8.0@nyt.ln-mail.com> X-ASG-Orig-Subj: Memorial Day Sale: 50% Off for 16 weeks of a Times Subscription. Limited-Time Only Date: Sun, 26 May 2013 08:09:50 -0400 X-Barracuda-Connect: nyt.ln-mail.com[216.242.230.111] X-Barracuda-Start-Time: 1369570195 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=ACT_NOW_CAPS, BSF_SC5_SA161f, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132074 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 ACT_NOW_CAPS BODY: Talks about 'acting now' with capitals -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC5_SA161f Custom Rule SA161f --001nevereditthisline002 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit You are receiving this email because you have opted in to receive special online promotions and offers from Tabletweek. This message is from Tabletweek on behalf of the New York Times. Limited-time only: Save 50% for 16 weeks on a Times subscription: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW View in browser: http://www.ln-mail.com/ets/klc.asp?120829X2M20818473?e=linux-xfs@oss.sgi.com MEMORIAL DAY SALE SAVE 50% FOR 16 WEEKS on a Digital or Home Delivery Subscription. OFFER ENDS MAY 28* REDEEM SPECIAL OFFER: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW ----------------------------------------------------------------- 50% FOR 16 WEEKS! Unlimited access to: -- Unrivaled journalism -- Influential opinions -- Innovative multimedia REDEEM SPECIAL OFFER: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW It's our Memorial Day sale, so for a limited time only, celebrate with The Times and enjoy special savings of 50% for a full 16 weeks on a digital or home delivery subscription. By subscribing today, you'll stay on top of all the news that's important to you, covered by more than 1,000 of the world's finest journalists. You'll get the latest breaking news, reviews of the big summer movies and articles to help you make the very best travel plans. Choose from digital subscription options that include full access to our smartphone or tablet apps, or both. Or select one of our convenient home delivery options, such as 7-day delivery, The Weekender or Sunday delivery. All home delivery options come with free, unlimited access to NYTimes.com and our apps. ACT NOW. THIS SPECIAL OFFER ENDS MAY 28, 2013. REDEEM SPECIAL OFFER: http://www.nytimes.com/subscriptions/Multiproduct/lp3HY66.html?campaignId=3K3FW ----------------------------------------------------------------- *Offer expires on May 29, 2013, 9 a.m. E.D.T. Promotional offers valid for new subscribers only. New York Times digital subscriptions are sold separately from e-reader editions, Premium Crosswords and The New York Times Crosswords apps. Smartphone and tablet apps are not supported on all devices. Home Delivery Subscription options are available at the introductory rate of 50% off the regular rate for the first 16 weeks when paying by credit card. This introductory offer is valid only in areas served by The New York Times delivery service to readers who have not had home delivery of The New York Times within the past 90 days. At the end of your introductory period, delivery will continue at the regular rate unless you notify us otherwise. Prices are subject to change. Product availability and price may vary by region. Digital and home delivery subscriptions will automatically renew and the credit card will be charged in advance of each 4-week billing period unless canceled. If the subscription is canceled, refunds and termination of access will follow the Terms of Sale policy. Other restrictions and taxes may apply. To ensure delivery of e-mails from The New York Times, please add nytimes@email.nytimes.com to your address book. Privacy Policy: http://www.nytimes.com/content/help/rights/privacy/policy/privacy-policy.html Contact Us help@nytimes.com Unsubscribe: https://myaccount.nytimes.com/gst/unsub.html?email=linux-xfs@oss.sgi.com Copyright 2013 The New York Times Company P.O. Box 8041, Davenport, IA 52808-8041 You are receiving this message as part of Tabletweek. [ linux-xfs@oss.sgi.com ] The preceding is vendor information. If you no longer want to receive this type of information you may indicate that here http://www.ln-mail.com/r/km.asp?m=ZKqfqnXC&o=fZKqZP&j=Ygqggf&t=2&e=linux-xfs@oss.sgi.com 20818473 --001nevereditthisline002 Content-type: text/html; charset="US-ASCII" Content-transfer-encoding: 7bit
You are receiving this email because you have opted in to receive special online promotions and offers from Tabletweek. This message is from Tabletweek on behalf of the New York Times.

The New York Times Limited-time only: Save 50% for 16 weeks on a Times subscription.
View in browser.
Memorial Day Sale - Save 50% for 16 weeks.


It’s our Memorial Day sale, so for a limited time only, celebrate with The Times and enjoy special savings of 50% for a full 16 weeks on a digital or home delivery subscription.

By subscribing today, you’ll stay on top of all the news that’s important to you, covered by more than 1,000 of the world’s finest journalists. You’ll get the latest breaking news, reviews of the big summer movies and articles to help you make the very best travel plans.

Choose from digital subscription options that include full access to our smartphone or tablet apps, or both.

Or select one of our convenient home delivery options, such as 7-day delivery, The Weekender or Sunday delivery. All home delivery options come with free, unlimited access to NYTimes.com and our apps.

ACT NOW. THIS SPECIAL OFFER
ENDS MAY 28, 2013.

REDEEM SPECIAL OFFER


50% off for 16 weeks!

REDEEM SPECIAL OFFER
*Offer expires on May 29, 2013, 9 a.m. E.D.T. =

Promotional offers valid for new subscribers only. New York Times digital subscriptions are sold separately from e-reader editions, Premium Crosswords and The New York Times Crosswords apps. Smartphone and tablet apps are not supported on all devices.

Home Delivery Subscription options are available at the introductory rate of 50% off the regular rate for the first 16 weeks when paying by credit card. This introductory offer is valid only in areas served by The New York Times delivery service to readers who have not had home delivery of The New York Times within the past 90 days. At the end of your introductory period, delivery will continue at the regular rate unless you notify us otherwise. Prices are subject to change. Product availability and price may vary by region.

Digital and home delivery subscriptions will automatically renew and the credit card will be charged in advance of each 4-week billing period unless canceled. If the subscription is canceled, refunds and termination of access will follow the Terms of Sale policy. Other restrictions and taxes may apply.

To ensure delivery of e-mails from The New York Times, please add nytimes@email.nytimes.com to your address book.

Privacy Policy | Contact Us | Unsubscribe

© 2013 The New York Times Company | P.O. Box 8041, Davenport, IA 52808-8041



You are receiving this message as part of Tabletweek.

[ linux-xfs@oss.sgi.com ]
The preceding is vendor information.

If you no longer want to receive this type of information you may indicate that here
http://www.ln-mail.com/r/km.asp?m=ZKqfqnXC&o=fZKqZP&j=Ygqggf&t=2&e=linux-xfs@oss.sgi.com
20818473



--001nevereditthisline002-- From noreply@email.ch Sun May 26 08:18:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 95E1F7F37 for ; Sun, 26 May 2013 08:18:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2599FAC002 for ; Sun, 26 May 2013 06:18:01 -0700 (PDT) X-ASG-Debug-ID: 1369574275-04cbb0049c1a9670001-w1Z2WR Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id kY1ecE8sx9XKlxdf for ; Sun, 26 May 2013 06:17:56 -0700 (PDT) X-Barracuda-Envelope-From: noreply@email.ch X-Barracuda-Apparent-Source-IP: 150.101.137.145 Received: from vm-mail22.internode.on.net (HELO localhost) ([150.101.137.107]) by ipmail06.adl6.internode.on.net with ESMTP; 26 May 2013 22:47:55 +0930 MIME-Version: 1.0 X-Mailer: AtMail PHP 5.3 Message-ID: <62016.1369574274@internode.on.net> To: Reply-To: noreply@email.ch Content-Type: text/plain; charset="utf-8" X-Origin: 180.215.186.96 X-Atmail-Account: lpbulluss@internode.on.net Date: Sun, 26 May 2013 22:47:54 +0930 Subject: =?utf-8?B?VmHFoSB3ZWJtYWlsIGt2b3RhIGplIHByZW1hxaFpbyBwb3N0YXZsamVudSBrdm90dSBrb2phIGplIDJHQi4=?= From: =?utf-8?B?wqlXZWJtYWlsIEluYw==?= X-ASG-Orig-Subj: =?utf-8?B?VmHFoSB3ZWJtYWlsIGt2b3RhIGplIHByZW1hxaFpbyBwb3N0YXZsamVudSBrdm90dSBrb2phIGplIDJHQi4=?= Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369574275 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.00 X-Barracuda-Spam-Status: No, SCORE=2.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC3_MV0164 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132078 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 2.00 BSF_SC3_MV0164 Custom rule MV0164 Va=C5=A1 webmail kvota je prema=C5=A1io postavljenu kvotu koja je 2GB. =C5= =A1to trenutno=20=20 prikazuju na 2.3GB.=20=20 Da biste ponovno aktivirali i pove=C4=87anje kvote webmail molimo provjerit= i i=20=20 a=C5=BEurirati svoj webmail ra=C4=8Dun=20=20 Kako bi ponovno aktivirati i pove=C4=87ati svoj =E2=80=8B=E2=80=8Bwebmail k= votu klikom na link ispod.=20=20 =20=20 http://urlapkeszito.hu/urlap/6tcafd=20=20 =20=20 Ako to ne u=C4=8Dini, mo=C5=BEe do=C4=87i u otkazivanjem webmail ra=C4=8Dun= a.=20=20 Hvala i ispri=C4=8Davam se zbog neugodnosti=20=20 =C2=A9Webmail Inc Sva prava pridr=C5=BEana.=20=20 =20 =20 From sandeen@sandeen.net Sun May 26 12:35:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0350B7F37 for ; Sun, 26 May 2013 12:35:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7717FAC008 for ; Sun, 26 May 2013 10:35:03 -0700 (PDT) X-ASG-Debug-ID: 1369589701-04cb6c47411a8920001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id E4HY56oVcG3H1F8P for ; Sun, 26 May 2013 10:35:01 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 0D10363740DF; Sun, 26 May 2013 12:35:01 -0500 (CDT) Message-ID: <51A247C4.4050606@sandeen.net> Date: Sun, 26 May 2013 12:35:00 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Zhi Yong Wu CC: Rich Johnston , xfstests , linux-btrfs@vger.kernel.org, list.btrfs@jan-o-sch.net, Wang Sheng-Hui Subject: Re: [PATCH] xfstests 276: fix error 'FIBMAP: Invalid argument' References: <512DB284.1090806@gmail.com> <51363CE6.1010807@sgi.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests 276: fix error 'FIBMAP: Invalid argument' In-Reply-To: X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369589701 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/26/13 4:35 AM, Zhi Yong Wu wrote: > HI, > > This issue still exists when xfstests is run on debian although > xfstests has contained this patch. "this issue" must be different, then; same error ("Invalid argument") but it can no longer be due to the -x option to filefrag. There must be some other root cause. Needs investigation on the btrfs side. IOWs, this looks like it could be a regression in btrfs? -Eric > root@debian-i386:/home/zwu/xfstests# git describe > linux-v3.8-122-gdc75401 > root@debian-i386:/home/zwu/xfstests# uname -a > Linux debian-i386 3.10.0-rc2+ #3 SMP Sun May 26 14:04:13 CST 2013 > x86_64 GNU/Linux > root@debian-i386:/home/zwu/xfstests# > > - output mismatch (see /home/zwu/xfstests/results/btrfs/276.out.bad) > --- tests/btrfs/276.out 2013-05-25 15:09:01.000000000 +0000 > +++ /home/zwu/xfstests/results/btrfs/276.out.bad 2013-05-26 > 09:31:49.962876905 +0000 > @@ -1,3 +1,32393 @@ > QA output created by 276 > *** test backref walking > +FIBMAP: Invalid argument > +FIBMAP: Invalid argument > +FIBMAP: Invalid argument > +FIBMAP: Invalid argument > +FIBMAP: Invalid argument > ... > (Run 'diff -u tests/btrfs/276.out > /home/zwu/xfstests/results/btrfs/276.out.bad' to see the entire diff) > [ 3877.215268] device fsid 8367602a-14fa-49eb-aff0-44da1faa3b45 devid > 1 transid 239 /dev/vdb > [ 3877.218417] btrfs: disk space caching is enabled > Ran: btrfs/276 > Failures: btrfs/276 > Failed 1 of 1 tests > > On Wed, Mar 6, 2013 at 2:43 AM, Rich Johnston wrote: >> This patch has been committed. >> >> --Rich >> >> commit eba3a5206cd7f8df73d6e6dbf2bb0afca677fca8 >> Author: Wang Sheng-Hui >> Date: Thu Feb 28 02:05:56 2013 +0000 >> >> xfstests 276: fix error 'FIBMAP: Invalid argument' >> >> >> Commit 05dadc0 ("Btrfs: add fiemap's flag check") added validity >> checks to the fiemap flags and hence invalid flags are now being >> rejected. Test 276 passes an invalid fiemap flag to btrfs, and so >> that test fails since this commit was added. >> >> Btrfs doesn't support FIEMAP_FLAG_XATTR, which is enabled by -x option >> of filefrag, and will fail with >> 'FIBMAP: Invalid argument' >> for 'filefrag -vx'. 'filefrag -vx' fails on btrfs with >> 'FIEMAP failed with unsupported flags 2' >> Remove the '-x' option. >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > > > From mlsemon35@gmail.com Sun May 26 16:37:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5C9267F37 for ; Sun, 26 May 2013 16:37:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 218CA8F8037 for ; Sun, 26 May 2013 14:37:51 -0700 (PDT) X-ASG-Debug-ID: 1369604269-04bdf063bd164470001-NocioJ Received: from mail-gg0-f170.google.com (mail-gg0-f170.google.com [209.85.161.170]) by cuda.sgi.com with ESMTP id WIw7fdckMXa4IJPn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 26 May 2013 14:37:50 -0700 (PDT) X-Barracuda-Envelope-From: mlsemon35@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.161.170 X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.170] Received: by mail-gg0-f170.google.com with SMTP id s5so1811786ggc.15 for ; Sun, 26 May 2013 14:37:49 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.170] X-Barracuda-IPDD: Level1 [gmail.com/209.85.161.170] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=ejfSFy+V916NXJ8jhAqaAmNKrzmt4mC12f0uCL/uaS8=; b=UdpjpHWlkipgCbdX5LHbahYDCS0jSmJmWJBCQCjCbulPBrDhCP6PGvPoRzhBMkE4YB 8tgVRT9XUJpi0dnjqfED8NjnO7fteeiX+Gm8X/cYCln9x0TFpWhmP+1F/HsiOSDCS3ZG YE7E2J7kg1yZAtAnUq/fvKv11mtXyfUrpRdtT0V3bdj8jt9ClOzcq/Nx0WsEqaGVezZd 6/Ay2J5I2Z8PeNC1TkZRFYX9Arcq/Mzf489DLozqJt7UulQpbAC9T6Wfd4Np183CCF8s /AeQH06K60eGbVMIEW6A/kKTIvvvAqNwocJtdNpz4zKfYB6A7YdVqcwRim8lCJ/YJ6WE GysA== X-Received: by 10.236.82.46 with SMTP id n34mr13987823yhe.65.1369604269374; Sun, 26 May 2013 14:37:49 -0700 (PDT) Received: from [192.168.0.129] (rrcs-97-78-60-146.se.biz.rr.com. [97.78.60.146]) by mx.google.com with ESMTPSA id j64sm36669548yhj.25.2013.05.26.14.37.48 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 26 May 2013 14:37:48 -0700 (PDT) Message-ID: <51A280A5.6000507@gmail.com> Date: Sun, 26 May 2013 17:37:41 -0400 From: "Michael L. Semon" User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: zwu.kernel@gmail.com CC: xfs@oss.sgi.com, Zhi Yong Wu Subject: Re: [PATCH] xfstests: cleanup the codes related to h_chksum References: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: cleanup the codes related to h_chksum In-Reply-To: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-gg0-f170.google.com[209.85.161.170] X-Barracuda-Start-Time: 1369604269 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132112 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain On 05/25/2013 07:15 PM, zwu.kernel@gmail.com wrote: > From: Zhi Yong Wu > > Since h_chksum field has gone away, we should cleanup the related codes > > [CC] loggen > loggen.c: In function 'loggen_unmount': > loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > loggen.c: In function 'loggen_empty': > loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > > Signed-off-by: Zhi Yong Wu > --- > src/loggen.c | 2 -- > 1 files changed, 0 insertions(+), 2 deletions(-) > > diff --git a/src/loggen.c b/src/loggen.c > index 4b55667..522c917 100644 > --- a/src/loggen.c > +++ b/src/loggen.c > @@ -134,7 +134,6 @@ loggen_unmount(int count) > head->h_cycle = cpu_to_be32(param_cycle); > head->h_version = cpu_to_be32(1); > head->h_len = cpu_to_be32(20); > - head->h_chksum = cpu_to_be32(0); > head->h_prev_block = cpu_to_be32(-1); > head->h_num_logops = cpu_to_be32(1); > head->h_cycle_data[0] = cpu_to_be32(0xb0c0d0d0); > @@ -202,7 +201,6 @@ loggen_empty(int count) > sizeof(xfs_trans_header_t)+ > sizeof(xfs_buf_log_format_t)+ > sizeof(int)); > - head->h_chksum = cpu_to_be32(0); > head->h_prev_block = cpu_to_be32(-1); > head->h_num_logops = cpu_to_be32(5); > head->h_cycle_data[0] = cpu_to_be32(0xb0c0d0d0); > I've been taking a wild guess and changing "h_chksum" to "h_crc", just as a pure sysadmin hack to keep going. Is there more than one correct answer on this issue? Michael From david@fromorbit.com Sun May 26 17:43:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 71ED97F37 for ; Sun, 26 May 2013 17:43:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5D17730404E for ; Sun, 26 May 2013 15:43:44 -0700 (PDT) X-ASG-Debug-ID: 1369608222-04cb6c47411b1790001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id oArg2DtCT5rFBtTJ for ; Sun, 26 May 2013 15:43:42 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqsMAF6PolF5LKgC/2dsb2JhbABagwi9CYUiBAGBBBd0giMBAQQBOhwjBQsIAxgJJQ8FJQMhE4gHBbxiFo1qgR0Hg1QDlzqRQYMhKg Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail04.adl6.internode.on.net with ESMTP; 27 May 2013 08:13:41 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ugjf8-0007Tl-U8; Mon, 27 May 2013 08:43:38 +1000 Date: Mon, 27 May 2013 08:43:38 +1000 From: Dave Chinner To: Stan Hoeppner Cc: xfs@oss.sgi.com Subject: Re: XFS assertion from truncate. (3.10-rc2) Message-ID: <20130526224338.GL24543@dastard> X-ASG-Orig-Subj: Re: XFS assertion from truncate. (3.10-rc2) References: <20130522215454.GL29466@dastard> <20130523184948.GA11151@redhat.com> <20130523223038.GB24543@dastard> <20130524004906.GA21171@redhat.com> <20130524012625.GH24543@dastard> <20130524015219.GA28486@redhat.com> <20130524030300.GA30760@redhat.com> <20130524080300.GI24543@dastard> <51A044E5.1030105@sandeen.net> <51A05C96.1070101@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A05C96.1070101@hardwarefreak.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369608222 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132116 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, May 25, 2013 at 01:39:18AM -0500, Stan Hoeppner wrote: > On 5/24/2013 11:58 PM, Eric Sandeen wrote: > > On 5/24/13 3:03 AM, Dave Chinner wrote: > > > >> Right, patch below should fix the problem. > >> > >> What a frustrating bug. Now, where's my bottle of scotch? > > > > In your pantry, Dave. Next to the others! ;) Yeah, there's a few on the top shelf to choose from.... > Be careful with that stuff lest you have more bugs to fix. ;) The secret is to wait till the next day before posting the patches. > Heheh, how bout a T-Shirt: "Don't drink and code" on the front, Sorry, Stan, but you lost me at "Don't drink".... :) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 26 17:44:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 31DE97F37 for ; Sun, 26 May 2013 17:44:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B24A4AC001 for ; Sun, 26 May 2013 15:44:52 -0700 (PDT) X-ASG-Debug-ID: 1369608290-04cbb0049c1b99a0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Y4LVbNiPasQLnP2Z for ; Sun, 26 May 2013 15:44:51 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Aq8MAF6PolF5LKgC/2dsb2JhbABagwiDa7kehSIEAYEEF3SCIwEBBSMPASMjEAgDGAICBSECAg8FJQMhE4gMrAWQXRaBEIxagR0HgkGBEwOXOpFBgyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail04.adl6.internode.on.net with ESMTP; 27 May 2013 08:14:50 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UgjgH-0007Tu-IN; Mon, 27 May 2013 08:44:49 +1000 Date: Mon, 27 May 2013 08:44:49 +1000 From: Dave Chinner To: Zhi Yong Wu Cc: xfs@oss.sgi.com Subject: Re: xfsprogs: is it one issue? Message-ID: <20130526224449.GM24543@dastard> X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369608290 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132116 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 26, 2013 at 12:29:11AM +0800, Zhi Yong Wu wrote: > HI, > > Did anyone hit this issue? > > [root@f15 xfsprogs]# make > Building include > Building libxfs > [TEST] CRC32 > In file included from ../include/libxfs.h:584:0, > from crc32.c:36: > ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name ‘umode_t’ > gmake[2]: *** [crc32selftest] Error 1 > gmake[1]: *** [libxfs] Error 2 > make: *** [default] Error 2 Install the latest kernel headers package for your distro. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 26 17:48:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B72A67F37 for ; Sun, 26 May 2013 17:48:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 88D388F8035 for ; Sun, 26 May 2013 15:48:57 -0700 (PDT) X-ASG-Debug-ID: 1369608530-04bdf078161be1e0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id ROFjpfeE1WWRIwDP for ; Sun, 26 May 2013 15:48:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail04.adl6.internode.on.net with ESMTP; 27 May 2013 08:18:23 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UgjjR-0007US-9S; Mon, 27 May 2013 08:48:05 +1000 Date: Mon, 27 May 2013 08:48:05 +1000 From: Dave Chinner To: Zhi Yong Wu Cc: xfs@oss.sgi.com Subject: Re: xfsprogs: is it one issue? Message-ID: <20130526224805.GN24543@dastard> X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? References: <20130526224449.GM24543@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20130526224449.GM24543@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369608530 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132116 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 27, 2013 at 08:44:49AM +1000, Dave Chinner wrote: > On Sun, May 26, 2013 at 12:29:11AM +0800, Zhi Yong Wu wrote: > > HI, > > > > Did anyone hit this issue? > > > > [root@f15 xfsprogs]# make > > Building include > > Building libxfs > > [TEST] CRC32 > > In file included from ../include/libxfs.h:584:0, > > from crc32.c:36: > > ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name ‘umode_t’ > > gmake[2]: *** [crc32selftest] Error 1 > > gmake[1]: *** [libxfs] Error 2 > > make: *** [default] Error 2 > > Install the latest kernel headers package for your distro. Actually, on debian it's part of a libc-dev package: $ grep -r umode /usr/include |head -1 /usr/include/asm-generic/types.h:typedef unsigned short umode_t $ apt-file search /usr/include/asm-generic/types.h linux-libc-dev: /usr/include/asm-generic/types.h $ Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 26 18:11:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 949CE7F37 for ; Sun, 26 May 2013 18:11:28 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 83D928F8033 for ; Sun, 26 May 2013 16:11:25 -0700 (PDT) X-ASG-Debug-ID: 1369609883-04cbb0049e1ba410001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id NYN6GDMUMfY7wv1O for ; Sun, 26 May 2013 16:11:24 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqsMAK+VolF5LKgC/2dsb2JhbABagwi9DIUiBAGBAxd0giMBAQU6HCMQCAMYCSUPBSUDIROIDLxhFo1qgR0Hg1QDlzqRQYMhKoEuJA Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail04.adl6.internode.on.net with ESMTP; 27 May 2013 08:41:22 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ugk5y-0007XN-Ga; Mon, 27 May 2013 09:11:22 +1000 Date: Mon, 27 May 2013 09:11:22 +1000 From: Dave Chinner To: Zhi Yong Wu Cc: "Michael L. Semon" , xfs@oss.sgi.com Subject: Re: xfsprogs: is it one issue? Message-ID: <20130526231122.GO24543@dastard> X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? References: <51A1144A.4020600@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369609883 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132118 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, May 26, 2013 at 07:11:03AM +0800, Zhi Yong Wu wrote: > I remove the lines related to h_chksum, then it can work well, so i > guess that i should send out one patch to fix it. While it will make the code in loggen work the same (it just writes 0 to the field but the buffer is already zeroed) as it does now, it doesn't necessarily mean it works correctly. The current kernels validate the CRC and throw warnings if the CRC isn't correct, and CRC enabled kernels will simply refuse to mount. As it is, my test systems don't build loggen because HAVE_XLOG_ASSIGN_LSN isn't set by configure. It only gets set if there's an xfs/libxfs.h header file found in an include path. My guess is that you've run 'make install-qa' in the xfsprogs package at some time in the past, and that's why loggen is trying to be built. So Michael's quick hack to remove it just to make it compile at this point is probably appropriate... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun May 26 18:13:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 63D797F4C for ; Sun, 26 May 2013 18:13:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0F6B9AC001 for ; Sun, 26 May 2013 16:13:30 -0700 (PDT) X-ASG-Debug-ID: 1369610009-04bdf078161bebb0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id M6tQBJMs7lgsiShx for ; Sun, 26 May 2013 16:13:29 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail04.adl6.internode.on.net with ESMTP; 27 May 2013 08:43:02 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ugk7Y-0007Xq-7f; Mon, 27 May 2013 09:13:00 +1000 Date: Mon, 27 May 2013 09:13:00 +1000 From: Dave Chinner To: zwu.kernel@gmail.com Cc: xfs@oss.sgi.com, Zhi Yong Wu Subject: Re: [PATCH] xfstests: cleanup the codes related to h_chksum Message-ID: <20130526231300.GP24543@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: cleanup the codes related to h_chksum References: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1369610009 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132118 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sun, May 26, 2013 at 07:15:32AM +0800, zwu.kernel@gmail.com wrote: > From: Zhi Yong Wu > > Since h_chksum field has gone away, we should cleanup the related codes > > [CC] loggen > loggen.c: In function 'loggen_unmount': > loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > loggen.c: In function 'loggen_empty': > loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > > Signed-off-by: Zhi Yong Wu Looks fine. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From zwu.kernel@gmail.com Sun May 26 20:16:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1369D7F37 for ; Sun, 26 May 2013 20:16:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E6D9D8F8033 for ; Sun, 26 May 2013 18:16:44 -0700 (PDT) X-ASG-Debug-ID: 1369617403-04cbb0049d1bd860001-NocioJ Received: from mail-qa0-f47.google.com (mail-qa0-f47.google.com [209.85.216.47]) by cuda.sgi.com with ESMTP id npicUKloH7TpdwqL (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 26 May 2013 18:16:43 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.47 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.47] Received: by mail-qa0-f47.google.com with SMTP id o13so754812qaj.13 for ; Sun, 26 May 2013 18:16:43 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.47] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.47] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=chA8khOYkotg+fd2Oe5OBrmq0rvAOa0ZU1I1lDg7ebg=; b=kPylab/bKEN84Y+vSMK4q48MCyjgD9xF9iCnjp9p0wn48o90DhdpW8dJ9gjLlQvwDd LnHEv6OFZUS+7i9KqMKhq28mf4iAkNsNikjCapDtsL6vNayfy5vG9DDr7NxYX3/fBjPf JLx1LcSvaxGXRXzJE4N0v3ODIYRjopokPnNYAZ3PpXJ9FTozQs7eynfDi/Dm8iCNau+t t/ouxMrLvk167eRptn9RTVHOqbwPNaZSdQBauB9mY7hs1uzIN1J8DYhKck/1Ef3HTLo/ S9WCYi4ZdhhApTxQ3HDpJPJMbPmJB3SJnERlLIrA8DsgSV7CCMayZETg4kgeXbLD3XhO pIjg== MIME-Version: 1.0 X-Received: by 10.229.166.193 with SMTP id n1mr9699532qcy.113.1369617403289; Sun, 26 May 2013 18:16:43 -0700 (PDT) Received: by 10.49.48.166 with HTTP; Sun, 26 May 2013 18:16:43 -0700 (PDT) In-Reply-To: <20130526231122.GO24543@dastard> References: <51A1144A.4020600@gmail.com> <20130526231122.GO24543@dastard> Date: Mon, 27 May 2013 09:16:43 +0800 Message-ID: Subject: Re: xfsprogs: is it one issue? From: Zhi Yong Wu X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? To: Dave Chinner Cc: "Michael L. Semon" , xfstests Content-Type: multipart/alternative; boundary=e89a8f647595cd3f7d04dda8e679 X-Barracuda-Connect: mail-qa0-f47.google.com[209.85.216.47] X-Barracuda-Start-Time: 1369617403 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132126 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --e89a8f647595cd3f7d04dda8e679 Content-Type: text/plain; charset=ISO-8859-1 ah, another way by not building-in loggen, thanks. On Mon, May 27, 2013 at 7:11 AM, Dave Chinner wrote: > On Sun, May 26, 2013 at 07:11:03AM +0800, Zhi Yong Wu wrote: > > I remove the lines related to h_chksum, then it can work well, so i > > guess that i should send out one patch to fix it. > > While it will make the code in loggen work the same (it just writes > 0 to the field but the buffer is already zeroed) as it does now, > it doesn't necessarily mean it works correctly. The current kernels > validate the CRC and throw warnings if the CRC isn't correct, and > CRC enabled kernels will simply refuse to mount. > > As it is, my test systems don't build loggen because > HAVE_XLOG_ASSIGN_LSN isn't set by configure. It only gets set if > there's an xfs/libxfs.h header file found in an include path. My > guess is that you've run 'make install-qa' in the xfsprogs package > at some time in the past, and that's why loggen is trying to be > built. > > So Michael's quick hack to remove it just to make it compile at this > point is probably appropriate... > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > -- Regards, Zhi Yong Wu --e89a8f647595cd3f7d04dda8e679 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
ah, another way by not building-in loggen, thanks.


On Mon, May 27,= 2013 at 7:11 AM, Dave Chinner <david@fromorbit.com> wrote= :
On Sun, May 26, 2013 at 07= :11:03AM +0800, Zhi Yong Wu wrote:
> I remove the lines related to h_chksum, then it can work well, so i > guess that i should send out one patch to fix it.

While it will make the code in loggen work the same (it just writes 0 to the field but the buffer is already zeroed) as it does now,
it doesn't necessarily mean it works correctly. The current kernels
validate the CRC and throw warnings if the CRC isn't correct, and
CRC enabled kernels will simply refuse to mount.

As it is, my test systems don't build loggen because
HAVE_XLOG_ASSIGN_LSN isn't set by configure. It only gets set if
there's an xfs/libxfs.h header file found in an include path. My
guess is that you've run 'make install-qa' in the xfsprogs pack= age
at some time in the past, and that's why loggen is trying to be
built.

So Michael's quick hack to remove it just to make it compile at this point is probably appropriate...

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com



--
Regard= s,
=A0
Zhi Yong Wu
--e89a8f647595cd3f7d04dda8e679-- From zwu.kernel@gmail.com Sun May 26 20:17:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 04D527F37 for ; Sun, 26 May 2013 20:17:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CA5D48F8035 for ; Sun, 26 May 2013 18:17:38 -0700 (PDT) X-ASG-Debug-ID: 1369617453-04bdf078181c20e0001-NocioJ Received: from mail-qc0-f169.google.com (mail-qc0-f169.google.com [209.85.216.169]) by cuda.sgi.com with ESMTP id FmKq5bi2g9cZmgpZ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 26 May 2013 18:17:34 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.169 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.169] Received: by mail-qc0-f169.google.com with SMTP id k15so3297256qcv.0 for ; Sun, 26 May 2013 18:17:33 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.169] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.169] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=aO/JzNLETYzVqhc1Yh0YmnEa6wvQwVc5CLWil2HKHCw=; b=Xe3Kjpr8nrOHy8L4S022kPkzFpOggLkKeaOjWE4Uh/iAdIKemtd4HKHVmMzqI/zi+H thadC3Aimt4m7ZeccW6PGofcWSKBKK6CFUT/Zr3NCSMMzY6gm57Ihq8iJmnBmY7yM9Vo uiJEhRubpcVjwkznod0MXksbu8clkPDcSAn8ofZ1eeaOAQ3lxfkrvIDeSl6lp0mnmOo1 Wnh0ZyFX9KdWMfwen+/gRIJWfZpMaHT93q5JuVM18Tl7UXhRoNnuEbLqhvwRDb4W/GU2 UIfvVpZeqCNCI2ciN7dIsbvrvWO13zjdm5eJgYXJo+WHcFbYeLyt1qwHLCemG2cyE9bw IgsQ== MIME-Version: 1.0 X-Received: by 10.229.17.140 with SMTP id s12mr8389016qca.79.1369617453641; Sun, 26 May 2013 18:17:33 -0700 (PDT) Received: by 10.49.48.166 with HTTP; Sun, 26 May 2013 18:17:33 -0700 (PDT) In-Reply-To: <20130526224805.GN24543@dastard> References: <20130526224449.GM24543@dastard> <20130526224805.GN24543@dastard> Date: Mon, 27 May 2013 09:17:33 +0800 Message-ID: Subject: Re: xfsprogs: is it one issue? From: Zhi Yong Wu X-ASG-Orig-Subj: Re: xfsprogs: is it one issue? To: Dave Chinner Cc: xfstests Content-Type: multipart/alternative; boundary=0015175ce0bacdaef504dda8e994 X-Barracuda-Connect: mail-qc0-f169.google.com[209.85.216.169] X-Barracuda-Start-Time: 1369617454 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132126 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --0015175ce0bacdaef504dda8e994 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable It has been solved based on your suggestion, thanks On Mon, May 27, 2013 at 6:48 AM, Dave Chinner wrote: > On Mon, May 27, 2013 at 08:44:49AM +1000, Dave Chinner wrote: > > On Sun, May 26, 2013 at 12:29:11AM +0800, Zhi Yong Wu wrote: > > > HI, > > > > > > Did anyone hit this issue? > > > > > > [root@f15 xfsprogs]# make > > > Building include > > > Building libxfs > > > [TEST] CRC32 > > > In file included from ../include/libxfs.h:584:0, > > > from crc32.c:36: > > > ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name =91umode_t= =92 > > > gmake[2]: *** [crc32selftest] Error 1 > > > gmake[1]: *** [libxfs] Error 2 > > > make: *** [default] Error 2 > > > > Install the latest kernel headers package for your distro. > > Actually, on debian it's part of a libc-dev package: > > $ grep -r umode /usr/include |head -1 > /usr/include/asm-generic/types.h:typedef unsigned short umode_t > $ apt-file search /usr/include/asm-generic/types.h > linux-libc-dev: /usr/include/asm-generic/types.h > $ > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > --=20 Regards, Zhi Yong Wu --0015175ce0bacdaef504dda8e994 Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: quoted-printable
It has been solved based on your suggestion, thanks


On Mon, Ma= y 27, 2013 at 6:48 AM, Dave Chinner <david@fromorbit.com> = wrote:
On M= on, May 27, 2013 at 08:44:49AM +1000, Dave Chinner wrote:
> On Sun, May 26, 2013 at 12:29:11AM +0800, Zhi Yong Wu wrote:
> > HI,
> >
> > Did anyone hit this issue?
> >
> > [root@f15 xfsprogs]# make
> > Building include
> > Building libxfs
> > =A0 =A0 [TEST] =A0 =A0CRC32
> > In file included from ../include/libxfs.h:584:0,
> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0from crc32.c:36:
> > ../include/xfs/xfs_ialloc.h:75:2: error: unknown type name =91umo= de_t=92
> > gmake[2]: *** [crc32selftest] Error 1
> > gmake[1]: *** [libxfs] Error 2
> > make: *** [default] Error 2
>
> Install the latest kernel headers package for your distro.

Actually, on debian it's part of a libc-dev package:

$ grep -r umode /usr/include |head -1
/usr/include/asm-generic/types.h:typedef unsigned short umode_t
$ apt-file search /usr/include/asm-generic/types.h
linux-libc-dev: /usr/include/asm-generic/types.h
$

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com



--
Regard= s,
=A0
Zhi Yong Wu
--0015175ce0bacdaef504dda8e994-- From zwu.kernel@gmail.com Sun May 26 20:21:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 403657F37 for ; Sun, 26 May 2013 20:21:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 298298F8035 for ; Sun, 26 May 2013 18:21:07 -0700 (PDT) X-ASG-Debug-ID: 1369617665-04cbb0049e1bdb50001-NocioJ Received: from mail-qa0-f49.google.com (mail-qa0-f49.google.com [209.85.216.49]) by cuda.sgi.com with ESMTP id 6xbY5vaQMXQm2rqI (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 26 May 2013 18:21:06 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.49 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.49] Received: by mail-qa0-f49.google.com with SMTP id j11so750575qag.15 for ; Sun, 26 May 2013 18:21:05 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.49] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.49] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=Q+gKqFY43csNDEVSb+A7T0zdyn6VWetr0i7VOoO49qg=; b=oLOIOLUCPPxBfCwiFqrqAhWr8snfr7HcI+uVK5azWcNnYkThmCjUaCu65jk2Ze1yi8 7Hu7/QIEzm6KBSax7Bw3Zk8vWwc5ue6kjtU2jMNWkHTegxCtQsBSMSfWnMdUjHcFj3o6 kPf4a4a5tCdxWmH+t5lHUjUfRJl0mVLxWJU9EhJMN6DqsWPAyuCU95jQ8V0opCaYHq+H lTbhfHmTJGcyHLSnbNtohJb5GrSq6aGYZQa3Ttuj2RDrsddVGqZNOssaXRCnbBsgskvN mdgiyAZRUGAlWUSNvEux62h2TigpQO2cTcZqQDqnDSiNYqMfxRNzCcGnpFU1IY6yc5JP O/Xw== MIME-Version: 1.0 X-Received: by 10.229.69.194 with SMTP id a2mr9870885qcj.150.1369617665692; Sun, 26 May 2013 18:21:05 -0700 (PDT) Received: by 10.49.48.166 with HTTP; Sun, 26 May 2013 18:21:05 -0700 (PDT) In-Reply-To: <51A280A5.6000507@gmail.com> References: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> <51A280A5.6000507@gmail.com> Date: Mon, 27 May 2013 09:21:05 +0800 Message-ID: Subject: Re: [PATCH] xfstests: cleanup the codes related to h_chksum From: Zhi Yong Wu X-ASG-Orig-Subj: Re: [PATCH] xfstests: cleanup the codes related to h_chksum To: "Michael L. Semon" Cc: xfstests , Zhi Yong Wu Content-Type: multipart/alternative; boundary=001a11c251e871347404dda8f683 X-Barracuda-Connect: mail-qa0-f49.google.com[209.85.216.49] X-Barracuda-Start-Time: 1369617666 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132128 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain --001a11c251e871347404dda8f683 Content-Type: text/plain; charset=ISO-8859-1 HI, I don't think that this is one hacking, but one formal patch to fix this issue. On Mon, May 27, 2013 at 5:37 AM, Michael L. Semon wrote: > On 05/25/2013 07:15 PM, zwu.kernel@gmail.com wrote: > > From: Zhi Yong Wu > > > > Since h_chksum field has gone away, we should cleanup the related codes > > > > [CC] loggen > > loggen.c: In function 'loggen_unmount': > > loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > > loggen.c: In function 'loggen_empty': > > loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > > > > Signed-off-by: Zhi Yong Wu > > --- > > src/loggen.c | 2 -- > > 1 files changed, 0 insertions(+), 2 deletions(-) > > > > diff --git a/src/loggen.c b/src/loggen.c > > index 4b55667..522c917 100644 > > --- a/src/loggen.c > > +++ b/src/loggen.c > > @@ -134,7 +134,6 @@ loggen_unmount(int count) > > head->h_cycle = cpu_to_be32(param_cycle); > > head->h_version = cpu_to_be32(1); > > head->h_len = cpu_to_be32(20); > > - head->h_chksum = cpu_to_be32(0); > > head->h_prev_block = cpu_to_be32(-1); > > head->h_num_logops = cpu_to_be32(1); > > head->h_cycle_data[0] = cpu_to_be32(0xb0c0d0d0); > > @@ -202,7 +201,6 @@ loggen_empty(int count) > > > sizeof(xfs_trans_header_t)+ > > > sizeof(xfs_buf_log_format_t)+ > > sizeof(int)); > > - head->h_chksum = cpu_to_be32(0); > > head->h_prev_block = cpu_to_be32(-1); > > head->h_num_logops = cpu_to_be32(5); > > head->h_cycle_data[0] = cpu_to_be32(0xb0c0d0d0); > > > > I've been taking a wild guess and changing "h_chksum" to "h_crc", just > as a pure sysadmin hack to keep going. Is there more than one correct > answer on this issue? > > Michael > > -- Regards, Zhi Yong Wu --001a11c251e871347404dda8f683 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
HI,

I don't think that this is one h= acking, but one formal patch to fix this issue.


On Mon, May 27, 2013 at 5:37 AM= , Michael L. Semon <mlsemon35@gmail.com> wrote:
On 0= 5/25/2013 07:15 PM, zwu.kernel@gmai= l.com wrote:
> From: Zhi Yong Wu <wuzh= y@linux.vnet.ibm.com>
>
> =A0 Since h_chksum field has gone away, we should cleanup the related = codes
>
> =A0 =A0 [CC] =A0 =A0loggen
> loggen.c: In function 'loggen_unmount':
> loggen.c:137:9: error: 'xlog_rec_header_t' has no member named= 'h_chksum'
> loggen.c: In function 'loggen_empty':
> loggen.c:205:9: error: 'xlog_rec_header_t' has no member named= 'h_chksum'
>
> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> ---
> =A0src/loggen.c | =A0 =A02 --
> =A01 files changed, 0 insertions(+), 2 deletions(-)
>
> diff --git a/src/loggen.c b/src/loggen.c
> index 4b55667..522c917 100644
> --- a/src/loggen.c
> +++ b/src/loggen.c
> @@ -134,7 +134,6 @@ loggen_unmount(int count)
> =A0 =A0 =A0head->h_cycle =3D cpu_to_be32(param_cycle);
> =A0 =A0 =A0head->h_version =3D cpu_to_be32(1);
> =A0 =A0 =A0head->h_len =3D cpu_to_be32(20);
> - =A0 =A0head->h_chksum =3D cpu_to_be32(0);
> =A0 =A0 =A0head->h_prev_block =3D cpu_to_be32(-1);
> =A0 =A0 =A0head->h_num_logops =3D cpu_to_be32(1);
> =A0 =A0 =A0head->h_cycle_data[0] =3D cpu_to_be32(0xb0c0d0d0);
> @@ -202,7 +201,6 @@ loggen_empty(int count)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0sizeof(xfs_trans_header_t)+
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0sizeof(xfs_buf_log_format_t)+
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0sizeof(int));
> - =A0 =A0head->h_chksum =A0 =A0 =A0 =A0 =3D cpu_to_be32(0);
> =A0 =A0 =A0head->h_prev_block =A0 =A0 =3D cpu_to_be32(-1);
> =A0 =A0 =A0head->h_num_logops =A0 =A0 =3D cpu_to_be32(5);
> =A0 =A0 =A0head->h_cycle_data[0] =A0=3D cpu_to_be32(0xb0c0d0d0); >

I've been taking a wild guess and changing "h_chksum&q= uot; to "h_crc", just
as a pure sysadmin hack to keep going. =A0Is there more than one correct answer on this issue?

Michael




--
Rega= rds,
=A0
Zhi Yong Wu
--001a11c251e871347404dda8f683-- From zwu.kernel@gmail.com Sun May 26 21:02:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 09A2A7F37 for ; Sun, 26 May 2013 21:02:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D7458304039 for ; Sun, 26 May 2013 19:02:10 -0700 (PDT) X-ASG-Debug-ID: 1369620129-04cb6c473f1b6cc0001-NocioJ Received: from mail-qc0-f176.google.com (mail-qc0-f176.google.com [209.85.216.176]) by cuda.sgi.com with ESMTP id jF7UX52pxQOOTB1p (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 26 May 2013 19:02:09 -0700 (PDT) X-Barracuda-Envelope-From: zwu.kernel@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.176 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.176] Received: by mail-qc0-f176.google.com with SMTP id o10so3227746qcv.7 for ; Sun, 26 May 2013 19:02:09 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.176] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.176] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=MHl7ZbP4SNhgrTNf1VNYpMcciToBnTzcCJgMs02szJg=; b=SVVqhEom20WF3BWPdabEi/miPdS/1/KCpvwUCe93qAfRrYIpKSWgbx0Gat/Urwy3Fc hHhcf3e9vVz3LCtB+cPrngTPOqWXXikx/CkI7vK3l9tsyk3hu/DTeZh9vQwMj1vbmWQR DO82Cyr0wNu9PSsIoVKx05vwL+VUSM3tzpmMvbRrWOI3BbFCSXos0SeGsbSORXt/fwoF OFUTeiHNL2Nlt2N8yWsDJ6p0ObZrtyBPNOx030stvy7O26XlhNGUgcbrLwIJ5O8AjmcV JVh5ChGfqxjTHJ4uscQQsCaiUQJT5NdNnxOirY8DjdLAAlHp/padz0l3fB25pLkY3GwQ 46Ig== MIME-Version: 1.0 X-Received: by 10.49.75.99 with SMTP id b3mr29982595qew.11.1369620129067; Sun, 26 May 2013 19:02:09 -0700 (PDT) Received: by 10.49.48.166 with HTTP; Sun, 26 May 2013 19:02:08 -0700 (PDT) In-Reply-To: <51A247C4.4050606@sandeen.net> References: <512DB284.1090806@gmail.com> <51363CE6.1010807@sgi.com> <51A247C4.4050606@sandeen.net> Date: Mon, 27 May 2013 10:02:08 +0800 Message-ID: Subject: Re: [PATCH] xfstests 276: fix error 'FIBMAP: Invalid argument' From: Zhi Yong Wu X-ASG-Orig-Subj: Re: [PATCH] xfstests 276: fix error 'FIBMAP: Invalid argument' To: Eric Sandeen Cc: Rich Johnston , xfstests , linux-btrfs@vger.kernel.org, list.btrfs@jan-o-sch.net, Wang Sheng-Hui Content-Type: multipart/alternative; boundary=047d7bd752f64553ba04dda9890f X-Barracuda-Connect: mail-qc0-f176.google.com[209.85.216.176] X-Barracuda-Start-Time: 1369620129 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132130 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7bd752f64553ba04dda9890f Content-Type: text/plain; charset=ISO-8859-1 sigh, i a bit plan to give up btrfs work, and think that it's very difficult to reach that day when its code is stable. IOWs, its community operates not well. On Mon, May 27, 2013 at 1:35 AM, Eric Sandeen wrote: > On 5/26/13 4:35 AM, Zhi Yong Wu wrote: > > HI, > > > > This issue still exists when xfstests is run on debian although > > xfstests has contained this patch. > > "this issue" must be different, then; same error ("Invalid argument") > but it can no longer be due to the -x option to filefrag. There > must be some other root cause. > > Needs investigation on the btrfs side. IOWs, this looks like > it could be a regression in btrfs? > > -Eric > > > root@debian-i386:/home/zwu/xfstests# git describe > > linux-v3.8-122-gdc75401 > > root@debian-i386:/home/zwu/xfstests# uname -a > > Linux debian-i386 3.10.0-rc2+ #3 SMP Sun May 26 14:04:13 CST 2013 > > x86_64 GNU/Linux > > root@debian-i386:/home/zwu/xfstests# > > > > - output mismatch (see /home/zwu/xfstests/results/btrfs/276.out.bad) > > --- tests/btrfs/276.out 2013-05-25 15:09:01.000000000 +0000 > > +++ /home/zwu/xfstests/results/btrfs/276.out.bad 2013-05-26 > > 09:31:49.962876905 +0000 > > @@ -1,3 +1,32393 @@ > > QA output created by 276 > > *** test backref walking > > +FIBMAP: Invalid argument > > +FIBMAP: Invalid argument > > +FIBMAP: Invalid argument > > +FIBMAP: Invalid argument > > +FIBMAP: Invalid argument > > ... > > (Run 'diff -u tests/btrfs/276.out > > /home/zwu/xfstests/results/btrfs/276.out.bad' to see the entire diff) > > [ 3877.215268] device fsid 8367602a-14fa-49eb-aff0-44da1faa3b45 devid > > 1 transid 239 /dev/vdb > > [ 3877.218417] btrfs: disk space caching is enabled > > Ran: btrfs/276 > > Failures: btrfs/276 > > Failed 1 of 1 tests > > > > On Wed, Mar 6, 2013 at 2:43 AM, Rich Johnston wrote: > >> This patch has been committed. > >> > >> --Rich > >> > >> commit eba3a5206cd7f8df73d6e6dbf2bb0afca677fca8 > >> Author: Wang Sheng-Hui > >> Date: Thu Feb 28 02:05:56 2013 +0000 > >> > >> xfstests 276: fix error 'FIBMAP: Invalid argument' > >> > >> > >> Commit 05dadc0 ("Btrfs: add fiemap's flag check") added validity > >> checks to the fiemap flags and hence invalid flags are now being > >> rejected. Test 276 passes an invalid fiemap flag to btrfs, and so > >> that test fails since this commit was added. > >> > >> Btrfs doesn't support FIEMAP_FLAG_XATTR, which is enabled by -x > option > >> of filefrag, and will fail with > >> 'FIBMAP: Invalid argument' > >> for 'filefrag -vx'. 'filefrag -vx' fails on btrfs with > >> 'FIEMAP failed with unsupported flags 2' > >> Remove the '-x' option. > >> > >> _______________________________________________ > >> xfs mailing list > >> xfs@oss.sgi.com > >> http://oss.sgi.com/mailman/listinfo/xfs > > > > > > > > -- Regards, Zhi Yong Wu --047d7bd752f64553ba04dda9890f Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
sigh, i a bit plan to give up btrfs work, and think that i= t's very difficult to reach that day when its code is stable. IOWs, its= community operates not well.


<= div class=3D"gmail_quote"> On Mon, May 27, 2013 at 1:35 AM, Eric Sandeen <sandeen@sandeen.net&g= t; wrote:
On 5/26/13 4:35 AM, Zhi Yong Wu wrote:
> HI,
>
> =A0 This issue still exists when xfstests is run on debian although > xfstests has contained this patch.

"this issue" must be different, then; same error ("Inv= alid argument")
but it can no longer be due to the -x option to filefrag. =A0There
must be some other root cause.

Needs investigation on the btrfs side. =A0IOWs, this looks like
it could be a regression in btrfs?

-Eric

> root@debian-i386:/home/zwu/xfstests# git describe
> linux-v3.8-122-gdc75401
> root@debian-i386:/home/zwu/xfstests# uname -a
> Linux debian-i386 3.10.0-rc2+ #3 SMP Sun May 26 14:04:13 CST 2013
> x86_64 GNU/Linux
> root@debian-i386:/home/zwu/xfstests#
>
> =A0- output mismatch (see /home/zwu/xfstests/results/btrfs/276.out.bad= )
> =A0 =A0 --- tests/btrfs/276.out =A0 =A02013-05-25 15:09:01.000000000 += 0000
> =A0 =A0 +++ /home/zwu/xfstests/results/btrfs/276.out.bad =A0 =A02013-0= 5-26
> 09:31:49.962876905 +0000
> =A0 =A0 @@ -1,3 +1,32393 @@
> =A0 =A0 =A0QA output created by 276
> =A0 =A0 =A0*** test backref walking
> =A0 =A0 +FIBMAP: Invalid argument
> =A0 =A0 +FIBMAP: Invalid argument
> =A0 =A0 +FIBMAP: Invalid argument
> =A0 =A0 +FIBMAP: Invalid argument
> =A0 =A0 +FIBMAP: Invalid argument
> =A0 =A0 =A0...
> =A0 =A0 =A0(Run 'diff -u tests/btrfs/276.out
> /home/zwu/xfstests/results/btrfs/276.out.bad' to see the entire di= ff)
> [ 3877.215268] device fsid 8367602a-14fa-49eb-aff0-44da1faa3b45 devid<= br> > 1 transid 239 /dev/vdb
> [ 3877.218417] btrfs: disk space caching is enabled
> Ran: btrfs/276
> Failures: btrfs/276
> Failed 1 of 1 tests
>
> On Wed, Mar 6, 2013 at 2:43 AM, Rich Johnston <rjohnston@sgi.com> wrote:
>> This patch has been committed.
>>
>> --Rich
>>
>> commit eba3a5206cd7f8df73d6e6dbf2bb0afca677fca8
>> Author: Wang Sheng-Hui <shh= uiw@gmail.com>
>> Date: =A0 Thu Feb 28 02:05:56 2013 +0000
>>
>> =A0 =A0 xfstests 276: fix error 'FIBMAP: Invalid argument'=
>>
>>
>> =A0 =A0 Commit 05dadc0 ("Btrfs: add fiemap's flag check&q= uot;) added validity
>> =A0 =A0 checks to the fiemap flags and hence invalid flags are now= being
>> =A0 =A0 rejected. Test 276 passes an invalid fiemap flag to btrfs,= and so
>> =A0 =A0 that test fails since this commit was added.
>>
>> =A0 =A0 Btrfs doesn't support FIEMAP_FLAG_XATTR, which is enab= led by -x option
>> =A0 =A0 of filefrag, and will fail with
>> =A0 =A0 =A0 =A0 'FIBMAP: Invalid argument'
>> =A0 =A0 for 'filefrag -vx'. 'filefrag -vx' fails o= n btrfs with
>> =A0 =A0 =A0 =A0 =A0'FIEMAP failed with unsupported flags 2'= ;
>> =A0 =A0 Remove the '-x' option.
>>
>> _______________________________________________
>> xfs mailing list
>> xfs@oss.sgi.com
>> http://oss.sgi.com/mailman/listinfo/xfs
>
>
>




--
Regard= s,
=A0
Zhi Yong Wu
--047d7bd752f64553ba04dda9890f-- From david@fromorbit.com Mon May 27 00:36:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 415337F37 for ; Mon, 27 May 2013 00:36:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A0DC7AC004 for ; Sun, 26 May 2013 22:36:16 -0700 (PDT) X-ASG-Debug-ID: 1369632972-04cbb0049e1c68c0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id WRM9xbt2MVRYhZt4 for ; Sun, 26 May 2013 22:36:13 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnkQALjvolF5LKgC/2dsb2JhbABAGoMIMLxehSIBAwGBAxd0giMBAQQBOhwjBQcECAMRBAEBAQklDwUlAxMOE4gHBQ0zvDsWjVsPQTodBQcGg04DlzqBKpAXgyEqgS0 Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 15:06:11 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ugq6K-00089T-Lw; Mon, 27 May 2013 15:36:08 +1000 Date: Mon, 27 May 2013 15:36:08 +1000 From: Dave Chinner To: CAI Qian Cc: xfs@oss.sgi.com, stable@vger.kernel.org Subject: Re: 3.9.3: Oops running xfstests Message-ID: <20130527053608.GS29466@dastard> X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <986348673.5787542.1369385526612.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369632972 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132144 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Fri, May 24, 2013 at 04:52:06AM -0400, CAI Qian wrote: > > > ----- Original Message ----- > > From: "Dave Chinner" > > To: "CAI Qian" > > Cc: xfs@oss.sgi.com, stable@vger.kernel.org > > Sent: Thursday, May 23, 2013 11:51:15 AM > > Subject: Re: 3.9.3: Oops running xfstests > > > > On Wed, May 22, 2013 at 11:21:17PM -0400, CAI Qian wrote: > > > Fedora-19 based distro and LVM partitions. > > > > Cai: As I've asked previously please include all the relevant > > information about your test system and the workload it is running > > when the problem occurs. Stack traces aren't any good to us in > > isolation, and just dumping them on us causes unnecessary round > > trips. > > > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > Sometimes, those information is going to drive me crazy due to the > amount of information need to gather from a system that been already > returned to the automation testing system pool and I never have access > to it anymore. So automate the collection of all the static information. > Some of the information has like very little percentage > of the relevant as far as I can tell. I knew sometimes that 1% percentage > does count but the amount of efforts need to gather that 1% just crazy. :) It answers basic questions about your system: - how many CPUs - how much RAM - kernel version, userspace xfs utilities version - mount option - filesystem size - filesystem configuration - storage configuration - storage hardware - error messages that are occurring. Whether you consider that irrelevant information doesn't matter. They fact is that it is basic information that *we need* to understand what your environment is that reproduced the problem. If you don't supply that information, we can't even begin to triage the problem. > Since we have been in the same company, feel free to ping me and I can > give you the instruction to access the system and reproducer for it. Also, I don't scale to manually gathering information from every person that reports a problem. My time is far better spent reviewing information and asking for more than it is gathering information. > I have been reproduced this on several x64 systems and nothing special "nothing special". You say that a lot. You are giving you opinion abou tyour hardware, leaving me with no information to determine whether there is anything special about myself. I don't want your opinion - I want *data*. > I will provide the information as far I knew for now. > - kernel version (uname -a): 3.9.3 > - xfsprogs version (xfs_repair -V): Fedora-19 xfsprogs-3.1.10 > - number of CPUs: 8 What type of CPUs? That's why we ask for /proc/cpuinfo.... > - contents of /proc/mounts: nothing special. Just Fedora-19 autopart What are the contents? > - contents of /proc/partitions: nothing special. Just Fedora-19 autopart Contents, please. > - RAID layout (hardware and/or software): > Nothing special, You say nothing special. I see: > 06:21:51,812 INFO kernel:[ 27.480775] mptsas: ioc0: attaching ssp device: fw_channel 0, fw_id 0, phy 0, sas_addr 0x500000e0130ddbe2 > 06:21:51,812 NOTICE kernel:[ 27.539634] scsi 0:0:0:0: Direct-Access IBM-ESXS MAY2073RC T107 PQ: 0 ANSI: 5 > 06:21:51,812 INFO kernel:[ 27.592421] mptsas: ioc0: attaching ssp device: fw_channel 0, fw_id 1, phy 1, sas_addr 0x500000e0130fa8f2 > 06:21:51,812 NOTICE kernel:[ 27.651334] scsi 0:0:1:0: Direct-Access IBM-ESXS MAY2073RC T107 PQ: 0 ANSI: 5 Hardware RAID of some kind. So, details, please. Indeed, googling for "IBM-ESXS MAY2073RC" turns up this lovely link: http://webcache.googleusercontent.com/search?client=safari&rls=x86_64&q=cache:dD2J_ZuKGF4J:http://www.ibm.com/support/entry/portal/docdisplay%3Flndocid%3DMIGR-5078767%2BIBM-ESXS+MAY2073RC&oe=UTF-8&redir_esc=&hl=en&ct=clnk "Corrects firmware defect that can cause data corruption" http://www-947.ibm.com/support/entry/portal/docdisplay?lndocid=MIGR-5092677 "Additional Information A subset of optional IBM Options hard drive shipped between April 2010 and January 2013 running firmware levels A3C2, A3C0, A3BE, or A3B8 may be exposed to a possible undetected data loss or data error during a proximal write." That might be relevant to a filesystem corruption problem, yes? Start to understand why we ask for basic information about your hardware now? > - LVM configuration: nothing special. Just Fedora-19 autopart. The below information > from the installation time. Later, everything been formatted to XFS. Manually? > name = vg_ibmls4102-lv_root status = True kids = 0 id = 7 > parents = ['existing 139508MB lvmvg vg_ibmls4102 (3)'] > uuid = wVn1JV-DQ4U-vXHD-liJi-kX0M-O6eA-geU4gs size = 51200.0 > format = existing ext4 filesystem > major = 0 minor = 0 exists = True protected = False > sysfs path = /devices/virtual/block/dm-1 partedDevice = parted.Device instance -- > model: Linux device-mapper (linear) path: /dev/mapper/vg_ibmls4102-lv_root type: 12 ..... Ugh. That's unreadable..... > PVs = ['existing 69505MB partition sda2 (2) with existing lvmpv', > 'existing 70005MB partition sdb1 (5) with existing lvmpv'] > LVs = ['existing 71028MB lvmlv vg_ibmls4102-lv_home (6) with existing ext4 filesystem', > 'existing 51200MB lvmlv vg_ibmls4102-lv_root (7) with existing ext4 filesystem', > 'existing 17280MB lvmlv vg_ibmls4102-lv_swap (8) with existing swap'] But what I see here is that there are partitions and LVM, and everything is using ext4. That's not useful to me. What I'm after is the output of pvdisplay, vgdisplay and lvdisplay. That's not very hard... > - type of disks you are using: nothing special Do you really think they are nothing special now after reading the above information? > - write cache status of drives: missed; need to reprovision the system. > - size of BBWC and mode it is running in: missed; need to reprovision the system. > - xfs_info output on the filesystem in question: missed; need to reprovision the system. > - dmesg output showing all error messages and stack traces: > http://people.redhat.com/qcai/stable/console.txt Looking at dmesg output (next time, please, just dmesg) there's been kernel modules bounced in and out of the kernel so all the kernel modules are force loaded. You've run trinity on this system for at least several hours before running other tests, which has left who-knows what mess behind in memory. It's been OOMed at least 15 times and it's been up and running under test workloads for over 24 hours before I see the first XFS filesystem get mounted. The PID that has tripped over the attribute problem is called "comm" which means it is unrelated to xfstests. And in processing the oops, a pair of slab corruptions in the DRM subsystem is detected, which kind of points at large scale memory corruption unrelated to XFS. That's most likely, because I've already pointed out memory corruption way outside XFS is occurring: > > > ============================================================================= > > > [ 304.898489] BUG kmalloc-4096 (Tainted: G D ): Padding > > > overwritten. 0xffff8801fbeb7c28-0xffff8801fbeb7fff > > > [ 304.898490] > > > ----------------------------------------------------------------------------- > > > [ 304.898490] > > > [ 304.898491] INFO: Slab 0xffffea0007efac00 objects=7 used=7 fp=0x > > > (null) flags=0x20000000004080 > > > [ 304.898492] Pid: 357, comm: systemd-udevd Tainted: G B D 3.9.3 > > > #1 > > > [ 304.898492] Call Trace: > > > [ 304.898495] [] slab_err+0xc2/0xf0 > > > [ 304.898497] [] ? init_object+0x3d/0x70 > > > [ 304.898498] [] slab_pad_check.part.41+0xf5/0x170 > > > [ 304.898500] [] ? seq_read+0x2e3/0x3b0 > > > [ 304.898501] [] check_slab+0x73/0x100 > > > [ 304.898503] [] alloc_debug_processing+0x21/0x118 > > > [ 304.898504] [] __slab_alloc+0x3b8/0x4a2 > > > [ 304.898506] [] ? vma_link+0xb7/0xc0 > > > [ 304.898508] [] ? seq_read+0x2e3/0x3b0 > > > [ 304.898509] [] kmem_cache_alloc_trace+0x1b1/0x200 > > > [ 304.898510] [] seq_read+0x2e3/0x3b0 > > > [ 304.898512] [] vfs_read+0x9c/0x170 > > > [ 304.898513] [] sys_read+0x49/0xa0 > > > [ 304.898514] [] system_call_fastpath+0x16/0x1b > > > > That's something different, and indicates memory corruption is being > > seen as a result of something that is occuring through the /proc or > > /sys filesystems. Unrelated to XFS, I think... So, can you reproduce this problem on a clean, *pristine* system that hasn't been used for destructive testing for 24 hours prior to running xfstests? Cheers, Dave. -- Dave Chinner david@fromorbit.com From qcai@redhat.com Mon May 27 01:04:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B60F729DF8 for ; Mon, 27 May 2013 01:04:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 77FC330404E for ; Sun, 26 May 2013 23:04:52 -0700 (PDT) X-ASG-Debug-ID: 1369634690-04bdf063bd175de0001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id iSeyIlcJW4sR9Jtw for ; Sun, 26 May 2013 23:04:51 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4R64mZv016142; Mon, 27 May 2013 02:04:48 -0400 Date: Mon, 27 May 2013 02:04:47 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: xfs@oss.sgi.com, stable@vger.kernel.org Message-ID: <1255895779.6805491.1369634687715.JavaMail.root@redhat.com> In-Reply-To: <20130527053608.GS29466@dastard> References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> Subject: Re: 3.9.3: Oops running xfstests MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: D1hycCl61Bd5WjshfkRIFuTVcQ2qJA== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369634690 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132146 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi, > So automate the collection of all the static information. Yes, that probably the best to do. > > I will provide the information as far I knew for now. > > - kernel version (uname -a): 3.9.3 > > - xfsprogs version (xfs_repair -V): Fedora-19 xfsprogs-3.1.10 > > - number of CPUs: 8 > > What type of CPUs? That's why we ask for /proc/cpuinfo.... Reproduced on both, Dual-Core AMD Opteron(tm) Processor 8218 and Intel(R) Xeon(R) CPU E31220 @ 3.10GHz. > > > - RAID layout (hardware and/or software): > > Nothing special, > > You say nothing special. I see: > > > 06:21:51,812 INFO kernel:[ 27.480775] mptsas: ioc0: attaching ssp device: > > fw_channel 0, fw_id 0, phy 0, sas_addr 0x500000e0130ddbe2 > > 06:21:51,812 NOTICE kernel:[ 27.539634] scsi 0:0:0:0: Direct-Access > > IBM-ESXS MAY2073RC T107 PQ: 0 ANSI: 5 > > 06:21:51,812 INFO kernel:[ 27.592421] mptsas: ioc0: attaching ssp device: > > fw_channel 0, fw_id 1, phy 1, sas_addr 0x500000e0130fa8f2 > > 06:21:51,812 NOTICE kernel:[ 27.651334] scsi 0:0:1:0: Direct-Access > > IBM-ESXS MAY2073RC T107 PQ: 0 ANSI: 5 > > Hardware RAID of some kind. So, details, please. Indeed, googling > for "IBM-ESXS MAY2073RC" turns up this lovely link: > > http://webcache.googleusercontent.com/search?client=safari&rls=x86_64&q=cache:dD2J_ZuKGF4J:http://www.ibm.com/support/entry/portal/docdisplay%3Flndocid%3DMIGR-5078767%2BIBM-ESXS+MAY2073RC&oe=UTF-8&redir_esc=&hl=en&ct=clnk > > "Corrects firmware defect that can cause data corruption" > > http://www-947.ibm.com/support/entry/portal/docdisplay?lndocid=MIGR-5092677 > > "Additional Information > A subset of optional IBM Options hard drive shipped between April > 2010 and January 2013 running firmware levels A3C2, A3C0, A3BE, or > A3B8 may be exposed to a possible undetected data loss or data error > during a proximal write." > > > That might be relevant to a filesystem corruption problem, yes? > Start to understand why we ask for basic information about your > hardware now? OK, and this was also reproduced on, [ 9.778658] hpsa 0000:04:00.0: hpsa0: <0x323a> at IRQ 43 using DAC [ 9.796557] [TTM] Zone kernel: Available graphics memory: 4066866 kiB [ 9.796558] [TTM] Zone dma32: Available graphics memory: 2097152 kiB [ 9.796558] [TTM] Initializing pool allocator [ 9.796594] [TTM] Initializing DMA pool allocator [ 9.930529] scsi0 : ata_piix [ 9.934804] scsi1 : ata_piix [ 9.937735]SATA max UDMA/133 cmd 0x1400 ctl 0x1408 bmdma 0x1420 irq 17 [ 10.143857] fbcon: mgadrmfb (fb0) is primary device [ 10.143943] ata2: SATA max UDMA/133 cmd 0x1410 ctl 0x1418 bmdma 0x1428 irq 17 [ 10.146870] scsi2 : hpsa [ 10.146900] ata_piix 0000:00:1f.5: MAP [ [ 10.146901] P0 -- P1 -- ] [ 10.149376] scsi3 : ata_piix [ 10.151329] scsi4 : ata_piix [ 10.151702] ata3: SATA max UDMA/133 cmd 0x1440 ctl 0x1448 bmdma 0x1460 irq 17 [ 10.151705] ata4: SATA max UDMA/133 cmd 0x1450 ctl 0x1458 bmdma 0x1468 irq 17 [ 10.152789] hpsa 0000:04:00.0: RAID device c2b3t0l0 added. [ 10.152790] hpsa 0000:04:00.0: Direct-Access device c2b0t0l0 added. [ 10.153206] scsi 2:3:0:0: RAID HP P410 5.14 PQ: 0 ANSI: 5 [ 10.153563] scsi 2:0:0:0: Direct-Access HP LOGICAL VOLUME 5.14 PQ: 0 ANSI: 5 [ 10.213887] [drm] mga base 0 [ 10.285126] Console: switching to colour frame buffer device 128x48 [ 10.387399] mgag200 0000:01:00.1: fb0: mgadrmfb frame buffer device [ 10.387399] mgag200 0000:01:00.1: registered panic notifier [ 10.387441] [drm] Initialized mgag200 1.0.0 20110418 for 0000:01:00.1 on minor 0 [ 10.469431] ata3: SATA link down (SStatus 0 SControl 300) [ 10.508564] ata4: SATA link down (SStatus 0 SControl 300) [ 10.765662] ata2.00: SATA link down (SStatus 0 SControl 300) [ 10.793575] ata2.01: SATA link down (SStatus 0 SControl 300) [ 10.833455] ata1.00: SATA link down (SStatus 0 SControl 300) [ 10.861780] ata1.01: SATA link down (SStatus 0 SControl 300) [ 10.900174] sd 2:0:0:0: [sda] 143305920 512-byte logical blocks: (73.3 GB/68.3 GiB) [ 10.940769] sd 2:0:0:0: [sda] Write Protect is off [ 10.965161] sd 2:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 11.013492] sda: sda1 sda2 [ 11.029787] sd 2:0:0:0: [sda] Attached SCSI disk [ 11.288535] bio: create slab at 1 > > > - LVM configuration: nothing special. Just Fedora-19 autopart. The below > > information > > from the installation time. Later, everything been formatted to XFS. > > Manually? Partitioning and formatting during the installation time using kickstart files. > So, can you reproduce this problem on a clean, *pristine* system > that hasn't been used for destructive testing for 24 hours prior to > running xfstests? Yes, I can try that and let you know if I can. Regards, CAI Qian From dave@fromorbit.com Mon May 27 01:38:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DB9FA29DF8 for ; Mon, 27 May 2013 01:38:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A79D1304039 for ; Sun, 26 May 2013 23:38:45 -0700 (PDT) X-ASG-Debug-ID: 1369636723-04bdf078171cef00001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id z6XUrdXtA4kDwo09 for ; Sun, 26 May 2013 23:38:43 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELANz+olF5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQUnLzMIGBgZOQMbGYgMvH+OAIEuDIM+A6h7gyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4f-0008FX-O7 for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4f-0003x7-Kt for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/9] xfs: fix incorrect remote symlink block count Date: Mon, 27 May 2013 16:38:20 +1000 X-ASG-Orig-Subj: [PATCH 2/9] xfs: fix incorrect remote symlink block count Message-Id: <1369636707-15150-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636723 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When CRCs are enabled, the number of blocks needed to hold a remote symlink on a 1k block size filesystem may be 2 instead of 1. The transaction reservation for the allocated bloks was not taking this into account and only allocating one block. hence when trying to read or invalidate such symlinks, we are mapping a hole where there should be a block and things go bad at that point. Fix the reservation to use the correct block count, clean up the block count calculation similar to the remote attribute calculation, and add a debug guard to detect when we don't write the entire symlink to disk. Signed-off-by: Dave Chinner --- fs/xfs/xfs_symlink.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 5f234389..195a403 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c @@ -56,16 +56,9 @@ xfs_symlink_blocks( struct xfs_mount *mp, int pathlen) { - int fsblocks = 0; - int len = pathlen; + int buflen = XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); - do { - fsblocks++; - len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); - } while (len > 0); - - ASSERT(fsblocks <= XFS_SYMLINK_MAPS); - return fsblocks; + return (pathlen + buflen - 1) / buflen; } static int @@ -405,7 +398,7 @@ xfs_symlink( if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) fs_blocks = 0; else - fs_blocks = XFS_B_TO_FSB(mp, pathlen); + fs_blocks = xfs_symlink_blocks(mp, pathlen); resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); @@ -512,7 +505,7 @@ xfs_symlink( cur_chunk = target_path; offset = 0; for (n = 0; n < nmaps; n++) { - char *buf; + char *buf; d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); @@ -525,9 +518,7 @@ xfs_symlink( bp->b_ops = &xfs_symlink_buf_ops; byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); - if (pathlen < byte_cnt) { - byte_cnt = pathlen; - } + byte_cnt = min(byte_cnt, pathlen); buf = bp->b_addr; buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, @@ -542,6 +533,7 @@ xfs_symlink( xfs_trans_log_buf(tp, bp, 0, (buf + byte_cnt - 1) - (char *)bp->b_addr); } + ASSERT(pathlen == 0); } /* -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E139929E06 for ; Mon, 27 May 2013 01:38:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id BF9C6304039 for ; Sun, 26 May 2013 23:38:48 -0700 (PDT) X-ASG-Debug-ID: 1369636723-04bdf078171cef00003-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id gyTXbUxc0MomOvaD for ; Sun, 26 May 2013 23:38:47 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As4LANz+olF5LKgC/2dsb2JhbABagwjCLwSBBBd0gwA7gQIDiECdCZ92jgCBOoM+A6h7gyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:40 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008FV-MH for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4f-0003x0-Hn for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATH 0/9] xfs: fixes for 3.10-rc4 Date: Mon, 27 May 2013 16:38:18 +1000 X-ASG-Orig-Subj: [PATH 0/9] xfs: fixes for 3.10-rc4 Message-Id: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636726 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Ben, This is an update for all the fixes I have for 3,10-rc4. All the comments on the previous patches have been updated in this series, and there are two new patches. The first patch adds support for indicating that the filesystem has CRC enabled to userspace, and the second fixes the missing CRC updates on the unlinked inode list manipulations. Cheers, Dave. From dave@fromorbit.com Mon May 27 01:38:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5729B29E09 for ; Mon, 27 May 2013 01:38:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2F90A304039 for ; Sun, 26 May 2013 23:38:50 -0700 (PDT) X-ASG-Debug-ID: 1369636727-04cbb0049e1c88b0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id oGhZkddTCIzeEm5H for ; Sun, 26 May 2013 23:38:48 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtMLANz+olF5LKgC/2dsb2JhbABagwjCLwQBgQMXdIIjAQEFJy8zCBgxOQMbGYgMvH+NZQEagRKDZgOoe4MhKoEsAR8 Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:40 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008Ff-Qc for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4f-0003xC-M2 for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/9] xfs: increase number of ACL entries for V5 superblocks Date: Mon, 27 May 2013 16:38:21 +1000 X-ASG-Orig-Subj: [PATCH 3/9] xfs: increase number of ACL entries for V5 superblocks Message-Id: <1369636707-15150-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636727 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The limit of 25 ACL entries is arbitrary, but baked into the on-disk format. For version 5 superblocks, increase it to the maximum nuber of ACLs that can fit into a single xattr. Signed-off-by: Dave Chinner --- fs/xfs/xfs_acl.c | 31 ++++++++++++++++++------------- fs/xfs/xfs_acl.h | 30 +++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c index 1d32f1d..b6bed9b 100644 --- a/fs/xfs/xfs_acl.c +++ b/fs/xfs/xfs_acl.c @@ -21,6 +21,8 @@ #include "xfs_bmap_btree.h" #include "xfs_inode.h" #include "xfs_vnodeops.h" +#include "xfs_sb.h" +#include "xfs_mount.h" #include "xfs_trace.h" #include #include @@ -34,7 +36,9 @@ */ STATIC struct posix_acl * -xfs_acl_from_disk(struct xfs_acl *aclp) +xfs_acl_from_disk( + struct xfs_acl *aclp, + int max_entries) { struct posix_acl_entry *acl_e; struct posix_acl *acl; @@ -42,7 +46,7 @@ xfs_acl_from_disk(struct xfs_acl *aclp) unsigned int count, i; count = be32_to_cpu(aclp->acl_cnt); - if (count > XFS_ACL_MAX_ENTRIES) + if (count > max_entries) return ERR_PTR(-EFSCORRUPTED); acl = posix_acl_alloc(count, GFP_KERNEL); @@ -108,7 +112,7 @@ xfs_get_acl(struct inode *inode, int type) struct xfs_inode *ip = XFS_I(inode); struct posix_acl *acl; struct xfs_acl *xfs_acl; - int len = sizeof(struct xfs_acl); + int len = XFS_ACL_SIZE(ip->i_mount); unsigned char *ea_name; int error; @@ -133,8 +137,8 @@ xfs_get_acl(struct inode *inode, int type) * If we have a cached ACLs value just return it, not need to * go out to the disk. */ - - xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); + len = XFS_ACL_SIZE(ip->i_mount); + xfs_acl = kzalloc(len, GFP_KERNEL); if (!xfs_acl) return ERR_PTR(-ENOMEM); @@ -153,7 +157,7 @@ xfs_get_acl(struct inode *inode, int type) goto out; } - acl = xfs_acl_from_disk(xfs_acl); + acl = xfs_acl_from_disk(xfs_acl, XFS_ACL_MAX_ENTRIES(ip->i_mount)); if (IS_ERR(acl)) goto out; @@ -189,16 +193,17 @@ xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) if (acl) { struct xfs_acl *xfs_acl; - int len; + int len = XFS_ACL_SIZE(ip->i_mount); - xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); + xfs_acl = kzalloc(len, GFP_KERNEL); if (!xfs_acl) return -ENOMEM; xfs_acl_to_disk(xfs_acl, acl); - len = sizeof(struct xfs_acl) - - (sizeof(struct xfs_acl_entry) * - (XFS_ACL_MAX_ENTRIES - acl->a_count)); + + /* subtract away the unused acl entries */ + len -= sizeof(struct xfs_acl_entry) * + (XFS_ACL_MAX_ENTRIES(ip->i_mount) - acl->a_count); error = -xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl, len, ATTR_ROOT); @@ -243,7 +248,7 @@ xfs_set_mode(struct inode *inode, umode_t mode) static int xfs_acl_exists(struct inode *inode, unsigned char *name) { - int len = sizeof(struct xfs_acl); + int len = XFS_ACL_SIZE(XFS_M(inode->i_sb)); return (xfs_attr_get(XFS_I(inode), name, NULL, &len, ATTR_ROOT|ATTR_KERNOVAL) == 0); @@ -379,7 +384,7 @@ xfs_xattr_acl_set(struct dentry *dentry, const char *name, goto out_release; error = -EINVAL; - if (acl->a_count > XFS_ACL_MAX_ENTRIES) + if (acl->a_count > XFS_ACL_MAX_ENTRIES(XFS_M(inode->i_sb))) goto out_release; if (type == ACL_TYPE_ACCESS) { diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h index 39632d9..0da8725 100644 --- a/fs/xfs/xfs_acl.h +++ b/fs/xfs/xfs_acl.h @@ -22,19 +22,35 @@ struct inode; struct posix_acl; struct xfs_inode; -#define XFS_ACL_MAX_ENTRIES 25 #define XFS_ACL_NOT_PRESENT (-1) /* On-disk XFS access control list structure */ +struct xfs_acl_entry { + __be32 ae_tag; + __be32 ae_id; + __be16 ae_perm; + __be16 ae_pad; /* fill the implicit hole in the structure */ +}; + struct xfs_acl { - __be32 acl_cnt; - struct xfs_acl_entry { - __be32 ae_tag; - __be32 ae_id; - __be16 ae_perm; - } acl_entry[XFS_ACL_MAX_ENTRIES]; + __be32 acl_cnt; + struct xfs_acl_entry acl_entry[0]; }; +/* + * The number of ACL entries allowed is defined by the on-disk format. + * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it is + * limited only by the maximum size of the xattr that stores the information. + */ +#define XFS_ACL_MAX_ENTRIES(mp) \ + (xfs_sb_version_hascrc(&mp->m_sb) \ + ? (XATTR_SIZE_MAX - sizeof(__be32)) / sizeof(struct xfs_acl_entry) \ + : 25) + +#define XFS_ACL_SIZE(mp) \ + (sizeof(struct xfs_acl) + \ + sizeof(struct xfs_acl_entry) * XFS_ACL_MAX_ENTRIES((mp))) + /* On-disk XFS extended attribute names */ #define SGI_ACL_FILE (unsigned char *)"SGI_ACL_FILE" #define SGI_ACL_DEFAULT (unsigned char *)"SGI_ACL_DEFAULT" -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3E52C29E06 for ; Mon, 27 May 2013 01:38:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C906CAC005 for ; Sun, 26 May 2013 23:38:46 -0700 (PDT) X-ASG-Debug-ID: 1369636723-04bdf078171cef00002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 8LPJeLUokivnyYzY for ; Sun, 26 May 2013 23:38:44 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtkMANz+olF5LKgC/2dsb2JhbABagwgwviaDWQSBBBd0giMBAQUnLzMIGBgZOQMbGYgMDbxyjgCBLoNKA6h7gyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:31 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4f-0008FZ-Rh for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4f-0003xL-OO for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 5/9] xfs: fix split buffer vector log recovery support Date: Mon, 27 May 2013 16:38:23 +1000 X-ASG-Orig-Subj: [PATCH 5/9] xfs: fix split buffer vector log recovery support Message-Id: <1369636707-15150-6-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636724 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner A long time ago in a galaxy far away.... .. the was a commit made to fix some ilinux specific "fragmented buffer" log recovery problem: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=b29c0bece51da72fb3ff3b61391a391ea54e1603 That problem occurred when a contiguous dirty region of a buffer was split across across two pages of an unmapped buffer. It's been a long time since that has been done in XFS, and the changes to log the entire inode buffers for CRC enabled filesystems has re-introduced that corner case. And, of course, it turns out that the above commit didn't actually fix anything - it just ensured that log recovery is guaranteed to fail when this situation occurs. And now for the gory details. xfstest xfs/085 is failing with this assert: XFS (vdb): bad number of regions (0) in inode log format XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 1583 Largely undocumented factoid #1: Log recovery depends on all log buffer format items starting with this format: struct foo_log_format { __uint16_t type; __uint16_t size; .... As recoery uses the size field and assumptions about 32 bit alignment in decoding format items. So don't pay much attention to the fact log recovery thinks that it decoding an inode log format item - it just uses them to determine what the size of the item is. But why would it see a log format item with a zero size? Well, luckily enough xfs_logprint uses the same code and gives the same error, so with a bit of gdb magic, it turns out that it isn't a log format that is being decoded. What logprint tells us is this: Oper (130): tid: a0375e1a len: 28 clientid: TRANS flags: none BUF: #regs: 2 start blkno: 144 (0x90) len: 16 bmap size: 2 flags: 0x4000 Oper (131): tid: a0375e1a len: 4096 clientid: TRANS flags: none BUF DATA ---------------------------------------------------------------------------- Oper (132): tid: a0375e1a len: 4096 clientid: TRANS flags: none xfs_logprint: unknown log operation type (4e49) ********************************************************************** * ERROR: data block=2 * ********************************************************************** That we've got a buffer format item (oper 130) that has two regions; the format item itself and one dirty region. The subsequent region after the buffer format item and it's data is them what we are tripping over, and the first bytes of it at an inode magic number. Not a log opheader like there is supposed to be. That means there's a problem with the buffer format item. It's dirty data region is 4096 bytes, and it contains - you guessed it - initialised inodes. But inode buffers are 8k, not 4k, and we log them in their entirety. So something is wrong here. The buffer format item contains: (gdb) p /x *(struct xfs_buf_log_format *)in_f $22 = {blf_type = 0x123c, blf_size = 0x2, blf_flags = 0x4000, blf_len = 0x10, blf_blkno = 0x90, blf_map_size = 0x2, blf_data_map = {0xffffffff, 0xffffffff, .... }} Two regions, and a signle dirty contiguous region of 64 bits. 64 * 128 = 8k, so this should be followed by a single 8k region of data. And the blf_flags tell us that the type of buffer is a XFS_BLFT_DINO_BUF. It contains inodes. And because it doesn't have the XFS_BLF_INODE_BUF flag set, that means it's an inode allocation buffer. So, it should be followed by 8k of inode data. But we know that the next region has a header of: (gdb) p /x *ohead $25 = {oh_tid = 0x1a5e37a0, oh_len = 0x100000, oh_clientid = 0x69, oh_flags = 0x0, oh_res2 = 0x0} and so be32_to_cpu(oh_len) = 0x1000 = 4096 bytes. It's simply not long enough to hold all the logged data. There must be another region. There is - there's a following opheader for another 4k of data that contains the other half of the inode cluster data - the one we assert fail on because it's not a log format header. So why is the second part of the data not being accounted to the correct buffer log format structure? It took a little more work with gdb to work out that the buffer log format structure was both expecting it to be there but hadn't accounted for it. It was at that point I went to the kernel code, as clearly this wasn't a bug in xfs_logprint and the kernel was writing bad stuff to the log. First port of call was the buffer item formatting code, and the discontiguous memory/contiguous dirty region handling code immediately stood out. I've wondered for a long time why the code had this comment in it: vecp->i_addr = xfs_buf_offset(bp, buffer_offset); vecp->i_len = nbits * XFS_BLF_CHUNK; vecp->i_type = XLOG_REG_TYPE_BCHUNK; /* * You would think we need to bump the nvecs here too, but we do not * this number is used by recovery, and it gets confused by the boundary * split here * nvecs++; */ vecp++; And it didn't account for the extra vector pointer. The case being handled here is that a contiguous dirty region lies across a boundary that cannot be memcpy()d across, and so has to be split into two separate operations for xlog_write() to perform. What this code assumes is that what is written to the log is two consecutive blocks of data that are accounted in the buf log format item as the same contiguous dirty region and so will get decoded as such by the log recovery code. The thing is, xlog_write() knows nothing about this, and so just does it's normal thing of adding an opheader for each vector. That means the 8k region gets written to the log as two separate regions of 4k each, but because nvecs has not been incremented, the buf log format item accounts for only one of them. Hence when we come to log recovery, we process the first 4k region and then expect to come across a new item that starts with a log format structure of some kind that tells us whenteh next data is going to be. Instead, we hit raw buffer data and things go bad real quick. So, the commit from 2002 that commented out nvecs++ is just plain wrong. It breaks log recovery completely, and it would seem the only reason this hasn't been since then is that we don't log large contigous regions of multi-page unmapped buffers very often. Never would be a closer estimate, at least until the CRC code came along.... So, lets fix that by restoring the nvecs accounting for the extra region when we hit this case..... .... and there's the problemin log recovery it is apparently working around: XFS: Assertion failed: i == item->ri_total, file: fs/xfs/xfs_log_recover.c, line: 2135 Yup, xlog_recover_do_reg_buffer() doesn't handle contigous dirty regions being broken up into multiple regions by the log formatting code. That's an easy fix, though - if the number of contiguous dirty bits exceeds the length of the region being copied out of the log, only account for the number of dirty bits that region covers, and then loop again and copy more from the next region. It's a 2 line fix. Now xfstests xfs/085 passes, we have one less piece of mystery code, and one more important piece of knowledge about how to structure new log format items.. Signed-off-by: Dave Chinner --- fs/xfs/xfs_buf_item.c | 7 +------ fs/xfs/xfs_log_recover.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index cf26347..4ec4317 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c @@ -262,12 +262,7 @@ xfs_buf_item_format_segment( vecp->i_addr = xfs_buf_offset(bp, buffer_offset); vecp->i_len = nbits * XFS_BLF_CHUNK; vecp->i_type = XLOG_REG_TYPE_BCHUNK; -/* - * You would think we need to bump the nvecs here too, but we do not - * this number is used by recovery, and it gets confused by the boundary - * split here - * nvecs++; - */ + nvecs++; vecp++; first_bit = next_bit; last_bit = next_bit; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 0be37d7..d6204d1 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2097,6 +2097,17 @@ xlog_recover_do_reg_buffer( ((uint)bit << XFS_BLF_SHIFT) + (nbits << XFS_BLF_SHIFT)); /* + * The dirty regions logged in the buffer, even though + * contiguous, may span multiple chunks. This is because the + * dirty region may span a physical page boundary in a buffer + * and hence be split into two separate vectors for writing into + * the log. Hence we need to trim nbits back to the length of + * the current region being copied out of the log. + */ + if (item->ri_buf[i].i_len < (nbits << XFS_BLF_SHIFT)) + nbits = item->ri_buf[i].i_len >> XFS_BLF_SHIFT; + + /* * Do a sanity check if this is a dquot buffer. Just checking * the first dquot in the buffer should do. XXXThis is * probably a good thing to do for other buf types also. -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9E55B29E0F for ; Mon, 27 May 2013 01:38:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7D8EC8F8033 for ; Sun, 26 May 2013 23:38:51 -0700 (PDT) X-ASG-Debug-ID: 1369636727-04cbb0049e1c88b0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id XrIFBLCUUPzvE7c3 for ; Sun, 26 May 2013 23:38:49 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtMLANz+olF5LKgC/2dsb2JhbABagwjCLwQBgQMXdIIjAQEFJy8zCBgxOQMbGYgMvH+OAIESKIM+A6h7gyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:41 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008Fo-U9 for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4p-0003xY-QH for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. Date: Mon, 27 May 2013 16:38:25 +1000 X-ASG-Orig-Subj: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. Message-Id: <1369636707-15150-8-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636729 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner XFS has failed to kill suid/sgid bits correctly when truncating files of non-zero size since commit c4ed4243 ("xfs: split xfs_setattr") introduced in the 3.1 kernel. Fix it. Fix it. cc: stable kernel Signed-off-by: Dave Chinner --- fs/xfs/xfs_iops.c | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d82efaa..ca9ecaa 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -455,6 +455,28 @@ xfs_vn_getattr( return 0; } +static void +xfs_setattr_mode( + struct xfs_trans *tp, + struct xfs_inode *ip, + struct iattr *iattr) +{ + struct inode *inode = VFS_I(ip); + umode_t mode = iattr->ia_mode; + + ASSERT(tp); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) + mode &= ~S_ISGID; + + ip->i_d.di_mode &= S_IFMT; + ip->i_d.di_mode |= mode & ~S_IFMT; + + inode->i_mode &= S_IFMT; + inode->i_mode |= mode & ~S_IFMT; +} + int xfs_setattr_nonsize( struct xfs_inode *ip, @@ -606,18 +628,8 @@ xfs_setattr_nonsize( /* * Change file access modes. */ - if (mask & ATTR_MODE) { - umode_t mode = iattr->ia_mode; - - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) - mode &= ~S_ISGID; - - ip->i_d.di_mode &= S_IFMT; - ip->i_d.di_mode |= mode & ~S_IFMT; - - inode->i_mode &= S_IFMT; - inode->i_mode |= mode & ~S_IFMT; - } + if (mask & ATTR_MODE) + xfs_setattr_mode(tp, ip, iattr); /* * Change file access or modified times. @@ -714,9 +726,8 @@ xfs_setattr_size( return XFS_ERROR(error); ASSERT(S_ISREG(ip->i_d.di_mode)); - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| - ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| - ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); + ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| + ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); if (!(flags & XFS_ATTR_NOLOCK)) { lock_flags |= XFS_IOLOCK_EXCL; @@ -860,6 +871,12 @@ xfs_setattr_size( xfs_inode_clear_eofblocks_tag(ip); } + /* + * Change file access modes. + */ + if (mask & ATTR_MODE) + xfs_setattr_mode(tp, ip, iattr); + if (mask & ATTR_CTIME) { inode->i_ctime = iattr->ia_ctime; ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B265729E10 for ; Mon, 27 May 2013 01:38:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9F1E18F8035 for ; Sun, 26 May 2013 23:38:51 -0700 (PDT) X-ASG-Debug-ID: 1369636729-04cbb0049c1c88b0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id hSipnY67BH9wJhHE for ; Sun, 26 May 2013 23:38:50 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELANz+olF5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQUnLzMIGDE5AxsZiAy8f41ZJ4E6gz4DqHuDISqBLA Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:41 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008Fr-Vt for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:40 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4p-0003xc-RL for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Date: Mon, 27 May 2013 16:38:26 +1000 X-ASG-Orig-Subj: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Message-Id: <1369636707-15150-9-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636729 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Currently userspace has no way of determining that a filesystem is CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to indicate that the filesystem has v5 superblock support enabled. This will allow xfs_info to correctly report the state of the filesystem. Signed-off-by: Dave Chinner --- fs/xfs/xfs_fs.h | 1 + fs/xfs/xfs_fsops.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h index 6dda3f9..d046955 100644 --- a/fs/xfs/xfs_fs.h +++ b/fs/xfs/xfs_fs.h @@ -236,6 +236,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */ #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ +#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */ /* diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 87595b2..3c3644e 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -99,7 +99,9 @@ xfs_fs_geometry( (xfs_sb_version_hasattr2(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | (xfs_sb_version_hasprojid32bit(&mp->m_sb) ? - XFS_FSOP_GEOM_FLAGS_PROJID32 : 0); + XFS_FSOP_GEOM_FLAGS_PROJID32 : 0) | + (xfs_sb_version_hascrc(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_V5SB : 0); geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? mp->m_sb.sb_logsectsize : BBSIZE; geo->rtsectsize = mp->m_sb.sb_blocksize; -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 504B929E07 for ; Mon, 27 May 2013 01:38:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D1A47AC006 for ; Sun, 26 May 2013 23:38:49 -0700 (PDT) X-ASG-Debug-ID: 1369636723-04bdf078171cef00004-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id arcL7OzGBfYa41Ic for ; Sun, 26 May 2013 23:38:48 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELANz+olF5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQUnLzMIGDE5AxsZiAy8f44AgTqDPgOdWYsigyEqgS4k Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:40 +0930 Received: from [192.168.1.1] (helo=disappointment) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008FW-Lz for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4f-0003x3-J5 for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/9] xfs: don't emit v5 superblock warnings on write Date: Mon, 27 May 2013 16:38:19 +1000 X-ASG-Orig-Subj: [PATCH 1/9] xfs: don't emit v5 superblock warnings on write Message-Id: <1369636707-15150-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636727 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner We write the superblock every 30s or so which results in the verifier being called. Right now that results in this output every 30s: XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! Use of these features in this kernel is at your own risk! And spamming the logs. We don't need to check for whether we support v5 superblocks or whether there are feature bits we don't support set as these are only relevant when we first mount the filesytem. i.e. on superblock read. Hence for the write verification we can just skip all the checks (and hence verbose output) altogether. Signed-off-by: Dave Chinner --- fs/xfs/xfs_mount.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index f6bfbd7..e8e310c 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -314,7 +314,8 @@ STATIC int xfs_mount_validate_sb( xfs_mount_t *mp, xfs_sb_t *sbp, - bool check_inprogress) + bool check_inprogress, + bool check_version) { /* @@ -337,9 +338,10 @@ xfs_mount_validate_sb( /* * Version 5 superblock feature mask validation. Reject combinations the - * kernel cannot support up front before checking anything else. + * kernel cannot support up front before checking anything else. For + * write validation, we don't need to check feature masks. */ - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { xfs_alert(mp, "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" "Use of these features in this kernel is at your own risk!"); @@ -675,7 +677,8 @@ xfs_sb_to_disk( static int xfs_sb_verify( - struct xfs_buf *bp) + struct xfs_buf *bp, + bool check_version) { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_sb sb; @@ -686,7 +689,8 @@ xfs_sb_verify( * Only check the in progress field for the primary superblock as * mkfs.xfs doesn't clear it from secondary superblocks. */ - return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); + return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR, + check_version); } /* @@ -719,7 +723,7 @@ xfs_sb_read_verify( goto out_error; } } - error = xfs_sb_verify(bp); + error = xfs_sb_verify(bp, true); out_error: if (error) { @@ -758,7 +762,7 @@ xfs_sb_write_verify( struct xfs_buf_log_item *bip = bp->b_fspriv; int error; - error = xfs_sb_verify(bp); + error = xfs_sb_verify(bp, false); if (error) { XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); xfs_buf_ioerror(bp, error); -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8E7E629E16 for ; Mon, 27 May 2013 01:38:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5E3C48F8033 for ; Sun, 26 May 2013 23:38:51 -0700 (PDT) X-ASG-Debug-ID: 1369636723-04bdf078171cef00005-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id qFEUfoHLDyxeQFrj for ; Sun, 26 May 2013 23:38:49 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtMLANz+olF5LKgC/2dsb2JhbABagwjCLwQBgQMXdIIjAQEFJy8zCBgxOQMbGYgMvH+NbROBGINgA6h7gyEqgS0BHgY Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:40 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008Fg-Qm for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4f-0003xI-NJ for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 4/9] xfs: rework dquot CRCs Date: Mon, 27 May 2013 16:38:22 +1000 X-ASG-Orig-Subj: [PATCH 4/9] xfs: rework dquot CRCs Message-Id: <1369636707-15150-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636729 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Calculating dquot CRCs when the backing buffer is written back just doesn't work reliably. There are several places which manipulate dquots directly in the buffers, and they don't calculate CRCs appropriately, nor do they always set the buffer up to calculate CRCs appropriately. Firstly, if we log a dquot buffer (e.g. during allocation) it gets logged without valid CRC, and so on recovery we end up with a dquot that is not valid. Secondly, if we recover/repair a dquot, we don't have a verifier attached to the buffer and hence CRCs arenot calculate don the way down to disk. Thirdly, calculating the CRC after we've changed the contents means that if we re-read the dquot from the buffer, we cannot verify the contents of the dquot are valid, as the CRC is invalid. So, to avoid all the dquot CRC errors that are being detected by the read verifier, change to using the same model as for inodes. that is, dquot CRCs are calculated and written to the backing buffer at the time the dquot is flushed to the backing buffer. If we modify the dquuot directly in the backing buffer, calculate the CRC immediately after the modification is complete. Hence the dquot in the on-disk buffer should always have a valid CRC. Signed-off-by: Dave Chinner --- fs/xfs/xfs_dquot.c | 37 ++++++++++++++++--------------------- fs/xfs/xfs_log_recover.c | 10 ++++++++++ fs/xfs/xfs_qm.c | 36 ++++++++++++++++++++++++++---------- fs/xfs/xfs_quota.h | 2 ++ 4 files changed, 54 insertions(+), 31 deletions(-) diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index a41f8bf..044e97a 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -249,8 +249,11 @@ xfs_qm_init_dquot_blk( d->dd_diskdq.d_version = XFS_DQUOT_VERSION; d->dd_diskdq.d_id = cpu_to_be32(curid); d->dd_diskdq.d_flags = type; - if (xfs_sb_version_hascrc(&mp->m_sb)) + if (xfs_sb_version_hascrc(&mp->m_sb)) { uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); + xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); + } } xfs_trans_dquot_buf(tp, bp, @@ -286,23 +289,6 @@ xfs_dquot_set_prealloc_limits(struct xfs_dquot *dqp) dqp->q_low_space[XFS_QLOWSP_5_PCNT] = space * 5; } -STATIC void -xfs_dquot_buf_calc_crc( - struct xfs_mount *mp, - struct xfs_buf *bp) -{ - struct xfs_dqblk *d = (struct xfs_dqblk *)bp->b_addr; - int i; - - if (!xfs_sb_version_hascrc(&mp->m_sb)) - return; - - for (i = 0; i < mp->m_quotainfo->qi_dqperchunk; i++, d++) { - xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), - offsetof(struct xfs_dqblk, dd_crc)); - } -} - STATIC bool xfs_dquot_buf_verify_crc( struct xfs_mount *mp, @@ -328,12 +314,11 @@ xfs_dquot_buf_verify_crc( for (i = 0; i < ndquots; i++, d++) { if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), - offsetof(struct xfs_dqblk, dd_crc))) + XFS_DQUOT_CRC_OFF)) return false; if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_uuid)) return false; } - return true; } @@ -393,6 +378,11 @@ xfs_dquot_buf_read_verify( } } +/* + * we don't calculate the CRC here as that is done when the dquot is flushed to + * the buffer after the update is done. This ensures that the dquot in the + * buffer always has an up-to-date CRC value. + */ void xfs_dquot_buf_write_verify( struct xfs_buf *bp) @@ -404,7 +394,6 @@ xfs_dquot_buf_write_verify( xfs_buf_ioerror(bp, EFSCORRUPTED); return; } - xfs_dquot_buf_calc_crc(mp, bp); } const struct xfs_buf_ops xfs_dquot_buf_ops = { @@ -1151,11 +1140,17 @@ xfs_qm_dqflush( * copy the lsn into the on-disk dquot now while we have the in memory * dquot here. This can't be done later in the write verifier as we * can't get access to the log item at that point in time. + * + * We also calculate the CRC here so that the on-disk dquot in the + * buffer always has a valid CRC. This ensures there is no possibility + * of a dquot without an up-to-date CRC getting to disk. */ if (xfs_sb_version_hascrc(&mp->m_sb)) { struct xfs_dqblk *dqb = (struct xfs_dqblk *)ddqp; dqb->dd_lsn = cpu_to_be64(dqp->q_logitem.qli_item.li_lsn); + xfs_update_cksum((char *)dqb, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); } /* diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 93f03ec..0be37d7 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2255,6 +2255,12 @@ xfs_qm_dqcheck( d->dd_diskdq.d_flags = type; d->dd_diskdq.d_id = cpu_to_be32(id); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); + xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); + } + return errs; } @@ -2782,6 +2788,10 @@ xlog_recover_dquot_pass2( } memcpy(ddq, recddq, item->ri_buf[1].i_len); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + xfs_update_cksum((char *)ddq, sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); + } ASSERT(dq_f->qlf_size == 2); ASSERT(bp->b_target->bt_mount == mp); diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index f41702b..d181542 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -41,6 +41,7 @@ #include "xfs_qm.h" #include "xfs_trace.h" #include "xfs_icache.h" +#include "xfs_cksum.h" /* * The global quota manager. There is only one of these for the entire @@ -839,7 +840,7 @@ xfs_qm_reset_dqcounts( xfs_dqid_t id, uint type) { - xfs_disk_dquot_t *ddq; + struct xfs_dqblk *dqb; int j; trace_xfs_reset_dqcounts(bp, _RET_IP_); @@ -853,8 +854,12 @@ xfs_qm_reset_dqcounts( do_div(j, sizeof(xfs_dqblk_t)); ASSERT(mp->m_quotainfo->qi_dqperchunk == j); #endif - ddq = bp->b_addr; + dqb = bp->b_addr; for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { + struct xfs_disk_dquot *ddq; + + ddq = (struct xfs_disk_dquot *)&dqb[j]; + /* * Do a sanity check, and if needed, repair the dqblk. Don't * output any warnings because it's perfectly possible to @@ -871,7 +876,8 @@ xfs_qm_reset_dqcounts( ddq->d_bwarns = 0; ddq->d_iwarns = 0; ddq->d_rtbwarns = 0; - ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); + xfs_update_cksum((char *)&dqb[j], sizeof(struct xfs_dqblk), + XFS_DQUOT_CRC_OFF); } } @@ -907,19 +913,29 @@ xfs_qm_dqiter_bufs( XFS_FSB_TO_DADDR(mp, bno), mp->m_quotainfo->qi_dqchunklen, 0, &bp, &xfs_dquot_buf_ops); - if (error) - break; /* - * XXX(hch): need to figure out if it makes sense to validate - * the CRC here. + * CRC and validation errors will return a EFSCORRUPTED here. If + * this occurs, re-read without CRC validation so that we can + * repair the damage via xfs_qm_reset_dqcounts(). This process + * will leave a trace in the log indicating corruption has + * been detected. */ + if (error == EFSCORRUPTED) { + error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, + XFS_FSB_TO_DADDR(mp, bno), + mp->m_quotainfo->qi_dqchunklen, 0, &bp, + NULL); + } + + if (error) + break; + xfs_qm_reset_dqcounts(mp, bp, firstid, type); xfs_buf_delwri_queue(bp, buffer_list); xfs_buf_relse(bp); - /* - * goto the next block. - */ + + /* goto the next block. */ bno++; firstid += mp->m_quotainfo->qi_dqperchunk; } diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index c61e31c..c38068f 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -87,6 +87,8 @@ typedef struct xfs_dqblk { uuid_t dd_uuid; /* location information */ } xfs_dqblk_t; +#define XFS_DQUOT_CRC_OFF offsetof(struct xfs_dqblk, dd_crc) + /* * flags for q_flags field in the dquot. */ -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B61D329E10 for ; Mon, 27 May 2013 01:38:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 93B598F8033 for ; Sun, 26 May 2013 23:38:55 -0700 (PDT) X-ASG-Debug-ID: 1369636729-04cbb0049c1c88b0002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id toZaMzCtptrILUoX for ; Sun, 26 May 2013 23:38:54 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELANz+olF5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQUnLzMIGDE5AxsZiAy8f44AgTqDPgOoe4MhKg Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:50 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr4p-0008Fn-Sr for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4p-0003xP-PE for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems Date: Mon, 27 May 2013 16:38:24 +1000 X-ASG-Orig-Subj: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems Message-Id: <1369636707-15150-7-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636731 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Currently, swapping extents from one inode to another is a simple act of switching data and attribute forks from one inode to another. This, unfortunately in no longer so simple with CRC enabled filesystems as there is owner information embedded into the BMBT blocks that are swapped between inodes. Hence swapping the forks between inodes results in the inodes having mapping blocks that point to the wrong owner and hence are considered corrupt. To fix this we need an extent tree block or record based swap algorithm so that the BMBT block owner information can be updated atomically in the swap transaction. This is a significant piece of new work, so for the moment simply don't allow swap extent operations to succeed on CRC enabled filesystems. Signed-off-by: Dave Chinner --- fs/xfs/xfs_dfrag.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index f852b08..c407e1c 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c @@ -219,6 +219,14 @@ xfs_swap_extents( int taforkblks = 0; __uint64_t tmp; + /* + * We have no way of updating owner information in the BMBT blocks for + * each inode on CRC enabled filesystems, so to avoid corrupting the + * this metadata we simply don't allow extent swaps to occur. + */ + if (xfs_sb_version_hascrc(&mp->m_sb)) + return XFS_ERROR(EINVAL); + tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL); if (!tempifp) { error = XFS_ERROR(ENOMEM); -- 1.7.10.4 From dave@fromorbit.com Mon May 27 01:38:57 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D6F2529E13 for ; Mon, 27 May 2013 01:38:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id A7B3B8F8035 for ; Sun, 26 May 2013 23:38:56 -0700 (PDT) X-ASG-Debug-ID: 1369636734-04bdf063bd177150001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id ldqkWdFzL0YQopsk for ; Sun, 26 May 2013 23:38:54 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELANz+olF5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQUnLzMIGDE5AxsZiAy8f44AhHgDqHuDISo Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:08:50 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugr50-0008G7-0C for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:50 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugr4p-0003xi-Sq for xfs@oss.sgi.com; Mon, 27 May 2013 16:38:39 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 9/9] xfs: inode unlinked list needs to recalculate the inode CRC Date: Mon, 27 May 2013 16:38:27 +1000 X-ASG-Orig-Subj: [PATCH 9/9] xfs: inode unlinked list needs to recalculate the inode CRC Message-Id: <1369636707-15150-10-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369636734 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The inode unlinked list manipulations operate directly on the inode buffer, and so bypass the inode CRC calculation mechanisms. Hence an inode on the unlinked list has an invalid CRC. Fix this by recalculating the CRC whenever we modify an unlinked list pointer in an inode. This is trivial to do, and the new CRC gets logged with the inode core so on replay of the unlinked list operations this will be updated as expected and remain consistent. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 49 ++++++++++++++++++++++++++++++++++++++-------- fs/xfs/xfs_log_recover.c | 22 +++++++++++++++++++++ 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index efbe1ac..f4daadf 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1579,6 +1579,23 @@ out_bmap_cancel: } /* + * Helper function to calculate range of the inode to log and recalculate the + * on-disk inode crc if necessary. + */ +static int +xfs_iunlink_dinode_calc_crc( + struct xfs_mount *mp, + struct xfs_dinode *dip) +{ + if (dip->di_version < 3) + return sizeof(xfs_agino_t); + + xfs_dinode_calc_crc(mp, dip); + return offsetof(struct xfs_dinode, di_changecount) - + offsetof(struct xfs_dinode, di_next_unlinked); +} + +/* * This is called when the inode's link count goes to 0. * We place the on-disk inode on a list in the AGI. It * will be pulled from this list when the inode is freed. @@ -1623,6 +1640,8 @@ xfs_iunlink( ASSERT(be32_to_cpu(agi->agi_unlinked[bucket_index]) != agino); if (agi->agi_unlinked[bucket_index] != cpu_to_be32(NULLAGINO)) { + int size; + /* * There is already another inode in the bucket we need * to add ourselves to. Add us at the front of the list. @@ -1638,10 +1657,14 @@ xfs_iunlink( dip->di_next_unlinked = agi->agi_unlinked[bucket_index]; offset = ip->i_imap.im_boffset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc and log the inode CRC if appropriate */ + size = xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, ibp); - xfs_trans_log_buf(tp, ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + xfs_trans_log_buf(tp, ibp, offset, offset + size - 1); xfs_inobp_check(mp, ibp); + } /* @@ -1678,6 +1701,7 @@ xfs_iunlink_remove( short bucket_index; int offset, last_offset = 0; int error; + int size; mp = tp->t_mountp; agno = XFS_INO_TO_AGNO(mp, ip->i_ino); @@ -1723,9 +1747,12 @@ xfs_iunlink_remove( dip->di_next_unlinked = cpu_to_be32(NULLAGINO); offset = ip->i_imap.im_boffset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc and log the inode CRC if appropriate */ + size = xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, ibp); - xfs_trans_log_buf(tp, ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + xfs_trans_log_buf(tp, ibp, offset, offset + size - 1); xfs_inobp_check(mp, ibp); } else { xfs_trans_brelse(tp, ibp); @@ -1796,9 +1823,12 @@ xfs_iunlink_remove( dip->di_next_unlinked = cpu_to_be32(NULLAGINO); offset = ip->i_imap.im_boffset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc and log the inode CRC if appropriate */ + size = xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, ibp); - xfs_trans_log_buf(tp, ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + xfs_trans_log_buf(tp, ibp, offset, offset + size - 1); xfs_inobp_check(mp, ibp); } else { xfs_trans_brelse(tp, ibp); @@ -1809,9 +1839,12 @@ xfs_iunlink_remove( last_dip->di_next_unlinked = cpu_to_be32(next_agino); ASSERT(next_agino != 0); offset = last_offset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc and log the inode CRC if appropriate */ + size = xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, last_ibp); - xfs_trans_log_buf(tp, last_ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + xfs_trans_log_buf(tp, last_ibp, offset, offset + size - 1); xfs_inobp_check(mp, last_ibp); } return 0; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index d6204d1..285ad16 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1861,6 +1861,28 @@ xlog_recover_do_inode_buffer( buffer_nextp = (xfs_agino_t *)xfs_buf_offset(bp, next_unlinked_offset); *buffer_nextp = *logged_nextp; + + /* + * Check if we have to recover the CRC, too.i The CRC is + * adjacent to the unlinked field, so should always be in the + * same dirty region. + */ + if (xfs_sb_version_hascrc(&mp->m_sb)) { + int crc_off; + __le32 *buffer_crcp; + __le32 *logged_crcp; + + crc_off = next_unlinked_offset + + offsetof(struct xfs_dinode, di_crc) - + offsetof(struct xfs_dinode, di_next_unlinked); + + buffer_crcp = (__le32 *)xfs_buf_offset(bp, crc_off); + logged_crcp = item->ri_buf[item_index].i_addr + + crc_off - reg_buf_offset; + + *buffer_crcp = *logged_crcp; + } + } return 0; -- 1.7.10.4 From dave@fromorbit.com Mon May 27 02:15:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DF82D29DF8 for ; Mon, 27 May 2013 02:15:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id CD0188F8033 for ; Mon, 27 May 2013 00:15:19 -0700 (PDT) X-ASG-Debug-ID: 1369638916-04cb6c473f1c2060002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id XENNrAuOFgv9Iz31 for ; Mon, 27 May 2013 00:15:18 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELACsHo1F5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQVWMwgYMTkDGxmIDLx/jgCEeAOoe4MhKg Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:44:59 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugrdy-0008LD-Kx for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugrdy-0006Tv-GW for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/4] xfsprogs: support CRC enabled filesystem detection Date: Mon, 27 May 2013 17:14:54 +1000 X-ASG-Orig-Subj: [PATCH 2/4] xfsprogs: support CRC enabled filesystem detection Message-Id: <1369638896-24872-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369638896-24872-1-git-send-email-david@fromorbit.com> References: <1369312565-6266-1-git-send-email-david@fromorbit.com> <1369638896-24872-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369638917 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Add the XFS_FSOP_GEOM_FLAGS_V5SB flag to the XFS_IOC_FSGEOMETRY ioctl to allow utilities like xfs_info to detect that the filesystem is CRC enabled. Signed-off-by: Dave Chinner --- growfs/xfs_growfs.c | 9 +++++++-- include/xfs_fs.h | 1 + mkfs/xfs_mkfs.c | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/growfs/xfs_growfs.c b/growfs/xfs_growfs.c index 5d544da..7d80f84 100644 --- a/growfs/xfs_growfs.c +++ b/growfs/xfs_growfs.c @@ -53,11 +53,13 @@ report_info( int dirversion, int logversion, int attrversion, + int crcs_enabled, int cimode) { printf(_( "meta-data=%-22s isize=%-6u agcount=%u, agsize=%u blks\n" " =%-22s sectsz=%-5u attr=%u\n" + " =%-22s crc=%u\n" "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n" " =%-22s sunit=%-6u swidth=%u blks\n" "naming =version %-14u bsize=%-6u ascii-ci=%d\n" @@ -67,6 +69,7 @@ report_info( mntpoint, geo.inodesize, geo.agcount, geo.agblocks, "", geo.sectsize, attrversion, + "", crcs_enabled, "", geo.blocksize, (unsigned long long)geo.datablocks, geo.imaxpct, "", geo.sunit, geo.swidth, @@ -115,6 +118,7 @@ main(int argc, char **argv) char *rtdev; /* RT device name */ fs_path_t *fs; /* mount point information */ libxfs_init_t xi; /* libxfs structure */ + int crcs_enabled; progname = basename(argv[0]); setlocale(LC_ALL, ""); @@ -234,10 +238,11 @@ main(int argc, char **argv) attrversion = geo.flags & XFS_FSOP_GEOM_FLAGS_ATTR2 ? 2 : \ (geo.flags & XFS_FSOP_GEOM_FLAGS_ATTR ? 1 : 0); ci = geo.flags & XFS_FSOP_GEOM_FLAGS_DIRV2CI ? 1 : 0; + crcs_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_V5SB ? 1 : 0; if (nflag) { report_info(geo, datadev, isint, logdev, rtdev, lazycount, dirversion, logversion, - attrversion, ci); + attrversion, crcs_enabled, ci); exit(0); } @@ -274,7 +279,7 @@ main(int argc, char **argv) report_info(geo, datadev, isint, logdev, rtdev, lazycount, dirversion, logversion, - attrversion, ci); + attrversion, crcs_enabled, ci); ddsize = xi.dsize; dlsize = ( xi.logBBsize? xi.logBBsize : diff --git a/include/xfs_fs.h b/include/xfs_fs.h index 1cc1aa0..44b69e7 100644 --- a/include/xfs_fs.h +++ b/include/xfs_fs.h @@ -236,6 +236,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */ #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ +#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */ /* diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index dad7dab..9bc672e 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -2425,7 +2425,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), printf(_( "meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n" " =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n" - " =%-22s crc=%-5u\n" + " =%-22s crc=%u\n" "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n" " =%-22s sunit=%-6u swidth=%u blks\n" "naming =version %-14u bsize=%-6u ascii-ci=%d\n" -- 1.7.10.4 From dave@fromorbit.com Mon May 27 02:15:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A52F329E05 for ; Mon, 27 May 2013 02:15:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 677978F8033 for ; Mon, 27 May 2013 00:15:18 -0700 (PDT) X-ASG-Debug-ID: 1369638916-04cb6c473f1c2060001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id F5LP7kvNXsQSxGmI for ; Mon, 27 May 2013 00:15:17 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtALACsHo1F5LKgC/2dsb2JhbABagwjCLwSBBBd0giQBBVYzCEk5AxuIJbx/jgCBOoM+A6h7gyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:44:59 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugrdy-0008LB-IT for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugrdy-0006To-Dd for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/4] xfsprogs: more CRC patches Date: Mon, 27 May 2013 17:14:52 +1000 X-ASG-Orig-Subj: [PATCH 0/4] xfsprogs: more CRC patches Message-Id: <1369638896-24872-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369312565-6266-1-git-send-email-david@fromorbit.com> References: <1369312565-6266-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369638916 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- A few more patches. The first enforced the fixed config bits for CRC enabled filesystems at mkfs time. The second adds "-m crc=?" output to xfs-info, the last two effectively disable metadump/restore functionality on CRC enabled filesystems until xfs_db supports CRC calculations properly. -Dave. From dave@fromorbit.com Mon May 27 02:15:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D083B29E05 for ; Mon, 27 May 2013 02:15:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 60156AC004 for ; Mon, 27 May 2013 00:15:23 -0700 (PDT) X-ASG-Debug-ID: 1369638921-04cb6c473f1c2070001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id oP7e6cBQj7u4jMhn for ; Mon, 27 May 2013 00:15:21 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELACsHo1F5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQVWMwgYMTkDGxmIDLx/jgCBOoM+A6FWhyWDISo Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:45:09 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugrdy-0008LE-Lj for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugrdy-0006U0-Hh for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/4] xfs_mdrestore: recalculate sb CRC before writing Date: Mon, 27 May 2013 17:14:55 +1000 X-ASG-Orig-Subj: [PATCH 3/4] xfs_mdrestore: recalculate sb CRC before writing Message-Id: <1369638896-24872-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369638896-24872-1-git-send-email-david@fromorbit.com> References: <1369312565-6266-1-git-send-email-david@fromorbit.com> <1369638896-24872-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369638921 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_mdrestore writes the superblock after modifying it, and so the CRC is not necessarily correct. make sure the CRC is correct before we write the superblock back. Signed-off-by: Dave Chinner --- mdrestore/xfs_mdrestore.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c index 479e677..e57bdb2 100644 --- a/mdrestore/xfs_mdrestore.c +++ b/mdrestore/xfs_mdrestore.c @@ -169,6 +169,11 @@ perform_restore( memset(block_buffer, 0, sb.sb_sectsize); sb.sb_inprogress = 0; libxfs_sb_to_disk((xfs_dsb_t *)block_buffer, &sb, XFS_SB_ALL_BITS); + if (xfs_sb_version_hascrc(&sb)) { + xfs_update_cksum(block_buffer, sb.sb_sectsize, + offsetof(struct xfs_sb, sb_crc)); + } + if (pwrite(dst_fd, block_buffer, sb.sb_sectsize, 0) < 0) fatal("error writing primary superblock: %s\n", strerror(errno)); -- 1.7.10.4 From dave@fromorbit.com Mon May 27 02:15:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2D97229E07 for ; Mon, 27 May 2013 02:15:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BFD3DAC007 for ; Mon, 27 May 2013 00:15:20 -0700 (PDT) X-ASG-Debug-ID: 1369638918-04cb6c47421c2070001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id WpHGKG5snx7d20GO for ; Mon, 27 May 2013 00:15:19 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELACsHo1F5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQUnLzMIGDE5AxsZiAy8f44AgTqDPgOhVoclgyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:44:59 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugrdy-0008LG-NN for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugrdy-0006U5-JP for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 4/4] xfs_metadump: requires some object CRC recalculation Date: Mon, 27 May 2013 17:14:56 +1000 X-ASG-Orig-Subj: [PATCH 4/4] xfs_metadump: requires some object CRC recalculation Message-Id: <1369638896-24872-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369638896-24872-1-git-send-email-david@fromorbit.com> References: <1369312565-6266-1-git-send-email-david@fromorbit.com> <1369638896-24872-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369638918 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner And we can't do that right now through xfs_db, so disable metadump and restore for CRC enabled filesystems until the issues have been sorted out. Signed-off-by: Dave Chinner --- db/metadump.c | 5 +++++ mdrestore/xfs_mdrestore.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/db/metadump.c b/db/metadump.c index bc1c7fa..1c8020b 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -2050,6 +2050,11 @@ metadump_f( return 0; } + if (xfs_sb_version_hascrc(&mp->m_sb) && dont_obfuscate == 0) { + print_warning("Can't obfuscate CRC enabled filesystems yet."); + return 0; + } + metablock = (xfs_metablock_t *)calloc(BBSIZE + 1, BBSIZE); if (metablock == NULL) { print_warning("memory allocation failure"); diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c index e57bdb2..fe61766 100644 --- a/mdrestore/xfs_mdrestore.c +++ b/mdrestore/xfs_mdrestore.c @@ -109,6 +109,9 @@ perform_restore( if (sb.sb_magicnum != XFS_SB_MAGIC) fatal("bad magic number for primary superblock\n"); + if (xfs_sb_version_hascrc(&sb)) + fatal("Can't restore CRC enabled filesystems yet.\n"); + ((xfs_dsb_t*)block_buffer)->sb_inprogress = 1; if (is_target_file) { -- 1.7.10.4 From dave@fromorbit.com Mon May 27 02:15:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A838229E07 for ; Mon, 27 May 2013 02:15:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 95F79304039 for ; Mon, 27 May 2013 00:15:24 -0700 (PDT) X-ASG-Debug-ID: 1369638921-04cb6c473f1c2070002-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id yXFstJsmfSEDFv8X for ; Mon, 27 May 2013 00:15:22 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELACsHo1F5LKgC/2dsb2JhbABagwjCLwSBBBd0giMBAQVWMwgYMTkDGxmIDLx/jW0TgTqDPgOoe4MhKoEtAR4G Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail07.adl2.internode.on.net with ESMTP; 27 May 2013 16:45:09 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugrdy-0008LC-Jb for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugrdy-0006Tr-Ej for xfs@oss.sgi.com; Mon, 27 May 2013 17:14:58 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/4] mkfs.xfs: validate options for CRCs up front. Date: Mon, 27 May 2013 17:14:53 +1000 X-ASG-Orig-Subj: [PATCH 1/4] mkfs.xfs: validate options for CRCs up front. Message-Id: <1369638896-24872-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369638896-24872-1-git-send-email-david@fromorbit.com> References: <1369312565-6266-1-git-send-email-david@fromorbit.com> <1369638896-24872-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1369638922 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner With CRC enabled filesystems, certain options are now not optional and so are always enabled. Validate these options up front and abort if options are specified that cannot be set. Signed-off-by: Dave Chinner --- mkfs/xfs_mkfs.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 291bab4..dad7dab 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -1476,6 +1476,7 @@ main( if (c < 0 || c > 1) illegal(value, "m crc"); crcs_enabled = c; + projid32bit = 1; break; default: unknown('m', value); @@ -1754,6 +1755,57 @@ _("block size %d cannot be smaller than logical sector size %d\n"), logversion = 2; } + /* + * Now we have blocks and sector sizes set up, check parameters that are + * no longer optional for CRC enabled filesystems. Catch them up front + * here before doing anything else. + */ + if (crcs_enabled) { + /* minimum inode size is 512 bytes, ipflag checked later */ + if ((isflag || ilflag) && inodelog < XFS_DINODE_DFL_CRC_LOG) { + fprintf(stderr, +_("Minimum inode size for CRCs is %d bytes\n"), + 1 << XFS_DINODE_DFL_CRC_LOG); + usage(); + } + + /* inodes always aligned */ + if (iaflag != 1) { + fprintf(stderr, +_("Inodes always aligned for CRC enabled filesytems\n")); + usage(); + } + + /* lazy sb counters always on */ + if (lazy_sb_counters != 1) { + fprintf(stderr, +_("Lazy superblock counted always enabled for CRC enabled filesytems\n")); + usage(); + } + + /* version 2 logs always on */ + if (logversion != 2) { + fprintf(stderr, +_("V2 logs always enabled for CRC enabled filesytems\n")); + usage(); + } + + /* attr2 always on */ + if (attrversion != 2) { + fprintf(stderr, +_("V2 attribute format always enabled on CRC enabled filesytems\n")); + usage(); + } + + /* 32 bit project quota always on */ + /* attr2 always on */ + if (projid32bit != 1) { + fprintf(stderr, +_("32 bit Project IDs always enabled on CRC enabled filesytems\n")); + usage(); + } + } + if (nsflag || nlflag) { if (dirblocksize < blocksize || dirblocksize > XFS_MAX_BLOCKSIZE) { -- 1.7.10.4 From willsu@builderschoicetools.com Mon May 27 02:41:18 2013 Return-Path: X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6E4FC29DF8 for ; Mon, 27 May 2013 02:41:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5B37DAC004 for ; Mon, 27 May 2013 00:41:12 -0700 (PDT) X-ASG-Debug-ID: 1369640462-04cbb0049a1cb070001-w1Z2WR Received: from m128-6p.163.com (mproxyjp5.163.com [176.34.24.136]) by cuda.sgi.com with ESMTP id oBtgdpU6sad0mmGq for ; Mon, 27 May 2013 00:41:02 -0700 (PDT) X-Barracuda-Envelope-From: willsu@builderschoicetools.com X-Barracuda-Apparent-Source-IP: 176.34.24.136 Received: from willsu$builderschoicetools.com ( [115.204.220.172] ) by ajax-webmail-wmsvr1 (Coremail) ; Mon, 27 May 2013 15:01:02 +0800 (CST) X-Originating-IP: [115.204.220.172] Date: Mon, 27 May 2013 15:01:02 +0800 (CST) From: Will To: linux-xfs@oss.sgi.com Subject: caulking gun&foam gun/Builders Choice Tools/Will X-Priority: 3 X-ASG-Orig-Subj: caulking gun&foam gun/Builders Choice Tools/Will X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 20130424(22035.5339.5325) Copyright (c) 2002-2013 www.mailtech.cn 163-hosting Disposition-Notification-To: willsu@builderschoicetools.com Content-Type: multipart/mixed; boundary="----=_Part_32507_2107145494.1369638062770" MIME-Version: 1.0 Message-ID: <670a4bda.31f1.13ee4ca4ab2.Coremail.willsu@builderschoicetools.com> X-CM-TRANSID:yWR4CkB5pkSvBKNRHsAbAA--.2190W X-CM-SenderInfo: xzloz23x6e3xxogh225fkrxuphwr0z3vof0z/1tbiAQ4qXk3HgkZP EgAAso X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== X-Barracuda-Connect: mproxyjp5.163.com[176.34.24.136] X-Barracuda-Start-Time: 1369640462 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 ------=_Part_32507_2107145494.1369638062770 Content-Type: multipart/alternative; boundary="----=_Part_32509_1238237727.1369638062770" ------=_Part_32509_1238237727.1369638062770 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Dear friend, We are the professional supplier of caulking guns and other tools from China. We want to introduce our quality products to you. Any need pls feel free to tell me. Our product line: air caulking gun manual caulking gun foam gun glue gun&glue stick hand saw paint mixer plaster trowel tool box and so on. OEM/ODM is also welcomed. Our company can also help you search the products or make the products as your demand. Hope to hear from you soon. Best Regards, Will Builders Choice Tools Limited www.builderschoicetools.com Mobile: 86-13429626426 Phone:86-15068189662 Skype:bctools1 Msn: bctools1@hotmail.com Gmail:bctoolswill@gmail.com Yahoo messenger:bctoolswill@yahoo.com Email:will@builderschoicetools.com Save a tree...please don't print this e-mail unless you really need to ------=_Part_32509_1238237727.1369638062770 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Dear friend,
 
We are the professional supplier of caulking guns and other tools from China. We want to introduce our quality products to you. Any need pls feel free to tell me.
 
Our product line:
air caulking gun
manual caulking gun
foam gun
glue gun&glue stick
hand saw
paint mixer
plaster trowel
tool box and so on.
 
OEM/ODM is also welcomed.
 
Our company can also help you search the products or make the products as your demand.
 
Hope to hear from you soon.

Best Regards,
Will
Builders Choice Tools Limited
Mobile: 86-13429626426
Phone:86-15068189662
Skype:bctools1
Yahoo messenger:bctoolswill@yahoo.com


Save a tree...please don't print this e-mail unless you really need to

------=_Part_32509_1238237727.1369638062770-- ------=_Part_32507_2107145494.1369638062770 Content-Type: image/jpeg; name="product alert from Will-May 21st.JPG" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="product alert from Will-May 21st.JPG" /9j/4AAQSkZJRgABAQEAYABgAAD/7TYQUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABBnn3mBjEc8 QV6TqczQYqm2OEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAA AAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAA AAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgAB AGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0A AAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA//////// /////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///////// ////////////////////A+gAADhCSU0EAAAAAAAAAgAJOEJJTQQCAAAAAAAUAAAAAAAAAAAAAAAA AAAAAAAAAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0E GgAAAAADPwAAAAYAAAAAAAAAAAAABdwAAA+gAAAABWcqaAeYmAAtADEAAAABAAAAAAAAAAAAAAAA AAAAAAAAAAEAAAAAAAAAAAAAD6AAAAXcAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA AAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAXcAAAAAFJnaHRsb25n AAAPoAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURs b25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4A AAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91 bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAA AAAAAEJ0b21sb25nAAAF3AAAAABSZ2h0bG9uZwAAD6AAAAADdXJsVEVYVAAAAAEAAAAAAABudWxs VEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxU ZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAP RVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0 QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUA AAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90 dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBBEAAAAAAAEBADhC SU0EFAAAAAAABAAAAAo4QklNBAwAAAAAL/QAAAABAAABAAAAAGAAAAMAAAEgAAAAL9gAGAAB/9j/ 4AAQSkZJRgABAgEASABIAAD/7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJ CAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDP/AABEIAGABAAMBIgACEQEDEQH/3QAEABD/xAE/AAABBQEBAQEBAQAAAAAAAAAD AAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwz AQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXC o3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3 EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNz NPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG 1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/AOt699Zuo9O6qcPFGO+GUurx7A/1bnW2ei6qmxr2 1M2t93vYrHTur9bz+qXmqmk9LoyrcOwSRa30mz9p3Odte2yw/wA2yv8A9KJutfVmzqmXfcM4Y+Nk V105NQqDyW0vN/tuc/8ARO3f8GiYf1cysPqr8mnPe3p9mRZluw2t2zba3Y5tlrXe+lv02s2f+lFD WTj68N9CHU4uS+7gDg972zfFHIfVww00jH9bxcfB/wClP8mj6t1P6w43W8Tp+H9j9HqHqeg61tpc 30WNtu9b07GN93+C2NRa/rh0u0XljL3ejBqAYCbw604TXYnv9/6y30/0npK3m9LGR1bp3UjcGDp/ rfoyJ3+sz0/p7hs2bd/0Vj0fUw1MsNWaJaGt6c70wRU1l56i31Pf+sO9Y7PzP0aR9wE1qCTv/d/7 7iWYzyU8WMZfROMYiXBGUeKXu5Pc4zGPq/Uxwf8Ajv8AlErvrfW3Ml1Lm4bcY2PYQBkC8ZLen/Z3 tdYKWbHn3bnf9cW/i3/acdl5qso9QT6Vo2vb/Je2XLnmfVTJa9932yqzIspfXcLKA+t77cgZ9zrK XWbfSsj7Ps/66tno3T/2Z0zH6ebjecdseo7QmSXfRl21jZ2V/wAhOh7l+oaV+LHzQ5T2wcEvWJcN ev1Y/wB/1iL5p1fLsP1jaGjc5+ZY0sM6iy77PH73823clfUbOpy1jtlmWGl0GJ2Ngb/o/Sc9dSz6 q0ZOVfl3V5Atfk3FrrBUS0Cy4B1Jj202+p61X/BrHHSBnPzenbM718HJosfUfQa54fYf1ukgVtc2 qv8ASv8Afv8AT9LfssU0ZESiekTf8v8AFaRAIkP3hSXpjh03PrzXt3CoOhvEuc11Teztv84qH1z+ tHVS/IqbmijpuXj/AKtj0sYbDY0hl7bb7A5/09r2ej/OVXV/8It7N6Zfh9KdYzFy8h+LW50WnHG/ n3WvOQf5rd6u7/glz+P9Ux1eii419RtFvrNtAGOHUPofX6dBozfQrbVd6tr6v8NT6P5/86n5Mglk Mx1r8lmOJjERPS3I6P1C3JwsR2cH1B5NY2e1trGt2VWbfzW+3/ri7b6g5AHSM1+Dj79uUGkTBd+j q3WumVh9S+qX7L6fTkNx+oWNxHQ42vw2Na15duu/V7L7Xek5/spqp33fzK6n/F90+rD6I59XrAZN pc9mRt3tsYG42RXtrazZ6V9NlXp2/pd9ai6snR1T1XIb/O4pr+JcB9/pqTeq7uKwfg//AMxWgspz rHteHvtcWvc8l2KSQ0u9lLfb79n79f6R6SYxMmyM8n/Bj/O/8xUvtjiNGAHsSdJ/zU1WJRZSx0OD iBLoLDPnU/6CjfjMpqfc63ZXW0ve5wmGtG5x9qS06XfRz8XrvU73uq+x1+tW17n1eqQd1fttord6 djX2ep9BXejZ+T1DF+1Wsrrrs/mmscXOgEtd6u5rdv8AJWHX1noIzDl09SrbYdzidljwTtFbv0Wx jtvps936ZXfq5ndHa52BhZ7cov8A0jKwxzXDaGssO4+3sxMGHmIy9UZ8A4vVWlfokrjn5eUahOHG aoCVm/0gG9nZ+TiTIZrJYSABE/vOvbu/zFmv+strDDn4/wApP/UWOXRFrXfSAPxWZk5HTbXOrotw nuqJGQyx7Zb4fQ91f9pSLQLO7nf86n/v0/5lp/IuS699cPrG/OsswMy3GwnbW0OZQ0VP2iLX1Pyq vVf+kbY3+c/wa7iijDyXWDEbhZHpvAOx+6GGf50MDttqxj9Q8vJqp6fnZ4PTcEuOEaWAZB3Eljb7 b/Wq2UMd6Wyqr9J/waBW5IyoUfsLjdI+tv1lDK6bM0X2W2gbrcdjyA5zKpc6u/D/AETXH6Fddt/8 7Z+l9P8AR91X1VxvbXazaHuDI0kOJAa32vs/e+ksfpf1JwMDO92U7IYz3sreW+oXFrqz6uxrG+m1 tjnM2V/+e/0l+vp2TZkkwa66rB6bn8FrHv2tY2d/0PoI6KAIDo5+Z9kp3NbvtdpWyY+LnfyGfnLm s27qV5L7Mq1vg2pxqaPINqLXf9uPetbqxLs5rZ9rKxA7S5xn/wA9sQus1YuL0u3Lr9xx6w6AY3k+ 1jP6z3LC53LzOfNlx4ZcMOXAuIlwSyS+YtrGIxEbGs+p6PK29Y6/0yz1cXMssDdTTkk3Vu/kuNn6 ev8A6zaxdr9Xuu43XumtzqGmpwca76HGTXa2N9e4fT+k19b/APCVPrXB5Fwy6bjLRZS4scGztIjc 2xm/a7Y/83erX+LPILOr9Sw/zLqq74/lVudU4/5ttam+GZ8p/V5STe1m12fGADpRiaL2/VepNwKQ QA66zStp405c5c1f1XPtcS+50H80GB/mtRfrLlB3Ui0GRWwN08dS5ZV+S0sB0GxUPiPNZcmeeMSI xwPBGMToa3lJucpghHHGRiDKWpJ/B0sTrGTQ5xfedrWlzWk8kfRbDv3nLo+k9Uq6lQXtG2xkCxng TwR/JcuANwdqFsfVHKLeqemTpaxzfmPc1SfDuZy48sMZkTjmeEiXeXykK5vl4SxymBUoi9H/0NZ3 Wsl737+n1bnndbtNw3F/6T37HfpPp/8AotSHWcou0wRHcmzJjhreN/8AIaqsdYoDKKc+uobfY2yo uO2sQdW2M/eUmWfWB7HGnqND4PuPoO/q/wCm/kqrKXNXQ5fAfH3Ja+Ne0zicqv3ctf4Vf9JvY3Vc t+TWyvDaHndtL35BrENfv373OZ/N2W/9uKGZ1LIqbdW3Cqc+na0sbbcGgODIdXtsbtb6T/psWZ9p +tJy6sRmbQz1CX23ejpWxutt7/VtdV+jrb+etHIezPwq+rYB/pVbWgkESGPfU/2/mu9Ox7VDHmOY HMjFkx4gJ45HHCB9z9f82P3Jyjj9OWOPL6f9UkzkI8Qy5LsAy4pA8Hh/daj/AK1ZVr7LbMbHY+0g 2Fttjd22B7m79v0W+mlX9Y7to349DoESb7ZI1ndts/luVRnTBW/03WlrgN8Etnb+8XejuR6+nNyJ Ndjn7YmHkRPHFbVd16wj9kf/AFYsGTMBpOfCOvFPb5Y/outV9c+sW1tfTj4r2OJazY4mSzR7Ws9T f7P6q1Pqrmjqou6g+ttVtVllMVl2u/0rLvWZYT+lZbV/1v8AM/nVxtXTsPGyW3Zu/wBHp7ixllbn OJszS5m29rg39BhMe7JssY76H+l/m12n1OxTiYNtJJcWva0vdy4tYxnqOj858bkzFnM55MchRhtU eGNX+/x5Iz/V+1xf31sogAEdXTF2B1SrMwwfWZU92Ll1w5vuLGWWU+4N3bqb6/dX++pMopwvteS3 cRe85FrZkBza66T6TfzdzKG/9d96ljNaLsogAF1oJgRJ9Kka/cpZn9Ev/wCLf/1JUyxiWUZ+NU97 Sa3Gu9rToZY5uRTu2/uWMY9PiYdOILW0yG22vuLSZAdYfUt2futfaX2/8ZY9R6aZ6fjHxqZ/1IS6 j1DF6Zg3Z+Y/08fHaX2O/I1v7z3u9jG/vpKZ5eXjYWNZlZVjaaKRussdoAFxX1n6/n5TaMnpmW7F 6dFZr0dRdZc4vO2LNtluPXX6f/Bf8f8A4PA+sX1myeuXmy79Bg0EuoxSRAj/AA+U76Dr/wDwOj6F P+EttzuqWfWBmPj9Q6jjZDMd4FONdk66NG5tYYf0tTNrdzPUZX6it48UcfDLIQCT8pc/Lnnm9zHh jKQA+aPfv/dfYOlZN+V03GyMhuy62trnjgTH0h/Jf9NT6gwWdPyazoH02Nkc6tcF519W/wDGNZjN rxOoe+kQ1pJ1A/4Oz/0Xb/26vQPtuPndLsycZ2+t9T4PcGD7XBR5MRjPiFcBloY9P6rNhzxyY+A3 7kYeqMt5fvTj+/F42n6pt2tIy4GwNAFYgD6URu/lLS6D0JvT+rU5Au9Qlj27dgZy0O7f1VcpP6Nn wH5ArOMAcykH+UP+gUvckQRpVHaMR+ivMBd3IniB1nOVni/S4pep8k6x1bO631LOvzrL34xuccSj 1HtpbUHGpjGUNcxnvpFfqv2fpVk14ZG4uoxxqYlu8gD4n/ql6N1r/Fg6vbZ9Xrfa7224uXYS0D82 yi/ZZZ7Pz6rN+/8Af/0lCr/Fx1JtgZn9Tw8QxO1u610a+7bZ9k/dcmDhoMlTJNC3D+p9l/TPrJgX UvYDdfXjWCtgYHV3EVWVva1rN3vcx/8AxlS6X/GrldXbnYeFRk2Y+FfjveGsc5jX2ssYLRd6Zb6r WUvq2VrS6N/i46ZVfTmv6lbmnHtbYz0dlde+twe3ds9az6bfo+um/wAa+Gx3R8PqJ0fhZIYT/wAH eDTYP+3PQf8A2EyRHRNSAN6F8ur6WxljbX2S5hDhsaG6j/hPpL2P/F91fJ6p9Xx9rsddkYVz8V9z zLnhoZbS97vzn/Z76WWP/wAJZ71447NxwZA3nxJldF9R/rfk9EznV2UF/Tc+2pt59wNTv5n7TV9J j/a9nrV/8DWmhUbvV9Jy6raM259zXOrudvbcASAIa3Y/bO304VHqVDcnCtobYx1VsCzaWvBbIcW7 J/O/f/wS6m17a2l7jta0SSsfJsw8p5a6hknWTpZH736MtsXP/EeXw8tkOX3zHJkkckIVxS8+L1ej +828cjONGNxAo9nh8jAfQLWVl1oe7eS6N24iHOe+d1m5H+o/TupM+steTUC2iuuxuYR9HY9v6Kpz v3/tDarG/wDFrqaOjdIfaPWbY4O+iDYduvb2bH/9Jb2PRj41Qpx621Vt4Y0QPwU/wvHLJ+u92MgD 6uH5+L+t8vCjJIRjwCNCqHZ4zrmDfjdS/T7349j9zHtjcayd7669/s9Wvc72PWJkbhulrw2dC4Rp Ok/ytq9Ne3FzKSxwZfU7QjRzZH/kVz3VsH6q9Osrbm5Zw33a11B+4kD2y2tzLrNu5O5j4Zk4zLEY yiTxVL0zj/V4v3Gzh56HCBkuJAq46xl/WeQx2MfcwW+r6JPvNTQXxH5m/a36S3fqt0jKvym5Dy6u mogv28OLS17at353vY36K2umdM+rmQXHHt+1urdtex7zLXDlr6R6X/TrW6xjK2BjGhjGiGtaIAHk Anct8OncZZTERB4qh6pT/qyn+4jNzsSCMYkSdLl8sf7sf3n/0ejZYwP/AKVSGTIaWO3R/W3f99U9 weQHZlBiNzQxw0nWHbz+auFzOmfX5mXeMPIs+yvte+kNfoGvc6xrPcxzm7N30ENvTf8AGYOMi0f9 caP++oGlCR/q/YHtX9LZfj5FbshljsoBlzq2lvtH+B9xf+ic76f+kQMcV9K6S7EzH2VVV3B1D6iH OIfq6pzPd7d/6Rec/WLF+tVba7Ou2PsY32V7rATqd21jG7d/7y6T6sWWW/U8bAHmnMcw7iSSHD1G tO6W/wCGUc8UfmEblGXuijwmWSMPb+b/AGf6tdxS7jXTbZ6JnWejtBH2rKE8HZJH9X2qTus9Jg7M vKk6gOYSJnd+77ViNdlTH2SmfNzZ/wCoUjZlnjEpPwcD/wB8UZzZf8xL/HxrgB++P8Vvnq31drxj iZOU51t4eXl7CC91v6N1mv8A1umtdV9Uc2nK6e4MLjbTsZeXNIG8MaDtP5/0V4x9YMm+3qF0UVe2 hldjQ1rxWxu7bsc5o9N7vzNq9V/xcPD+mX2g+x5rcNNoj02+/Z+ZuaFLigBGMjHglRuN8WuQ8c9f 7y2R1Ot6+T0RxMfKsyBe0uDbRAkga1U87C3cmy8HFZRbc1kPZW4tMns1zfozt+ijYrmuvywCCW3A OHgfSod/1LlX6qYpsLrrK6xTZuY1vtJI0c+0N3N2R/pGKRHFKqs12tN0v/kzEPjRX/1LVl/W36v5 f1hxKen13V42NvNt1rmue/c0RQ1lIdWx7Nz3Os32/uKHQspzsjFpH6NpxJdWbDY9xb6XvfS11leI yrdsZuf+l3/Qq9NdCjqDYQK6gGwRr4vF9G+pvS+l5VN95d1Q17jQ63ZUyt1fDjQ9/wCsX7v5u5/8 x6bP+MWj9ZOl5n1iw6sSj0sd1F4stNrw/wBu22puxtG/976FnpLefj4zjvfUxxE+5zQSJgu1P9VY mX9YsDpuc2irHAofLr76wBJ/kNaP0n773ImMsx4fmJHfpFOLLDlRGcAISgdJVY4pHd5/rX+LDBZ0 G09NFl3V6hva4ODW3GRvp9B7vSrZs3+ltd6nqf4W1X/q39WLsXplfUOrVvZ1LHpe2mn1XFtYLHVP dZVU/wCz2W3N/f8AU9npf4RbY+tHRzXvFp0iW7Tp9HcXEe39Hu/Sf8XYlhdTs6hi5NF1Po5dTXNs radwJiIZ/r+5++pIjJCNEGMbiPV+zia+Q48uX3LEslTl6f63zcXC0qT+jb8AreIf12keO7/qVSqZ kNrAdTY0gagscP8Avqu4LLTmUuNb2taHS5zXNAkaauCFb+R/Jde3mPzdhUOr5bMKqm80NvddkUYu sAgZFrMZz92138362/YuMzPr89uS+odSrw7mZRospsxn2V1sbc7Ftd6sUtd6VQbe+37Vs/8APdeH m/X76xZD7KLbMO6vDtF1dtNT3Ne6l7HUbn+s5rad+z1Hf2K7VVhl4rqExR4bkOG/60eL5of1mYiu ofW66qqgRWxrASXENAEk8u0XK/4z3AfVeO5ysYD/ALcaVyh/xjfWQYltz2uFkVlrmtq9Fu8vqcW1 WN+0O/Ss/Qs9X/jLmLawa+s/XboPUeldVvqozOm54rbk11na51G2xzbaPUb+cdm+uz/zN/FsCCLU db1t80NbG2WCpjPUD5AInawgH2t+j9L95WsCh1vUsGu55eb8vHp1PAfbXu2tb/JWvb/i8+ubeoOr ZhMe0kN+0C6v0SNP0nuczJbt/c+zb11H1e/xXvw8vH6h1fNGRdjvbczGx2xWLGOFle6+z9JYxr2s dtrpxkVgBbOb1m6rP6k/Ec+/FzMe3Mprf7mi/CbXjO+z2V76n0ZLfR9Sj1PtGLfV+sUU/aFwtF2P Y+vKfYRmWxb9tDwbS4jbublNd+9/grfQf/gvoL2HI6Th3XvymsFeW8AOuA1MR9Nkhlnta2vd9P0/ 0a4Dqn+L7qGLY4dOyK6MOx5dD2Of6bXEPdVW+v6VO7/B3el7P0f6X+cVHNGMM2XJl4ownCAjmiDM R4OLjxZBHi4Y+rj/AHJt7lc8sVcEY5LNSxzG/wDck7GH154+rt3UrwH3Y1dheI2h1lTvT3R/g/W9 ljv9GrnVesU9Y+pludjufVVY+qrNgw+ur16qeptc5n0duL6/6T/Q/pFUxOh4DOi/sa4ufiBgbcS4 sNkv9a1z3tPs9Wz81rv5v9GuvqxcWvEbhtqYMZrPSFO0bNkbPT2fR2bVU+Ce0Zc17YIHuenThh7M vVi0/e+dbzY9Q04QdeHfh8LeY+sVtH1RfR1PptDMfFyW2YeRjUtDWG30339NyPSZtqa+u2h2LZZ/ oMj3/wAxSvMn19U+zt6rkOdZXlbrH5AcHukPfXZZlD6bN1rHfyF6f9ZOh5dfQsnDw6jm4DKXHHxJ c+5lodV9j+y/nelguFt/87Z6lP6l6C8zbn52JRbh411tDC8jKx2TXa1xHpO/ctq+i31af8NsW01g LIFgWas7B3/qvh4OZg5/Ur3X/aunRZWMaz0nBrWOtD63fnXOfXZ/Or1WixttFdrTua9ocHeMheUf VzCvf9Uuo1YYD8rLubjvbMBlbGs91sfR3V2Wv9q9N6J093TOk4vT32eqcasM3gQNOw/q/QVPlpyn zHM3kJjCYgMR/R9EPWP3I8fu/wB9dIVGOm43f//S7JtFLy+w1ZjXFoLmbHge382ofQ3/AL+z+cR2 spppbtpyXzJANbnP54d+7/aXPssyToM5zRoRNzw6D4s3I4fkgaZziO5N7h/FVjzeAGjM/wCJP/vW WpH9HT+8Fh9W25nULc/qYsyMl5NeHW2l7asaqQ0Nbv8A+1Fu7fl5T/8ArP6BixendMyekN6z0r0S GNy6cvFc8FrHVWh7HtrfDv5m1rKlD60/WDqXS8Nr8fqO11ljGSy19tjWnc62z0p2ta1jfpqqzrnV cz6uUZmRlWFpy668nIY1z9lG7bbltxsgWM9X0drv5tTYpwyDigSY+Rj/ANJZL0n5fpd/9F1W49hO 51FZeQASHHgHidv5qRpvqrdtoYO/scf/ACCvsf8AUxwlvVbHN7ER+X007j9TI16m/wDzv/ME/RXu 9KH2z/755jp3RrbcTKvzKjXfnPc/Y4Q5tbR6ePW5rvo/o/f/ANcW99RCXfVLbeB7MvHx7Q7girIq xzun8z0m+5cJ1z6xZFPWM2nCzXHAotf9ltDGuLgA3ZW536L1K93+ti9I+pTqbun323PLGPsY4hog P3Ve+p9LvV/R+7+bRRueyTo7cFuZjOobjts3Mg1CsPMt97Zq9/57962s/pfq9Qbkb8hzLWObZW0s NQgDbua9v2lvqfuY9zKv9KnxmYuPcbMdhe8gNG5tbQI/Ob6dbX+6Vj9U69Fz67c/Hxmh5Z6TnF1s jTYzEoD73u/P+gmyJA0FrhEXqRVdXS6fg4NFtYNYw30uBYGitnqEhzNrnNNl/wCd9D1Vd6v1np/R sUZWfZsY5wrqY0F9lljv5uiipm59tr/3WrlaJybmubRlX1tLS63I2YdQE/zgotc7Mt2/uelWugze n4X1g6Vd0nqQJDhq9p22NI/msip35trP8z/SforPTSiZH5hSJiN+lzG/Wj7fY/aGNx6yGXsDm2Gp xPtqvdW91V2V/wB163eh/wAJkenZ6d4DHyKB6eyx152U1mHkSf0mRkO/0nt3LhOr9J6r9VbxAZjf VvBafQYx4JzLH7W+lk72+o/qebY1nrX+l6WBg1P+xf0f3w6P9bh9kyuo5DT08YZqa51Dt7H3Xkim qil3va302X3vr/TbKqv+EQlCzYKhLSi96/omNacttdfuqY1tZEgOsht2/a07fp+xyL6LHYGP1LGO y6mppMcOa0bXVvH7zFy/TPrcbsHPzMTKqfj4rGuynOa5pb6jxWx/v2bLP5z+vsUOlfWvp3UMyrpN PUAx2Y4sYypjtgftc9kvsbt9zmfv/pECJyFSJNXvK+H93hVHgibiAL7Rri/e4np35z7MprzVTLmt bb7XPsIBLhw5nsbZ7/TWngMIp3tfTZVbD6nUM2tIIHvn1LfU3/vrxr62/WTrLcvK6M8HBroca8lo J9SzTcC+/wBrvs1rD6lbGfz1f86ux/xVYn1mxsOz7aw1dFsbvwqbpFgeXe5+PX9KnEsbufst+nZs ux/5y31XgUNTZUZk6bDs8bmdVB6lTa6mp1XTep2ZLX7yDe23Kuybm2bx6Fdf6o1n8j/rj1X6u657 cew4f2WzJxC1wFjHmxzrftHr2Nq91Vn6atnpX/pv5tdr9Z+k/UXpnUPRs6OcjKyf1i4C62msVvc8 WPZseWep6jfbjtrrr/l1qdX1Y+rXU3HKxOhZGTTIY+2zIO8lnsc39Nn/AJrdmxRxBjQGoF9VvHAk i/V5PAZXrsyBRa30m3csD/aQ3Ie1nqWNDdranr0X/FRuHT+pse8WWNy2+pY1xeHu9Gnfbvd7v0jl jdV6b9VekuFGZ9X7TmuDHV1nKtDSC525zrqcnK2e7+bbt/nV1nQsv6q9G6BZ1LErs6fiXXP9VuQX uvdewupdW7e/Itfd+i9le9IgmUT0CBMax4gSNyBQeivxcfILTcwPLJ2z2nlNRiY+O57qWBhsjfEw Ynt/aWdT9a+hZFfqUZDrmTBNdVrwHD6VbvTqdtsZ+fX9NiDb9dvq7VlsxH5Dm2PO15NVjRW47PSZ kb2NdV63qfovapE+5pXFp2tD0j66YXUes5XR76jiZNVr68YWH+dFf0/a5rPSv9vq+h/oP0i6EtBE Hg8hYf1j+qHTeuRk64vVKQDjZ1J2Pa9vvp9Tb/O1ssDf+Er/AMBZUs7I+sXVem9Ouweo41mbn1sD BZUW0mzd7LL94DWN9v6Wt+Oz/g/SrsSJH2oJrd6AdFwd5c5pe2ZYxx0af3mx7v6qlj4F+NaPTyXO xv8AQ2N3EH+RdLdrf7CwOhdcyrM7D6a+xlFbW2UV1WP9Wy5uOIbeLXhtjsiytrLn17n+nX6nqepY usUeLFjxx4ccRCNk1HQWd1xnKZuRJ6WVLG+sf1W6b9YMU15DRTlNA9DNY0erXB3bdzvp0v8A8JS7 /wA+fpEbqefZSYY2a2uAsIIbA5e87v3f3GIFdrb6mZWDePeN9VrTureP+EZO2xn73+F/0b61TyfE 8WOfCYyMOIwOQfLxw+eNf1V4xEi78acjo31Gz+n1YtVmewtpyLrrvRbYz1A/+YJHr+k97fTr3MyK b2bP0df+kXRVZWZXmMw8ltdnqBxZcx0HaJ+nQR7f7LtisYeSMrGZdt2OMh7CZ2vaTXYzd+dssa73 I0d+6vQjAC4Aev1WP0uL1cSw316aP//T6ttWJve37fW0kjawlns/N2D+s795WAensBrsyaXPbO6X NBEfvAfR2rZGJpB2meZHKmccEEHaQeRA1+KRXcUa1B/5v/evnP1w6djdS6l0rpFNjYyrnm5tTh9C ljrrGWBn9T85Q+p+LXR0zLwr3hrsTNupDbC0Q1oZc0V/Rd6e271P89dX0qzonXeoP6jjer9swA/F 9O+t1fo7nfrDmVuA/TXOZ6dz93q/o/R/RfpkfG+q9eNmdQym2NsPULmXFj2CK9lbaS1hl271NvqO SBQavrTjjFpDnbBQa2gEHeAZn372z7WtTNxKXtIu9Brx2Y8OERyd38pdIOkNgy2o7vpewa/1tPcg 5XTcbHx7cm5tQqqrc+1wq3nY0eo/9HW1z7Po/wA21qSbjVU+Z5v1do6x1XqVrWjZhhuLUW8Os2et c/2/6P1a6l1P+L4C36qtta4uINZc52p3NHo27v6jty0vq/hdIzunjJ6HkV3YjnumyH7jYTvt9X1t tvquc7c71Ff+rP1e/YeFfhusbdXdfZawAEBrbHOsFUO3fQ3IrerTuw6LLnfbuo3ek+XMxBaMesN8 HfZ/Syb/APrl6pt+r1OJkXHBzcfBxrnepu3N9WHjd6fq/wA4+pn+B/S/zS6/0qv3G6aDQIObdRh4 d2XbWX147HWPaxu521g3O2M/O9rfoILgY9i4mN9ROj13uyco2Zd1gIfucWtM/wAhh3f+CLcw8DEw qzXi1iphJcQJOp83Sm6f1DD6nh152DaLsa4E12AETBLHe14a76bVksu+stN2W52TgX4z8h5xHWPc x1dW1gbjPFVLW+pW9tjv5yx6SuKZFWSOzr52BhdRxbMPOpZk41oh9VgDmnwP9Zv5j/zFyHXv8W3T 7OhHp3SLjgV15Ls1we1+Rvf6bsdjPpfaNtVbv0X87/UsVj61dX+tfTeh5eZinCN2LsssbQ577G1t sr9d3pXVvZ/N+23f/N1fpfpsV/p2Z9auoYWPntZgVVZVTLmMDrbHBtjRY33j0q3v2u/qfy0lu27y 3TvqT1Dp/wBWet9Lfsyc/qtbW432cP2EUt9THbbbkNqZTa99j/5z6H+kWF0f/Fz9aKepY2VkGnAd i213knfe5vpkX+1mNW+mx36P6H2hm/6C9N6FgfWLGvybur9Rbl1XOccfEZUGikF7rG/rE+td7Hen ts+gqvQundS6X0+zHyuqV2Wtvue95O8AWPNlbHOv9zHbD9BNyTlAWISyG64YcHF5/rJY10QCeu38 v0U+T9XPq31frDOqZWH62ZjNDd1jXtYYM1myt4ZTfZT7tm/9/wD4r09xch9aPrO3ojGVZ2Ve2rIb pkYldbjrvmtpedzH7an/AKRrPYtbEo6qeoY2S+91GGani7Df+kc97hWaXPsmz0fQa1/0LP5z99Qw 5icskYHBlgDdzmI8EaHF80JTTKIGoI8uv/cuP9aMejK6tnVvrbZdR0n7VjlzQXB1dth/RuP0d0bH rkcPqHTX2uOdWfSLSWvdD2gu2PpfZVTZXZYz0i6v/g7F1v1xy8nC6o2yj6eRjV0ghzJLBc5+XU6v 3W7LKHfzvp/8H/OLiMhzhjWtqe1jnV2Ma4Oa3k1ei4u9v+jf9JPlEz44kmMdADH0y8ZRaeYwBjqO K5X9vp4k+Q/FabT6D6qQ65vo2AmxjWWNa5lsF3vZ6bd25627xYfqJV6YLHt6laS2SHAi3I3sk+79 5i5zNyKbRZ6VjYe55aC4SGve14DiXfuN2/SXSZVF7f8AF219jd27MfcdpFnsttt2PsNJs2/zrd/+ j/wieBQrXQdd9GPHIETI7E14f3XI/bOb0p/2Lp9npUGybSLXy6xwZ61ntsa332f6P/tpVMzKdf1L DyriG3ZZqF7t7nOsf6noMdY6xzv8HTs9L/B/201vScLKAyLer4dTne4UCpxt1aHV02Pcyqv1PzP0 9nos/fVirPysivp/TG2tdTTk0Nbikuue62m1g9fGe31mVPf7/ZVdXi/Z/Vr/ANEo4xAMRxSMo72Z ni/R+VmJBjrVS2HpfYVxH14pzm9cwL2v/UrMW+qxhOgsaa3sft/e9/8AmV2IOL/jE67lVttq6E01 2AOY45IEtOrHfzH5zUHO6r1HqmVTk5nQq7PSY+t1L8rdXYx4+hbWcdzfa73KeUDVXH/GiySNggA/ YXN6PfgXdY6X1V3Ua3uwMi0Win3HbbW9rvYz3MrbH85/o16gLLHs31sBBEt3OGvhqz1FwQ6i3D6f bjj6s4lGI4h9rKLdpJb/AIRzqsdj9zP9IrHTf8YV1+dh9Ob05ldd1tdAcLi7a1xFe7b6Pu2/1k6G DIRIgiQvvH0+C05oQkIyNE7aHW3Z69g3ZbH4/qOx6cyt7bCI3tLmg12McP8AC0Ws+hv/AMIqP1c6 Rd0bEuqvyvtd2Rc6+xzWCqtrnfS9KlvtZu/PXW2V12tLLGhzT2KpZeDiVY1lja5e1pLA4uI3fme3 d7vesXmPhueRnDFkhHBln7s4yHqjPv8AL6v8eDcjliKJB4gKSdNqfXjEvBabHvs2nQgOcS3/AKPu VtUb8GzIob9mzL8J5AcLKiyzt9HZm15dW3+wgYnTutUXF9/Vn5lRYWtqspprIeS3bb6uPWzdsaH/ AKLYtXHAQhGANiERAX/VHCwk2Se7/9T0Z/Tsx1jnjqmUxrnEisNxtrQT9Bu7Dc/a3+W/eh29K6i9 rhX1rMrcfon08RwH9l2EpPuub6jTfc0te9+77OSAwP8AbU0tr2We36G39LYrtDi6ljiSTAlzmlhJ /eNbo2bkl0okC/2PC5P1Qz68+3EwOp5FmYcezLbdYWhotss9N7bqq6/R/XanZGy7Z63rUer/AINa v1P6l17rHR7My3KqNj/0dLrKw7ZYwuNjrsbH+yu99b6/0X2n/B+r/hV0luNTcyxj26WgCwglpIHi 9m165j6kdE6n0bJ6nTl1OZjWvacWwuYdzWOura5za3u2Wvq9F71HISE41fCb4q/BlhwHDk4q448J hfzHXhmIuucb609uoYH/ALA3f/JVCzMD605GDfjt6li122t2MtpxbKnNB0eWWOzsrZZt+hZ6f6NW rt4tyBGXDvfuZtLQGt27cf8AO9/0tn+lVrEn0QD6mhdrdG8ySfzfzf3FIxGNC7fN+r43/NrCFeRl /qlDm9PrfFrjS8VHPZfQ5j7H41/p3bGOpaz+a/41df0HH+tjujMZ1jLorzZYWW0NFp9PY32ZJdtp fkb92+yj9F/o1R/xkdEf1D6q5TcRlj72WMvbj0s3m2wvrr97K67b3ubSX+ns/wCu/oa1qfVyvN/5 p4NGdQ+vKZiMptpedr5Yz0vc+fY+zalSAld0/rZOnViPL7PWq2V0LreXW6m7rG/HsEWVOxq4cOR7 q31v/rfvq0aDsZ+qXk1w2tvrCYGu57vV/kN+m7etIgOBaeDoUqTKIHW/s/Y8Bl9c+sXRH9FxPUZk VdYa30nMrY2xtjiz9X2WuZT7XZFPpP8AWp/wn6Ov0l1DbMXIy8rBrua3Jxiy2+o0NIrF7Xem3eW+ nY9/pvfv96xv8YH1c6h1CrB6h0fHqfmdLsF2h23OZWWvrx6PZtf7/wBJsfYz/gv5xdM7HzTBGRWH 67nelMj3bG/zn5koC9foiBIJ1A8x/wCguR1LJ6Vhsbg9R6pTjWdRYaN7q2V2vBa9lz97YZU1/s/T WM9H1v0f+ErrWr0vFw+ndPx+nYjnPoxK201lx3uIYNo3u/eXI/4wsDILMLIb02zq2QzJa+sY1Di1 lTXttvqy2V+v9obk1s9Bu/8ArrscavCyMdlzMcMbYJ2WVbHj+TZXY1r2ORTMknWj4gcKDE6x0/q2 DkZHTcmWUOfTbaGGa7KwHWNNVzR72bv3VxX/AI6P1TueXusyqmvILqnY1JJMbfe8Os3L0KnHox2F mPUyppMlrGhoniYb8FRPSax6jasXDazT0AaRoNvu9TbH+F/c/MS0VEkbEDzD5/1766/VLrvSLem5 WZkBlgr91eKwOb6e1z/S3P8AZ6r2/vfzf6Jd30HrnS+p0VVYNz7XV0VvmxjmOLSNrXu3Na3d+9tV ivpGE6nbk4mM55ndsqbtifZAeHfmrH+q3Rc/pHVM+lzXfYAGiq6wsLrjJfXbuqDffW11td/qV0/4 P0/UTwIkSvQjZiySmJwoCQJImQNhWhcP6w9Uz6utZ2VjVsuxzZTgh9rC6tr6WPyHs9Rrm+3fkW/o /wDCWfo/9Kuc6zkU4trc3CY59mRkvutbk0se5zw713O2Oa+v7I+z6LKr/Vq/4NdvlfUS27Lvya84 M9Wy2xrXVucR6zvVs3EXNbu3NZ79n83WlZ9ROkVuayy7OsseAXOrI2buHfmO9L/OVf2Yccp8I4pi pS6yHixgZTLSJIGusv0vDheBzOu9VupeHZjrLLB+kbX6bgS722n7O2qv6bf3PoLaoxn5n1H6P0zF xxkse3JyrGNft2Cux1DLnOc6tztvrW+z/Tf1Fs5H+L2rOrfTTlPbhmB6WVU71JEP/nGvx9zd35zV au+pPUBj49OLmUtbRi/Z3B9RMu33Wyz9J+iZ+sbf7CdDHCAqEIw/uAR/6KT7u0hLS/0uP93954in Gycyqu3DNtTgxjH1txfWbtcXafat1rKvTb/N+p/OMVrojmNzKsbJzH1ZjsujHGM6lgFgbZW70twq rtqsY2yx1r/Z+j9Jb9v+LnBEVW52UXNALgyjcwEiXekQxzP7H00ul/4v8qjqeFnC6o42Hf6jGlll dha06OfW9jf0z9vuUcsMpWJTuPEJAcMeIcHDLh4vllH0/wCbSRMCJ9vh6HXij/6N/hPF9P8ArFnY 2LVj1W1+nS0VsJYC7a32s3H+qrg+s3Uz/wBqWj4MZ/cm6R1HoFWDjVXY7vUrqY2w+k10uDQHu3T+ c5abOqfVr/uO7/tlq0rA/wDA9/RryBP/AIJr6ue/q+Zl1Gq3I9RjvpMhomNfzGhP0doHXumH/u3T /wBWFoXdR+rr6LGsxXOc4Q1uz0pP/Gs91apdKtxnde6Y2rG9P9bp93qvd+e396FNGXolWI49/wB2 P/esE4/rIk5RkOn70jvt+k+wKp1EkUNA7vbPy93/AH1W1z2X1/pmTc1oy6241ZncHNJcY+kNd21i zi6jt4hnFqP8kfkRli9J670+61mAzJrutdPpNYQ520Dc7c1vua1n762klP8A/9k4QklNBCEAAAAA AFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAg AFAAaABvAHQAbwBzAGgAbwBwACAANwAuADAAAAABADhCSU0EBgAAAAAABwAIAAAAAQEAOEJJTQQE AAAAAAA+HAEAAAIABBwBWgADGyVHHAIAAAIABBwCNwAIMjAxMzA1MjEcAjwACzE4MTExNCswODAw HAJQAAZQaWNhc2H/4RfIRXhpZgAASUkqAAgAAAAKABoBBQABAAAAhgAAABsBBQABAAAAjgAAACgB AwABAAAAAgAAADEBAgAUAAAAlgAAADIBAgAUAAAAqgAAADsBAgAHAAAAvgAAAAEQBAABAAAAoA8A AAIQBAABAAAA3AUAAGmHBAABAAAA6AAAACCkAgAhAAAAxgAAAD4BAABIAAAAAQAAAEgAAAABAAAA QWRvYmUgUGhvdG9zaG9wIDcuMAAyMDEzOjA1OjIxIDE4OjIwOjU2AFBpY2FzYQB7YWQ3ZTc1Y2Iy ZmViNDBiYzM2MTIzZWMwYWM3YmUzOWYAnQUAAJAHAAQAAAAwMjIwA5ACABQAAAAqAQAAAaADAAEA AAD//wAAAqAEAAEAAACgDwAAA6AEAAEAAADcBQAAAAAAADIwMTM6MDU6MjEgMTg6MTE6MTQABgAD AQMAAQAAAAYAAAAaAQUAAQAAAIwBAAAbAQUAAQAAAJQBAAAoAQMAAQAAAAIAAAABAgQAAQAAAJwB AAACAgQAAQAAACQWAAAAAAAASAAAAAEAAABIAAAAAQAAAP/Y/+AAEEpGSUYAAQEAAAEAAQAA/9sA QwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMX IiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e Hh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAQACgAwEiAAIRAQMRAf/EABwAAAIDAQEBAQAAAAAA AAAAAAYHBAUIAwIBCf/EADkQAAEDAwMCBQIDBgUFAAAAAAECAwQFBhEAEiEHMRMiQVFhCBQVcYEj MkJSkaEWF0OxwURigqLR/8QAGwEAAgMBAQEAAAAAAAAAAAAAAwQAAgUBBgf/xAAwEQABAwIEAwYG AwEAAAAAAAABAgMRAAQSITFBBVFhE3GBkaGxBhQiwdHwMkLhYv/aAAwDAQACEQMRAD8Aalw3ncjF 512nKuB6DTG5gZckJQ2v7FnxGx4n7uUcKIBUSFZOMbdF13VeswX7bqEGszJDC6bIkvsoYS2mappk OJKklJUjcTyBggcd9Uf+bIKnMQ5KkkkELpwJVz2OHOcdtToPU16c+GBDlFwtqKdkIJUDgckqWRjv xrPXDSVKcXA1kkCN+cV6ZV/brLeBpP0ggiNZTE/wmZz19c6p19VrimKhRmYcFlTqo6lOtFWHEmQE qWCoEBlYG3PcE99ElYrsy4+hU+rqbR929FWlaIyFFIUlzaQnklQ4PIJB7jjQ/P6yRoa0tuRHt6kp U0oQkhBSM+XlzPfHbtjUdHWKjVCOYdVgPOwXQELYaYSjdzxtV4vHONGbCkKlSp8vzS1/cWj7OFho IIMyCSe7+Pd5Umk0urM0WF+JwpbbkVSnXEfbLUooU8nCRgYJwCdGVQrVatCz6pCpKp0NdUbCmpEZ lQkIXtynZxxwO+OMnTGocy0r8v5j7emT4smJBc8Zt5RSh5krHHlWeQvBB9CDzomqtlW1dD9PqsdS XkQ3HmgoPuKSsFfhvNnzcjCXEke+D6afTcEtFOoJmvPKaGMK0jKsYUOZcyo9Tn1yn1CQiVNeW21I ZdKkEo3EqUR5skjA9wf02pY7VeVYduuRJEZhJpMXdHdYKShXhJyPjn0wMa8XFYNsXNR/w5LBQiNI GFpdc3NrQCBg7uO/f2zovhNmLT2WXloy00lKlAYTwME/A0I5maLOUUP/AIpWUP8AgLUw45uKcNpB 5GM/7jXZVTqKEkOjwj2yprtoNl9RIKuodFpVJiqqFNqLxSZzU1RBcyRhCM8pSe57c8dtMmsF0UmW WF7HQw4UK/lVtOD/AF0VTK0RiETQEXTLpUGjOHXymgOl3BcK5MNubVEpzURHfSIyAS2UnCgccAqG CfkaLbkZrikBdHkkKPCkYRx+RVpEsROrYYUoXU+kkbsiQjnj18uo/XLrvddq3O7altxIKXIkFhyR NksqdWt1aNxSgZCRgFPfPJOufJKt/wC+KfSoL0XBP0YY9aZM6pdQIz5aKUrPP/Usf3440iOo1ydQ 5t2mXGrtZabbUW3YlOkLJjeGrb+0SgAJKsFQPYj1Oh6l9f8Aqg3UYsmpP0+ZHQ4lcpt2nMILqR+8 MpGc4yMjGm19RfWS6bIrsGjWdRaUhM+nNzHJkpG5SgoqSEgAgeUJHfPccDVVApGdRwJWMjRh06uK 6GKDAersuRIdku7wJAGS2T74HA5/Uex0S31MqM+W5R6a68220jL/AIJIUs4zjI5AA9tLr6Y+ptVv +oTKXd8SnuVmBGD8eTFb2JU0VbVJKewIJTyO4Pxo4emToNdnPuJSxIU6rKVjCVJzxgnvwB215T4s vFM2qEJJSFqhRTqBBJjv9pp+xSFKJ1jSk3ctbr9nzfxSg1aQ28wrLjC3Stpz3QtBOOf0I7jT5j3t Gm9Mol4xUYEyKhxptXO1xXBSffarI/TWar2hVduXWHHdromuKcCEc7crUrn583caN7WZuRv6dqVH eprjTEWY8CT3U1vKkOY/lypQ/QHWDwi/dt7F9DbmOEkpPLr4Tn3Vq/LofebkRJAMwP3pXSr3BVH3 /uZU95a1+YHf2/IemjPpXfT86tIoU1ZW263+wWs5UFgZIJ9jzpJ1mRIbe8EOFQSrAWEnCvyyNEfS mDWpd6Ux+ntpWWyHXFkKCWk8g7uO+P05GsHgzl1b3iHQskkic5nPPvr0l9bsOWykkAQDGURX1FIq SFfsblnttIUAAmU0An+qc+nbVdUHq1Q5aqiLkqs+NCT4zkdKmz46uyG8hPYnkn+UH30NO9SOqUaS 7HR01mveGsp3oWMLAPBHl9RoevnrR1GpMJozLFapDLiyla5yPES5xwBjbg99fTrjgli+kpLKBP8A yJ67a9dta8M3drEQT5017ltyNPqyHGFuqaKELZbSFAJS55icj886gSrViCGtbgWl5KgGUkKVuVny /wBwNVlSrNTK4jsaXVozL0JhxDcQ+RIU2FYAzx31Bq1yVeLT3pC6lcBDLalgrxgEDjJzxqJcDLQZ IJUBBOFUE8/E5611ISo4o9acfQGiMUu5ZiGoiY6o8T7dQSolKxlKgsA9txKuPjTXgykxo5aRDkrA W4rLTOU8uKP9dZk+iy7K1ct11FdXqMqS43DO7xsDjKCkkDj1Vg+x1qGA6kUxx1str2rdwSrCchau 5Gca0bdjsGw3MxudaCteJRURUe2XPERUF7VJzOc4UMEdu+kX9Rl/1uoXUemVrR5Tq1No++MZJU4+ pfIZTjsnGCr3zjgA6bdn1gvVudT8NKC5UhwqRnAIKOAT37+3/wA1fzaRGeQoMJbjFay45saHnUe5 V7n504y72SwuJik7lj5lot4imdxy3rGd+2j1G6e1G2Zv3yJNUlJUIsSIpS3Y2wp2tg/xfv8A8PAO e+nZ0f6vz7ohzrcuajzo1fiKVGeCIyspVtOVOj+AD1UcDR6qvWjR7lVAqEqMmehJcRIcYACN3dAX zgnHI+Nc6a7ZS7lrUmixY/4xU426TMaTn7nYnaE7vcDHAx6d9N9s+6CXkyNQY08eVJLs7RhSPlFY VDJWchXhsY/djURSDE+C3/xqF1G6G2vfTrFYD8mkVV1KDKlR/OJCQgDCkKO0EYGFDHznXSItfgBB bcCthTjYc5xrrefWKiWfUhQn46X5zDLRUyqW2ytQU1vBSF9xgY7jnjSdw6GQCTEmKdaAWSKHqD9O FixZKEVFiuVJIzuU/NQhB/NLeDg6Cvrrp0enRbQqEONlxtEiHtCv9JKW1JHPfGD/AF1Y0D6lrbTX alUHLdqzaZ4aWBvSvYEI24ISDyTn45Gq7rC9Xeu/TmDcNpW3MSqiTZTMmE44kvLC2WlJW2B+/wAK HHf4OglzFrRlJEZCkL0mvW4rOvyn1mmKitObxHejLTuDzS1pCkKx27DB7gga271D6jW/RKYpx1f3 RMtyGpkM71h1skKTsPr65OBjB9RrLfSzoT1IrtRgTp9E/wAPwWpLTz71S/ZurCFhR2tAbsnHqE6d HWzpJWKrAdqFClrmy0zTK8NwhKykt7CnPbOACD8YwM6y+LJcVbFCCUyQCRqBufydhntTXDw2HQXR IG3OiOz3LRudpFUhw4qw6rYFuNcsuZ7FsnbnPoR6jRbNq6IU80d+rTD4KGvuXkw2iyyl5RQ0HPbc oHsCAMZwOdIvpzY9xybTl0OqzvwiVUJzKiW171stIWnPIwPEOPTgcaeN1W68uDVTDS7MRU6eiFMT uAeygKSh5J4BUAskjjOBj5wvg8JS2+0lYWlK4B3iAczv+7EU/wAVwtujs5g5iQJpTXh1I6S0m6n6 MaG/VZERSm5ciOvwW/FSSFJCcgE5B5GBp1dPJ1BqNATLoFOep8dSsKZfjFlwHGfMDyeCMHJ1+f8A VfDQwimrguJrAmKDkxxSkLUFK7OIIzuyc5VjW4ejrlcdmXCqoNFNPbkMMw3FE5dUhlKXFgfykgYP GedbeBm2vm22mkgqCiTAByw9M5mk1uvOtS4skcpnn5aUOwatbodQsyYu/eVnCnsZx7bf7aF77p1h VeTIqF11qChlyMYkZLxWG42/glAKBlajjKiewAGBnV/TrfUM73IqUZO5XiNnA9+2lT9TdqzplIpl PpMhpyQ666/5UIyENNKWrkDPpj9dMoXclYCmwBzxfbDVFRGft/tTabCCYsOkqmxp8inQmGXjHZLi fKnCF+hGUgHGPfv31EvWirftmXHW99jEWnMl5cRSEttZ85z6cZ5OiSxqdVYNOj1qhVuZT/xWFEck sxihaFKS0AlXmGRgHB/2176jf4nnWHXGaldNSEJyE6iQhSGwpaNvIGB69tPECdKCHHMMbeFVfQBu mG+7jeoMqPJgyqOGkBlWcPoWlJT8ZSU8nj9NOqzKYGbfq6amwqmRHwlvPjBB3AdwW1HHJHPrrP8A 9H9CrVs3NXadMe2yWqY3JTgchLm3I/TbjPxpz3Oi7KvT324y6elSXEkNFfjvOpB5/ewhJI5wQdRU xlXUgHWrS3KhbUC40Ii7ZDzigDIZQolJIwStZ5I/M6ourHVeo2xejltv0xdLpyI6JH4u8QWnUqOM A9h5vJt/eJ54SMn5a1gXi7UG586dAZjoT5EvOKfUlXulLZS2n1HbOmBdtkUW7LYZotwx25xjkORp C0Dew8AQl1HyM9jkHscjVWwqPrM1Z3DMpyoGg122qxGWKi0yw6hCllDqQQtWMJSD8k5J+McY1cNL tqlpmxo82O0oIalRHGlZIdCMEAj3wMj5+NZ9vfob1Nse3IkOzauusl+ovvzH23UsuKBQkMjw3FYP +qpWD3OvF0Uvq3TOuMVNsUyfIoEeTCWl0NIbivpS234wLisAjIXnnVeyMYQrLlXAZOLDnzpyI6t2 lBveBRa5WmI8uc+PDLbSNrSiMDxVY8gUcAEnOcdhzpZ/UPRL1ldbH5lKs+dUacBHW3JTTlPNKJY8 JZKknJCQT5fdOdGVn/TRZ7HUqp3dPqH4zSlSy/T6aoZbaUTuIdVk+IEk4SO2AM51e/Uaqc0uDLh1 eZBRTIjk4tMLKQ4Q603ng90hzg/J1HUjCM9KG88tIJInpWVahZl8uyZzkO0q8jc6Sw21S3U5Tv3E Dk7QMnjnWqfpAo9VovTedGq9MqNPcXVFrbTOZLbi0+E2N2DzjIIB/wC3Spr16JqlsMNRZEaLJeJ8 R2Op9MhGMBSiVLIyod+Oc8fFqzd900jpXaqqTcMxlJmyw8+f2hLbQb2p84J24UrA7dvYaAlYUMZO SZ2I0ypUXiCSEg1qBqnw2Xw+1HQh0Z8w7899AlkXxUZF0zbPvalt0ittuLXAWjP29QYycKaUe6kj GR39cDkBF3H1lr9SNMfodVrFMS3PQ2+h55Cw6CcDJ2DgYPl5zn41o3qtCbkWLVZiYJlzafFdlQwk 7XA6hJUNpHIJxj50whwLBw/ijB0uTX2e1b8qorUIDsuWpa2lIQQhW9GNygFFOSMjzDVhTHlQGksP R6kpokq8aSpB8MegJBz+Xc6zz0TqjzXUymLQthtiR4qZxkyA49uWyVt43EqB3eX9dP2+VOOURwNx 3HEgjckjaFA8f2zrPuXW7K1ceZQMpJA5nUn3NNMuduUhXdQ31H6fWX1HkRfxAORKnHcDjMthCUOO JSQShRIIcTj0PbuMaJKBb8m3Y0eHTJ78qOXlKfErClYUSSoKGCCOBjkaBun7l1OUltm5Woqak3Nx G+2XvBbChsUSB6jP/j303AR76U4HxI8RStTgGJBKZTod8jV7hrsiANDQoJFlNbgqq0cFJwrc61wf nQC/dvTqX1Fk0ypO01lEZrwIVSakBTTheSA4lWBtSodsk/HvprQqsmTJQxsZSVbh5ZCVEKHpgcnQ 31ctRm4LQrAbjMvSvwyQ2w2prIK1bV7hjnfltO0+h1tuSASNaqhH1hCzANcKNaVmUWjwYUWoRRFZ YSlhbrrRUpAGArce/wCeh3qmLLoduRpLsWNVmpU9iKpiPIaQrClcr7HISBuI44B0Q2UxDl9ObclV i3qa1LVEbZdZlxdpbIBBGCgkHcO3ydXbVv0Go0haUUejNKWFpStiMhQQSMbgdo5wdRCsaQrnUdbW 0pQnIGKFbDiWC7ds65aRXm3piacmHKYdWlASyVBaFlJwcHdwrtzjvoycqlotbluVGho/mKn2h/Xn So6A0tiFf3VGLKosVM2nVfw4k1UfcoxHWw4hgLA5SkjJSPVX5abNODMt5Tb8WCpBbBwmKpJz2Odw xjvq2dDSkwSKqbXu+n1mNVIzKokExpLseKWZLai+nHlcQnjBOex/PJB1Wti42qUIIvSQ7MEdLaZL sKMMrKOHFAL9+Tj9NUPVm2XIF6WLcdIov3SIteKZiY0cAoaebDaSojGEBYR3GMnPAzq26mLrlA6X 1iRT50qNLhxFuJqMhpl5QI82SlIyT/CMDjjXAToa63CiZHrUPpxGvu7Ol9NmVi9JlPqUhktyVxoD SFNrbcKFKQVA5zsJCiMEKzjB0R1KEmFcoqqrhqilJpyIRjh1rYVIWVeIQcDxFbuSABgemvNuGp3Z 06pk6JdL0d6dEZd+9jRkBaVYSVAJVlI5BSQR76p+o/T+r3BciarBv+8aK0Y6W/s6U42Gdyc+YhX8 Ss/+uo42lxOFWniPauIMK0qulVm4ah1VVZYnPRYMmkvS4VRYkgrykoSobEjaFhS8gnIwOx51A+oh MtaKdT4UpKpJp7olh1SQXGMpzzxklSewHp6aiVew71tRqFcFL6gXdWih5tuTClKQV+GtQBwEpOSC RnPAGT6ak9ZbFu+6L3aqFLpzTsVpllMeQZKW1MkbieCc91ZOATwnGlV2KW2j2Jgq5kq06E/elLm4 UZThOXLrPTpWeGUuOsvOh+NHbASAl99DRScbv3c57Eeg9NEtRdiP9HLMCnZLzb9Sn+KW2wFJRlKS QVZSRlGATgH9NWlX6D3aufKlNS6bNmyVFK2Y00eJkDk/tEpGBxnnPOrJPSO+2LJolAVQ2VSILZUJ i5baUMKU844sHCieRt5wrRAlYmfCs9LGDVKp7v8AKV9NkQIvj023pbqYMtbbjiZbzK1KUhW4AhPG MgHCRuyMZ03R1Nv6r0x+PPuGzWo8ptSFpEZYUEKBGM+LwcHQ/F6YdQY1wRnosCD4Clo+8XAkpdQW SsFW/cc5IB7D50BU22LYeJdXe0dtalFSk7QMEnJGmuHNqUFdrkMoyxHeZ+1GcUpBI9zh/FMFVeTb cB6bTY9iSJSnG1rMamnx3VpxtUpYcKiRjPtp1fT5e9bv23KpMuBuF4keZ4CEsNFCSjYDyCTnk6zN Jty3osBx2NeLMlxONre3dnn2Tzp2/SdHkOWlWhT6oG0pqfmUY2d37JP8x1qvsMi1JAkzqRH2pe3d Wq8SkqgRpMj3JpvzIFOhzoXgRkNreeKSQog4we3PHJGuzdEKJv3LdYqwG4nwVSN7fPpgjOP10N16 sIYuJjxaxGdahq3ON7UJJJI8oOe4x/xo1hSo8yM3KiuoeZcG5C0HII1hstNspwNJAHICK3Fkk5ma /9n/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAXcD6ADASIAAhEBAxEB/8QAHwAAAQUBAQEB AQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh ByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAEC AwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAa+AjZ 6YNecx3dpLNerHuyjMcAcZr0WXHltkcYNedIkYeZoU8seYxbcMZAo8g9DK1+4sLzRobLUZxbc5KD qRWBPqugNaw6XbQSStEMRqR39a2NSl0PVtQ+1XkLzzp8qhBgDFVb69sbfRr2eHT0t5YxtWQrzRd7 Dsjj76afVvFNjBOCjRsqtgcKK9QNlbXGooix+ZHb4UNnjjvXMeGNRWXw1fXtxZReZGh2TEfM341N 4Ivr54Lqe4ObdFZgScnNUIy79v7T+IYCJ5iQsFPsKpePpTeeJVtYEdzCowFGR9KveDphd+K7m8MW RuYk56VEviSaPV9Q8myRsyH9+y5yKNgOZhgWa7O+QrIo+aMdqlLTxX0QVz5PqKsCezub6a7gIExB EvpmoEIgR9xJhbqD1Wq5raoTXRnSWeoW97lYSSU4NWiBWHoEcFoJMyD5z8p9a3iK9bDzc6abPOqw UZWQ3FGKXvSjkgdM9a2bMzRt7e8KxYkAXeuF9eas3lrp1x4lQz3DeerALGPUUyytCLm2YXO6QNnb ntU1q2nzeIXbyWe5Lk7z0BrwajvNtHrQ0ihovbxvEnlR2v7kPhnx2rLk8PNd+MXvZdWSOMyZSAHm tjTm1STWneRStshbqMZFYmm6Po0vimS5OpvJdySErEG+6aykXEytfudQXXLmzkgDJuA84jqKoapb 6i+pzxWpaKzVArSA8EYq7qVzqn9sy2t1kwRzAByP4c+tU9egvm1W5Ad4tN+7uDcFcdRUI6b6GDLb pY2Jggm+0MGBLiug0HzmZw0Z8ryycn1rAkjt7W2WCwkeZA3+sI5NdBoouT5rlT5AjPGa6o/CcT+I zdOFy1+UtgS/m5z6DNb/AMQTIPEGn7Bki2AbHrWHpcVxNeqlvuGZc5zjvW549Ev/AAkVmIxkrbgH 60PdCS0ZBJoWoW/hi61CQqFGCq5yTWfp41WWz3SQ7YymeT2rqpILq2+Hl+J33SsQUw2cVzOnwas9 hG8rcbMnc2P0qJO7dyklYxH5w3Tk8Vp6AR9tlA5O3rWZI275v9o8Vo+HyDfvs4BWt8PpNGVb4GdD 7UlPxQRXtHmoZSYp9JigY3FGKdikoJY3FBBp2OaKYDMYPSkxzTyKMUgH2F09prdiAcRysVatLWXu Le+kWKYKCeFA5rn75zDHDOOsUytn8a6PxBdy2/kXNvHGfNQEs4zXi46Fqyt1PSw0r07GdJcG4aMR C5bA/ecd6wbrwpr19dTyJKUtn+4GNaEmu3+/yxMFJ6hErK1f/hJbyVBYXcvlbfn+tctrHQe/eCLO Sw8HWFtMwaREwSO/NbYHpWD4DhuYPBWnR3blpxGd7HqTmt8VSIaDFBooNO4uUB6UtAxiikOwUvSm iloGFA60UmaAHd6Q0UGgAooFFAAaKD1ozQAyZd1vKvqhA/Kvm7VLd01G6VmAIkI5NfSo9Pb86+df FcIHim/Zo1ixIcLnr+Fb4ebi3YxrRTRR0jSH1fUo7KGRWbO6THZa3/G2rxwCPRrJQYkQCQ5/Sruk wweD/DUmpT7Re3Y445A9K4J3immklcPLLIxYljWzm6ju+hiopbEZZ5Rt3E9gkY4pht2QgsyxA9Qv Jq8qS+X8sexcdAMVHLAfspcMFY9aUq9OHXU1jhqk1e2nmeleDJ5dB+H19duMJO22D1Yms2xjZIfM f78h3NR56zaDo+n2zk20Y3yZ7tU/+7xXFJ8zudMY2VjG8T4Nlaqe868fjW0gAx/KsPxFE8p05EBI 88Fj6CrWoX81uGNuFKjjcaaTtcFq7F29lSC2ZpWCA+pqpFLFPHG0bZjA4PrXMQRXmuzs88rG3Rvm Pb6CuhKJC6xxAKirwtZU5ym72sjorUoUkknd/gWNwH40oIIyeKiZxtAJGO9PTnG3pXQcpZwNinGT Sorb8A8t1qN7iG2TfM+CP4ayLvWTIQIAVT9ahsZuXFzHaoSXBfsorHu9ZkPCcY/hHWsmW835JY57 45NQea82fLGxe7N1qHJFJXLjzSv80pCKecd6py3UiKfKTGP4j1qMuI13M5Zu2afFHPcnEUbc9yKz cnLYuyW5QYyzsS5LE809QWbG07uhxW9HoqwoJLyZYV6/McVVudf0PTAVt4zcyjqccZpqk95MPafy oqx2VzMcRxn3NLNYfZlL3MqIB2JrKvPFupXeVgVbdD/dHNZLR3d2xaeR5Cf7xotBbDSkzWn1S0hO 2LMh/Ss+61i7ljIjwi+gFTW2kSOMhGI+nFXG0+GCM+Y6KfQcmpu3sitFuz6k8OMW8OaczdTbpn/v kVqVm6AANAsAOnkJ/IVpV0I5gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACik5ozQAtFJk+ lITzjFFwHUVWub22s0L3NxFCo5zIwWuevPiH4dtMhb03Lj+G3Qv+vSs51YQ+J2Got7HVUma85uvi ovIstHmf0aZwv6DNZM/xJ8Qyj91b2NsD0JVnP865ZZhQj1NFRmz1zNJmvEp/GvimUEHUhGD08uFR /SqbeJvEjHJ1q7/BgP5CsXmlFFKhI95z7UZr5+fX/EJPza1f49pTSDxF4iRTt1m+GfWY0f2pT7D+ ry7n0Fn2pc18/p4t8Tp01m6/4EwP8xVqL4g+Kof+X9X9nhU/0q1mVJidCR7rnNOFeLwfFTxBCQJr axn/AOAsp/Q1r2nxeZiBdaI/u0MwP6HFbQxtKWzIdKSPUaK4yz+Jvh25IEss1q3/AE1iOPzGRXRW eu6ZqH/Hpf202cYCyDP5V0KpF7MhxaNGim7uaXNVcQtFJmlpgFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RSUALRSZqKS4iiHzOBUuSjuCTexNSZrOk1VFOFGfrVGXVJGzh8ewrkqY6lDqbxw85dDdaRVGWYD6 1C97CvG7J9q5x71mPLE/jUDXZPGa8+pnCXwo6I4LudE+qRjoKgfVm524FYBuCe9MM5Jrhnm9R7M2 WDguhttqch/jxUTX8h/5aN+dZBmNN81q55ZjUe7NVh4roapvGJ5c/nQbsj+I1k+ax70nmNmsnjp9 ylRia/2v/apRdn+8fzrI8w0vmHjmhY2fcfsUbC3n+2akW9bs5/OsQS9acJT2q1j5rqS6ETeXUJB/ Hmpl1Ju+DXPib3p4mPY10QzOa6mTw0X0OkXUFPVfyqZb2Fh97H1rmFuGHepVuTxXZTzZ9TKWEXQ6 hZFboQfpTq5xLsgggkVaj1B1HLZHvXfTzGEtznlhZLY2qKox6gjfeGPpVpJUcfKwNdsK0J7MwlCU d0SUUmaO9aki0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFADX6HPTFec3EtxHLfzxW32pQ5VUXtXosgzG2emDXnE9nqtvaytpM6Ro8zFzIeetCAzli1dE MsemxW4wW5HIrjPElzdGw8ydgUuXx5Y/nXU38Oox2kks+qh5FH3Q1cdfwrLqlrbJKZlbDMc/xelN bgbM0gsvAKW6LsMj7Rx1FXNPQ6X4Du5twIlHy496peM5GWPTLFVI2LllH1qfxUf7P8H2lnG2fMbc BntTF5h4QgWx8O6hqO4AGNs/Wseyub+10OR5rVUtGJbfjlga19slh8OmBOXunCoPesTUF1PSdEj+ 1Si5BAHlKcgCi2ozItEhEE8sSEQyHgHrSRGcsUVRJH/cPXFPBP2AEDbvOcf3ahhtxJIWhudtwo6Z 4NNIVy5bhFdMZ+z9HU9UNdHZy+YhUSeYB91h6VyMdyyXLB1wzDa69mrofDlpJb20zucozfJzXThr qpZGNazhdmtj2pyqGZQxwD1NGKfGE3jfnZ3xXpyfus4I7o1NPhtftcRhlzIgLN7jFSaTexT6hOkN qFIViZPQ07Tns2kkkt4yHiiOfeixu1jsLm5nC21uw2bsYOa+fk7ts9iOyGaPBqS309xdS4gVW+Ut zj1xWDoFl4YOsTNb3byXjljuJ4U1uaQbJmvGhvjcEREPzwAapaPpGhwRXCW1vtkkQ/OeuTUt3Gjm 5Xv4r2VNQDyRRTZTPdf61QvrZ7uS5u7uUxad0Zt/IH0q5aJfHVYE1DzSI5iqBv7vaqWoaKfPupdW lEFo5I+V8k/hULVnR0ZkukUdpFFYsZIFf5XPVhXRaMlwVmZhshKYGDWE8SJb28dov7hGwvuK6PSR NsnBdURo8cdq6V8Bxv4ibRvC8UdzbtLrEXmSPlY0bnr0qHxvceZ4sVAMeRGEPPU1e8P6BpdlqNrO +orLc+ZuCZzzWF4wleXxrM5UcHkVEZNyLaSidTJaXEHw7v8AfIGd8MhU5xXL6dZ6qbJHkZANuTub tVvT727m8M6pabz5RGVX0NVNLsNSNnG8sigbf4m5oas2JNWMOfJboM7jkVo6D/yFCBx8vSqE5yze u85q9oRP9sLuGPlwPcVvQ+NGVX4WdQVwabipMHJzSba9s8voMxRT8Um2gdiPBoxUmKQjFAhuKMU7 FJigBhFGKfikxQBU1CPfYTAdhu/Kt+eWN/DlldmETFYwMMeBWU6B4pE/vKRV7RPLuvCXkybiIpCp A6nmvLzGPwyO7BvdFW21VZLqOPybaAPxvIzim+K9Q1HSNKjuNNnjuHeTYyoo496Vm02OdohpzvNG PmBPSprq5NroF5qkWmxhbYZMTHJNef8AI61Y9U8CXFxdeDNOmuhiZ48sPxrfA4rn/AeoHVPBWnXp i8rzY87B25roBVCCkxTqQ0AGKMUtFADcUuKKWgBMUgFLQKADBoxxSF0VsM6g+hbmlJXaW3DaOrZ4 oAMcUYqAXtnsZ/tUBVepDjiqsWv6RPvEeo27FevzigDQIpHdYkaSRwqKMsx6AUyC5guk3W88co/2 GBry74zeMbfTtDk0G1umXUpwCwTsnfNCA2fE3xW8P6Lp0zWN0t5e4Ijjj5+b3ryfwVLqXjfxdNqe ohfsVu2+dvU9hXmcFvPcXUNrbgtPMwRccnnvXrniCa2+HHgGPRrSXOoXi5fbwST1Jq1oRLVWMDx9 41W+8SvZwxg2Vqdo2nvVLTtZinA8rax7o3WuGDED58ljyxPUmlV9rh1Yqw7ile+jLi3HY9RW/jun WLaY2zypqtdJiV44zuViAo965C11yRmRLjn+7IDXVaPcR3OpWJnP7sSguR3FYypKOqOqNduNmdst i+mrZ2r/AHvK3t+NWJpUt0Mkx2r6dzT/ABFqls+tNPaN5qbAqewrj9U1gQEtIxlmb7qDnmumFJJc 0zjlUcnaJoalqq4LyMI4l5ArNs5r3XXeO3QpbEYMrd/pVG206e81mzTVFIS4BZY89veu8gSOCERR IEReABxSnU5ttEEI216lJbWPTtMitIuQp5b1NRTYNx06Lj61auZEYBF+bnnFZt80is/lEbscVkmX qTu0cUW6VgF6nms648RRxjy7aM+gesO9kuoxvuXJTOB9aqwsxkPy7s9FFJ1OhXIzSMl3eyFuXOef anqTbSfvCPw5rU07w/f3lv5jyLaw/XGadM/hrRAy3N39qm7qnOTRZiujMJDSbo4fv9gKsQWUhlZp CAmOBVG78XmUGPS7FY1PAYjJrS0EXU2mtcXmS7P3pRjG422SRWtjarvnR5pOuAOKp3/iG5jPkWcK wD1xzXTGaONuVVvwrntanVLwNHAm5xjNJyeyGorqc3dpe3xLTSSSE+pqOHQpmIJAX61v2qO8gMjA A9hW9bwWwAOzcfU0KF9xufLsctb6AvBIaQ+iitSHRHXBSFE92610SgAfKAPoKUjNaqnEzdRsx10c N/rZS3sOBTm0+2hQlYVz6nmtRgOarT/dqrWFds9x0f8A5A9p2/cr/Kr1UtI/5BFp/wBcl/lV2oAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACkJAGSQB71h+Mbp7LwlqU0UjJIItqspwQSQOPzr5wudf1WZ2Mt/c vng5lJz9eaDOdTlPqssF6kD60zzothfzE2jqdwxXyg2t6jIux7y4YehkJxTP7TvNu03M2PTeaCPb rsfWIuIT0ljP/AhTPt1oH2faod2cY8wZr5OW9uFBAnlCnqA5waQ3UzNu81g3rk5/OgXt/I+s0u7e TdsnibaCx2uDgDvVSbXtIgUmXUrRcdcyrxXy5D4im0a3v5sysbi0mtvlboXUqCfocGqiTu8ERwfu jvQN1tL2Pq0+IdGVFc6rZ7G6N5y4P61HH4o0KVmVNXsyy9QZQK+VvOkBo8x/Tj0oJ9v5H1N/wlvh /ft/te0yf+mgofxb4ejYK2sWYJ6fvRz+NfLO+RiMZJoLyCgPbvsfU0nizQIs79XtBjsJAanj8Q6P JaC6TU7UwtnD+aBnHWvlISPjHOKqvdzDVoY97FBEflPQc0DVa59bJ4j0WRtqaraE4zxKMfnS/wDC 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 Yc47+9USZOrRq9uQQCMjFR22kz28PmxlS2MjNT6pgW4ViN24YAq4S3kIM/wVnbUu7sczcz6lcKUm vGC5xsQ1HZaLA8gZkZ2Pc1ZtYwVkbHJc9a07FDv9q0Ub7ktmvpHh2AJlgqgd8VsXllHa6aqR9N1S 6Yv7qptWGLFB6tVWSM1dvU59h82KwtZAN/CtdJs+auf1ZN2rRD2rKxvcZCNvOK1YGKqDWfCv71V9 612QBRitI6GciVJM1JvBFUCSp609JfU1RBbJzUE/3aPMB71HK42UFHuukf8AIItP+uS/yq7VLSP+ QRaf9cl/lV2pAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKa7rGhdyFVRkkngVky eJNOQ4Ejv/urQFzYorFHifTyM/vs+mymr4osCTkSgdjs607MVzcorCPimyyAI5vypzeKLEfdWZv+ A0WYXRt0ViHxRYgZCyk/7tIPFFiVyUmDem2izC6NyisIeKbPd/qpguOuB/KhvFNmGIEUxHY4oswu jdorCbxTZgcRTE/Qf40HxRZgA+XMfUbelFmF0btFYC+KrU53QTA9uhzR/wAJTbZH+jygY9qLMLo3 6KwD4ptg3EEpX14FDeKbYA7YJT+Qoswujfornx4qt9uTby5z0yKF8UwHO63kHpgg0WYXR0FFc+PF UGf+PeTH1FDeKocfLbSH6kUWYXR0FFc+fFMOBi2kJ+ooHimHbzayBvTcMUWYXR0FFc8PFMWTm1kx 7MM0h8UpnAtW+paizC6OiornT4pTHy2j/iwpT4pQAf6K+e/zDiiwXR0NFc6PFKbfmtGDezZFJ/wl I3f8eh24/v8AP8qLMLo6OiucPikZOLQ4zxl6RvFQ/htDn3eizC6OkornP+EqXA/0Rs9/npq+Kjg7 rT6YaiwXR0tFc1/wlLbh/oox3+ag+KmzxafL7vzRZhdHS0VzTeKWP3bX8S1A8Uvt5tRu/wB/iizD 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 PY0AeFWerTt4htb2aUtKLlXL55zmvtq1m8+zhm7uit+Yr4asrGca7bWTxkT/AGlYymOQd1fctpD9 ns4If+ecar+QoAnopAc0tABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRWRF4k0yfxJPoEczHUYIxJJH5ZwFwp69OjCtegqUJRtzK19QooooJCiiigAooooAK KyL/AMSafput2GkXDSC7vs+SFTIOPU9q16CpQlFJtbhRRRQSFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSUtFAEZijZQCgwDkDH eq9xp0FxDOjAjzxh2HXFXKKAMpNFgghSGABYo4yqJ7+pqnbeHTZxRRRyFiSTM56kmuhooA5OLRNQ jvpppJNyySbY0/uL6mori11L+03jSMC2gUF5D/Fn0rsaQgEcjNAHE3V3NC0MYtZDJLyox29fakuL +K3017yX5Y1wCfc9q7VokZtxQbsYzjtVZ9Ms3thbvbo0QYPtI4JHegDjYbqK4gEm7ZkbsNxxWeNX ha8tTFICfNABPGee1dzfaDZX1tcQum3zwAzL1A9vSqn/AAiGlm7t5jD8ttF5cSdh7n1NAG8rbkB9 RTqZEnlxKmc7RjNPoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwfFnha18XaVFp95PNDHHM Jg0OMkhWGOQePmreooLp1JU5KcHZoZFGIokjBJCqFGfauf8ADPg+z8L3epXFrcTytfuryCXGFILH jAH9810dFARqzjFxT0e5xmvfDjTdX1U6raXV1peoNkvNaNt3n1I9foRmqlj8MIhqVvf6xr2p6rNb OJIRNIdoIORnJJ6gdCK76ig6FjsQo8qlpt/T3Oah8G2S+MJPEtzc3F1eFSsSS42QjoNoA7DI/Enr TvFfg7T/ABdb26Xjywy277o54SA656jkHjofwro6KDJYmqpqalqtF5EFrC9vaQwyTvO8aBTK+Nz4 HU47mkvrVL6wubSRmVJ4miYr1AYY4/OrFFBld3uY3hjw5b+FtGXTLWaWWJXZ90uN2T9BWcngWxtf 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 3OKYxx/nSUZ9uKTNAw9M0oOTTSaFOOcU7CZJnNKM5qMGnZ4pWEPzS54pgNKD6GlYQvTijvTcjNJu JosBKCOlHU8VFmnBqLCFcY9KiySKlYhl5/Ojj0qgvYiK8VA7bTgmr4VTztrPuBvuCF4xVxKi7grB qUg+9CRBTk8mnM6qOTT9BshdscUzJzSyOrtwfzqIsT34q0ikh+eaeO3NQE/WpI2Oc8HFNoLEwGaC DnNPjIYZ/Oh8Cs7kEJBphHapSOelRuOapMY3bTsEelJuxwKGPemAc0ZpM/lR/hTGLxjrR6Ume1FI LC9fpSGlJ/Sk4NABxjmkPtS/zpM0wDPWm5Gen5UpJA4pOcUxid6XPak5780uePemAoGaUdabTs0g Hcf/AF6dwMfWmA80o/lUiZYRgatRniqUTZ4qyjED601uZSNG0b98n+9Xo2jPush7GvNbXmVPrmvQ tCfMJFe/k8rSZ5GOWhs96Wk70tfSHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADW+8tebfHO3lm+HFw8 a7vLlVm9hzXpLfeWuJ+LiyP8NtVWOMyMU6AZ49aAPkYT5UfSvU/gxrC2N7fqTy6ivKFiYKMq/T0r v/hEpm8WGxWFnedMg44GPWgD35PERHTpU48Rpj5jTU8M3Q6olSf8I1cf3EpAA8Qp60v/AAkKAdaX /hGp/wC6lL/wjU+eiUwFGvqR1pRryDvSf8I3OBxspf8AhG7j1SkA4a+g70o8Qp60z/hGpz3SnDw3 Nn7yUAP/ALfjI60p1+MdCaZ/wjc395KP+Ebmx99PyoAkHiBPel/4SCMd6i/4RuY/8tE/KkPhqc9J E/KmBy/xL8QRyeAdSgBw0iYH518wiYgYr374xWd9pXhqKJLdrhLltrPGudn1rwNtNvh0tLg/SM0A RSz9sZyMCug8Iafc6t4r0vT7glIpJlBI64zXXfDf4QN4w0a71HUZp7Mq2y2G3GT6kelUdc8FeK/A 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 UgqwBBFPoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQ8ilrkPiVqGq6Z4Hv 7nR2CXCpy56qO5FAHzx8RorL/hZupGw2iGMgPt6b+9eofAPSymmahqzrzPJsQ+wrweyklvE53PcT SYJPJZia+u/AuhDw74QsNPxiRYwz/wC8eaAOjooooAKgu7aO8tJraVQ0cqFGB7g1PRQB8d61pb6N ruoaXIObeZlGfQ8j+ddJ8DtZOkeP5dMdsQ3qEAZ/iHStr46aL/ZniSy1mGM+Vep5Un++Oc/livLb a/fRvEmm6tGSDBMrHHpnmmB9r0oqrp94l/p1tdxkFZo1cEe4qyKQC0UUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFJRQAH2pMnNI7 rGpd2CqBkknGK8w8ZfEsReZYaE6s/KyXPZfpV06cqjtExrV4UY802d/ea9pdhMIbm9hjkP8ACW5q zbX1reLvtriOUf7LZr5hmuJLiczTSPJIxyWY5JrR0rWLzTrhZbed42Xpg8V2/UbrR6nkvN2pXcND 6VyccCivBLzxH4hmnW/t9UkDDrGOg/Cu+8HfEBNWK2Gq7IbzGEk6LJ/9esauDqU1d6nVh80oV5cq 0fmd+OlFNB4HNLXKekLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAeZ/F/8A48LL/fNeZ6WT/aMRAyw6CvS/i/xYWX++a8qikaGVJEOGQ5Br3sHH mw3L3ufNZhJQxak+liq6fatbkjuWZN8hDsBkitQ+F/OLm0uvlBwokGCa17PY5a7t7bFxc5BlIyFf 2q5arfyTtHrFkI1Vd3nLxuNfMzwdSlJRqLf/AIbfp3P01cQRxNN1MLKyile9u17qL37bnHWeg39/ fyWsCqTG213zwK6u00KDR18wSObhhscEcE+1H/CPiW4N5Yaj9jRhzEpO4n3qwTeCI2z3ZLY/1jrW lDC1lNScG7f11OXNM8oV6Xs414pSW1n+LV0Sapcw2sM8dy4iIXK5P3uK5PSnaTRr0MP3QkBX61Jq HhvUp51cXH2oMcM5P3aW6aG1tU0+2zsQ5kY/xtXThKVWri4vl5VHf+vM4czr4LB5ROEKqqSq2tby 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 Tb6U/jkUH36UXCw0DnpSbRnIp3IPpRjAoDoM6Hn8qMZIpw5+tAPrRcSuNI7U3nnPTtUhx1JxTV9R 0oQ7CAVv+CBjxjY/8D/lWF0Oe9b/AIJ58Y2JP+3/ACpPZgj2migUVzmgUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAAabSnpR1oA8P8A jBpT2WuQ6ov+quV2t7EV5VJqFu8phZj6c19QeOPD6+IvC9zahQZkG+I4/iFfJF9Eba9likG0qSCD 2INdcar5FboeTVw0fbNvrqbcFx9ikGSTE3T2rft5g/ze2RXNaPY3E6l5iRbngA9TW8zJZ7BnaOg9 K9Cg5ON3seTi4x5uVas14ZVZfLk5Q/pVeeA27DA3I3Iao1fOCBwepq7BMpTypOVP6V2J30Z5bTg7 op9ec9aMfpUk9sYXx1Q9DUealq2haaaug3YX3p4z7ZFR4yaeKBMkDfKV9eaVQCw9ajXB6VLGCSBT RL0NLTxtYkk5AyuK9o8Lag2paFBK5zIvyt+FeMQ/Ih9fWvSfhvc77C5tyeUfdXLmFO9Hm7Ho5JX5 cTydHf8AA7qikpa8M+vCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKQ0tB6UAcF8SrVLm1tC4JKtkAetcYZLpVTF1MuOB6CvQvG9vFNBbmUsNrcYrlAkITaHJA9a9TD RbpI8jFyUarOZk0qOSZ5ZX3MxySaVIZrVBHa3BSPOStdpDp0UsaySAYPQAVYTTLLOTbgn1pzxEfh buKGFb95JI89uLf7UQLhxI68ZJ6VFa2z2dwzRuIjjqD1Ferf2Npbaez/AGRN56msaTwzp9xnapQn oaX1iNrO5f1SSd1a5xMkhuYmV5y6fxKTxVaOCzt9r5VGHQjqK7uDwjYW/wDrWaTmrq6DpIx/oatj 1pe3itEx/Vm9WkefM9w+StyzA9Oeopn2KKXGIFz6+pr1QaDpLWjMLNQ3YismTw5ZycwkxkUKvFdw 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 N1+jf4/nXlGsaJeaPcvDdQSRsnUOMEf59a+hbeezvITqWkXKh2ADITkgD+HaTwelVde0a08XaOS0 Yivo1Pl5Iz/ut7Gu7AZ1WoSUMS7x2bfxRfn3Xn/wxvKlGorw36W2Z882LfvSvqMV1Hg/A8Y6STjH 2gfyNc7d2jaZqZjIIUHjPb2rf8L/AC+LtLBIA+1J1r6vEa0Z+j/I5I/Ej3PSsf2/b4x/x8L0P+1X pleY6Xx4jgHH/HwvI/3hXp1eXkn8OXr+hvifiCiiivbOYKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK53xp4ij8Oe Hbi5Mm2d1KQ46hsfe/Dr9cetdFXjPxwvJfMsbNV+Tyy5OOSScf0prcDgdMukla4nkLGW4b5mJydv 1PetWWxS4iJQZGPqRXG2dyYWFdXp998pyc7vQ1SEYF7bGGQoy8+1VYpnhOCeO9dJqVqk4V1YbsZr nZ4gjZIORxVbiL8UyuMZyKJIgckDis1JDEc9j29KuwXIlUAtU2HcSORo2wT9DXeeDfHF1oMqW8jm awLfPEf4c919D7dK4OVAc4piTMjAelG+gH1fZ3lvf2sd1azLLDIMqynrVivnzwX42m8PXo3BpLOU /vYQevuPeveNO1G21WwhvLSTfDKuVPceoPuKlqwy3RRRSAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAayq6lWUMp4IIyDXHyx2lre3VrYWyWsCTB5FjjCK8hXBPHWuyrjZZ/tN7dvghPO YJnvjjNJgQyRhuckfSoHt2Y58z/x2rTEDpSAg/WkBUisYkk8xl3tnPzc1azjk076ioiCz4HNAHTa HAsdiJAMmQ5z7dK1KgtYhDaxRjoqgVPVAFFFFAHmtp4cvofiPfa8zQ/Y54BGgDHfnag6Y/2TT/Hv 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 EQyUYnJJ/HnnjnFegFcA01csTxgUGn1+bqynNXUlZrpbpb0POdVvrvx1Nbadp1jcw2SSCSeedcY4 x2yOhPGea6rXru+0bSreTSrI3XlSKjwqpJ8vaemOeoHNbuOfakxzQTPFxlyRULQj0733uzg5PiE8 sBittFuzekYVCMgH8Bk/TFX/AAVoN1pdpcXd+CLu8YMynqoGevuSSfyrrGBJ4oxxmiw6mLh7N0qM OVPfW97DO/TikxxxT+BSHpQcI3HFNPWpCDSEZPSgBuMj3pAMinAYprkduuaYCsMdqTHFJgtzuxTt vTmmgGMMCo5BgCpSCDzyKjftRcCuw465qtL05q0ykHI6d6qTnANIbM+c84rH1S4W1sp5ycbEJzWt OQOtcT49vTbaEY1PzTtjFCJep5k0hllmuHOS7E1AOetSMNkCr39KjJOOOvarNDtvAFjuluNQdeAN iV3qJzmsjw7Y/YdBtYduHYb2981vxIMZpGbdx6JUzxjaOORSxx5/xqwseV21IIrKmR0oeMVY2AHm goB7mgZkzx1RlU9OmK2Z1GDkc1mzoTT3IZzPi62M2imQDmNs1wIGR15xXqWow/aNMuYTzlDjPtXl sakAqeoOMU7mtJ3Vim4Ow+qtXbeAboLqEkJPDx5H1riHDGSQH61s+E7lrbX7Ns/KSUP40Ictj2JM 9DVlOgFVx94+lTpnGetBk7k69uKkbOw49KamcZNPJ+Q444p3JsesaR/yB7T/AK5L/KrtUtI/5A9p /wBcl/lV2oNEIaKWkxQMy9YiLxBh2rKHQetdHdRebAymubHyOy+lMpMdRQTS4zQMB0paMUUALRQK MUAAp1IB704CgAApcUYpRSAKPxpcijNAABS4ozSigBMUYNOxR9aAACloFLQAlLRS0CACjHNLkUmD uNADWWszUbQSoTjJrWINQyrkY60DOQa1KSEYpyWw69K6FtPMhyqHmrEOhM2PMXFAXOaS2OcAE1Zi sXY4EZ/Kush0eCLtmrkdvGg4QUC5jmbfQZJACQQK07fQ4Y1+cZrXA54GBTiPagTZWisoIfuoKsAA cDGKCPagDHagQY5p1IAc9aWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig 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 FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEFxZ290uJ4EkH+0uazG8N2iyeZbSz2zf8ATN+P1rao oC5w+u+CNQ1NxJb63cxMBj922zP14INTeHvDOsaRE0U99HdZORLcgO6+wwBXZUUD5mZkGjQpdC7u GNxcAYVnAAUewrToooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFRzTRW0LyzOEjQFmZjgAVJXCfFrVk0zwTMhfD3LrEoHcZ5pMEUtT+ NHhqxmaODzrvacFoxgVRj+PXhwuFltbqMepGcV4jbquo3UVhYwFp2O1VLYya2bj4d+K4AXfRJiOv yfNWalJmrjGx7zpHxQ8J6yypBqiJIf4JRtrrYbiG4QNDKki+qMDXx7PpFxZybLq2lt39Jk21t6Pq mraYVNpqU8OOwk4oc7bk8h9WUV4ronxR1q2KpfxR3kY6kfK1ehaL480XWNsYmNvOf4JhtyfY96tS TE4tHUUUgIIBByDzmlqiQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKa7rGjO7BVUZJPQCgB1FcxdfEPwpZyFJtatQwODh80lv8RfCNywVNesgT2aQCgDqKKr2t7a3 0YktbiKZD/FGwYVYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKAErmfEHjjTPD139lnDyzBdzKnYV0kjFYnZRkgEgetfNfinWzJqN1Lfu8c80pXa Bkj2oA9Xsvi94eu5SjCeLHUsua6yw8Q6TqUe+2vomB7FsH9a+dNLtHKuYYzIEQuw9qfDrenXoEdt cKs2cbWO0g1kpPqB9N5BHHSlrz/wpd6hYWEVtdTyvK/zK0zZG30Broh4q06K+FleSfZp2OF8zhW+ hrS4rm9RTVYMoZSCDyCO9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigCOWNJY2jkUMjDBU 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 KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+ffjbrjX3i i00iFiyWab2Ud3bt+lfQJz2r5X8dWd3beONTa/zFNJOXjZ+AydsGpnsVHcw9Q0HWPC+oQNqUD200 yiWKUfdYdevrXrngb4qXqw/Z9bjaa3ThbhR8y/WvOJ/EuuXGkHS9QlW/ssfIs43NH/ukVn6fqtxp ljPaxgPHJ/C46fSs27aoq1zvvjX4ysNWt7HS9KkimDHzppFXkY6DNeVWAnkcKZWCk8c0yVZJbh5n BO48ZNXtPCLcIWOBnvQ5XQ0rHT2dle2Nq13M4ltEGW9QK39Nlsb+JHtX80MOTjBU1m+KtQt4fClt YWs6ST3LDeEP3R71seE9Ke1s4kVBtC7mOKyZaZ19jrt74chDCZrm1H/LFzkj6Gu80TX7DX7Tz7KU Ej76H7yn3rza/ITR5bm7sXfTG+QXcZ+aFh3I9K53StSm8OXiX9rKGXIztPyyLmtoya0Zk1fY+gKK gtLhbuzhuFGBIgYA+9T1qQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc L8V9WXS/BkymUxmdhGCDg13VeI/tAX+ItJ09WOWcyEewoA8Tv4WuGLIgYZ71ltbMpIaLFal1a6hO pvRbzNbr8vmqpwCKpi8LcSfNjjI60EkthqGp2jAWV/dReySkCux0v4keNNCi41GSaMnIWdNw/OuE nlVyvlrs29x3q5/bN6unC0aUyRZzhgKAPb9A/aDtWRIvEGmyQydGmt/mX6mvVdB8WaH4mt/O0nUI bgDqob5h9RXxcS0qbgnAODS21zc6fOs1rPNbTKQQ0bFSKB3PuvvRXz38Pvjfdwzw6Z4nzPG7BVvR 1X/eHevoCGaO4hSaF1eNxuVlOQRQMkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA 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 UjtVNiK9+M4zV4nzsoSg7SViJuf8aZ7U9sVGT+dBIjc5I/KmMcj604nHrTW5IoAZz34pM06m/SkA 09TSY4px6cU2kMQikPSlNIaAGkflQMUEHtSjpnHWgYY4pp607FJ+FIBBX0X8N/8Akn+k/wC6/wD6 MavnXt719FfDf/kn+lf7sn/oxq48b/DXqd+X/wAR+h1VFFFeYewFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUCCiiigAooooAKKKKACiiigArjtafztfkx/yzRU+vf+v6V2BOBk1wau Li9uJv8AnpKzD6ZqZbDRbRc1MBx3FMQdql9qhAyOQUac/k6tbMRwzGPIHTI/+tTmHFVwxhmjlH/L Nw5Hrg0+ojtKKKK0AKKKKACiiigAooooGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAVka74Z0jxJa+RqlnHOo+6xHzL9DWvRQB4h4g+Bs0Aefw7qRUDJ+z3HP/ AI9Xkk32iGaSCYKXRijY9a+u9ZS5k0W8SzdUuTCwjZugOK+Qbi4ntpnE1sWw5DMDnJzWc0aQ1Laa Y8kCsrDpkimCwcyLEUYMxwDVu01GGZV25Q9wRXVeELVb3XPtEqh7a0UyuT09v1rC7NrNbnPf2A2l zwy3xVYw4L7eSB3Neu2y6ZB4auNX03Uobq1ghLOARuU46EVwHid0kE9zwFck47D2rN+GejT6r49t 7dS62KL508ak7XHoR0qoJvciTORuvFerXb3KDUbqO3mcn7OGO3B7YrqPh5p+o6/rVrp0McslkGDz OQdqAe9fR0/g/wAPXMpll0i1L57RgfyrTstOs9Oi8qztooE9I0C5/Kt+Uy5ieNFiiSNBhVAUD2p9 JS1RIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV4V8Z/DmrXeuwaqkfmW aR7AB2Ne61FPbxXUDQzIrxsMEMM0AfKOk+JNT0WFrGEI8LNloJVzz9Ki1D+xdVV3n082V2eQ8XCk +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 T3zU2r+HPHGuWQtb+70+SEOHAGF5GR1C+5qjqcoxrOnOUPZrTl62+69/megRTpdWsU8R3RyoHQ+x GRQRVXRbSbT9DsbO4ZTLBAkbbTkZAxxVs9fei585JJTaWxYsOJZP+uTY/KtjQf8AkC2/OfvdsfxG sSzO15T6RtW3oIxodr67efzNStxGlRRRVCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKBhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTJEEkbI2cMCDin0UAeaap8GtJvbiWa3u7 i3aQksc7ic+9S6D8GvDejuJJlku3Bz+8bgn3FejUUrId2RxRRwRLFEioiDCqowAKk/GiimIKKKSg BaKxvEniXT/C2m/btQZxGW2qEGSxryrU/jXf3zPFoenLEvaW4PP5VnOrCCvJnRRwtWt8Cue1swRS zEKo6knAFczrHxC8M6ICLnU4nkH/ACzhO9vyFeD6nrviHXDnUtWndT/yziOwD8qzo7KJGz5Yz/eb k1xVMwgvhVz1KWSy3qP7jvPFvxXvNf06bTdAtJLWKX5XupeG29wB2rze00dLYhn+dhWzGqDGe1JI EA4JxXBVxlSpp0PVoYOlQ0iiskeATjr2p22lTLnA5q9LYrbRBrmZVdhkRjr+NczZ1mfSgjNNdkEm A3PagU7AXoHJYCu08B6udJ8QJG74t7n5G9j2NcLC+HHPFakDldrqSGU5BrONR0qimjKtSVam6b6n 0kOefWlrK8O3/wDaeg2l1uyzxjd9a1a+qjJSSkup8VKLi3F9AoooqiQooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oo7UAJXlXxU1gW1pdsp/1cewY9TXoeratDplszFgZSPlQHnNeJ68l14t1WPRrEedcSy75WHRBnqf pSY13E+CfhSS5vW1a4jHlwuHDEcl8dPpg19AVmaDo0Gg6Nb6fABiJRuIH3m7mtOmIKKKKACuF+LW mnUfAd3hctDiQV3VZ2uWYvtDvbYjPmRMMfhQB8a27sFeMHrkYqFSWXB428VcuYvsWszwSfLtcjnt zVJWy0rDpu4oEQzjdg5qEdqlb5s+1RDkGgC3GfkFQ3C5TPpToW3Lj0qSQAoR60AfSXwM106p4I+x O2ZbCTy+epB5Feo181/ALWxY+KrnTHJ2Xkfy/wC8K+lKBoKKKKACiiigAooooAKKKKACiiigArmP EXjzRPC+oR2WpyTrNJEJVEcRYbSSP5qa6evLfFEUc3xw8OxyxrIjWYyrgEHmbtQdeCowqzaqbJN6 eSNiL4u+EZZArXdxED/E9u2B+WTXZWd5bahaRXdnOk9vKu5JEOQwrnvFdj4at/Dt8dTtbCKMQsVJ RFfdg42992emK5b4d3F34c+Feoapdo2xWlubaN+MrtAH4Fgf596DeWHo1KPtKKad0rPW9+2iOv8A EfjjQvC7CLULom5IyLeFd749SOg/EisC0+Mvha5mEcq39qp/jmhBX/x1mP6Vm/C7w1DqdrP4r1mN by+u52MLTKGCgHBYA8ZLZHsF4r0fUdJsNXtmttQs4bmFhjbIucfQ9QfcUDqwwlCfspJya3adtfJW /Mls7y21C0iu7OdJ7eUbkkQ5DCrFZ+jaTb6FpMGm2hc28GQm85IBYnGfxrQoPOny8z5dugx3WNGd 2CqoySTgAVm+H/EFh4l0432nM7QCQx5dNpyMdvxFYPjjwjJ4ghmujrd9awRWpDWkT/upCu5skZxk 5x+ArP8Agz/yIz/9fkn/AKCtB1rD0/qrrKV5JrTte/3nX69r1j4c0xtQ1BnWBWCEou45PTiuW/4X B4T/AOe13/34NHxg/wCRBl/6+Iv51f8AD114Wm0bTbfz9He6+zRK8e+Ivu2Dgjrmg1pUaKw6qzi5 NtrR9reTNXw54n03xTZy3WmNI0UUnlt5ibTuwD/WsjXviToGg6g2nyG5u7tDiSK0jDlD6EkgZ9ga 3dReHRNC1C8tbeKMW9vJPtRAoJVSecfSuI+DenRjw7davKA97eXLhpm5baMcZ+u4n8KCKdKg4Try T5U0kr9X3dv0Oq8NeMdH8VxOdNmbzYxmSCVdsiD1x0I9wTS+JfGGk+FPsv8Aajyr9p3eX5ce77uM 5/76FcP4lSPw78ZNBv7RViGo7Yp1XgOWYoSfzU/UZqX4smMa/wCDjMUEQu33l/u43RZzntQbwwdK dena/JNN+eiel/VGr/wuDwn/AM9rv/vwa7HS9St9Y0y31C0LG3nTehYYOPpVCzfwxqL7LJtIuX/u wGJz+lbEcaQxrHGioijAVRgD8KDixHsbWhBp+b/4CH0UUUHMFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFZfiG9TT/D1/cyHCpC3J9SMVqV5b8XvFtta6WfDNrun1K/H+qjGSi56n8RQBj/B/TXvNXn1Q geTAm0Z7s1e1Vxfww0GfQfB0EV3D5VzKTI6nqAemfwrs6mKsgFoooqgCuJ+IfxBtvAlhC727T3Nw SIkHA49TXbVj694Z0jxNbJBq9klzHG25d3UGhid+h806/wDFjX/EDbXvjaW//PKA7fzPeuNk1JSx bzApPVu5r6q/4VL4JH/MEi/M04fCjwUv/MDh/M1i6V92Yuhd3kz5QhnRpNzMTnvVlzuJx0ruPi78 OrfwdqNvqGkRummXR2shORFJ6D2NcJG37sAhicc1lUhZ6GNWnyvQZLG5KgMVHtTIwYrhck4PGank IZFZc8HvUMrfMrDkA1Kb2Ii3axbLxAACedcetWNOuvs+qWVwszExzoRntyKql2OAZ0Ax90jpSln8 s5ljOORgc0mSfaVtKJ7WKVSCHQMD9RU1cz8P77+0fAukzltzeQqsfcV01dqd1c9FO6uFFFFMYUUU UAJimSwxzptlRXX0IqSigCk2kaew5s4v++ahHh/SRKJBYQbx0O2tOigBgRQoXaMDoMdKXy1/uinU UAM8pPSjyk9KfRQAzyl9KTyRUlFAERhFNMFT0UAU3tsiq72Rx0rT/Cj8KAMOWxJXpWfLYsT92uqd QR0qjJHyeBSZSZzb2B9KhfT2IPHSujMYyeBUTRgZ4qSjx34k6FIEgvY42ZQMMVGcVwUOmyXSkwfM wGcd6+k7i3iliaOWNZI24KsK8l+I9lD4ZuLa70tPKdmBZOzVaJaPOJEKyMjKVdeoNM2jFdTrFrBr ukx63YKFmUAXEY7VzHUZFUSMIB7UFRTsc80YoGMYKB0q3DpNxPAZlX5KgVNzgV1vh6xn1W8h0+Fi EY/OfagRn6HopvL6GzX/AFjsPm9K9ht/B7R2q2xumwBjOasaV4P07TJlmjUmZO59a6aOMjBOMmhp PcV30OTb4eWE+0zXEu8d1fFJ/wAK0tc/utSuU/7aGu3CdOKkWPnOK0VRrYhxucIfhzcj/U63cDHT LmlHgbxBGuIdekz2ya77yxTwmF70/bSDkR57/wAI14ztx+71YSfWnfYvHsP3ZYpPqBXoO33NPCn1 P50Oq+ociPPVuPHsLfNZwyD2ApG17xrCcNoiOB6CvRwD60YPrS9quyDk8zzf/hLvFCD5/DpP0FOH jfW1GH8OSZ9hXo2Of/rUm0H+Ffyo9ov5Q5H3PO/+E81Efe8OT/lQfHtz/F4duPyr0Mon9xfypDGv /PNP++aPaR/lDkfc86bx3OwwPDtx+VQyeMbqQYXw9MD9K9JMQ/55p/3zTSnoif8AfNPnj/KLkfc8 pm1nVblSE8PMVPZhWd/ZutXL7ovD0KZ7lRXshVs8Bf8Avmoykh7/AKU+ePSI+V9zyiHwr4jlYEQW 9v6EKMirV18Or/UbctqWoNcTAfu1J4Br0vym7k0oi56Ue2a2Dk7ngj/CnxCszMIEOTxg1bi+E/iD YCUQMevPSvd4w4HBqwucZJNZSk27s0tY4jwL8PrfworXMzebfSj5n/u/Su4opagAooooAKKKKACk NLQelADP4s1y3i3wrJrkDvZyiK4ZNpNdTxmgdaE7CcVJWZ89P+z/AKi7M5vV3scms2++A3iK3INt LHMpPIzX0vnmgHk0+ZiULHzWvwG18whzLGHI+7npXQ6J8AIxaltVu8zHsvavdAfek6mjmYcp48fg DpB/5eX/ADoHwB0jvcv+dewjHNAxRzMORHkH/CgtH/5+X/Oj/hQOj9rl/wA69fB5oB5NHMw5EePf 8KB0j/n5f86P+FAaR/z9P+dewCl70czDkR48PgBpH/P0/wCZpP8AhQGkf8/T/ma9iGMmgY9aOZi5 EeO/8M/6T/z9v+ZpD+z9pX/P2/517HxzQO9HMx8iPGx+z9pX/P3J+dA/Z+0r/n7f869k4oBFF2HI jxs/s/aV/wA/b/nR/wAM/aV/z9v+dex560oo5mLkR43/AMM/aV/z9v8AnSH9n3S+14/517KCDmjp RzMORHjX/DPul4/4/H/M0n/DPumf8/j/AJ17KMUoNF2PkR4x/wAM+aZ/z+v+dH/DPmmdr1/zNezd 6Ud6LsORHi//AAz5pv8Az+v+dIf2e9O/5/X/ADr2kYoFF2HIjxRv2erA/dv3pn/DPNkf+X969uGP egYouw5EfM+rfBLxBDdtBYQq8K9JC3Wsxvgt4tA4tgfxr6rBOOtAPvT5g5fM+TH+DfjMfdsx+dNP wd8aAf8AHiD+NfW2T0zzSBj3pcwWfc+Y9A+COuzCa71nbbQwqWWMHJaq8elpBI0an5QxH0r6gnMf kOszqqMpBLHHFfM940Vl4x1GwjuBLHv3IVORXVhZatM8/MoSdO66Crpmf4hQdMA/iBrSjRDjNW0g hK8D616DSPnVOXcw/wCzRs6g1HNppWFjkdK6XyIMcDmlNrb7enJ7UaFKcjrfhBNZnSpoQqi8Rjuz 1xXpWOK+fdE1N/DPiyC5ViIJWCyDtXv8MyTwpPGQUkUMK8zEw5Z37n0eX1lUpW6okxjijtR1FAA5 rnO8VadTVp1ABRRRQAUUUUAUtVuhZaTd3J/5ZxMw+uOK8GJLOTXrfj+8+zeGmiBw08ip+HU/yryV ehPqalnn4uXvJFLVY1lsJUboyEfpXmNtKUcoTzmvRNcuPLiC56mvOp0xfybem/IpIMJs0eu/Ca9I XUoG5UiNwPfkV6vFMF8pgFAySfwFeQfDW3e0srq5kRgZmUKMdQP/ANdd3d6mIrdjnBVDxUyep3xW hyXj/wAdXJaaG2kaK1VsKqnBc+9eSxzy6tqcCXMjFZJACM9ATV/xXffbL9UU/IoJ/E1j2DEajbbO W81cfnVpaEy2Z6vGqJEiRgKigKqjoBS4AoACgAUtSeGJSUcUdqACkzRRQAU0tgEk4A9acaqXQMrJ F/CeW9/akAjzvK2yA/L3cj+Qp50+U2zGdmaJmGd5zz24qRpRYxo6gFz90HtWfcXMkxLSOTnk5NMp RuWzZ2ULlN8ZIA5HSkKWQ/un6CssyrnrTllXsaCvZmkY7H1H5UGOxHcf981QEi+vFLuX1oDkLvk2 J7/+O0qwWJ6sox7VSDj1oLjHWgOQum3sQeo9uKFt7FmxlR7kVR8zPGaN47GgOQvfZ7D+8uPpQtvY tnLKMdMjrVDeo78Ubl9aA5C+1tYqoJZcnsOak+zWAlEZlj6ZLY4FZZkT1pplX1FA+Q03gsFj3F1J 7ADrStbWiyBE+ckA8DpWQ0y+tNFxsYFXwfUUWDkNr+zYZ1/dnnGSDwR+dVZILuyYmNi6jrG1VluG c7jIxb1J5rRt7lpsxyHccZDUCcbC2863Ee9QQejKeoNS1Wij8u7cr0deR71azSIegfhSGlpKBBRS ZpaYC/nUV1j7BcBhkFCDUlVtTk2adMfagpbnmRkCsRuIIp6T4/jFQXEZWV/941EK0PbTujTS7IHD D86d9qJ71lgntThu9aB3Lv2kkkV2mgIE02LAxlRXDWyFtxPpXoGirtsIh/sj+VRI4cZK6SNNc4J6 VJY83n/AjUfOKn0z5rtfdjSRxxPoGxXZYWy+kSj9BTdQu0sNOubxyNsETSHPsM1PCNsMa+igVyXx K1D7F4QliU4e6kWEfTqf0H61bPYk+WNzxUyNNM80p+d3LsT3PWpfBC+Zqusaq/SFPKTjv1P9KgiA Zhu+6Bk1o6BG1j4TlJGDeXbleMHb0/oKUdzz6W7Og0g+XZ3t0OqxkA/X/IpdOjSOyvZ2H3ISo/EV LLczNoEfmsv70qiqqBcAden0qa6S3g0KQW8ryCR1DM67cnjp+FLe/mdiVreSM6wU3lvdNNGHjhgO 0HgB8cH9DU2gQkTzXMjY8qM4PoSOv5ZqWMfZvDkzdGuJNo+nT/GnpHJZ6NcPJG0ZlwF3DGe39abd 7kxVmvvINBtEN4ZmGRGpbJ9fWjSo1a/EuOFJcf0/nVq3MNtos8scjNKyYYFcBewAPeorWd49LkAE YVBjIX5mJ96H1KivhXzMfXJI5LKZJM/vM8Hvubp+SmucEMKx7VhQADgBRgUniu/b+1bSxRiAX5x3 xgD9d1PPHFKRx178xEbeBusMZ+qCmGytCebWD/v2KsAA9SABySewqEi4uzttQyL/AHsZJ9/YVJhd koAUYAAA7Cg47iqk1jgJ5t22WXcD5namraED5bx/++6LAXgPalqibWcfdvn/AAenLZ3wxtu2P4g0 WGWZYkmjKSIroeoYZFaqa09j4b1dZJjva3EcWTz8xAP6Vh/ZdTXpJn6oDUV1aX1zAYZ4VdD6KQQf XiufEYaFdLn6NP8AE6sLip0G7PR7mI2qy7AAu1QOB6VbtIru8t9+Cuehc4zSQ6I1tcCVopLjH3Vm yAv4d60/NvNvNsn/AH1XU32KqYr+QxrmC8thl4CV/vAbh+lRJcRsOR+Vb/2i8H/Lsv8A33VeW3ju DmbTEyf4lbBouKOLf2kZoeEn72D7in+Zbr1ZatHRrZs4ilj+kpP8xUL+H1Y5SaTHoSP8KLo1WKpk JuIB0cUhuoD/ABD8ql/4Rxv+ez/99D/Cnjw+FXnc31k/+tTuh/WaZHHPE5O1h+VSNKpUKZMgdic0 Q2VjDcLDPbukjcKzSEq1ai2dsnCwRj/gNK5LxUVsjGaxtrlTkKT/ALPWq0uj3E5WKFdqHq7jAFdO qKvQAfQUtK5jPEt7Ip2FhHYWwiTk9WY9Sakm5uIF9y35CrGKhYZu0PohP60HPdt3ZYVtkUrei1zW tn540/uxqK6OU4tJD3OBXM62c38gHYgfkKEVT3JUImtgnYLwKopEnmfMin8KktmdItw6kY+lNYOT nNUdSY27ZVj2KAuewFdBpiYi+igVzUqs2zP94CursVwjflSZnWehoWQ3apCOuMf1r6M0iPytGskP UQp/KvnjSU36uo9B/Svo61XZaQpjG1FH6U4mmEW7Jq+HPM5NfcdfCXmc9a6KU+W5rWjzWLYfpW7a aHJLCJJmKk8hR2HvVDw3Zf2jqahhmOIb2/pXfGHAraVVpGKpX3OW/sDJ+WQ/lTh4eP8Az1P5V1Kw cZp/k8VPt5D9jE5UeH3x/rT+VOHh98/60/lXVeRTlg9qPrEhewicoNAb/nt+lO/4R98f679K6wQC nC2prESD6vE5IeHn/wCev6U4eHX/AOe36V1vkD8acLfFL6xIPq0TkP8AhHX/AOex/Knf8I4//Pb/ AMdrrvI560v2f2o+sTH9Wgch/wAI4+P9d+lOHht/+e5/Kuv8gDtSiD2p/WJC+qwOP/4Rx/8AnueP al/4Rx+036V1/kU77PS+syD6rDscf/wjj4/1x/Kl/wCEbf8A57fpXX/ZxSi3HpR9ZkH1WBx//CNv /wA9z+VKfDbckzn/AL5rsPs49KX7OPSj6zPuH1WBx/8Awjb8/vz/AN80v/CNv/z2J/4DXYC368Uf Z/aj6zPuH1SByA8Nvn/X/wDjtA8Nvn/Xkf8AAa6/yB6Uv2en9Zn3D6rDscf/AMI0/wDz3z+FL/wj TZ/15/75rrvI9qd5HtR9ZmH1SByH/CNtn/Xn/vmj/hG3/wCe5/75rr/s49KUW46UfWp9w+qQOP8A +Eab/nuf++aP+Ebb/nufyrsPs+O1H2celL61PuH1SHY4/wD4Rtv+e5/Kl/4Rtsf648e1df8AZ8Uv 2f2p/Wp9w+qQ7HHjw23/AD3P/fNH/CON/wA9j+Vdf9n9qDb4GaPrMxfVIHIf8I43/Pc5/wB2j/hH Gznzm/KuvFuD2o+z+1H1mfcf1SHY5IeHmGP3xP4U4aCwP+uP5V1gg9qTyOlP6zPuS8HDscwNHYD/ AFn6Uv8AZL4+/wDpXS/Z+aQwc9KaxU+4vqUOxzq6S4ODJ9OKS702W1h80NuQY3HHTPQ/Sul8jK9O anjtFuIJYG5DqV/McfrTji5qSu9BSwUOV2Wpw27jng0biPrSMChIJ5HBpuTzzXqHjjt/fFAbjp+F MzntRnJoAeG9aC36U2kDc8daQDwe1BOKZnjnrSZx16UDH5wPWkLZ4ApucikzQA/2pCaQnmjigANN zxSnpQeBSAYTSe1B44pMUDQmfrX0V8N/+Sf6V/uyf+jGr50Jr6L+G/8AyT/Sv92T/wBGNXFjfgXq ehl/8R+h1VeYfHD/AJFjTv8Ar8/9kavT68w+OH/Isad/1+f+yNXmH02V/wC+U/UTQvi54dtdCs7a 7jvYZ7eBImURBgxVQMgg+3fFYUE1z8VPiBa3a2ssOiaeQTv9Ac4J6bmOBgdB9M16Rpvh3RdU8P6T Nf6VZXMos4f3ksKs33B3xmt+1tLayt1gtLeK3hX7scSBFH0A4oN5YuhRcpUYNTd1dvb0PMPjl/yB dK/6+G/9BqX4maTdaj8OtMubZHcWQjllRf7hTBbHtx+Ga9Kntbe6ULcQRTAHIEiBsfnUgUKoUABQ MAAcYoMaePdONJRWsG363PL9D+L2gW/h+0hvYrqO6ghWNo44gwYqAMqcgYOO+K5SbXLnxF8WdC1K ewkso5JYPIjk+80e44Y/Xn/6/WvZV8K+H0vPta6Jp4nzu3i3XOfXp1960XtLaSdZ3t4mmXG2RkBY fQ0G0cdhqUpSpU3eSa1e1+xyXivx/H4Q161tb6yllsbiDf50P3kfcQRg8EYx3BHvVHVPix4TbSLh Yp5rqSSJlFv9nYZJGMEsAMfia7y5tbe8hMN1BFPEeqSoGU/gazIPCXh22uBPDoenJKDkMtsnyn24 4/Cg5qVXCcq9pB8y7Pf+vI4n4R+H7u28K6jLeRtCmpECJXGCUCkbvodxx9K5z4deKLLwPd6to3iH zLR/OB3+WWCsuQQQATjoQRXuVZ2o6DpGrOr6jplpdOowHmhVmA9ASM4oNv7QjUlU9tH3Z223Vtji fGXiPTvE/wAK9cvNMd5IIpYoSzoVywkiPAPOMMKk8FaSmu/Bi30uRtouYp0Df3W818H8Dg129vpW nWlmbO3sLWG1Y5MMcKqhPrtAxngflViKGKCIRQxpHGvRUUAD8BQZPFxjR9lSTVpcyfyseL+C/GL+ AZLnw34mtp4Y45C8ciru2Z68d1OMgj19+Oovvi5ozTQWmjRz3t1PKsaFoisa5YAk5wTx2A/Ku4v9 K0/VIxHqFjbXSDoJ4lfH0yOKi0/QNI0py+n6XZ2rnq8UKqx/EDNBrUxWFqy9rOm+Z72ejffuaNFF FB5Z498Jf+Rz8Sfj/wCjDXe/ED/kQda/69z/ADFbsNpbW7s8NvFG7feZEAJ+uKkkjSaNo5UV0bgq wyD+FB3V8YquJVe21tPQ8++FlpFf/DN7OYExXDzxOB/dbg/oa5bwt4gk+GOs6h4f16Gb7FJL5kU6 JxnGN4HcMAvTpj617TDBDbx+XBEkSddqKFH5Cob7TbHU4RFf2VvdRjkJPEHA/A0Gix0ZTqe0jeE3 e19V6HlnjT4l2Wt6Q+h+G0uLu5vv3LOIiuFPUKDySenT1rZtA/ww+FvmTRiS/J3sg5UTPwAfYAAH 1xXZ6foOkaSxfT9MtLVzwXhhVWP4gZq7NBDcR+XPEkqddrqGH5GgU8XRUY0qcPcTu7vVngXgTxZo Gh395rWuNeXWsXDth1iDBFPJOSR8xP5D6mvRtP8Ai14c1LUrWxgjvhNczJCm6FQNzEAZ+bpk1139 kab/ANA60/78L/hTk0vT43V0sbVXU5VlhUEH1HFBeIxmGryc5Qd/XRfgfP8A448WJ4l8XbLsyppN lIY44VHLYOGbr1OPwGK6m0+J3h+2so4Fiu1CLgKsK4H05rs/Gmn2CaZA4tLdWa6XcwiUE8N14rJi Ww8lUjsbfPdzEv6cVEjSeNw1SEYSg7RWmv8AwDmfGeqW+s/D8ahahxDLMu0OMHhiD+oNaGlaWus/ Da3sGYKZrXCsegYHKn8wK30toGgELQRmMdI9o2j8KtRRpEgREVEA4UDAFCZzSxaVJU6ataXMv0PN PCvixvCIk0LXreeNInJjdRnZnnGO6k5II9a3tR+J2h28B+wie8mI+VQhRc+5PP5A11N1YWV+gW8t ILhR0EsYbH5iobTRNJsZBJaabaQydnSIBvzxTua1MThKsva1Kb5nuk9G/wAyXTbmS80mzup0CSzQ JI6AEbWKgkYPuamYZ9qf0Oc0xueDRc82TTbaJbQHZc88+Sa29D/5AloexTP5nNYVvN5UU6BNzyJt XJ6Ctrw/Msuh2oDhmjTY4HYjjBoRJqUUUVQBRRSUALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFAwooooAKKKKACiiigAoorlvE3j3R/Cd7Daait0ZJY/MXyYwwxkjuR6UGlKlOrLlg rs6mivP4fjF4Vkfa7XsQ/vPBkfoSa7aw1C01SyivLG4Se2lGUkQ5B/8Ar+1BdXDVqOtSLRaormfE njvQvCziG/uHe6Iz9ngXe+PU8gD8SKwLf4y+HpJ1S6tNRtEb7skkQK49ThifyBoLp4LEVI88YNo9 FoqtY31tqVlFeWcyzW8q7kkXowqzQczTTswopkkiQxvLIwREUszMcAAdSayvDniOx8UaYdQ08SiE SGP96oU5GD6n1oGoScXJLRGxRWT4h8QWfhnSm1K/EpgV1QiJQzZPTjIrkv8Ahc/hf/nnqP8A35X/ AOKoNqWEr1o81OLaPQ6KxfDXiaw8V6dJfacswhjmMJ85Qp3AA9ieMMKxda+Jmi6RqcmmxQ3moXcR IkSzjDBCOoJJHI9s0Cjha0pumou638jtKK57wz4y0jxZFKdOlkWaL/WW8yhZFHrjJBH0Jqv4m8f6 H4UuVtb555LpkDiGCPJ2nocnA7HvQCw1Z1PZKL5ux1NFcJpHxX8Panfx2UyXdhPIQqm6jAUk9BkE 4/HFd3QTWoVaLtUjYKKKKDIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigDP1fRrHXLE2eoQLNCecHsfUVzA+FXhpc+XBImf7rV29GKiVOM/iVzWnXqU/gk0cK3wr0LOU e4X/AIEP8KqT/CTTHRvLvblWx8pJGAa9Fo7Vn9Vo/wAqNVjsSvts+Y/EllfeEdZOm6vApik5t7pB 8sg/xqgbiKRfkYV7d8W/Do1/wPcvGoNzZ/v4jjnjqK+Zre5ddmCa8/EYKEXeGh7uAx0q0bT3Ous2 23Semc0XBZ5mZjuZjyTUFnKdqOOtWZxtkP8AtcivNatI9UzL5Sqhx1U1OrAqCO4onTdGw9ar2rFo ACeVOK13iLqXFyCK17VsqMGsZD3rSsmziuastBo9f+Gd+XsriwY8xHeoPoa74dK8h+HtyYfEqR54 mQqfwr16vey2pz4dX6aHyeZ0+TEy89RaKKK7zzwooooAKKKKACiiigAqG6JFpMQSCI2II+lTVDd/ 8eU//XNv5UDjujxTwN4Z1bxhok2oSeK9TtTHctBsWR3zhVbOdw/vfpVvVH8TfDTWtMkfX59V067k KNFcFicAjIwScHB4IPUdKzvh3q/i+w8PzxaBoUF/aG6ZnlkbBD7EBX7w7BT+NT3ur6hN4x0y7+Id hPZ2Vu2bWOGL9yHyDljkkjgZwT09KR9TUjUeInGXK4a+7pfbot7noPxA8YHwnoyG2VZNRumMdsjD IHqxHfGRx6kVzVj8M9W1yBb7xR4iv/tUo3eRE/EWe2Tx+AAAqPxqq3vxi8L20hD24jjlC9QT5jn8 jtFesUzyZVHhKFP2WkpK7fXfRHnGleEfE/hbxBYmw1ue/wBFeULcQTHmNcHnBJGM45XB9sV6PRXF z/FTwlbzyQyX8oeNijD7O55Bwe1BzSdfGO6jdrey/Ox2LsUjZlUsQCQB3rxjxb4y8R32o6Pby6Re 6HbG6U5d2DTHIBGcDgA9OetetaNrNlr+mR6hp0hktpCwVihUkg4PB9xXAfF3/j98Lf8AX6f5pQdG WpRxPs6kNdd+lk+n+Z6fXkGvWeo6/wDFy60WHW72wg+zrIPJkbAIQH7oIHevX6811vwp4rf4hXPi DQpbGEPCsSPctn+AA8AH0oIy6cYTm20nyuzffQX/AIVbqX/Q76t/49/8XWn8S/E934e0KGHTSRqN /J5MLAZKjuR78gD61if8Jt4o8Ka1a2fjC0tXsrptq3dtxt9T7gZGRgGofikxbxl4QiYEoLjPPQ5k TP8AIUHZCnVqYin9YalHVq1rOy8vNE8vwsuodKa9h8Rao2vrHv8ANE/yNJjOBxu9s5/DtXQfDfxR N4o8MLLeMGvbZzDM2Mb+AQ2PcH8wa7CvGfh3rEXh628bX0ys9vZyxuI16k7pABn34FBjGdTGYepz 6yi42+btY9C8Y+K4fC+mqUj+0ajcny7O1UZMj9Og5wMj9B3rifhrd643jzWrTWryaa4jgLSRtKWR HLKcAdBjOOKPCOpaNe6rJ4s8Ta3p/wDac3FtatMuLSPtx2OPyyc8k4g8La/pMHxW8RXsuo2yWtwh WGVpAFkO5eAe/Skbww/sqNWko3dtXbrdaLyX4nsNFFFM8IKKKKACiiigAooooAKKKKACiiigAqrq ENxPZyR2swhmI+VyOlWsUUAeW3vgXxbq1y6XGtQwWzHlkUlyPzrsvDHhHTfCtoY7NC878yzycu5+ tdBSYoAWiiigAoopkkscMbSSuqIoyWY4AoAdVHWNRt9L0u4urqVUjRCeT1OK4bxV8W9K0ZZINOxd 3IyN2cIvvnvXiviLx3qviGZmmd5s9FHCL+FNIRzniW4N5rc9wBjzGJAqikbJBlhgnmnyCRrjzZ2B b0HalmcuCzdT6UmBTJ5qPocVIfpS7goGcCgB0XyjJ71N1quHVsYNTL0xQM0/CGpPo3jLTbyNtpjn XP0PFfaAYMAwOQeQa+F3JjmSQEgqwP5Gvs/wle/2j4S0u7LbjLboxPvigRtUUUUDCiiigAooooAK KKKACiiigAryDx/o9vr/AMW9E0u6eVILiyCu0RAYYaU8ZBHb0r1+vKfHS6tYfE3SdcsNDvtSitbM AiCJypbdIMbgpwcMDQejljarPldnyu3rbQnuPglohgb7JqWoxXGPkeVkdQfcBQf1rIs9c1XXPh54 r0TU38690pP9b3ZFYkg+uNh59DWxN468bahG0Gm+B7u0nYbVludxCk9/mVR+ZxWv4C8FSeH9KvW1 Zknv9SObkA7gF5+XPc/M2T7+2aR2yrVadJyxUk5JpxV03o9duliT4V3Mdx8PNOWPG6EyRuB2bex/ kQfxrs68gt9P8T/DHVrr+y9Pl1jQbh9/lx5Lp9cAlSBwTjBwPw0ZfiXruop9n0PwhfG6YY3zqxRD 6nAH6kUzmxGCnWqyq0WnGTve60v37WOj8Xp4xeW0PhaW2RAref5wXk8bcZB96p+GI/H66yp8RT2j 6fsbIiCbt3boAa6Hw3HqkXh+0XWn36ltLTnIPzFiccccAgccVrUHK6/JB0eWLtdXtr63/Ip6t/yB r7/r3k/9BNcR8Gf+RGf/AK/JP/QVrS8Y+JdS0uR9Ns/DWoamlxakm4tkYqhbcu04U8jAPXvXG+Ad a13wxpUekTeD9XlElyXM/kuiqG2jkFO2M0HVRw9R4OaVtWmtVsr+Z6lrWiWHiDTzY6lCZrYuHKBy uSOnIINcrq3wn8MXemyxWVibO6CHypo5XOGxxkMSCM9e/vWr4w1bXdFtrW70XSzqKiQi5hVSW244 IxznPsfpXIX/AMRtc1fT5dO0nwpqEWoTqYi7gkRZ4J+6PzOAKCMJTxfKpUZWjfva3qrlfwjq17rn wj8QWl1K8stnBNHG7HLFPL3BT685H0x6V0PwgYN4AgAAG2eUHHfnPP51d8CeEf8AhGvCjafehJLi 6ZpLkA5AyMbc9wAPzJrkdFu9X+GF1faVeaPeahpEsxmtrm1XdjIxz2yQBkEjBB65oOmq4YhVqVH+ ZNefR2/Mn+JQNx8QPCFsg+fz1OfYyr/ga7zXfCujeJXtm1e0+0/Zt3lDzGUDdjP3SM/dFcToWn6v 4w8exeKtU06XT9Psk2WkE4w7kZwcEA9WLZ+g5rZ8U+KPEfhzXFNtoEmpaO0SkvCp3o+TnkA4GMdR +NBnUjUvSo0pWnFPrbVva/c5/wAffD/RtH8PTa5occmn3lkyyAxysQw3AdycEZyCK7rwdqk+teEd M1C5wZ5Yf3hH8TAlSfxxn8a8817xB4i+IVmND0fw/dWdtK6m4uLnIXAOcE4wBnB7k46V6homlRaH olnpkB3R20Qj3EY3HufxOT+NBOMc44aMK7vO/e7St1+ZoUUUUHlBRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABXP2XgzRLLX7rW1tBJf3By0snzFfp6V0FFACCloooAKKKKACiiigAooooA8z+Odq1x8Op nVc+TKrk+lfONpIdmDdCIe65r648daadX8E6rZAZMkBx+HP9K+RLJ3Viv7vIyD5grCstjnroklO7 cDMsvcEDFVnHyHrVyYOQwPkf8Aqp/Bj86x6nMiWN28sFQhyP4qkBcggxRnjqDVaH5o/9XvOfWpUQ ZGbZ/qDQ0No+jfgdqQuvBJtGbL20zDHoD0r0+vCPgFfKmoavYsSC6o6qfbOa937V1U3eKOyk7wQU UUVZoFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAHkVXeME9KsUhAoGnYoPH1IqFkG2t CRBtqq69sVJaZTePJAx3rxb4w3iS6vbWaHJQZNe3NwQxHSvIviR4G1O/1gappwEyMvzL3FO4M878 OaodL1LypebSf5XU9Kfr+mDTdRIj5gk+ZCPQ1BP4d1mIlGsZNwPYV0k2mXOoeFFW4jKX1uOFbqRT RBxxwOKQ0Ifl+Ycjgg+tBzVCJIuHya9X+Etgs9xcXbAEoMCvKEYg/hXtPwYZW0+8XHzZFCA9FWDq fWp0h5GBTwMVMoGaBDRHjFPCDNPUc07HNFwIwlKEyKf07U7GKVxkW3FOUYp2KWi4BRRRSAKKKKAC iiigBMUbRS0UAN2ijYKdRRcBnlrQIwKfRRcBMAdqWiigAooooAKKKKACiiigAoNFBoAZznpQOvSg E560c5oABnPSgZ9KBnPWjPPWgBRnPSgZz0ozz1pBwTjmgABPPFKufSgcigfWgBMHPSgZyeKATmlB OTQAgz6UAe1KCaOc0AICc9KBnnilGcmkGcmgBRn0pPoKUGkGfWgAGfSlH0pBn1oGaAAZ5oGfSjJo oABn0o5z0peeeaQE880AAznpSjPpSAnNKCTQAnOelAz6Uc5NAzQAo7nFAz6Ugz60ZOOtACjOOlIM +lAzSj60AIM+lA4PNKM803npQB4X8T5fHPhXXP7bstSkfSywwi9F9jWnYfHTTj4QN1cxk6ui7RAB 98+teoa/pcOtaFd2E6BkljIGR0NfG95p7aZrl3ZkDfBIQM+lWlchto6PWvGPiXxNO0uo6hJDCxyk EbY2ismzkWHVYOWLk8sxyTTY3DuPXvTbn93fWz5GdwrWDs0YzvOLi+p6LE3yqfarcbYFZ9s5MKnu RVqNuPevTZ8na25cDZHTinBvlJqsCQuTTsnHB470DTKuqQefaFgPmXkV6h8MdeOq6D9jmbM9txye orzmQZjOe4p/gjU20XxlGhYiKc7SO1YYiHPT9DvwFb2VXyZ74M4pRnHSjrkg9aATivLPpRVz3p1I tLQAUUUUAFFFFAHm/wATLwNcWdmG+4pkYfXj+lcEuNoro/H0jP4luG5O1QoGfQVyttIsm5gTtJP4 e1Qzya8rzZz3iKYAH2qr4L0q21LXY5LlBIoO4IenHrWtrOgy6gubedEJ6hwak8OafeaDc+cfJkbG MBjj+VCNcPOEVqz1SCFFJCxqoUYGBjFJdWME8TCZflwcn2rm4fEl5ETmGJgevNTXHieWaxnhECrI 8bIrBuhI61Njr+sU+54p4gjQ6jL5P3d5A+mal8OWXm6vb5GQrbj+Fadx4Rv53ybiAZPJyf8ACt3R tEh0eM/vDLOwwZCMAD0Aqr6GFavHlsmaueaTvRmgUjzRQB60lBNFACUUH6UUAIarnm7b/ZAFSzTp CuWPPZe5NRW6NtLv99jk0ARX8bEJIM4Xg+1ZsjZFb5HaqkunQS5OCh/2aRpCaW5hM/NOV61DosRJ /ev+QoGjRD/lq/6UzTniUFenh6vDSY/+er/lTv7Lj/56NQLniUd3egN6Vf8A7NT/AJ6N+VL/AGen 98/lQHPEz91IX5q//Zyf89Go/s5P77UC54lDdTSxFaP9mx/32pp0yM/8tHoHzxM4tkVGWrVOlRH/ AJaP+lNOkRf89H/SgOeJkF6YW54rZOjQkf62QflSDRbfPLyH8QKLj9pEzI3zW1ZQtEhkcYZhgD0F PhsoLc5SMbh3JyanNBnKd9iNBumY+gxUuMVU8/yLja/CPwG7A1az70iWLSUtJTJEpRRRigYVU1CF riykiT7xHHuat0EUB1PNru2dGYSIUYZyCMVmlOTXq0kMcgw8at/vDNQHTrInm0h/74FPmOuGL5Vq jzALmpAMCvS/7Nsf+fOH/vgUo06yHItIf++BRzF/W0+hw+lWE15lY0OD1bsK7u1gEEKRjsOtSJGi KAiBR6AYqQCluc1So5sOtWdETzb2Bf7zj+dULmcRoqqwLHoo71seF4i2qWinr5iD9RTQoLU98AwA K8p+Lt4WvtOsR91I2mP1Y4H/AKCa9Xrx34s/8jRaD/pzX/0N6p7Hp4h2ps4KV/LtJpO+MCujli8q y060H/LKBSR7kZrnnia5e0tVGfOmUH6Zya6pkMmrfOCEMoQH6cUR7nHRX4lvVsRmztlH+rj3H69P 8an1N1hhsbRhuRfndc4z/nmoJh9r17P/ACzaRI1btinX4a71sIASgKxA9uvNJLY62/ia9CbWHUWt nGkIhQksqZzx6/jmodQd/sFqjyO7udx3HOABxS6uzT6mqqp2qoUHtyf/ANVGr5FzGig7YkxnsP8A OKF0CT+J/ILkmPQoIv8AnrJuI9h/kUwrt0+GPjMr5P0z/wDWp+qcPbxLyscQ5HTkVHKx2x8cRxZ/ HH/6qXRFdX5Kxw+rWEUuswXpaTzBkbSRjHJz+Zp5NW9XVF1N40UYi43Bs5PGapZNEmm9Dzql+bVi TDdGE7MwzRdXLRIttEdqlQz47n0prN+/RfQZqtqZBuWK5xtHX6UiYq7KMkg8zGfzNPDgjqPzqk5w 9SI/FM35dC4Dx979acJGHRj+dVg1LkUCsWhO4/iP51ILmTqJWH41SyKN3vQHKXReTDpK350/7fcA D94TWfu9zSmQ46mgXKi//aE/94H6ikN/KD0X8qz959TSFz60ByovnUZueE/75pn9ozgdV/75qgXP qajMh/vGgfIjQbUrggjzMZ9BQdZusgeYAAMYA68Y5rJeQ/3jUW87s5NBSgjocpfWLiQfMvf0PUGr aBgig9cDNUbFCNO3Z5kJP9K0u5pGMtNBNvGaTNO/hxSbTQQIAD1qJRm6f/ZQD+dTgYqCE5urgdxt /LFA0Sy/6pF/vSAVymqtvvpj6ua6yYgTQR/xDMh+nauNu233DH1OaaNKe5aWMCFB3xRsNWlXai9+ KaU9OKDdFIx/vol65cV01lwhPqawVUm9gH+0T+lbunyxzQIyHvg59aGZ1TZ8Mx+brZHX5gP1xX0a OBXgHgOMTa3GcfemUf8Aj1e/1SOjCr3WFfBWTmvvWvgruapHQz0TwJY7dLmuiOZZNoPsP/1mupMe SKq+GLT7P4cskI5MYY/jz/WtQJ83Srk9SIogEOAOKd5XGKtCPnpThHUXKSKYj9qURn0q35dL5fPS i4WK6xmnhOKnEdSeXQOxXEfOcUuw1YEfFO8ugCts9qUJ6VZ8ul8v2pXAriPtil8s96shKUR0DKwj OaXYas7KXy/agCsEOKUR5FWAntS7PagCt5dKEqzs9qBHSArhKNlWRHS+VQBV8ul2H0q15f50eXx0 pgVQmO1Ls9qtCOl8s+lAFXy8ijyyDVry/ajyqAKuzil2GrIj9qXy/agCrsNHl1a8v2o8v2oAq7M0 eXzVoR0eXRcCp5XpS+VVvy/ak8sUgKvl0nl1c8vjpSCOmBU8qjyqueXnijyqLgVBFz0qxZx7blAR wcj+tSCOl27XQjj5xSbA861WLydVu4v7szD9apV13iDQJJpI7u0TLyljNlv4s9awH0bUEHMBJ/2T k17lOtCUE7nz9WhOM2rFHt6Gk61Y+wXWf9S1J9huh/yyatOePcy9nLsQUnQ5qf7Hcg/6pqY8MqHD RsPwzRzR7hyS7DDR1oII6g/lSZwKdybMD/8AqoNITk+1FMA59KUUmTg4oGcUABx1zSdKUnt3pppA NPU4pCM45pepoIpDE719FfDf/kn+lf7sn/oxq+dOtfRfw35+H+lf7sn/AKMauLG/AvU9DL/4j9Dq qpajpOn6vCkOo2UF1GjblWZAwB6Z5q7RXmnsRk4u6dmMiijghSGJFSONQqKowFA4AFPoooEFFFFA BRRRQIKKKKACiiigAooooAKO9HSigAooooAKKKKACiiigAooooAKKK57xLrv9nQfZLVx9umHB6+W v97/AAFAGT4svo9RvItOiG5Ld98jjoW/u/h3qpbxbQBVazgEaAY+pPJP41pRgDkVDd2NIkRQPWpB 1FNU07tQDHflR+NJxjFIWAOCeT0piHHkcdKYenSnZ9qbnigXUYSQeCasQzvYO2pW6kwji7hXkkf3 gPWoD9KltZ/ss4fGUPDL6igo6uGaO4hSWJw8bjKsO4qSuctZ/wCxrxYy2dMuTmJjk+Wx7ewroqoQ tFFFABRRRQAUUUUAFBoooAKKKKACiiigAooooAKKKKACiiigAooooGFFFFABRRRQAUUUUAFeW+Mt n/C4PC/mbdnlDO7p9569SryP4i6Xb6z8TvD2nXRcQXEARyhw2NzdDQehllvbO+3LL8juPEz+Go9C uzqn2Aw+U2A+zcTj+HvuzjGOa5D4cyXfhr4Yalqt2hEe6S5t4343AIAPoCw/rVq4+C3h14HWC61C GXHyuZFYA+42jP5isLS9a1bVfBPi/wAP6jM11c6XCwSY8syqTuBPfGzvzzQddKFOVB06UuZc0ea+ lle2m/z1NL4V+HYtRtp/FmroLu/u53MTyru2gHlgPUtkewHHWvSr7T7PU7Vra+toriBhgpKgYf8A 6/euS+E1zHP8PLGONstBJLHIPRt5b+TD867eg4sfUm8VO72dl5JbWKOkaVbaJpcOnWYcW0O4Rh2y QCxOM/jV6ua8WQeLJvsn/CL3VpBjf9o+0AHP3duMqf8Aaqj4btvHkWrq3iC+sJrDY2UhUBt3boo/ nQZex54Oq5q+9r6/kL428HReIYprybVL+BIbUj7NDIBE5Xc2SuOTzj8BWd8Gf+RGf/r8k/8AQVrt 9W/5A19/17yf+gmuI+DP/IjP/wBfkn/oK0HVGrOWBnGT0TVvxJvjB/yIMv8A18RfzrQ8O634afRd Mtv7S0o3ItolMfnR7t2wZGM5zW9q2jWGu2JstStxPblg+wsy5I6dCDXK638MfDF1pFwltp62lwsR MU0TNlSBxkZwR65oIo1qEqEaNRtO7d1brbzOl1y6XR/DmpXsKqjW9tJKoUYG4KcfriuP+DunxweE ZNQI3XN7cOzyHliFOAM/UMfxNY3hTVLzWPg1r0Fw7SvZwzRRsxyfLEYYD8Mn8MCul+EjA/D2zAPS WUH2+c0G1Wi8PhqlNvXmSfpZtGDryp4f+NejXlsvlpqSCOcKMB2YlDn8dh+or0n+ybA6odTNpE18 UEfnsuWCjOAM9Op6V5v4/Bn+KnhCBBl0likP083P/spr0rUtStNI0+a+vp1htoV3O7fy9yewoM8V zOnRa3cbeuuh5/8AGmKyPhS3mmRPtguVWB8DdjB3DPp/XFd1oBnPh3TDdA/aDaRebnru2DP615zp enXnxL8Sx+INVhaLw/ZsRZWzj/XYPUj0yBk98Ac4Ner0CxbVOjDDt3krt+V+n+fmFFFFB5wUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUGiigCKeFJ7eSFwGR 1KkHuDXx1r+mNoniTUdNcc287Bfp1H86+yq+ePjloYsvE1rqsa4jvEKOe28f/WrGtG8TuwFTlq27 nF6VJuj2k1rS/PAjdxwa5zSpgkoUniukhw0br+IrwMRHlnc+rpy5olVgOlUYx5d5InZuRWgwOemK z7r5Jo5R0BwadPW6Gy4tXrE4as8H8qu2PLisai90pHaeFZvI8RWMn+3j869xrwXRiV1K0I6iVf51 7yvKj6V6OTSvTkvM+dzuNqsX5C0UUV7J4oUUUUAFFFFABRRRQAVDd/8AHlP/ANc2/lU1MdBJGyN9 1gQfpQNOzPLfg7qunWPhG6ivNQtbeQ37sEmmVCR5cfOCenBqL4reJdI1fR7bRNMuItQv5blGUWze YE4I6jjJJxj610f/AAqXwf8A8+Ev/gS/+Na+i+CvD3h6bz9O02OOfGBK7F3H0LE4/Cg9ieKwixDx MeZyvdLRK/rdnA+P9E1HRtM8MeIIF8260eKGG5I6ZXaQT7btwP8AvCvQtB8V6R4h09LuzvIslQZI XcB4z6MP69D2rZkjSWNo5EV0YFWVhkEHqCK4i/8AhL4Uvrhpltp7UsclbeXC/kQcfQUHOsRRr01C vdNXs1ro9bNfkbNz4z0SDWbPSYryO5vbqQRiOBg+z3YjgfTrV9vD+iuxdtIsGZjkk2yEk/lWXoPg Lw74clWeysQ1yvS4mYu4+meB+AFdNQc1WVOLSoN26t9fuILe2t7KAQ20EUEK5ISNQqj14FeX/Fe9 tLi88MmG6hkCXhLFJAdoynXFeqOgkjZG+6wIP0ri/wDhUvg//nwl/wDAl/8AGg2wNalSq+1qt3XZ X3TXc7CC8tbosLe5hmK9fLcNj8qo23iPR7u9uLOLUbf7VbyNHJC7hXDA4PB6j3HFVvD/AIQ0bwu8 76VbvE04USbpWfOM46n3NZmtfDPw1rl9Lez280NzKxaSSCUjefUg5H5CgzjHDc7UpO3R2X4q/wCp yfxc1G21qbSfDumyR3WoPcbisbBtmRtAJHQnOcegq38WrKWyt/D2tRoZF024CyEe+0qfblCPxrq/ DvgLQPDE5uLG1Z7nGBPO291Ht2H4Ct+8s7e/tJbS7hSa3lXa8bjIYUHUsbTpSpxppuML77u+/wDw CnN4g0yLQG1v7XE1iIjKJAwwwxnA9+2OueK8/wDhPoUd/wCF9WutTt1lg1S4AMbjh1TnP03FvyrX Hwg8Ji787ybspnPkGc7Pp/e/Wu3t7eG0to7e2iSKGJQqRoMKoHQAUGcq1GlSlToNtya1atZLbrvf qYH/AAr/AMJ/9AK0/I/41wHhfw3o1x8U/EFhNp8L2lqhaCIg4Q7l5H517JWRZeG9M0/XLzWLeFlv bwYmcuSGGQemcDoKBUcdOEJqcm21Za9bo16KKKDgCiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAK8v8Ai9pXifUre0XRVlltORNDEcHPqfavUKKAPklPAHjKeUn+wrlyem7AH8607b4Q+OL3 G63gtlPZzjH5V9R0UAfHPi3wTqPhK7W11CTMrLuDJ91voa5yGUn5G5r6k+MWgx6t4Qa6x++s23KQ Ox618suDHP8AjQArjYCTVcfO241ZuOEI9earqpcYHFAEqRbxx0qeMEDB7VNa26heCeafPH5eDQIp XA+UH0r6k+Cuqf2l8O7VCfntnaE/QV8vS8oe9e3/ALO+pny9V0tjwpEq/j1oA93ooooGFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAENzH5trLH13IR+lfGOq2cmneJNQ s5YgWhnZSp4719qV8pfFqw+w/Eu/JBxcYm496zqfCZVl7pyhwcEWmw+oNViSWYAVODF/dmwB2NQS nEvAIDVzHGlqNgKhmV9xHovWpwIlbhpwaqrlZ+vXv6Vb3pwftRz7rVMqR3PwjvxY/EWz+clJ0aMk 8ZJHFfUVfHfhi++w+LdIu2kDBLlMkccZr7CRg6hlOQQCDWtF6WN8O/daPMv+Fma7c6nf2umeFJL5 LOdoXeKRj0JAzheM4qzZfFGWDVbfT/Efh+60g3Bwk0jEqcnqQVHHQZGa57wd4v0bwvrvihNVuHia e/Yx7YmfOGfPQe9P8S63p3xN1rSdC0qQRwRTGSa4uGWPKnAwgJyxxnj6duRqfUywlL2jhKjaFvi1 7X9Nz1PW9asfD+lTajqEvlwR9gMs57Ko7k1wkPjzxfrSfatC8IlrEn5JLiTBceo5Uflmq3xFjOu/ ELw14blLfZGAnlUHG4FiD+O1D9M16jFEkMSRRIqRooVVUYAA6AUzz7UsPRhKUeaUtdb2S+Xc43wz 47udW1s6Hq2iXGmakIzIAxyjAdTyAR7dR7121RPbwyTRzPEjSx52OV+Zc9cH3qWg4606c5Xpx5fL cr3d5a2Fu1xeXMNvAuN0szhFGemSeK5fSvHtprfjWbQtPWOe1itzL9rR8hmBGQBjkc9c10uo6bZ6 tZPZ39ulxbuQWjfocHIrzbQdNstJ+N19Z2FulvbpYZWNOgJCE0HThaVGdOpzX5km126HqlY3iXxH ZeF9Gk1G9bIHyxxA/NK/ZR/ngVc1TVLTRtNn1C+lEVvCu5m/kAO5PQCuC0fS7vxjev4u12Ipaxxt /Zdi3IRccSMO5Pb8+gFBnh6MZfvKvwL8X2X9aI6LwN4rfxhok2oSWi2pjuWg2K+/OFVs5wP736Vm az471BvEM2geF9H/ALTvrcEzyPIFjjPp1Hr3I54qj8Ev+RMvP+wg/wD6LjqD4NZurXXdUkwZrq8G 9icnoW/m5oO6ph6VKpWny3ULJLW2v4m34d8b3V3r7eHvEGlnTNW2b4wH3JKMZ4P0B6Ejg88V2teX fE9vsHi7whqUSkSrclWYDqoeMgf+PN+dbvjLxNdx3UXhrw+PM1y9GCwPFrGersexx0/P0BDCphVV 9nOkrKSd+ys7N+hU8SfE+10bxHBotlbLeymRY7h/M2rExIG0YByR39Onrjv68U8Z+GbTwta+FLO3 PmTPel7i4YfNM+UyT7eg7fma9roFjKVGFKnKj1vr3s7XCuX8XeNrLwqsMHkSXuo3H+os4fvN2yeu BnjoSfTrXUV4jYeJreP4pa5qt1ZXmo3cTtbWNvaxF3AB25A7fKP/AB40E4HDKtKUpK6ir279l/md roviLxpe6zbR6l4XSz06UkPLvy0fBIJ59Rjp3rX8X+LLbwnpsc8kL3N1O/l21shwZG/wHHY9R61l aT8SbG91mPSdS02+0i8lwIlvI9ocnoPUE9uMe9Yvixhe/GbwvYyENFDEJgp5w+52/wDZFoN1h+eu lVp8qSbsuqXndk9x478VaIkd94i8LLBpbsAZYJgzxg+oyf1xXYXWr2Fvozaw86mxEPniUc5QjII+ vFR+NbeO58E63HIAVFlK4Huqlh+oFeTX2pyN8CLGIyElrv7M3uA7OB+QH5UmVRoU8VGMox5XzJO1 9n11udDH408V6rbnUtK8KiXSwTtaSX95Io7gZH6A10fh3xHbeJdIF9aBomDFJYWOTG47e454NaWi W6WugadBGMJHbRqP++RXBeBcW3jnxZp8ZAh84yKnph2HH/fWPypClGlWp1OSHK4bb6q9tTsZ13El kQn/AHRXKeKdInmSPULNgssXDL0DCu0lQc1manaSXelzQwnbLglfeqTPMaPnrWECapI3l+WW5K47 1S5Irp/FEXmRK06bLuA7Xx3Fcx16VRIqt8wFep/Bq/EWsT2jHhxkV5WBg11XgPUP7O8V2cmcKzBT QB9KsMMRjvT1HNI5BIYdGANOU0CHgd6WgGg1IC0tIaWgAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACg0UUARjGaXvS59qQZz0oAOM0d6B16UZ56UAAxmgEZNLnnpSd zxQAAjmgda4G4+Lmh219c2Z0/VpJLeVo3McKEZBI/v8ATirGj/FPw7quopYn7VZTOcJ9sjVFJPQZ DHH40HW8BiVHmcHY7bvQMZNQ3l5b2FpLd3cqQ28Slnkc4CiuCb4tWU9xIulaJqmoxIcGWKLA/Lk4 +uKDOjhqta7pxukehLilHX2rk/DHxB0nxNetYQxXNrfqpYwTx4JA64IyPzwa6wE56UEVaM6UuWor MBjJpBjmlB5PFYUfi3TZfFp8OReZJeiIys6BTGuP4Sc5z04x3oFCnKd+VXtqboxSDHNKPpVTUtTt NG02fUL6URW8K7nY/wAh6k9AKCYxcnZblsYoGKxPC/iiy8W6ZJf2ENxHFHMYSJ1UNuAU9ieMMKzv EPj+w0PVE0mCzutS1Nhk21om4qOvPvjnAzQbRw1WVR0lH3kdZ60DFcr4b8eWGv6jLpclrc6fqcQJ NrdJtYjvj3AwcHB/AVf8SeK9N8LWsc1+ztJKdsMES7pJD7D+poB4aqqipOPvPobYxz6UADJrh3+J drZvCdW0LWdNtpTgXFzbYQH3wc/1rtYpEmjWWNleN1DKynIIPQigVWhUpWc1a47gGlFA+lKPpQYi DrQMc80fhSg89KAG96XtR+FGT6UAAPFICMUo6dBRnjpQACgUDp0oB9qADjGD3r548e/C7Xh4uuNX sIRc2c7ZKp1WvofqORSjPpxTTsJq58iS+H9Wsbspd6XcRxdn29qqahaRBEkjPKN0PBr7CkiilXbL Cjj0K5rg/G/w20jXdJuZrWAW96qllZBjJq4z11M3TPJLO6gWOGF5AJSvC1orx161m21itqFiuIwb mD5d1X1bIzXrRbcU2fKVVFSsidW9M+9KCM+1Rqxx707PBpmY8ncpHNZN6Wtp4bteDE4atQMdtU76 PzLdxjORRYqMrNNH0DoV8uo6HaXSsDvjGTWgOlcB8Jr83Php7Zmy0DYAz2rvgcDpXjVI8smj62jP npqQ5adTVNOqTUKKKKACiiigDzDx5p4/twzbSBNGpyPUcf0rgbjTZIbhnt5ME9dvINe1eMdMW90h rgcS2w3D3XuP615VMGVjjINQ1qebiadpX7mRjUF4KqffZS5vv+ea/wDfJrRNzOBjzWx9ab9rnBB8 w8UHJYzyb7/nkn5Gmlr7P+rT/vmr51CVXAaVgT0NPN3IQSZWoHymZm//AOeafkaQi/P/ACzT/vk1 pm6mwCJWpPtU/wDz1b86LC5TOC356xp/3yaXZff3U/74NX2vJx/y1f8AOhbyRxnznP40WDlKGy+y eFx/uUnlXxPUD6JWgbmU5xM/H+1Sfarj/ns/50WCxRMV9n/7XTGtr1+DI4H+yuK0DcTnBMz/AJ0f aZ/+ez/nRYLFGHT/ACjny2LdyRk1ZEMg/gb8ql8+br5zf99UnnzH/lu3/fVFg5WM8t/7jflR5T/3 G/KtWDRdeuoEnt7O7licZV1GQR7VIfDniQn/AJB17/3zQV7KfYxvKf8AuN+VJ5b/ANxvyra/4R3x GP8AmHXv/fNJ/wAI94j/AOgdff8AfNA/ZT7MxvLk/uN+VHlOf4G/Ktk+HvEf/QOvv++aP+Ef8Sf9 A6+/74NAvZS7GN5b/wBxvypPLf8AuN+VbP8AYHiTvp19/wB8Gk/sHxH/ANA6/wD++DSH7KXYyPKf +435UnlP/cb8q2P7B8Rjn+zr/wD74NN/sPxFz/xL7/8A79mgPZS7GT5b/wBxvyo8tx/C35Vr/wBi eIv+gff/APfs0w6L4g/6B9//AN+zQL2Uuxl+W5/gb8qPLf8AuN+Van9ieID/AMw+/wD+/ZoOi+IP +gff/wDfs0D9lLsZexv7p/Kk8t8fdP5VqHRPEH/QOvv+/Zo/sPxB/wBA6/8A+/ZoD2Uuxl+W390/ lSeW/wDcP5Vqf2H4hz/yD77/AL9mk/sTxD/0D7//AL9mgPZS7GRLbeau10JB9RVU2FxH/qZZFHoR kVoSm6jkaORpFdSVZSeQR2pnnTgY81vzosTZlPytQH/LVf8Avik8vUB/y0T/AL4q4Z5s/wCsb86T z5f77fnQKxT2agP44/8AvigrqP8Afj/74q2J5D/G350qT7/424460DSuUsaj/fi/74o/4mP96L/v mrxl+YDec0wyNn71OwWZSI1LP34/++aT/iZesX/fNXRK4/iNKZiMZfrRYLMoZ1Md4/8AvmkLan/e j/75rS3cZLmmGZjgq3B6cUgszO36nn70f/fNPjj1OV9plOD2VKu+dJ2Y08XM/GJXA9jimFh1vozQ 4luX2E/3zlj+FdN4ZhD61YxRKf8AWqckc4zk1z8Urtxxk98c/nXb/D1AdeLEZIhbHtyKaRvRinJH qNeM/F2XyPE9nIwJj+xqGIHT535r2avJPiqu/XrYEA/6Kvbn7702d2J/hnC6ZdwwanBeMFmijRtq qf4iODWhbasEuxNO0jqpZlAX+Ig4rHOm6exySyseuFpv9lWR6TsP+Ampu9jgjNx2Nm21l7e4hkcP IsZDYAxyBxUmna61teQy3AeRIzkgAZNYX9lWw+7dsPzpf7LjxkXrce7U22wVWSNj+23MwdwXXeGK jAJGc9af/a4uLl/NkZI5JCxJXOATmsT+zsdL0/ixoOnyHkXwH/AjSux+1kdJeaglxdTFL6ERO3HX IXp6U681O3hWRoriOXzM7VA6BQMZ+pA/WuZ/s257agv4uKadMvDnF7Gfqy0XL+sPXTcCxY7jkk8k 0hKopdzgD9aj/sjUVf8A4+lxnPEoqaPSZVbezK7ju0gNI5yCMFmaRhgt0HoKfJGsqgPyB0q0LGfs q/8AfQpfsVx/zz/UUCMx9LtpDn5x7BqRdKtx/FIfxrU+x3H/ADyb8KPslx/zxf8AKgrnl3M3+zYR /G/50f2bH/fatH7LOP8Ali/5Uht5x/yxf/vmgfMzO/s6POPMbmkOmgf8tW/75q9JbTsnyLIjdmC1 Ebe/HVs/WKgOZ9yp/Zw/56n/AL5o/s3P/LX/AMdq15V/6p/37NN8u97sn/fBoHzMrf2YT0mH/fNI dLb/AJ7D/vmtJUcAZU+/FG1v7p/Ki4ueRlnSGwT56/8AfNM/sZif+Pgf981r7T/dP5UbTnoaLj9p IxTobk/8fA/75qSDQ41bdNKX9AvArW2t6GjB9DRcPaS7kE223tgUTCR87R6CrAZXAZfukZHvSEZX aRkH2qksd1aEiHEsPZGOCv0NAt0Xs+3FKDxVQXch4NrID9RTftkmf+PaT8xQKxdz0pkkSSHLDJ6Z qsL1sf8AHrL+lIb1v+fWX9KALIiVANoA+UgfjXJXFtNHd7HjYEHrjg11sUomjDbGTHGG6044oKjL lMcpjGAenpUZVh/CfyrcHFG72NFy1V8jGtLWU3azupWNFOM9yat21vG1kjFQD94nOO9WpgzRnb1w ahtYJ541h8shUAB96CZSvqdv8N4d2r2+f+ewP5DNe415B8OoAuuQR9doZz/3ya9fq0d2GXuBXwWB lsetfelfB8S/6RGMfxD+dXHc2kz3SxiEVjAgGAsaj9KnCc9KWJcQqPYVIoyTRLcS2EVKds9aeF9K dipKIxHTtlSbe9KFoAjCU8KKkC8UoWgCMJinbKkC804L1pAR7M0oSpMUoUUARhPalCVKFpcUARbK XZUu2l28Y4oAh2Cl21LtpQvFICLZS7PapNtLtzxQOxHszRtqXbRtoER7aULxzUm2lAoGR7KNtS4o C0xEWyjaKm20baQyLYKNlSgUuKAsRBKNo9Kl20uKAIdlGypsUbaBEWyjZUuKNvNMZFspdlS7aNtI RDsFLsqXFGKYEQQZpJUwM46EH9anC80k4/dN9B/MUgHRQiW3dcfdkOKhayUODjpWlYJn7QD2kqWS IChMGjn7rS7ZJT+5JyM5zVVtOtR/ywP/AH1XR6iEEqgjnaM8VnsUz0P5VpzMjlXYyTp1r/zxP/fV M/s+1B4hb/vqtYlPQ/lTcp/dPPtRzMXKjFOmxEkbB+VMbRom4MS/lXSLbjOcDNO8kelVzy7i9nF9 Dk20GA5/cqPwqJvD0Bz+6H4V2f2cn+GmG3xjhfxqlVkupDoQfQ4g+HIj/AR+NRt4bTn74+hruTbD uUH/AAKmGKJeSyfQHNUq811JeGpvocI3ho9naon8OSjpIfxFd4wg9RUbPbL1Iq1iahDwlLscC3h6 5U8MCfpUTaDeeimu9ku7JPvSIB9RVV9Y0tDhpo/zFWsRVIeEonDnRL3tGD+Ne9/DlSvgHS1IwQsg P/fxq80bxFpCMPmDEegr1DwHKs/gywlVdquZWA9AZGqK9Sc4e8upph6UIT9x9P8AI6SiiiuQ7Qoo ooAKKKKACiiigAooooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFQ3NzDZ20lxcSCOKNdzMewo Ap63rEOi6e1xIN8h+WKIHmRuw/xrgIhPc3Mt3ctummbc5/oPQCi/1GbXtU+1yqUgUbYIifur6n3P f06fW3Am3p0pMETxJgZqwoqNB69amAxUjHLjsaUdaQD0FOCE845p2EJnB/SkK85x2qYQOw4Q0ptZ geV/WiwXIAePalwAPepTA4PT9ab5TAfd6UWFciPP0pCak2EHhaYUOOlMaLlo0V3E1hdYMb8KT2NX NGupLWQ6ReuTNEP3Lt/y0TsM9yP5VjfdO7GCOavzwDWbFHR9l9bHdHIOuR0NCA6aiszRtU/tG3KS gJdxfLNH7+o9jWnTAKKSloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigYUUUUAFFFFA BRRRQAV5d8QLXWYvHui6zpmj3OoJZw5IiQkE7m4JAOOteo0UHRhq/sJ89r6NfeeYzeLviDqEZh0/ we1pK/yiWck7T6/NtH58Vt+A/BknhvTryTU5EudR1Ft113UDn5c9/vHJ9/auzooNKmLvTdOnFRT3 tfX5s8jGh+KPhzrNzc+H7NtV0W5bc1quS6egwOdwHG4A5HUdKvy+PvF2pobbR/BV3BcsMebdbtiH 8VUfmfwr02ig0eOjP3qtNSl3119UnqZPhuDU7bw/aRazL52ohWM7hs5YsT19gQOOOOK1qKKDhnLm k5dzjvGHiDWdOlfTtO8MXWpw3Fsd1zC5ARm3LtwFOSAAeveuP8Can4l8LaZHpEng2/mSS5LtcEsg QNgdNh6Yz1r2Gig7KeLhCi6Tppp76vp8zlvGWoeJdLSyuvD9gt+is4uoCMkrxtIwd2evTPuK5PUP G/i3XdPl0vTPB19aXc6mJ5pQ22MHg8lVAOM8k8V6rRQTRxNOnFKVNNrZ6/j3OV8F+EU8OeE/7Kut kstxue6K/dLMMFR7AAD9e9cdosviH4aTXmlyaHeatpTymW3uLVSxXPHOAcZwMg456ZzXrdFARxsr z9ouZS1a8/LseZ+GtH1rxH45Pi/XdPfT4bePy7O1lzvHBAyDzxuY5IHJ4rN+Idv4h1LxfFE2iXup 6HaBXS3hDKkjleSzAHPPH09MmvXqKDSGYSjW9pyrRWS10Xl1v5nmUXjjxbBCkMPw/uY40UKiKWAU DoANnArutAv7zVNEt7zULB7C6k3b7Z85TDEDqB1AB/GtOigwrVqdRWjTUX3u/wBWFFFFBzBRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV5x8adHOpeBZ LhF3S2UglXA7dD+lej1R1exTU9Iu7KRQyzRMmD6kcUmrqxdOXJNS7HxxbSATqw6NXW2rD92/Y8Vy VzbvYXs9q4w9vK0Z/A4rpNOkaW2UKORzmvDxkOp9dh53iXJ4zHndyT0rOu4w8DAHtmtaYfOjOc7h WfOACfSuSm9TpIbaTzLdWOM4xWjp+DOAehrEsXz5q54Vq3NN5nBNOurJhFnXaPHu1S0X1lX+de6r 90fSvD9BZf7csv8AroK9wFduTL93P1Pn86f7yK8haKKK9o8UKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACkpaKAMjxPCk/hfUo3GVNu/8q+Mb0bJ2HoSK+v/AB9qS6Z4Nv5WYAunljPcnivj +7O+Y+5p9AGTrhUJPBFV1+RuauXi7PLXH8PNQAA0hF23mAAOelNnn81vaqwwozmnKwI4NAxxGRgG vSfgReC38etbFgBPAwx7gV5sK6b4Z3jWPxI0mQEDfIYyf96gR9gUUUUDCiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiis/WNYstC0ybUL+URwRDJPr7CgC/mvmn47FP8AhYEW D8wtkyR+NdVrPx5Us0eh6b5hxgSXBxj8K8h1/Ub3WtTl1PVJhJdTHJA6KPQe1Y1KkbWOarVi1ZGf GQeDcsv4VFOuGBRi/wDtHjNNAwCe9TBfMUAttHvWGxz7FXdiVT71cLyHHMJA7Gke3tgoPmMWHIIF KEDJlYQ3vmndDckwLyIyy4RTGwYFD6V9i+G70ah4c0+6H/LSBCfrgV8cFMq2bcqcetfUHwi1T+0/ AFmrH57cmJvz4rSi9bG1B2bRl/DWztbrWvFxuLaGYrqBx5iBsfM/rR8W9H0a08MpqEVtb2uopOgh khQI7+o4xnA59sVN/wAKx1WDUNQudO8Y3Nit7M0rpBblepJAyJBnGTzVnT/hZb/2hFfa/rN7rcsJ yi3BIT8QWYkdOM4rc+mdegsR9YVXRW0SfRbdEc34pubrS9e8EeLL8Pta0hjujt+62Nz5HriRuPY1 7DFLHPCk0MiyRuoZHU5DA9CD6VS1nRbHX9Ll07UIfMt5McA4KkdCD2IrhIfh14l0dWt9B8YTQ2ZP ywzITs+nUfiAKZyynRxVOKlLklG662avfp2PQbx7aUHT5plWS6jdVQMN7DHJA9s9a4H/AIUl4a/5 /tW/7+x//G61vDPgI6LrB1rUdZu9U1MoY/Ml4UA9sEk/rj2rs6DL28sM+XD1HZ7vbUht4FtraK3Q krEgRS3XAGK88s/+S96j/wBg8f8AoMddvrlhealpUlrYak+nXDFStyibyuDkjGR1HHWuGX4Za2mr vqy+NZxfunltOLIbivHH3/YUF4N0lGbqTSck1s/LXRHV+MPDC+LdFGmvdtbATLL5ipuPAIxjI9a5 ef4da1HbSH/hPNaKqhO0u+CAOn367rSLO6sNKt7W8vmvriMEPcum0yck5xk49Pwq1LH5sLx5xvUr n0yKDKni6tFezhL3U+y/VXPIvgzo9zLavq66rcpbRXMkTWCk+VIfLX5yM4z8w7fwitH4N5tINe0q QgT2t586ng9Cv80rq/BPhP8A4Q7RZtP+2/a/MuGn8zyvLxlVXGNx/u9c96zNb8B3UviCTXvDusPp V/Mu2dfL3pL05I/AZyDk80HdWxdOvUqwcrRlazt276X6sxficv8AaHjDwhpkRJlNwXZQeis6DP8A 4635GtLUfhrcXXiG+1iy8TX2ny3bZdbZSpx6ZDDI4q54c8Cy6frja9rmqSarqxXZG7LtSIYxwPXG R2HJ4712lBjUxjoxhToSvyqzdt7u73PCPHnhXUdGuNES68S6hqJubgojXDMfJOV+ZcseefbpXo13 8P4NW8NWmj6zq+oXht5mmF1vAkcnPBLbuAD+lWfF3g//AISqfS5Pt32X7BMZceTv38rx94Y+779a 6igdbMJypU+WXvK99LddOnbscV4d+GOi+GtZi1SyutQkniVlCzSIVORg9EB7+tYXw2xY+OvGGnTD bO0/mICeSqu/P/j6n8a9SrjPE3gU6rrEeuaPqUml6vGu0zIuVkGMfMPXHGeeOMUEUsW6vPDES+JJ X7Wd18jn/jWkf9m6O8YH277URCR97GOcfjt/Sl8VA2Pxf8K39wFVJohAWHAL5cdf+2i1q6X4Bu21 yHWvE+svq11bHNvHs2RxkdDj8jgAc+tbPizwvZ+LNNW1uHeGaJt8Fwn3om/qPUUjohiaVPkpc10l JNr+929B3ja6jtfBOtSSHANnJGOe7KVH6kV5Xe6XIvwIs5SmCt19pI9FLsgP5MPzrqZfAOv6uIrT xB4qlu9NiYN5McW1pMf3j/U5rtptLsp9HbSnt1+xGHyPKHACYwAPwpCpV6eFjGMZcz5k3a+y6a2K +gzx3fh7TriMgpJaxsP++RXA+BALzxt4s1GIAw+eY0f1Bdjx+Cg1cj8A+ItOt307SvFssGlsTiNo cvGD2Bz/ACIrpfD3hyz8MaMthaFmy2+SVvvSN6n8ulBM5UaVOooS5nPbfRXvrcuSDtiq8gzFIF4c qcfWrEp5qtPItvbTXEjKiIpO5jimeazxnxLJEILu3vF23YbIPqK4TPHTA9a1vEOpHUdXuJTJv+Yg EdMVj5J6flVE2HdfpVuznNvcQTjgxyA5qlnNPXJQjPamSfWWkXa3+hWdypzujGT+FXlOBiuI+Fup /b/BwiY5eE4rtY2GMUkBMCafUYp+aGA4UtNGKcDmkAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABQaKKAGAHNHOaUdetJjnrQADOTRg0DqeaOp60AKAc9aQA5oAGetA HvQB5F8Ptb0vRvEvi/8AtLULe0828Hl+dIF3YeXOM+mR+dO+IFzYeOL3StI8PNHfaiJS73EAysMX Q7m9MkH8PUiq/gXw1o/iHxL4t/tayW58i8Hl7mYbdzy56Eeg/KrnxA8G6R4a0Ea9oSSadfWsqbWh lbDZOO5PI68Uj6SToRxys3z6W7XcVbzJ/idJc6rr3h/wnHK6Q3coknYdSN20H8AGOPXFej6fp1rp VlHZ2MCQ28S7VRBj/wDWfevI/EWounifwL4pvU2R3FtD574wFOcsfp+8JHtXsoweQc5pnm41ShQp QW2v331KbaTYyapFqbW0f22JSizgYbaeoJ7j69KuAHNNdS0bKr7CwIDehrz/AP4QDxP/ANFC1D/v y3/xyg5aUIVP4lTltte7/JM7PWtIt9d0m4026eVIJtu5om2twwYYP1FeZeHfD9n4a+Mq6dYGUwrY s4MrBmyRzzgV6tZwyW9pBDLO08kcao8rcFyBgsfr1rz3/mvX/cP/AKUHVgqk1CrTT93lb/I9Enmi tYJJ55UihjUs7ucBQOpJrzq0hn+Jmtrf3SPH4WsZD9mgcY+1yDjcR/d6/wAu7V0vjjw9e+J/Drab Y3SW7tKrOZGIVlGeDgc84P4Vg2ug/EOztY7a217R4oIlCoiW2AoHYfJQLCqEabnGaU3prfRd1o9X +BD8FP8AkTrzH/QQf/0XHUHwpVdT1jxLrs2HuZrnYrnkqpLEge33fyFZ/wAHLfXGtDPBe26aMt3I Li2KfvHfy1wQccDJTv2NaHwbQW0ev2R+WWC7Csp6j7w/9lNI7sZHleJaer5fz2/IPiUq6X4w8K61 CAk/2jy5WHBZQy8H8GYfjUfxDFxovjzQvE1zayXGlWyrHIUGfLbc36/MCM9SKf8AFpFutU8LWK/N JNdsAo64LIP61J4muX8RfE/TvClzK6aVGnnTwqxH2hgpfB9RwOPr+AGH/h0pPZRnf/Dfp+hY8aeK 9C1nwJcQafdx31xfbYre2i5kL7geU6jGM8j09a63wpp1zpXhXTLG7P8ApEFuqyDOcHHT8On4Vxfj XwFpmn6Zc+IdCZtK1CyUzA27FUYDqAP4Tjpjj25rrPBOsXGv+D9P1K7x9olRhIQMBirFc/jtz+NM 466h9UTov3ebW+97fdaxvgGlGaQfWgDnrQeYAzQAaB1PNA780AABzSgGkH1oAHPNAAM0oBxSAYzz R+NAAM0AHFGOaAOvNAC4OKADg0gAx1oGPWgAAPSkZdyMp7gil9eaB96gD5/8R2n2XXbkDoGNUFOQ K6DxwAviC52jvXPRDKV7FF+4j5PFRtUZMvanUgGKXr1rSxzagOPpUcoyDn0qUZx0JqxDp886FkQt gZo0RSTOg+D85j1O/tieCMgV68DkV4Z8Pbr7D458ljt835TmvdCMZ5ry8UrVLn0uXSvQSYq06mr0 p1c53BRRRQAUUUUARzRLPBJE4yrqVI9jXi+q2kljez2sgw8TFT7+/wCVe2Vy/irwt/bKC5tSq3iD GG4Eg9D7+9Jowr03OOm55K/Wo8mr1/p15p8pju7eSFh/eXA/A1RqTzWmtylqAbyGZDhl5BqO1ujN ACe45q68TS/IAWLcAAZJqS08JeII4gBo16R2PlHpQVGLa0RHCxMCZ7cU6ry+GPEQXA0e8H/bOlPh fxIemk3n/fFBPs59jObpWWjSw6jIo/1TKG+hrpD4U8Skf8gm7/75H+NMPg7xGTn+x7k/gP8AGgpQ muhmwSbpCPUVKc+tadv4N8RCVSdJuAPcr/jVO6tLi0neG4heKRTgq64NBMoSWrRB+NI3Sjv2oIz0 oJsyJuRxTre3kubiOGFC8sjBUUdyegq3a6RqN+4S1sp5T/sxn+demeDfBJ0eQahqIVrzGI4xyIvf Pc/yosb0aUpPyOq0mxXTNJtLJTnyYlQn1OOT+dXaKKs9RaBRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAeH+M9OfTvFV6pBCzP5yH1Dc/wA8j8K58nNe3eLPDEfiOxXYyx3kOTE56H1U+1eN 6lpl7pVwYL22khcH+IcH6Hoaho83EUnGV+hS59aCTmg5Pak59DSOYCKzftDRXcsZPGcitLBNZ9za ym8LrFIQQOQhNMuCJYZC90hz/CRVvNVEimRgRDICP9g1JuuB/wAsmH/ADQJp3Js1WvyRaOy/eXkU pefvGw/4AajkaVlIYHB6/LQCixi3bbBk84q3CSbdM9az2Xaeh49q0IObdcYoKkhwPtTl57UhB9Kc oPpQQW4BjFej/Dmzdprm+Kny1XylPqTyf6fnXJeHPDGoa5OvlRtFbZ+edx8oHt6mvY9O0+30uwis 7ZdscYxz1J7k+9NI7MNTd+ZlyvLvipARf2Fxt4eJkzj0Of8A2avUa5L4haPJqnh0ywIXntG80KBk lcYYD8OfwpvY6qsbwaPFDjNNOKVjzTM1B5bKOoXD2pSReVztIpy3rPGpXjJApuqJvsnx/Dhqq2jg omWXAHrTLSXKbRz61FO7RwsynkAkU0XUeMkflio5LqMrgAn60E2G22oia3V+hI6VZRt8YbOSRWWg WNQFxgVftzmBTQVJLoTUmQOvFJ3pCKRmOEkZOMn8q7DTfh3q+qaZb39vLaiKdN6h3YNj3GK5SxsZ tSv4LO2XdNO4RB9e/wCHWvpDT7OPT9OtrOLGyCNY149BiqSudVGlGerPIj8L/EAPDWh+kp/wqNvh r4kHRLc/SevaqKdjf6tTPET8PPFKn/j2U/S4X/GmnwF4rX/lzY/S4T/4qvcKKOUX1WB4YfBPitf+ XGb8Jl/+Kpp8IeLF/wCXC5/CRT/WvdaKLB9VgeDN4X8Vp1068/DB/rTD4c8Uf9A2+/79175RRYX1 SHc8B/sDxQn/ADDL/wD78mmHRfEo/wCYZf8A/fg/4V9A0UWD6pHufP39keJf+gbf/wDgOf8ACmHS vEY/5ht//wCAzf4V9CUUWF9Uj3Pnk6b4hH/MOvv/AAGb/CmtYeIBx/Z19/4Ct/hX0RRRYPqke582 3J1W12/abeaHd93zYdufpkVAb64HUp/3wK9T+L1o0mi2F2oOILgq2OwZf8QK8iVsjkA1Jz1aXI7F n7dMTkhD/wAAFIb6QAlljAH+wKr5PoKaw3RsvqpFBlYtrfswz+7/AO/YpRfMwyojI6fcFc5azPgg seK0rTiNx/tE0FyjY0DdsTyqf98Cm/bMNjEeev3BUFULwul2jqcDZg/nQJK7sahvQDgiMk9BsFKt 0wRl8qP5u+zkfSsaKRmuEye9aIPtQOUbEnmNnov5VegnlZBGW+T0AxWcDk9BV237UEWPQ/hvHv1y Rh/BCxP5gV6pXmfwwjJvb6XHyrEq5+pz/SvTKpHpYf4EFfCsajzkJ/vD+dfdVfDW3mtqUbsKrtY9 yhYGFT2IFSqao6XN52l2sn96JT+lW1PNRJWky47E4604VGDTg2akokpR0pqmlBpAPHFPGKYDwKcD xQA+lFNFOFADqUDim5GacD70AKMU7gUgPNGc9qQDhinYpopSaADFOAFNFOzigYYpaM80vHrQAmKX HNHFH4UAGBjFLgZ6UZwKKAADFOxmkzSigBMUUZ5x2ooAUClxSA0ufSgApcUmaM0AGPalpuaUGgBc UuKTNLxQAmKXFGaKAFxxSUZpc0AAHNNmH7pvf/EU8UyblQOpLAD86ALtm4jSZicAyUSXSZ5YAe9c r4svJbbS7VbeR43lndsqcZAA/wAa4qW6uZQRJcTPnrlzzXZQwbqQUrnDXxqpTcLXPUru9WSZirKR 0zuFUzdD1X/voV5lgjoT+dNwQOp/Ouj6h5nP/aP909MN0ueqf99CoptRigQvJLGijr84rzjBJ6n8 6aVOeeaf1FdxPMH0R3j+JrKM8XQ/4Dk1A/i2zXo8jfRa4vbTCoP51SwVNEPH1HsjrpPGcWPkglb6 kCqsnjGY/cthz3Z65srxwPekA61osLTXQzeMqvqbcniu/YHasS/gTVV/EOpPn9+F/wB1RWZikPWq VCC6GbxFV/aLcurXzn5rqQ/Q4qq9zO5+aaQn/eNRscDNMJzzVKEVsifaTe7FLn1NKMg0zHel5607 Cuxcnsa+ivhx/wAiBpX+7J/6MavnWvor4cf8k/0r/dk/9GNXHjfgXqd2X/xH6HVUUUV5p64UUUUA FFFFABRRRQAUUUUAFFFFAgooooAKKKKACiiigAooooAKKKKAEJwK858S6wddvhZ2zZsIH5YdJXHf 6CtjxPqsl5K2jWMmwH5bqYHGB/cHHfue3TrnEel6RYxMsUe2TaMZHAH4Um7DSuZNpaFQAqmr6wAA ZxVq7dfOKJtCpwABVfknGaS1G9B4VVP3qcHUDgVGFz604RnFVYi48S5wQtSxMX4FRrHVmEAN0p2F qakVgfIDE5JGap3ETq3YVtwnNupz2rLuDnJwRzQgZmyM65wTUZdxjnNWHHaoitFhXIfMbrS+axwS Kfs70nl80NIeozeG6iliuDbyrJGcMKClRumOc1NikWZ7gfaVv7MeVdKMSKT8sg9K6DTtQi1G1E0f ysOHjPVG9DXJE7emetLYXzWevweWSI7lhE69j6H60k9bFculzuKQc9sUtFUSFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigApDS0lAHy78VtDbRvHl2wj2wXgE0bdif4v1rC0W4ZTgHrxXpnx/uIDc6Lbrg3AD sfULxXkuls4vQi55Nebi4XTPpMum3TVzqZDL5RI5I5GayLma6mzHHAQe7GtqWTagQdQOapsWIx61 5cGo9D0r3KVtbeRDszlick1rWJ2yiqoj56VPFlXHapqS5jSJ1Ok3Ah1C2lJ+7KpP5175G4eJHHRg CK+coXwnDc17j4Q1VdV8O28gOZI12OO+RXXlE7SlB+p4mdU21Gp8jfooor3TwAooooAKKKKACiii gAoorE8W69/wjXhm81URiWSJQI0PQuxAGfbJyfpQVCEqklCO7NuivPPD9j491EabrF74igSCZo5n slt1wYSclc7eDt//AF8V6HQaV6KpS5eZP0v/AJIKKKKDEKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDmfHXhf8A4Szw3LYJ KYpgd8TA8bh2NfI+r6beaRqM1peRFLiFyrK3t3r7erwr48+G0WS01yGIDfmKZh3PY0AeFNM0zbnx nGOKaTtUmmgbXINOkOVFAupGoJOTyTU6RBh70xBVyJNy5xQMhHAwetWtFujY+I9Oul6xXCN+tQzD aRVZ2KOHBwV5FAj7ltpfPtYpf76BvzFSisbwjfDUfCemXQOd9uufqBitqgYUUUUAFFFFABRRRQAU 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 MTSIVVWzgZxhuK8A02/a+xdO25pvnZieSTzn3zSY7XOpmvLjUbprm8maaV+pPQewHYVagwADxz+l ZVvL7dKvpKoyeKlhsaCqNw9TU6YA4NUEmBxg1L9pCgktgfWloho0lYevNPV+M8VjtqcEZ5lX+dV5 PEEK/dVmpX7DOjEoApRMM/zrk28ROT8sfGPWqsmtXb/cbGaNwsdsZx1zTTdIPvOPxNcG9/eMctM3 4Gmm5mkXJdjx0zQ7odju21CFRzMg/Go21e2VSTMMfWuGyTyWJ/GgHI6d+c0rsDtjrtmB/rhjPamP 4gsozzL79K4wgdMcDge1Rt146/WlqxHbf8JHZnGXNIfENqeN5yPeuHKkjP8AWl6nBPI9qEhXO1/4 SG1xncfrSf8ACRWjH75rjlyWznH8qcvA6jmqsHMdiNetCeXP41INXtWAxMOa4xjkAEc1G8oBwTuB 9BS2K0O7GoQEcSr780/7Qp6MD+NedyXW0naxBPvTE1eZJMJIdoHU96jn1FoejGYfh9ageYYODXFr 4gljGWkyPc1Zg8RK4O8g+9XzoLHQSzZGKxdRuSq4AJJO1QOrH0H4059QSSPcrZ4zmtTwBpQ13xHL fz5e104gqOzSnoPfA5/EVcXcmV0eieE9DXQNAhtTzO/72ds9ZCBnHsOAPp61uUUVYgooooGFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBzfivwZ p3i9LX7dNcwyWpcxPA4BBbGc5B/uisfT/hPoNpeR3V5Pfak8f3Uu5QU46cADP0Jx7V3lFB0wxleE PZxk0gooooOYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooATaByAKWiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKTrS0UAJjFGPelooAbtPrTSh9akop3Ai8s+tBi56 1LRRcCHyPenCIDjtUlGKLgMKLjpSGNGHzKp+oqTtSd6QCABRgAAUoxS0UAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV8Z19mV8deQuRy1d2C+18jgx32fmQjo aUcdqnFumOrUvkLgnJrvPPIRxS9vpU3kLnqaUQKR1agTREM804VKIF45PSnCFfU1QrEQ604VKIVJ 707yFx1NMmxDTql+zr6tTvIXPU0EtENKOtTCBfU0ogT3oEQHFKKn8hcHk0ogXAOTTAgFLnHapvJU nqaXyV9TQKxCKB6VMIV9TS+SvqaAsRdqB06VOYV9TSeSo7mgViGlxVjyFz1NIsK+9FwsQ+2KMelT +SuTyaXyV9TQBX7ijtU5gQEcmjyV9T1oAhFL3qUQrk8mneQp4yaVwIT9c0e+KlEKgcE80/yF9TTA hGPwpScHipvIXjk0GJfU9KAsQ/hSdM4FTiFT3NHkrz1ouFiEGjr6VN5K7c5NCwrgcnkZoCxFk5pf brUphX1NL5C4PJoCxCOeaMVKIV96Uwr6mi4EQPalBqQRLjqacsKkZ5oCxCDx3zRnjryKmEK7eppP KX1NFwIieCKCeakESnuacYVx1NAWIc9vWjmpRCvqelL5K+p4ouBDknrSscj6ipRCvqaQxL6mgLFb aBz2ppPt0q2YVxnJphgUg8mi4FfJx0pMmrAgXA5NI0KjoTSuFiu5GKjC46fnVgwIepNOEK7eppDK 4PrS54qYwryMmk8hfU0hkPWvoj4cf8iBpX+7J/6Mavn0QrjOTX0J8O1C+A9LUdNr/wDoxq48b8C9 Tvy/+I/Q6iiiivNPXCiiigAooooAKKKKACiiigAooooAKKKKACiiigBrosiMjgFWBBB7ivm/xBo/ /CI+L7nRwc2z5uLbjAEbE4Uey8r+FfSNeX/HKwtj4Oj1byl+22lwixSd9rdQfUUMRw9vdA+y9Bk/ jUk2r29ohLOCfQVwk+o3McSxLJgMhYnvmqulSvcwvNKdzg9T7Vg5O9jaMEztn8TvgGIbVOPmPWsy TxBPI+2RztOfvd8dqxppGEnXPHf61XZy8e84yzY6UW7jSWx1kOoRuFweematLco4wTknk4riHnli YhJCvyg8ds1Pb39z5kYMhIx3pxDlOzMqBeWxmnCQcdDj1PWubtryZ5F3MGyQOR2q0t1KXfLfd6fn RzByaG55gP0+tSKygc4yO1YD3cqQxsCMlc9KmSV9uM9hQ5EpG0XXGd34ijcD/FgfzrF+0SB1Xd0p TM/mqu7rkZqGx2Ndp0C43D8aZvjUZyOfU9axUmd4tzY57Y6UrSuqStnOBgZ+mannDluapnQcZ+br xQ0y88ZwPpWUHIdccH1/CmNcuCRxx3xT57ByGyJgT1A46UhuFUMCRWFJcygH5v4c5qBrmTDdOFz+ QzUubYnFbG89+oAA5yO/aqj3xK5CgBhgEnv7VmkZjIJJ6Hr+NRSOyiRffH86TbCSsXmnZ3Cue2SQ eBVc3JZAA55zwOP/ANdUDIzRgHpxj24P+ApwYuuW7AECtFFbmblfQsyXQiIAbLEbQnWoJb1oDuV+ CAOfX396zJZmCM5AZk5UnnBAzWJf6jcyTsGcYU9MYzxS1loWtNTsLHXpXn8qNHZ2YBYkGWJPAH1N fT3hDRhoXhexsmQLPsEk+B1lblv1OB7AVxPwl8C6Da+GtM19rU3Gpzx+d5853FCR/COg9u/vXqVb wjYlu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9k= ------=_Part_32507_2107145494.1369638062770-- From dave@fromorbit.com Mon May 27 06:39:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 972B329DF8 for ; Mon, 27 May 2013 06:39:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 769278F8037 for ; Mon, 27 May 2013 04:39:42 -0700 (PDT) X-ASG-Debug-ID: 1369654780-04bdf078161dbd30001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id TR2L4Ot1IbSEZQ2Y for ; Mon, 27 May 2013 04:39:40 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As4LAGlFo1F5LKgC/2dsb2JhbABagwjCMASBBRd0gwA7gQIDiECdBqAXjgCBOoM+A6h7gyEq Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail06.adl6.internode.on.net with ESMTP; 27 May 2013 21:09:39 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugvm5-0000OB-Fg for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:37 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugvm5-0006sd-A3 for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:37 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 0/3] xfs: changes for 3.11 Date: Mon, 27 May 2013 21:39:30 +1000 X-ASG-Orig-Subj: [PATCH 0/3] xfs: changes for 3.11 Message-Id: <1369654773-26391-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369654780 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi folks, three patches for the 3.11 cycle. The first two i've posted previously to reduce buffer cache lookups for inode creation and inode unlink. The third is a new patch that modifies speculative preallocation to be nicer in small file workloads. It solves anissue where a specific workload triggers freespace fragmentation problems due to writeback being triggered with the speculative preallocation beyond EOF still attached to the file and then never being used. Cheers, Dave. From dave@fromorbit.com Mon May 27 06:39:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5341729E06 for ; Mon, 27 May 2013 06:39:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2419E304032 for ; Mon, 27 May 2013 04:39:44 -0700 (PDT) X-ASG-Debug-ID: 1369654780-04bdf078161dbd30002-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id BiaIwvRfC586Ztu0 for ; Mon, 27 May 2013 04:39:43 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELAGlFo1F5LKgC/2dsb2JhbABagwjCMASBBRd0giMBAQUnLzMIGDE5AxsZiAy9HY4AgTqDPgOhVoclgyEqgSwk Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail06.adl6.internode.on.net with ESMTP; 27 May 2013 21:09:43 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Ugvm5-0000OE-Gk for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:37 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugvm5-0006sp-Do for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:37 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 3/3] xfs: xfs_ifree doesn't need to modify the inode buffer Date: Mon, 27 May 2013 21:39:33 +1000 X-ASG-Orig-Subj: [PATCH 3/3] xfs: xfs_ifree doesn't need to modify the inode buffer Message-Id: <1369654773-26391-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369654773-26391-1-git-send-email-david@fromorbit.com> References: <1369654773-26391-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369654781 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Long ago, bulkstat used to read inodes directly fromteh backing buffer for speed. This had the unfortunate problem of being cache incoherent with unlinks, and so xfs_ifree() had to mark the inode as free directly in the backing buffer. bulkstat was changed some time ago to use inode cache coherent lookups, and so will never see unlinked inodes in it's lookups. Hence xfs_ifree() does not need to touch the inode backing buffer anymore. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 71c074f..518988c 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -2065,8 +2065,6 @@ xfs_ifree( int error; int delete; xfs_ino_t first_ino; - xfs_dinode_t *dip; - xfs_buf_t *ibp; ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(ip->i_d.di_nlink == 0); @@ -2079,14 +2077,13 @@ xfs_ifree( * Pull the on-disk inode from the AGI unlinked list. */ error = xfs_iunlink_remove(tp, ip); - if (error != 0) { + if (error) return error; - } error = xfs_difree(tp, ip->i_ino, flist, &delete, &first_ino); - if (error != 0) { + if (error) return error; - } + ip->i_d.di_mode = 0; /* mark incore inode as free */ ip->i_d.di_flags = 0; ip->i_d.di_dmevmask = 0; @@ -2098,31 +2095,10 @@ xfs_ifree( * by reincarnations of this inode. */ ip->i_d.di_gen++; - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - error = xfs_imap_to_bp(ip->i_mount, tp, &ip->i_imap, &dip, &ibp, - 0, 0); - if (error) - return error; - - /* - * Clear the on-disk di_mode. This is to prevent xfs_bulkstat - * from picking up this inode when it is reclaimed (its incore state - * initialzed but not flushed to disk yet). The in-core di_mode is - * already cleared and a corresponding transaction logged. - * The hack here just synchronizes the in-core to on-disk - * di_mode value in advance before the actual inode sync to disk. - * This is OK because the inode is already unlinked and would never - * change its di_mode again for this inode generation. - * This is a temporary hack that would require a proper fix - * in the future. - */ - dip->di_mode = 0; - - if (delete) { + if (delete) error = xfs_ifree_cluster(ip, tp, first_ino); - } return error; } -- 1.7.10.4 From dave@fromorbit.com Mon May 27 06:39:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0638E29E06 for ; Mon, 27 May 2013 06:39:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C88A68F8037 for ; Mon, 27 May 2013 04:39:49 -0700 (PDT) X-ASG-Debug-ID: 1369654780-04bdf078161dbd30003-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id VjOKEV3tCzRHRK6z for ; Mon, 27 May 2013 04:39:48 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELAGlFo1F5LKgC/2dsb2JhbABagwjCMASBBRd0giMBAQUnLzMIGDE5AxsZiAy9HY4AhHgDqHuDISo Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail06.adl6.internode.on.net with ESMTP; 27 May 2013 21:09:48 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UgvmF-0000OC-Eb for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:47 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugvm5-0006sg-BE for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:37 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 1/3] xfs: don't use speculative prealloc for small files Date: Mon, 27 May 2013 21:39:31 +1000 X-ASG-Orig-Subj: [PATCH 1/3] xfs: don't use speculative prealloc for small files Message-Id: <1369654773-26391-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369654773-26391-1-git-send-email-david@fromorbit.com> References: <1369654773-26391-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369654784 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner Dedicated small file workloads have been seeing significant free space fragmentation causing premature inode allocation failure when large inode sizes are in use. A particular test case showed that a workload that runs to a real ENOSPC on 256 byte inodes would fail inode allocation with ENOSPC about about 80% full with 512 byte inodes, and at about 50% full with 1024 byte inodes. The same workload, when run with -o allocsize=4096 on 1024 byte inodes would run to being 100% full before giving ENOSPC. That is, no freespace fragmentation at all. The issue was caused by the specific IO pattern the application had - the framework it was using did not support direct IO, and so it was emulating it by using fadvise(DONT_NEED). The result was that the data was getting written back before the speculative prealloc had been trimmed from memory by the close(), and so small single block files were being allocated with 2 blocks, and then having one truncated away. The result was lots of small 4k free space extents, and hence each new 8k allocation would take another 8k from contiguous free space and turn it into 4k of allocated space and 4k of free space. Hence inode allocation, which requires contiguous, aligned allocation of 16k (256 byte inodes), 32k (512 byte inodes) or 64k (1024 byte inodes) can fail to find sufficiently large freespace and hence fail while there is still lots of free space available. There's a simple fix for this, and one that has precendence in the allocator code already - don't do speculative allocation unless the size of the file is larger than a certain size. In this case, that size is the minimum default preallocation size: mp->m_writeio_blocks. And to keep with the concept of being nice to people when the files are still relatively small, cap the prealloc to mp->m_writeio_blocks until the file goes over a stripe unit is size, at which point we'll fall back to the current behaviour based on the last extent size. This will effectively turn off speculative prealloc for very small files, keep preallocation low for small files, and behave as it currently does for any file larger than a stripe unit. This completely avoids the freespace fragmentation problem this particular IO pattern was causing. Signed-off-by: Dave Chinner --- fs/xfs/xfs_iomap.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 8f8aaee..14be676 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -284,6 +284,15 @@ xfs_iomap_eof_want_preallocate( return 0; /* + * If the file is smaller than the minimum prealloc and we are using + * dynamic preallocation, don't do any preallocation at all as it is + * likely this is the only write to the file that is going to be done. + */ + if (!(mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) && + XFS_ISIZE(ip) < mp->m_writeio_blocks) + return 0; + + /* * If there are any real blocks past eof, then don't * do any speculative allocation. */ @@ -345,6 +354,10 @@ xfs_iomap_eof_prealloc_initial_size( if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) return 0; + /* If the file is small, then use the minimum prealloc */ + if (XFS_ISIZE(ip) < mp->m_dalign) + return 0; + /* * As we write multiple pages, the offset will always align to the * start of a page and hence point to a hole at EOF. i.e. if the size is -- 1.7.10.4 From dave@fromorbit.com Mon May 27 06:39:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7274229E06 for ; Mon, 27 May 2013 06:39:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E7BD1AC006 for ; Mon, 27 May 2013 04:39:50 -0700 (PDT) X-ASG-Debug-ID: 1369654788-04cbb0049c1d4da0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id TeQlGBnzaqMf3foJ for ; Mon, 27 May 2013 04:39:49 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtELAGlFo1F5LKgC/2dsb2JhbABagwjCMASBBRd0giMBAQUnLzMIGDE5AxsZiAy9HY4AhHgDqHuDISo Received: from ppp121-44-168-2.lns20.syd7.internode.on.net (HELO dastard) ([121.44.168.2]) by ipmail06.adl6.internode.on.net with ESMTP; 27 May 2013 21:09:48 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UgvmF-0000OD-FT for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:47 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1Ugvm5-0006sk-Cs for xfs@oss.sgi.com; Mon, 27 May 2013 21:39:37 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 2/3] xfs: don't do IO when creating an new inode Date: Mon, 27 May 2013 21:39:32 +1000 X-ASG-Orig-Subj: [PATCH 2/3] xfs: don't do IO when creating an new inode Message-Id: <1369654773-26391-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369654773-26391-1-git-send-email-david@fromorbit.com> References: <1369654773-26391-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369654788 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132168 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When we are allocating a new inode, we read the inode cluster off disk to increment the generation number. We are already using a random generation number for newly allocated inodes, so if we are not using the ikeep mode, we can just generate a new generation number when we initialise the newly allocated inode. This avoids the need for reading the inode buffer during inode creation. This will speed up allocation of inodes in cold, partially allocated clusters as they will no longer need to be read from disk during allocation. It will also reduce the CPU overhead of inode allocation by not having the process the buffer read, even on cache hits. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index f4daadf..71c074f 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1028,6 +1028,11 @@ xfs_dinode_calc_crc( /* * Read the disk inode attributes into the in-core inode structure. + * + * If we are initialising a new inode and we are not utilising the + * XFS_MOUNT_IKEEP inode cluster mode, we can simple build the new inode core + * with a random generation number. If we are keeping inodes around, we need to + * read the inode cluster to get the existing generation number off disk. */ int xfs_iread( @@ -1047,6 +1052,22 @@ xfs_iread( if (error) return error; + /* shortcut IO on inode allocation if possible */ + if ((iget_flags & XFS_IGET_CREATE) && + !(mp->m_flags & XFS_MOUNT_IKEEP)) { + /* initialise the on-disk inode core */ + memset(&ip->i_d, 0, sizeof(ip->i_d)); + ip->i_d.di_magic = XFS_DINODE_MAGIC; + ip->i_d.di_gen = prandom_u32(); + if (xfs_sb_version_hascrc(&mp->m_sb)) { + ip->i_d.di_version = 3; + ip->i_d.di_ino = ip->i_ino; + uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + } else + ip->i_d.di_version = 2; + return 0; + } + /* * Get pointers to the on-disk inode and the buffer containing it. */ @@ -1133,17 +1154,16 @@ xfs_iread( xfs_buf_set_ref(bp, XFS_INO_REF); /* - * Use xfs_trans_brelse() to release the buffer containing the - * on-disk inode, because it was acquired with xfs_trans_read_buf() - * in xfs_imap_to_bp() above. If tp is NULL, this is just a normal + * Use xfs_trans_brelse() to release the buffer containing the on-disk + * inode, because it was acquired with xfs_trans_read_buf() in + * xfs_imap_to_bp() above. If tp is NULL, this is just a normal * brelse(). If we're within a transaction, then xfs_trans_brelse() * will only release the buffer if it is not dirty within the * transaction. It will be OK to release the buffer in this case, - * because inodes on disk are never destroyed and we will be - * locking the new in-core inode before putting it in the hash - * table where other processes can find it. Thus we don't have - * to worry about the inode being changed just because we released - * the buffer. + * because inodes on disk are never destroyed and we will be locking the + * new in-core inode before putting it in the cache where other + * processes can find it. Thus we don't have to worry about the inode + * being changed just because we released the buffer. */ out_brelse: xfs_trans_brelse(tp, bp); -- 1.7.10.4 From arkadiusz.bubala@open-e.com Mon May 27 07:41:01 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B4EE629DF8 for ; Mon, 27 May 2013 07:41:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A290C30404E for ; Mon, 27 May 2013 05:40:58 -0700 (PDT) X-ASG-Debug-ID: 1369658455-04cb6c47401cf220001-NocioJ Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by cuda.sgi.com with ESMTP id xzI32ACWGairpE2c (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 27 May 2013 05:40:56 -0700 (PDT) X-Barracuda-Envelope-From: arkadiusz.bubala@open-e.com X-Barracuda-Apparent-Source-IP: 212.227.126.171 Received: from [192.168.241.151] (host8514118246.static.open-e.3s.pl [85.14.118.246]) by mrelayeu.kundenserver.de (node=mrbap3) with ESMTP (Nemesis) id 0Mb9Rr-1UzrYs3r6R-00KiFC; Mon, 27 May 2013 14:40:54 +0200 Message-ID: <51A35455.9070004@open-e.com> Date: Mon, 27 May 2013 14:40:53 +0200 From: =?UTF-8?B?QXJrYWRpdXN6IEJ1YmHFgmE=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120613 Icedove/3.0.11 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 References: <519B6738.9030603@open-e.com> <20130521233937.GX29466@dastard> <519C7D97.50909@open-e.com> <519CD080.2030501@sandeen.net> X-ASG-Orig-Subj: Re: [BUG] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 In-Reply-To: <519CD080.2030501@sandeen.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Provags-ID: V02:K0:l90ccRE8hdDWXu/uOlASR4FbXW2kP6S9hh4azoZTqSP WW+Szr0WXGW1mpghGdhD1Ab2BKNdpTiBDVuBst4MOHsGc7WLA2 MxHNaL0dktBB5dsPHc/wSeI/2oGkIesRhnU3ZVvQbNBS/cWSgc EZI3hD8X6lY0h/6AJDmd/Slj/Hsp8tbryM5iayyRDw3m36d3zi 9jkm9n4Ahqx2v8hn0KzZVXDT0DrrxH1rkmg4hToYfXpCmCM5QQ MLbEqXVmZ71eu+uWPvqL6CL7ftDnFCd4IRFbKC7zlt63sqTqAf tPhcU29cMyJf+DfcX+/oZ2/cS+9szbqnnJyxVb/lmDNARNXXLt Tbcj5zsn2G40sjPAeAm56rmNWJoPIJpUaEa6eYg4r X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.171] X-Barracuda-Start-Time: 1369658456 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, >>>> Test environment consist two machines target and initiator. >>>> First machine works as target with QLogic Corp. ISP2432-based 4Gb >>>> Fibre Channel device. Storage is placed on two KINGSTON SNV425S SSD >>>> working as RAID0 array. RAID is managed by LSI MegaRAID SAS 1068 >>>> controller. >>>> Second machine works as initiator with the same QLogic card. >>>> >>>> After few days of running test script I got following call trace and >>>> XFS stopped working. >>>> >>>> >>> Can you narrow this down from "takes several days" to the simplest >>> possible reproducer? It happened due to IO errors during mount, so >>> maybe you can did that part out of your script and give us a test >>> case that reproduces on the first mount? >>> >>> >>> >> I 'll try. This errors occurs only on heavy load. >> Is there any possibility to simulate I/O errors on XFS filesystem? >> > You can use something like a dm-flakey or md-faulty block devices perhaps. > Thank you very much. Md-faulty helps to reproduce this problem. I can repeat this problem after a few mounts. Simple test script source for reproducing this problem: #!/bin/bash mdadm --create -l faulty /dev/md0 -n1 /dev/sda parted /dev/md0 --script mklabel msdos parted /dev/md0 --script mkpart primary 1 100 mkfs -t xfs -f -l lazy-count=0 /dev/md0p1 mdadm -G /dev/md0 -l faulty --layout=rt40 mkdir /mnt/test while true; do mount -t xfs -o defaults,usrquota,grpquota,nouuid,noatime,nodiratime /dev/md0p1 /mnt/test sleep 1 umount /dev/md0p1 done And a call trace: [ 994.403980] XFS (md0p1): Mounting Filesystem [ 994.439392] XFS (md0p1): Ending clean mount [ 994.439805] XFS (md0p1): Quotacheck needed: Please wait. [ 994.453523] XFS (md0p1): Quotacheck: Done. [ 995.494715] XFS (md0p1): Mounting Filesystem [ 995.495310] XFS (md0p1): metadata I/O error: block 0x1905f ("xlog_bread_noalign") error 5 buf count 512 [ 995.557848] XFS (md0p1): empty log check failed [ 995.557851] XFS (md0p1): log mount/recovery failed: error 5 [ 995.558284] XFS (md0p1): log mount failed [ 996.585465] XFS (md0p1): Mounting Filesystem [ 996.604007] XFS (md0p1): Ending clean mount [ 997.633585] XFS (md0p1): last sector read failed [ 998.642557] XFS (md0p1): Mounting Filesystem [ 998.660927] XFS (md0p1): metadata I/O error: block 0x60 ("xfs_trans_read_buf") error 5 buf count 4096 [ 998.723018] XFS (md0p1): Ending clean mount [ 999.751782] XFS (md0p1): Mounting Filesystem [ 999.779665] XFS (md0p1): metadata I/O error: block 0x60 ("xfs_trans_read_buf") error 5 buf count 4096 [ 999.842094] XFS (md0p1): Ending clean mount [ 1000.867508] XFS (md0p1): Mounting Filesystem [ 1000.895354] XFS (md0p1): metadata I/O error: block 0x40 ("xfs_trans_read_buf") error 5 buf count 8192 [ 1000.958168] XFS (md0p1): xfs_imap_to_bp: xfs_trans_read_buf() returned error 5. [ 1000.958172] XFS (md0p1): failed to read root inode [ 1000.958240] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 [ 1001.022557] ------------[ cut here ]------------ [ 1001.054458] kernel BUG at fs/xfs/xfs_message.c:101! [ 1001.054461] invalid opcode: 0000 [#1] SMP [ 1001.054464] CPU 1 [ 1001.054465] Modules linked in: iscsi_scst(O) scst_vdisk(O) scst(O) libcrc32c ext2 drbd(O) iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi bonding sg e1000e(O) usbserial uhci_hcd ohci_hcd ehci_hcd aufs [last unloaded: ohci_hcd] [ 1001.054477] [ 1001.054479] Pid: 18813, comm: mount Tainted: G O 3.2.42-oe64-00000-gd572330 #1 Supermicro C2SBC-Q/C2SBC-Q [ 1001.054482] RIP: 0010:[] [] assfail+0x1d/0x30 [ 1001.054488] RSP: 0000:ffff880112849c68 EFLAGS: 00010296 [ 1001.054490] RAX: 0000000000000071 RBX: ffff880108d77840 RCX: ffff88013b006c00 [ 1001.054491] RDX: 00000000000000c2 RSI: 0000000000000000 RDI: ffffffff81ded518 [ 1001.054493] RBP: ffff880112849c68 R08: ffff88013b006c00 R09: ffff88013fd120c0 [ 1001.054494] R10: 0000000000000000 R11: 0000000000000002 R12: ffff88013988d000 [ 1001.054496] R13: 0000000000000000 R14: ffff88013988d1e8 R15: ffff88013988d1f8 [ 1001.054498] FS: 0000000000000000(0000) GS:ffff88013fd00000(0063) knlGS:00000000f75386c0 [ 1001.054499] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b [ 1001.054501] CR2: 00000000f75f5540 CR3: 0000000135d33000 CR4: 00000000000406e0 [ 1001.054502] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1001.054504] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 1001.054506] Process mount (pid: 18813, threadinfo ffff880112848000, task ffff8801355cb410) [ 1001.054507] Stack: [ 1001.054508] ffff880112849ca8 ffffffff8134eb7a 0000000000000005 ffff88013988d000 [ 1001.054510] ffff88013988d018 0000000000000005 ffff88013988d000 0000000000000000 [ 1001.054513] ffff880112849cf8 ffffffff8135054d 0000000000000000 0000000000000000 [ 1001.054515] Call Trace: [ 1001.054519] [] xfs_free_perag+0x8a/0xc0 [ 1001.054521] [] xfs_mountfs+0x31d/0x700 [ 1001.054524] [] xfs_fs_fill_super+0x1cb/0x270 [ 1001.054527] [] mount_bdev+0x19a/0x1d0 [ 1001.054529] [] ? xfs_fs_write_inode+0x180/0x180 [ 1001.054533] [] ? selinux_sb_copy_data+0x156/0x1d0 [ 1001.054536] [] xfs_fs_mount+0x10/0x20 [ 1001.054538] [] mount_fs+0x41/0x180 [ 1001.054541] [] vfs_kern_mount+0x5e/0xc0 [ 1001.054543] [] do_kern_mount+0x4e/0x100 [ 1001.054545] [] do_mount+0x516/0x740 [ 1001.054548] [] ? __get_free_pages+0x9/0x40 [ 1001.054551] [] compat_sys_mount+0xa2/0x220 [ 1001.054554] [] ia32_do_call+0x13/0x13 [ 1001.054555] Code: 66 66 90 66 66 66 90 66 66 66 90 66 66 90 55 41 89 d0 48 89 f1 48 89 fa 48 c7 c6 b8 bf 9b 81 31 ff 48 89 e5 31 c0 e8 53 ff ff ff <0f> 0b eb fe 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 55 31 [ 1001.054571] RIP [] assfail+0x1d/0x30 [ 1001.054573] RSP [ 1001.054575] ---[ end trace 9fa869a5d6931100 ]--- I also reproduced this call trace on kernel 3.4.39 [ 486.338190] md: bind [ 486.342375] bio: create slab at 1 [ 486.342387] md0: detected capacity change from 0 to 500107771904 [ 486.354250] md0: p1 [ 486.709863] XFS (md0p1): Mounting Filesystem [ 486.738741] XFS (md0p1): Ending clean mount [ 486.739136] XFS (md0p1): Quotacheck needed: Please wait. [ 486.767727] XFS (md0p1): Quotacheck: Done. [ 487.808918] XFS (md0p1): Mounting Filesystem [ 487.809500] XFS (md0p1): metadata I/O error: block 0x1905f ("xlog_bread_noalign") error 5 buf count 512 [ 487.871589] XFS (md0p1): empty log check failed [ 487.871591] XFS (md0p1): log mount/recovery failed: error 5 [ 487.871667] XFS (md0p1): log mount failed [ 488.899680] XFS (md0p1): Mounting Filesystem [ 488.917484] XFS (md0p1): Ending clean mount [ 489.943430] XFS (md0p1): last sector read failed [ 490.957577] XFS (md0p1): Mounting Filesystem [ 490.975022] XFS (md0p1): metadata I/O error: block 0x60 ("xfs_trans_read_buf") error 5 buf count 4096 [ 491.037209] XFS (md0p1): Ending clean mount [ 494.478260] Buffer I/O error on device md0p1, logical block 23 [ 494.479204] Buffer I/O error on device md0p1, logical block 63 [ 494.479540] Buffer I/O error on device md0p1, logical block 15 [ 498.577283] XFS (md0p1): Mounting Filesystem [ 498.604225] XFS (md0p1): metadata I/O error: block 0x60 ("xfs_trans_read_buf") error 5 buf count 4096 [ 498.666825] XFS (md0p1): Ending clean mount [ 499.693310] XFS (md0p1): Mounting Filesystem [ 499.719749] XFS (md0p1): metadata I/O error: block 0x40 ("xfs_trans_read_buf") error 5 buf count 8192 [ 499.782405] XFS (md0p1): xfs_imap_to_bp: xfs_trans_read_buf() returned error 5. [ 499.782409] XFS (md0p1): failed to read root inode [ 499.782482] XFS: Assertion failed: atomic_read(&pag->pag_ref) == 0, file: fs/xfs/xfs_mount.c, line: 272 [ 499.846615] ------------[ cut here ]------------ [ 499.878410] kernel BUG at fs/xfs/xfs_message.c:101! [ 499.878412] invalid opcode: 0000 [#1] SMP [ 499.878415] CPU 0 [ 499.878416] Modules linked in: iscsi_scst(O) scst_vdisk(O) scst(O) libcrc32c ext2 drbd(O) iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi bonding sg e1000e(O) usbserial uhci_hcd ohci_hcd ehci_hcd aufs [last unloaded: ohci_hcd] [ 499.878426] [ 499.878428] Pid: 17632, comm: mount Tainted: G O 3.4.39-oe64-00000-g8b0d7e5 #9 Supermicro C2SBC-Q/C2SBC-Q [ 499.878431] RIP: 0010:[] [] assfail+0x1d/0x30 [ 499.878437] RSP: 0000:ffff880135381c78 EFLAGS: 00010296 [ 499.878439] RAX: 0000000000000071 RBX: ffff88013a5c0540 RCX: ffff88013b006c00 [ 499.878440] RDX: 00000000000000eb RSI: 0000000000000046 RDI: 0000000000000000 [ 499.878442] RBP: ffff880135381c78 R08: ffff88013b006c00 R09: ffff88013fc12440 [ 499.878443] R10: ffff88013fd124e8 R11: 0000000000000000 R12: ffff880139736000 [ 499.878445] R13: 0000000000000000 R14: ffff8801397361e8 R15: ffff8801397361f8 [ 499.878446] FS: 0000000000000000(0000) GS:ffff88013fc00000(0063) knlGS:00000000f75146c0 [ 499.878448] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b [ 499.878449] CR2: 00000000f7751181 CR3: 00000001359b4000 CR4: 00000000000407f0 [ 499.878451] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 499.878452] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 499.878454] Process mount (pid: 17632, threadinfo ffff880135380000, task ffff880135005120) [ 499.878455] Stack: [ 499.878456] ffff880135381cb8 ffffffff8134e68b 0000000000000005 ffff880139736000 [ 499.878458] ffff880139736018 0000000000000005 ffff880139736000 ffff8801352a9c00 [ 499.878461] ffff880135381d08 ffffffff8135008d 0000000000000000 0000000000000000 [ 499.878463] Call Trace: [ 499.878466] [] xfs_free_perag+0x8b/0xc0 [ 499.878469] [] xfs_mountfs+0x31d/0x700 [ 499.878471] [] xfs_fs_fill_super+0x1e0/0x280 [ 499.878474] [] mount_bdev+0x19b/0x1d0 [ 499.878476] [] ? xfs_fs_evict_inode+0x130/0x130 [ 499.878479] [] ? selinux_sb_copy_data+0x156/0x1d0 [ 499.878481] [] xfs_fs_mount+0x10/0x20 [ 499.878483] [] mount_fs+0x41/0x180 [ 499.878486] [] vfs_kern_mount+0x69/0xf0 [ 499.878488] [] do_kern_mount+0x4e/0x100 [ 499.878490] [] do_mount+0x51a/0x760 [ 499.878492] [] ? __get_free_pages+0x9/0x40 [ 499.878496] [] compat_sys_mount+0xa2/0x220 [ 499.878498] [] ? sys_rt_sigprocmask+0xbf/0xd0 [ 499.878501] [] ia32_do_call+0x13/0x13 [ 499.878502] Code: 66 66 90 66 66 66 90 66 66 66 90 66 66 90 55 41 89 d0 48 89 f1 48 89 fa 48 c7 c6 d0 cb 9b 81 31 ff 48 89 e5 31 c0 e8 53 ff ff ff <0f> 0b eb fe 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 55 31 [ 499.878518] RIP [] assfail+0x1d/0x30 [ 499.878520] RSP [ 499.878522] ---[ end trace 37e88031b68311f3 ]--- -- Best regards Arkadiusz Bubała From qcai@redhat.com Mon May 27 23:31:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BFC6829DF8 for ; Mon, 27 May 2013 23:31:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9D8468F8039 for ; Mon, 27 May 2013 21:31:26 -0700 (PDT) X-ASG-Debug-ID: 1369715484-04cb6c47401f5c60001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 1CTbcQK9Ta5OvL8b for ; Mon, 27 May 2013 21:31:24 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4S4VKrX003520; Tue, 28 May 2013 00:31:20 -0400 Date: Tue, 28 May 2013 00:31:20 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: xfs@oss.sgi.com, stable@vger.kernel.org Message-ID: <861701102.7163229.1369715480182.JavaMail.root@redhat.com> In-Reply-To: <20130527053608.GS29466@dastard> References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> Subject: Re: 3.9.3: Oops running xfstests MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: mipHCJksRL9Wa209E9PYwvilIYoCTQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1369715484 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132236 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Below is more information, > What type of CPUs? That's why we ask for /proc/cpuinfo.... + lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 2 Socket(s): 4 NUMA node(s): 4 Vendor ID: AuthenticAMD CPU family: 15 Model: 65 Model name: Dual-Core AMD Opteron(tm) Processor 8218 Stepping: 2 CPU MHz: 2599.855 BogoMIPS: 5199.28 Virtualization: AMD-V L1d cache: 64K L1i cache: 64K L2 cache: 1024K NUMA node0 CPU(s): 0,4 NUMA node1 CPU(s): 1,5 NUMA node2 CPU(s): 2,6 NUMA node3 CPU(s): 3,7 or + lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 42 Model name: Intel(R) Xeon(R) CPU E31220 @ 3.10GHz Stepping: 7 CPU MHz: 3092.721 BogoMIPS: 6185.44 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0-3 > > > - contents of /proc/mounts: nothing special. Just Fedora-19 autopart > > What are the contents? + cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=8201464k,nr_inodes=2050366,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs rw,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 /dev/mapper/rhel_ibm--ls41--02-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=32,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 tmpfs /tmp tmpfs rw,seclabel 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/mapper/rhel_ibm--ls41--02-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 or + cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=4054696k,nr_inodes=1013674,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs rw,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 /dev/mapper/rhel_storageqe--13-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=32,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 tmpfs /tmp tmpfs rw,seclabel 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 /dev/mapper/rhel_storageqe--13-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 > > > - contents of /proc/partitions: nothing special. Just Fedora-19 autopart > > Contents, please. + cat /proc/partitions major minor #blocks name 8 16 71687000 sdb 8 17 71685120 sdb1 8 0 71687000 sda 8 1 512000 sda1 8 2 71173120 sda2 253 0 8257536 dm-0 253 1 52428800 dm-1 253 2 82169856 dm-2 or + cat /proc/partitions major minor #blocks name 8 0 71652960 sda 8 1 512000 sda1 8 2 71139328 sda2 253 0 8142848 dm-0 253 1 42328064 dm-1 253 2 20664320 dm-2 > But what I see here is that there are partitions and LVM, and > everything is using ext4. That's not useful to me. What I'm after is > the output of pvdisplay, vgdisplay and lvdisplay. That's not very > hard... + pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name rhel_ibm-ls41-02 PV Size 67.88 GiB / not usable 0 Allocatable yes (but full) PE Size 4.00 MiB Total PE 17376 Free PE 0 Allocated PE 17376 PV UUID Y2xyqY-0Bcf-4NRi-9fmD-fYCm-XD8a-wtvwX6 --- Physical volume --- PV Name /dev/sdb1 VG Name rhel_ibm-ls41-02 PV Size 68.36 GiB / not usable 0 Allocatable yes (but full) PE Size 4.00 MiB Total PE 17501 Free PE 0 Allocated PE 17501 PV UUID RcT6SU-EP1j-Ig3S-pBD0-21p6-C3W1-ersGf9 + echo + vgdisplay --- Volume group --- VG Name rhel_ibm-ls41-02 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 2 Act PV 2 VG Size 136.24 GiB PE Size 4.00 MiB Total PE 34877 Alloc PE / Size 34877 / 136.24 GiB Free PE / Size 0 / 0 VG UUID vciDnL-1VvD-Xxx1-caV8-06EH-cZLQ-f9X0vI + echo + lvdisplay --- Logical volume --- LV Path /dev/rhel_ibm-ls41-02/swap LV Name swap VG Name rhel_ibm-ls41-02 LV UUID EgGvG9-XKJ0-sVBq-iQGQ-3jAc-rhbX-ZtCkPK LV Write Access read/write LV Status available # open 2 LV Size 7.88 GiB Current LE 2016 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/rhel_ibm-ls41-02/home LV Name home VG Name rhel_ibm-ls41-02 LV UUID RFonzm-OXSb-rVKo-zZRi-YMri-fBC8-GdyRkq LV Write Access read/write LV Status available # open 1 LV Size 78.36 GiB Current LE 20061 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Path /dev/rhel_ibm-ls41-02/root LV Name root VG Name rhel_ibm-ls41-02 LV UUID AXEjh5-BakC-UwOu-AKjW-7JwD-dsoW-u57ffj LV Write Access read/write LV Status available # open 1 LV Size 50.00 GiB Current LE 12800 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 or + pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name rhel_storageqe-13 PV Size 67.84 GiB / not usable 4.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 17367 Free PE 0 Allocated PE 17367 PV UUID qJGFib-CawR-Dlhz-gXew-aqt4-erPL-LLtCeE + echo + vgdisplay --- Volume group --- VG Name rhel_storageqe-13 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 67.84 GiB PE Size 4.00 MiB Total PE 17367 Alloc PE / Size 17367 / 67.84 GiB Free PE / Size 0 / 0 VG UUID 21QGVb-IqM8-DBto-Q1kl-23ql-y28i-ouwb0e + echo + lvdisplay --- Logical volume --- LV Path /dev/rhel_storageqe-13/swap LV Name swap VG Name rhel_storageqe-13 LV UUID jBYJTC-BPds-lfo8-52rJ-MEXR-Chn5-tSChwg LV Write Access read/write LV Status available # open 2 LV Size 7.77 GiB Current LE 1988 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/rhel_storageqe-13/home LV Name home VG Name rhel_storageqe-13 LV UUID 3lJRDR-rnNO-7BBf-3Iyy-32ho-Sbnb-qP3Ut1 LV Write Access read/write LV Status available # open 1 LV Size 19.71 GiB Current LE 5045 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Path /dev/rhel_storageqe-13/root LV Name root VG Name rhel_storageqe-13 LV UUID I2xPqj-Ew0z-NePE-4d7w-nfev-5DMo-fRuFUL LV Write Access read/write LV Status available # open 1 LV Size 40.37 GiB Current LE 10334 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 I never have had a chance to reproduce this just by running xfstests alone, so it looks like there needs to be some fixture of the loads here. I'll try to see if I can craft out a simpler reproducer... CAI Qian From jmendiola@oefa.gob.pe Tue May 28 01:27:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.0 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0E8047CBF for ; Tue, 28 May 2013 01:27:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D417F304043 for ; Mon, 27 May 2013 23:27:16 -0700 (PDT) X-ASG-Debug-ID: 1369722434-04bdf07817208900001-NocioJ Received: from mail.oefa.gob.pe (mail.oefa.gob.pe [190.116.34.227]) by cuda.sgi.com with ESMTP id 7LBK5aBXyulqrYEn for ; Mon, 27 May 2013 23:27:14 -0700 (PDT) X-Barracuda-Envelope-From: jmendiola@oefa.gob.pe X-Barracuda-Apparent-Source-IP: 190.116.34.227 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.oefa.gob.pe (Postfix) with ESMTP id D5ED31FB019E; Tue, 28 May 2013 01:35:53 -0500 (PET) X-Virus-Scanned: amavisd-new at oefa.gob.pe Received: from mail.oefa.gob.pe ([127.0.0.1]) by localhost (mail.oefa.gob.pe [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id PsU2u5Qgkpxo; Tue, 28 May 2013 01:35:49 -0500 (PET) Received: from mail.oefa.gob.pe (mail.oefa.gob.pe [10.0.0.2]) by mail.oefa.gob.pe (Postfix) with ESMTP id AD85B5FBC40F; Tue, 28 May 2013 01:35:48 -0500 (PET) Date: Tue, 28 May 2013 01:35:48 -0500 (PET) From: Major World Usa Reply-To: Major World Usa Message-ID: <2094534793.137079.1369722948689.JavaMail.root@oefa.gob.pe> Subject: Auction Sales on Used Cars MIME-Version: 1.0 X-ASG-Orig-Subj: Auction Sales on Used Cars Content-Type: multipart/alternative; boundary="----=_Part_137078_2090238117.1369722948688" X-Originating-IP: [41.71.157.245] X-Mailer: Zimbra 7.2.1_GA_2790 (zclient/7.2.1_GA_2790) To: undisclosed-recipients:; X-Barracuda-Connect: mail.oefa.gob.pe[190.116.34.227] X-Barracuda-Start-Time: 1369722434 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620a, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC0_SA620a Custom Rule SA620a ------=_Part_137078_2090238117.1369722948688 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Dear Sir/Madam We are an American used car export company selling Japanese used cars and foreign cars. We export Japanese used cars to various countries in the world. We have extensive stocks of Japanese used cars and american cars which satisfy your needs. We guarantee Good condition, Good price, Quick service. Right now we are giving discount prices on Toyota Land cruisers, Prado and Double Cabin Toyota Hilux pick- up We have thousands of units in stocks and you could be lucky to get 1 unit for yourself We are giving discount prices because it is our marketing strategy to attract more customers We want you to take an advantage of this opportunity. Sincerely yours, Denise Herman, Sales Team/General Manager Address: 43-40 Northern Blvd Long island city queens Ny 11101 USA www.majorworldchevrolet.com TEL:+1 212 359 1616,FAX:347 750 1524 ------=_Part_137078_2090238117.1369722948688 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable Dear Sir/Madam

We are = an American used car export company selling Japanese used cars and foreign = cars. We export Japanese used cars to various countries in the world. We ha= ve extensive stocks of Japanese used cars and american cars which satisfy y= our needs. We guarantee Good condition, Good price, Quick service.
Right= now we are giving discount prices on Toyota Land cruisers, Prado and Doubl= e Cabin Toyota Hilux pick- up

We have thousands of units in stocks a= nd you could be lucky to get 1 unit for yourself
We are giving discount = prices because it is our marketing strategy to attract more customers
W= e want you to take an advantage of this opportunity.

Sincerely yours= ,

Denise Herman,

Sales Team/General Manager
Address: 43-40= Northern Blvd Long island city queens Ny 11101 USA
www.majorworldchevro= let.com
TEL:+1 212 359 1616,FAX:347 750 1524 ------=_Part_137078_2090238117.1369722948688-- From david@fromorbit.com Tue May 28 03:37:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9265A7CBF for ; Tue, 28 May 2013 03:37:25 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7142F8F8049 for ; Tue, 28 May 2013 01:37:25 -0700 (PDT) X-ASG-Debug-ID: 1369730239-04cbb0049c206310001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id NiO9tApbkQApf0nV for ; Tue, 28 May 2013 01:37:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiUMAJVrpFF5La3j/2dsb2JhbABZgwi9HIUhBAGBBBd0giMBAQUnExwzCBgMJQ8FJQM0iAy8CBaNaoEkFoM+A5c6kUGDISo Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail06.adl6.internode.on.net with ESMTP; 28 May 2013 18:07:19 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhFPB-0002bk-9N for xfs@oss.sgi.com; Tue, 28 May 2013 18:37:17 +1000 Date: Tue, 28 May 2013 18:37:17 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 10/9] xfs: fix dir3 freespace block corruption Message-ID: <20130528083717.GU29466@dastard> X-ASG-Orig-Subj: [PATCH 10/9] xfs: fix dir3 freespace block corruption References: <1369636707-15150-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369730239 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132252 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When the directory freespace index grows to a second block (2017 4k data blocks in the directory), the initialisation of the second new block header goes wrong. The write verifier fires a corruption error indicating that the block number in the header is zero. This was being tripped by xfs/110. The problem is that the initialisation of the new block is done just fine in xfs_dir3_free_get_buf(), but the caller then users a dirv2 structure to zero on-disk header fields that xfs_dir3_free_get_buf() has already zeroed. These lined up with the block number in the dir v3 header format. While looking at this, I noticed that the struct xfs_dir3_free_hdr() had 4 bytes of padding in it that wasn't defined as padding or being zeroed by the initialisation. Add a pad field declaration and fully zero the on disk and in-core headers in xfs_dir3_free_get_buf() so that this is never an issue in the future. Note that this doesn't change the on-disk layout, just makes the 32 bits of padding in the layout explicit. Signed-off-by: Dave Chinner --- fs/xfs/xfs_dir2_format.h | 1 + fs/xfs/xfs_dir2_node.c | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_dir2_format.h b/fs/xfs/xfs_dir2_format.h index a3b1bd8..995f1f5 100644 --- a/fs/xfs/xfs_dir2_format.h +++ b/fs/xfs/xfs_dir2_format.h @@ -715,6 +715,7 @@ struct xfs_dir3_free_hdr { __be32 firstdb; /* db of first entry */ __be32 nvalid; /* count of valid entries */ __be32 nused; /* count of used entries */ + __be32 pad; /* 64 bit alignment. */ }; struct xfs_dir3_free { diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c index 5246de4..2226a00 100644 --- a/fs/xfs/xfs_dir2_node.c +++ b/fs/xfs/xfs_dir2_node.c @@ -263,18 +263,19 @@ xfs_dir3_free_get_buf( * Initialize the new block to be empty, and remember * its first slot as our empty slot. */ - hdr.magic = XFS_DIR2_FREE_MAGIC; - hdr.firstdb = 0; - hdr.nused = 0; - hdr.nvalid = 0; + memset(bp->b_addr, 0, sizeof(struct xfs_dir3_free_hdr)); + memset(&hdr, 0, sizeof(hdr)); + if (xfs_sb_version_hascrc(&mp->m_sb)) { struct xfs_dir3_free_hdr *hdr3 = bp->b_addr; hdr.magic = XFS_DIR3_FREE_MAGIC; + hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); hdr3->hdr.owner = cpu_to_be64(dp->i_ino); uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); - } + } else + hdr.magic = XFS_DIR2_FREE_MAGIC; xfs_dir3_free_hdr_to_disk(bp->b_addr, &hdr); *bpp = bp; return 0; @@ -1921,8 +1922,6 @@ xfs_dir2_node_addname_int( */ freehdr.firstdb = (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) * xfs_dir3_free_max_bests(mp); - free->hdr.nvalid = 0; - free->hdr.nused = 0; } else { free = fbp->b_addr; bests = xfs_dir3_free_bests_p(mp, free); From willsu@builderschoicetools.com Tue May 28 04:05:19 2013 Return-Path: X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 237CC7F37 for ; Tue, 28 May 2013 04:05:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 08F738F8040 for ; Tue, 28 May 2013 02:05:14 -0700 (PDT) X-ASG-Debug-ID: 1369731900-04cbb0049c2075d0001-NocioJ Received: from m128-12p.163.com (mproxyjp2.163.com [176.32.86.149]) by cuda.sgi.com with ESMTP id 0tOXQnR6sFbvjU4L for ; Tue, 28 May 2013 02:05:01 -0700 (PDT) X-Barracuda-Envelope-From: willsu@builderschoicetools.com X-Barracuda-Apparent-Source-IP: 176.32.86.149 Received: from willsu$builderschoicetools.com ( [115.204.222.160] ) by ajax-webmail-wmsvr1 (Coremail) ; Tue, 28 May 2013 16:50:10 +0800 (CST) X-Originating-IP: [115.204.222.160] Date: Tue, 28 May 2013 16:50:10 +0800 (CST) From: Will To: xfs@oss.sgi.com Subject: caulking gun&foam gun/Builders Choice Tools/Will X-Priority: 3 X-ASG-Orig-Subj: caulking gun&foam gun/Builders Choice Tools/Will X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 20130424(22035.5339.5325) Copyright (c) 2002-2013 www.mailtech.cn 163-hosting Disposition-Notification-To: willsu@builderschoicetools.com Content-Type: multipart/mixed; boundary="----=_Part_101527_666677075.1369731010913" MIME-Version: 1.0 Message-ID: <33155ba6.9b77.13eea549162.Coremail.willsu@builderschoicetools.com> X-CM-TRANSID:yWR4CkBZwkDDb6RRA1YcAA--.1218W X-CM-SenderInfo: xzloz23x6e3xxogh225fkrxuphwr0z3vof0z/1tbiARUrXk3HgkeB OgATsG X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== X-Barracuda-Connect: mproxyjp2.163.com[176.32.86.149] X-Barracuda-Start-Time: 1369731900 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 ------=_Part_101527_666677075.1369731010913 Content-Type: multipart/alternative; boundary="----=_Part_101529_1828057806.1369731010913" ------=_Part_101529_1828057806.1369731010913 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Dear friend, We are the professional supplier of caulking guns and other tools from China. We want to introduce our quality products to you. Any need pls feel free to tell me. Our product line: air caulking gun manual caulking gun foam gun glue gun&glue stick hand saw paint mixer plaster trowel tool box and so on. OEM/ODM is also welcomed. Our company can also help you search the products or make the products as your demand. Hope to hear from you soon. Best Regards, Will Builders Choice Tools Limited www.builderschoicetools.com Mobile: 86-13429626426 Phone:86-15068189662 Skype:bctools1 Msn: bctools1@hotmail.com Gmail:bctoolswill@gmail.com Yahoo messenger:bctoolswill@yahoo.com Email:will@builderschoicetools.com Save a tree...please don't print this e-mail unless you really need to ------=_Part_101529_1828057806.1369731010913 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
Dear friend,
 
We are the professional supplier of caulking guns and other tools from China. We want to introduce our quality products to you. Any need pls feel free to tell me.
 
Our product line:
air caulking gun
manual caulking gun
foam gun
glue gun&glue stick
hand saw
paint mixer
plaster trowel
tool box and so on.
 
OEM/ODM is also welcomed.
 
Our company can also help you search the products or make the products as your demand.
 
Hope to hear from you soon.

Best Regards,
Will
Builders Choice Tools Limited
Mobile: 86-13429626426
Phone:86-15068189662
Skype:bctools1
Yahoo messenger:bctoolswill@yahoo.com


Save a tree...please don't print this e-mail unless you really need to

------=_Part_101529_1828057806.1369731010913-- ------=_Part_101527_666677075.1369731010913 Content-Type: image/jpeg; name="product alert from Will-May 21st.JPG" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="product alert from Will-May 21st.JPG" /9j/4AAQSkZJRgABAQEAYABgAAD/7TYQUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABBnn3mBjEc8 QV6TqczQYqm2OEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAA AAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAA AAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgAB AGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0A AAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA//////// /////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///////// ////////////////////A+gAADhCSU0EAAAAAAAAAgAJOEJJTQQCAAAAAAAUAAAAAAAAAAAAAAAA AAAAAAAAAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0E GgAAAAADPwAAAAYAAAAAAAAAAAAABdwAAA+gAAAABWcqaAeYmAAtADEAAAABAAAAAAAAAAAAAAAA AAAAAAAAAAEAAAAAAAAAAAAAD6AAAAXcAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA AAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAXcAAAAAFJnaHRsb25n AAAPoAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURs b25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4A AAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91 bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAA AAAAAEJ0b21sb25nAAAF3AAAAABSZ2h0bG9uZwAAD6AAAAADdXJsVEVYVAAAAAEAAAAAAABudWxs VEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxU ZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAP RVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0 QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUA AAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90 dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBBEAAAAAAAEBADhC SU0EFAAAAAAABAAAAAo4QklNBAwAAAAAL/QAAAABAAABAAAAAGAAAAMAAAEgAAAAL9gAGAAB/9j/ 4AAQSkZJRgABAgEASABIAAD/7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJ CAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDP/AABEIAGABAAMBIgACEQEDEQH/3QAEABD/xAE/AAABBQEBAQEBAQAAAAAAAAAD AAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwz AQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXC o3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3 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 MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAXcD6ADASIAAhEBAxEB/8QAHwAAAQUBAQEB AQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh ByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAEC AwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAa+AjZ 6YNecx3dpLNerHuyjMcAcZr0WXHltkcYNedIkYeZoU8seYxbcMZAo8g9DK1+4sLzRobLUZxbc5KD qRWBPqugNaw6XbQSStEMRqR39a2NSl0PVtQ+1XkLzzp8qhBgDFVb69sbfRr2eHT0t5YxtWQrzRd7 Dsjj76afVvFNjBOCjRsqtgcKK9QNlbXGooix+ZHb4UNnjjvXMeGNRWXw1fXtxZReZGh2TEfM341N 4Ivr54Lqe4ObdFZgScnNUIy79v7T+IYCJ5iQsFPsKpePpTeeJVtYEdzCowFGR9KveDphd+K7m8MW RuYk56VEviSaPV9Q8myRsyH9+y5yKNgOZhgWa7O+QrIo+aMdqlLTxX0QVz5PqKsCezub6a7gIExB EvpmoEIgR9xJhbqD1Wq5raoTXRnSWeoW97lYSSU4NWiBWHoEcFoJMyD5z8p9a3iK9bDzc6abPOqw UZWQ3FGKXvSjkgdM9a2bMzRt7e8KxYkAXeuF9eas3lrp1x4lQz3DeerALGPUUyytCLm2YXO6QNnb ntU1q2nzeIXbyWe5Lk7z0BrwajvNtHrQ0ihovbxvEnlR2v7kPhnx2rLk8PNd+MXvZdWSOMyZSAHm tjTm1STWneRStshbqMZFYmm6Po0vimS5OpvJdySErEG+6aykXEytfudQXXLmzkgDJuA84jqKoapb 6i+pzxWpaKzVArSA8EYq7qVzqn9sy2t1kwRzAByP4c+tU9egvm1W5Ad4tN+7uDcFcdRUI6b6GDLb pY2Jggm+0MGBLiug0HzmZw0Z8ryycn1rAkjt7W2WCwkeZA3+sI5NdBoouT5rlT5AjPGa6o/CcT+I zdOFy1+UtgS/m5z6DNb/AMQTIPEGn7Bki2AbHrWHpcVxNeqlvuGZc5zjvW549Ev/AAkVmIxkrbgH 60PdCS0ZBJoWoW/hi61CQqFGCq5yTWfp41WWz3SQ7YymeT2rqpILq2+Hl+J33SsQUw2cVzOnwas9 hG8rcbMnc2P0qJO7dyklYxH5w3Tk8Vp6AR9tlA5O3rWZI275v9o8Vo+HyDfvs4BWt8PpNGVb4GdD 7UlPxQRXtHmoZSYp9JigY3FGKdikoJY3FBBp2OaKYDMYPSkxzTyKMUgH2F09prdiAcRysVatLWXu Le+kWKYKCeFA5rn75zDHDOOsUytn8a6PxBdy2/kXNvHGfNQEs4zXi46Fqyt1PSw0r07GdJcG4aMR C5bA/ecd6wbrwpr19dTyJKUtn+4GNaEmu3+/yxMFJ6hErK1f/hJbyVBYXcvlbfn+tctrHQe/eCLO Sw8HWFtMwaREwSO/NbYHpWD4DhuYPBWnR3blpxGd7HqTmt8VSIaDFBooNO4uUB6UtAxiikOwUvSm iloGFA60UmaAHd6Q0UGgAooFFAAaKD1ozQAyZd1vKvqhA/Kvm7VLd01G6VmAIkI5NfSo9Pb86+df FcIHim/Zo1ixIcLnr+Fb4ebi3YxrRTRR0jSH1fUo7KGRWbO6THZa3/G2rxwCPRrJQYkQCQ5/Sruk wweD/DUmpT7Re3Y445A9K4J3immklcPLLIxYljWzm6ju+hiopbEZZ5Rt3E9gkY4pht2QgsyxA9Qv Jq8qS+X8sexcdAMVHLAfspcMFY9aUq9OHXU1jhqk1e2nmeleDJ5dB+H19duMJO22D1Yms2xjZIfM f78h3NR56zaDo+n2zk20Y3yZ7tU/+7xXFJ8zudMY2VjG8T4Nlaqe868fjW0gAx/KsPxFE8p05EBI 88Fj6CrWoX81uGNuFKjjcaaTtcFq7F29lSC2ZpWCA+pqpFLFPHG0bZjA4PrXMQRXmuzs88rG3Rvm Pb6CuhKJC6xxAKirwtZU5ym72sjorUoUkknd/gWNwH40oIIyeKiZxtAJGO9PTnG3pXQcpZwNinGT Sorb8A8t1qN7iG2TfM+CP4ayLvWTIQIAVT9ahsZuXFzHaoSXBfsorHu9ZkPCcY/hHWsmW835JY57 45NQea82fLGxe7N1qHJFJXLjzSv80pCKecd6py3UiKfKTGP4j1qMuI13M5Zu2afFHPcnEUbc9yKz cnLYuyW5QYyzsS5LE809QWbG07uhxW9HoqwoJLyZYV6/McVVudf0PTAVt4zcyjqccZpqk95MPafy oqx2VzMcRxn3NLNYfZlL3MqIB2JrKvPFupXeVgVbdD/dHNZLR3d2xaeR5Cf7xotBbDSkzWn1S0hO 2LMh/Ss+61i7ljIjwi+gFTW2kSOMhGI+nFXG0+GCM+Y6KfQcmpu3sitFuz6k8OMW8OaczdTbpn/v kVqVm6AANAsAOnkJ/IVpV0I5gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACik5ozQAtFJk+ lITzjFFwHUVWub22s0L3NxFCo5zIwWuevPiH4dtMhb03Lj+G3Qv+vSs51YQ+J2Got7HVUma85uvi ovIstHmf0aZwv6DNZM/xJ8Qyj91b2NsD0JVnP865ZZhQj1NFRmz1zNJmvEp/GvimUEHUhGD08uFR /SqbeJvEjHJ1q7/BgP5CsXmlFFKhI95z7UZr5+fX/EJPza1f49pTSDxF4iRTt1m+GfWY0f2pT7D+ ry7n0Fn2pc18/p4t8Tp01m6/4EwP8xVqL4g+Kof+X9X9nhU/0q1mVJidCR7rnNOFeLwfFTxBCQJr axn/AOAsp/Q1r2nxeZiBdaI/u0MwP6HFbQxtKWzIdKSPUaK4yz+Jvh25IEss1q3/AE1iOPzGRXRW eu6ZqH/Hpf202cYCyDP5V0KpF7MhxaNGim7uaXNVcQtFJmlpgFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RSUALRSZqKS4iiHzOBUuSjuCTexNSZrOk1VFOFGfrVGXVJGzh8ewrkqY6lDqbxw85dDdaRVGWYD6 1C97CvG7J9q5x71mPLE/jUDXZPGa8+pnCXwo6I4LudE+qRjoKgfVm524FYBuCe9MM5Jrhnm9R7M2 WDguhttqch/jxUTX8h/5aN+dZBmNN81q55ZjUe7NVh4roapvGJ5c/nQbsj+I1k+ax70nmNmsnjp9 ylRia/2v/apRdn+8fzrI8w0vmHjmhY2fcfsUbC3n+2akW9bs5/OsQS9acJT2q1j5rqS6ETeXUJB/ Hmpl1Ju+DXPib3p4mPY10QzOa6mTw0X0OkXUFPVfyqZb2Fh97H1rmFuGHepVuTxXZTzZ9TKWEXQ6 hZFboQfpTq5xLsgggkVaj1B1HLZHvXfTzGEtznlhZLY2qKox6gjfeGPpVpJUcfKwNdsK0J7MwlCU d0SUUmaO9aki0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFADX6HPTFec3EtxHLfzxW32pQ5VUXtXosgzG2emDXnE9nqtvaytpM6Ro8zFzIeetCAzli1dE MsemxW4wW5HIrjPElzdGw8ydgUuXx5Y/nXU38Oox2kks+qh5FH3Q1cdfwrLqlrbJKZlbDMc/xelN bgbM0gsvAKW6LsMj7Rx1FXNPQ6X4Du5twIlHy496peM5GWPTLFVI2LllH1qfxUf7P8H2lnG2fMbc BntTF5h4QgWx8O6hqO4AGNs/Wseyub+10OR5rVUtGJbfjlga19slh8OmBOXunCoPesTUF1PSdEj+ 1Si5BAHlKcgCi2ozItEhEE8sSEQyHgHrSRGcsUVRJH/cPXFPBP2AEDbvOcf3ahhtxJIWhudtwo6Z 4NNIVy5bhFdMZ+z9HU9UNdHZy+YhUSeYB91h6VyMdyyXLB1wzDa69mrofDlpJb20zucozfJzXThr qpZGNazhdmtj2pyqGZQxwD1NGKfGE3jfnZ3xXpyfus4I7o1NPhtftcRhlzIgLN7jFSaTexT6hOkN qFIViZPQ07Tns2kkkt4yHiiOfeixu1jsLm5nC21uw2bsYOa+fk7ts9iOyGaPBqS309xdS4gVW+Ut zj1xWDoFl4YOsTNb3byXjljuJ4U1uaQbJmvGhvjcEREPzwAapaPpGhwRXCW1vtkkQ/OeuTUt3Gjm 5Xv4r2VNQDyRRTZTPdf61QvrZ7uS5u7uUxad0Zt/IH0q5aJfHVYE1DzSI5iqBv7vaqWoaKfPupdW lEFo5I+V8k/hULVnR0ZkukUdpFFYsZIFf5XPVhXRaMlwVmZhshKYGDWE8SJb28dov7hGwvuK6PSR NsnBdURo8cdq6V8Bxv4ibRvC8UdzbtLrEXmSPlY0bnr0qHxvceZ4sVAMeRGEPPU1e8P6BpdlqNrO +orLc+ZuCZzzWF4wleXxrM5UcHkVEZNyLaSidTJaXEHw7v8AfIGd8MhU5xXL6dZ6qbJHkZANuTub tVvT727m8M6pabz5RGVX0NVNLsNSNnG8sigbf4m5oas2JNWMOfJboM7jkVo6D/yFCBx8vSqE5yze u85q9oRP9sLuGPlwPcVvQ+NGVX4WdQVwabipMHJzSba9s8voMxRT8Um2gdiPBoxUmKQjFAhuKMU7 FJigBhFGKfikxQBU1CPfYTAdhu/Kt+eWN/DlldmETFYwMMeBWU6B4pE/vKRV7RPLuvCXkybiIpCp A6nmvLzGPwyO7BvdFW21VZLqOPybaAPxvIzim+K9Q1HSNKjuNNnjuHeTYyoo496Vm02OdohpzvNG PmBPSprq5NroF5qkWmxhbYZMTHJNef8AI61Y9U8CXFxdeDNOmuhiZ48sPxrfA4rn/AeoHVPBWnXp i8rzY87B25roBVCCkxTqQ0AGKMUtFADcUuKKWgBMUgFLQKADBoxxSF0VsM6g+hbmlJXaW3DaOrZ4 oAMcUYqAXtnsZ/tUBVepDjiqsWv6RPvEeo27FevzigDQIpHdYkaSRwqKMsx6AUyC5guk3W88co/2 GBry74zeMbfTtDk0G1umXUpwCwTsnfNCA2fE3xW8P6Lp0zWN0t5e4Ijjj5+b3ryfwVLqXjfxdNqe ohfsVu2+dvU9hXmcFvPcXUNrbgtPMwRccnnvXrniCa2+HHgGPRrSXOoXi5fbwST1Jq1oRLVWMDx9 41W+8SvZwxg2Vqdo2nvVLTtZinA8rax7o3WuGDED58ljyxPUmlV9rh1Yqw7ile+jLi3HY9RW/jun WLaY2zypqtdJiV44zuViAo965C11yRmRLjn+7IDXVaPcR3OpWJnP7sSguR3FYypKOqOqNduNmdst i+mrZ2r/AHvK3t+NWJpUt0Mkx2r6dzT/ABFqls+tNPaN5qbAqewrj9U1gQEtIxlmb7qDnmumFJJc 0zjlUcnaJoalqq4LyMI4l5ArNs5r3XXeO3QpbEYMrd/pVG206e81mzTVFIS4BZY89veu8gSOCERR IEReABxSnU5ttEEI216lJbWPTtMitIuQp5b1NRTYNx06Lj61auZEYBF+bnnFZt80is/lEbscVkmX qTu0cUW6VgF6nms648RRxjy7aM+gesO9kuoxvuXJTOB9aqwsxkPy7s9FFJ1OhXIzSMl3eyFuXOef anqTbSfvCPw5rU07w/f3lv5jyLaw/XGadM/hrRAy3N39qm7qnOTRZiujMJDSbo4fv9gKsQWUhlZp CAmOBVG78XmUGPS7FY1PAYjJrS0EXU2mtcXmS7P3pRjG422SRWtjarvnR5pOuAOKp3/iG5jPkWcK wD1xzXTGaONuVVvwrntanVLwNHAm5xjNJyeyGorqc3dpe3xLTSSSE+pqOHQpmIJAX61v2qO8gMjA A9hW9bwWwAOzcfU0KF9xufLsctb6AvBIaQ+iitSHRHXBSFE92610SgAfKAPoKUjNaqnEzdRsx10c N/rZS3sOBTm0+2hQlYVz6nmtRgOarT/dqrWFds9x0f8A5A9p2/cr/Kr1UtI/5BFp/wBcl/lV2oAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACkJAGSQB71h+Mbp7LwlqU0UjJIItqspwQSQOPzr5wudf1WZ2Mt/c vng5lJz9eaDOdTlPqssF6kD60zzothfzE2jqdwxXyg2t6jIux7y4YehkJxTP7TvNu03M2PTeaCPb rsfWIuIT0ljP/AhTPt1oH2faod2cY8wZr5OW9uFBAnlCnqA5waQ3UzNu81g3rk5/OgXt/I+s0u7e TdsnibaCx2uDgDvVSbXtIgUmXUrRcdcyrxXy5D4im0a3v5sysbi0mtvlboXUqCfocGqiTu8ERwfu jvQN1tL2Pq0+IdGVFc6rZ7G6N5y4P61HH4o0KVmVNXsyy9QZQK+VvOkBo8x/Tj0oJ9v5H1N/wlvh /ft/te0yf+mgofxb4ejYK2sWYJ6fvRz+NfLO+RiMZJoLyCgPbvsfU0nizQIs79XtBjsJAanj8Q6P JaC6TU7UwtnD+aBnHWvlISPjHOKqvdzDVoY97FBEflPQc0DVa59bJ4j0WRtqaraE4zxKMfnS/wDC Q6N5wi/tSz3ngDzl5/WvlQTODnJz60olZurAe1Avb+R9VSeIdGiBL6paDHX96Mir1vcQ3UCTwSpL E4yrocgj618jmaQAE9B0r3v4OzvP4KcMzN5d3Ioyegwp/qaC4VeZ2PQqKKKDYKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAoppPFQ3N3BaQNNcTJFGvVnOBUuSSuwJ+1RSzxQRNJNIsaKMlnOAK4fVviIuW i0e3Ex6efKCEH0HU1xV/d6jq8vmahdyTnsucIv0UcV5mIzWlS0jqzaFCUtWegap8RdJs2KWayX0o /wCeXCf99H+lcfqHjjxBqJZYpUsoj0WEfN+ZrLS0AH3QPwqVYAB0rxa+b1pv3XY6oUIIzpYJLqUy XMsk8h6tKxb+dSLaKqgBVFaAhxThF7V58sRKTu2aqKWxn+Ril8kelXzEKTyx6Vm6jHYoeSPSmmEA e1XzH7Uwx8dKPaBYoGEYpph9BV4xgDpTDGKtVAsUDCO4zUbQAmtDy+KjMY64rRVAsZ/kDqRTHTAw APYVfaOoWj5PFaxqtCsZ0nmHPOM9QKpvAd24ZDDoQcEVsNFUDw+3FbxryWzE4ofp/ivxHo+0WmrX ARf+Wcp8xfyNdhpXxlvIdqaxpiSr0Mtq20/UqeP1rhHh9qrPD7V3UsbOPUylSi+h7/o/j3w5re0W 2pRxzH/ljcfu3/Xr+BrpVbcAQQQe4r5Sltwwwyg/Wr+k+J/EHh5wdM1SVYl/5YSnfGR/unp+FejS x8ZfEYSoW2PqDvS15HoPxstnKQeIbJrV+huYMvHn3HUV6fp2p2eq2q3VhdxXMDDh4mDCu2NSMtjF xa3LtFJmlrQkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKQ0ALRTScDniqlxfJGCFIJqJ1IwV5FRi5aItswUZJxVOfUIo87Tk1lXOoN IcFvwrPluCe9eRiM0jFWgdlPCX+I059UZjgHA9qoSXRYkk1SebNQNLnqa8Stj5z3Z3QoRjsi21x7 1C07HoTVYsMZJ470zzh2Bb9BXnzrtm8YFnzT600uaqtMSeWVfYcmmbweuW+prF1S1AttKF6uKaJs 9Ax/CqplIHGB9BTTIT1Ymo9oVyIueaf7pH1NJ5jeqfnVPdSg0udj5C35hz95aXzePvL+ZqnmlDD2 o52HIWzLn+NaTzMniQflVXd6GjdS52HIWxJ/00GfpThI2fvIao7uaN2OaamHJc0BIf7oP0NKJcdV YfUZrPEhHTinLMwPDHFUqlieQ0BMDgBxn06VIJCB/Ws8Tk9QDUiSITwSp9q1jUJcLF9ZyO9SrP71 R5PQhqPMAPJK/WtY1ZLqZ8qNNLgjvVqK7xg5PHvWKsh/CpBKQevFddLFyj1M5UkzpodQbv8AMKvR XMcvQ8+hrk0uMdKtRXRyMk17GHzN7SOOphU9UdRmlrHt79hgE7hWjFPHKMq34GvZpYiFRaHFOlKG 5PRSUCtzMWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACisfxHfz6bpUk9vjzAO M14+fij4kEjriPgkdKxqV403ZnqYHKMRjYOdK1l3Z7xRXg//AAtDxJ6R/lS/8LQ8SZ6R/lWf1ymd 3+rON7x+893orwf/AIWj4k9I/wAqP+Fo+JfSP8qPrlMP9Wcb3j957xRXg/8AwtHxJ6R/lV21+KGr 7R5+zPehYumyZcNY2Kvp957XSZrzWw+KFv5i/bGULjk+9dtpev2GrxhraZTnpk1tCrCezPMxGXYn D61I6dzVzRmkorQ4hc0UmKMUALSUVm6vrVlotsZrqQKB2zSbSV2XCEqklGCu2aROBk1Vk1OyiOHu Y1Pu1eRa/wDEu/nnKaaV8gniuQutZv71i0sjAnriuSeLivhPo8Nw1WmlKq+X8z6E/wCEg0nP/H/B /wB9U9Nc0yThL2Fvo1fM5jYsT50mT71LbyzWrZjmc/U1n9dfY7XwtStpUf3H07Fcwz/6qRX+hqWv nex8ZaxprgwPn616N4a+IsN66W9+6rMxxmt6eKhLR6HlYzIMTh05x95fieh5pM01HWRA6MCpHBFO rpPBFooooAKKKKACiiigAzRSV5h4+8a6v4f1qO2sSnlkZ5HWs6lRU48zOvBYKpjKvsqe/meoUV4R /wALQ8SY+7H+VH/C0fEnpH+VY/XKZ6/+rON7x+893orwf/haHiT0j/Kl/wCFoeJPSP8AKj65TD/V nG91957vRXg//C0fEnon5Uf8LQ8Sekf5UfXKYf6s43uvvPeKK8H/AOFo+JPSP8qX/haPiT0T/vmj 65TD/VnG91957vRXg/8AwtDxJ6R/lU9n8TPEU95HG4TaWAPFH1umJ8NYxK91957jmiqthM09hBK/ 33UE1ZrpTPn5LlbTFooFFMQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRmkNFABmjN IcDqQKy9T8Q6fpKFrmdQB6Gk2luXCnOo+WCuzVqGW7t4WCySopPQE15nrPxP++NNKn0zXJWXiTU9 Z1mD7WxAMg6VzSxUU7I9yhw/iJwc6vupfee/ggjI6GlqK2/49ov90VLXUeC1ZhRRRQIKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAa/Kn6GvJfEFkLjU3ZdWEMIJDRq3evWnICMT0w c14pfP4YXVLuV5pJZWlOVUnAOaAKF7Z2MEcbNftKN/7xQeSKxtMtX1Dxf/omFgVvkBrXubzS1uDJ aW7OqRkEMPun1NQ+B4Q11d3Zk+6CwOOKaAh1vfqnjaKMP8kRCvVvxpIo1XT7FSCkKjOai8LD7Z4o nmk+aN3POM81DfoNV8dtlzsR9hA54piNbxWkQ0rSNLWYRRSneZCfu1y2uwzWEESWF0LpDxI5OcVv eLP7Pn8UW9lfTGO1t4hsA6k4rmddiRL+J7B2+ycAr3P1pdSiK5nSFYoScZXrVOEW8rPtYxTA8E96 mvZkN15bx52gbSO1NjmguIdksflzfwNVohlhD9pRoZ0KTqMrJ/eFbuiwzxRxokoeIctzyDWCs7Qo qXC7iv3D7VJcahLYXyS23EeBkVpTdppsiavFpHbDBOPWpIGjjnDSIWUdhWdp2pw6jAGiIEo+8ta1 nN5M2/yfMbsK9GpNOnzI4oRanZmrazxPDd3EMGyRUChfXmqmrpFdeFBDqkwtYpZPvYxVtbl5NMuZ 4ofLmLbcAVR8RRWVxoNlBrdwYkZiwPqa8KWp6xW8N2Wi6bZahJp07TptxKSa09LNjcW80cUflkIS rMe9UNDg0ay0G7fTt0sDPtk55NXUhgvNEvEt4TE8a5jIPJNHQOpzfh6e9fxSjakGBG8IHHXrisDU dFnCXU2szrFauxBw+T19K0/D99d2mpGTVBJJKYXVWYcqe1Y0ujSm1ebWZWitZ2OCX3E85qUjS27K shXy7WO1BMKcKT3HrXQ6XDIba4y6Kki45PSsCXBlgWEHykGBnjIrf02GSTS7rKrslGFbP3a6fsnN 9o0PDnh3SbPUbWQ6kktyXyqA55rnPFe7/hOLhsZAODXUeGvDWmadqVlKb6OW4zkIGyc1y3irf/wn Fy4XcM8+1RH4in8Jb04s+i6mF4cp8uKj03TNTNnE7zIPlydzdqfZbho2pqCNxT5SO1Q6ZpurNZws 7AAjJLN2qp79BR2Me45Lhuu881b0MsNYhB6Y4NV7gAl8n5g5+lTaLldbtzn5SePatKPxRM6nws7H +I/WjFSFfmI96MACvbPMI8UmKdijFMBhox607HNL+FAhhWm1LTcYoAYaKdijFADQBkVL4TOE1O0D bWWTeM9qZgZzSaBiHxTdwn/ltHke/FcOPjelfsdWEdp2JZ0sPtck9xfslw/DbR1FJG+n3EcsEUlx cDb86diKm1HTJLy9il2wQtCCMMeoqKC3ksd5S9tUZgQcHkivK92yO33ux6x4Okt5PClk1qhSHYQq ntg1tA1keEokh8MWaIQw2k5HfmtfFMYZoNGKDxQAZozQBmigBM0ppMUpoAPbvXl3xA+L9n4Zll0r SkF3qQGGfPyxn3r0jUZjbaVdzr96OFmH1xXxleT/AGi8vZ5CTLLKzZPfmmkI2bbX/EGt655s+q3A aQln2MQFFLf+MNdj8+xi1ac22cHLHJrnoL6WyYPCcMRg+4qF5dzs55J5qgLh1e/WNoUvpwrfeG88 1XF3LGMRzSgn0brVYHk+9GcMDnvVK1wOt8Pa9q3h2dbqz1CbzSOUZiVrJ1zVbvWdXmv79987/eb0 qzEhdEI6EZpul6LPrfiWDTEjYpK4MjAdF716WLoQp0k4oyhK7aZ2vws0GK0iuvFurRhbSFSLcvwM jvXGeJdQ1DxZrl1qUgAiTPlLngJXZ/E/XLXT9OtfCOlSEQxL+9Va8wE8gTYHYL0OD2ryy467kRx2 596Q4PJFPKgkBBnPQCtGDSiUDzcZ6LW1GhOq7RHKSjuZJGF4zWxoHiR9FuvMkiE8XQg9QKjkgWPI YAAVVax81/3JwD61dfCuir3CMr7Ho896b/RjqWkMHHR17qaueFtKtJIvt058+6z8wbohrgtD1yfw xNLAYhJBOMSKT+orr9F8W6Tb2zW9qCLmRs4fgVySZcUmzY1FlHjKwMjBQsBPNaoEk6gsdkZ7Dqa5 uLTL7WPF8AvG2hIPMXb/AHa6wqNigcY4FZq7KehWuVRIo1QbefzqlMMuSRn1PpVq6yWj9c9aqPl3 Yc47+9USZOrRq9uQQCMjFR22kz28PmxlS2MjNT6pgW4ViN24YAq4S3kIM/wVnbUu7sczcz6lcKUm vGC5xsQ1HZaLA8gZkZ2Pc1ZtYwVkbHJc9a07FDv9q0Ub7ktmvpHh2AJlgqgd8VsXllHa6aqR9N1S 6Yv7qptWGLFB6tVWSM1dvU59h82KwtZAN/CtdJs+auf1ZN2rRD2rKxvcZCNvOK1YGKqDWfCv71V9 612QBRitI6GciVJM1JvBFUCSp609JfU1RBbJzUE/3aPMB71HK42UFHuukf8AIItP+uS/yq7VLSP+ QRaf9cl/lV2pAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKa7rGhdyFVRkkngVky eJNOQ4Ejv/urQFzYorFHifTyM/vs+mymr4osCTkSgdjs607MVzcorCPimyyAI5vypzeKLEfdWZv+ A0WYXRt0ViHxRYgZCyk/7tIPFFiVyUmDem2izC6NyisIeKbPd/qpguOuB/KhvFNmGIEUxHY4oswu jdorCbxTZgcRTE/Qf40HxRZgA+XMfUbelFmF0btFYC+KrU53QTA9uhzR/wAJTbZH+jygY9qLMLo3 6KwD4ptg3EEpX14FDeKbYA7YJT+Qoswujfornx4qt9uTby5z0yKF8UwHO63kHpgg0WYXR0FFc+PF UGf+PeTH1FDeKocfLbSH6kUWYXR0FFc+fFMOBi2kJ+ooHimHbzayBvTcMUWYXR0FFc8PFMWTm1kx 7MM0h8UpnAtW+paizC6OiornT4pTHy2j/iwpT4pQAf6K+e/zDiiwXR0NFc6PFKbfmtGDezZFJ/wl I3f8eh24/v8AP8qLMLo6OiucPikZOLQ4zxl6RvFQ/htDn3eizC6OkornP+EqXA/0Rs9/npq+Kjg7 rT6YaiwXR0tFc1/wlLbh/oox3+ag+KmzxafL7vzRZhdHS0VzTeKWP3bX8S1A8Uvt5tRu/wB/iizD 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 PY0AeFWerTt4htb2aUtKLlXL55zmvtq1m8+zhm7uit+Yr4asrGca7bWTxkT/AGlYymOQd1fctpD9 ns4If+ecar+QoAnopAc0tABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRWRF4k0yfxJPoEczHUYIxJJH5ZwFwp69OjCtegqUJRtzK19QooooJCiiigAooooAK KyL/AMSafput2GkXDSC7vs+SFTIOPU9q16CpQlFJtbhRRRQSFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSUtFAEZijZQCgwDkDH eq9xp0FxDOjAjzxh2HXFXKKAMpNFgghSGABYo4yqJ7+pqnbeHTZxRRRyFiSTM56kmuhooA5OLRNQ jvpppJNyySbY0/uL6mori11L+03jSMC2gUF5D/Fn0rsaQgEcjNAHE3V3NC0MYtZDJLyox29fakuL +K3017yX5Y1wCfc9q7VokZtxQbsYzjtVZ9Ms3thbvbo0QYPtI4JHegDjYbqK4gEm7ZkbsNxxWeNX ha8tTFICfNABPGee1dzfaDZX1tcQum3zwAzL1A9vSqn/AAiGlm7t5jD8ttF5cSdh7n1NAG8rbkB9 RTqZEnlxKmc7RjNPoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwfFnha18XaVFp95PNDHHM Jg0OMkhWGOQePmreooLp1JU5KcHZoZFGIokjBJCqFGfauf8ADPg+z8L3epXFrcTytfuryCXGFILH jAH9810dFARqzjFxT0e5xmvfDjTdX1U6raXV1peoNkvNaNt3n1I9foRmqlj8MIhqVvf6xr2p6rNb OJIRNIdoIORnJJ6gdCK76ig6FjsQo8qlpt/T3Oah8G2S+MJPEtzc3F1eFSsSS42QjoNoA7DI/Enr TvFfg7T/ABdb26Xjywy277o54SA656jkHjofwro6KDJYmqpqalqtF5EFrC9vaQwyTvO8aBTK+Nz4 HU47mkvrVL6wubSRmVJ4miYr1AYY4/OrFFBld3uY3hjw5b+FtGXTLWaWWJXZ90uN2T9BWcngWxtf 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 3OKYxx/nSUZ9uKTNAw9M0oOTTSaFOOcU7CZJnNKM5qMGnZ4pWEPzS54pgNKD6GlYQvTijvTcjNJu JosBKCOlHU8VFmnBqLCFcY9KiySKlYhl5/Ojj0qgvYiK8VA7bTgmr4VTztrPuBvuCF4xVxKi7grB qUg+9CRBTk8mnM6qOTT9BshdscUzJzSyOrtwfzqIsT34q0ikh+eaeO3NQE/WpI2Oc8HFNoLEwGaC DnNPjIYZ/Oh8Cs7kEJBphHapSOelRuOapMY3bTsEelJuxwKGPemAc0ZpM/lR/hTGLxjrR6Ume1FI LC9fpSGlJ/Sk4NABxjmkPtS/zpM0wDPWm5Gen5UpJA4pOcUxid6XPak5780uePemAoGaUdabTs0g Hcf/AF6dwMfWmA80o/lUiZYRgatRniqUTZ4qyjED601uZSNG0b98n+9Xo2jPush7GvNbXmVPrmvQ tCfMJFe/k8rSZ5GOWhs96Wk70tfSHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADW+8tebfHO3lm+HFw8 a7vLlVm9hzXpLfeWuJ+LiyP8NtVWOMyMU6AZ49aAPkYT5UfSvU/gxrC2N7fqTy6ivKFiYKMq/T0r v/hEpm8WGxWFnedMg44GPWgD35PERHTpU48Rpj5jTU8M3Q6olSf8I1cf3EpAA8Qp60v/AAkKAdaX /hGp/wC6lL/wjU+eiUwFGvqR1pRryDvSf8I3OBxspf8AhG7j1SkA4a+g70o8Qp60z/hGpz3SnDw3 Nn7yUAP/ALfjI60p1+MdCaZ/wjc395KP+Ebmx99PyoAkHiBPel/4SCMd6i/4RuY/8tE/KkPhqc9J E/KmBy/xL8QRyeAdSgBw0iYH518wiYgYr374xWd9pXhqKJLdrhLltrPGudn1rwNtNvh0tLg/SM0A RSz9sZyMCug8Iafc6t4r0vT7glIpJlBI64zXXfDf4QN4w0a71HUZp7Mq2y2G3GT6kelUdc8FeK/A 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 UgqwBBFPoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQ8ilrkPiVqGq6Z4Hv 7nR2CXCpy56qO5FAHzx8RorL/hZupGw2iGMgPt6b+9eofAPSymmahqzrzPJsQ+wrweyklvE53PcT SYJPJZia+u/AuhDw74QsNPxiRYwz/wC8eaAOjooooAKgu7aO8tJraVQ0cqFGB7g1PRQB8d61pb6N ruoaXIObeZlGfQ8j+ddJ8DtZOkeP5dMdsQ3qEAZ/iHStr46aL/ZniSy1mGM+Vep5Un++Oc/livLb a/fRvEmm6tGSDBMrHHpnmmB9r0oqrp94l/p1tdxkFZo1cEe4qyKQC0UUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFJRQAH2pMnNI7 rGpd2CqBkknGK8w8ZfEsReZYaE6s/KyXPZfpV06cqjtExrV4UY802d/ea9pdhMIbm9hjkP8ACW5q zbX1reLvtriOUf7LZr5hmuJLiczTSPJIxyWY5JrR0rWLzTrhZbed42Xpg8V2/UbrR6nkvN2pXcND 6VyccCivBLzxH4hmnW/t9UkDDrGOg/Cu+8HfEBNWK2Gq7IbzGEk6LJ/9esauDqU1d6nVh80oV5cq 0fmd+OlFNB4HNLXKekLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAeZ/F/8A48LL/fNeZ6WT/aMRAyw6CvS/i/xYWX++a8qikaGVJEOGQ5Br3sHH mw3L3ufNZhJQxak+liq6fatbkjuWZN8hDsBkitQ+F/OLm0uvlBwokGCa17PY5a7t7bFxc5BlIyFf 2q5arfyTtHrFkI1Vd3nLxuNfMzwdSlJRqLf/AIbfp3P01cQRxNN1MLKyile9u17qL37bnHWeg39/ fyWsCqTG213zwK6u00KDR18wSObhhscEcE+1H/CPiW4N5Yaj9jRhzEpO4n3qwTeCI2z3ZLY/1jrW lDC1lNScG7f11OXNM8oV6Xs414pSW1n+LV0Sapcw2sM8dy4iIXK5P3uK5PSnaTRr0MP3QkBX61Jq HhvUp51cXH2oMcM5P3aW6aG1tU0+2zsQ5kY/xtXThKVWri4vl5VHf+vM4czr4LB5ROEKqqSq2tby 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 Tb6U/jkUH36UXCw0DnpSbRnIp3IPpRjAoDoM6Hn8qMZIpw5+tAPrRcSuNI7U3nnPTtUhx1JxTV9R 0oQ7CAVv+CBjxjY/8D/lWF0Oe9b/AIJ58Y2JP+3/ACpPZgj2migUVzmgUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAAabSnpR1oA8P8A jBpT2WuQ6ov+quV2t7EV5VJqFu8phZj6c19QeOPD6+IvC9zahQZkG+I4/iFfJF9Eba9likG0qSCD 2INdcar5FboeTVw0fbNvrqbcFx9ikGSTE3T2rft5g/ze2RXNaPY3E6l5iRbngA9TW8zJZ7BnaOg9 K9Cg5ON3seTi4x5uVas14ZVZfLk5Q/pVeeA27DA3I3Iao1fOCBwepq7BMpTypOVP6V2J30Z5bTg7 op9ec9aMfpUk9sYXx1Q9DUealq2haaaug3YX3p4z7ZFR4yaeKBMkDfKV9eaVQCw9ajXB6VLGCSBT RL0NLTxtYkk5AyuK9o8Lag2paFBK5zIvyt+FeMQ/Ih9fWvSfhvc77C5tyeUfdXLmFO9Hm7Ho5JX5 cTydHf8AA7qikpa8M+vCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKQ0tB6UAcF8SrVLm1tC4JKtkAetcYZLpVTF1MuOB6CvQvG9vFNBbmUsNrcYrlAkITaHJA9a9TD RbpI8jFyUarOZk0qOSZ5ZX3MxySaVIZrVBHa3BSPOStdpDp0UsaySAYPQAVYTTLLOTbgn1pzxEfh buKGFb95JI89uLf7UQLhxI68ZJ6VFa2z2dwzRuIjjqD1Ferf2Npbaez/AGRN56msaTwzp9xnapQn oaX1iNrO5f1SSd1a5xMkhuYmV5y6fxKTxVaOCzt9r5VGHQjqK7uDwjYW/wDrWaTmrq6DpIx/oatj 1pe3itEx/Vm9WkefM9w+StyzA9Oeopn2KKXGIFz6+pr1QaDpLWjMLNQ3YismTw5ZycwkxkUKvFdw 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 N1+jf4/nXlGsaJeaPcvDdQSRsnUOMEf59a+hbeezvITqWkXKh2ADITkgD+HaTwelVde0a08XaOS0 Yivo1Pl5Iz/ut7Gu7AZ1WoSUMS7x2bfxRfn3Xn/wxvKlGorw36W2Z882LfvSvqMV1Hg/A8Y6STjH 2gfyNc7d2jaZqZjIIUHjPb2rf8L/AC+LtLBIA+1J1r6vEa0Z+j/I5I/Ej3PSsf2/b4x/x8L0P+1X pleY6Xx4jgHH/HwvI/3hXp1eXkn8OXr+hvifiCiiivbOYKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK53xp4ij8Oe Hbi5Mm2d1KQ46hsfe/Dr9cetdFXjPxwvJfMsbNV+Tyy5OOSScf0prcDgdMukla4nkLGW4b5mJydv 1PetWWxS4iJQZGPqRXG2dyYWFdXp998pyc7vQ1SEYF7bGGQoy8+1VYpnhOCeO9dJqVqk4V1YbsZr nZ4gjZIORxVbiL8UyuMZyKJIgckDis1JDEc9j29KuwXIlUAtU2HcSORo2wT9DXeeDfHF1oMqW8jm awLfPEf4c919D7dK4OVAc4piTMjAelG+gH1fZ3lvf2sd1azLLDIMqynrVivnzwX42m8PXo3BpLOU /vYQevuPeveNO1G21WwhvLSTfDKuVPceoPuKlqwy3RRRSAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAayq6lWUMp4IIyDXHyx2lre3VrYWyWsCTB5FjjCK8hXBPHWuyrjZZ/tN7dvghPO YJnvjjNJgQyRhuckfSoHt2Y58z/x2rTEDpSAg/WkBUisYkk8xl3tnPzc1azjk076ioiCz4HNAHTa HAsdiJAMmQ5z7dK1KgtYhDaxRjoqgVPVAFFFFAHmtp4cvofiPfa8zQ/Y54BGgDHfnag6Y/2TT/Hv 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 EQyUYnJJ/HnnjnFegFcA01csTxgUGn1+bqynNXUlZrpbpb0POdVvrvx1Nbadp1jcw2SSCSeedcY4 x2yOhPGea6rXru+0bSreTSrI3XlSKjwqpJ8vaemOeoHNbuOfakxzQTPFxlyRULQj0733uzg5PiE8 sBittFuzekYVCMgH8Bk/TFX/AAVoN1pdpcXd+CLu8YMynqoGevuSSfyrrGBJ4oxxmiw6mLh7N0qM OVPfW97DO/TikxxxT+BSHpQcI3HFNPWpCDSEZPSgBuMj3pAMinAYprkduuaYCsMdqTHFJgtzuxTt vTmmgGMMCo5BgCpSCDzyKjftRcCuw465qtL05q0ykHI6d6qTnANIbM+c84rH1S4W1sp5ycbEJzWt OQOtcT49vTbaEY1PzTtjFCJep5k0hllmuHOS7E1AOetSMNkCr39KjJOOOvarNDtvAFjuluNQdeAN iV3qJzmsjw7Y/YdBtYduHYb2981vxIMZpGbdx6JUzxjaOORSxx5/xqwseV21IIrKmR0oeMVY2AHm goB7mgZkzx1RlU9OmK2Z1GDkc1mzoTT3IZzPi62M2imQDmNs1wIGR15xXqWow/aNMuYTzlDjPtXl sakAqeoOMU7mtJ3Vim4Ow+qtXbeAboLqEkJPDx5H1riHDGSQH61s+E7lrbX7Ns/KSUP40Ictj2JM 9DVlOgFVx94+lTpnGetBk7k69uKkbOw49KamcZNPJ+Q444p3JsesaR/yB7T/AK5L/KrtUtI/5A9p /wBcl/lV2oNEIaKWkxQMy9YiLxBh2rKHQetdHdRebAymubHyOy+lMpMdRQTS4zQMB0paMUUALRQK MUAAp1IB704CgAApcUYpRSAKPxpcijNAABS4ozSigBMUYNOxR9aAACloFLQAlLRS0CACjHNLkUmD uNADWWszUbQSoTjJrWINQyrkY60DOQa1KSEYpyWw69K6FtPMhyqHmrEOhM2PMXFAXOaS2OcAE1Zi sXY4EZ/Kush0eCLtmrkdvGg4QUC5jmbfQZJACQQK07fQ4Y1+cZrXA54GBTiPagTZWisoIfuoKsAA cDGKCPagDHagQY5p1IAc9aWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig 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 FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEFxZ290uJ4EkH+0uazG8N2iyeZbSz2zf8ATN+P1rao oC5w+u+CNQ1NxJb63cxMBj922zP14INTeHvDOsaRE0U99HdZORLcgO6+wwBXZUUD5mZkGjQpdC7u GNxcAYVnAAUewrToooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFRzTRW0LyzOEjQFmZjgAVJXCfFrVk0zwTMhfD3LrEoHcZ5pMEUtT+ NHhqxmaODzrvacFoxgVRj+PXhwuFltbqMepGcV4jbquo3UVhYwFp2O1VLYya2bj4d+K4AXfRJiOv yfNWalJmrjGx7zpHxQ8J6yypBqiJIf4JRtrrYbiG4QNDKki+qMDXx7PpFxZybLq2lt39Jk21t6Pq mraYVNpqU8OOwk4oc7bk8h9WUV4ronxR1q2KpfxR3kY6kfK1ehaL480XWNsYmNvOf4JhtyfY96tS TE4tHUUUgIIBByDzmlqiQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKa7rGjO7BVUZJPQCgB1FcxdfEPwpZyFJtatQwODh80lv8RfCNywVNesgT2aQCgDqKKr2t7a3 0YktbiKZD/FGwYVYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKAErmfEHjjTPD139lnDyzBdzKnYV0kjFYnZRkgEgetfNfinWzJqN1Lfu8c80pXa Bkj2oA9Xsvi94eu5SjCeLHUsua6yw8Q6TqUe+2vomB7FsH9a+dNLtHKuYYzIEQuw9qfDrenXoEdt cKs2cbWO0g1kpPqB9N5BHHSlrz/wpd6hYWEVtdTyvK/zK0zZG30Broh4q06K+FleSfZp2OF8zhW+ hrS4rm9RTVYMoZSCDyCO9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigCOWNJY2jkUMjDBU 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 KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+ffjbrjX3i i00iFiyWab2Ud3bt+lfQJz2r5X8dWd3beONTa/zFNJOXjZ+AydsGpnsVHcw9Q0HWPC+oQNqUD200 yiWKUfdYdevrXrngb4qXqw/Z9bjaa3ThbhR8y/WvOJ/EuuXGkHS9QlW/ssfIs43NH/ukVn6fqtxp ljPaxgPHJ/C46fSs27aoq1zvvjX4ysNWt7HS9KkimDHzppFXkY6DNeVWAnkcKZWCk8c0yVZJbh5n BO48ZNXtPCLcIWOBnvQ5XQ0rHT2dle2Nq13M4ltEGW9QK39Nlsb+JHtX80MOTjBU1m+KtQt4fClt YWs6ST3LDeEP3R71seE9Ke1s4kVBtC7mOKyZaZ19jrt74chDCZrm1H/LFzkj6Gu80TX7DX7Tz7KU Ej76H7yn3rza/ITR5bm7sXfTG+QXcZ+aFh3I9K53StSm8OXiX9rKGXIztPyyLmtoya0Zk1fY+gKK gtLhbuzhuFGBIgYA+9T1qQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc L8V9WXS/BkymUxmdhGCDg13VeI/tAX+ItJ09WOWcyEewoA8Tv4WuGLIgYZ71ltbMpIaLFal1a6hO pvRbzNbr8vmqpwCKpi8LcSfNjjI60EkthqGp2jAWV/dReySkCux0v4keNNCi41GSaMnIWdNw/OuE nlVyvlrs29x3q5/bN6unC0aUyRZzhgKAPb9A/aDtWRIvEGmyQydGmt/mX6mvVdB8WaH4mt/O0nUI bgDqob5h9RXxcS0qbgnAODS21zc6fOs1rPNbTKQQ0bFSKB3PuvvRXz38Pvjfdwzw6Z4nzPG7BVvR 1X/eHevoCGaO4hSaF1eNxuVlOQRQMkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA 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 UjtVNiK9+M4zV4nzsoSg7SViJuf8aZ7U9sVGT+dBIjc5I/KmMcj604nHrTW5IoAZz34pM06m/SkA 09TSY4px6cU2kMQikPSlNIaAGkflQMUEHtSjpnHWgYY4pp607FJ+FIBBX0X8N/8Akn+k/wC6/wD6 MavnXt719FfDf/kn+lf7sn/oxq48b/DXqd+X/wAR+h1VFFFeYewFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUCCiiigAooooAKKKKACiiigArjtafztfkx/yzRU+vf+v6V2BOBk1wau Li9uJv8AnpKzD6ZqZbDRbRc1MBx3FMQdql9qhAyOQUac/k6tbMRwzGPIHTI/+tTmHFVwxhmjlH/L Nw5Hrg0+ojtKKKK0AKKKKACiiigAooooGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAVka74Z0jxJa+RqlnHOo+6xHzL9DWvRQB4h4g+Bs0Aefw7qRUDJ+z3HP/ AI9Xkk32iGaSCYKXRijY9a+u9ZS5k0W8SzdUuTCwjZugOK+Qbi4ntpnE1sWw5DMDnJzWc0aQ1Laa Y8kCsrDpkimCwcyLEUYMxwDVu01GGZV25Q9wRXVeELVb3XPtEqh7a0UyuT09v1rC7NrNbnPf2A2l zwy3xVYw4L7eSB3Neu2y6ZB4auNX03Uobq1ghLOARuU46EVwHid0kE9zwFck47D2rN+GejT6r49t 7dS62KL508ak7XHoR0qoJvciTORuvFerXb3KDUbqO3mcn7OGO3B7YrqPh5p+o6/rVrp0McslkGDz OQdqAe9fR0/g/wAPXMpll0i1L57RgfyrTstOs9Oi8qztooE9I0C5/Kt+Uy5ieNFiiSNBhVAUD2p9 JS1RIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV4V8Z/DmrXeuwaqkfmW aR7AB2Ne61FPbxXUDQzIrxsMEMM0AfKOk+JNT0WFrGEI8LNloJVzz9Ki1D+xdVV3n082V2eQ8XCk +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 T3zU2r+HPHGuWQtb+70+SEOHAGF5GR1C+5qjqcoxrOnOUPZrTl62+69/megRTpdWsU8R3RyoHQ+x GRQRVXRbSbT9DsbO4ZTLBAkbbTkZAxxVs9fei585JJTaWxYsOJZP+uTY/KtjQf8AkC2/OfvdsfxG sSzO15T6RtW3oIxodr67efzNStxGlRRRVCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKBhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTJEEkbI2cMCDin0UAeaap8GtJvbiWa3u7 i3aQksc7ic+9S6D8GvDejuJJlku3Bz+8bgn3FejUUrId2RxRRwRLFEioiDCqowAKk/GiimIKKKSg BaKxvEniXT/C2m/btQZxGW2qEGSxryrU/jXf3zPFoenLEvaW4PP5VnOrCCvJnRRwtWt8Cue1swRS zEKo6knAFczrHxC8M6ICLnU4nkH/ACzhO9vyFeD6nrviHXDnUtWndT/yziOwD8qzo7KJGz5Yz/eb k1xVMwgvhVz1KWSy3qP7jvPFvxXvNf06bTdAtJLWKX5XupeG29wB2rze00dLYhn+dhWzGqDGe1JI EA4JxXBVxlSpp0PVoYOlQ0iiskeATjr2p22lTLnA5q9LYrbRBrmZVdhkRjr+NczZ1mfSgjNNdkEm A3PagU7AXoHJYCu08B6udJ8QJG74t7n5G9j2NcLC+HHPFakDldrqSGU5BrONR0qimjKtSVam6b6n 0kOefWlrK8O3/wDaeg2l1uyzxjd9a1a+qjJSSkup8VKLi3F9AoooqiQooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oo7UAJXlXxU1gW1pdsp/1cewY9TXoeratDplszFgZSPlQHnNeJ68l14t1WPRrEedcSy75WHRBnqf pSY13E+CfhSS5vW1a4jHlwuHDEcl8dPpg19AVmaDo0Gg6Nb6fABiJRuIH3m7mtOmIKKKKACuF+LW mnUfAd3hctDiQV3VZ2uWYvtDvbYjPmRMMfhQB8a27sFeMHrkYqFSWXB428VcuYvsWszwSfLtcjnt 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 ZxVq7dfOKJtCpwABVfknGaS1G9B4VVP3qcHUDgVGFz604RnFVYi48S5wQtSxMX4FRrHVmEAN0p2F qakVgfIDE5JGap3ETq3YVtwnNupz2rLuDnJwRzQgZmyM65wTUZdxjnNWHHaoitFhXIfMbrS+axwS Kfs70nl80NIeozeG6iliuDbyrJGcMKClRumOc1NikWZ7gfaVv7MeVdKMSKT8sg9K6DTtQi1G1E0f ysOHjPVG9DXJE7emetLYXzWevweWSI7lhE69j6H60k9bFculzuKQc9sUtFUSFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigApDS0lAHy78VtDbRvHl2wj2wXgE0bdif4v1rC0W4ZTgHrxXpnx/uIDc6Lbrg3AD sfULxXkuls4vQi55Nebi4XTPpMum3TVzqZDL5RI5I5GayLma6mzHHAQe7GtqWTagQdQOapsWIx61 5cGo9D0r3KVtbeRDszlick1rWJ2yiqoj56VPFlXHapqS5jSJ1Ok3Ah1C2lJ+7KpP5175G4eJHHRg CK+coXwnDc17j4Q1VdV8O28gOZI12OO+RXXlE7SlB+p4mdU21Gp8jfooor3TwAooooAKKKKACiii gAoorE8W69/wjXhm81URiWSJQI0PQuxAGfbJyfpQVCEqklCO7NuivPPD9j491EabrF74igSCZo5n slt1wYSclc7eDt//AF8V6HQaV6KpS5eZP0v/AJIKKKKDEKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDmfHXhf8A4Szw3LYJ KYpgd8TA8bh2NfI+r6beaRqM1peRFLiFyrK3t3r7erwr48+G0WS01yGIDfmKZh3PY0AeFNM0zbnx nGOKaTtUmmgbXINOkOVFAupGoJOTyTU6RBh70xBVyJNy5xQMhHAwetWtFujY+I9Oul6xXCN+tQzD aRVZ2KOHBwV5FAj7ltpfPtYpf76BvzFSisbwjfDUfCemXQOd9uufqBitqgYUUUUAFFFFABRRRQAU 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 MTSIVVWzgZxhuK8A02/a+xdO25pvnZieSTzn3zSY7XOpmvLjUbprm8maaV+pPQewHYVagwADxz+l ZVvL7dKvpKoyeKlhsaCqNw9TU6YA4NUEmBxg1L9pCgktgfWloho0lYevNPV+M8VjtqcEZ5lX+dV5 PEEK/dVmpX7DOjEoApRMM/zrk28ROT8sfGPWqsmtXb/cbGaNwsdsZx1zTTdIPvOPxNcG9/eMctM3 4Gmm5mkXJdjx0zQ7odju21CFRzMg/Go21e2VSTMMfWuGyTyWJ/GgHI6d+c0rsDtjrtmB/rhjPamP 4gsozzL79K4wgdMcDge1Rt146/WlqxHbf8JHZnGXNIfENqeN5yPeuHKkjP8AWl6nBPI9qEhXO1/4 SG1xncfrSf8ACRWjH75rjlyWznH8qcvA6jmqsHMdiNetCeXP41INXtWAxMOa4xjkAEc1G8oBwTuB 9BS2K0O7GoQEcSr780/7Qp6MD+NedyXW0naxBPvTE1eZJMJIdoHU96jn1FoejGYfh9ageYYODXFr 4gljGWkyPc1Zg8RK4O8g+9XzoLHQSzZGKxdRuSq4AJJO1QOrH0H4059QSSPcrZ4zmtTwBpQ13xHL fz5e104gqOzSnoPfA5/EVcXcmV0eieE9DXQNAhtTzO/72ds9ZCBnHsOAPp61uUUVYgooooGFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBzfivwZ p3i9LX7dNcwyWpcxPA4BBbGc5B/uisfT/hPoNpeR3V5Pfak8f3Uu5QU46cADP0Jx7V3lFB0wxleE PZxk0gooooOYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooATaByAKWiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKTrS0UAJjFGPelooAbtPrTSh9akop3Ai8s+tBi56 1LRRcCHyPenCIDjtUlGKLgMKLjpSGNGHzKp+oqTtSd6QCABRgAAUoxS0UAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV8Z19mV8deQuRy1d2C+18jgx32fmQjo aUcdqnFumOrUvkLgnJrvPPIRxS9vpU3kLnqaUQKR1agTREM804VKIF45PSnCFfU1QrEQ604VKIVJ 707yFx1NMmxDTql+zr6tTvIXPU0EtENKOtTCBfU0ogT3oEQHFKKn8hcHk0ogXAOTTAgFLnHapvJU nqaXyV9TQKxCKB6VMIV9TS+SvqaAsRdqB06VOYV9TSeSo7mgViGlxVjyFz1NIsK+9FwsQ+2KMelT +SuTyaXyV9TQBX7ijtU5gQEcmjyV9T1oAhFL3qUQrk8mneQp4yaVwIT9c0e+KlEKgcE80/yF9TTA hGPwpScHipvIXjk0GJfU9KAsQ/hSdM4FTiFT3NHkrz1ouFiEGjr6VN5K7c5NCwrgcnkZoCxFk5pf brUphX1NL5C4PJoCxCOeaMVKIV96Uwr6mi4EQPalBqQRLjqacsKkZ5oCxCDx3zRnjryKmEK7eppP KX1NFwIieCKCeakESnuacYVx1NAWIc9vWjmpRCvqelL5K+p4ouBDknrSscj6ipRCvqaQxL6mgLFb aBz2ppPt0q2YVxnJphgUg8mi4FfJx0pMmrAgXA5NI0KjoTSuFiu5GKjC46fnVgwIepNOEK7eppDK 4PrS54qYwryMmk8hfU0hkPWvoj4cf8iBpX+7J/6Mavn0QrjOTX0J8O1C+A9LUdNr/wDoxq48b8C9 Tvy/+I/Q6iiiivNPXCiiigAooooAKKKKACiiigAooooAKKKKACiiigBrosiMjgFWBBB7ivm/xBo/ /CI+L7nRwc2z5uLbjAEbE4Uey8r+FfSNeX/HKwtj4Oj1byl+22lwixSd9rdQfUUMRw9vdA+y9Bk/ jUk2r29ohLOCfQVwk+o3McSxLJgMhYnvmqulSvcwvNKdzg9T7Vg5O9jaMEztn8TvgGIbVOPmPWsy TxBPI+2RztOfvd8dqxppGEnXPHf61XZy8e84yzY6UW7jSWx1kOoRuFweematLco4wTknk4riHnli YhJCvyg8ds1Pb39z5kYMhIx3pxDlOzMqBeWxmnCQcdDj1PWubtryZ5F3MGyQOR2q0t1KXfLfd6fn RzByaG55gP0+tSKygc4yO1YD3cqQxsCMlc9KmSV9uM9hQ5EpG0XXGd34ijcD/FgfzrF+0SB1Xd0p TM/mqu7rkZqGx2Ndp0C43D8aZvjUZyOfU9axUmd4tzY57Y6UrSuqStnOBgZ+mannDluapnQcZ+br xQ0y88ZwPpWUHIdccH1/CmNcuCRxx3xT57ByGyJgT1A46UhuFUMCRWFJcygH5v4c5qBrmTDdOFz+ QzUubYnFbG89+oAA5yO/aqj3xK5CgBhgEnv7VmkZjIJJ6Hr+NRSOyiRffH86TbCSsXmnZ3Cue2SQ eBVc3JZAA55zwOP/ANdUDIzRgHpxj24P+ApwYuuW7AECtFFbmblfQsyXQiIAbLEbQnWoJb1oDuV+ CAOfX396zJZmCM5AZk5UnnBAzWJf6jcyTsGcYU9MYzxS1loWtNTsLHXpXn8qNHZ2YBYkGWJPAH1N fT3hDRhoXhexsmQLPsEk+B1lblv1OB7AVxPwl8C6Da+GtM19rU3Gpzx+d5853FCR/COg9u/vXqVb wjYlu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9k= ------=_Part_101527_666677075.1369731010913-- From lucia.casati@italyseo.com Tue May 28 06:28:34 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7E2CB7CBF for ; Tue, 28 May 2013 06:28:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6BA138F8040 for ; Tue, 28 May 2013 04:28:31 -0700 (PDT) X-ASG-Debug-ID: 1369740509-04cb6c473f2055b0001-NocioJ Received: from italyseo.com (mx7.spool.propinvest.co.za [199.119.206.81]) by cuda.sgi.com with ESMTP id fgjv5RlKs636ZW3B for ; Tue, 28 May 2013 04:28:30 -0700 (PDT) X-Barracuda-Envelope-From: lucia.casati@italyseo.com X-Barracuda-Apparent-Source-IP: 199.119.206.81 Date: Tue, 28 May 2013 11:26:31 +0000 To: xfs@oss.sgi.com From: Lucia Casati Subject: Scambi di Link - Traffico Vero Gratis X-Priority: 3 X-ASG-Orig-Subj: Scambi di Link - Traffico Vero Gratis MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_dcacd9a57846b746a4c2a01b025c7267" X-Barracuda-Connect: mx7.spool.propinvest.co.za[199.119.206.81] X-Barracuda-Start-Time: 1369740509 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.66 X-Barracuda-Spam-Status: No, SCORE=2.66 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_MID, URIBL_SC_SURBL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132263 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 HTML_MESSAGE BODY: HTML included in message 2.52 URIBL_SC_SURBL Contains an URL listed in the SC SURBL blocklist [URIs: italyseo.com] Message-Id: <20130528112830.EA6091296195@cuda.sgi.com> --b1_dcacd9a57846b746a4c2a01b025c7267 Content-Type: text/plain; charset = "UTF-8" Content-Transfer-Encoding: 8bit Salve, Il mio nome è Lucia, Vorrei suggerire uno scambio di link gratuito con xfs.org o con qualunque altro sito di cui lei sia in possesso. Le farà piacere sapere che sto lavorando su un ventaglio di progetti di qualità per lo scambio di link gratuiti e che sono sicuro che questo scambio possa essere fruttuoso e produttivo per entrambi. La prego di farmi sapere se è interessato ad avere più dettagli, o se ha qualche opinione da riferirmi in materia. Attendo una sua mail! Lucia Casati http://www.italyseo.com/ --b1_dcacd9a57846b746a4c2a01b025c7267 Content-Type: text/html; charset = "UTF-8" Content-Transfer-Encoding: 8bit
Salve,

Il mio nome è Lucia,

Vorrei suggerire uno scambio di link gratuito con xfs.org o con qualunque altro sito di cui lei sia in possesso.
Le farà piacere sapere che sto lavorando su un ventaglio di progetti di qualità per lo scambio di link gratuiti e che sono sicuro che questo scambio possa essere fruttuoso e produttivo per entrambi.

La prego di farmi sapere se è interessato ad avere più dettagli, o se ha qualche opinione da riferirmi in materia.

Attendo una sua mail!

http://www.italyseo.com/
--b1_dcacd9a57846b746a4c2a01b025c7267-- From david@fromorbit.com Tue May 28 06:51:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B3D237CBF for ; Tue, 28 May 2013 06:51:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 44A1AAC006 for ; Tue, 28 May 2013 04:51:56 -0700 (PDT) X-ASG-Debug-ID: 1369741913-04cb6c47412063d0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id GjLW9dozqnbdYer2 for ; Tue, 28 May 2013 04:51:54 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiYMAK+ZpFF5La3j/2dsb2JhbABZgwi9HYUhBAGBAxd0giMBAQU6HDMIAxUDCSUPBSUDNIgMvAIWjUMngSQWgz4DlzqRQYMhKoEs Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail06.adl6.internode.on.net with ESMTP; 28 May 2013 21:21:53 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhIRS-0002y7-On for xfs@oss.sgi.com; Tue, 28 May 2013 21:51:50 +1000 Date: Tue, 28 May 2013 21:51:50 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: Re: [PATCH 9/9] xfs: inode unlinked list needs to recalculate the inode CRC Message-ID: <20130528115150.GW29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 9/9] xfs: inode unlinked list needs to recalculate the inode CRC References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-10-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369636707-15150-10-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369741913 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, May 27, 2013 at 04:38:27PM +1000, Dave Chinner wrote: > From: Dave Chinner > > The inode unlinked list manipulations operate directly on the inode > buffer, and so bypass the inode CRC calculation mechanisms. Hence an > inode on the unlinked list has an invalid CRC. Fix this by > recalculating the CRC whenever we modify an unlinked list pointer in > an inode. This is trivial to do, and the new CRC gets logged with > the inode core so on replay of the unlinked list operations this > will be updated as expected and remain consistent. > > Signed-off-by: Dave Chinner I need to rework this fix. The fact that it actually requires log recovery to follow it's documented recovery ordering constraints has exposed a bug in those the log recovery transaction item re-ordering code. The bug has been there since inode chunk deletion was introduced in 2003. It has also shown up that there is no guarantee that the on-disk inode in the buffer is actually uptodate, so recording the CRC in the transaction for recovery is the wrong thing to do because it may be different to what recovery ends up with after reordering all the modifications. So the correct thing to do is to have recovery recalculate the on-disk inode CRC are modifying the unlinked list... So, there's 2-3 patches that need to replace this one.... Thank xfs/121 and the icreate patch set for finding this mess. Cheers, Dave. -- Dave Chinner david@fromorbit.com From psusi@ubuntu.com Tue May 28 09:51:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AC49F7CBF for ; Tue, 28 May 2013 09:51:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 37796AC005 for ; Tue, 28 May 2013 07:51:08 -0700 (PDT) X-ASG-Debug-ID: 1369752663-04bdf07818220820001-NocioJ Received: from cdptpa-omtalb.mail.rr.com (cdptpa-omtalb.mail.rr.com [75.180.132.120]) by cuda.sgi.com with ESMTP id mgGwTGAvTkHO8qbF for ; Tue, 28 May 2013 07:51:03 -0700 (PDT) X-Barracuda-Envelope-From: psusi@ubuntu.com X-Barracuda-Apparent-Source-IP: 75.180.132.120 X-Authority-Analysis: v=2.0 cv=JqNzXbEC c=1 sm=0 a=/DbS/tiKggfTkRRHPZEB4g==:17 a=Qsx_du5GiBkA:10 a=bfzWQn4VrGAA:10 a=COy8bEXE5_QA:10 a=S1A5HrydsesA:10 a=N659UExz7-8A:10 a=fxJcL_dCAAAA:8 a=p-BZX3ACu3QA:10 a=QfKxxUxMAAAA:8 a=m5ll2mmbexfkeFbRm1QA:9 a=pILNOxqGKmIA:10 a=4t1vQi-YglNiGWNj:21 a=iG7ObV0x8g7S0wWv:21 a=/DbS/tiKggfTkRRHPZEB4g==:117 X-Cloudmark-Score: 0 X-Authenticated-User: X-Originating-IP: 67.78.168.186 Received: from [67.78.168.186] ([67.78.168.186:53533] helo=[10.1.1.236]) by cdptpa-oedge02.mail.rr.com (envelope-from ) (ecelerity 2.2.3.46 r()) with ESMTP id 29/3A-16585-654C4A15; Tue, 28 May 2013 14:51:03 +0000 Message-ID: <51A4C456.6000708@ubuntu.com> Date: Tue, 28 May 2013 10:51:02 -0400 From: Phillip Susi User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jens Axboe CC: CAI Qian , Dave Chinner , xfs@oss.sgi.com, LKML Subject: Re: Loopback device hung [was Re: xfs deadlock on 3.9-rc5 running xfstests case #78] References: <1462091996.435156.1364882416199.JavaMail.root@redhat.com> <247719576.438259.1364882929749.JavaMail.root@redhat.com> <20130402070537.GP6369@dastard> <20130402071937.GC3670@kernel.dk> <20130402073035.GD3670@kernel.dk> <14055702.547701.1364891947331.JavaMail.root@redhat.com> <20130402090047.GF3670@kernel.dk> <985125161.581860.1364895066584.JavaMail.root@redhat.com> <20130402094834.GA4667@kernel.dk> <20130403114142.GP4667@kernel.dk> <515C4D9D.10103@ubuntu.com> <515DE2FE.1080201@ubuntu.com> X-ASG-Orig-Subj: Re: Loopback device hung [was Re: xfs deadlock on 3.9-rc5 running xfstests case #78] In-Reply-To: <515DE2FE.1080201@ubuntu.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cdptpa-omtalb.mail.rr.com[75.180.132.120] X-Barracuda-Start-Time: 1369752663 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132278 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Jens, did this get lost in the shuffle, or just miss the window for 3.10 and will go in 3.11? On 4/4/2013 4:30 PM, Phillip Susi wrote: >> I have not tested it yet, but I am pretty sure it won't work. >> It looks like the patch changes the BLKRRPART path to go ahead >> and remove existing partitions when GENHD_FL_NO_PARTSCAN is set. >> loop doesn't issue the BLKRRPART ioctl when !LO_FLAGS_PARTSCAN so >> this won't help. I think loop needs to set GENHD_FL_NO_PARTSCAN >> and then issue the ioctl regardless of the LO_FLAGS_PARTSCAN flag >> to get the partitions to be removed. I will try to test >> tonight. > > After testing, my initial thoughts appeared to have been correct. > I had to modify the patch as follows. To test, simply do: > > truncate -s 10m img losetup /dev/loop0 img parted /dev/loop0 > mklabel msdos mkpart primary ext2 1m 2m quit ls /dev/loop0* > > Note the /dev/loop0p1 node. Run losetup -d /dev/loop0 and see if > it is still there. > > -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.17 (MingW32) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRpMRWAAoJEJrBOlT6nu75yUYH/1PSNmTOBYgvEqQclWPBTd8n Fm95yILcIlJWdUr3gUvQmjBax1NzKnG3NZ2U4hucpCcJH4FkHSTTFl5uZ3wU1B/Q nvuQoSqYXVP+V9PVSTsUsxOI4Mvw5YP5sFwSdwRKpkCldXOuHrRZsuccFtkQducU AIij42jvI1un+/qc6NLW+/S+rcLGUj21boPmX3g80km1De9QMrYrbGAAEbFO3rrq fzsvGuVvOroGppLGpze4iMDn060Lxrw6//KDGtiUBIeD8kZCFGkBh1KupHqLLzXm gmfdlHIqAR5uWB29m9TOlRbHPzdeQutwt8zL2LOYlCft5OiBIOW8dT8EFkl2Buw= =7BGq -----END PGP SIGNATURE----- From rjohnston@sgi.com Tue May 28 10:25:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BDCDF7F3F for ; Tue, 28 May 2013 10:25:26 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7C2A9304043; Tue, 28 May 2013 08:25:23 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 28 May 2013 10:24:06 -0500 Message-ID: <51A4CC99.2040901@sgi.com> Date: Tue, 28 May 2013 10:26:17 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: CC: , Zhi Yong Wu Subject: Re: [PATCH] xfstests: cleanup the codes related to h_chksum References: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> In-Reply-To: <1369523732-10649-1-git-send-email-zwu.kernel@gmail.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/25/2013 06:15 PM, zwu.kernel@gmail.com wrote: > From: Zhi Yong Wu > > Since h_chksum field has gone away, we should cleanup the related codes > > [CC] loggen > loggen.c: In function 'loggen_unmount': > loggen.c:137:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > loggen.c: In function 'loggen_empty': > loggen.c:205:9: error: 'xlog_rec_header_t' has no member named 'h_chksum' > > Signed-off-by: Zhi Yong Wu Thanks for the patch, it has been committed: commit f761cd9a6aa9b44be7f3056f01c419edf1356789 Author: Zhi Yong Wu Date: Tue May 28 08:31:52 2013 -0500 xfstests: cleanup the codes related to h_chksum --Rich From rjohnston@sgi.com Tue May 28 10:56:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2D2597F4E for ; Tue, 28 May 2013 10:56:29 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id D074A30405F; Tue, 28 May 2013 08:56:28 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 28 May 2013 10:55:10 -0500 Message-ID: <51A4D3E2.3020204@sgi.com> Date: Tue, 28 May 2013 10:57:22 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , ext4 development Subject: Re: [PATCH] xfstests: fix src/seek_sanity_test -t option References: <519EF4AE.60702@redhat.com> In-Reply-To: <519EF4AE.60702@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/24/2013 12:03 AM, Eric Sandeen wrote: > _require_seek_data_hole() does not work because > the -t (test) option of seek_sanity_test is broken, > because of an early check for (argc != 2): > > # src/seek_sanity_test -t foo > Usage: src/seek_sanity_test base_file_path > > So _require_seek_data_hole() doesn't see the > "Kernel does not support" string it's looking for, > and passes the check. > > So rather than _notrun-ing the test, it proceeds to > fail with noisy errors. > > Fix that, make a common usage() function, and check for > too many args as well. > > Signed-off-by: Eric Sandeen Thanks, this has been committed: commit bd13bf9e2a87a40d3aab2644967029b854ed2d11 Author: Eric Sandeen Date: Tue May 28 10:37:39 2013 -0500 xfstests: fix src/seek_sanity_test -t option --Rich From rjohnston@sgi.com Tue May 28 11:04:50 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A8DED7F52 for ; Tue, 28 May 2013 11:04:50 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1B015AC001; Tue, 28 May 2013 09:04:50 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Tue, 28 May 2013 11:03:32 -0500 Message-ID: <51A4D5D7.1040708@sgi.com> Date: Tue, 28 May 2013 11:05:43 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Theodore Ts'o CC: , Ext4 Developers List Subject: Re: [PATCH] add generic/286 to the auto and quick groups References: <1369369981-7035-1-git-send-email-tytso@mit.edu> In-Reply-To: <1369369981-7035-1-git-send-email-tytso@mit.edu> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/23/2013 11:33 PM, Theodore Ts'o wrote: > The generic/286 test tests SEEK_HOLE and SEEK_DATA, and is reasonably > fast. We should just run the test by default. > > Signed-off-by: "Theodore Ts'o" > --- > tests/generic/group | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tests/generic/group b/tests/generic/group > index e2ef70e..bd443c1 100644 > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -103,7 +103,7 @@ > 277 auto ioctl quick metadata > 280 auto quota freeze dangerous > 285 auto rw > -286 other > +286 auto quick other > 288 auto quick ioctl trim > 294 auto quick > 299 auto aio enospc rw stress > Thanks, this patch has been committed: commit f45c6881577221e04f6cfe19d25e571bee088996 Author: Theodore Ts'o Date: Tue May 28 11:01:01 2013 -0500 xfstests: add generic/286 to the auto and quick groups --Rich From davej@redhat.com Tue May 28 11:12:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 697797F51 for ; Tue, 28 May 2013 11:12:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D89B3AC006 for ; Tue, 28 May 2013 09:12:35 -0700 (PDT) X-ASG-Debug-ID: 1369757554-04cbb0049c21d2c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id tKEdKEGI1iDp3REe for ; Tue, 28 May 2013 09:12:34 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4SGCXBt020233 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 28 May 2013 12:12:33 -0400 Received: from gelk.kernelslacker.org (ovpn-113-59.phx2.redhat.com [10.3.113.59]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4SGCWK1015618 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 28 May 2013 12:12:33 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4SGCVuI008131; Tue, 28 May 2013 12:12:31 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4SGCUCJ008130; Tue, 28 May 2013 12:12:30 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 28 May 2013 12:12:30 -0400 From: Dave Jones To: xfs@oss.sgi.com Cc: Linux Kernel Subject: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Message-ID: <20130528161230.GA7577@redhat.com> X-ASG-Orig-Subj: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Mail-Followup-To: Dave Jones , xfs@oss.sgi.com, Linux Kernel MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369757554 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 box crashed, and needed rebooting. On next bootup, when it found the dirty partition, xfs chose to spew and then hang instead of replaying the journal and mounting :( Dave [ 14.694731] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, debug enabled [ 14.722328] XFS (sda2): Mounting Filesystem [ 14.757801] XFS (sda2): Starting recovery (logdev: internal) [ 14.782049] XFS: Assertion failed: fs_is_ok, file: fs/xfs/xfs_dir2_data.c, line: 169 [ 14.783989] ------------[ cut here ]------------ [ 14.785547] kernel BUG at fs/xfs/xfs_message.c:108! [ 14.787169] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC [ 14.789038] Modules linked in: xfs libcrc32c coretemp hwmon kvm_intel kvm crc32c_intel ghash_clmulni_intel microcode pcspkr snd_hda_codec_realtek snd_hda_codec_hdmi e1000e usb_debug snd_hda_intel snd_hda_codec snd_seq ptp snd_seq_device snd_hwdep pps_core snd_pcm snd_page_alloc snd_timer snd soundcore binfmt_misc [ 14.795850] CPU: 1 PID: 300 Comm: mount Not tainted 3.10.0-rc3+ #39 [ 14.800660] task: ffff88022b9e4a40 ti: ffff880240e1a000 task.ti: ffff880240e1a000 [ 14.802737] RIP: 0010:[] [] assfail+0x22/0x30 [xfs] [ 14.802738] RSP: 0018:ffff880240e1b868 EFLAGS: 00010296 [ 14.802739] RAX: 0000000000000048 RBX: ffff88022b653020 RCX: 0000000000000006 [ 14.802739] RDX: 0000000000003900 RSI: ffff88022b9e51c0 RDI: ffff88022b9e4a40 [ 14.802740] RBP: ffff880240e1b868 R08: 0000000000000001 R09: 0000000000000000 [ 14.802740] R10: 0000000000000000 R11: 0000000000000001 R12: ffff880241301bd8 [ 14.802741] R13: 0000000000000000 R14: ffff88022b653ed8 R15: ffff88022b653ed8 [ 14.802741] FS: 00007fecff34a880(0000) GS:ffff880244a00000(0000) knlGS:0000000000000000 [ 14.802742] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 14.802743] CR2: 00007f5bc7bfca60 CR3: 000000022b9f4000 CR4: 00000000001407e0 [ 14.802743] Stack: [ 14.802745] ffff880240e1b8d8 ffffffffa029a1a0 000000022b5dcb40 ffff88022b653000 [ 14.802746] ffff88022b653ff8 ffff88022b653004 ffff880200000004 ffff88022b653029 [ 14.802747] ffff880200000002 ffff88022a86de00 ffff88022b653000 ffff88022b653000 [ 14.802748] Call Trace: [ 14.802761] [] __xfs_dir3_data_check+0x5a0/0x6c0 [xfs] [ 14.802773] [] xfs_dir3_block_verify+0x7a/0x90 [xfs] [ 14.802783] [] xfs_dir3_block_write_verify+0x35/0x120 [xfs] [ 14.802791] [] ? xfs_bdstrat_cb+0x55/0x1a0 [xfs] [ 14.802797] [] _xfs_buf_ioapply+0x6b/0x370 [xfs] [ 14.802801] [] ? wake_up_state+0x20/0x20 [ 14.802807] [] ? xfs_bdstrat_cb+0x55/0x1a0 [xfs] [ 14.802814] [] xfs_buf_iorequest+0x6b/0x1b0 [xfs] [ 14.802820] [] xfs_bdstrat_cb+0x55/0x1a0 [xfs] [ 14.802826] [] __xfs_buf_delwri_submit+0x1ed/0x2f0 [xfs] [ 14.802833] [] xfs_buf_delwri_submit+0x30/0x90 [xfs] [ 14.802847] [] xlog_recover_commit_trans+0xda/0x130 [xfs] [ 14.802858] [] xlog_recover_process_data+0x179/0x2a0 [xfs] [ 14.802870] [] xlog_do_recovery_pass+0x4dd/0x760 [xfs] [ 14.802880] [] xlog_do_log_recovery+0x9b/0x130 [xfs] [ 14.802890] [] xlog_do_recover+0x16/0x1c0 [xfs] [ 14.802900] [] xlog_recover+0x82/0xc0 [xfs] [ 14.802913] [] xfs_log_mount+0xa0/0x1a0 [xfs] [ 14.802924] [] xfs_mountfs+0x3b9/0x800 [xfs] [ 14.802933] [] xfs_fs_fill_super+0x308/0x390 [xfs] [ 14.802936] [] mount_bdev+0x1c0/0x200 [ 14.802944] [] ? xfs_finish_flags+0x130/0x130 [xfs] [ 14.802946] [] ? __kmalloc_track_caller+0x218/0x360 [ 14.802955] [] xfs_fs_mount+0x15/0x20 [xfs] [ 14.802957] [] mount_fs+0x39/0x1b0 [ 14.802959] [] ? __alloc_percpu+0x10/0x20 [ 14.802961] [] vfs_kern_mount+0x63/0xf0 [ 14.802963] [] do_mount+0x23e/0xa20 [ 14.802965] [] ? strndup_user+0x4b/0xf0 [ 14.802967] [] SyS_mount+0x83/0xc0 [ 14.802969] [] tracesys+0xdd/0xe2 [ 14.802984] Code: 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 f1 41 89 d0 48 89 e5 48 89 fa 48 c7 c6 20 67 2e a0 31 ff 31 c0 e8 ce fb ff ff <0f> 0b 66 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 [ 14.802992] RIP [] assfail+0x22/0x30 [xfs] [ 14.802992] RSP [ 40.642521] BUG: soft lockup - CPU#0 stuck for 22s! [fsck.ext2:294] [ 40.644139] Modules linked in: xfs libcrc32c coretemp hwmon kvm_intel kvm crc32c_intel ghash_clmulni_intel microcode pcspkr snd_hda_codec_realtek snd_hda_codec_hdmi e1000e usb_debug snd_hda_intel snd_hda_codec snd_seq ptp snd_seq_device snd_hwdep pps_core snd_pcm snd_page_alloc snd_timer snd soundcore binfmt_misc [ 40.649456] irq event stamp: 141855 [ 40.650742] hardirqs last enabled at (141855): [] retint_swapgs+0xe/0x13 [ 40.652618] hardirqs last disabled at (141854): [] int_with_check+0x53/0x73 [ 40.654515] softirqs last enabled at (137936): [] __do_softirq+0x185/0x430 [ 40.656410] softirqs last disabled at (137913): [] irq_exit+0xcd/0xe0 [ 40.658222] CPU: 0 PID: 294 Comm: fsck.ext2 Tainted: G D 3.10.0-rc3+ #39 [ 40.662692] task: ffff88023d5fca40 ti: ffff8802413e2000 task.ti: ffff8802413e2000 [ 40.664421] RIP: 0010:[] [] smp_call_function_many+0x2be/0x360 [ 40.666343] RSP: 0018:ffff8802413e3d10 EFLAGS: 00000202 [ 40.667808] RAX: 0000000000000001 RBX: ffffffff816ecd20 RCX: ffff880244bd8008 [ 40.669484] RDX: 0000000000000001 RSI: 0000000000000004 RDI: 0000000000000000 [ 40.671159] RBP: ffff8802413e3d68 R08: ffff8802444287e0 R09: 0000000000000000 [ 40.672860] R10: 0000000000000000 R11: 0000000000000000 R12: ffff8802413e3c88 [ 40.674536] R13: ffff8802449d3f00 R14: ffff8802413e2000 R15: ffff88023d5fca40 [ 40.676215] FS: 00007f784e690780(0000) GS:ffff880244800000(0000) knlGS:0000000000000000 [ 40.678014] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 40.679539] CR2: 0000003159c4b102 CR3: 00000002413b7000 CR4: 00000000001407f0 [ 40.681225] Stack: [ 40.682307] 0000000144404240 00000000001d4a80 0000000000000000 ffffffff811e2590 [ 40.684074] ffff880244fd4a80 0000000000000282 ffff88022a760fc0 0000000000000000 [ 40.685838] ffffffff811e2590 0000000000000000 0000000000000001 ffff8802413e3da0 [ 40.687607] Call Trace: [ 40.688754] [] ? __bforget+0x70/0x70 [ 40.690222] [] ? __bforget+0x70/0x70 [ 40.691684] [] on_each_cpu_mask+0x42/0xb0 [ 40.693241] [] ? mark_buffer_async_write+0x20/0x20 [ 40.694847] [] on_each_cpu_cond+0xe4/0x250 [ 40.696366] [] ? __bforget+0x70/0x70 [ 40.697828] [] invalidate_bh_lrus+0x29/0x30 [ 40.699358] [] kill_bdev+0x21/0x30 [ 40.700800] [] __blkdev_put+0x69/0x1b0 [ 40.702279] [] blkdev_put+0x50/0x160 [ 40.703745] [] blkdev_close+0x28/0x30 [ 40.705209] [] __fput+0xf5/0x2d0 [ 40.706619] [] ____fput+0xe/0x10 [ 40.708022] [] task_work_run+0xac/0xe0 [ 40.709487] [] do_notify_resume+0x69/0x90 [ 40.710983] [] int_signal+0x12/0x17 [ 40.712417] Code: 00 41 89 c4 39 f0 0f 8d d5 fd ff ff 48 63 d0 48 8b 0b 48 03 0c d5 40 50 cf 81 f6 41 20 01 74 14 0f 1f 44 00 00 f3 90 f6 41 20 01 <75> f8 48 63 35 e1 6a c3 00 83 f8 ff 48 8b 7b 08 74 b0 39 c6 77 [ 44.790350] ---[ end trace b71cb3732bfc4a50 ]--- [ 44.791921] ------------[ cut here ]------------ [ 44.793459] WARNING: at kernel/exit.c:715 do_exit+0x55/0xcd0() [ 44.795138] Modules linked in: xfs libcrc32c coretemp hwmon kvm_intel kvm crc32c_intel ghash_clmulni_intel microcode pcspkr snd_hda_codec_realtek snd_hda_codec_hdmi e1000e usb_debug snd_hda_intel snd_hda_codec snd_seq ptp snd_seq_device snd_hwdep pps_core snd_pcm snd_page_alloc snd_timer [ 44.800315] [sched_delayed] sched: RT throttling activated [ 44.804099] snd soundcore binfmt_misc [ 44.806032] CPU: 1 PID: 300 Comm: mount Tainted: G D 3.10.0-rc3+ #39 [ 44.811587] ffffffff81a0e953 ffff880240e1b588 ffffffff816e375b ffff880240e1b5c0 [ 44.813612] ffffffff8104a1b1 000000000000000b ffff880240e1b7b8 ffff88022b9e4a40 [ 44.816016] 0000000000000000 0000000000000000 ffff880240e1b5d0 ffffffff8104a28a [ 44.818374] Call Trace: [ 44.819778] [] dump_stack+0x19/0x1b [ 44.821662] [] warn_slowpath_common+0x61/0x80 [ 44.823554] [] warn_slowpath_null+0x1a/0x20 [ 44.825390] [] do_exit+0x55/0xcd0 [ 44.827120] [] ? __const_udelay+0x29/0x30 [ 44.828875] [] ? __rcu_read_unlock+0x54/0xa0 [ 44.831417] [] ? kmsg_dump+0x1bd/0x230 [ 44.833132] [] ? kmsg_dump+0x25/0x230 [ 44.834803] [] oops_end+0x90/0xd0 [ 44.836404] [] die+0x4b/0x70 [ 44.838067] [] do_trap+0x60/0x170 [ 44.839693] [] do_invalid_op+0xa8/0xe0 [ 44.841508] [] ? assfail+0x22/0x30 [xfs] [ 44.841510] [] ? trace_hardirqs_off_thunk+0x3a/0x3c [ 44.841514] [] ? restore_args+0x30/0x30 [ 44.841515] [] invalid_op+0x18/0x20 [ 44.841524] [] ? assfail+0x22/0x30 [xfs] [ 44.841532] [] ? assfail+0x22/0x30 [xfs] [ 44.841545] [] __xfs_dir3_data_check+0x5a0/0x6c0 [xfs] [ 44.841557] [] xfs_dir3_block_verify+0x7a/0x90 [xfs] [ 44.841568] [] xfs_dir3_block_write_verify+0x35/0x120 [xfs] [ 44.841575] [] ? xfs_bdstrat_cb+0x55/0x1a0 [xfs] [ 44.841582] [] _xfs_buf_ioapply+0x6b/0x370 [xfs] [ 44.841585] [] ? wake_up_state+0x20/0x20 [ 44.841591] [] ? xfs_bdstrat_cb+0x55/0x1a0 [xfs] [ 44.841598] [] xfs_buf_iorequest+0x6b/0x1b0 [xfs] [ 44.841604] [] xfs_bdstrat_cb+0x55/0x1a0 [xfs] [ 44.841611] [] __xfs_buf_delwri_submit+0x1ed/0x2f0 [xfs] [ 44.841618] [] xfs_buf_delwri_submit+0x30/0x90 [xfs] [ 44.841632] [] xlog_recover_commit_trans+0xda/0x130 [xfs] [ 44.841644] [] xlog_recover_process_data+0x179/0x2a0 [xfs] [ 44.841656] [] xlog_do_recovery_pass+0x4dd/0x760 [xfs] [ 44.841667] [] xlog_do_log_recovery+0x9b/0x130 [xfs] [ 44.841678] [] xlog_do_recover+0x16/0x1c0 [xfs] [ 44.841688] [] xlog_recover+0x82/0xc0 [xfs] [ 44.841700] [] xfs_log_mount+0xa0/0x1a0 [xfs] [ 44.841712] [] xfs_mountfs+0x3b9/0x800 [xfs] [ 44.841721] [] xfs_fs_fill_super+0x308/0x390 [xfs] [ 44.841723] [] mount_bdev+0x1c0/0x200 [ 44.841732] [] ? xfs_finish_flags+0x130/0x130 [xfs] [ 44.841734] [] ? __kmalloc_track_caller+0x218/0x360 [ 44.841743] [] xfs_fs_mount+0x15/0x20 [xfs] [ 44.841745] [] mount_fs+0x39/0x1b0 [ 44.841747] [] ? __alloc_percpu+0x10/0x20 [ 44.841749] [] vfs_kern_mount+0x63/0xf0 [ 44.841751] [] do_mount+0x23e/0xa20 [ 44.841753] [] ? strndup_user+0x4b/0xf0 [ 44.841755] [] SyS_mount+0x83/0xc0 [ 44.841757] [] tracesys+0xdd/0xe2 [ 44.841795] ---[ end trace b71cb3732bfc4a51 ]--- From bpm@sgi.com Tue May 28 12:56:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 996F87F55 for ; Tue, 28 May 2013 12:56:30 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5F3098F804B; Tue, 28 May 2013 10:56:27 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 23F18500B51; Tue, 28 May 2013 12:56:27 -0500 (CDT) Date: Tue, 28 May 2013 12:56:27 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 Message-ID: <20130528175627.GZ20028@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Dave, On Mon, May 27, 2013 at 04:38:18PM +1000, Dave Chinner wrote: > This is an update for all the fixes I have for 3,10-rc4. > > All the comments on the previous patches have been updated in this > series, and there are two new patches. The first patch adds support > for indicating that the filesystem has CRC enabled to userspace, and > the second fixes the missing CRC updates on the unlinked inode list > manipulations. This seems to be getting a bit out of hand for a release candidate pull request: Fixes for xfs without crcs: f648167f xfs: avoid nesting transactions in xfs_qm_scall_setqlim() xfs: fix split buffer vector log recovery support xfs: kill suid/sgid through the truncate path. Fixes for xfs with crcs: 90253cf1 xfs: remote attribute allocation may be contiguous 913e96bc xfs: remote attribute read too short 4af3644c xfs: remote attribute tail zeroing does too much 6863ef84 xfs: correctly map remote attr buffers during removal 8517de2a xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance d4c712bc xfs: fully initialise temp leaf in xfs_attr3_leaf_compact ad1858d7 xfs: rework remote attr CRCs 9a5b6dee xfs: fix incorrect remote symlink block count xfs: rework dquot CRCs xfs: inode unlinked list needs to recalculate the inode CRC * replaced with "2-3 patches" xfs: fix dir3 freespace block corruption * maybe this effects filesystems w/o crcs? Dev work for xfs with crcs: xfs: increase number of ACL entries for V5 superblocks xfs: don't emit v5 superblock warnings on write xfs: add fsgeom flag for v5 superblock support. xfs: disable swap extents ioctl on CRC enabled filesystems We're representing 3 patches which are clearly approprate for a release candidate, 11 fixes for CRCs + 2 more for the rework of unlinked lists patch, and 4 patches which are development work. We pulled in the CRC work with the understanding that it is an experimental feature that might not be perfect, and with a focus upon preventing regression for existing users. This did not imply that we're going after perfection for CRCs during the 3.10 release candidate series. I'll be happy to review the 17 CRC related patches for inclusion in the master branch ASAP, but I'm afraid 17 patches is a bit much to ask for a release candidate, even if it were -rc2. Here we are in 3.11/feature-bit territory. I'm going to focus on the top 3 for -rc4, and it also looks like 'xfs: fix dir3 freespace block corruption' may be a good candidate. If there are others that can cause trouble for existing users I'll appreciate it if you'll let me know. Thanks, Ben From dave@fromorbit.com Tue May 28 15:36:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0E9DD7CBF for ; Tue, 28 May 2013 15:36:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C17F530404E for ; Tue, 28 May 2013 13:36:21 -0700 (PDT) X-ASG-Debug-ID: 1369773379-04bdf0781723cfc0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id ei5GOLdhOif4OL4J for ; Tue, 28 May 2013 13:36:20 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah4MAOcTpVF5La3j/2dsb2JhbABZgwjCTQSBBhd0giMBAQUnLyMQCBgxOQMbGYgMu2SOAIR4A6h7gyEq Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 06:06:18 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UhQcy-00040f-4t; Wed, 29 May 2013 06:36:16 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UhQcy-0006xS-0f; Wed, 29 May 2013 06:36:16 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 2/2] xfs: inode unlinked list needs to recalculate the inode CRC Date: Wed, 29 May 2013 06:36:13 +1000 X-ASG-Orig-Subj: [PATCH 2/2] xfs: inode unlinked list needs to recalculate the inode CRC Message-Id: <1369773373-26697-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369773373-26697-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-10-git-send-email-david@fromorbit.com> <1369773373-26697-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369773379 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner The inode unlinked list manipulations operate directly on the inode buffer, and so bypass the inode CRC calculation mechanisms. Hence an inode on the unlinked list has an invalid CRC. Fix this by recalculating the CRC whenever we modify an unlinked list pointer in an inode, ncluding during log recovery. This is trivial to do and results in unlinked list operations always leaving a consistent inode in the buffer. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 42 ++++++++++++++++++++++++++++++++++++++---- fs/xfs/xfs_log_recover.c | 9 +++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index efbe1ac..2d993e7 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1579,6 +1579,23 @@ out_bmap_cancel: } /* + * Helper function to calculate range of the inode to log and recalculate the + * on-disk inode crc if necessary. + */ +static int +xfs_iunlink_dinode_calc_crc( + struct xfs_mount *mp, + struct xfs_dinode *dip) +{ + if (dip->di_version < 3) + return sizeof(xfs_agino_t); + + xfs_dinode_calc_crc(mp, dip); + return offsetof(struct xfs_dinode, di_changecount) - + offsetof(struct xfs_dinode, di_next_unlinked); +} + +/* * This is called when the inode's link count goes to 0. * We place the on-disk inode on a list in the AGI. It * will be pulled from this list when the inode is freed. @@ -1638,10 +1655,15 @@ xfs_iunlink( dip->di_next_unlinked = agi->agi_unlinked[bucket_index]; offset = ip->i_imap.im_boffset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc the inode CRC if appropriate */ + xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, ibp); xfs_trans_log_buf(tp, ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + offset + sizeof(xfs_agino_t) - 1); xfs_inobp_check(mp, ibp); + } /* @@ -1723,9 +1745,13 @@ xfs_iunlink_remove( dip->di_next_unlinked = cpu_to_be32(NULLAGINO); offset = ip->i_imap.im_boffset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc the inode CRC if appropriate */ + xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, ibp); xfs_trans_log_buf(tp, ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + offset + sizeof(xfs_agino_t) - 1); xfs_inobp_check(mp, ibp); } else { xfs_trans_brelse(tp, ibp); @@ -1796,9 +1822,13 @@ xfs_iunlink_remove( dip->di_next_unlinked = cpu_to_be32(NULLAGINO); offset = ip->i_imap.im_boffset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc the inode CRC if appropriate */ + xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, ibp); xfs_trans_log_buf(tp, ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + offset + sizeof(xfs_agino_t) - 1); xfs_inobp_check(mp, ibp); } else { xfs_trans_brelse(tp, ibp); @@ -1809,9 +1839,13 @@ xfs_iunlink_remove( last_dip->di_next_unlinked = cpu_to_be32(next_agino); ASSERT(next_agino != 0); offset = last_offset + offsetof(xfs_dinode_t, di_next_unlinked); + + /* need to recalc the inode CRC if appropriate */ + xfs_iunlink_dinode_calc_crc(mp, dip); + xfs_trans_inode_buf(tp, last_ibp); xfs_trans_log_buf(tp, last_ibp, offset, - (offset + sizeof(xfs_agino_t) - 1)); + offset + sizeof(xfs_agino_t) - 1); xfs_inobp_check(mp, last_ibp); } return 0; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 83088d9..45a85ff 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1912,6 +1912,15 @@ xlog_recover_do_inode_buffer( buffer_nextp = (xfs_agino_t *)xfs_buf_offset(bp, next_unlinked_offset); *buffer_nextp = *logged_nextp; + + /* + * If necessary, recalculate the CRC in the on-disk inode. We + * have to leave the inode in a consistent state for whoever + * reads it next.... + */ + xfs_dinode_calc_crc(mp, (struct xfs_dinode *) + xfs_buf_offset(bp, i * mp->m_sb.sb_inodesize)); + } return 0; -- 1.7.10.4 From dave@fromorbit.com Tue May 28 15:36:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 883827CBF for ; Tue, 28 May 2013 15:36:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 21164AC008 for ; Tue, 28 May 2013 13:36:23 -0700 (PDT) X-ASG-Debug-ID: 1369773381-04bdf063bd1e51e0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id eShgJMvnZcz5nDiy for ; Tue, 28 May 2013 13:36:21 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiQMAOcTpVF5La3j/2dsb2JhbABZgwiMR7YGBIEGF3SCJAEFViMQCEk5AxuIJbtkjgCBOoM+A6h7gyEq Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 06:06:18 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UhQcy-00040d-3B; Wed, 29 May 2013 06:36:16 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UhQcx-0006xL-Ut; Wed, 29 May 2013 06:36:15 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 9a,9b v2, replacements] xfs: unlinked list crcs Date: Wed, 29 May 2013 06:36:11 +1000 X-ASG-Orig-Subj: [PATCH 9a,9b v2, replacements] xfs: unlinked list crcs Message-Id: <1369773373-26697-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369636707-15150-10-git-send-email-david@fromorbit.com> References: <1369636707-15150-10-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369773381 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Ben, These are the replacement patches for the unlinked inode list CRC fixes. The first patch is the log recovery item ordering fix, which affects all filesystems, and the second is the reworked unlinked inode list CRC fixes. Cheers, Dave. From dave@fromorbit.com Tue May 28 15:36:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 959067F37 for ; Tue, 28 May 2013 15:36:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2B96BAC009 for ; Tue, 28 May 2013 13:36:23 -0700 (PDT) X-ASG-Debug-ID: 1369773379-04bdf0781723cfc0002-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id Zr2aqQzuzEZuUGGa for ; Tue, 28 May 2013 13:36:21 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah4MAOcTpVF5La3j/2dsb2JhbABZgwjCTQSBBhd0giMBAQUnLyMQCBgxOQMbGYgMu2SOAIR4A5NqlRGDISqBLAICHAY Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 06:06:18 +0930 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1UhQcy-00040e-4F; Wed, 29 May 2013 06:36:16 +1000 Received: from dave by disappointment with local (Exim 4.80) (envelope-from ) id 1UhQcx-0006xO-Vu; Wed, 29 May 2013 06:36:15 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: bpm@sgi.com Subject: [PATCH 1/2] xfs: fix log recovery transaction item reordering Date: Wed, 29 May 2013 06:36:12 +1000 X-ASG-Orig-Subj: [PATCH 1/2] xfs: fix log recovery transaction item reordering Message-Id: <1369773373-26697-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1369773373-26697-1-git-send-email-david@fromorbit.com> References: <1369636707-15150-10-git-send-email-david@fromorbit.com> <1369773373-26697-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369773381 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner There are several constraints that inode allocation and unlink logging impose on log recovery. These all stem from the fact that inode alloc/unlink are logged in buffers, but all other inode changes are logged in inode items. Hence there are ordering constraints that recovery must follow to ensure the correct result occurs. As it turns out, this ordering has been working mostly by chance than good management. The existing code moves all buffers except cancelled buffers to the head of the list, and everything else to the tail of the list. The problem with this is that is interleaves inode items with the buffer cancellation items, and hence whether the inode item in an cancelled buffer gets replayed is essentially left to chance. Further, this ordering causes problems for log recovery when inode CRCs are enabled. It typically replays the inode unlink buffer long before it replays the inode core changes, and so the CRC recorded in an unlink buffer is going to be invalid and hence any attempt to validate the inode in the buffer is going to fail. Hence we really need to enforce the ordering that the inode alloc/unlink code has expected log recovery to have since inode chunk de-allocation was introduced back in 2003... Signed-off-by: Dave Chinner --- fs/xfs/xfs_log_recover.c | 65 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index d6204d1..83088d9 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1599,10 +1599,43 @@ xlog_recover_add_to_trans( } /* - * Sort the log items in the transaction. Cancelled buffers need - * to be put first so they are processed before any items that might - * modify the buffers. If they are cancelled, then the modifications - * don't need to be replayed. + * Sort the log items in the transaction. + * + * The ordering constraints are defined by the inode allocation and unlink + * behaviour. The rules are: + * + * 1. Every item is only logged once in a given transaction. Hence it + * represents the last logged state of the item. Hence ordering is + * dependent on the order in which operations need to be performed so + * required initial conditions are always met. + * + * 2. Cancelled buffers are recorded in pass 1 in a separate table and + * there's nothing to replay from them so we can simply cull them + * from the transaction. However, we can't do that until after we've + * replayed all the other items because they may be dependent on the + * cancelled buffer and replaying the cancelled buffer can remove it + * form the cancelled buffer table. Hence they have tobe done last. + * + * 3. Inode allocation buffers must be replayed before inode items that + * read the buffer and replay changes into it. + * + * 4. Inode unlink buffers must be replayed after inode items are replayed. + * This ensures that inodes are completely flushed to the inode buffer + * in a "free" state before we remove the unlinked inode list pointer. + * + * Hence the ordering needs to be inode allocation buffers first, inode items + * second, inode unlink buffers third and cancelled buffers last. + * + * But there's a problem with that - we can't tell an inode allocation buffer + * apart from a regular buffer, so we can't separate them. We can, however, + * tell an inode unlink buffer from the others, and so we can separate them out + * from all the other buffers and move them to last. + * + * Hence, 4 lists, in order from head to tail: + * - buffer_list for all buffers except cancelled/inode unlink buffers + * - item_list for all non-buffer items + * - inode_buffer_list for inode unlink buffers + * - cancel_list for the cancelled buffers */ STATIC int xlog_recover_reorder_trans( @@ -1612,6 +1645,10 @@ xlog_recover_reorder_trans( { xlog_recover_item_t *item, *n; LIST_HEAD(sort_list); + LIST_HEAD(cancel_list); + LIST_HEAD(buffer_list); + LIST_HEAD(inode_buffer_list); + LIST_HEAD(inode_list); list_splice_init(&trans->r_itemq, &sort_list); list_for_each_entry_safe(item, n, &sort_list, ri_list) { @@ -1619,12 +1656,18 @@ xlog_recover_reorder_trans( switch (ITEM_TYPE(item)) { case XFS_LI_BUF: - if (!(buf_f->blf_flags & XFS_BLF_CANCEL)) { + if (buf_f->blf_flags & XFS_BLF_CANCEL) { trace_xfs_log_recover_item_reorder_head(log, trans, item, pass); - list_move(&item->ri_list, &trans->r_itemq); + list_move(&item->ri_list, &cancel_list); break; } + if (buf_f->blf_flags & XFS_BLF_INODE_BUF) { + list_move(&item->ri_list, &inode_buffer_list); + break; + } + list_move_tail(&item->ri_list, &buffer_list); + break; case XFS_LI_INODE: case XFS_LI_DQUOT: case XFS_LI_QUOTAOFF: @@ -1632,7 +1675,7 @@ xlog_recover_reorder_trans( case XFS_LI_EFI: trace_xfs_log_recover_item_reorder_tail(log, trans, item, pass); - list_move_tail(&item->ri_list, &trans->r_itemq); + list_move_tail(&item->ri_list, &inode_list); break; default: xfs_warn(log->l_mp, @@ -1643,6 +1686,14 @@ xlog_recover_reorder_trans( } } ASSERT(list_empty(&sort_list)); + if (!list_empty(&buffer_list)) + list_splice(&buffer_list, &trans->r_itemq); + if (!list_empty(&inode_list)) + list_splice_tail(&inode_list, &trans->r_itemq); + if (!list_empty(&inode_buffer_list)) + list_splice_tail(&inode_buffer_list, &trans->r_itemq); + if (!list_empty(&cancel_list)) + list_splice_tail(&cancel_list, &trans->r_itemq); return 0; } -- 1.7.10.4 From MAILER-DAEMON Tue May 28 15:50:49 2013 Return-Path: <> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_MIME_NO_TEXT, T_TVD_MIME_NO_HEADERS autolearn=ham version=3.3.1 X-Original-To: linux-xfs@OSS.SGI.COM Delivered-To: linux-xfs@OSS.SGI.COM Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 880AA7CBF for ; Tue, 28 May 2013 15:50:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 208A1AC008 for ; Tue, 28 May 2013 13:50:46 -0700 (PDT) X-ASG-Debug-ID: 1369774244-04cb6c4741225760001-dIjHVC Received: from postscanB.acsu.buffalo.edu (postscanb.acsu.buffalo.edu [128.205.5.199]) by cuda.sgi.com with ESMTP id LigTNmwN6bkH5Ifk for ; Tue, 28 May 2013 13:50:44 -0700 (PDT) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 128.205.5.199 Received: from listserv.buffalo.edu (listserv.buffalo.edu [128.205.4.140]) by postscanB.acsu.buffalo.edu (Postfix) with ESMTP id 851322AB36 for ; Tue, 28 May 2013 16:50:44 -0400 (EDT) Date: Tue, 28 May 2013 16:50:44 -0400 From: owner-LISTSERV@LISTSERV.BUFFALO.EDU Subject: Undelivered mail To: linux-xfs@OSS.SGI.COM X-ASG-Orig-Subj: Undelivered mail Message-ID: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="SFWQacAYVULNQYFGdbQIOXLPcHWcSE" X-Barracuda-Connect: postscanb.acsu.buffalo.edu[128.205.5.199] X-Barracuda-Start-Time: 1369774244 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, BSF_SC0_SA590, EMPTY_ENV_FROM, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.00 NO_REAL_NAME From: does not include a real name 0.20 BSF_SC0_SA590 Custom Rule SA590 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message --SFWQacAYVULNQYFGdbQIOXLPcHWcSE --> Error description: Error-For: CONFOCAL@LISTSERV.BUFFALO.EDU Error-Code: 5.1.1 Error-Text: No such list. Error-End: One error reported. --SFWQacAYVULNQYFGdbQIOXLPcHWcSE Content-Type: message/delivery-status Reporting-MTA: dns; LISTSERV.BUFFALO.EDU Final-Recipient: RFC822; CONFOCAL@LISTSERV.BUFFALO.EDU Action: failed Status: 5.1.1 (No such list) --SFWQacAYVULNQYFGdbQIOXLPcHWcSE Content-Type: message/rfc822 Return-Path: Delivered-To: confocal@listserv.acsu.buffalo.edu Received: (qmail 20223 invoked from network); 28 May 2013 20:50:42 -0000 Received: from unknown (HELO oss.sgi.com) (14.161.5.155) by listserv.buffalo.edu with SMTP; 28 May 2013 20:50:42 -0000 From: linux-xfs@oss.sgi.com To: confocal@listserv.acsu.buffalo.edu Subject: Status Date: Wed, 29 May 2013 03:49:58 +0700 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0001_725E81EE.33915E2D" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 --SFWQacAYVULNQYFGdbQIOXLPcHWcSE-- From david@fromorbit.com Tue May 28 16:10:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C41B67CBF for ; Tue, 28 May 2013 16:10:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A9709304051 for ; Tue, 28 May 2013 14:10:15 -0700 (PDT) X-ASG-Debug-ID: 1369775413-04cb6c4742226d20001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id uT7iBkUgL1MbWY8o for ; Tue, 28 May 2013 14:10:14 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap4OAAocpVF5La3j/2dsb2JhbABZgwi9MYUcBAGBBRd0giMBAQU6HDMIAxgJJQ8FJQMhARKIDLt+Fo1qgSSDVAOXOpFBgyEq Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 06:40:13 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhR9o-000457-M9; Wed, 29 May 2013 07:10:12 +1000 Date: Wed, 29 May 2013 07:10:12 +1000 From: Dave Chinner To: Dave Jones , xfs@oss.sgi.com, Linux Kernel Subject: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Message-ID: <20130528211012.GX29466@dastard> X-ASG-Orig-Subj: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. References: <20130528161230.GA7577@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528161230.GA7577@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369775413 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 28, 2013 at 12:12:30PM -0400, Dave Jones wrote: > box crashed, and needed rebooting. On next bootup, when it found the dirty partition, > xfs chose to spew and then hang instead of replaying the journal and mounting :( > > Dave > > [ 14.694731] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, debug enabled > [ 14.722328] XFS (sda2): Mounting Filesystem > [ 14.757801] XFS (sda2): Starting recovery (logdev: internal) > [ 14.782049] XFS: Assertion failed: fs_is_ok, file: fs/xfs/xfs_dir2_data.c, line: 169 A directory block has an entry that is not in the hash index. Either there's an underlying corruption on disk, or there's an inconsistency in what has been logged and so an entire change has not been replayed. Hence the post recovery verification has thrown a corruption error.... If you haven't already repaired the filesystem, can you send me a metadump of the filesystem in question? > [ 40.642521] BUG: soft lockup - CPU#0 stuck for 22s! [fsck.ext2:294] I'm not sure what this has to do with the XFS problem - it's apparently stuck in invalidate_bh_lrus() walking a CPU mask.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Tue May 28 16:15:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D35087CBF for ; Tue, 28 May 2013 16:15:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5E1F0AC00A for ; Tue, 28 May 2013 14:15:51 -0700 (PDT) X-ASG-Debug-ID: 1369775750-04cb6c473f2274f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 54koVlBZfPjxs43i for ; Tue, 28 May 2013 14:15:50 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4SLFlaq031721 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 28 May 2013 17:15:47 -0400 Received: from gelk.kernelslacker.org (ovpn-113-59.phx2.redhat.com [10.3.113.59]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4SLFkbX021935 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 28 May 2013 17:15:47 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4SLFjjF027775; Tue, 28 May 2013 17:15:45 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4SLFix1027774; Tue, 28 May 2013 17:15:44 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 28 May 2013 17:15:44 -0400 From: Dave Jones To: Dave Chinner Cc: xfs@oss.sgi.com, Linux Kernel Subject: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Message-ID: <20130528211544.GB24342@redhat.com> X-ASG-Orig-Subj: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Mail-Followup-To: Dave Jones , Dave Chinner , xfs@oss.sgi.com, Linux Kernel References: <20130528161230.GA7577@redhat.com> <20130528211012.GX29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528211012.GX29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369775750 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 29, 2013 at 07:10:12AM +1000, Dave Chinner wrote: > On Tue, May 28, 2013 at 12:12:30PM -0400, Dave Jones wrote: > > box crashed, and needed rebooting. On next bootup, when it found the dirty partition, > > xfs chose to spew and then hang instead of replaying the journal and mounting :( > > > > [ 14.694731] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, debug enabled > > [ 14.722328] XFS (sda2): Mounting Filesystem > > [ 14.757801] XFS (sda2): Starting recovery (logdev: internal) > > [ 14.782049] XFS: Assertion failed: fs_is_ok, file: fs/xfs/xfs_dir2_data.c, line: 169 > > A directory block has an entry that is not in the hash index. > Either there's an underlying corruption on disk, or there's an > inconsistency in what has been logged and so an entire change has > not been replayed. Hence the post recovery verification has thrown a > corruption error.... > > If you haven't already repaired the filesystem, can you send me a > metadump of the filesystem in question? Sorry, too late. If I can repro, I'll do so next time. FYI, I ran xfs_repair and it just hung. Wouldn't even answer ctrl-c. Rebooted, and then it mounted and recovered just fine! > > [ 40.642521] BUG: soft lockup - CPU#0 stuck for 22s! [fsck.ext2:294] > > I'm not sure what this has to do with the XFS problem - it's > apparently stuck in invalidate_bh_lrus() walking a CPU mask.... there for completion, it was sandwiched between the other xfs bits :) Dave From david@fromorbit.com Tue May 28 16:27:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 325967CBF for ; Tue, 28 May 2013 16:27:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id F329A8F804B for ; Tue, 28 May 2013 14:27:41 -0700 (PDT) X-ASG-Debug-ID: 1369776459-04bdf078172413c0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id k0d4EHnooiLN8gmm for ; Tue, 28 May 2013 14:27:40 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap4OAOogpVF5La3j/2dsb2JhbABZgwi9MYUcBAGBBRd0giMBAQUnExwzCBgMJQ8FJQM0iAy7eRaNQyeBJBaCXWEDlzqRQYMhKoEs Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 06:57:25 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhRQS-00047z-Ui for xfs@oss.sgi.com; Wed, 29 May 2013 07:27:24 +1000 Date: Wed, 29 May 2013 07:27:24 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH 11/9] xfs: fix remote attribute invalidation for a leaf Message-ID: <20130528212724.GB29338@dastard> X-ASG-Orig-Subj: [PATCH 11/9] xfs: fix remote attribute invalidation for a leaf References: <1369636707-15150-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369636707-15150-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369776459 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132304 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When invalidating an attribute leaf block block, there might be remote attributes that it points to. With the recent rework of the remote attribute format, we have to make sure we calculate the length of the attribute correctly. We aren't doing that in xfs_attr3_leaf_inactive(), so fix it. Signed-off-by: Dave Chinner --- fs/xfs/xfs_attr_leaf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index d788302..31d3cd1 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -3258,7 +3258,7 @@ xfs_attr3_leaf_inactive( name_rmt = xfs_attr3_leaf_name_remote(leaf, i); if (name_rmt->valueblk) { lp->valueblk = be32_to_cpu(name_rmt->valueblk); - lp->valuelen = XFS_B_TO_FSB(dp->i_mount, + lp->valuelen = xfs_attr3_rmt_blocks(dp->i_mount, be32_to_cpu(name_rmt->valuelen)); lp++; } From david@fromorbit.com Tue May 28 16:32:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 055D37CBF for ; Tue, 28 May 2013 16:32:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D592C8F8049 for ; Tue, 28 May 2013 14:32:53 -0700 (PDT) X-ASG-Debug-ID: 1369776771-04cb6c4742228ab0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id X4fDy8fwYw855S37 for ; Tue, 28 May 2013 14:32:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap4OAPchpVF5La3j/2dsb2JhbABZgwi9MYUcBAGBBRd0giMBAQU6HDMIAxgJJQ8FJQMhARKIDLwDFo1qgSSCc2EDlzqRQYMhKg Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 07:02:49 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhRVg-00049i-Dt; Wed, 29 May 2013 07:32:48 +1000 Date: Wed, 29 May 2013 07:32:48 +1000 From: Dave Chinner To: Dave Jones , xfs@oss.sgi.com, Linux Kernel Subject: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Message-ID: <20130528213248.GC29338@dastard> X-ASG-Orig-Subj: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. References: <20130528161230.GA7577@redhat.com> <20130528211012.GX29466@dastard> <20130528211544.GB24342@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528211544.GB24342@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369776771 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132304 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 28, 2013 at 05:15:44PM -0400, Dave Jones wrote: > On Wed, May 29, 2013 at 07:10:12AM +1000, Dave Chinner wrote: > > On Tue, May 28, 2013 at 12:12:30PM -0400, Dave Jones wrote: > > > box crashed, and needed rebooting. On next bootup, when it found the dirty partition, > > > xfs chose to spew and then hang instead of replaying the journal and mounting :( > > > > > > [ 14.694731] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, debug enabled > > > [ 14.722328] XFS (sda2): Mounting Filesystem > > > [ 14.757801] XFS (sda2): Starting recovery (logdev: internal) > > > [ 14.782049] XFS: Assertion failed: fs_is_ok, file: fs/xfs/xfs_dir2_data.c, line: 169 > > > > A directory block has an entry that is not in the hash index. > > Either there's an underlying corruption on disk, or there's an > > inconsistency in what has been logged and so an entire change has > > not been replayed. Hence the post recovery verification has thrown a > > corruption error.... > > > > If you haven't already repaired the filesystem, can you send me a > > metadump of the filesystem in question? > > Sorry, too late. If I can repro, I'll do so next time. > FYI, I ran xfs_repair and it just hung. Wouldn't even answer ctrl-c. > Rebooted, and then it mounted and recovered just fine! Strange. I can't think of any reason outside a kernel problem for xfs_repair going into an uninterruptible sleep. Did it happen after the repair completed (i.e. after phase 7)? If so, then closing the block device might have tripped the same problem that fsck.ext2 hit.... > > > [ 40.642521] BUG: soft lockup - CPU#0 stuck for 22s! [fsck.ext2:294] > > > > I'm not sure what this has to do with the XFS problem - it's > > apparently stuck in invalidate_bh_lrus() walking a CPU mask.... > > there for completion, it was sandwiched between the other xfs bits :) *nod* You never know what might be relevant to the problem :) Cheers, Dave. -- Dave Chinner david@fromorbit.com From davej@redhat.com Tue May 28 16:41:44 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 465837CBF for ; Tue, 28 May 2013 16:41:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id B07B7AC008 for ; Tue, 28 May 2013 14:41:43 -0700 (PDT) X-ASG-Debug-ID: 1369777302-04cb6c4740229420001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KRgrF3t3hXsC7vsU for ; Tue, 28 May 2013 14:41:42 -0700 (PDT) X-Barracuda-Envelope-From: davej@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4SLfffn028542 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 28 May 2013 17:41:41 -0400 Received: from gelk.kernelslacker.org (ovpn-113-59.phx2.redhat.com [10.3.113.59]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4SLfe2C004536 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 28 May 2013 17:41:40 -0400 Received: from gelk.kernelslacker.org (localhost [127.0.0.1]) by gelk.kernelslacker.org (8.14.7/8.14.5) with ESMTP id r4SLfdnc031103; Tue, 28 May 2013 17:41:39 -0400 Received: (from davej@localhost) by gelk.kernelslacker.org (8.14.7/8.14.7/Submit) id r4SLfbWE031099; Tue, 28 May 2013 17:41:37 -0400 X-Authentication-Warning: gelk.kernelslacker.org: davej set sender to davej@redhat.com using -f Date: Tue, 28 May 2013 17:41:37 -0400 From: Dave Jones To: Dave Chinner Cc: xfs@oss.sgi.com, Linux Kernel Subject: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Message-ID: <20130528214137.GC24342@redhat.com> X-ASG-Orig-Subj: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Mail-Followup-To: Dave Jones , Dave Chinner , xfs@oss.sgi.com, Linux Kernel References: <20130528161230.GA7577@redhat.com> <20130528211012.GX29466@dastard> <20130528211544.GB24342@redhat.com> <20130528213248.GC29338@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528213248.GC29338@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369777302 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, May 29, 2013 at 07:32:48AM +1000, Dave Chinner wrote: > On Tue, May 28, 2013 at 05:15:44PM -0400, Dave Jones wrote: > > On Wed, May 29, 2013 at 07:10:12AM +1000, Dave Chinner wrote: > > > On Tue, May 28, 2013 at 12:12:30PM -0400, Dave Jones wrote: > > > > box crashed, and needed rebooting. On next bootup, when it found the dirty partition, > > > > xfs chose to spew and then hang instead of replaying the journal and mounting :( > > > > > > > > [ 14.694731] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, debug enabled > > > > [ 14.722328] XFS (sda2): Mounting Filesystem > > > > [ 14.757801] XFS (sda2): Starting recovery (logdev: internal) > > > > [ 14.782049] XFS: Assertion failed: fs_is_ok, file: fs/xfs/xfs_dir2_data.c, line: 169 > > > > > > A directory block has an entry that is not in the hash index. > > > Either there's an underlying corruption on disk, or there's an > > > inconsistency in what has been logged and so an entire change has > > > not been replayed. Hence the post recovery verification has thrown a > > > corruption error.... > > > > > > If you haven't already repaired the filesystem, can you send me a > > > metadump of the filesystem in question? > > > > Sorry, too late. If I can repro, I'll do so next time. > > FYI, I ran xfs_repair and it just hung. Wouldn't even answer ctrl-c. > > Rebooted, and then it mounted and recovered just fine! > > Strange. I can't think of any reason outside a kernel problem for > xfs_repair going into an uninterruptible sleep. Did it happen after > the repair completed (i.e. after phase 7)? If so, then closing the > block device might have tripped the same problem that fsck.ext2 > hit.... didn't even get that far. It opened the block dev, and then just sat there. I left it for a few minutes before deciding it was hung. And of course, this is an SSD, so there was no way I could tell if there was any IO going on by sound/feel/lights. Dave From bpm@sgi.com Tue May 28 16:49:32 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 365247CBF for ; Tue, 28 May 2013 16:49:32 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id ED9448F8050; Tue, 28 May 2013 14:49:31 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id C4F0D500B51; Tue, 28 May 2013 16:49:31 -0500 (CDT) Date: Tue, 28 May 2013 16:49:31 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems Message-ID: <20130528214931.GA20028@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-7-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369636707-15150-7-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Mon, May 27, 2013 at 04:38:24PM +1000, Dave Chinner wrote: > From: Dave Chinner > > Currently, swapping extents from one inode to another is a simple > act of switching data and attribute forks from one inode to another. > This, unfortunately in no longer so simple with CRC enabled > filesystems as there is owner information embedded into the BMBT > blocks that are swapped between inodes. Hence swapping the forks > between inodes results in the inodes having mapping blocks that > point to the wrong owner and hence are considered corrupt. > > To fix this we need an extent tree block or record based swap > algorithm so that the BMBT block owner information can be updated > atomically in the swap transaction. This is a significant piece of > new work, so for the moment simply don't allow swap extent > operations to succeed on CRC enabled filesystems. > > Signed-off-by: Dave Chinner I believe we do want to have functional swap extents for crc enabled filesystems. But this is fine as long as it is temporary. Thanks Eric for pointing this out on IRC. Looks fine. Reviewed-by: Ben Myers From david@fromorbit.com Tue May 28 17:04:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 179B87CBF for ; Tue, 28 May 2013 17:04:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9752DAC001 for ; Tue, 28 May 2013 15:04:14 -0700 (PDT) X-ASG-Debug-ID: 1369778652-04cb6c474022b130001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id esWJ0ycDoy2YVDB4 for ; Tue, 28 May 2013 15:04:13 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap4OABwppVF5La3j/2dsb2JhbABZgwm9MYUcBAGBBRd0giMBAQU6HDMIAxgJJQ8FJQMhARKIDLt5Fo1qgSSCc2EDlzqRQYMhKg Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 07:34:11 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhS01-0004Kn-JE; Wed, 29 May 2013 08:04:09 +1000 Date: Wed, 29 May 2013 08:04:09 +1000 From: Dave Chinner To: Dave Jones , xfs@oss.sgi.com, Linux Kernel Subject: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. Message-ID: <20130528220409.GD29338@dastard> X-ASG-Orig-Subj: Re: 3.10-rc3 xfs mount/recovery failure & ext fsck hang. References: <20130528161230.GA7577@redhat.com> <20130528211012.GX29466@dastard> <20130528211544.GB24342@redhat.com> <20130528213248.GC29338@dastard> <20130528214137.GC24342@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528214137.GC24342@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369778652 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132306 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 28, 2013 at 05:41:37PM -0400, Dave Jones wrote: > On Wed, May 29, 2013 at 07:32:48AM +1000, Dave Chinner wrote: > > On Tue, May 28, 2013 at 05:15:44PM -0400, Dave Jones wrote: > > > On Wed, May 29, 2013 at 07:10:12AM +1000, Dave Chinner wrote: > > > > On Tue, May 28, 2013 at 12:12:30PM -0400, Dave Jones wrote: > > > > > box crashed, and needed rebooting. On next bootup, when it found the dirty partition, > > > > > xfs chose to spew and then hang instead of replaying the journal and mounting :( > > > > > > > > > > [ 14.694731] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, debug enabled > > > > > [ 14.722328] XFS (sda2): Mounting Filesystem > > > > > [ 14.757801] XFS (sda2): Starting recovery (logdev: internal) > > > > > [ 14.782049] XFS: Assertion failed: fs_is_ok, file: fs/xfs/xfs_dir2_data.c, line: 169 > > > > > > > > A directory block has an entry that is not in the hash index. > > > > Either there's an underlying corruption on disk, or there's an > > > > inconsistency in what has been logged and so an entire change has > > > > not been replayed. Hence the post recovery verification has thrown a > > > > corruption error.... > > > > > > > > If you haven't already repaired the filesystem, can you send me a > > > > metadump of the filesystem in question? > > > > > > Sorry, too late. If I can repro, I'll do so next time. > > > FYI, I ran xfs_repair and it just hung. Wouldn't even answer ctrl-c. > > > Rebooted, and then it mounted and recovered just fine! > > > > Strange. I can't think of any reason outside a kernel problem for > > xfs_repair going into an uninterruptible sleep. Did it happen after > > the repair completed (i.e. after phase 7)? If so, then closing the > > block device might have tripped the same problem that fsck.ext2 > > hit.... > > didn't even get that far. It opened the block dev, and then just sat there. > I left it for a few minutes before deciding it was hung. > And of course, this is an SSD, so there was no way I could tell if there > was any IO going on by sound/feel/lights. OK. Normally when it hangs you can kill it or ctrl-c out because it gets stuck on a futex. You can then run xfs_repair -P to turn off threading (and speed :() to avoid such hangs. but given that you couldn't kill it, it doesn't sound like that sort of problem.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue May 28 18:54:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6736F7CBF for ; Tue, 28 May 2013 18:54:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D87D0AC001 for ; Tue, 28 May 2013 16:54:33 -0700 (PDT) X-ASG-Debug-ID: 1369785267-04cbb0049e23c330001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id C5z19R9VImSiQCRp for ; Tue, 28 May 2013 16:54:28 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Aq0RANFCpVF5La3j/2dsb2JhbABPCoMJML0KhRwEAYEGF3SCIwEBBAE6HCMFCwgDDgoJJQ8FJQMhE4gHBQ27SgQWjUsfgR0Hg1QDlzqRQYMhKg Received: from ppp121-45-173-227.lns20.syd6.internode.on.net (HELO dastard) ([121.45.173.227]) by ipmail05.adl6.internode.on.net with ESMTP; 29 May 2013 09:24:26 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhTii-0004WQ-HN; Wed, 29 May 2013 09:54:24 +1000 Date: Wed, 29 May 2013 09:54:24 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 Message-ID: <20130528235424.GY29466@dastard> X-ASG-Orig-Subj: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <20130528175627.GZ20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528175627.GZ20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369785267 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132314 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 28, 2013 at 12:56:27PM -0500, Ben Myers wrote: > Hi Dave, > > On Mon, May 27, 2013 at 04:38:18PM +1000, Dave Chinner wrote: > > This is an update for all the fixes I have for 3,10-rc4. > > > > All the comments on the previous patches have been updated in this > > series, and there are two new patches. The first patch adds support > > for indicating that the filesystem has CRC enabled to userspace, and > > the second fixes the missing CRC updates on the unlinked inode list > > manipulations. > > This seems to be getting a bit out of hand for a release candidate pull > request: You don't need to send them all at once. The ones you committed from my initial -rc2 series could just be sent to Linus immediately, and that halves the current outstanding queue. Then there's only 8-9 patches remaining... > > Fixes for xfs without crcs: > f648167f xfs: avoid nesting transactions in xfs_qm_scall_setqlim() > xfs: fix split buffer vector log recovery support > xfs: kill suid/sgid through the truncate path. And the log recovery ordering fix I just sent out. > Fixes for xfs with crcs: > 90253cf1 xfs: remote attribute allocation may be contiguous > 913e96bc xfs: remote attribute read too short > 4af3644c xfs: remote attribute tail zeroing does too much > 6863ef84 xfs: correctly map remote attr buffers during removal > 8517de2a xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance > d4c712bc xfs: fully initialise temp leaf in xfs_attr3_leaf_compact All of which fix filesystem corruption or - in the case of the buffer cache coherency problems - can lead to stale data exposure. > ad1858d7 xfs: rework remote attr CRCs Fixes cache coherency issues via a change in the on-disk format for remote attributes. We need to get that included before a full release is made, otherwise we need feature bits to distinguish between the original and the new formats. > 9a5b6dee xfs: fix incorrect remote symlink block count > xfs: rework dquot CRCs More filesystem corruption fixes. > xfs: inode unlinked list needs to recalculate the inode CRC * replaced with "2-3 patches" Another corruption fix, now with an addition log recovery ordering fix which prevents log recovery from potentially causing silent filesystem corruption. > xfs: fix dir3 freespace block corruption * maybe this effects filesystems w/o crcs? Again, a filesystem corruption, including fixing a problem in the on-disk format definition. While it probably doesn't affect non-crc filesystems, it's a landmine that should be removed.... > Dev work for xfs with crcs: > xfs: increase number of ACL entries for V5 superblocks On disk format change. We need to get that out before release, otherwise it needs a feature bit. > xfs: don't emit v5 superblock warnings on write Fixes a nasty log spamming problem. Certainly not development code. > xfs: add fsgeom flag for v5 superblock support. Needed for userspace support of CRC filesystems, trivial patch. if we expect anyone to test this kernel code, we need this patch so userspace can correctly identify crc-enabled filesystems. > xfs: disable swap extents ioctl on CRC enabled filesystems Filesystem corruption fix, caused simply by running xfs_fsr. But, really, this entire series is not that much change in terms of volume: $ git diff --stat b38958d..bf6331a -- fs/xfs fs/xfs/xfs_acl.c | 31 ++-- fs/xfs/xfs_acl.h | 30 +++- fs/xfs/xfs_attr_leaf.c | 74 ++++++--- fs/xfs/xfs_attr_remote.c | 408 +++++++++++++++++++++++++++++------------------- fs/xfs/xfs_attr_remote.h | 10 ++ fs/xfs/xfs_buf.c | 1 + fs/xfs/xfs_buf_item.c | 7 +- fs/xfs/xfs_dfrag.c | 8 + fs/xfs/xfs_dir2_format.h | 1 + fs/xfs/xfs_dir2_node.c | 13 +- fs/xfs/xfs_dquot.c | 37 ++--- fs/xfs/xfs_fs.h | 1 + fs/xfs/xfs_fsops.c | 4 +- fs/xfs/xfs_inode.c | 42 ++++- fs/xfs/xfs_iops.c | 47 ++++-- fs/xfs/xfs_log_recover.c | 95 ++++++++++- fs/xfs/xfs_mount.c | 18 ++- fs/xfs/xfs_qm.c | 36 +++-- fs/xfs/xfs_qm_syscalls.c | 40 +++-- fs/xfs/xfs_quota.h | 2 + fs/xfs/xfs_symlink.c | 20 +-- 21 files changed, 612 insertions(+), 313 deletions(-) And a large proportion of that change is the single attr CRC rework patch. > We're representing 3 patches which are clearly approprate for a release > candidate, 11 fixes for CRCs + 2 more for the rework of unlinked lists patch, > and 4 patches which are development work. Most file filesystem corruptions. Without those fixes, CRC enabled filesystems simple cannot be used without all these patches being applied. It's not an experimental feature at this point - it's just broken. > We pulled in the CRC work with the understanding that it is an > experimental feature that might not be perfect, and with a focus > upon preventing regression for existing users. This did not imply > that we're going after perfection for CRCs during the 3.10 release > candidate series. Right, but there was also the understanding that the CRC code would be usable by release time, and so there would be fixes committed throughout the -rc series to fix problems with the CRC code so that it is usable. As it is, the result of all these patches is that xfstests is almost entirely passing on a 4k block size filesystem. The only tests that aren't passing are those that already fail or require userspace support that isn't currently available (e.g. xfs-db write support, metadump). And 1k block size filesystems mostly pass xfstests, too, though there are random assert failures from time to time. IOWs after this patch set is applied, the CRC functionality fits the definition of the 'experimental' tag. It mostly works, but still has some lurking issues that need to be flushed out. I'm unlikely to be posting 2-3 bug fix patches a day from this point onwards.... Indeed, the last two days I've been doing 3.11 development work because xfstests on CRC enabled filesystems is now usable for regression testing. i.e. the majority of the "easy-to-hit" problems have been flushed out by this patchset. > I'll be happy to review the 17 CRC related patches for inclusion > in the master branch ASAP, That's a good start, but... > but I'm afraid 17 patches is a bit much > to ask for a release candidate, even if it were -rc2. ... I think you're being way too conservative here. BTRFS in january for an -rc merge: https://lkml.org/lkml/2013/1/25/11 That was 30 commits and +300/-100 lines. There was a another pull request 2 weeks later with another 9 commits. The same thing happened with the RAID5/6 integration into btrfs in 3.9 - the -rc merges following it had 13, 7 and 15 commits. And for 3.10-rc, the first post-rc1 merge was 25 commits (+350/-250 lines). And if you want another example, the ext4 extent status cache fixes that went into 3.9-rc4: https://lkml.org/lkml/2013/3/21/644 that was 21 commits and +540/-81 lines. Yup, new filesystem code has bugs, and they get fixed in -rc releases. What makes new XFS code so special we can't do this? The amount of change we are talking about here is not unreasonable even for an -rc4 release, as evidenced by other filesystems under development. Hence I don't think "it's too late" is really a viable reason for not fixing all these filesystem corruption issues in the CRC code... > Here we are in 3.11/feature-bit territory. I'd much prefer that we don't have to add code to 3.11 to reject any CRC-enabled filesystem without any feature bits set because we don't support a broken remote attr format that was fixed weeks before 3.10 released but was not allowed to be fixed in 3.10. That's just crazy from any release management perspective you care to look at it from. Ben, if the problem is that you can't review all the fixes in a timely manner, then we can fix that. I'm sure that Mark, Eric and Brian can help review the code if this is the sticking point. There are also people like Michael who are actively testing the CRC code and reporting bugs to me all the time, so there's demand for these fixes to be integrated into the 3.10 tree... Everyone knew there would be fixes for the CRC code coming along in the -rc period - we discussed it on the weekly concall before the the CRC code was merged into 3.10. Hence I'm a bit surprised to get what appears to be a blanket rejection for these fixes to the CRC code this early in the 3.10-rc cycle. Let's not waste all the effort that we put into getting the CRC code into 3.10 by not fixing known corruptions and on-disk format deficiencies. Releasing CRC support in a seriously broken state that we need to add permanent workarounds for in 3.11 is about the worst possible outcome that could occur right now.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From chinsang63@yahoo.com Tue May 28 20:23:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.7 required=5.0 tests=FORGED_YAHOO_RCVD, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,FREEMAIL_REPLYTO, T_FILL_THIS_FORM_SHORT,T_HK_NAME_FM_DR autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4A3777CBF for ; Tue, 28 May 2013 20:23:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 219878F8037 for ; Tue, 28 May 2013 18:23:13 -0700 (PDT) X-ASG-Debug-ID: 1369790587-04cbb0049c2414d0001-w1Z2WR Received: from qmail1.indiatimeshostingpanel.com (qmail1.indiatimeshostingpanel.com [202.54.119.151]) by cuda.sgi.com with ESMTP id pXEtDZK9xop3NZHs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 28 May 2013 18:23:10 -0700 (PDT) X-Barracuda-Envelope-From: chinsang63@yahoo.com X-Barracuda-Apparent-Source-IP: 202.54.119.151 Received: (qmail 5798 invoked by uid 48); 28 May 2013 23:42:23 +0530 Received: from static.kpn.net (static.kpn.net [188.204.44.70]) by webmail.swastikcoal.com (Horde MIME library) with HTTP; Tue, 28 May 2013 23:42:05 +0530 Message-ID: <20130528234205.j1d3f0jm8gck8w40@webmail.swastikcoal.com> Date: Tue, 28 May 2013 23:42:05 +0530 From: Dr Chang Reply-To: chang.cchang@yahoo.com.hk To: undisclosed-recipients: ; Subject: Good Day To You My Friend. MIME-Version: 1.0 X-ASG-Orig-Subj: Good Day To You My Friend. Content-Type: text/plain; charset=ISO-8859-1; DelSp="Yes"; format="flowed" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable User-Agent: Internet Messaging Program (IMP) H3 (4.1.5) X-Barracuda-Connect: qmail1.indiatimeshostingpanel.com[202.54.119.151] X-Barracuda-Start-Time: 1369790589 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.41 X-Barracuda-Spam-Status: No, SCORE=1.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=FORGED_YAHOO_RCVD, FORGED_YAHOO_RCVD_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132320 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 FORGED_YAHOO_RCVD 'From' yahoo.com does not match 'Received' headers 1.41 FORGED_YAHOO_RCVD_2 'From' yahoo.com does not match 'Received' headers Good Day To You My Friend. Es ist verst=E4ndlich, dass Sie vielleicht ein bisschen besorgt, weil =20 Sie mich nicht kennen, aber ich habe ein lukratives Business-Vorschlag von gemeinsamem Interesse mit Ihnen teilen. Ich habe Ihren Hinweis in meiner Suche nach jemandem, der mir =20 passtvorgeschlagen Gesch=E4ftsbeziehung. Ich war beunruhigt, bevor ich =20 in Ihrem Profil kam, obwohl ich nicht mit Ihnen getroffen haben bevor jetzt, aber ich glaube, man hat das Vertrauen in jemanden, der =20 manchmal gelingt, Leben zu riskieren. Ich bin Herr chang T.C. Lee eine s=FCdkoreanische von Geburt, gl=FCcklich = =20 verheiratet mit Kindern, und ich bin ein Direktor der Hang Seng Bank Ltd Ich habe eine vertrauliche Gesch=E4ftsinformationen Vorschlag =20 f=FCr Sie. Ich brauche dich um mich bei der Ausf=FChrung eines =20 Unternehmens zu unterst=FCtzen Projekt aus Hong Kong zu Ihrem Land. Es geht um die =DCbertragung einer =20 gro=DFen Summe Geld. Alles =FCber diese Transaktion gilt rechtlich ohne reibungslos durchgef=FChrt werden. Bitte =20 bem=FChen, h=F6chste Diskretion in allen Angelegenheiten zu beobachten Zusammenhang mit diesem Problem. Sobald die Mittel wurden erfolgreich in Ihr Konto =FCberwiesen, so =20 werden wir im Verh=E4ltnis zu teilen, indem vereinbart werden uns beide. Ich will lieber Sie erreichen mich auf meiner privaten =20 E-Mail-Adresse (chang.cchang@yahoo.com.hk) und schlie=DFlich nach da=DF ich Ihnen weitere Informationen zu diesem Vorgang ist zu =20 erbringen. Sollten Sie Interesse haben, senden Sie bitte dennach mir =20 dringend: 1. Vollst=E4ndige Namen 2. Beruf 3. Privat Telefonnummer 4. Aktuelle Adresse Bitte, wenn Sie nicht daran interessiert sind diese E-Mail l=F6schen und =20 jagen mich nicht, weil ich mir das meine Karriere und das Leben bin meiner Familie auf dem Spiel mit diesem Wagnis. Obwohl nichts wagte =20 ist nichts gewonnen. Ihre fr=FCheste Reaktion auf dieses Schreiben wird gesch=E4tzt. Mit freundlichen Gr=FC=DFen, Mr.Pt. Lee Hang Seng Bank Limited Hong Kong. {Asia} E-Mail: - chang.cchang@yahoo.com.hk From bounce4@nhasachphuongnam.com Wed May 29 02:35:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 560677F37 for ; Wed, 29 May 2013 02:35:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3233E8F8049 for ; Wed, 29 May 2013 00:34:58 -0700 (PDT) X-ASG-Debug-ID: 1369812892-04cb6c474124c630001-w1Z2WR Received: from s150-56.vonlinemail.net (s150-56.vonlinemail.net [103.20.150.56]) by cuda.sgi.com with ESMTP id tH8m3okbHRA0LRQz (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 May 2013 00:34:54 -0700 (PDT) X-Barracuda-Envelope-From: bounce4@nhasachphuongnam.com X-Barracuda-Apparent-Source-IP: 103.20.150.56 Received: from nhasachphuongnam.com ([103.20.151.11]) (authenticated user pnc@vonlinemail.net) by s150-46.vonlinemail.net (Kerio Connect 7.1.3) for linux-xfs@oss.sgi.com; Wed, 29 May 2013 14:27:51 +0700 To: linux-xfs@oss.sgi.com Subject: =?UTF-8?B?KE5ow6AgU8OhY2ggUGjGsMahbmcgTmFtIE9ubGluZSkgU8OhY2ggYsOhbiBjaOG6oXkgbmfDoHkgMjkvMDUvMjAxMw==?= Message-ID: <078f3575b93d104488363a1f6b3e1761@nhasachphuongnam.com> X-ASG-Orig-Subj: =?UTF-8?B?KE5ow6AgU8OhY2ggUGjGsMahbmcgTmFtIE9ubGluZSkgU8OhY2ggYsOhbiBjaOG6oXkgbmfDoHkgMjkvMDUvMjAxMw==?= Date: Wed, 29 May 2013 13:55:38 +0700 From: "newsletter@nhasachphuongnam.com" Reply-To: newsletter@nhasachphuongnam.com MIME-Version: 1.0 X-Mailer-LID: 39 List-Unsubscribe: X-Mailer-RecptId: 1261380 X-Mailer-SID: 164 X-Mailer-Sent-By: 1 Content-Type: multipart/alternative; charset="UTF-8"; boundary="b1_69c1e98fba0b7a85af0a7077b655a66c" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: s150-56.vonlinemail.net[103.20.150.56] X-Barracuda-Start-Time: 1369812893 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.00 X-Barracuda-Spam-Status: No, SCORE=2.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC3_MV0164, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132344 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 2.00 BSF_SC3_MV0164 Custom rule MV0164 --b1_69c1e98fba0b7a85af0a7077b655a66c Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit Your email client cannot read this email. To view it online, please go here: http://nhasachphuongnam.com/iem/display.php?M=1261380&C=b2bb50bcd7f10894d24d30c3057c9a41&S=164&L=39&N=148 To stop receiving these emails:http://nhasachphuongnam.com/iem/unsubscribe.php?M=1261380&C=b2bb50bcd7f10894d24d30c3057c9a41&L=39&N=164 Powered by Interspire --b1_69c1e98fba0b7a85af0a7077b655a66c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 8bit
Bản tin NHASACHPHUONGNAM.COM
 

Let's Go Student Book/Workbook 1A

Let's go student book/workbook 1A. Bigger, brighter, better than ever! More vocabulary and language to help students communicate in English. More...

80.000 â‚«



Có thể bạn cÅ©ng quan tâm:

Let's Go Student Book/Workbook 1B

83.000 â‚«

 

Let's Go Student Book 3

109.000 â‚«

 

Chuyện NghỠCủa Thủy

108.000 â‚«
120.000 â‚«

 

Nói Sao Cho Trẻ Chịu Nghe & Nghe Sao Cho Trẻ Chịu Nói

90.000 â‚«
100.000 â‚«





Powered by
Interspire
--b1_69c1e98fba0b7a85af0a7077b655a66c-- From noreply@riabiznes.ru Wed May 29 03:11:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 12D737F37 for ; Wed, 29 May 2013 03:11:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 86865AC001 for ; Wed, 29 May 2013 01:11:47 -0700 (PDT) X-ASG-Debug-ID: 1369815105-04cbb0049a259120001-NocioJ Received: from riabiznes.ru (riabiznes.ru [92.63.106.190]) by cuda.sgi.com with ESMTP id RRE0s8QQGbH1jXmj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 May 2013 01:11:46 -0700 (PDT) X-Barracuda-Envelope-From: noreply@riabiznes.ru X-Barracuda-Apparent-Source-IP: 92.63.106.190 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=riabiznes.ru; s=dkim; h=Message-Id:Date:MIME-Version:Content-Type:To:Subject:From; bh=uj1yLUCzoI1K+rr9Js4BuvvuJYjtiRKusajc5gd0rgo=; b=NtWioL8hnh2aZyCkKczNWE9Rrmr5FpRdKtx1/+n2SHtzMVV0YvXx+IZYev75Kt654GY3T3YLlsd9AeGaAMxHvrBGMePicR64JFwWEX6lVc+M2dHdn3KbJB0SbyD+W0cIC9PctuCcb1lSs+wOMFxP/WFvNj1/UIpUsYJMtxqr1qs=; Received: (helo=pppoe-77-234-11-43.kosnet.ru) }}by riabiznes.ru with esmtpa (Exim 4.80.1) (envelope-from ) id 1UhbU0-0003Wd-Hp for xfs@oss.sgi.com; Wed, 29 May 2013 12:11:44 +0400 From: "=?utf-8?B?0JrQvtC70YXQvtC3?=" Subject: =?utf-8?B?0K3RgtC+INC90LDRiNCwINC60L7RgNC+0LLQsCDQuCDQvNGLINC10LUg0LTQvtC40Lw=?= To: "xfs" X-ASG-Orig-Subj: =?utf-8?B?0K3RgtC+INC90LDRiNCwINC60L7RgNC+0LLQsCDQuCDQvNGLINC10LUg0LTQvtC40Lw=?= Content-Type: multipart/alternative; boundary="Jm2BXUS=_Vkm1ekUSuAFgsFwyPNncBYXMJ" MIME-Version: 1.0 Organization: =?utf-8?B?0JTQtdC90LXQttC90LDRjyDQutC+0YDQvtCy0LA=?= Date: Wed, 29 May 2013 12:11:48 +0400 Message-Id: X-Barracuda-Connect: riabiznes.ru[92.63.106.190] X-Barracuda-Start-Time: 1369815105 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132346 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format --Jm2BXUS=_Vkm1ekUSuAFgsFwyPNncBYXMJ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF=D0=9C=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C =D0=94=D0=95=D0=9D=D0=95= =D0=96=D0=9D=D0=90=D0=AF =D0=9A=D0=9E=D0=A0=D0=9E=D0=92=D0=90-=D0=B8=D0= =B4=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9 =D0=B2=D0=B0=D1=80=D0=B8= =D0=B0=D0=BD=D1=82 =D0=B2=D1=8B=D0=B3=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0= =BE =D0=B7=D0=B0=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0!=20 =D0=9F=D1=80=D0=B5=D0=B4=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC =D0=BF=D0= =BE=D0=B4=D0=BE=D0=B8=D1=82=D1=8C 8 =D0=BA=D0=BE=D1=80=D0=BE=D0=B2 =D0= =B8 =D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D1=82=D1=8C =D0=B4=D0=B5=D0=BD= =D0=B5=D0=B6=D0=BD=D1=8B=D0=B9 =D0=BD=D0=B0=D0=B4=D0=BE=D0=B9! =D0=9D=D0=B0=D1=88 =D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82 =D0=BB=D0=BE=D0= =BC=D0=B0=D0=B5=D1=82 =D0=B2=D1=81=D0=B5 =D1=81=D1=82=D0=B5=D1=80=D0=B5= =D0=BE=D1=82=D0=B8=D0=BF=D1=8B, =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=B0=D0= =B3=D0=B0=D1=8F =D0=B2 =D0=BE=D0=B4=D0=BD=D0=BE=D0=BC =D1=84=D0=BB=D0=B0= =D0=BA=D0=BE=D0=BD=D0=B5 9 =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8= =D0=BA=D0=BE=D0=B2 =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D0=B8. =D0=A1=D0=B0=D0=B9=D1=82: =D0=9D=D0=B0=D0=B4=D0=BE=D0=B8=D1=82=D1=8C =D0=BA=D0=BE=D1=80=D0=BE=D0= =B2=D1=83 =D0=9A=D0=9B=D0=98=D0=9A=20 --Jm2BXUS=_Vkm1ekUSuAFgsFwyPNncBYXMJ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF

=D0=9C=D0=BE=D0=B4=D0=B5= =D0=BB=D1=8C =D0=94=D0=95=D0=9D=D0=95=D0=96=D0=9D=D0=90=D0=AF =D0=9A=D0= =9E=D0=A0=D0=9E=D0=92=D0=90-=D0=B8=D0=B4=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD= =D1=8B=D0=B9 =D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82 =D0=B2=D1=8B=D0= =B3=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE =D0=B7=D0=B0=D1=80=D0=B0=D0=B1= =D0=BE=D1=82=D0=BA=D0=B0!

=D0=9F=D1=80=D0=B5=D0=B4= =D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC =D0=BF=D0=BE=D0=B4=D0=BE=D0=B8=D1= =82=D1=8C 8 =D0=BA=D0=BE=D1=80=D0=BE=D0=B2 =D0=B8 =D0=BF=D0=BE=D0=BB=D1= =83=D1=87=D0=B8=D1=82=D1=8C =D0=B4=D0=B5=D0=BD=D0=B5=D0=B6=D0=BD=D1=8B= =D0=B9 =D0=BD=D0=B0=D0=B4=D0=BE=D0=B9!
=D0=9D=D0=B0=D1=88 =D0=BF=D1= =80=D0=BE=D0=B5=D0=BA=D1=82 =D0=BB=D0=BE=D0=BC=D0=B0=D0=B5=D1=82 =D0=B2= =D1=81=D0=B5 =D1=81=D1=82=D0=B5=D1=80=D0=B5=D0=BE=D1=82=D0=B8=D0=BF=D1= =8B, =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=B0=D0=B3=D0=B0=D1=8F =D0=B2 =D0= =BE=D0=B4=D0=BD=D0=BE=D0=BC =D1=84=D0=BB=D0=B0=D0=BA=D0=BE=D0=BD=D0=B5= 9  =D0=B8=D1=81=D1=82=D0= =BE=D1=87=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2 =D0=BF=D1=80=D0=B8=D0=B1=D1=8B= =D0=BB=D0=B8.


=D0= =A1=D0=B0=D0=B9=D1=82:


&nb= sp;=D0=9D=D0=B0=D0=B4=D0=BE=D0=B8=D1=82=D1=8C =D0=BA=D0=BE= =D1=80=D0=BE=D0=B2=D1=83 =D0=9A=D0=9B=D0=98=D0=9A

--Jm2BXUS=_Vkm1ekUSuAFgsFwyPNncBYXMJ-- From noreply@riabiznes.ru Wed May 29 03:39:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E25AB7F37 for ; Wed, 29 May 2013 03:39:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 70BEAAC003 for ; Wed, 29 May 2013 01:39:51 -0700 (PDT) X-ASG-Debug-ID: 1369816785-04cb6c47422501a0001-NocioJ Received: from riabiznes.ru (riabiznes.ru [92.63.106.190]) by cuda.sgi.com with ESMTP id KoeEg2dsEscbInrX (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 May 2013 01:39:46 -0700 (PDT) X-Barracuda-Envelope-From: noreply@riabiznes.ru X-Barracuda-Apparent-Source-IP: 92.63.106.190 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=riabiznes.ru; s=dkim; h=Message-Id:Date:MIME-Version:Content-Type:To:Subject:From; bh=9eClsoW3JubumTpk7pxy2EuYi0lFq/J3pe8NVDdEk8w=; b=hgbUslZwgeZpk88ykG2JkkWA7K5nBTBrPeF0M8jvVjOLArYRq7rqAAbXbhvZCgMd5Ra0ZjZ3YZQAIdpV8igyw8KOnLpgNl455o/8awctxaXQ+WmnElX0TMkHSKzGosZeP0rs8LeeTnTo434UJN7JPhKZWm8WM+K0T9U8oU0Z6+o=; Received: (helo=pppoe-77-234-11-43.kosnet.ru) }}by riabiznes.ru with esmtpa (Exim 4.80.1) (envelope-from ) id 1Uhbv6-00099F-Vh for xfs@oss.sgi.com; Wed, 29 May 2013 12:39:45 +0400 From: "=?utf-8?B?0JrQvtC70YXQvtC3?=" Subject: =?utf-8?B?0K3RgtC+INC90LDRiNCwINC60L7RgNC+0LLQsCDQuCDQvNGLINC10LUg0LTQvtC40Lw=?= To: "xfs" X-ASG-Orig-Subj: =?utf-8?B?0K3RgtC+INC90LDRiNCwINC60L7RgNC+0LLQsCDQuCDQvNGLINC10LUg0LTQvtC40Lw=?= Content-Type: multipart/alternative; boundary="R6Bb9QIFBZ=_PNmpy3kB7hL9UkwDOV0rR2" MIME-Version: 1.0 Organization: =?utf-8?B?0JTQtdC90LXQttC90LDRjyDQutC+0YDQvtCy0LA=?= Date: Wed, 29 May 2013 12:39:48 +0400 Message-Id: X-Barracuda-Connect: riabiznes.ru[92.63.106.190] X-Barracuda-Start-Time: 1369816786 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132348 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format --R6Bb9QIFBZ=_PNmpy3kB7hL9UkwDOV0rR2 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF=D0=9C=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C =D0=94=D0=95=D0=9D=D0=95= =D0=96=D0=9D=D0=90=D0=AF =D0=9A=D0=9E=D0=A0=D0=9E=D0=92=D0=90-=D0=B8=D0= =B4=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9 =D0=B2=D0=B0=D1=80=D0=B8= =D0=B0=D0=BD=D1=82 =D0=B2=D1=8B=D0=B3=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0= =BE =D0=B7=D0=B0=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0!=20 =D0=9F=D1=80=D0=B5=D0=B4=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC =D0=BF=D0= =BE=D0=B4=D0=BE=D0=B8=D1=82=D1=8C 8 =D0=BA=D0=BE=D1=80=D0=BE=D0=B2 =D0= =B8 =D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D1=82=D1=8C =D0=B4=D0=B5=D0=BD= =D0=B5=D0=B6=D0=BD=D1=8B=D0=B9 =D0=BD=D0=B0=D0=B4=D0=BE=D0=B9! =D0=9D=D0=B0=D1=88 =D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82 =D0=BB=D0=BE=D0= =BC=D0=B0=D0=B5=D1=82 =D0=B2=D1=81=D0=B5 =D1=81=D1=82=D0=B5=D1=80=D0=B5= =D0=BE=D1=82=D0=B8=D0=BF=D1=8B, =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=B0=D0= =B3=D0=B0=D1=8F =D0=B2 =D0=BE=D0=B4=D0=BD=D0=BE=D0=BC =D1=84=D0=BB=D0=B0= =D0=BA=D0=BE=D0=BD=D0=B5 9 =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8= =D0=BA=D0=BE=D0=B2 =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D0=B8. =D0=A1=D0=B0=D0=B9=D1=82: =D0=9D=D0=B0=D0=B4=D0=BE=D0=B8=D1=82=D1=8C =D0=BA=D0=BE=D1=80=D0=BE=D0= =B2=D1=83 =D0=9A=D0=9B=D0=98=D0=9A=20 --R6Bb9QIFBZ=_PNmpy3kB7hL9UkwDOV0rR2 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =EF=BB=BF

=D0=9C=D0=BE=D0=B4=D0=B5= =D0=BB=D1=8C =D0=94=D0=95=D0=9D=D0=95=D0=96=D0=9D=D0=90=D0=AF =D0=9A=D0= =9E=D0=A0=D0=9E=D0=92=D0=90-=D0=B8=D0=B4=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD= =D1=8B=D0=B9 =D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82 =D0=B2=D1=8B=D0= =B3=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE =D0=B7=D0=B0=D1=80=D0=B0=D0=B1= =D0=BE=D1=82=D0=BA=D0=B0!

=D0=9F=D1=80=D0=B5=D0=B4= =D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC =D0=BF=D0=BE=D0=B4=D0=BE=D0=B8=D1= =82=D1=8C 8 =D0=BA=D0=BE=D1=80=D0=BE=D0=B2 =D0=B8 =D0=BF=D0=BE=D0=BB=D1= =83=D1=87=D0=B8=D1=82=D1=8C =D0=B4=D0=B5=D0=BD=D0=B5=D0=B6=D0=BD=D1=8B= =D0=B9 =D0=BD=D0=B0=D0=B4=D0=BE=D0=B9!
=D0=9D=D0=B0=D1=88 =D0=BF=D1= =80=D0=BE=D0=B5=D0=BA=D1=82 =D0=BB=D0=BE=D0=BC=D0=B0=D0=B5=D1=82 =D0=B2= =D1=81=D0=B5 =D1=81=D1=82=D0=B5=D1=80=D0=B5=D0=BE=D1=82=D0=B8=D0=BF=D1= =8B, =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=B0=D0=B3=D0=B0=D1=8F =D0=B2 =D0= =BE=D0=B4=D0=BD=D0=BE=D0=BC =D1=84=D0=BB=D0=B0=D0=BA=D0=BE=D0=BD=D0=B5= 9  =D0=B8=D1=81=D1=82=D0= =BE=D1=87=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2 =D0=BF=D1=80=D0=B8=D0=B1=D1=8B= =D0=BB=D0=B8.


=D0= =A1=D0=B0=D0=B9=D1=82:


&nb= sp;=D0=9D=D0=B0=D0=B4=D0=BE=D0=B8=D1=82=D1=8C =D0=BA=D0=BE= =D1=80=D0=BE=D0=B2=D1=83 =D0=9A=D0=9B=D0=98=D0=9A

--R6Bb9QIFBZ=_PNmpy3kB7hL9UkwDOV0rR2-- From rjohnston@sgi.com Wed May 29 08:17:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0FD827F37 for ; Wed, 29 May 2013 08:17:45 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay1.corp.sgi.com (Postfix) with ESMTP id DD34D8F8059; Wed, 29 May 2013 06:17:41 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 29 May 2013 08:16:20 -0500 Message-ID: <51A6002D.4020003@sgi.com> Date: Wed, 29 May 2013 08:18:37 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eryu Guan CC: Subject: Re: [PATCH] xfstests: fix typo in check References: <1369072319-13738-1-git-send-email-eguan@redhat.com> In-Reply-To: <1369072319-13738-1-git-send-email-eguan@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/20/2013 12:51 PM, Eryu Guan wrote: > There is no $testname, should be $test_name > > Signed-off-by: Eryu Guan Looks good. Reviewed-by Rich Johnston From rjohnston@sgi.com Wed May 29 08:19:08 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0B6897F50 for ; Wed, 29 May 2013 08:19:08 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id DE69F304039; Wed, 29 May 2013 06:19:04 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 29 May 2013 08:17:44 -0500 Message-ID: <51A60080.4080002@sgi.com> Date: Wed, 29 May 2013 08:20:00 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Eryu Guan CC: Subject: Re: [PATCH] xfstests: fix typo in check References: <1369072319-13738-1-git-send-email-eguan@redhat.com> In-Reply-To: <1369072319-13738-1-git-send-email-eguan@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/20/2013 12:51 PM, Eryu Guan wrote: > There is no $testname, should be $test_name > > Signed-off-by: Eryu Guan Thanks, this patch has been committed: commit 38d58591fc0607bfd262fc8d363e52047fcf0e9c Author: Eryu Guan Date: Wed May 29 08:12:44 2013 -0500 xfstests: fix typo in check --Rich From prvs=8861dae52b=mlwenger@hacc.edu Wed May 29 08:43:45 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B2E027F37 for ; Wed, 29 May 2013 08:43:45 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9B85B304051 for ; Wed, 29 May 2013 06:43:45 -0700 (PDT) X-ASG-Debug-ID: 1369835024-04cbb0049a270d40001-NocioJ Received: from spamfilter.hacc.edu (spamfilter.hacc.edu [199.254.212.64]) by cuda.sgi.com with ESMTP id nyfPNtsVR1cfCm6S (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 May 2013 06:43:44 -0700 (PDT) X-Barracuda-Envelope-From: prvs=8861dae52b=mlwenger@hacc.edu X-Barracuda-Apparent-Source-IP: 199.254.212.64 Received: from HB-PXSV02V.ad.hacc.edu (hb-pxsv02v.hacc.edu [172.16.4.35]) by spamfilter.hacc.edu (8.14.5/8.14.5) with ESMTP id r4TDdRKC017957 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Wed, 29 May 2013 09:39:27 -0400 Received: from HB-PXMB01P.ad.hacc.edu ([fe80::6c6b:c38e:b753:457f]) by HB-PXSV02V.ad.hacc.edu ([fe80::881b:12d2:91cb:4e3a%12]) with mapi id 14.02.0283.003; Wed, 29 May 2013 09:39:27 -0400 From: "Wenger, Michelle" Subject: Loan Thread-Topic: Loan X-ASG-Orig-Subj: Loan Thread-Index: Ac5cce++afOC6WedSw+kLjZER21SZQ== Date: Wed, 29 May 2013 13:39:26 +0000 Message-ID: <71B46CAA1C48334A982064AEFE9FA36151DDED9C@HB-PXMB01P.ad.hacc.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.4.84] Content-Type: multipart/alternative; boundary="_000_71B46CAA1C48334A982064AEFE9FA36151DDED9CHBPXMB01Padhacc_" MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8626,1.0.431,0.0.0000 definitions=2013-05-29_05:2013-05-29,2013-05-29,1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=39 spamscore=39 suspectscore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=7.0.1-1211240000 definitions=main-1305290117 X-Barracuda-Connect: spamfilter.hacc.edu[199.254.212.64] X-Barracuda-Start-Time: 1369835024 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.23 X-Barracuda-Spam-Status: No, SCORE=1.23 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132368 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; --_000_71B46CAA1C48334A982064AEFE9FA36151DDED9CHBPXMB01Padhacc_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello...3% Loan Offer to any part of the world...for more info. please cont= act: (nitrofc@e-mail.ua) This email and any files attached from HACC, Central Pennsylvania's Communi= ty College are confidential and intended solely for use by the individual o= r entity to whom addressed. If you have received this email in error please= notify postmaster@hacc.edu This message may contain confidential informati= on and is intended only for the individual named. If you are not the named = addressee do not disseminate, distribute or copy this e-mail. Please notify= the sender immediately by e-mail if you have received this e-mail by mista= ke and delete from your system. If you are not the intended recipient you a= re notified that disclosing, copying, distributing or taking any action in = reliance on the contents of this information is strictly prohibited. --_000_71B46CAA1C48334A982064AEFE9FA36151DDED9CHBPXMB01Padhacc_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hello...3% Loan Offer to any part of the world...for more info. please= contact: (nitrofc@e-mail.ua) This email and any files attached from HACC, Central Pennsylvania's Communi= ty College are confidential and intended solely for use by the individual o= r entity to whom addressed. If you have received this email in error please= notify postmaster@hacc.edu This message may contain confidential information and is intended only for the = individual named. If you are not the named addressee do not disseminate, di= stribute or copy this e-mail. Please notify the sender immediately by e-mai= l if you have received this e-mail by mistake and delete from your system. If you are not the intended recipi= ent you are notified that disclosing, copying, distributing or taking any a= ction in reliance on the contents of this information is strictly prohibite= d. --_000_71B46CAA1C48334A982064AEFE9FA36151DDED9CHBPXMB01Padhacc_-- From p.pisati@gmail.com Wed May 29 08:56:46 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2B1AC7F37 for ; Wed, 29 May 2013 08:56:46 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 15A318F8039 for ; Wed, 29 May 2013 06:56:46 -0700 (PDT) X-ASG-Debug-ID: 1369835804-04cb6c4740266560001-NocioJ Received: from mail-ee0-f47.google.com (mail-ee0-f47.google.com [74.125.83.47]) by cuda.sgi.com with ESMTP id lk4M4SSxXVnJVydz (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 29 May 2013 06:56:44 -0700 (PDT) X-Barracuda-Envelope-From: p.pisati@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.83.47 Received: by mail-ee0-f47.google.com with SMTP id t10so5441476eei.20 for ; Wed, 29 May 2013 06:56:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=1R5I2yLiN6iGCXtXWAAm94az4i7HRT9zUmLt3oe5pP0=; b=sYW6peKaNhly+fWHq/R2EluDaAemLwi5RJvn6+v8augL6gIB11+XHsLwbb3Wzt4KVl XhZCgxTGixRXoib5Pzth9arO5C73t0N87yMkcNXZpZGH42an/wfHT7yjSXb+43rFxa2h oKYlHQBa5Cc0MC1aHJy16g2pbd3B5utww5dl+5pJQz16pxEZy8uIqDPi6uPEWDpZRtmE 8+BUGSqRo+vu+BOVa9uqY5cLjzLKGjvJkop5laWdZLqIbiNie6Qnb+TlsVxwCkXvRYHa NMz9vTnOlaCfx0rUrs0TZ0S6ndMuJq6uHkZ1fiaBus5BiPw6lfSNDcA+Wenyju5y+Zke N5eQ== X-Received: by 10.15.54.4 with SMTP id s4mr3560196eew.49.1369835803878; Wed, 29 May 2013 06:56:43 -0700 (PDT) Received: from gmail.com (2-230-238-136.ip204.fastwebnet.it. [2.230.238.136]) by mx.google.com with ESMTPSA id t6sm18043876eev.14.2013.05.29.06.56.42 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 29 May 2013 06:56:43 -0700 (PDT) Date: Wed, 29 May 2013 15:56:41 +0200 From: Paolo Pisati To: Dave Chinner Cc: Paolo Pisati , xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130529135641.GB4889@luxor.wired.org> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> <20130519011354.GE6495@dastard> <20130520170710.GA2591@luxor.wired.org> <20130521000208.GF24543@dastard> <20130523143456.GB19815@luxor.wired.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523143456.GB19815@luxor.wired.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-ee0-f47.google.com[74.125.83.47] X-Barracuda-Start-Time: 1369835804 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132370 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Thu, May 23, 2013 at 04:34:56PM +0200, Paolo Pisati wrote: > On Tue, May 21, 2013 at 10:02:09AM +1000, Dave Chinner wrote: > > > > And that fix I mentioned will be useless if you don't apply the > > patch that avoids the vmap allocation problem.... > > > ok, so i recompiled a kernel+aforementioend fix, i repartitioned my disk and i > ran the swift-bench for 2 days in a row until i got this: i'm testing a 3.5.y kernel plus those 3 patches: 549142a xfs: don't use speculative prealloc for small files f0843f4 xfs: limit speculative prealloc size on sparse files 454da09 xfs: inode allocation should use unmapped buffers. and i can confirm that: -using a small fs (2G) i cannot reproduce any -ENOSPC or vmalloc() problem anymore, the benchmark runs until running out of inodes -using a bigger fs (~250G), two days and my tests are still running good -- bye, p. From ceifund@fatherjosephbaldo.co.ke Wed May 29 10:05:55 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_NUMERIC_HELO, T_HK_SPAMMY_FILENAME autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 375E37F37 for ; Wed, 29 May 2013 10:05:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id AEBD28F8050 for ; Wed, 29 May 2013 08:05:50 -0700 (PDT) X-ASG-Debug-ID: 1369839940-04bdf07816289900001-w1Z2WR Received: from outbound-01.safaricombusiness.co.ke (outbound-01.safaricombusiness.co.ke [41.203.208.105]) by cuda.sgi.com with ESMTP id wPwkAjNZiXG7MOiJ for ; Wed, 29 May 2013 08:05:41 -0700 (PDT) X-Barracuda-Envelope-From: ceifund@fatherjosephbaldo.co.ke X-Barracuda-Apparent-Source-IP: 41.203.208.105 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AoJZAJ0YplF/AAAB/2dsb2JhbABaD4J6g2uBcoJJpVQhiGmMMQIWc4EIAQECaRUBAQsBAQMEAQEsIkhJAgQYLAIYAwEMCIVBAQEBBCaBeQEBGplljmmSAIEDjE6EDA6BBgOJGYZlgSuMU4Mqh1WBMAGBJQI6OYE0AQ X-IPAS-Result: AoJZAJ0YplF/AAAB/2dsb2JhbABaD4J6g2uBcoJJpVQhiGmMMQIWc4EIAQECaRUBAQsBAQMEAQEsIkhJAgQYLAIYAwEMCIVBAQEBBCaBeQEBGplljmmSAIEDjE6EDA6BBgOJGYZlgSuMU4Mqh1WBMAGBJQI6OYE0AQ X-IronPort-AV: E=Sophos;i="4.87,764,1363122000"; d="pdf'?scan'208";a="1917294641" Received: from unknown (HELO hosting-sme03.safaricombusiness.co.ke) ([197.248.5.5]) by smtp02.safaricombusiness.co.ke with ESMTP; 29 May 2013 18:05:38 +0300 Received: from localhost ([127.0.0.1]:35831 helo=197.248.5.5) by hosting-sme03.safaricombusiness.co.ke with esmtpa (Exim 4.80) (envelope-from ) id 1UhhrI-000WiK-18; Wed, 29 May 2013 18:00:12 +0300 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_09e96fbe7f09f7a373cd3212ca6e8904" Date: Wed, 29 May 2013 18:00:10 +0300 From: ceifund@fatherjosephbaldo.co.ke To: undisclosed-recipients:; Subject: Micro European Fund Message-ID: <2e49e505e6cfb056c7a147fd710abfeb@fatherjosephbaldo.co.ke> X-ASG-Orig-Subj: Micro European Fund X-Sender: ceifund@fatherjosephbaldo.co.ke User-Agent: Roundcube Webmail/0.8.5 X-Barracuda-Connect: outbound-01.safaricombusiness.co.ke[41.203.208.105] X-Barracuda-Start-Time: 1369839940 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.25 X-Barracuda-Spam-Status: No, SCORE=1.25 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=NO_REAL_NAME, RCVD_NUMERIC_HELO, RCVD_NUMERIC_HELO_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132374 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO 1.25 RCVD_NUMERIC_HELO_2 Received: contains an IP address used for HELO --=_09e96fbe7f09f7a373cd3212ca6e8904 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=UTF-8; format=flowed KINDLY PRINT OUT AND FILL THE FUND RELEASE FORM WITH YOUR CORRECT ID IMFORMATION, Scan AND SEND TO EMAIL: co-odinator@fundcei.de Or FAX TO:+494049219130 FOR CLAIM.. --=_09e96fbe7f09f7a373cd3212ca6e8904 Content-Transfer-Encoding: base64 Content-Type: application/pdf; name="Attention Winner.pdf" Content-Disposition: attachment; filename="Attention Winner.pdf"; size=132925 JVBERi0xLjcKJeLjz9MKMjAgMCBvYmoNCjw8L01ldGFkYXRhIDMgMCBSL1BhZ2VzIDEgMCBSL1R5 cGUvQ2F0YWxvZz4+DQplbmRvYmoNCjEgMCBvYmoNCjw8L0NvdW50IDEvS2lkc1s1IDAgUl0vVHlw ZS9QYWdlcz4+DQplbmRvYmoNCjUgMCBvYmoNCjw8L0FydEJveFswLjAgMC4wIDU5NS4wIDg0Mi4w XS9CbGVlZEJveFswLjAgMC4wIDU5NS4wIDg0Mi4wXS9Db250ZW50cyAxNCAwIFIvQ3JvcEJveFsw LjAgMC4wIDU5NS4wIDg0Mi4wXS9NZWRpYUJveFswLjAgMC4wIDU5NS4wIDg0Mi4wXS9QYXJlbnQg MSAwIFIvUmVzb3VyY2VzPDwvRXh0R1N0YXRlPDwvR3MwIDE1IDAgUi9HczEgMTYgMCBSL0dzMiAx NyAwIFI+Pi9Gb250PDwvRjAgNyAwIFIvRjEgNiAwIFI+Pi9YT2JqZWN0PDwvWDAgMTkgMCBSPj4+ Pi9Sb3RhdGUgMC9UcmltQm94WzAuMCAwLjAgNTk1LjAgODQyLjBdL1R5cGUvUGFnZT4+DQplbmRv YmoNCjE5IDAgb2JqDQo8PC9MZW5ndGggNzM3NzYvRmlsdGVyIC9EQ1REZWNvZGUvQml0c1BlckNv bXBvbmVudCA4L0NvbG9yU3BhY2UvRGV2aWNlUkdCL0hlaWdodCA1NTgvSW1hZ2VNYXNrIGZhbHNl L0ludGVudC9SZWxhdGl2ZUNvbG9yaW1ldHJpYy9JbnRlcnBvbGF0ZSB0cnVlL1NNYXNrIDE4IDAg Ui9TdWJ0eXBlL0ltYWdlL1R5cGUvWE9iamVjdC9XaWR0aCA1NDA+PnN0cmVhbQ0K/9j/4AAQSkZJ RgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAIuAhwDASIAAhEBAxEB/8QA HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEB AQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMi MoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpj ZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbH yMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooyD0Oeo/EHBH4Hg+9FABXxB+0V+3d8Iv2bP2lv2Nv2YfHFwqeNf2zvFv xC8JeB5xdwxQaFP4E8Hv4gjvdXgbdO8HiXxDd+HfA+hxRhHute8QW5RmitLoL9uswRSzdB1798D8 zX+Vx/wXt/4KD+K/jV/wWT1rx/8ACjxPJb6T+xB4u8KfDP4PapY3ZktbLxl8GPE58T+M/EVsLaRY mln+Lh12yW6gkJvtH0PRlkmdYk2fvn0c/BfGeOfH1ThHDqpClHJMyq/WIylCFLN8dRqZTwxCrUjG TjRlxBi8LisUrPmy/LMxbTimeXm+YxyzCrEO1/awVrXbpxanXaXdUoyiv784H+qQCCARyCAQfY9K Wvnj9k39oTwv+1Z+zZ8EP2ivB7w/2D8Y/hn4U8e2trDL5w0q61vSrebWdAnk/wCf7w3rn9o+H9QR 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 2oykmXxV4SsJtHvLl5LjXvCV5fXc+u2/6C/8EDdK/aD+GH/BP7wj+zB+1P8ADzxN8Nvjb+yf428a /A7WtI8RW26DWPCllqQ8ZfDvxJ4V121lu9E8V+Dp/CHi7T9B0fxD4e1DUNKuH8O3duk0UtpNDF+2 FFfp2beLXF/EXAeH8PuJcX/rBleV5ngs04fzHMp1a2dZJPC0cRhKuCo5hKU6uOy3FYHEPD/VswlX q4T2NCWFxnsofVo8VPAYejiniqMfZTnCUKsIWVOqpNSUnDaM4yV7wspXfNG+oyQOygJtzuU/NnGF O7tz1A/DPen0UV+YnaFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB THkSNS8jpGgwCzsEUE8AFmIHJ4HPNPr+cj/g57/bg1L9kT/gnFq3gzwL4ku/Dfxe/ab8a6L8LPBm paRey2Ou6J4b0meDxh8RvEunXFvLFcQC30HS7TwpLcwsJbS58b6fMhR9jj6jgrhXH8ccW8PcI5W1 DG8QZphstpVpwnUp4WnVlOeJxtaEGpyoYLCUMVjKyi4ylTw7hGUZVIMwxNeOGoVsRPWNKEptXs5N aRim9nKTjFebP6NgQRkEEHoQcj8xS18Qf8E3v2r9N/bd/Yf/AGbv2m7Ka2fUviZ8NNEu/GVramLy tK+IuirJ4b+I2kCOH5YY9P8AG+j69BaxsqO1itrMY0Eqivt+vJznKcwyDN80yLNsNUweaZNmOOyr McLVjKFTD43L8VXwmJpSjOMJLlq0JOLcY81OpRqJctWF9KdSFWnCrTalCpCM4SWzjNKSenk/vT7B RRRXmlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUjMFUsegGT/gM45PQepoAWiiig A6da/C/9kr/grboX7RX/AAV5/bq/4J/RalpUvhT4F+E/BzfCC+h8iO613xl8P5W0X9pHT5rpWdtQ n0vxT4t8P6bplgr5tLTwR4j1BFZLibyf0N/b+/ap0H9ij9jf9on9p3XXt2Hwk+GWv+INBsboqIdb 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 Hy5OMAn6HOfugdTnipaQgEYIBB6gjI/I1/IJ74gdGOFZWPXAYE49eDTqaERTlVVT0yFAOPTgU6gA ooooAKKKKACiiigBkcYjDBehYsAe2QBjPfpx3xwc9Sr52MFyWKkDBAOSMA5JGMdev05p1JkAgEgE 5wM8nHXA7474oAqQRyJISVwMEEkj2I24PPOOenUZyMVcphkRW2lgDjPJwPpk8ZI5AzkjnGOaRpo1 BO8HBxhSGOewwOhPbOBnvQB8W/8ABRX9q/R/2Iv2Kv2i/wBp3VZbYXPwr+Gmt6p4Vs7toli1j4ha sIvDnw20JlmYLLHrPjrV9A0+4VVlZLaaabynWMq3+Mx/a2seKNb8Q+MfEeoXWseIPE2s6jrGs6vf ytPfanq+q3k2o6vqN5O+Hmur2/nmnuJW+eSZ5HOSxx/dd/weN/tlnS/BH7OX7CfhfVAuo+NtVuP2 gvivY2sw81PDXh2TUfCHwu0m9CsS9prfiKXxnrcltIq4u/CGjXakKYy38K1pALa2hgUf6uMBj6uf mc/i5Y9uMcV/ud+y08IvqORZj4kZjhbVs2rVMdhKlSnZrCYd4rJchhCTje1Sp/rJnSV0n/sdVXtC T/NONsfzVI4SErqmuWSvpzO1Sq38lSp/+BLuj7X/AOCeH7VOp/sUftq/s6ftM2M90mn/AA0+JGkX XjG2tHkWbVPh3rvneGfiLpISPiZ9Q8E6xrlvbxurqLxraUL5kSMv+yVoGtaX4j0TSde0S+ttT0bW dNsdV0jUrKRZrPUdL1G1hvdPvrSZSVltruznhuIJVOHjkVhwRX+HNX+p9/wbf/tij9q3/gmV8LNE 17VUvviH+zVd3P7PfjETTl72TS/B1lY3Xw11OZJP3pt7r4cah4d0oXkjOt3qvh/WdsjPFIken7Wv wj/tDhnw98bcswvNiOHMdV4B4qrU4e88nz2pWzXhfF13GP8ADwWfYbNssVSbtTjnFCmpRU4xa4Dz DlrYvLqktK0ViqCb/wCXlJRhXir9ZUpU52W/s27X1P3ypr7tp2EBuxPQe/Q9s44IzjIxQ7pGMuwU fj/IZP19KFdH+6ytkZwCM49SOo69xX+Fp+mEQadeDGrkfxK4UHgdjznOc8Aegx1mGSASMEgZGc4P cZ749aWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAOcHHXtk4Gfc4OPrg/SvyQ/bn/4LU/sZ/8ABOnx9Z/Dr9qO 3+Ofg/WNY0+21TwtrWl/BPxnr3gfxlZyRxPe/wDCJ+Oba2h8K61d6I8qQa/plvqy6po8zRfa7JI7 qxe6/W+vmz9q/wDZF/Z8/ba+DXiX4DftJ/DnRviN8PPEkJJtdQjMGseHtWjjkSw8T+ENftjHqvhf xRpLSvJput6Rc211EHltZzcafdXtnc/ScJ1+FaGe4KXGuX5xmPDk5+yzClkOY0stzahTnKC+t4Or XwmLw+Inh1zTlgq8KMMVDmpwxWHreyqPGuq7pS+rTpwrJXg6sHOm2r+7JKUZJPRcybcXq4yV0fgn ff8AB27/AMEpLabybNf2ltYJmeJJLD4OaVbxuqBts4OtfEDSGWKUqFjDqk24gSxRYJHBax/wd8f8 E7baNho/wa/a61ZxBMwNz4H+FGk7p1z5MQcfGW+wkv8AFOY1MSkfumbJX+Ub/gsj/wAECf2gf+CY uv6n8T/Av9s/G/8AY71TUcaL8V7HT1k8SfDZr+5Men+GPjJpOnosek3IaRLHTPHNhbxeEvEcwgSQ +HNavoPDqfgtp2sPBthuSXh+6sh5ki9A3d1A+9/EvOPlAFf60eBv0X/oX+IGX4LM8zrca5vlOaSi sBn+D8QMdgcLg8Q1TVXLOIctwuQ/WMrxNCc1GtOp7OeGnL/a6MsLOhmMvhcyzriLCzlCCw9OpBe9 SnhISco62nSnKraaaV0ldSSfK1K8D/RT1T/g8U/ZEgDjRf2Vv2ktR2rF5Z1LU/hfpQckjzVc2/ib WWjEYzsbbK0pADeUDvr5D/a1/wCDtvwx8X/2ePjX8J/gj+y/8Rfh38QviZ8PPF/gLwv8SvEnxJ8O 3EXgebxXpVxoR8UQaPpHh97i61XS7K/u7zTLeLVLZLXVY7O4NzPHCyN/Eojq6h1IZGGVZTkMPUHv 39MHI7U6v7myf9nB9EXLcTgcxw3A2eZhUwtfB5hhZ4/xA4pzDC1Z4erh8Zhp1KVOph8Ni8POdGhU lCTqYfEU/dl7SlVlGfzFXjDPpqUHiacVJOMlHC0ISXMmnZ2bi7N2as09VqjN07TxYLIC4keRgSwX bhFHyqBk8Alj171pUUV/beTZNl2QZbhcoynDRwmX4KEqeHoRnUqOCnVq1puVWrKdWpOdWrOc51Jz nKTV5WjFL5urVnWnKpUblOTTbaS2VtlZJJJJJbHq/wACfjF4u/Z6+NPwp+OvgK7az8ZfCH4g+Evi L4clErxI+qeEtcstZt7S5ZAS1jqBtDY38LB47myuLi3kR45HRv7d9C/4PLPhq0Ua+If2FPHdm+1x I2j/ABx8P6oikD915aXvw70hiHJIkDy/uwFCeZya/gxor8U8aPow+Cn0gcXkeYeKfCVTPsw4cweN y/J8fhM8zvIsZhsDmGKpY3E4WdbJsVh/rVB4ujHE0aeLp11h6sq0qDpqvWjP0cuzvMcqjUhga/so 1ZRlUhKlSqxlKEXFSSqRfK+V2bi1dJXvZW/0GdK/4PGP2UZnU61+yb+0VpwZoxIdM8Q/DXWVRW/1 xRLvWNF3NG3ES/J5y5JMJ+U+q6J/wd+f8E87tUOvfBL9rbRmMTFxaeDvhRrG2USbVj3f8Li03crR DzWlCjax8oRnG8/5yH+Hqf8AP49ayb7U1gb7Pbobi8dgixqN+x3OFUqhLM5OAsackkbipIz/ADBx V+zo+hjkOWYjNs3yTjDI8HRTSlhfEjiL21eq4ylTw+CoYjA42pisVU5bU6FOMnZSqVZ0aMKleHuU OLuIas1CnUw9WT1tLCUbJX1cnGceWMerduyu7J/6a1l/wdof8EppjGNTk/aP8P8AmSMg/tX4O6fO QqpvEpTQvHetSeU7AxLhDIJMB41Q76/Xz9hH/got8Bf+Ci3gvWviT+zjpXxbu/h3o13Hpv8AwnHj 34VeKPh74Y1rWA06X+keFNY8QxRWfiy90KSDyfEDeH5b+x0e4ntrW7vFuplgr+K//gip/wAGxnjD 49v4R/an/wCCjGh674F+Dtx9g8R+Bf2cLxrvQvH/AMUbRgl1p+p/E4xPb6t4A8C3aFJYvC8LWHjf xHavuuZvCemG2m1v/Qd8FeCfB/w48KeH/AngDwxoXgzwZ4U0qz0Lwz4W8M6XZ6LoGg6Np8KwWWma TpWnw29lYWVrEoSG2toY4kGSFBZif8XfpGZR9HHhfPcbw94LYbi3H4vC4n2OKzHNuMIZ9lGWKhUl CrhlXp5LhY5xmtVwccRHBV45TlbUqKx2aYyFR0v0TKKmb16Ua2YyoQjJXjCnh3SqTvqpWdSXs6ev u8ydSa15YRav1FFFFfy8e0FFFFABXmPxk0H4o+Jfhn4v0b4K+PdD+GPxUvNJmXwR428T+D/+E/8A Deh67G8c1rNr3g8a14ck1zSpzG1nfW1vrml3aW1xLPaXcVzFEa9OorWhWlh69HEQhRnOhVp1owxF GniKE5UqkKihXw9ZOlXozcFGrRqp06tOU6c1yzdk1dNaq6aum01dNXTWqavo1qnZrY/zrf8AgoR/ wWy/4OFP+Ce/xr1T4MftFRfBTwLeyzT3/grxv4W+B+lat8O/iV4bt3MCa54B8T67cajFqlg5aJtU 028WDxN4du5EsNb0/S59ltJ+eMv/AAc9/wDBYjWj5B/aU8LaFKTMAdK+A3wLEcolbCR79T+H+pSR NADiApIrnILu7kGv9Lz9r/8AYy/Zz/bq+DHiD4EftL/DnSfiB4H1uOSaxlnQWniTwhrwt5ILLxZ4 I8SQodS8MeJ9NEjfZdT0+QCaBp9O1K31DSLy+0+6/wAwz/gsH/wQc/aN/wCCXfiS+8e6JHq3xp/Z E1nV2g8K/GnS9NzqfgxruYrp3hb4zaVp8Rh8Ma786Wmn+JraNPB3iqZ4jp1xpOtXM3hmw/02+jD4 m+APE+YZdlPFPg/4T4bjOEIYeplGecKZVi+HeLqaUfaTyarmTxc8sziahKosudWWIjU5pZbUzPCu pgKfxudYLNKMJ1KOPx0sO22qlKvUjWw+9vaKHKp01e3Naz+2oStJrq//AAcIf8FhNZDCb9tDxXZB oBbkaR8P/g7pJ2q5k3q9h8O4XSYlirTIyysmFLcAjzvU/wDguH/wVn1Zma6/br+N8JaRZSNM1LQt FUMibAFTRtDsFSMg5eFFWJ3xI6NIA1fj7p2sGLbBdsWi4CTfeeMA4UP3dPQgFlGTyFzXVKyuodGV kYAqykFWB6EEcEH8+xweK/2Z4D8O/o3cV5csZw94O+E2FxFCMFj8rqeHXA8cfl1SfSrCXD1f22Hn NSWHxtBTw9dJR5qFdSw8PzzF4vOKE+WrmGOkm24TWLxLjNJX0/fKztq4u0k+61fq/wAb/jl8Yf2l PH9z8VPj98SfGHxf+I93p+naVceM/H2t3niLX30zSI3j0zTlv7+SWWKxsEkkFpaRFIIPMcogZ3J8 qoor96yvJsnyPCU8BkmU5Xk2Bowp06WCyjLcvyvB0qdKDhSp08LluCwGHhCnCTjThGgowi3GChFt PyalWrVk5VZzqTbbcqk5zk297ucpN3eru7t73D/PXH69vrX0X8Bf2vf2pP2Wzro/Zx/aC+LnwRj8 UXGm3fiW3+GfjvxB4StPEFzo8d5FpU+tWWkXttaanLp8eo30dm95FOYUup1TaHIr50op5tk+UZ9g K+V57lWWZ3leJ5PrOW5xluX5tl2I9lUjVpe3wGZ4HMcFWdKrGNWk6uEqOnVjGpTdOpFTRTq1KUlO lOdOavadOc6c1dWdp05wkrrR2lqtHpofqNpX/BbD/gq/oyotn+3f8f5QiLGP7U8UQa6xVWLgs2t6 fqDu+48yOzSMpKMzL8tel6P/AMHA/wDwWC0V0eD9tXxpebWkYLq/gf4R6upMsew7hqPw/uCwQfPE rErC48xArcj8bs/5/wA/5PasjUNUjtMxRYluTwEByiE8AyHruGRhF+ZiRnAINfkHFHhL9HfJ8txG a8TeE/hHSwNJNSniPDngmVXEVZKcoYfC0aPDdCtisTWakqdCgnOTblKVKlCpWpelQx+b1ZqnSx2Y Ob2SxeKsl3bdZqMU927LpZt2P33sf+Dm/wD4LB+G4oze/tKeGddRBAIoNZ+BHwOeSUW4IKPNpngH TLhxOCouZpJjISFaOWJ2Yv8Aup/wSB/4KB/8HBv/AAVA8ZW+tab4i+B3w9/Zh0DV307x5+0J43/Z 8s5bGSW3mV7zw78M9K0nWfDUfjzxxaxlLeeG3ubTw34dEyXXijUobp9P03U/hD/giv8A8Gy/j/8A aauPCf7UX/BQfR/EXw3+ANwlj4h8EfAqdrvw98S/jBaSFLvTtQ8ZcW+q/Dv4c3kXlyxWSLZ+NfFd lKs1iPC+lT2Gu6n/AKHXw++HvgX4UeC/DXw5+GfhHw94D8BeDdIs9A8K+EPCmk2Wh+HvD+jWEflW mm6VpWnwwWdlawrkiKCJA0jySvulkkdv8Ofpb+Nv0fVmOO4T8IPBbwmw2ZYapiMNXz3LeDshhhMp qXqUqs6mIy10cNnWeQs+XCYaUsgyardV62c5hSnSo/pWQ5bmvJGvmGY46UJJNUp4iq5VOqsppyp0 tfia9rU6KnB69RZwzwWlrBc3LXlzFbxR3F26JE11OkarLcNFEFjjM0gaTy41CJu2IAoFWaKK/wA1 m7tvu29EktW3olZJa6JJJLRJJI+wCiiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGP4g8PaB4t0PV/DHinRNI8S+G/EG m3uja94f17TrPV9F1rR9St5LTUdK1bS9QhuLHUdN1C0lltb2xu4Jra6t5JIJ4pInZT/Al/wWx/4N ftW8BDxZ+1J/wTV8NX/iHwcr3niD4gfsoaetzqHiLwtCxkudR1v4HtNJcXniPQoCZJp/hpNJP4g0 mLK+D5tctHtfDmk/6AtBAIIIBBGCDyCD1BHcGv0nwy8VuMPCfPI5zwvjmqFaVKObZJi5VKmT51hq cv4OOw0ZrkrQhKawuYYZUsfgpS5qNapSdXCVuPGYHD46l7OtHVJ+zqxsqlOT6xl2vbmhK8JdUnaS /wAJtJ9Q0K8uLC8tri2ms7ia1vtOvI3t7i1uoJWhuIZLeZUmtbmCRHimikRZI5VeOVQ4bHV211Dd xiSF9yn7ykYdD/ddf4SPU5DdRxiv7+/+DpH/AIJS/sb2n7OPxJ/4KPeG0j+Cv7Qnh/XfBmmeIbLw rpVr/wAIn+0HrHjHxVpPhpYfE+gQNaR6b49tbS/u9fPjvSsXOpWGjajB4q0/W5JbHVNG/wA+7QIS ttNM3WWTavusfGQeOrFuf9ngAYr/AKDvoW/SAxni9lmCp5Th8dHIlHM6GZ5Zm6qzrcNZlleFwuKx VLKcxgnSx2W1auPwkKUYcuHf1q6oZfjaWJw1b8q4iyqOAnJ1HB1XyOE4WtWhOU0nOD1hNKMm38Xu 7zi4yW/RRRX+hK2PkHu/VhSEgAsWCgckk4AHGSScDGPfA5J5padHbW95JHaXdx9ktbmSOC4u/JNx 9lhlcJLci3VkacwITL5KsrS7NgYFsjDFTrU8NiamHpRrYinh8RUw9CUpQjXr08PXqUaMpwjOUI1q 1OlSlOMZSgqvNGMnFJ3CzkuZ2V0m7XsnJJvXsm38u1zd+Gnw6+KHx7+Ivhb4O/A3wL4n+JXxJ8b6 pDovhfwp4R0y41bXNZ1CckeXa28KkW9pbRrJdalqt5JbafpdhDcajf3VpY2091H/AKK//BFT/g2t +GX7FQ8MftI/tnWfhn4yftWRx2mseGPBRWDXvhZ8B74hLiGbTUniNn44+JNg+0TeLryGbQ/Dl+jf 8IXayXlla+ML79L/APgkP/wSS/ZF/wCCbvwW0DW/gxb23xR+K3xK8LaNrHjT9pXxFptqPFfjfTNX srXVbSx8Kwk3K+Bvh7IJYbzTfCmk3Uj3aLZ3vibU/EGr20N/F+xdf8zn0qfpr8a+MmbZnw/w7jMw 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 FUsPhn9o74VLfP8AbfCPjnStOuE+GXxK8U/DzxPa+bofizRp47j4XPJcaRdy3dm0clprNlpmoWtz aQf2SE/KSvzcZABGG4yOenPr0qlNpmm3N7aajcafY3Goael1HYX81pby3tjHfLCl7HaXUkbT2yXi W8C3SwyItwsEKyhxGgW9Xd4jca1PETizHcY4rK8LlOZZxh8ulnGHwM6k8DXzbCYGjgcXmGFhWTrY anmEcJhcTPC1KmIeHrqtGGIrUpUpRnCYZYShHDxnKpCm5+zcklJU5Scowk1pJw5pLmSV1ZtJ3GR7 ti7xhgMHJycjjJI656/jT6KK+GOkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKAP/ZDQplbmRzdHJlYW0NCmVuZG9iag0KMTggMCBvYmoNCjw8L0xlbmd0aCAyNzY2Ni9G aWx0ZXIgL0RDVERlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZS9EZXZpY2VHcmF5 L0hlaWdodCA1NTgvSW1hZ2VNYXNrIGZhbHNlL0ludGVudC9SZWxhdGl2ZUNvbG9yaW1ldHJpYy9J bnRlcnBvbGF0ZSBmYWxzZS9TdWJ0eXBlL0ltYWdlL1R5cGUvWE9iamVjdC9XaWR0aCA1NDA+PnN0 cmVhbQ0K/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAALCAIuAhwBAREA/8QAHwAA AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpT VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/AP8AP/oooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooor1TwJ8PoPF+heKNTlkv4rjRrbzLAW7Qi3uJ1heV4Z1kt5JH4VT+6ljIDc56jysggkH gg4I9CKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKkhhl uJYoIUaSaaRIoo0BZnkdgqKoGSSzEAAV+inw78IxeF/B1jpE0Si6ubfz9TIAy9zdJmZWOMt5Ybyh nIwuK+JviT4Rn8H+Kb6xKt9iuZHvNOl2kK9tM7MEB6FoWJjYA9Ap7iuAoooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooopyLvdULBQzBSzcKuTjJ9h1NIwwxAOQCQD64PW tHR9Luda1Sw0mzXdc6hdQ2sXXAaVwu5sfwoCWb2Bq/4r0aTw/wCItW0eRWX7BdNCm4EFoQFML89Q 8ZVs981z1eu/Bbwzca/4zsboRk2OiOl/eSlcoroSbaLnjfJKoIHZUZu1ffdfO/7Q3hptR8P2evw4 8zRZik645a1uSqMQQM/JIEY54xnpmvi+ijBPQZ7/AIetFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFX9M1O+0e+g1HTZ2tb22YvBOmN8bEFSVyCM4JHToSKn1vXNS8R ahLqmrXH2q9mWNZJtiRlhGoRciNVBIA5JGSaya+7PgT4Y/sPwfHqMwxd68/2xwVwUt4y8dshyMnK 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 RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRX//ZDQplbmRzdHJlYW0NCmVuZG9iag0KNiAwIG9iag0K PDwvQmFzZUZvbnQvVGltZXMtUm9tYW4vU3VidHlwZS9UeXBlMS9UeXBlL0ZvbnQ+Pg0KZW5kb2Jq DQo3IDAgb2JqDQo8PC9CYXNlRm9udC9UaW1lcy1Cb2xkL0VuY29kaW5nIDggMCBSL1N1YnR5cGUv VHlwZTEvVHlwZS9Gb250Pj4NCmVuZG9iag0KOCAwIG9iag0KPDwvRGlmZmVyZW5jZXNbMjUyIC91 ZGllcmVzaXNdL1R5cGUvRW5jb2Rpbmc+Pg0KZW5kb2JqDQoxNyAwIG9iag0KPDwvT1BNIDA+Pg0K ZW5kb2JqDQoxNiAwIG9iag0KPDwvT1BNIDE+Pg0KZW5kb2JqDQoxNSAwIG9iag0KPDwvT1BNIDE+ Pg0KZW5kb2JqDQoxNCAwIG9iag0KPDwvTGVuZ3RoIDI4NjE2L0ZpbHRlciAvRmxhdGVEZWNvZGU+ PnN0cmVhbQ0KeJzMfQdgFVX29wTSE0gogSAKsdIkTC8URQUVo4CSBY2iuNKbAgJCpK+KIIrS/mpE NxRBioIUJVJ010IRFlBcQUClixApksVI8t075b1peXPPzEs+9/vvt/qU35l77+nn3HOHJdPZDEvT WXQ2TZv/x+XHJ4YkCwr66yyGZYRsUaJpns8aksywjh8HGz8qgpItijLNKjL6UeGdvwku/17/5B7N s4Ymy9kc+k9WS5288b/6z45va3XXCDqr34jkYclMNs+7LIkT0f8wHKIk47/ghWz0b/H4j97eKblV jyyu1d1ZTKvbu96RJbe6o1urB+66vdWdre4cnNypQ/IzBfnlZVfWDvpufrv8eKrpY4nVkjt2Sr5f paW4bZ9Gi2eyRdqVFh+JVtHo4kM7Xud2TYyh2mxKyjZIcdky2bJo3kxKjkTqwIaRg4YNO7d7wV2b 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 1z8fPz/+BWDVYPENCmVuZHN0cmVhbQ0KZW5kb2JqDQozIDAgb2JqDQo8PC9MZW5ndGggODcwL1N1 YnR5cGUvWE1ML1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlk PSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt cmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpwZGY9 Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iPjxwZGY6UHJvZHVjZXI+U29kYSBQREYgNTwv cGRmOlByb2R1Y2VyPjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91 dD0iIiB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4YXA6Q3JlYXRl RGF0ZT4yMDEzLTA1LTI5VDIwOjA1OjE4KzAyOjAwPC94YXA6Q3JlYXRlRGF0ZT48eGFwOkNyZWF0 b3JUb29sPlNvZGEgUERGIDU8L3hhcDpDcmVhdG9yVG9vbD48eGFwOk1ldGFkYXRhRGF0ZT4yMDEz LTA1LTI5VDIwOjA1OjE4KzAyOjAwPC94YXA6TWV0YWRhdGFEYXRlPjx4YXA6TW9kaWZ5RGF0ZT4y MDEzLTA1LTI5VDIwOjA1OjE4KzAyOjAwPC94YXA6TW9kaWZ5RGF0ZT48L3JkZjpEZXNjcmlwdGlv bj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5h ZG9iZS5jb20veGFwLzEuMC9tbS8iPjx4bXBNTTpEb2N1bWVudElEPnV1aWQ6MDAwMDAwMDAtMjU4 Yy0zZjBiLWIyMTMtY2IyNmFhM2Y2YTUwPC94bXBNTTpEb2N1bWVudElEPjwvcmRmOkRlc2NyaXB0 aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJ3Ij8+DQplbmRzdHJl YW0NCmVuZG9iag0KMiAwIG9iag0KPDwvQXV0aG9yKEludDEyKS9DcmVhdGlvbkRhdGUoRDoyMDEz MDUyOTIwMDUxOCswMicwMCcpL0NyZWF0b3IoU29kYSBQREYgNSkvTW9kRGF0ZShEOjIwMTMwNTI5 MjAwODQ5KzAyJzAwJykvUHJvZHVjZXIoU29kYSBQREYgNSk+Pg0KZW5kb2JqDQp4cmVmDQowIDEN CjAwMDAwMDAwMDAgNjU1MzUgZg0KMSAzDQowMDAwMDAwMDc5IDAwMDAwIG4NCjAwMDAxMzIzMDkg MDAwMDAgbg0KMDAwMDEzMTM2MCAwMDAwMCBuDQo1IDQNCjAwMDAwMDAxMzMgMDAwMDAgbg0KMDAw MDEwMjM2MyAwMDAwMCBuDQowMDAwMTAyNDMxIDAwMDAwIG4NCjAwMDAxMDI1MTMgMDAwMDAgbg0K MTQgNw0KMDAwMDEwMjY2OCAwMDAwMCBuDQowMDAwMTAyNjM4IDAwMDAwIG4NCjAwMDAxMDI2MDgg MDAwMDAgbg0KMDAwMDEwMjU3OCAwMDAwMCBuDQowMDAwMDc0NDcyIDAwMDAwIG4NCjAwMDAwMDA0 NjAgMDAwMDAgbg0KMDAwMDAwMDAxNSAwMDAwMCBuDQp0cmFpbGVyCjw8L0lEWzwzNTEyNzBmNjJi Y2U0ZDQ5NjExYmY4N2ZjNGQyY2JkND4gPDM1MTI3MGY2MmJjZTRkNDk2MTFiZjg3ZmM0ZDJjYmQ0 Pl0vSW5mbyAyIDAgUi9Sb290IDIwIDAgUi9TaXplIDIxPj4Kc3RhcnR4cmVmCjEzMjQ1OAolJUVP Rg== --=_09e96fbe7f09f7a373cd3212ca6e8904-- From sandeen@sandeen.net Wed May 29 10:10:18 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C99717F37 for ; Wed, 29 May 2013 10:10:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A72F38F804B for ; Wed, 29 May 2013 08:10:15 -0700 (PDT) X-ASG-Debug-ID: 1369840213-04cbb0049e278640001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id n22DrzBeFNHNLdxy for ; Wed, 29 May 2013 08:10:13 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6F8E66538AA5; Wed, 29 May 2013 10:10:13 -0500 (CDT) Message-ID: <51A61A55.1000306@sandeen.net> Date: Wed, 29 May 2013 10:10:13 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. In-Reply-To: <1369636707-15150-9-git-send-email-david@fromorbit.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369840213 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132374 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/27/13 1:38 AM, Dave Chinner wrote: > From: Dave Chinner > > Currently userspace has no way of determining that a filesystem is > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > indicate that the filesystem has v5 superblock support enabled. > This will allow xfs_info to correctly report the state of the > filesystem. Looks fine, Reviewed-by: Eric Sandeen Ben, having this in place for for the next point release will let userspace work & testing proceed w/o the need for a patched kernel... if you could consider pulling it in that'd be great. Dave, just out of curiosity, most other features sort of match between the "_has_*" and the flag names, is there a reason for the crc <-> sbv5 difference? Just semantics, but just curious. (i.e. xfs_sb_version_hasprojid32bit checks XFS_SB_VERSION2_PROJID32BIT, but xfs_sb_version_hascrc checks XFS_SB_VERSION_5) Answering my own question maybe, I guess SB_VERSION_5 was conceived with crc already in place, so there's no need for a feature flag on top of the sb version, right...? -Eric > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_fs.h | 1 + > fs/xfs/xfs_fsops.c | 4 +++- > 2 files changed, 4 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h > index 6dda3f9..d046955 100644 > --- a/fs/xfs/xfs_fs.h > +++ b/fs/xfs/xfs_fs.h > @@ -236,6 +236,7 @@ typedef struct xfs_fsop_resblks { > #define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */ > #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ > #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ > +#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */ > > > /* > diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c > index 87595b2..3c3644e 100644 > --- a/fs/xfs/xfs_fsops.c > +++ b/fs/xfs/xfs_fsops.c > @@ -99,7 +99,9 @@ xfs_fs_geometry( > (xfs_sb_version_hasattr2(&mp->m_sb) ? > XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | > (xfs_sb_version_hasprojid32bit(&mp->m_sb) ? > - XFS_FSOP_GEOM_FLAGS_PROJID32 : 0); > + XFS_FSOP_GEOM_FLAGS_PROJID32 : 0) | > + (xfs_sb_version_hascrc(&mp->m_sb) ? > + XFS_FSOP_GEOM_FLAGS_V5SB : 0); > geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? > mp->m_sb.sb_logsectsize : BBSIZE; > geo->rtsectsize = mp->m_sb.sb_blocksize; > From eguan@redhat.com Wed May 29 10:41:56 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E888E7F37 for ; Wed, 29 May 2013 10:41:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C8762304039 for ; Wed, 29 May 2013 08:41:56 -0700 (PDT) X-ASG-Debug-ID: 1369842112-04bdf0781728dfc0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ba18qMg0M8nBKKue for ; Wed, 29 May 2013 08:41:53 -0700 (PDT) X-Barracuda-Envelope-From: eguan@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TFfqef021157 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 29 May 2013 11:41:52 -0400 Received: from localhost (vpn1-113-171.nay.redhat.com [10.66.113.171]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4TFfpRT019112; Wed, 29 May 2013 11:41:52 -0400 From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH] xfstests: add missing colon in _filter_ln Date: Wed, 29 May 2013 23:41:46 +0800 X-ASG-Orig-Subj: [PATCH] xfstests: add missing colon in _filter_ln Message-Id: <1369842106-9869-1-git-send-email-eguan@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369842113 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On distros with older coreutils(eg. RHEL5) generic/294 fails like -ln: creating symbolic link `SCRATCH_MNT/294.test/testlink': File exists +ln: creating symbolic link `SCRATCH_MNT/294.test/testlink'File exists _filter_ln ate the ": ". xfs/103 has similar issue. Add ": " back. Signed-off-by: Eryu Guan --- common/filter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/filter b/common/filter index bdd6427..dbb1674 100644 --- a/common/filter +++ b/common/filter @@ -243,7 +243,7 @@ _filter_spaces() # Account for different "ln" failure messages _filter_ln() { - sed -e "s,\(creating symbolic link .*\) to .*: ,\1," \ + sed -e "s,\(creating symbolic link .*\) to .*: ,\1: ," \ -e "s,failed to create,creating," } -- 1.8.2.1 From kdasu.kdev@gmail.com Wed May 29 10:56:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,LOTS_OF_MONEY autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D2E9B7F37 for ; Wed, 29 May 2013 10:56:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B6387304059 for ; Wed, 29 May 2013 08:56:20 -0700 (PDT) X-ASG-Debug-ID: 1369842978-04cbb0049c27d620001-w1Z2WR Received: from sam.nabble.com (sam.nabble.com [216.139.236.26]) by cuda.sgi.com with ESMTP id 0xUAqjw8kuYEZymc (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 May 2013 08:56:19 -0700 (PDT) X-Barracuda-Envelope-From: kdasu.kdev@gmail.com X-Barracuda-Apparent-Source-IP: 216.139.236.26 Received: from tom.nabble.com ([192.168.236.105]) by sam.nabble.com with esmtp (Exim 4.72) (envelope-from ) id 1Uhija-0008CQ-Ld for linux-xfs@oss.sgi.com; Wed, 29 May 2013 08:56:18 -0700 Date: Wed, 29 May 2013 08:56:18 -0700 (PDT) From: kdasu To: linux-xfs@oss.sgi.com Message-ID: <1369842978624-35000.post@n7.nabble.com> Subject: Kernel 3.3 XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0 MIME-Version: 1.0 X-ASG-Orig-Subj: Kernel 3.3 XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sam.nabble.com[216.139.236.26] X-Barracuda-Start-Time: 1369842979 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132378 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- kernel 3.3. instability with When writing 3 real-time and 1 regular file on disk simultaneously (sync is blocking function). the rcu stall detection kicks in every time when 3rd-4th attempt. Just wanted understand the root cause of the problem This the info on the stack dumps without xfs debug and with xfs debug enabled receptively. /dev/sda1 is XFS real time partition /dev/sda2 is XFS non-real time partition. count=1; while [ 1 ];do #create file on disk /dev/sda1 (-R realtime) xfs_io -c open -f -R "/opt/corefiles/$count" -c "pwrite 0 20000000" -c close >> /dev/null & let a=$count%3; if [ $a -eq 0 ]; then let count+=1; #create file on disk /dev/sda2 xfs_io -c open -f "/opt/corefiles/$count" -c "pwrite 0 200000" -c close >> /dev/null & echo "sync"; sync /opt; fi; let count+=1; done Oops Log: # ./xfs.sh sync INFO: rcu_sched detected stall on CPU 0 (t=60000 jiffies) Call Trace: [<805d3814>] dump_stack+0x8/0x34 [<80084398>] __rcu_pending+0x260/0x4c4 [<80084f00>] rcu_check_callbacks+0x118/0x180 [<80034ea0>] update_process_times+0x40/0x6c [<8006e324>] tick_sched_timer+0x74/0xe4 [<8004cc50>] __run_hrtimer.clone.30+0x64/0x140 [<8004dc20>] hrtimer_interrupt+0x19c/0x4bc [<8000bff8>] c0_compare_interrupt+0x50/0x88 [<8007c678>] handle_irq_event_percpu+0x5c/0x234 [<80080a74>] handle_percpu_irq+0x8c/0xc0 [<8007bd14>] generic_handle_irq+0x34/0x54 [<80006084>] do_IRQ+0x18/0x24 [<800034a4>] plat_irq_dispatch+0xd0/0x128 [<80004364>] ret_from_irq+0x0/0x4 [<8028b1c0>] xfs_inode_item_format_extents+0x1c/0xf0 [<8028b5a0>] xfs_inode_item_format+0x30c/0x320 [<80288fcc>] xfs_log_commit_cil+0xe0/0x564 [<8028346c>] xfs_trans_commit+0x148/0x2d0 [<8022ad40>] xfs_iomap_write_allocate+0x1b0/0x560 [<8021c12c>] xfs_map_blocks+0x224/0x278 [<8021d3d8>] xfs_vm_writepage+0x240/0x6ec [<80092690>] __writepage+0x18/0xc8 [<80092ae0>] write_cache_pages+0x264/0x4c0 [<80092d84>] generic_writepages+0x48/0x84 [<800f0234>] writeback_single_inode+0x160/0x390 [<800f08c4>] writeback_sb_inodes+0x1c0/0x2a4 [<800f0f08>] __writeback_inodes_wb+0xbc/0x114 [<800f132c>] wb_writeback+0x204/0x20c [<800f1cb4>] wb_do_writeback+0x29c/0x2a4 [<800f1d64>] bdi_writeback_thread+0xa8/0x1ac [<80047d0c>] kthread+0x90/0x98 [<8000636c>] kernel_thread_helper+0x10/0x18 INFO: rcu_sched detected stall on CPU 0 (t=240030 jiffies) Call Trace: [<805d3814>] dump_stack+0x8/0x34 [<80084398>] __rcu_pending+0x260/0x4c4 [<80084f00>] rcu_check_callbacks+0x118/0x180 [<80034ea0>] update_process_times+0x40/0x6c [<8006e324>] tick_sched_timer+0x74/0xe4 [<8004cc50>] __run_hrtimer.clone.30+0x64/0x140 [<8004dc20>] hrtimer_interrupt+0x19c/0x4bc [<8000bff8>] c0_compare_interrupt+0x50/0x88 [<8007c678>] handle_irq_event_percpu+0x5c/0x234 [<80080a74>] handle_percpu_irq+0x8c/0xc0 [<8007bd14>] generic_handle_irq+0x34/0x54 [<80006084>] do_IRQ+0x18/0x24 [<800034a4>] plat_irq_dispatch+0xd0/0x128 [<80004364>] ret_from_irq+0x0/0x4 [<802c7c88>] arch_local_irq_restore+0x18/0x30 [<800c2b7c>] kmem_cache_alloc+0x78/0xd0 [<80238a40>] kmem_zone_alloc+0xa4/0x130 [<80238ae4>] kmem_zone_zalloc+0x18/0x54 [<80282f08>] xfs_trans_add_item+0x28/0x64 [<8028c98c>] _xfs_trans_bjoin+0x6c/0xcc [<8028cddc>] xfs_trans_read_buf+0x234/0x304 [<8028d638>] xfs_rtbuf_get+0x148/0x168 [<8028df10>] xfs_rtmodify_summary+0x94/0x124 [<8028ed28>] xfs_rtallocate_range+0x180/0x328 [<8028f748>] xfs_rtallocate_extent_exact+0xc4/0x158 [<80290054>] xfs_rtallocate_extent_near+0xb0/0x448 [<80290ce4>] xfs_rtallocate_extent+0x1c8/0x1fc [<8024a9fc>] xfs_bmap_rtalloc+0x1bc/0x3f8 [<8024df20>] xfs_bmapi_allocate+0xec/0x354 [<8025139c>] xfs_bmapi_write+0x264/0x82c [<8022ad18>] xfs_iomap_write_allocate+0x188/0x560 [<8021c12c>] xfs_map_blocks+0x224/0x278 [<8021d3d8>] xfs_vm_writepage+0x240/0x6ec [<80092690>] __writepage+0x18/0xc8 [<80092ae0>] write_cache_pages+0x264/0x4c0 [<80092d84>] generic_writepages+0x48/0x84 [<800f0234>] writeback_single_inode+0x160/0x390 [<800f08c4>] writeback_sb_inodes+0x1c0/0x2a4 [<800f0f08>] __writeback_inodes_wb+0xbc/0x114 [<800f132c>] wb_writeback+0x204/0x20c [<800f1cb4>] wb_do_writeback+0x29c/0x2a4 [<800f1d64>] bdi_writeback_thread+0xa8/0x1ac [<80047d0c>] kthread+0x90/0x98 [<8000636c>] kernel_thread_helper+0x10/0x18 With the xfs debug enabled this is the assert I get : XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0, file: fs/xfs/xfs_bmap.c, line: 5203 Kernel bug detected[#1]: Cpu 0 $ 0 : 00000000 30008700 00000062 806b9dc4 $ 4 : 30008701 30008701 00000266 8032b24c $ 8 : 00000010 00000002 00000001 00000000 $12 : 00000102 000003ff 00000000 00000000 $16 : 00000000 00000000 00001fff cf9b1300 $20 : 00001313 cf7dc000 cf76e420 00000002 $24 : 00000010 8032a9d0 $28 : cf672000 cf673c50 806416c8 80230718 Hi : 00000000 Lo : b0f9b000 epc : 80230718 assfail+0x28/0x2c Not tainted ra : 80230718 assfail+0x28/0x2c Status: 30008703 KERNEL EXL IE Cause : 00800024 PrId : 00025a11 (Broadcom BMIPS5000) Modules linked in: Process xfs_io (pid: 602, threadinfo=cf672000, task=cfcba9d8, tls=7729f460) Stack : 817bc3a0 00000000 80642b64 806416c8 00001453 00000000 00000000 8025ab7c 00000d00 00000d00 cf76e400 00000000 00000000 cf673c9c cf673ca0 cf673cd8 cf673cf8 cf673d6c 00000000 00000001 00000002 00000000 cf673d98 80250778 ffffff83 000003ff 00001313 00000000 fffe0015 000fffff 00000ced 00000000 00000000 8023b9c4 00001000 00000000 fffe0015 000fffff 00001000 00000000 ... Call Trace: [<80230718>] assfail+0x28/0x2c [<8025ab7c>] xfs_bunmapi+0xcb8/0x12f8 [<80285144>] xfs_itruncate_extents+0x290/0x488 [<80237200>] xfs_free_eofblocks+0x2d4/0x354 [<80237c50>] xfs_release+0x1b8/0x294 [<80222fb0>] xfs_file_release+0x10/0x20 [<800c8978>] fput+0x104/0x288 [<800c3a50>] filp_close+0x6c/0xa0 [<800c3b50>] sys_close+0xcc/0x12c [<8000db5c>] stack_done+0x20/0x40 Code: afbf001c 0c08c0f6 00403021 <0200000d> 27bdffd8 afa40014 afa50018 3c04 8064 3c058062 ---[ end trace 8e5cc13475cfce38 ]--- Thank You Kamal -- View this message in context: http://xfs.9218.n7.nabble.com/Kernel-3-3-XFS-Assertion-failed-xfs-trans-get-block-res-tp-0-tp35000.html Sent from the linux-xfs mailing list archive at Nabble.com. From sandeen@sandeen.net Wed May 29 11:21:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 845377F37 for ; Wed, 29 May 2013 11:21:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 70CF7304059 for ; Wed, 29 May 2013 09:21:18 -0700 (PDT) X-ASG-Debug-ID: 1369844476-04cb6c47422749a0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id QCsAP8JJIqYsjuCu for ; Wed, 29 May 2013 09:21:17 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id B9B7C657413A; Wed, 29 May 2013 11:21:16 -0500 (CDT) Message-ID: <51A62AFC.9050704@sandeen.net> Date: Wed, 29 May 2013 11:21:16 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eryu Guan CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: add missing colon in _filter_ln References: <1369842106-9869-1-git-send-email-eguan@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: add missing colon in _filter_ln In-Reply-To: <1369842106-9869-1-git-send-email-eguan@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369844476 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132380 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/29/13 10:41 AM, Eryu Guan wrote: > On distros with older coreutils(eg. RHEL5) generic/294 fails like > > -ln: creating symbolic link `SCRATCH_MNT/294.test/testlink': File exists > +ln: creating symbolic link `SCRATCH_MNT/294.test/testlink'File exists > > _filter_ln ate the ": ". xfs/103 has similar issue. Add ": " back. Ok, so older coreutils does i.e.: ln: creating symbolic link `b' to `a': File exists and newer: ln: creating symbolic link `b': File exists We want to convert the older output to the newer, by removing the " to `a'" part. Seems like my sed script is the long way around that ;) Still, looks like your fix does the right thing, thanks. Reviewed-by: Eric Sandeen -Eric > Signed-off-by: Eryu Guan > --- > common/filter | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/common/filter b/common/filter > index bdd6427..dbb1674 100644 > --- a/common/filter > +++ b/common/filter > @@ -243,7 +243,7 @@ _filter_spaces() > # Account for different "ln" failure messages > _filter_ln() > { > - sed -e "s,\(creating symbolic link .*\) to .*: ,\1," \ > + sed -e "s,\(creating symbolic link .*\) to .*: ,\1: ," \ > -e "s,failed to create,creating," > } > > From bfoster@redhat.com Wed May 29 11:42:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EAAF27F37 for ; Wed, 29 May 2013 11:42:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 96260AC00A for ; Wed, 29 May 2013 09:42:05 -0700 (PDT) X-ASG-Debug-ID: 1369845724-04bdf063bd23ce30001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 0fKB9MLtGsyCbAeU for ; Wed, 29 May 2013 09:42:04 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TGg2m3005585 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 May 2013 12:42:02 -0400 Received: from laptop.bfoster (vpn-48-118.rdu2.redhat.com [10.10.48.118]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4TGg1Wr005465 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 29 May 2013 12:42:01 -0400 Message-ID: <51A62F2F.6040807@redhat.com> Date: Wed, 29 May 2013 12:39:11 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 1/9] xfs: don't emit v5 superblock warnings on write References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-2-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 1/9] xfs: don't emit v5 superblock warnings on write In-Reply-To: <1369636707-15150-2-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369845724 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > We write the superblock every 30s or so which results in the > verifier being called. Right now that results in this output > every 30s: > > XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! > Use of these features in this kernel is at your own risk! > > And spamming the logs. > > We don't need to check for whether we support v5 superblocks or > whether there are feature bits we don't support set as these are > only relevant when we first mount the filesytem. i.e. on superblock > read. Hence for the write verification we can just skip all the > checks (and hence verbose output) altogether. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster > fs/xfs/xfs_mount.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index f6bfbd7..e8e310c 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -314,7 +314,8 @@ STATIC int > xfs_mount_validate_sb( > xfs_mount_t *mp, > xfs_sb_t *sbp, > - bool check_inprogress) > + bool check_inprogress, > + bool check_version) > { > > /* > @@ -337,9 +338,10 @@ xfs_mount_validate_sb( > > /* > * Version 5 superblock feature mask validation. Reject combinations the > - * kernel cannot support up front before checking anything else. > + * kernel cannot support up front before checking anything else. For > + * write validation, we don't need to check feature masks. > */ > - if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > + if (check_version && XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) { > xfs_alert(mp, > "Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled!\n" > "Use of these features in this kernel is at your own risk!"); > @@ -675,7 +677,8 @@ xfs_sb_to_disk( > > static int > xfs_sb_verify( > - struct xfs_buf *bp) > + struct xfs_buf *bp, > + bool check_version) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > struct xfs_sb sb; > @@ -686,7 +689,8 @@ xfs_sb_verify( > * Only check the in progress field for the primary superblock as > * mkfs.xfs doesn't clear it from secondary superblocks. > */ > - return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR); > + return xfs_mount_validate_sb(mp, &sb, bp->b_bn == XFS_SB_DADDR, > + check_version); > } > > /* > @@ -719,7 +723,7 @@ xfs_sb_read_verify( > goto out_error; > } > } > - error = xfs_sb_verify(bp); > + error = xfs_sb_verify(bp, true); > > out_error: > if (error) { > @@ -758,7 +762,7 @@ xfs_sb_write_verify( > struct xfs_buf_log_item *bip = bp->b_fspriv; > int error; > > - error = xfs_sb_verify(bp); > + error = xfs_sb_verify(bp, false); > if (error) { > XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); > xfs_buf_ioerror(bp, error); > From bfoster@redhat.com Wed May 29 11:42:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 453C67F50 for ; Wed, 29 May 2013 11:42:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E4868AC001 for ; Wed, 29 May 2013 09:42:25 -0700 (PDT) X-ASG-Debug-ID: 1369845745-04bdf07817294cd0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id SAzecfXmLTVkfxh0 for ; Wed, 29 May 2013 09:42:25 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TGgNIB020617 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 May 2013 12:42:23 -0400 Received: from laptop.bfoster (vpn-48-118.rdu2.redhat.com [10.10.48.118]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4TGgMrL016385 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 29 May 2013 12:42:23 -0400 Message-ID: <51A62F45.5000004@redhat.com> Date: Wed, 29 May 2013 12:39:33 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 2/9] xfs: fix incorrect remote symlink block count References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-3-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 2/9] xfs: fix incorrect remote symlink block count In-Reply-To: <1369636707-15150-3-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369845745 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > When CRCs are enabled, the number of blocks needed to hold a remote > symlink on a 1k block size filesystem may be 2 instead of 1. The > transaction reservation for the allocated bloks was not taking this > into account and only allocating one block. hence when trying to > read or invalidate such symlinks, we are mapping a hole where there > should be a block and things go bad at that point. > > Fix the reservation to use the correct block count, clean up the > block count calculation similar to the remote attribute calculation, > and add a debug guard to detect when we don't write the entire > symlink to disk. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster Unrelated question... I noticed we update di_size in xfs_symlink(). I presume this is safe because, even in the non-local case, we actually log the data (the path) in the buffers as well, right? Brian > fs/xfs/xfs_symlink.c | 20 ++++++-------------- > 1 file changed, 6 insertions(+), 14 deletions(-) > > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 5f234389..195a403 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -56,16 +56,9 @@ xfs_symlink_blocks( > struct xfs_mount *mp, > int pathlen) > { > - int fsblocks = 0; > - int len = pathlen; > + int buflen = XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > > - do { > - fsblocks++; > - len -= XFS_SYMLINK_BUF_SPACE(mp, mp->m_sb.sb_blocksize); > - } while (len > 0); > - > - ASSERT(fsblocks <= XFS_SYMLINK_MAPS); > - return fsblocks; > + return (pathlen + buflen - 1) / buflen; > } > > static int > @@ -405,7 +398,7 @@ xfs_symlink( > if (pathlen <= XFS_LITINO(mp, dp->i_d.di_version)) > fs_blocks = 0; > else > - fs_blocks = XFS_B_TO_FSB(mp, pathlen); > + fs_blocks = xfs_symlink_blocks(mp, pathlen); > resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); > error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, > XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); > @@ -512,7 +505,7 @@ xfs_symlink( > cur_chunk = target_path; > offset = 0; > for (n = 0; n < nmaps; n++) { > - char *buf; > + char *buf; > > d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); > byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); > @@ -525,9 +518,7 @@ xfs_symlink( > bp->b_ops = &xfs_symlink_buf_ops; > > byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); > - if (pathlen < byte_cnt) { > - byte_cnt = pathlen; > - } > + byte_cnt = min(byte_cnt, pathlen); > > buf = bp->b_addr; > buf += xfs_symlink_hdr_set(mp, ip->i_ino, offset, > @@ -542,6 +533,7 @@ xfs_symlink( > xfs_trans_log_buf(tp, bp, 0, (buf + byte_cnt - 1) - > (char *)bp->b_addr); > } > + ASSERT(pathlen == 0); > } > > /* > From bfoster@redhat.com Wed May 29 11:43:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 33D987F37 for ; Wed, 29 May 2013 11:43:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1E72A30405F for ; Wed, 29 May 2013 09:43:43 -0700 (PDT) X-ASG-Debug-ID: 1369845822-04cbb0049a2829f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 8DcWvvetsLSUyjDg for ; Wed, 29 May 2013 09:43:42 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TGhecm022005 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 May 2013 12:43:40 -0400 Received: from laptop.bfoster (vpn-48-118.rdu2.redhat.com [10.10.48.118]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4TGhdpK018501 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 29 May 2013 12:43:40 -0400 Message-ID: <51A62F92.8060506@redhat.com> Date: Wed, 29 May 2013 12:40:50 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 3/9] xfs: increase number of ACL entries for V5 superblocks References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-4-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 3/9] xfs: increase number of ACL entries for V5 superblocks In-Reply-To: <1369636707-15150-4-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369845822 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > The limit of 25 ACL entries is arbitrary, but baked into the on-disk > format. For version 5 superblocks, increase it to the maximum nuber > of ACLs that can fit into a single xattr. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_acl.c | 31 ++++++++++++++++++------------- > fs/xfs/xfs_acl.h | 30 +++++++++++++++++++++++------- > 2 files changed, 41 insertions(+), 20 deletions(-) > > diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c > index 1d32f1d..b6bed9b 100644 > --- a/fs/xfs/xfs_acl.c > +++ b/fs/xfs/xfs_acl.c > @@ -21,6 +21,8 @@ > #include "xfs_bmap_btree.h" > #include "xfs_inode.h" > #include "xfs_vnodeops.h" > +#include "xfs_sb.h" > +#include "xfs_mount.h" > #include "xfs_trace.h" > #include > #include > @@ -34,7 +36,9 @@ > */ > > STATIC struct posix_acl * > -xfs_acl_from_disk(struct xfs_acl *aclp) > +xfs_acl_from_disk( > + struct xfs_acl *aclp, > + int max_entries) > { > struct posix_acl_entry *acl_e; > struct posix_acl *acl; > @@ -42,7 +46,7 @@ xfs_acl_from_disk(struct xfs_acl *aclp) > unsigned int count, i; > > count = be32_to_cpu(aclp->acl_cnt); > - if (count > XFS_ACL_MAX_ENTRIES) > + if (count > max_entries) > return ERR_PTR(-EFSCORRUPTED); > > acl = posix_acl_alloc(count, GFP_KERNEL); > @@ -108,7 +112,7 @@ xfs_get_acl(struct inode *inode, int type) > struct xfs_inode *ip = XFS_I(inode); > struct posix_acl *acl; > struct xfs_acl *xfs_acl; > - int len = sizeof(struct xfs_acl); > + int len = XFS_ACL_SIZE(ip->i_mount); > unsigned char *ea_name; > int error; > > @@ -133,8 +137,8 @@ xfs_get_acl(struct inode *inode, int type) > * If we have a cached ACLs value just return it, not need to > * go out to the disk. > */ > - > - xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); > + len = XFS_ACL_SIZE(ip->i_mount); Duplicate initialization of len. Harmless (perhaps Ben can drop it) and the parens in XFS_ACL_MAX_ENTRIES() are fixed, so: Reviewed-by: Brian Foster > + xfs_acl = kzalloc(len, GFP_KERNEL); > if (!xfs_acl) > return ERR_PTR(-ENOMEM); > > @@ -153,7 +157,7 @@ xfs_get_acl(struct inode *inode, int type) > goto out; > } > > - acl = xfs_acl_from_disk(xfs_acl); > + acl = xfs_acl_from_disk(xfs_acl, XFS_ACL_MAX_ENTRIES(ip->i_mount)); > if (IS_ERR(acl)) > goto out; > > @@ -189,16 +193,17 @@ xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) > > if (acl) { > struct xfs_acl *xfs_acl; > - int len; > + int len = XFS_ACL_SIZE(ip->i_mount); > > - xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); > + xfs_acl = kzalloc(len, GFP_KERNEL); > if (!xfs_acl) > return -ENOMEM; > > xfs_acl_to_disk(xfs_acl, acl); > - len = sizeof(struct xfs_acl) - > - (sizeof(struct xfs_acl_entry) * > - (XFS_ACL_MAX_ENTRIES - acl->a_count)); > + > + /* subtract away the unused acl entries */ > + len -= sizeof(struct xfs_acl_entry) * > + (XFS_ACL_MAX_ENTRIES(ip->i_mount) - acl->a_count); > > error = -xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl, > len, ATTR_ROOT); > @@ -243,7 +248,7 @@ xfs_set_mode(struct inode *inode, umode_t mode) > static int > xfs_acl_exists(struct inode *inode, unsigned char *name) > { > - int len = sizeof(struct xfs_acl); > + int len = XFS_ACL_SIZE(XFS_M(inode->i_sb)); > > return (xfs_attr_get(XFS_I(inode), name, NULL, &len, > ATTR_ROOT|ATTR_KERNOVAL) == 0); > @@ -379,7 +384,7 @@ xfs_xattr_acl_set(struct dentry *dentry, const char *name, > goto out_release; > > error = -EINVAL; > - if (acl->a_count > XFS_ACL_MAX_ENTRIES) > + if (acl->a_count > XFS_ACL_MAX_ENTRIES(XFS_M(inode->i_sb))) > goto out_release; > > if (type == ACL_TYPE_ACCESS) { > diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h > index 39632d9..0da8725 100644 > --- a/fs/xfs/xfs_acl.h > +++ b/fs/xfs/xfs_acl.h > @@ -22,19 +22,35 @@ struct inode; > struct posix_acl; > struct xfs_inode; > > -#define XFS_ACL_MAX_ENTRIES 25 > #define XFS_ACL_NOT_PRESENT (-1) > > /* On-disk XFS access control list structure */ > +struct xfs_acl_entry { > + __be32 ae_tag; > + __be32 ae_id; > + __be16 ae_perm; > + __be16 ae_pad; /* fill the implicit hole in the structure */ > +}; > + > struct xfs_acl { > - __be32 acl_cnt; > - struct xfs_acl_entry { > - __be32 ae_tag; > - __be32 ae_id; > - __be16 ae_perm; > - } acl_entry[XFS_ACL_MAX_ENTRIES]; > + __be32 acl_cnt; > + struct xfs_acl_entry acl_entry[0]; > }; > > +/* > + * The number of ACL entries allowed is defined by the on-disk format. > + * For v4 superblocks, that is limited to 25 entries. For v5 superblocks, it is > + * limited only by the maximum size of the xattr that stores the information. > + */ > +#define XFS_ACL_MAX_ENTRIES(mp) \ > + (xfs_sb_version_hascrc(&mp->m_sb) \ > + ? (XATTR_SIZE_MAX - sizeof(__be32)) / sizeof(struct xfs_acl_entry) \ > + : 25) > + > +#define XFS_ACL_SIZE(mp) \ > + (sizeof(struct xfs_acl) + \ > + sizeof(struct xfs_acl_entry) * XFS_ACL_MAX_ENTRIES((mp))) > + > /* On-disk XFS extended attribute names */ > #define SGI_ACL_FILE (unsigned char *)"SGI_ACL_FILE" > #define SGI_ACL_DEFAULT (unsigned char *)"SGI_ACL_DEFAULT" > From ceifund@fatherjosephbaldo.co.ke Wed May 29 12:59:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_NUMERIC_HELO, T_HK_SPAMMY_FILENAME autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 61E0D7F4C for ; Wed, 29 May 2013 12:59:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 411EB30404E for ; Wed, 29 May 2013 10:59:01 -0700 (PDT) X-ASG-Debug-ID: 1369850333-04cbb0049a288980001-w1Z2WR Received: from outbound-02.safaricombusiness.co.ke (outbound-02.safaricombusiness.co.ke [41.203.208.109]) by cuda.sgi.com with ESMTP id J0SS2MIC9matxMDi for ; Wed, 29 May 2013 10:58:53 -0700 (PDT) X-Barracuda-Envelope-From: ceifund@fatherjosephbaldo.co.ke X-Barracuda-Apparent-Source-IP: 41.203.208.109 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AoJZAKxAplF/AAAB/2dsb2JhbABaD4J6g2uBcoJJpVYhiGmMMQIWc4EIAQECaRUBAQsBAQMEAQEsIkhJAgQYLAIYAwEMCIVBAQEBBCaBeQEBGplmjmmRcIEDjE6EDA6BBgOJGYZlgSuMU4Mqh1WBMAGBJQI6OYE0AQ X-IPAS-Result: AoJZAKxAplF/AAAB/2dsb2JhbABaD4J6g2uBcoJJpVYhiGmMMQIWc4EIAQECaRUBAQsBAQMEAQEsIkhJAgQYLAIYAwEMCIVBAQEBBCaBeQEBGplmjmmRcIEDjE6EDA6BBgOJGYZlgSuMU4Mqh1WBMAGBJQI6OYE0AQ X-IronPort-AV: E=Sophos;i="4.87,765,1363122000"; d="pdf'?scan'208";a="1918347752" Received: from unknown (HELO hosting-sme03.safaricombusiness.co.ke) ([197.248.5.5]) by smtp02.safaricombusiness.co.ke with ESMTP; 29 May 2013 20:58:50 +0300 Received: from localhost ([127.0.0.1]:54547 helo=197.248.5.5) by hosting-sme03.safaricombusiness.co.ke with esmtpa (Exim 4.80) (envelope-from ) id 1Uhkdj-001XMz-Ln; Wed, 29 May 2013 20:58:23 +0300 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_961754f03d626e2a8419d54327d0f904" Date: Wed, 29 May 2013 20:58:22 +0300 From: ceifund@fatherjosephbaldo.co.ke To: undisclosed-recipients:; Subject: Micro European Fund Message-ID: <1210a263e7968ee0363afb02051f30a5@fatherjosephbaldo.co.ke> X-ASG-Orig-Subj: Micro European Fund X-Sender: ceifund@fatherjosephbaldo.co.ke User-Agent: Roundcube Webmail/0.8.5 X-Barracuda-Connect: outbound-02.safaricombusiness.co.ke[41.203.208.109] X-Barracuda-Start-Time: 1369850333 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.25 X-Barracuda-Spam-Status: No, SCORE=1.25 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=NO_REAL_NAME, RCVD_NUMERIC_HELO, RCVD_NUMERIC_HELO_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132386 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO 1.25 RCVD_NUMERIC_HELO_2 Received: contains an IP address used for HELO --=_961754f03d626e2a8419d54327d0f904 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=UTF-8; format=flowed KINDLY PRINT OUT AND FILL THE FUND RELEASE FORM WITH YOUR CORRECT ID IMFORMATION, Scan AND SEND TO EMAIL: co-odinator@fundcei.de Or FAX TO:+494049219130 FOR CLAIM.. --=_961754f03d626e2a8419d54327d0f904 Content-Transfer-Encoding: base64 Content-Type: application/pdf; name="Attention Winner.pdf" Content-Disposition: attachment; filename="Attention Winner.pdf"; size=132925 JVBERi0xLjcKJeLjz9MKMjAgMCBvYmoNCjw8L01ldGFkYXRhIDMgMCBSL1BhZ2VzIDEgMCBSL1R5 cGUvQ2F0YWxvZz4+DQplbmRvYmoNCjEgMCBvYmoNCjw8L0NvdW50IDEvS2lkc1s1IDAgUl0vVHlw ZS9QYWdlcz4+DQplbmRvYmoNCjUgMCBvYmoNCjw8L0FydEJveFswLjAgMC4wIDU5NS4wIDg0Mi4w XS9CbGVlZEJveFswLjAgMC4wIDU5NS4wIDg0Mi4wXS9Db250ZW50cyAxNCAwIFIvQ3JvcEJveFsw LjAgMC4wIDU5NS4wIDg0Mi4wXS9NZWRpYUJveFswLjAgMC4wIDU5NS4wIDg0Mi4wXS9QYXJlbnQg MSAwIFIvUmVzb3VyY2VzPDwvRXh0R1N0YXRlPDwvR3MwIDE1IDAgUi9HczEgMTYgMCBSL0dzMiAx NyAwIFI+Pi9Gb250PDwvRjAgNyAwIFIvRjEgNiAwIFI+Pi9YT2JqZWN0PDwvWDAgMTkgMCBSPj4+ Pi9Sb3RhdGUgMC9UcmltQm94WzAuMCAwLjAgNTk1LjAgODQyLjBdL1R5cGUvUGFnZT4+DQplbmRv YmoNCjE5IDAgb2JqDQo8PC9MZW5ndGggNzM3NzYvRmlsdGVyIC9EQ1REZWNvZGUvQml0c1BlckNv bXBvbmVudCA4L0NvbG9yU3BhY2UvRGV2aWNlUkdCL0hlaWdodCA1NTgvSW1hZ2VNYXNrIGZhbHNl L0ludGVudC9SZWxhdGl2ZUNvbG9yaW1ldHJpYy9JbnRlcnBvbGF0ZSB0cnVlL1NNYXNrIDE4IDAg Ui9TdWJ0eXBlL0ltYWdlL1R5cGUvWE9iamVjdC9XaWR0aCA1NDA+PnN0cmVhbQ0K/9j/4AAQSkZJ RgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAIuAhwDASIAAhEBAxEB/8QA HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEB AQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMi MoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpj ZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbH yMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooyD0Oeo/EHBH4Hg+9FABXxB+0V+3d8Iv2bP2lv2Nv2YfHFwqeNf2zvFv xC8JeB5xdwxQaFP4E8Hv4gjvdXgbdO8HiXxDd+HfA+hxRhHute8QW5RmitLoL9uswRSzdB1798D8 zX+Vx/wXt/4KD+K/jV/wWT1rx/8ACjxPJb6T+xB4u8KfDP4PapY3ZktbLxl8GPE58T+M/EVsLaRY mln+Lh12yW6gkJvtH0PRlkmdYk2fvn0c/BfGeOfH1ThHDqpClHJMyq/WIylCFLN8dRqZTwxCrUjG TjRlxBi8LisUrPmy/LMxbTimeXm+YxyzCrEO1/awVrXbpxanXaXdUoyiv784H+qQCCARyCAQfY9K Wvnj9k39oTwv+1Z+zZ8EP2ivB7w/2D8Y/hn4U8e2trDL5w0q61vSrebWdAnk/wCf7w3rn9o+H9QR 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 2oykmXxV4SsJtHvLl5LjXvCV5fXc+u2/6C/8EDdK/aD+GH/BP7wj+zB+1P8ADzxN8Nvjb+yf428a /A7WtI8RW26DWPCllqQ8ZfDvxJ4V121lu9E8V+Dp/CHi7T9B0fxD4e1DUNKuH8O3duk0UtpNDF+2 FFfp2beLXF/EXAeH8PuJcX/rBleV5ngs04fzHMp1a2dZJPC0cRhKuCo5hKU6uOy3FYHEPD/VswlX q4T2NCWFxnsofVo8VPAYejiniqMfZTnCUKsIWVOqpNSUnDaM4yV7wspXfNG+oyQOygJtzuU/NnGF O7tz1A/DPen0UV+YnaFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB THkSNS8jpGgwCzsEUE8AFmIHJ4HPNPr+cj/g57/bg1L9kT/gnFq3gzwL4ku/Dfxe/ab8a6L8LPBm paRey2Ou6J4b0meDxh8RvEunXFvLFcQC30HS7TwpLcwsJbS58b6fMhR9jj6jgrhXH8ccW8PcI5W1 DG8QZphstpVpwnUp4WnVlOeJxtaEGpyoYLCUMVjKyi4ylTw7hGUZVIMwxNeOGoVsRPWNKEptXs5N aRim9nKTjFebP6NgQRkEEHoQcj8xS18Qf8E3v2r9N/bd/Yf/AGbv2m7Ka2fUviZ8NNEu/GVramLy tK+IuirJ4b+I2kCOH5YY9P8AG+j69BaxsqO1itrMY0Eqivt+vJznKcwyDN80yLNsNUweaZNmOOyr McLVjKFTD43L8VXwmJpSjOMJLlq0JOLcY81OpRqJctWF9KdSFWnCrTalCpCM4SWzjNKSenk/vT7B RRRXmlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUjMFUsegGT/gM45PQepoAWiiig A6da/C/9kr/grboX7RX/AAV5/bq/4J/RalpUvhT4F+E/BzfCC+h8iO613xl8P5W0X9pHT5rpWdtQ n0vxT4t8P6bplgr5tLTwR4j1BFZLibyf0N/b+/ap0H9ij9jf9on9p3XXt2Hwk+GWv+INBsboqIdb 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 Hy5OMAn6HOfugdTnipaQgEYIBB6gjI/I1/IJ74gdGOFZWPXAYE49eDTqaERTlVVT0yFAOPTgU6gA ooooAKKKKACiiigBkcYjDBehYsAe2QBjPfpx3xwc9Sr52MFyWKkDBAOSMA5JGMdev05p1JkAgEgE 5wM8nHXA7474oAqQRyJISVwMEEkj2I24PPOOenUZyMVcphkRW2lgDjPJwPpk8ZI5AzkjnGOaRpo1 BO8HBxhSGOewwOhPbOBnvQB8W/8ABRX9q/R/2Iv2Kv2i/wBp3VZbYXPwr+Gmt6p4Vs7toli1j4ha sIvDnw20JlmYLLHrPjrV9A0+4VVlZLaaabynWMq3+Mx/a2seKNb8Q+MfEeoXWseIPE2s6jrGs6vf ytPfanq+q3k2o6vqN5O+Hmur2/nmnuJW+eSZ5HOSxx/dd/weN/tlnS/BH7OX7CfhfVAuo+NtVuP2 gvivY2sw81PDXh2TUfCHwu0m9CsS9prfiKXxnrcltIq4u/CGjXakKYy38K1pALa2hgUf6uMBj6uf mc/i5Y9uMcV/ud+y08IvqORZj4kZjhbVs2rVMdhKlSnZrCYd4rJchhCTje1Sp/rJnSV0n/sdVXtC T/NONsfzVI4SErqmuWSvpzO1Sq38lSp/+BLuj7X/AOCeH7VOp/sUftq/s6ftM2M90mn/AA0+JGkX XjG2tHkWbVPh3rvneGfiLpISPiZ9Q8E6xrlvbxurqLxraUL5kSMv+yVoGtaX4j0TSde0S+ttT0bW dNsdV0jUrKRZrPUdL1G1hvdPvrSZSVltruznhuIJVOHjkVhwRX+HNX+p9/wbf/tij9q3/gmV8LNE 17VUvviH+zVd3P7PfjETTl72TS/B1lY3Xw11OZJP3pt7r4cah4d0oXkjOt3qvh/WdsjPFIken7Wv wj/tDhnw98bcswvNiOHMdV4B4qrU4e88nz2pWzXhfF13GP8ADwWfYbNssVSbtTjnFCmpRU4xa4Dz DlrYvLqktK0ViqCb/wCXlJRhXir9ZUpU52W/s27X1P3ypr7tp2EBuxPQe/Q9s44IzjIxQ7pGMuwU fj/IZP19KFdH+6ytkZwCM49SOo69xX+Fp+mEQadeDGrkfxK4UHgdjznOc8Aegx1mGSASMEgZGc4P cZ749aWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo 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 m3uja94f17TrPV9F1rR9St5LTUdK1bS9QhuLHUdN1C0lltb2xu4Jra6t5JIJ4pInZT/Al/wWx/4N ftW8BDxZ+1J/wTV8NX/iHwcr3niD4gfsoaetzqHiLwtCxkudR1v4HtNJcXniPQoCZJp/hpNJP4g0 mLK+D5tctHtfDmk/6AtBAIIIBBGCDyCD1BHcGv0nwy8VuMPCfPI5zwvjmqFaVKObZJi5VKmT51hq cv4OOw0ZrkrQhKawuYYZUsfgpS5qNapSdXCVuPGYHD46l7OtHVJ+zqxsqlOT6xl2vbmhK8JdUnaS /wAJtJ9Q0K8uLC8tri2ms7ia1vtOvI3t7i1uoJWhuIZLeZUmtbmCRHimikRZI5VeOVQ4bHV211Dd xiSF9yn7ykYdD/ddf4SPU5DdRxiv7+/+DpH/AIJS/sb2n7OPxJ/4KPeG0j+Cv7Qnh/XfBmmeIbLw rpVr/wAIn+0HrHjHxVpPhpYfE+gQNaR6b49tbS/u9fPjvSsXOpWGjajB4q0/W5JbHVNG/wA+7QIS ttNM3WWTavusfGQeOrFuf9ngAYr/AKDvoW/SAxni9lmCp5Th8dHIlHM6GZ5Zm6qzrcNZlleFwuKx VLKcxgnSx2W1auPwkKUYcuHf1q6oZfjaWJw1b8q4iyqOAnJ1HB1XyOE4WtWhOU0nOD1hNKMm38Xu 7zi4yW/RRRX+hK2PkHu/VhSEgAsWCgckk4AHGSScDGPfA5J5padHbW95JHaXdx9ktbmSOC4u/JNx 9lhlcJLci3VkacwITL5KsrS7NgYFsjDFTrU8NiamHpRrYinh8RUw9CUpQjXr08PXqUaMpwjOUI1q 1OlSlOMZSgqvNGMnFJ3CzkuZ2V0m7XsnJJvXsm38u1zd+Gnw6+KHx7+Ivhb4O/A3wL4n+JXxJ8b6 pDovhfwp4R0y41bXNZ1CckeXa28KkW9pbRrJdalqt5JbafpdhDcajf3VpY2091H/AKK//BFT/g2t +GX7FQ8MftI/tnWfhn4yftWRx2mseGPBRWDXvhZ8B74hLiGbTUniNn44+JNg+0TeLryGbQ/Dl+jf 8IXayXlla+ML79L/APgkP/wSS/ZF/wCCbvwW0DW/gxb23xR+K3xK8LaNrHjT9pXxFptqPFfjfTNX srXVbSx8Kwk3K+Bvh7IJYbzTfCmk3Uj3aLZ3vibU/EGr20N/F+xdf8zn0qfpr8a+MmbZnw/w7jMw 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 FUsPhn9o74VLfP8AbfCPjnStOuE+GXxK8U/DzxPa+bofizRp47j4XPJcaRdy3dm0clprNlpmoWtz aQf2SE/KSvzcZABGG4yOenPr0qlNpmm3N7aajcafY3Goael1HYX81pby3tjHfLCl7HaXUkbT2yXi W8C3SwyItwsEKyhxGgW9Xd4jca1PETizHcY4rK8LlOZZxh8ulnGHwM6k8DXzbCYGjgcXmGFhWTrY anmEcJhcTPC1KmIeHrqtGGIrUpUpRnCYZYShHDxnKpCm5+zcklJU5Scowk1pJw5pLmSV1ZtJ3GR7 ti7xhgMHJycjjJI656/jT6KK+GOkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKAP/ZDQplbmRzdHJlYW0NCmVuZG9iag0KMTggMCBvYmoNCjw8L0xlbmd0aCAyNzY2Ni9G aWx0ZXIgL0RDVERlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZS9EZXZpY2VHcmF5 L0hlaWdodCA1NTgvSW1hZ2VNYXNrIGZhbHNlL0ludGVudC9SZWxhdGl2ZUNvbG9yaW1ldHJpYy9J bnRlcnBvbGF0ZSBmYWxzZS9TdWJ0eXBlL0ltYWdlL1R5cGUvWE9iamVjdC9XaWR0aCA1NDA+PnN0 cmVhbQ0K/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAALCAIuAhwBAREA/8QAHwAA AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpT VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/AP8AP/oooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooor1TwJ8PoPF+heKNTlkv4rjRrbzLAW7Qi3uJ1heV4Z1kt5JH4VT+6ljIDc56jysggkH gg4I9CKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKkhhl uJYoIUaSaaRIoo0BZnkdgqKoGSSzEAAV+inw78IxeF/B1jpE0Si6ubfz9TIAy9zdJmZWOMt5Ybyh nIwuK+JviT4Rn8H+Kb6xKt9iuZHvNOl2kK9tM7MEB6FoWJjYA9Ap7iuAoooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooopyLvdULBQzBSzcKuTjJ9h1NIwwxAOQCQD64PW tHR9Luda1Sw0mzXdc6hdQ2sXXAaVwu5sfwoCWb2Bq/4r0aTw/wCItW0eRWX7BdNCm4EFoQFML89Q 8ZVs981z1eu/Bbwzca/4zsboRk2OiOl/eSlcoroSbaLnjfJKoIHZUZu1ffdfO/7Q3hptR8P2evw4 8zRZik645a1uSqMQQM/JIEY54xnpmvi+ijBPQZ7/AIetFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFX9M1O+0e+g1HTZ2tb22YvBOmN8bEFSVyCM4JHToSKn1vXNS8R ahLqmrXH2q9mWNZJtiRlhGoRciNVBIA5JGSaya+7PgT4Y/sPwfHqMwxd68/2xwVwUt4y8dshyMnK 5kz0+fGODn2ysnXbC21PR9SsbuBbm3uLOdJIWGQ4MbYA9DnoRyDyK/MW7jEN1cwhDGIriaMIxJZA kjKEYnklcYJPORzVerdpfXVi7yWkxheRDG5CoweNvvRusisrI38SMCrDhgRTZbppQ2YbZC+NzRQJ Gcgg5UIAiE45EaqMEjGOKrUUUUUUUUUUVasbO41G8tbC1jMtzdzx28EY6tJK4RR9MnJPYAmvpv41 eEn03wX4SuAvmTaMkOnXkqrnKywIqs7AZIEqBBnONw55r5aooooooooooooooooooooooooooooo ooooooooooooorY0zw/retZ/snS73UNrbG+yQPNtY9FfYDsJ7bsZ7V1ln8KPiBe7vL8N3sQQZP2n y7bPsvnOpY/TNaZ+CnxDAjP9jJ+87C7gJj6f6z5vlxnnG6tS5+Afj6FYmit7C6LorOsV4iGJiOUb zhHkr3K5B+vFdh4M/Z81N76K78XSw29lA6ubC1lE01yVOQkkq/JHEcYbaWdhwNvWvre2t4bS3htb aNYbe3jSGGJBhY441CoijsFAAFTUEZBB6Hg18lfEz4I6tdazda14ThiuLe/kae508yLFJBcSEtK8 JbCNHIxL7SVKMSBkECuV079n3xhd6dNdXUtnYXgYfZ7GSTe0i87jJIg2xtnAVRuHUlvTMuPgN8Q4 SvlWNlcq3UxahApX/eEpj/DaW/CuXuPhd4+tpngfwxqTuhwWgh86M+6yRlkYe6kiszUfA3i/SbWS +1Hw/qdpaQgGW4mt2WKME4BduijJAyeMkDvXKUUUUUUU9EZ920EhELsQMhVGBk+gyVXPqQO9Mor6 F/Z/8Ix6trtx4juwGg0LYttERnfe3CSKrntiGMMcdd7Iexr648R6HZ+I9Fv9HvkV4L23eMkgExvj Mcq56PG4DKR0IFfmprGmy6PquoaXMcyWF3Pas2CN3lSFVcA9A6gMPY1m0UUUUUUUUUUUUUUUUUUU UUUUUUUUUUUV9E/CfwHBr/hHxZf6jplpcfaIJINHurm1ilnhuYIHZ5bWZ0MkY8xlQmNgCy89K+eZ I2ikeJwVeN2jcEYIZGKsCDyCCCCKZRRRRRRRXT+EvFeqeDtZttY0yVgYnVbq1LEQXtsSPMt51HBD DJjfBaKQLIvIwfuLwL8VfD3jl2tLXzLHU0j8xrG5K7nUY3NA44lCnrgAgYJAzXp9FFFFFFFFZmra zpehWUuo6vfW9hZwj55rmRY1yfuouTl3Y8KiBnY8KCa+Jvin8WrzxjNLpGkySWvhyJ8FRlJNSZGy JZxwwhDANHCe4DMM4A8Toooop4ZRG6lAWYoVfPKhc7lx/tZGT/s0yvVvBOmeG7rwp4zl1TVLK01m awEGkwXMojfbbsl3IybsKTNLFFGACWwp4wa8ppVUuyqoyzEKoHUknAH4k1+h/wAK/CkPhPwjp9uA ftl/FHqN+7DDG4uI1by/92FCsaj2LHljXpFfFX7QHhV9M8RQ+ILa22WWrxKtzKgOwX0QwS+OFaWM KQTjcUI5PX58orQXTnkto7iG5s5XbdvtFuFS7iC9GaKURhww5AhaVlA+cLVOSKSIgSAKSNwG5W4y RztJwcg8HB9qjoooooooooooooooooooooooopSCpwRg4Bx9QCP0NJWjpGmXOs6nY6VZqGub+6ht YgTgBpnCBmPZVzknsAa/SfwvoFt4a0DTdDtwDHZWscMjYA86XbmaVh6ySFmOfXmviz42eDU8L+KG vLRQun675t5Cg6RXIf8A0mMDspZhIoz/ABkdq8aoooooooorW0TW9R8O6pa6vpU3kXtm++JyodDk FWSRDw8bqSrKcZB4IODX2Z8N/jTYeLZLfR9ZgTTddcbEaIk2V64HWHeS8MjYyYXZwOiyNXu1FFFF FFcD41+Ivh/wVZSzXlzHcX4G230yCRWuppGzjcoyYoxjLyOAoHqcCvhzxv491zxzf/adSmMdpC7G y06IkW1srcbtuf3kzKAHlbnqFCqSDxFFFFFFFFFFen/CbwlceKPFunbrVptM064jvdQlZCYAkLB4 4XbG0mV1ChM5IycYBI/QgAKAqgAKAAB0AAwAPYDilrxH496Peap4JaezV5P7MvIby4iQEs1uAY5H wOSIg/mN6KpPQEj4VooooooooooooooooooooooooopybN6+YCU3DeF+8VzyBnvjpSNjccdMnH0z x+lb/hXSItd8Q6TpU8yW9vd3kUdzPJIsaxW4bdM29yFB8sMFyeWIA5rV+Iejx6F4w1qwgaN7UXPn 2jRMrIbedVkjClSR8m4pjtt9MVxVe/8AwB8I/wBseIpfEFx/x6aDsaJSD++vZ1cR89NsKgyMOu4p 2zX2zXi/xx8LjXvB817BC8t/ori8g8sZcw/duUwMlh5ZLY9VB7Cvg+irdnY3N+7x2sayOkbSFTJF GSq9k8108yQ9FjTdI54VTUUlvcRFxLBNGYzhw8ToUOcfNuUbeeOcc1DRRRRRU1tc3FnPFc2s0lvc QOskM0TFJI3U5V0ZSCrA9CK+kPhd8Ztfk1ux0HxJc/2laahKttBeSqq3VvMwxHvdAqyo5AUll3gk HLV9hdaKKKK8O+LXxVfwUItJ0qGObV7uBpDJLzHZxNlVkKjlpCeUU/LgZORXxFe3t1qN1Pe3s8lz dXMjSzzysXeR3JJJJ7c4CjCqMKoAAFVaKKKKKUYyM5xkZx1x3xnjPpXv3gT4P6F440s6lZeK5leN xFdWX2GMXNnLjPlzqZzww+aKVMxyLyvIZR6nb/s5eFIxH9o1PVrhlH7zEkMSyH2CxFkGemGJ9TWj Y/s/eCLW4aac6hfREMEt57krGucgHMQRmIB43E4PNSf8M/eA/O83bqmzdu8n7YPLxn7v+q347ffz jvnmvWNC8P6R4bsY9O0axhsrVP4Yl+aRu7yyHLyOe7OxP4Vs0VHNDFPFJBMiyRSo0ckbgMjo4IZW U5BBBIIPBFeJXvwB8E3eoNeoL61ikkMkllBPttyScsqZBeNCeiowAHAxW1ffBbwBfiENpTW/kxLE DazvCXVAFBfb1bA5bhieSa5e7/Z18GyxyC0vdYtJWOY2e4iuI4/9ko0KM6/WTd71z/8AwzVpwGW8 T3YAGT/oMIA98mfpivnvx34d0bwvrTaTo+t/24IY/wDS5liWNbe43EG33I7pI6qAzlThSdp5BxxV FFFFFFFFFFFFFFFFFFFFFFKCVOVJB9QSD+YpXd5GLOzOxxlnYsxwMDJJJOAABzwBihVZ2VEUszEK qqMlmJwAAOSSeAK/Qv4TeGF8MeDNNgkhMV9fJ9vv9wxIZpyWRXB5Xy4iibT0IPAJNel1WvYjPaXU KhS0tvKihgCpZkYAEHgjJHWvzB1i0uLHVdSs7qMxXFte3UUqFduHSZwcLgYBxleMYIxxWdRTzLKw 2tJIy4A2l2IwOgwTjA7CmUUUUUUV6r8G/Dq+IPG+niSTZDpYOpyDBzIbdlEUYI+7mRlYk9lxX6Bj gAelFFFFfF/7RmmPb+JtN1IBjHfaeIySDtEtvIQVB6coQcfU1870UUUUUUVv+HvE+ueFrtr3Q7+a ymkVUmVDmKdFbcqTRHKSBTkruGVydpGTX3H8K/iJF440f/TXt4dbs38q7tkdVaYAZW5iiJ3eW4+9 gEIwK56Z9WoooooooqvdXVtZQS3V3PHb28KNJLNK6oiIoyzMzEAAAV8kfEn46TagL3QvCSmCyO6C bWi5E9wOVkFlGAPKhblVndi7jJREUhm+Z2ZmYszFmYkszElmJOSSTkkk8knkmkoooooooooooooo oooooortPBvgufxrenTrHVdNs77Bdba+eWOSaNeWe32xssxQcvGrCRVBbaVG6vZrP9mvVm3fb/EN lDgfILa2lmyf9oyNFgfTJrTP7NKYjx4mfP8Ay2zZLg9M+X+844zjdnnqK1Ln9mzRXWIWuv38DKii Uy28M4dwPmZQGi2AnovOP0rrvB3wQ8MeFrxNRuZJdavoSGt3vI0W3gcciRLddymQHlXdm29VAPNe 09OlFFeLeP8A4MaP4zvjq1tdNpOpyALcSxxrJDdbRhXliyv7wDA3qwLADdnArn9O/Z18OQ6dNBqO oXl3fysCl5HthWALn5Y4hkFTnLbyzH1HbMuP2atLcqbbxLewj+JZbOGYH/dIliK++d34Vy9x+zZr qzOLXX9NkgB+R54riORh/tIiyKpx2DEdea5Hxf8ABnU/B2jzaxqGu6O8cRVUt1aZLi4d2CiO3SRB 5knO4qOihmJAFeM0UUUUV9nfs++FbOy0KbxMwd7/AFN3t1LjCxW0DcLH673JZm5zgDjbX0VRWXda 5o1lMttearp9rcOcLDPeQRSsT0AR5AxJ7cc1pI6uodGV1YAqykMpB5BBGQQR6U6vMfiz4VsfEvhD U3uV2XWkWtzqVlcKMvHJbxNI6cctHKiFHXvkEYIBr89aU4wMDBA5OevJOfbjjj09c0lFFFFFFWbO 9u9OuYb2xuZrS7t3EkNxbyPFLG4PBV0IYZ6EZwwJVgQSK+w/hd8Z7PU7M6d4x1O1s9ThZEt7y4xC l8hGPnfAiWYHrkqGzkDrX0PDNDcRJNBKk0Miho5I2Do6nkFWUkEH1BqWiiiiuP8AGXjbRvBOlvqO qS7nJEdtZxFTc3UxBISNCRgYBLO2EQAliBXxR8QPinrfjidodz6doq4EWmRSEiQjnzLp1wJXJ6Lj Yo4APJry6iiiiiiiiiiiiiiiiiiiiiirVjfXem3ltf2M8lteWkyT288TbXiljYMrA9+RhlOVZSVY FSQfrz4XfGm68R6nD4f8RxQJeXKkWd9CPLSeVBkxSxk7Vd1BKFMBjkYBxX0lRRRRRRRRXn3jr4j6 B4EtFe/ka61CcEWmmWpRrmUgcvJuYLBCuRulk9QEV2IU/DPjTxtrHjbVH1DUpWWBGZbKxViYLSLJ wqjjdIR9+QjLH0GBXHUUUUUV+lfgO0t7Pwb4ahtkVI/7GsJTsGA0k1tHLI5/2mdiSfWuivr61020 uL69mSC1tYnmmlkYKqRoCzEk+w4A5J4FfJfjb9oG8vornTfCls1hGzNF/a0xBuWjBKlreLBWIv1V 3JZRyFDYI+bri7urueS5urie4uJWLyTzSvLK7E5LNI7Fic+p47V7l8NPjRdeE4E0fXYp9S0nzR5N wsha6sY2wGVVfPnQqcsI9ysuSFJ4WvsfRdd0nxDZRahpF9Be20yqwaF1ZkJGdkiZ3RuvRkcBgQQR WhcwR3NvPbzIJIp4ZIZUbo8ciFHU+zKSD9a/MbxBYDS9b1XT1R40tL65hjR87ljWVvLBzycJtwTy RgnrWPRRRRRRRRRX2D+zlq+pXemazptzJJNY2E0DWbSFmERlVjJAjHOFGA4TOF3HAxX0vRRRVS/u GtbK7uVXe1vbTzKo/iMUbOB+JGK/NPxN4g1TxHq95f6nczTySXEpjjdyUgQOQscaZ2oFUAcAZxzX PUUUUUUUUUUUUUUUUUUUUUUUUU+OSSGRJYpHiljYMkkbMkiMDkMjqQysDyCCCD0NfSHwv+NWqWl3 ZaD4quheadKywQapdOBc2meEFzO2POhHA8yUmRRyztX19b3Vtdxia1uIbiJgCskEiSoQRkEMhIII 96noooopCQoLMQFAJJJwAB1JPYCvnX4g/HXTdJjvNJ8LEX2rI7W73xXNjaspKyMjHi4kQjaoXKBs 7m4Ir5B1PVL/AFi9n1DU7qa8vLhi0k0zl2OTwq5JCovRUXCqOAKoUUUUU5goCbWJJUlwRgK25gFH r8oVs/7WO1bnhfSYde8RaNo1xO1tDqWoW9pJOib3RZXCnav95vuKTkKWDEEAg/oDrvi/wr4C0yK2 vb6GE2VmkVnp0bB7uSOCMJDGsSZZdwUKGcKvfNfGfj74ra943c2xJ03R0Y7LC3kb98Ax2tdyDHmt jHyY8tT2Y815aqliFUFmYgAAZJJ4AAHJJNX9Q0u+0p4YtQhNtPNClwttIcTpDKMxPLH1i8xfmRH2 yFcMVCspOfXQ+HPFOueFL6O/0W+mtZFZTJEHJt7hAcmOeEkpIrDjJXcucqQQDX2p4E+Mnh/xc9rp twW03WpI1Bt58CCeYAb1tpc7WyclUbDkcbTXz98e9An07xhJqqWxSx1W3gkSdEIia4jQRyqzAY8w lQ5yQWDA8814dGquxDOqAJI2WOAWVGKqMckuwVR7nJwASGUUUUUUUUV9/fBbRf7H8C6a0tqLa61A yXtwWUrLKJWJhaQHnIi2AAjgcV61RRRTJEEiPGwBV1ZCDyCGBBz+dfmz468P3XhrxTq2m3MLRKLu ae2YqQkttM7PFJGcYZcHbkZwVIOCCK5AAk4AyTwAOpPpRRRRRRRRRRRRRRRRRRRRRRRRRRXqXwo8 W6voHivSbS2uZ30/UbuKzurEuzQOsx2rIsZJVJI2IbcoGVBDZFfoKDkA+ozS0UUV8rfHnx9rGnX8 PhfSrmSyhe1E99NCSkswmyqwrIOVj253YwSeM4xXyh160UUUUUUVc0/ULzSr231HT5jb3tpJ5tvO EjdopACBIqyo6b1ySrFSUbDKQwBC6hqN/qt1Le6ldz3t3Md0txcSNJI592Y8AdgMADgACqVW7G+u dNu7e+s5BFdWsiywStFFMI5F5VvLnjkiYg8gOjDPapNU1S/1q/udU1O5a7vryTzLi4dY0MjhQgwk SRxRqqKqokaIiKoVVAAFUKKckjxOskbvHIjBkdGKOjA5DKykMrA8gggg9K6fVPGvinW9KttF1bWL i/06zcSW8NzHbvKjgFQWvPJF7KACQFmuJFA6CuWoooooooorq/A+ky634s0PTYY1laa/id0YAr5M J86UsDwVEaMSO9fpVGixRpGiqqoqqqqAFAUYAAHAFPrg/GXxG8NeCYc6pd+Zeuu6DTrXEt3L6EoC BFGT/wAtJSq9gSeK800T9ojw9qOoxWeoaXd6VBPII47x5o540LnCm4VVQxLkjcylwvU8c19CRSxz RpLE6yRyKro6kMrKwBBBGQQQQafXy9+0npTvZeHtYit1KQXF1Z3VwqfOgmSOS3V2A4QtHKBk43lR 1Ir5I6dKKKKKKKKKKKKKKKKKKKKKKKKKKK9u+Auhwat4z+1XMDTR6TaPdxt/BHcuwjhZ+CCQPMKg 9xntX3VRRRRXyL+0focqaho2vxwnyJrd7G4lUEqJo3MkQc9AWQkLnrjA6V8w0UUUUUUUUUUUUUUU UUUUUUUUUV7F8CYJpviLpkkcRkS2tNQmnbBxFGbZ4RIT0GZZY0GepfFfejukal3ZURRlmYhVAHUk nAAr5c+LPxm+zltA8H33+kIzLqOpwgMsZHHkWshBUv18yRdwX7qnJJHyreXt3qFxJdX1zPd3MpzJ PcSNLI592ck4HQDoBwBVavXPAfxf8Q+D5ore6ll1fReEewuJS0kCDgNZzPuMZUf8szmNhxhTzX2T 4Q8eeHfGtr5+j3YM6KDcWE2I7y3J674icsmeBIhaNuzZyBi/F3RZ9c8C6vb22DLbIt+FP8S2mZXU eh2AkH245r89CMEg9RwaKKKKKKKKKKKKKKKKKKKKKKKKKK+8PgXoUel+CrW9e0WC81WSS5kmK4lm gJAgLEjO3aCUHTByOpr2iopp4baJ57iWOGGJS8ksrBERVGSzMxAAAGSSeleRal8dPAOnXrWQvbq+ 2PskubG2M1qhBwcSlk8wA5y0Qcema9L0TXdK8RafFqej3cd5ZzD5ZIycqw+8jqcMjqeGVgCD2rXr kPHmkQa14R16ymtlu2Om3ctvERlvtUMLyQNGeqyCRV2lcHPTrX5rEEEgjBHBB6g+hpSSQAewwPYZ J/mSfxpKKKKKKKKKKKKKKKKKKKKKKcjbHVwAdrBsMMqcHOCDwQehHpTetfQvwW8Y+G/BeleJ9Q1q e1iupZLVLGFAr6ndrHFI0kMaDMi2+8xkO4WLzC53EqQOd8e/GPXfGKfYbRW0bSg7FoLaZxPcqeFF zMpXKgcmNAFJPzZHFeOdetdT4f0XSr+21PUdX1mz0+10y3eZLH7RCuqapPt/dWthbudzb3KrJKFY RKSxUhWK8wxBZiqhFJJVQSwUZ4GWJJwOMnk9abWtouuap4ev4tT0e8ls7yHIWSM8Mp6pIhysiHur AjuMEZr6o8E/G3Ste0+bQvHE8Wn3d1FLaDUChSwuIp0aNjcSZK2rgMQWkKwkc716V8w+KdMstI13 ULHTtTs9Xsopibe+sZo7i3ljf51CzRM8TsgIVyjFdwIFYRdTGiBAGVnYvk5beEAUjoAuzI75ZsnB ADKKKKKKKKKKKKKKKKKKKKKKKKK/TTwdGYvCfhuMxmIpommKY2GGRhaRbgRxgg5z39ah8XeLtI8H 6VPqWp3EaMsb/ZbbeBNdzAHZDEmdxLHGSAQoyTwK+GPGHxS8VeMPOt7u8NrpbyFk061zHEUBOxZn HzzYGM7jtLc7c15xXc+DfiF4i8ETltJuQ1nLKslzp84320+MBjg/NE5UY8yMq3TO4DB+z/BHxX8N eM44oI7hdP1goDLpt2yo7Pj5/s0hIS4QHONp3gcsgr05huVl4IZSPUHIx9CDX5qeONJn0XxXrlhc RCFkv55UUDCmKdzNGyAcbWVwRjj04rlKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKczAhAFClVIYjOXJZjuOemFKrgcfLnvXUeB7S0vvF/h61v4EubGbVLYXcMjbI2gV t8jStkARRqpkkDHaUVlb5Sa+s/G/xx0Hw59o0rQUXVtQiiMaTQOn9n20m3ag8xdwl8s4ysfy8bd3 p8fa94k1rxNeNfa1fzXs5LbBI37qFWJOyGIYSNBnGFGT/ESeaz9PsLrU722sLKMy3V1KsMMeVXc7 nAyzEKoHUsxAA5JrT8SaIvh3UpNHkuo7u+tERdQaDBt4Lp0DvaxPyZWgDBZZPlXzdyBfkJOBUkM0 tvLHNBI8U0Tq8ckbFHR1IKsrKQQQQCCDX074B+PlxHNZ6V4vWI2mxIBrCBhJGVACyXcYDblOPnkT pncV61j/AB30SC7vLLxxpV7aX2k6rFDatNbzxyA3ESFUKFSQ6tGoDAHKMp3DJr55jKBiZAzDZIAF IB3sjKhJPZWIYjGSBt4zkMoooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooqzaWV5qE62t haXN9cuGKW9pBLczuFG5isMKPIwVQSxCkADJwKhlilgkeGaOSGWJikkUqNHJG6nDI6OAyMp4KsAQ eCKZRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQAScAZJ4AHUn0r6M8SeAIt P+D2katJpdpb63bvBd3lzHaxR3slpdO2I7mZEEsnlrJGT5jHaAOcDj5zoooooooooooor334AeGJ tU8Ty664K2WixMobBxJd3K7UjB6fJEWZhn+JfWuP+L2hyaH461hDGyQX8o1C2Yj5XS4GX2nGDtlD ggdOPWvMqKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKUAsQAMknApKK9J+FXhB/ F/i2ytnA+wWDJqOoE9Ggt5EKwgc5M0hRCP7pY9Aa++9V0iz1fSbvR7qJXs7u1e1ePHARkKLt9CvB UjoRmvzb8VaDP4Y8Qanok53NY3LRo/aSFsPDJ9WjZSfRsjtXP0UUUUUUUVNJBJFHBK6lVuFd4iRw 6JI0RZfUeYkifVTUNKqlmVR1YhR9ScCv0W+GPhe28K+EdMtIl/0m8gi1C+kZcPJdXMSOwPGcRLti Uei56k1xPx78Lwat4VbW0iJv9EZZVdFyzWkjBbiNyBnYoIkHoUz3NfD1FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFPQxgSbwxOwiPHQPkct7bd344pleofC/wpaeJr/WDeXMECWWj3pt VmljjM19cwSQQbVcguIgzynaDtYITjivM5YmhlkhcYeKR43AORuRirYI4IyDgjg9ajr7V/Z/8I/2 T4fm8R3P/H1rvywIQQYbKCRlXOf4pnBkJHGwJ3zX0HXyD+0T4XFtqGn+J7aFwl4n2O/dRmMTR827 tj7pdSyZOMkKPSvmWir0Om3txbPdwQGaGN9j+WyPKDjJb7OrGcxr0aURmNTwWBqo0ciAF0dAcgFl ZQSOoBIGcZGcdM80yiinyOZCpIVdqKmFGBhBgH6nqT3OTTVALKCcAkAnrgE8nHfA5r1D4g33g++0 vwknhm4d59N0w6dfwPbvC2UKy+exI2FpJ3mY4Y7t5PavLq9P+EfhaPxT4ysILqJpdPsN1/eqAdrL AMwxucYCyTbAwP3lyO9foQqhVVVACqAoA4AAGAAB0AAqpqFnDqNjd2M6LJDd28sEiOAylZEKnIPB 61+afirQbnwzr+paNdKA9pcOIypBV4HJaBxjpujK5BwQcjFc/UkSxtKizSGKIsBJIEMhRM/MwjBX eQOi7lyeCwHIuT2durn7NqFtcQEnY7rLbygdvNhkQlWx18t5kz0c1n0UUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUU9JJIzmN3Q+qMyn81INMrb8O6Nc+INa07SLWN5JLy6iibYCSkRcebI2 PuqibmZjgADJNfpfpmn2+lafZ6daRiK2sreK3iQdFSNQo57k4JJPJJJPNXq8x+MGn3Oo+ANcjtYx LLDClyV27n8qB1klKDBO4RqxyOcV+etFKCVIZSVYHIIJBB9QRyD9KVpHf77u/wDvMW/mTTaKKKKK ciPI6xxo0kjsFREUs7MxwFVQCSSeAACSa+5fgb4KvPC+g3N/qlv9n1HWZIpRDIoE0NpEreSkmfmR nLs7IcEAru54HuNFfDvx78NXmmeLX1sxu+n6zFE0c+CUS5hXy5IGbop2KjoDjcCcdCB4Uqsxwqlj ycKCTgDJOBk8Dk+gpKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK9X8GfCfUfHFm97p Ot6OEhIS4gla4F1byEZCTQCLKbhkpIC0bgEoxwcel2v7NV4Y0N54kgSUn50t7N3QL32vJIhLfVMV p2/7Ndot0jXPiK4lswQXjjto452HceYWdRnpkLn0PerM37NelNMWg8RXsUBORG9pFI4GenmCRATj vsr1jwT8NfDngaNm06FrnUJV2zaldBXuWXukZACwxn+4gGf4i1ehUUySNJUeKRVeORWR0YAqysCG Ug5BBBIINfOOv/s7aVqOpS3mk6rLpdtcStLJZGFZkiLtuYW7FlKLkkqrbgvQcAVen/Z28KSWdrBF fahDcwptnuwyOblicl2jYBFOeAFwAOMVz1z+zRanzDZ+KJ1O0mJLiwjYbvSSSOZTtPTKx5HXBrmj +zb4kyca5pG3JwSt1kjsSBFjPrzXOap8Fb3SLoWl54s8MW83lLKY7i7kgkCuzAExum4A7TgnrzXi damjtpAv4F1uO7fTndVuHsZES5hQkAyxrIjpLsGSYjtLDhXBxn7G0P4IfDa+tbPVLSa/1WzuoI7i FmvgYZkkUFWIiRHX3QsCpBUgEEV1C/BX4drG8f8AYanec72uLguvsrmQlR7CtOL4VeAYrIWP/COW Lwhi291YzljxkzhhKeMfxYq7pPw58F6Hcrd6boFlBcocxzOrzvGezIZ2k2MOzLhh6121FFZer6Lp evWcmn6tZw31pJ96KZAwBHRlJGVYdQykEVyujfDHwToM8lzYaHbCaRWQvOGuCqOMMieaX2qw4IHa ku/hd4Cvd/2jw1p7GRizMivCwJ6lWidGT6KQK5rUPgT8Pr11eKxu9PCjBSzvJAj44yRP5xB9cEAn nFcV4r+Evws8JaTPqWrXmrQIqMsEa3sb3FxMVJSOCLyRvcnHXCgcsQOa+RJTGZZDCGWEu3lK5BcR 7jsDkAAttxuIAGc44qOiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiium8K+Lda8HamNU0W48 mZozDPE43wXMJIPlzRnhgGAZGGHRslWGSD9t/C74lRePbG4S5hS01ew2C6gRsxyxvwk8IJ3bSQQw P3W4zgivV6KKKKKKKOnWvCviP8adJ8LG40fRh/aeuiNld42U2WnyMPl8+UEmSYA7/IiBxx5jJkA/ Feqapf6zfXGpalcyXd5dOZJZpWJYkkkKvZUXOEQYCjgVQortvCHjzxB4QvrWawvpzYxzKbjT3kZ7 WaEtmVRESVRiCSrKAQ2Cc81+gHhvxRovirT4r/R7+3vFKJ58cUima2lZAzRTxZEkTqTjDqM9RkYN dFRRRRRRRXmHxC+KGi+BrSRN8d/rciH7Jpkcg3bjwsl0y5MMCk7mJG5wCqAsRXxB4s8Za74zv/t+ t3IkKArb20KmK1tkJzthi3Ngn+J3Z5G7sa5Wiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii ir+m6rqWjXcd9pV9c2F3EwZJ7WVon4IO1tpw6Ej5o5AyMOGUgkV9kfCn4wjxOG0jxLNaWmqQxqYL tnjt478D5SNrFUW47sqYDclVA4r39XV1DoyurDIZSGUj1BGQadRRRRVDU9TsdHsbnUdRuI7WztY2 lnmlYKqIoz1PUnoAOSSABk18kfEb463GrRtpXhBp7KydXS61J1MV1OCSoS2U/PAm3kyHEhJwAozn 5vZmdmd2Z3dizuxLMzMclmYklmJJJJJJPJptFFFbWg+INW8NahFqWkXk1pcRspfy3ISZFOTFMmds kZ5+VgQCcjBr7h8G/GLwp4mSyspr37BrMscaS212hhjkudoDC3mJMUgdslF3B8cFc166CCMg5B5B HQj1ooooqOWWOCN5ZpEiijUs8kjBURRyWZiQAAOSSa+ZPiR8dW066udE8IiC4kjjaK41hjviimdS Ctog+WVogeZGOwOMAPg4+T7u8ur+4lu724lurmZi8s8zmSR2YkklmJPUngYA7ACq1FFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAJByDgjkEdQfWvqf9nvxbq91f33hu9uJruyjtPtdoZ3a RrVkcI8auxJEbhgVQkhSDtwOK+saKKKQnAJ9AT+VfAXxU8e6z4l13UtNa5lh0ayu3t4LFCUjc27l fNmUH945cEjPAwMDpjyWiiiiiinxtIkkbRFllV1aNkJDhwwKFSOQwbGMc5xiv018KPeyeG9EfUN3 21tNtDcb/veYYVLbs85PfPOa6CiiivBf2gtT1Cw8JW0NnJJDDf3y295JGxUmIIXWIspBCyEEEH7w Hsa+IaKKKKKKKKKKKKKKKKKKKlt7ee6nhtbWGW5ubmWO3t7e3jeaeeeZ1jhhhhjVpJZZZGVI40Vn d2VVUsQK9W8QfDCDwVpWl3vjbxBLp2o6xLKtpo2haMmvTxwW9tbS3Ml5eXOr6JYRS2k9zHa3ENvP dozyQy2dxeQm4e2q+MvhbqvhfSrPxLYXsXiHwpqMVncW2sWtrc2c8MF/bW01pNqem3AeSwiu5JzD bSC4uE3rFHeNZXd3bWkkPw38BWPxBvrvSf7du9I1K1tJ9R2/2LDf2L2MM1jbbvtf9t2Vwt21xe4+ z/YWhWGLzPtZd/JToPEHwr0Pw54q0TwhfeLNWl1LXv7N+xz2nhOzexj/ALU1KbS7f7TLN4tguE2X EDvN5VtNthKsnmOTGLfjr4N2PgHTbDV9S8V3d5ZXerR6XMLHw3CbqDztP1G8jnihuPEUMVx+9sY4 Hie5ttsc7zrI7Qrbza3in4D2PhHQb/xDqXjK7nstP+y+dFY+F4Zbpvtd5b2MflJceJraJtstzGz7 50xGHK7mCo3znRRRRRRRRRRRRRRRRRRRX2J+znocEOianrrwMLu8uzaxTsODbQAZWPI4Hml9xB5I 9q+lKKKKOtfnf8WNEl0PxzrUTRGKC8uGv7U4IR4rj5yUPQhX3KcdDx1rzeiiiiiiu6+G+hXev+MN Ftra3M8UF7Dd3bFN0UVvbuJGaUkbQGKhFB+8zAAV+jqqFVVAACgAADAAAxgAdBS0UUV5z8VPDE/i vwdqOn2ih72HZe2iHAMk1vlvLUnozqWUepIB61+eEsckMkkMqNHLE7RyRuCrpIjFXRlPIZWBBB5B GKbg4J7AgH8c4/kf8kUlFFFFFFFFFFFFFFFFFeo/Be3gufib4XjuIYp41l1K4VJo0lRZ7XRdSurW ZVdWUS21zDDcQSAb4Z4o5o2WRFYet/tOf8yR/wBzL/7gK9Rmt4Ln4GLHcQxTxr8Lre4WOaNJUWe1 8Lx3VrMqurKJba5hhuLeQDfDPFHNGyyIrDwP9m//AJHjVf8AsVL7/wBO+hV1fxU/5Lh8N/8AuT// AFL9Rrq/2kP+RH0r/sa7H/00a7XV/G7/AJJf4n/7gv8A6kOk1+ftFFFFFFFFFFFFFFFFFFWbK3ku 7y1tYkMklzcQwJGoJZ2lkVAoA5ySccV+mnhzSrfRdD0zTba3jtUtrOBGijAVRL5amUnHVmfcWJ5J JJ5zW3WVrGt6VoFnJf6xfW9haRjLS3EgQE9lRT8zueiooLE8AV5fa/HfwBdX62Qu7yBXkEaXlxaN HasSdoJbcZEUnozxqMckgV7DDNFcRRzwussUqLJHIhDI6MMqysMggg5BFSV89/tE6RBceFLPV1tQ 91p+pQRNcqPnitblZEcMRyY2mEIwflDMD15r4rpSSSSeSTkn1NJRRRRX1r+zdo0iWuua85HlTTJp 0I43FoVSaVvUAeYgGDzzX1HVO91Cy023kur+6gtLeJGeSWeVI1VVG5iSxHQDtXzX4p/aLt7S6e18 LaYl/HExVtQvmeOGUg4Jt4IysjIezyNGT1C4wa674cfGex8Y3LaVqtvDpOq7N8GJs2t2AQCsJkwy yrkfu2LFgcqTg17l16UV+dPxT0m40fx54hgnQKtzfSX9swACvbXh86MqBwNu5o2HXchPQjPntFFF FFFFFFFFFFFFFFFerfBH/kqHhj/uNf8AqPatXq37Tn/Mkf8Acy/+4CvNP+F2eKv+EV/4RD+z/D/9 m/8ACP8A/CN+f9k1L7d9h/s7+y/N83+1vs/2v7P8/mfZvJ875vI2fu66D9m//keNV/7FS+/9O+hV ofHrUp9G+JvhfWLVIpLnStE0TUrdLhXaB57HxBrF1CkyxyRSNE0kSiRUljcoWCyIxDDz/wAbfFrx H480q30fWLLRLa2ttQi1JH022v4ZzPDbXdqqO11qV5GYjHeSllESuXWMiQKGVvrH43f8kv8AE/8A 3Bf/AFIdJr8/aKKKKKKKKKKKKKKKKKK7L4eRmXxz4VQRmXOt2DFFGSVSZXY454RVLt2AUk8V+k1e Q/E/4o2Xgmxa1sJLe78QT/LBaFtwtkI5uLlVOQo6IhwXbj7uTXxX4l8X+IPFtytzrmoS3ZjyIYfu W8AJyRFCvyqT0LHLkAZY4rma9o8A/GbXfCZtdP1Etqugx7Yvs74+1WsQwAbaY4LBB0ikYqQMKU7/ AGP4Y8ZeHvF9oLrRL+K4KgedbMQl1bsf4ZoGIdfZsFG/hYiofHuly6z4Q17ToI1lmuLCURRsAQzo BIoAP8WV+XHOcY5r82HRo3eNwVdGZGU8FWUkEH3BBFNooooweuOB1PpnpRX3V8AdPu7LwEkl1E0S 3+pXd7ah1Ks9syxQpLggErI0LtGejIVYcEGu78X+OtA8GWMl1ql3GbgL+4sImVru4cg7VSLOQCer thVHJNfBvjLxvrPjLVLm+vbmdLV3b7Lp4lb7PbQgnYgjBCM+PvuQSzZOcYFcZTkd42V42ZHUgqyk qykdCCCCCPavffAPx01Xw+kOmeIkl1jS0ZUS63Z1C1j6Y3OQLmNOoVysmOA54FfYOha9pXiTToNU 0i6S7tJ1yrrwyN/FHIhw0bqeGVgCDXyn+0ZoLW+saVr6vmO/ge0kTuklrsKkezLJ+Yr5roIwSD1H Booooooooooooooooor1b4I/8lQ8Mf8Aca/9R7Vq9W/ac/5kj/uZf/cBXynX0D+zf/yPGq/9ipff +nfQq2/j9qthY+MdNhuvDWiazI3hmzkF1qU/iOKeNDqmsqLdF0fxBpVsYlZGkVnt3nLyyBpmjESR /NFxIk0800dvFaxyyySJa27TtBbI7sy28LXU1zctFCpEcbXFxPOUVTNNLJudvv343f8AJL/E/wD3 Bf8A1IdJr8/aKKKKKKKKKKKKKKKKKc5DOzKoRSxKqOQoJ4XJ5OBxk9ete5fAU6Na+JNU1fWfs0MW laU09vfXcqxxWk8soibZvIRppoDKqYy4VXCD5mrsvH3x9FxBcaX4OSaB2cxtrEoUHyxkM1rCQcF/ 4ZHPA525r5hu7y6v7iW7vbiW6uZ3LzTzu0kkjHqWZiSfYdAOAAK3PDHhe/8AFN7Ja2bQwRW0L3V9 eXLrHb2drEC0s0hJBbaqsQiAscdhkjCuVgS4lS1keW3SRlilkUI0qKSBKUGdgcDcEJYqCAWJBNQV s6Dr+qeG9St9V0m5e3urdgRgny5U/iimTIEkbjhlP1BBANfX3w/+OGmeI92m+J2tNG1FgEgnaTZZ XZf5divJgQy5PCSNhs4VieK+Z/iT4Xm8LeKb61eSKW3vJHv7KSN1bda3Ds0e4A5UjO3n72Nw4Irg wU8tgQxkLoVbI2hFDhgR1JYspB4AC993DKKKcGYKUB+VmViPUqGCn8Azfn7U2vqDVvjymmeH9H0f wrGLm+tdNtLa91K6t2igSWG3jjk+y27hHfLqxDyRouOinNfOOravqOuX9xqeqXUl3eXLl5JZDnqe FRfuoi9FRQFA6Cs39P8APtXV6zH4Ys9K0y30W7fVdUuUa41i8ltrm2ismGFi0+0iuI495zukmuVD hgEWN1DOo5Siun8OeMPEPhW4SfRtRntkEqyyWu8tazkEZEsLZQ7gMFgA2Ohr3LxV8S/BfxE8HSWe uNdaJ4gsFFzZILWe7hubxYyrJBNbRSpHFN0YXRg2cHcxXNfM44OcZweh6H2OD374P406RzI7yMAG dmdgoCrliScKOAMngDgdqZRRRRRRRRRRRRRRRRXq3wR/5Kh4Y/7jX/qPatXq37Tn/Mkf9zL/AO4C vnP/AIRLxV9h/tT/AIRnxB/Zv2T7f/aP9jal9h+w+T9o+2/a/s32f7J9n/f/AGnzPJ8n97v2fNXs P7N//I8ar/2Kl9/6d9CqX9om3nuvH+iWtrDLc3Nz4Z023t7e3jeaeeebWtbjhhhhjVpJZZZGVI40 Vnd2VVUsQK8U1Lw14j0aBLrWPD+t6VbSSrbpcalpV/YwPOySSLCk11BFG0rRxSusYYuUjkYKVRiP uf43f8kv8T/9wX/1IdJr8/aKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKK9W+CP/JUPDH/ca/8AUe1avVv2nP8AmSP+5l/9wFerf80P/wC6U/8AuoV8/fs3/wDI8ar/ ANipff8Ap30Kur+Kn/JcPhv/ANyf/wCpfqNdX+0h/wAiPpX/AGNdj/6aNdrq/jd/yS/xP/3Bf/Uh 0mvz9oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooorV0LWr7w7rG m65psnl3umXcV3Dl5kjl8tv3ltcfZ5YJXtLuIyWt5Ck0fn2s00DMFkavcfiN4z8KfFLSvDtzHrcX hXVtHlvo7rStdsdYuYJU1G206Se4s9T0LTtWWSK3ubMW1utxaWk90jTXE0NiIoYrqbxx8WdLHgux +H/hC4u9Qig0nS9F1LxLJb3GlR3djYWVlHJHpto04vV/tBopLXUUv0SFLVbmzji1CK9S8g574J+I fDfhHXNQ13xDrtpp8U+k3ekxWX2LWru+aSW80m8S6/0HSrmyW0ZbaeH5r0XQmTm1ETJK3V+NfE3g zxH8RvCXi+x8Y6TFpug/2D9sgu9M8WpfSf2Xrt3qlx9mih8Nz2777edEh825h3TBlfy0AkOt8XvH ngfxz4f0rRdF8T2iXCeIIL64uL7TPEcFrbWsGk6xG0srR6LPcPvuJ7e3RLe3nk8ydHdEt0mmi6D4 i/Er4feLvBuseHtN8WWkF7qH9n+TLfaT4nitV+yarY30nmvb6FcyruitpFTZA+ZCgbapZ1+M6KKK KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK ACTgDJPAA6k+lfRniTwBFp/we0jVpNLtLfW7d4Lu8uY7WKO9ktLp2xHczIglk8tZIyfMY7QBzgcf OdFFFFFFFFFFFFFFFFaej6NqWv38OmaTbG7vpw5htxLBCZPLUu2HuJYYshQSAXBOMKCeKqXdpcWF 1cWV3EYbq1leCeFipaOWNiroShZSVIIyrEHsSKr0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUoBYgAZJOBSUV6T8KvCD+L/FtlbOB9gsGTUdQJ6NBbyIVhA5yZpCiEf3Sx6A1996rpFnq+ k3ej3USvZ3dq9q8eOAjIUXb6FeCpHQjNfm34q0Gfwx4g1PRJzuaxuWjR+0kLYeGT6tGyk+jZHauf ooooooooooooooor6N/Z68JtqGs3fie4VhbaUjWtrxxJeTqC5BPURREdO8ntXG/Grw9NofjfUJ/J KWmrkahbSAHYzOAs6Bum5ZFLMOuHBxXklFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFPQ xgSbwxOwiPHQPkct7bd344pleofC/wAKWnia/wBYN5cwQJZaPem1WaWOMzX1zBJBBtVyC4iDPKdo O1ghOOK8zliaGWSFxh4pHjcA5G5GKtgjgjIOCOD1qOvtX9n/AMI/2T4fm8R3P/H1rvywIQQYbKCR lXOf4pnBkJHGwJ3zX0HXyD+0T4XFtqGn+J7aFwl4n2O/dRmMTR827tj7pdSyZOMkKPSvmWir0Om3 txbPdwQGaGN9j+WyPKDjJb7OrGcxr0aURmNTwWBqo0ciAF0dAcgFlZQSOoBIGcZGcdM80yiiiiii lIIxkEZGRnuD0P0Pakq3cWU9rBZTzRsi30MlxblgRvhSaS33jPUGSKTBHUYPQiqlPjRpZEjUFmkd UUAZJZiFAAHUkngV+kngHw7beGPCukaZBD5Ti0huLssPnkvJ41kneQ9S287QD91VVe1cX8cPDUeu eDLq8jtzLf6ORe27oMyLEpxcrgcsrRZJXnlVPUCvgyiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiinpJJGcxu6H1RmU/mpBplbfh3RrnxBrWnaRaxvJJeXUUTbASUiLjzZGx91UTczMcAAZJ r9L9M0+30rT7PTrSMRW1lbxW8SDoqRqFHPcnBJJ5JJJ5q9XmPxg0+51HwBrkdrGJZYYUuSu3c/lQ OskpQYJ3CNWORzivz1opQSpDKSrA5BBIIPqCOQfpStI7/fd3/wB5i38yabRRRRRRT3dpCC5yVVUH b5UG1Rx6AAfz5pq7dy7s7cjdjrtzzj3x0969L8eeKfDniPTvDEGjafdWFzolgdOnEwjMckCBPLKs hyzGQO5JQcu2eTXmdew/BLwuviHxlb3Fzb+fp+jIb64DrmIzAMLVG7E+biQL38s5BANfe4GBgdBw KguYI7q3ntpQGjnikicEAgrIpU5B68GvzZ8beH28L+J9W0YyJKttcM0Lof8AlhN+9iVh/C6owVhz 0znmuUqSLyhKhnEhhDDzBEVWQpn5gjOGVWI4BZWA6kHGDcnj0xnLWtzcxxEnEVzArTRjsPMhk8uU Dpv2wk/88x3z6KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK9X8GfCfUfHFm97pOt6OEhIS4gl a4F1byEZCTQCLKbhkpIC0bgEoxwcel2v7NV4Y0N54kgSUn50t7N3QL32vJIhLfVMVp2/7Ndot0jX PiK4lswQXjjto452HceYWdRnpkLn0PerM37NelNMWg8RXsUBORG9pFI4GenmCRATjvsr1jwT8NfD ngaNm06FrnUJV2zaldBXuWXukZACwxn+4gGf4i1ehUUySNJUeKRVeORWR0YAqysCGUg5BBBIINfO Ov8A7O2lajqUt5pOqy6XbXErSyWRhWZIi7bmFuxZSi5JKq24L0HAFXp/2dvCklnawRX2oQ3MKbZ7 sMjm5YnJdo2ARTngBcADjFc9c/s0Wp8w2fiidTtJiS4sI2G70kkjmU7T0yseR1wa5o/s2+JMnGua RtycErdZI7EgRYz6815l48+Ht34Cls4L7VtNvp7wOwt7N5DPCiY/eTRuqlI3JwjH7xDADgmvPaKK KKKKKeI5CnmCNymcbwrFM+m7GM+2c1ZstPvtSuYrOwtZ7u5ncRxQwRtI7sxwAAoOPcnAA5JAr7x+ EHgW58FeH5BqIRdV1SRLm7jQhvIRFIht2YcM0YZi5BKhmIGcZPrdFfGPx+8G3tlr3/CU20Mkunal FGl1IilxbXcQKZlwDtSWMJsY8blZSc4z8/Wtnd30vkWdtNdTbWfy4I2lcIgyzFUBIVRySeKikili JWWOSNgSCJEZCCOowwHIqOiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiium8K+Lda8HamNU0W 48mZozDPE43wXMJIPlzRnhgGAZGGHRslWGSD9t/C74lRePbG4S5hS01ew2C6gRsxyxvwk8IJ3bSQ QwP3W4zgivV6KKKKKKKOnWvCviP8adJ8LG40fRh/aeuiNld42U2WnyMPl8+UEmSYA7/IiBxx5jJk A/Feqapf6zfXGpalcyXd5dOZJZpWJYkkkKvZUXOEQYCjgVQoooorU0e8sbK/gm1LTo9UsQ6i5tHk khd4sjeYZomVo5QM7C25CeHUg5H2/wCE/Bfwm1uxstW0TR9MulmgSURyyPPNCxADR3NvJK+yaNsq 6svDDuMGu6XwN4QWN4l8OaQI3OWUWUGCfX7mf6VoR+G9AitRZJo2mi0U5FubOBos+u1kIz79ans9 D0bTnMlhpWn2bkYL21pBC2PTdGinHtmtSiioLm2t7yF7e6giuIJAVeKZFkjYHsysCDWXp3hvQdJe STTdIsLN5c73gtoo2bPUEhc4PcdKkn8P6FdB1udH0ydZDlxNZW8gc+rB4zk+5rndQ+GngXU3WS68 NabuQYHkQ/ZQQOBuW2MStgcZIz715l490D4ReB9Lee+8O2k17OjpY6fDPcC5uJMHByZiY4lP35SC F6AE4FfGMrq8sjpGIkd2ZIlJIjUsSqAnJIUYXJ5OMnmo6KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKv6bqupaNdx32lX1zYXcTBkntZWifgg7W2nDoSPmjkDIw4ZSCRX2R8KfjCPE4bSPEs1paapD Gpgu2eO3jvwPlI2sVRbjuypgNyVUDivf1dXUOjK6sMhlIZSPUEZBp1FFFFUNT1Ox0exudR1G4jtb O1jaWeaVgqoijPU9SegA5JIAGTXyR8RvjrcatG2leEGnsrJ1dLrUnUxXU4JKhLZT88CbeTIcSEnA CjOfm9mZ2Z3Znd2LO7EszMxyWZiSWYkkkkkk8mm0UUUUUVueH/EOqeG9RttS0y7mt5beVJGRHYRz IGBeKVM7XV1ypBHGcjBAr7+8F/ETw340tUOn30a6jHFGbvTrj9zdxSFRvKRuR50W/IWWEuh6Eg5A 76iiiiiijp1rwz4lfGXTfCsU+l6FJDqOvsrICCJLTT2Py+ZcMp2ySJyVgVslgA+1c18YazrureIb 2TUdZvp7+8k4MszDCrnISONQscUY7JGqqPSsmiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiig Eg5BwRyCOoPrX1P+z34t1e6v77w3e3E13ZR2n2u0M7tI1qyOEeNXYkiNwwKoSQpB24HFfWNFFFIT gE+gJ/KvgL4qePdZ8S67qWmtcyw6NZXb28FihKRubdyvmzKD+8cuCRngYGB0x5LRRRRRRRRRVuxv rvTbqG9sZ5ba5t5FkilidkdWU56qRwehB4IJBr7G8FfHrQ9UFhpevQz6bqDpFbteuUksp58BA5dc NCZG5IkTaGON9fQqsrqroQysAysDkFSMgg+hHNOoooqnf39nplpNfX9xHa2tuhkmmlYKiKOpJP6A ck8AZr5B+I/xx1HULu50nwjcfZNKVGgk1FVxdXbMpEjW7H/URAEqrgeY3LDYMZ+c2ZnZndmd2JZn YlmZiclmYkkknkkkknrTaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+xP2c9Dgh0TU9de Bhd3l2bWKdhwbaADKx5HA80vuIPJHtX0pRRRR1r87/ixokuh+OdaiaIxQXlw1/anBCPFcfOSh6EK +5TjoeOteb0UUUUUUUUUVJFHJNLHFCrPLI6JEiAl2kdgqKoHJYsQBjnNfpp4Vt7u18OaLb35Y3kO nWqXBY5bzFiUMCeuQeDnvXQUUUV8/ftEyXsfhGyEDOtrJqSJeBSQGGxmiVsfwlgcjoe/aviiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiirNlbyXd5a2sSGSS5uIYEjUEs7SyKgUAc5JOOK/T Tw5pVvouh6Zpttbx2qW1nAjRRgKol8tTKTjqzPuLE8kkk85rbrK1jW9K0Czkv9YvrewtIxlpbiQI Ceyop+Z3PRUUFieAK8vtfjv4Aur9bIXd5AryCNLy4tGjtWJO0EtuMiKT0Z41GOSQK9hhmiuIo54X WWKVFkjkQhkdGGVZWGQQQcgipK+e/wBonSILjwpZ6utqHutP1KCJrlR88VrcrIjhiOTG0whGD8oZ gevNfFdKSSSTySck+ppKKKKKKKKK9K+FPhm+8R+MNLNtH/o2mXMN/fTH7sUUDhkX3aSQKoHpkngV +hoGAB6DFLRRRXD/ABE8LHxf4V1HR4mVbpkE9mzfdFzBl4wx5IDcqT2zntX5z3dpcWN1cWV1G0Nz azSW88TDDJLExR1P0YHB6EYI4NQY4JyOCBjuc55HqBjn6j3wlFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFdl8PIzL458KoIzLnW7BiijJKpMrscc8Iql27AKSeK/SavIfif8UbLwTYta2Elvd+ IJ/lgtC24WyEc3FyqnIUdEQ4Ltx93Jr4r8S+L/EHi25W51zUJbsx5EMP3LeAE5IihX5VJ6FjlyAM scVzNe0eAfjNrvhM2un6iW1XQY9sX2d8farWIYANtMcFgg6RSMVIGFKd/sfwx4y8PeL7QXWiX8Vw VA862YhLq3Y/wzQMQ6+zYKN/CxFQ+PdLl1nwhr2nQRrLNcWEoijYAhnQCRQAf4sr8uOc4xzX5sOj Ru8bgq6MyMp4KspIIPuCCKbRRRRRRRRRX19+zfooj0rWdeZstc3Y0+NPRLdI5XY+uWlAHpg19NVz +veKdB8NW73Os6lbWaojOI5JB50m0E7Yohl3ZsYUKpyeK+VPFP7Q2u3d08Xhe3g02xjYhLi6iW4v LgA8OUbMMKnqEAkbHVgeK7D4a/HNtVu/7J8Yy2dpK65tdUAFvBI+QPJuAT5cTHOUcbUOCCAcZ+mI 5Y5o0lhkSWKRQySRsHR1IyGVlJBBHIINPr88vi5osui+PddR2Dx39ydTgYHJ8u8/elGHZo5C64/u hT3480ooooooooooooooooooooooooooooooooooooooopzkM7MqhFLEqo5Cgnhcnk4HGT1617l8 BTo1r4k1TV9Z+zQxaVpTT299dyrHFaTyyiJtm8hGmmgMqpjLhVcIPmauy8ffH0XEFxpfg5JoHZzG 2sShQfLGQzWsJBwX/hkc8DnbmvmG7vLq/uJbu9uJbq5ncvNPO7SSSMepZmJJ9h0A4AArc8MeF7/x TeyWtm0MEVtC91fXly6x29naxAtLNISQW2qrEIgLHHYZIwrlYEuJUtZHlt0kZYpZFCNKikgSlBnY HA3BCWKggFiQTUFbOg6/qnhvUrfVdJuXt7q3YEYJ8uVP4opkyBJG44ZT9QQQDX198P8A44aZ4j3a b4na00bUWASCdpNlldl/l2K8mBDLk8JI2GzhWJ4r5n+JPhebwt4pvrV5Ipbe8ke/spI3Vt1rcOzR 7gDlSM7efvY3DgiuDBTy2BDGQuhVsjaEUOGBHUliykHgAL33cMoooooopQrFSwB2qQC3YFskDPqQ pIHsfSkr71+Buh3+ieBbcahG8EupXlxqcUEg2vHbzrFHCXU8qZUiE20gELIoIByBoePPir4f8FwT 24mjv9bC4i0yBwWV2B2tcuMiGMdTu+YjhQTXwt4i8Q6l4n1W61fVJmluLmRmCbmMcEefkhhUnCRo MKAAM4yeSaw6K9X8C/FzxH4M8uzL/wBqaMHBawunJeFD977JOdzRcchGDRZ6KM5r7U8I+NNE8ZaZ FqOl3Cgt8s1pKyLc28oA3RyRhicgn5WXKsMEHmvnP9o/QY4b3R/EEZbfdpLY3Ax8uYAjxNnoCVZh jvgn1r5gpSCpKkYKkgj0IOCPzpKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKXJwRk4JBI7EjIB+oBOPqaSvedb+OWryaJpeheGkuNLjsbC2s7nUbgxtfXTW8CQlkCNIlur FS3Ejuc/eFeG3NzcXlxLdXc0lxcTu0k00ztJJI7HJZ3Ykkn3PtUH1/z/ACrq9Z1Lw8dK0zTfD9je QzKjTa1qGopbi5vLs4WOG2ME0wjsYgGYKTG8jsDIhMYZuUorQ0zVtR0e6ivNMvLizuInV1kgkZMl SCA6qQrqcYKsCCOMV7hrHxg0jxh4SuND8XaJdtqsUavp1/pjQNA14iFUnuBcTwy2wJJ8wQi5DAkB V4FeAA4OR2ORnB/PPB/LFK7tIzO7FndizMerMTkk+5PJptFFdZoHg3VvEmna1qenPZ+ToUAubyKe SZJ3iKu+bdY7eWORgEOVeWI9MZHNcnRRRRRRRRRRRRRRRRRRRRRRRRRRRRRXWeIPBureG9P0XU79 7OS1122+02TWskzsqbUcpOs1vBskAcZVDIvBwxHJ5Oiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii jr0r7r+EPgiPSPArfbIsXviW3e5uxIOUguISlvEVI4CxMGIP8TE18Z+KNCu/DWvalo95GUktLmRY yRgSwMxaCVT0KvGVOR3yO1YFFFFFFFFFFFFFFFFFFFFFFFFFFFFdR4M8OzeKvEul6LErFLq4U3Lq CfKtY/3lw5ODj92pUE/xMK+u/jR4NOoeBbddLgBfw2Y54YUGXNpHF5U6r3O2P95gdSlfDlFFFFFF FFFFFFFFFFFFFFFFFFFFFFFKqs7BVBZmIVQOpJOAB9TQQQSD1BIP1HFSQQy3M0VvBG0s08iRRRoM s8kjBURQOpZiAPrVvVdPm0rUr3TbgbZ7Gd7aUYx88R2scehIyPY1n13fw10D/hI/Gei6e8BuLZbp Lq8Qg7Ba2xEsnmHsjbQhz1LAdTX6NoixosaKFRFCKqgAKqjAAA4AAAAAr5Y/aN8Nlo9J8S21uMRl 7G/mRfm2ud9s0pHUK+5ATnBcCvlCiiiiiiiiiiiiiiiiiiiiiinBGKs4B2qVDN2BbO0fU4OPoabW rp+k3d/a6rewxM1vpNot1dSBSVQSzxW8ak9AzNIXH+zGxrKor66/Zy8OrFYat4kntgJbmVLGyuHX 5vJiBa48rPRXkZFZh1KYzwa+mpYkmikikVXjkRkdGGVZWBBDDuCDgivzd8f6BL4a8W6zpjw+TCLu SezUDCNaXDGSEx9iqgmP2KEVxtFFFFFFFFFFFFFFFFFFFFFFFFFFFFKCVIZSQwIIIOCCOhB7EUhO SSep5NbnhvWF8P65p2staR3x064W5S2mYrG8iZKFivPyNhh/tAZB6Vb8Y+IYvFPiC+12KwXTvtxj eW3STzV81Y1R5N21eXK5Ix79Sa5ivsr9njww1hol94juYFWbV5Vhs3ZRvFpbM6uyEjKrJNnIBG7y wSMAGvo6uV8a6DbeJfDOraTdMUjntZGWUDJiliBkjkA7lWUH3HHevzVmj8qaWIMHEcjxhwMBtjFd wB5AbGcE8ZxUdW7Oa2gd2urNb1GjZAhnlgMbN/y1R4v+Wi/w71eMH7yN0pspsyGMK3Kk42LK8The RkMyohcYyAQkfOCR2qtRRRRRRRRRRRRRRRRRRShmClQTtYglc8EjOCR6jJwfc0leh+FvHMHh3w94 h0CXRYb9PEELxTXLTNHLGREUhA+VgUiZi4AAbcSc9K88q9pmn3Gq6hZabaoZLi+uYbaFF6s80ioP oBnJPQAZr9L/AA5o8OgaHpekQIiJY2UEDbFChpEjAlc4AyzybmZjySSTya26+Wf2jfDtr5GleJkk 2XQkGmyx7cieNg0qNn+FoiG65BViPSvk2itBZ9Pa2jhlsZEnTcTeQXLb5C3IEsEqvEVXovlGFgOW ZzVOTysjyfMxj5vMKklsnkbQABjHByc55NR0UUUUUUUUUUUUUUUUUUUUUUUUVIkUsmfLjkfAydiM 2B6naDxU/wDZ9/hD9iu8SfcP2abD/wC58nzfhmrtx4e120EbXOj6lAsqh4zJZzqHVuQRlO/59utd d4N+GPibxdfRQx2M9jp4dTdajeRPDDHHn5hGHCtNKRnaiDryxUc19+6HpFtoOk2GkWY/0ewto7eM kYL7B8ztjjc7ZZvc1q0yRFkR43AKurIwPQqwIIP1Br8/viZ8PNV8Ka/eyQ2c9xo15cS3NjdwxPJG iTOZDbylFPlvCWKDdgMoUg84HJWPgzxRqNjNqVnol/PaQMFeVbdwSSCcxowDSKMfMyAqPXOay59F 1i1IW40vUIS33fMs7hQ3+6THhvwJrPaN0JV0dWHVWUqR9QQDTcEdQR+FJRRRRRXo3ws8L2vizxba 6bqFm15pqwXE98iy3EASNU2o/m20kUinzWXaA4DcghhkVg+NNEXw74o1rR40McFleyJbozM5Fu2H hy7lmb92yjczEnGSSa5eiiiiiiiiiirEdpdS7RFbXEhb7ojhkfd/u7VOfwq5a6JrF9Mbez0u/uJw CWiitJ3dQoySwCfLgDvj060f2JrHm+R/Zeoedu2+X9kn37s4xt2Zznivpb4N/CXU7PUbbxX4jgNk LYGTTtPlGLh5WGFuLhD/AKpUBzGh+ctgsABg/V1FeffEzwgfGfhW80yEqt9EVu7Bm6faYPmWMnss y7oye27PQEH8/wC70DWrG9fTrrS76O8SQxGD7NMzs4O35NqESAnoyEgjkGtS+8D+LdOERutB1JRN EssZS2klyrDcAfLDYcA/Mp5B4IrnpbG+h3edZ3UWw7X823mj2t6NuQbT7HBqtg+h/I0lFFFFFFFF FFFFFFFFFFFFFFFFd98P/FOm+HdZtzrmlWOq6NPKqXS3VpFPPZhiB9qtnZC58v70sBJWRAwUCTBP 3X4dbwXqlu1z4ch0WaFwC5sre2VhnkCRFRXQ89HUc54yK6U2NmQoNrbkJ90GGP5f935eOnapzHGQ AUQgcAFVIA9BxxTgqqMKoUegAA/IUtFFRyRRTLtljSRf7siK4/JgRQkUUSeXHGkaD+BFVV/75AA/ SlMcZ6oh+qqf5isefw54enke4udF0mWRsmSWWwtXZu5LM0ZJPuea+WPjF408JRxXPhXw3oujyXW4 Jf6rDZ26fZGRgTDaSRIMz8bZJNxVFLAAsePmmiijHGe3I/LGf5iiivt/4DeDn0Hw5Jrd7Fsv9dKT RBh88Wnqo+zqe480lpsd1Zc+3DftC+Cyklv4xsozscR2WqKoGA2SLa4P1z5T9f4O1fLNFFFFFFFF KCQQRwQQQfcdK+nfhH4y8FXVs+j+LNL0G01KEp9l1Kawtkj1CMnAWZvL2RXURxlvkSZCrAB1fP1T a2WlGGJ7O1sfI2gwNbww+XsI4MZRduCOhXrVpLW2iYvHbwxu3VkiRWOfUgA1J5Uec+WmfXYufzxT 6KKKga1tncSvbwtIOjtGhcY9GIz+tTFVPVQcdMgHFV57O0uo3hubW3nicYeOaGORGH+0rqQfxFcl rdj4H8O6dcapqmkaHa2lshd3bT7TcxHSNAYsu7nhVGST0HFfCfj3xRZeKtbe80zSLPR9PhTyLWC1 gjheaNWJFxdeWqq0z5xgDCIAvJyTxNFFFFFFFFFFFFFFFFFFFFFFFFdt4C8Z3fgjXrfVYRLPacx3 1kkmxbmBhyAGynmIcPGzDgjBIBNfd3hDx94c8a2iz6ReD7QFBuNPuMRXts3dXiJIdQeBJEzxt1Vj XaUUUUUUVnarq2n6LYz6jqd1FZ2duheWaZgqgdgO7Mx4VVBJPAFfGfxM+NGoeJXk0nw5LcaZoqMy zXEbtDd6iBxhnQh4bY8ny1YNKCPMwo2nwUkkkkkkkkknJJPJJJ5JJ6mkp8gRSoRiwKKWJGMORllx 6KeAe+M96aASQAMkkAAdSTwB+Nei+OfBVx4T03wnNKMnVdJa5uXxwt48pnaE+hjgmhjGeT5RPrXn NdH4T8P3XijxBpmiWg/eXlwodz92KCPMk8reyRKxA7nCjk1+lVhaR2FlaWMIxFaW0NtHnrshjWNc /gtYPjXQIvE3hnVtHlJBubWTymAyUnjHmQsB3IkVTX5rXMElrcT20ylJbeWSGRWBBV4nKMCDyMEG oackbyuscaNJI7BURFLO7McKqqoJZieAACSelOlilgkeGaN4ZY2KvHIjJIjDgqyMAykdwQKjoooo oor6O+EnxhtPDdonh3xMbprEz/6FqS5nWyR+DDPHnzfIV+VeMSeWCQUCjI+vrG/stTtorzT7qG8t ZlDxTwSLJG6nkEMpI/A8irlFFFFFFed+O/iToXga1Y3coutTkjLWumQsDPITwrydoot3V2IOM7Qc V8M+LvG2veM9QlvdWvJTCXJtdPSRxZWcYPyJFDkIXA+/MymWRsksBhV5Giiiiiiiiiiiiiiiiiii iiiiiiitvw9r+oeGdWtNY02TZc2sgcKxby5V/iilVSC0bjgjP05r7G+HvxtsPF19Fo2qWQ0rVJxi 2ZJfNtLl1GWRGYK8chALBGByMhWJGK93oooorhPHHxA0TwNZrNqLtLdzq/2OxhwZpmUHBI/gjzgM 54HvXwp4t8d+IvGN1LLqt9KbRpmlt9OjYrZ2y5PlqsYwJGRTgySbmJyRtBAHG0UUUoJBBBwQQQR1 BHIP4VoXmr6pqEMFvfahd3cFru+zxXE8kscO7Aby1diFyABx0HAxWdX1N+zn4YV5dT8U3EbZhxp9 gWX5NzgtdSKT1YLsQEcAM2ecV9ZUV+fXxmsfsPxA1hVtkto7gW9zGEXasoliAabjgs8iuGI6kc15 ZSqzIwZGZWByGUlWB9QRgg/SrbajfOFD3U0mzhDKxlZR6K8m5lX/AGQQPaqfWiiiiiiivVvh78V9 W8BpNZrax6nptxIsjW000kbwMOGa2cB1XcPvIybWOORX2h4J8baV440kanpu+No28q7tJcedbTYB KNgkFSCCrj5WBBBrsqKKKQkAEngAZJ9AK+a/il8a4dNjudB8Jzb9UWUwXWpBVaG0Vc+YtvnKyT5w oYjYhySGwAfki/1C+1S6lvdRup7y7mIMtxcSNJI+BgAsx4AHAUYUDoBVOiiiiiiiiiiiiiiiiiii iiiiiiiiivQvhdo17rXjfRIrIMPsl0l9cSDgRW9sQzsSOfmOI8Dk7q/RUcAD0ApaKKK+J/2iYLmP xfZSyszW82lxm2BJ2pskZZQB0BLAMcdcgnmvn+iitLSdJvNavYtPsBC93OQsEUs8Vv5zk4EcbTMi NIeybtzfwgmvVLT4D/EG5dBLZWVojgEyTXsTKoIz8yxb3z7Ba21/Z08XmN2bUNIWRT8sYechx67/ ACwF+mCa04v2btcayEkmu2Ed8WOYPJlaAJ2/fAli2f8ApmB9O9/Rf2brsXkT69rdsbJGDSQ6ekpm mUcmPzZVQRhuhcKzAdBnmvqLR9H07QdPt9L0q2jtLO1QJFFGPTq7t1d2PLOxLMSSTWnRXk/xO+GF p4+toJ4ZksdZs1ZLe7KbkliJLGC4AwWTdlkYHKMSRwxrxnRP2cdTkuJDr2rW0NsqOI1sQ8kruQQj M0gUKqnll2knpuHdLv8AZs1gbzY+ILB8MfLW5gnTcvbc8YfafojCuZ1D9n7x1aOq2v8AZuoqw5eC 68oIe4YXKxN17gEHrms2T4F/EOKN5G0602orO3/Ewtc4UEn+PHQdzj1ryKWNoZZInxvido32sGXc jFWwwyGGQcEEg9QcVHRRRRRRX2F+zlo17a6Tq+sThktNRuI4rRTnEn2YMskoHTG5tmTydvHFfS1F FFU9RjllsL2KFts0lrcJEw4KyNEwQ57YYg5HI7c1+X1+ksd9eJOSZkurhZS3LGRZXDk+5bJNVKKK KKKKKKKKKKKKKKKKKKKKKKKKKKK+r/2d/CU8X23xdcOohnjbT7KNTliFcNPI/oCQqqOvyknGRX1T RRRRXhvxy8Et4k8Pf2xaEC/0CKa5KnAE9kF3Tx57OgBkTPBIIOMgj4ZpTjAwc5HIx0OTx78YOffH blKcrMjK6MyOjBkdSVZWU5VlYEFWUgEEEEEZBzX1P8P/AI9uP7N0TxVBvwIrMazGx3schI5byM5y x+USyoQC2XZRk19Wo6yIroQyOoZWHIKsMgg+hBp1FFFFFFFUtQ1Gx0qznv8AUbqGzs7aNpZ7idwk caKMklj37ADJY4ABJAr48+KXxok8QpJonhaae20hgUu74q9vPfDkGOIErLFbkddwV5OhVV4r53oo ooooqxaWs19dW9nAA01zNHBECcAvIwRcnsMkZPpX6QeAvDbeFPC2laLJIJZraDdcOv3TPKTJLt77 d7EDPOPeuwooooIyCD0PBr4N+NXglvC3iVtQgIbTdeknurccBobhWU3EJHdcuHRh2Yg4I58aGMjJ wMjJxnA7nHfHpSUUUUUUUUUUUUUUUUUUUUUUUUUUUUV+jnwz0eHRfBHh+2hyTPp9vfTMerTXkSTv +A3hR7Cu7JCgsxAUAkknAAHUk9gK8W8a/Gzw14bhuLbS5U1nWYyYlt4CTbQyDILXFwAVwhHKJuZj wMD5h8t6l8XPH2pXrXh1+6s/n3R21iRb2sQzwgjAO8AYBMrOT3NfQnwy+Ndjq1tFpXi28is9XEgi gvZF8q2vVIAQu6jy4Zs/KwbYjHBBycV9EKyuqujBlYBlZSCrA8ggjggjoRVHVrGPU9M1DTpiRFfW VzaSEdQk8LxMR7gNkV+YmpWbadqF7YOwdrO6nti4GA/kyMm4DtuC5x2zjtVKiigEg5BwRyCOoPrX vfw/+OOt6A9vpniFm1fSAY4o55MC+sYxhBtlAH2iFFA+SUGQAcSYAWvtKxvbbUbS3vbSVZbe6hSe J1IIZJFDA8dDg4I7HirdFFFFFcX4t8e+HPBkDPq99Gly0TyW9hGQ93cFQdoSIcgM2F3ttUZyTXxF 49+Jmu+OrgrcSNZ6TG5a30yFz5XDZWS4I5mlAAPzZRG5QA4NecUUUUUUUV6N8J9Ih1vx7oNncZ8l JpbxwP4vscElwqn2LooPtX6JAYGB0HArL1fWtL0Gzk1DVryGxtI/vSzOFBJ6KoJyzHoFUEmvmDx7 8f5pGfTvBIEcWNsusXEWZGJHItIHGFA/56yhs/wx/wAR8q0T4v8AjnSdRivJtautSg8wNcWd64lh mjJ+dUBH7liM7Wj27TjjHFfaXg/x94d8Z2yyaXexm8WNWubCU+XdQMQN2Y2wXQNkB49yH1zxXbV8 9/tE6It94WsNXD7ZdHvtu0g4khvVEci57MrxxuCewK9+PiuiiiiiiiiiiiiiiiiiiiiiiiiiiinM hUITjDqWXBBOAzLzjpyp4PPGa0NH0q71zVLHSLBVe71C5jtYFdgib5GxuZjwFUZZupwCFBbAP6WW EVt4c0Gxtrq5SO30jTbe3luZWCLstLdY2kYsRjIQnH4V8wfEr45rfwXGh+EC6QTLJBeaq6lHdDlW SzU4YBx/y2YdD8g53V8wkkkkkkkkknqSeST7k0pRwoYqwVshWKkKxHUAkYOO+DxTa9i8CfGTxF4T eCyvZX1jREKxm1uXLXFtEDjNrOcsAi9IpNyEDauw4I+0/D3ivQvFFpFdaRqFvc+ZEsjwLIvnw7gM pLFnejKTggjg18P/ABm0OLQ/HWppbxtHb3yxX8YI+UtOgMpQ/wB3zQ49iDXliI0hKqCSFdyAM/LG jOx+gVST9KbRRRXY+F/HfiTwpdwT6bqd0LeKRTJYSyvJZzR5G+MwuxRNwyA0YVgecnof0S0PU01n SNO1VFKLf2cFyFPVfNjViPwJrVooorzT4peN5PA/h031rGkuoXcv2WyWTlFkIy0rDuI1528bj+Ir 4I1vW9S8Q6lcarq1y91e3JBeRzwqqMJHGvSONBwqLgDk9SScmiiiiiinIpdlRcbmYKMkAZJwMk8D k9TTa+gP2fPDV3qHimXxFkJY6JBLEzbhulvL2Joo4gg+basLSSOxAGQigkltv1R4v8caD4Ksheax c7XkJW3tIR5lzcOBnakY5AHG52wq5ySK+HfiF8R9V8eXytOPsulWrv8AYbBCSFBP+tnbOJJmGOQN qDKr3J86AJIABJJwABkk+gA5JoZWUlWBVgcFWBBBHUEHkH2NXNO1K/0m7hv9Nu57K8gbdFPbyNHI p7jKkZU9GVsqw4IIr6t+G3x0F/LFo3jKSC3nKhbfWeIoZWA4S7X7kchHSVSqMeCqnk+0+M9OsPFX g3WLaN0vIZtPuJ7WS3dZA08MTyQtGykgneoA9ifWvzedCjuhBBRmUgjBBUkHI/CgowRZCDsZnQHH BZAhYA+oDrn602iiiiiiiiiiiiiiiiiiiiiiiiiitnw9q/8AYOt6ZrItxdNpl3FeJbmUwrLJCd0a vIEkKoHClwFJZQVBXduHQ+L/AIieJfGV1JLqN48Fo3yx6bau6WcSf3dm7MjH+J5Mlj6DiuFq5p89 rbXttPe2hv7WKVXms/Pa2+0IpyYjOscrRhuhZUJx0rS8R62Nf1SW+isotMswkcFjplu2+CwtYUCx wI4ji8xiQ0kspjRpZXZyoyAMGitjQte1Xw3qMGqaPdPa3cDZVh80ci945oz8ssbDhlYY9MHmu68c fExvHemafBqWgWdvrNk3z6zb3L/vosHMK2bQZiVmwxLXcwBHyqoNeXAlc4JGQQcEjIPUHHY9xSUU UVseH9NGsa5pWlsWVL++trZ2QZdY5JFEhUeoTcfbrX6Z6dYwabYWlhbLtgtLeKCIeiRoFX8SBk+9 XaKKK8O+PukNqPgk3cSM8ml3sNySozthcGOUnHYblJPt2r4Yooooooooor0Twd8RtU8EaXrFjo9t CLvWHhLahNIzG1SGN0QQW4QKZcyO3mvIw+6BH8uTxWo6rqOr3DXWp3txe3Dkky3ErSN8xyQNxO0Z 7DAqhXU6B4htNCtdTxo0N7q13bPb6fqk9yQNJMilHngszbyJNOFLeXI0sZjfay5AKty5JJJJJJJJ JOSSeSSTyST1NJRXpngb4p+IvA+ba38rUtJkfdNpl4zBcEYb7NOA7WzMOv7uWMnkxE1yPibV7TXd avdVstKj0aC8k80WEU5uUidh+8PnGG3DF3yxxDGBnAFYWSQASSBnAycDPXA6DPfFJRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRX0T+z14cs9T1y/1m8tjMdIij+xu3MUVzMSC2OhkEedvXaCS ME5r7Porl9d8aeF/DRVNa1mzsZX5WF5N85Hr5MQeXHuVxV7RPEWieIrc3Wi6la6hCpwzQSBmQ+kk ZxJGT2DqpNbVVryzttQtbiyu4kntrqJ4Z4pFDJJG4KsrA8EEH/CvzS8W6XFovifXdJgV0gsNTu7e BZPvCFJW8rOeSNhXaTyVwcnOa57PBGByQc9xjPQ+hzyO/HoKSiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiivtr9nWKNfBV7KqYkk1u6Ej7cFglvahBu6kLk/Qk173JJH CjSyuscaKWd3YKqqBklmOAABySa+UvH/AMeryG9vdI8JJAIYS9u2ryfvWeQZR3tE+5tU52SPnJG4 KRivmC8vbvULma8vria6up3LzTzyNJLIxOSWZiSfYdAOAAK6Pwh4y1nwVqY1LSJVy6+XcW025ra5 jyDtkRWU5GPldSGXJwcEivtLwH8XfD3jGGK3nlj0nWzhX0+4kCrM+PvWkrYWVWPRMiQdCvc+tdel fDXx/wBKNl42N8lsIYtTsoJfNVcLPNCoikY9jIAEDHqQB6Zrwyiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinDZsbIO/cu05+ULht2R1znZjnGM+1Nr730PXPB3wz8CeH 1uro2sd1YQXq27Ylv7u5vIluZ5GiTHzF5CMkKiKFQYAAr5s+IPxg1zxdLdafYSPpugM5VLeP5Lm6 jXIDXUqsTtfqYkIXHDFuleN1v3vhzUdM0qy1bUU+xxamzjTYJQRdXccYUyXKxHBS2TeiiV8b2dQi sCWGBTkdo2V0ZkdCGVlJVlYHIKkYIIPIIOQa+jfh/wDHi60a2ttI8URTajbRusceqCTfdQwkgATq 3MwjH8YbftGCCRmu++NmmL4x8I6b4h8PyQ6lDpryXMrWzpI32SeNS75UkgxFFLoSCoLZGRivjMDn BOOcEnPHuQOePzp0mwSP5ZJj3tsJG0lMnaSMnBxjIycHvTKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKKKKKKKKKKsXN5d3jiS8urm6kVQqvczyzuFUYChpWdgoHAAOAOAKr0dOlX LvUdQ1DyPt99eXv2aIQW32u6nufs8IJYQwec7+VECSRHHtQEk4zVOiitC11fVrG3uLSy1PUbO1u1 KXdta3tzb290hGCtxDDKkc6kcFZVYY4xWfRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRX//ZDQplbmRzdHJlYW0NCmVuZG9iag0KNiAwIG9iag0K PDwvQmFzZUZvbnQvVGltZXMtUm9tYW4vU3VidHlwZS9UeXBlMS9UeXBlL0ZvbnQ+Pg0KZW5kb2Jq DQo3IDAgb2JqDQo8PC9CYXNlRm9udC9UaW1lcy1Cb2xkL0VuY29kaW5nIDggMCBSL1N1YnR5cGUv VHlwZTEvVHlwZS9Gb250Pj4NCmVuZG9iag0KOCAwIG9iag0KPDwvRGlmZmVyZW5jZXNbMjUyIC91 ZGllcmVzaXNdL1R5cGUvRW5jb2Rpbmc+Pg0KZW5kb2JqDQoxNyAwIG9iag0KPDwvT1BNIDA+Pg0K ZW5kb2JqDQoxNiAwIG9iag0KPDwvT1BNIDE+Pg0KZW5kb2JqDQoxNSAwIG9iag0KPDwvT1BNIDE+ Pg0KZW5kb2JqDQoxNCAwIG9iag0KPDwvTGVuZ3RoIDI4NjE2L0ZpbHRlciAvRmxhdGVEZWNvZGU+ PnN0cmVhbQ0KeJzMfQdgFVX29wTSE0gogSAKsdIkTC8URQUVo4CSBY2iuNKbAgJCpK+KIIrS/mpE NxRBioIUJVJ010IRFlBcQUClixApksVI8t075b1peXPPzEs+9/vvt/qU35l77+nn3HOHJdPZDEvT WXQ2TZv/x+XHJ4YkCwr66yyGZYRsUaJpns8aksywjh8HGz8qgpItijLNKjL6UeGdvwku/17/5B7N s4Ymy9kc+k9WS5288b/6z45va3XXCDqr34jkYclMNs+7LIkT0f8wHKIk47/ghWz0b/H4j97eKblV jyyu1d1ZTKvbu96RJbe6o1urB+66vdWdre4cnNypQ/IzBfnlZVfWDvpufrv8eKrpY4nVkjt2Sr5f paW4bZ9Gi2eyRdqVFh+JVtHo4kM7Xud2TYyh2mxKyjZIcdky2bJo3kxKjkTqwIaRg4YNO7d7wV2b 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 1z8fPz/+BWDVYPENCmVuZHN0cmVhbQ0KZW5kb2JqDQozIDAgb2JqDQo8PC9MZW5ndGggODcwL1N1 YnR5cGUvWE1ML1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlk PSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt cmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpwZGY9 Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iPjxwZGY6UHJvZHVjZXI+U29kYSBQREYgNTwv cGRmOlByb2R1Y2VyPjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91 dD0iIiB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4YXA6Q3JlYXRl RGF0ZT4yMDEzLTA1LTI5VDIwOjA1OjE4KzAyOjAwPC94YXA6Q3JlYXRlRGF0ZT48eGFwOkNyZWF0 b3JUb29sPlNvZGEgUERGIDU8L3hhcDpDcmVhdG9yVG9vbD48eGFwOk1ldGFkYXRhRGF0ZT4yMDEz LTA1LTI5VDIwOjA1OjE4KzAyOjAwPC94YXA6TWV0YWRhdGFEYXRlPjx4YXA6TW9kaWZ5RGF0ZT4y MDEzLTA1LTI5VDIwOjA1OjE4KzAyOjAwPC94YXA6TW9kaWZ5RGF0ZT48L3JkZjpEZXNjcmlwdGlv bj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5h ZG9iZS5jb20veGFwLzEuMC9tbS8iPjx4bXBNTTpEb2N1bWVudElEPnV1aWQ6MDAwMDAwMDAtMjU4 Yy0zZjBiLWIyMTMtY2IyNmFhM2Y2YTUwPC94bXBNTTpEb2N1bWVudElEPjwvcmRmOkRlc2NyaXB0 aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJ3Ij8+DQplbmRzdHJl YW0NCmVuZG9iag0KMiAwIG9iag0KPDwvQXV0aG9yKEludDEyKS9DcmVhdGlvbkRhdGUoRDoyMDEz MDUyOTIwMDUxOCswMicwMCcpL0NyZWF0b3IoU29kYSBQREYgNSkvTW9kRGF0ZShEOjIwMTMwNTI5 MjAwODQ5KzAyJzAwJykvUHJvZHVjZXIoU29kYSBQREYgNSk+Pg0KZW5kb2JqDQp4cmVmDQowIDEN CjAwMDAwMDAwMDAgNjU1MzUgZg0KMSAzDQowMDAwMDAwMDc5IDAwMDAwIG4NCjAwMDAxMzIzMDkg MDAwMDAgbg0KMDAwMDEzMTM2MCAwMDAwMCBuDQo1IDQNCjAwMDAwMDAxMzMgMDAwMDAgbg0KMDAw MDEwMjM2MyAwMDAwMCBuDQowMDAwMTAyNDMxIDAwMDAwIG4NCjAwMDAxMDI1MTMgMDAwMDAgbg0K MTQgNw0KMDAwMDEwMjY2OCAwMDAwMCBuDQowMDAwMTAyNjM4IDAwMDAwIG4NCjAwMDAxMDI2MDgg MDAwMDAgbg0KMDAwMDEwMjU3OCAwMDAwMCBuDQowMDAwMDc0NDcyIDAwMDAwIG4NCjAwMDAwMDA0 NjAgMDAwMDAgbg0KMDAwMDAwMDAxNSAwMDAwMCBuDQp0cmFpbGVyCjw8L0lEWzwzNTEyNzBmNjJi Y2U0ZDQ5NjExYmY4N2ZjNGQyY2JkND4gPDM1MTI3MGY2MmJjZTRkNDk2MTFiZjg3ZmM0ZDJjYmQ0 Pl0vSW5mbyAyIDAgUi9Sb290IDIwIDAgUi9TaXplIDIxPj4Kc3RhcnR4cmVmCjEzMjQ1OAolJUVP Rg== --=_961754f03d626e2a8419d54327d0f904-- From bounces+677728-0339-linux-xfs=oss.sgi.com@sendgrid.info Wed May 29 13:34:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_IMAGE_RATIO_02, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4D71529DF8 for ; Wed, 29 May 2013 13:34:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B48BFAC00F for ; Wed, 29 May 2013 11:34:23 -0700 (PDT) X-ASG-Debug-ID: 1369852461-04cbb0049a28b530001-w1Z2WR Received: from o198215122.outbound-mail.sendgrid.net (o198215122.outbound-mail.sendgrid.net [198.21.5.122]) by cuda.sgi.com with SMTP id ohUl7JojQwc5NPyE for ; Wed, 29 May 2013 11:34:21 -0700 (PDT) X-Barracuda-Envelope-From: bounces+677728-0339-linux-xfs=oss.sgi.com@sendgrid.info X-Barracuda-Apparent-Source-IP: 198.21.5.122 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.me; h= content-type:mime-version:from:to:reply-to:subject; s=smtpapi; bh=vq8M8vVkmoHTJmOsD+8b1mPxk1A=; b=wevhuw4q5qAVnhXLuopCoIsWkyyb Po5heVwutqDU2E+cVabvKH4Ww/Uf4E6B57QDrMdL/kgrpedHFNGeQKQSvBX+iPde FvIGD/THB62x5Tv/w9UNjpNMql+C/Arii6gy0MCKURJid+DFHjoRSCKq8xvQyU2p gxbR4lzNMR86vX8= Received: by 10.37.85.78 with SMTP id mf98.11265.51A64A283 Wed, 29 May 2013 18:34:16 +0000 (UTC) Received: from Njc3NzI4 (174.37.65.4-static.reverse.softlayer.com [174.37.65.4]) by mi13.sendgrid.net (SG) with HTTP id 13ef191ad0c.3ba6.c9ccd6 for ; Wed, 29 May 2013 13:34:16 -0500 (CST) Content-Type: multipart/alternative; boundary="===============7742601061250665240==" MIME-Version: 1.0 From: Giovanni Alves To: linux-xfs@oss.sgi.com Reply-To: secretaria@fisioaula.com.br Subject: Novos Planos Fisioaula com Livro + Tablet Message-ID: <1369852456.4282337541131048@mf98> X-ASG-Orig-Subj: Novos Planos Fisioaula com Livro + Tablet Date: Wed, 29 May 2013 18:34:16 +0000 (UTC) X-SG-EID: oBL405QwFDmeIwRRVjOKgrmpNXWT98FydLK7ol9MYPzqKYwAgEci/9cEVWvNOUe5nZMdmofWut4BAx2CAmhTBX02s8PzbuN8XEp0qqbtxeEA1GcwgztIfD69Ap89luoc X-SG-ID: VPWZYjw6GOzHdwkwPeoX9QiEbzQXX/gF9P8njHP5+LAa49Ta9tTELgfPNLK3ln7FB3yTYdHg/mj9uRb0QN3Wqs4e9EgqWyq79mTlgwHKLIVEPpYXIkkK7I7ssb6hvzEBz56P6DEXH08ZWM4qhsrKSIqTXOwKT0O0l3xKPNKRO6BOlTj7i7W3kUdz9NnlV1jQ DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.me; h= content-type:mime-version:from:to:reply-to:subject; s=smtpapi; bh=hgxagRB/IGLIX2VKKRQLF/+1pK4=; b=aycERgi7BxgJLDo9DCGjNYDhNdWB 0P2yDo1fSAtPHFiXvwRhBGEuxkRO/gnLLzGXjhNtDiVTk6HuyniYOQZumGak4jI4 l/nuriKyuxH/yQvpy+NN/895P0rI2uN441CSDmnMhtR30PCB5aIf8dJ4QFPqggm9 IuWRg4xUZ8xZtuw= X-Barracuda-Connect: o198215122.outbound-mail.sendgrid.net[198.21.5.122] X-Barracuda-Start-Time: 1369852461 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.55 X-Barracuda-Spam-Status: No, SCORE=0.55 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_02, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.55 HTML_IMAGE_RATIO_02 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message --===============7742601061250665240== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable ( http://www.fisioaula.com.br/?utm_source=3DNewsletter&utm_medium=3Demail&u= tm_campaign=3DNewsletter%2BNovembro%2B2012 ) Prepa= ra=C3=A7=C3=A3o para Concursos e Atualiza=C3=A7=C3=A3o em Fisioterapia ( http://www.aulabrasil.com.br/products/preparatorio-e-atu= alizacao-em-fisioterapia?utm_source=3DNewsletter&utm_medium=3Demail&utm_cam= paign=3DNewsletter ) =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 Novos Planos Fisioaula=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20 - Apenas as aulas online e provas R$ 216,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro de Quest=C3=B5es Comentadas com Resumos R$ 325,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro Tratado de Fisioterapia - 1200 pgs R$ 525,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro de Quest=C3=B5es + Tratado de Fisioterapia R$ 625,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro de Quest=C3=B5es + Tratado de Fisio + Tab= let Android R$ 926,00=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 Por que escolher o Fisioaula? Fazer o Cursos Online =C3=A9 uma forma r=C3=A1pida e pr=C3= =A1tica de aprender voc=C3=AA pode estudar a qualquer hora e lugar, podendo= estudar at=C3=A9 no escrit=C3=B3rio.=20 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20 ( http://www.fisioaula.com.br/fisioaula/ex= tensivo.asp?utm_source=3DNewsletter&utm_medium=3Demail&utm_campaign=3DNewsl= etter%2BNovembro%2B2012 ) =20=20=20=20=20=20=20=20=20=20=20=20 ( http://www.fisioaula.com.br/?utm_source=3DNewsletter&utm_medium=3Dem= ail&utm_campaign=3DNewsletter%2BNovembro%2B2012 ) =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 = = Uma parcer= ia Fisioaula e MedAula= --===============7742601061250665240== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable

= 3D"Fisio

Prepara=C3=A7=C3=A3o para C= oncursos e Atualiza=C3=A7=C3=A3o em Fisioterapia


Novos Planos Fisioaula
  • Apenas as aulas online e provas
    R$ 2= 16,00

  • Aulas online + Provas + Livro de Quest=C3=B5es Co= mentadas com Resumos
    R$ 325,00

  • Aulas online + Provas + Livro Tratado de Fisioter= apia - 1200 pgs
    R$ 525,00

  • Aulas online + Provas + Livro de Quest=C3=B5es + = Tratado de Fisioterapia
    R$ 625,00

  • Aulas online + Provas + Livro de Quest=C3=B5es + = Tratado de Fisio + Tablet Android
    R$ 926,00

Por que escolher o Fisioaula?


Fazer o Cursos Online =C3=A9 uma forma r=C3=A1pida e pr=C3= =A1tica de aprender voc=C3=AA pode estudar a qualquer hora e lugar, podendo= estudar at=C3=A9 no escrit=C3=B3rio.

=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20


Uma parceria Fisioaula e MedAula
3D"" --===============7742601061250665240==-- From bounces+677728-d153-xfs=oss.sgi.com@sendgrid.info Wed May 29 13:35:43 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_IMAGE_RATIO_02, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 95BBF29DF8 for ; Wed, 29 May 2013 13:35:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8473630404E for ; Wed, 29 May 2013 11:35:40 -0700 (PDT) X-ASG-Debug-ID: 1369852538-04cb6c473f280620001-NocioJ Received: from o198215122.outbound-mail.sendgrid.net (o198215122.outbound-mail.sendgrid.net [198.21.5.122]) by cuda.sgi.com with SMTP id issG8JS3yaD4k69I for ; Wed, 29 May 2013 11:35:38 -0700 (PDT) X-Barracuda-Envelope-From: bounces+677728-d153-xfs=oss.sgi.com@sendgrid.info X-Barracuda-Apparent-Source-IP: 198.21.5.122 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.me; h= content-type:mime-version:from:to:reply-to:subject; s=smtpapi; bh=n8JETpCm7cIxoA1BdSftNRznNHE=; b=cLUZ0jZbaJIthXeeKUBTcbsztgKC V+KvVKX5aMR5jrt/9lFWoQ3K3YCP+ayqH/10d0nKinxM1GWnR94MFRecDgiL/Gz3 YaZLIK0L7+XKpACkAi5Iy7hbFUlnbRltyBE0nS5RSTHmhfKBLWB5MUKFHZnXdi3N Qsh44gb0B+Gka00= Received: by 10.4.35.196 with SMTP id mf82.32558.51A64A2F7 Wed, 29 May 2013 18:34:23 +0000 (UTC) Received: from Njc3NzI4 (174.37.65.4-static.reverse.softlayer.com [174.37.65.4]) by mi12.sendgrid.net (SG) with HTTP id 13ef191c88a.4783.80757c for ; Wed, 29 May 2013 13:34:23 -0500 (CST) Content-Type: multipart/alternative; boundary="===============0987495297761979671==" MIME-Version: 1.0 From: Giovanni Alves To: xfs@oss.sgi.com Reply-To: secretaria@fisioaula.com.br Subject: Novos Planos Fisioaula com Livro + Tablet Message-ID: <1369852463.2961176856295551@mf82.sendgrid.net> X-ASG-Orig-Subj: Novos Planos Fisioaula com Livro + Tablet Date: Wed, 29 May 2013 18:34:23 +0000 (UTC) X-SG-EID: GPcH5AR4FNxUx3/k94obBuFzds479X57W1U837jaM3cR67VxhitWfa++3ChHNpY+Wi1X4m6KfnmLWJ/pACysR0fFd9zpqNExPk/Q3bjBTq4IaIEJnOHUkl0tsUC21Yh1 X-SG-ID: VPWZYjw6GOzHdwkwPeoX9QiEbzQXX/gF9P8njHP5+LAa49Ta9tTELgfPNLK3ln7FB3yTYdHg/mj9uRb0QN3Wqs4e9EgqWyq79mTlgwHKLIVEPpYXIkkK7I7ssb6hvzEBz56P6DEXH08ZWM4qhsrKSIqTXOwKT0O0l3xKPNKRO6BOlTj7i7W3kUdz9NnlV1jQ DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.me; h= content-type:mime-version:from:to:reply-to:subject; s=smtpapi; bh=tBPGCirNlR0nEj5dg01ai9Hd0ns=; b=G5Xs+PAbc4amynm7VGyvH1BppZZ0 LVTVXOQnaJH90kxZIAw4ePSd0wCJiToVed1GBKlY9pKoMLI1WrsgeMuN/lLw6bdW CIPzeRf51WPE0j35+X3sqHdeNgWsParscEaQez6fhcOq52+/RipwDi796LLiVKKv rSGs+6I3+j0J6MA= X-Barracuda-Connect: o198215122.outbound-mail.sendgrid.net[198.21.5.122] X-Barracuda-Start-Time: 1369852538 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.55 X-Barracuda-Spam-Status: No, SCORE=0.55 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_02, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.55 HTML_IMAGE_RATIO_02 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message --===============0987495297761979671== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable ( http://www.fisioaula.com.br/?utm_source=3DNewsletter&utm_medium=3Demail&u= tm_campaign=3DNewsletter%2BNovembro%2B2012 ) Prepa= ra=C3=A7=C3=A3o para Concursos e Atualiza=C3=A7=C3=A3o em Fisioterapia ( http://www.aulabrasil.com.br/products/preparatorio-e-atu= alizacao-em-fisioterapia?utm_source=3DNewsletter&utm_medium=3Demail&utm_cam= paign=3DNewsletter ) =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 Novos Planos Fisioaula=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20 - Apenas as aulas online e provas R$ 216,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro de Quest=C3=B5es Comentadas com Resumos R$ 325,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro Tratado de Fisioterapia - 1200 pgs R$ 525,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro de Quest=C3=B5es + Tratado de Fisioterapia R$ 625,00 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 - Aulas online + Provas + Livro de Quest=C3=B5es + Tratado de Fisio + Tab= let Android R$ 926,00=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 Por que escolher o Fisioaula? Fazer o Cursos Online =C3=A9 uma forma r=C3=A1pida e pr=C3= =A1tica de aprender voc=C3=AA pode estudar a qualquer hora e lugar, podendo= estudar at=C3=A9 no escrit=C3=B3rio.=20 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20 ( http://www.fisioaula.com.br/fisioaula/ex= tensivo.asp?utm_source=3DNewsletter&utm_medium=3Demail&utm_campaign=3DNewsl= etter%2BNovembro%2B2012 ) =20=20=20=20=20=20=20=20=20=20=20=20 ( http://www.fisioaula.com.br/?utm_source=3DNewsletter&utm_medium=3Dem= ail&utm_campaign=3DNewsletter%2BNovembro%2B2012 ) =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 = = Uma parcer= ia Fisioaula e MedAula= --===============0987495297761979671== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable

=

Prepara=C3=A7=C3=A3o para C= oncursos e Atualiza=C3=A7=C3=A3o em Fisioterapia


Novos Planos Fisioaula
  • Apenas as aulas online e provas
    R$ 2= 16,00

  • Aulas online + Provas + Livro de Quest=C3=B5es Co= mentadas com Resumos
    R$ 325,00

  • Aulas online + Provas + Livro Tratado de Fisioter= apia - 1200 pgs
    R$ 525,00

  • Aulas online + Provas + Livro de Quest=C3=B5es + = Tratado de Fisioterapia
    R$ 625,00

  • Aulas online + Provas + Livro de Quest=C3=B5es + = Tratado de Fisio + Tablet Android
    R$ 926,00

Por que escolher o Fisioaula?


Fazer o Cursos Online =C3=A9 uma forma r=C3=A1pida e pr=C3= =A1tica de aprender voc=C3=AA pode estudar a qualquer hora e lugar, podendo= estudar at=C3=A9 no escrit=C3=B3rio.

=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20


Uma parceria Fisioaula e MedAula
=3D"" --===============0987495297761979671==-- From bfoster@redhat.com Wed May 29 14:01:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5F12329DF8 for ; Wed, 29 May 2013 14:01:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E9590AC00E for ; Wed, 29 May 2013 12:01:22 -0700 (PDT) X-ASG-Debug-ID: 1369854082-04bdf078182a02e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id lfzisz646uYgdFqI for ; Wed, 29 May 2013 12:01:22 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TJ1Jii011683 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 May 2013 15:01:19 -0400 Received: from laptop.bfoster (vpn-48-118.rdu2.redhat.com [10.10.48.118]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4TJ1HiY004793 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 29 May 2013 15:01:18 -0400 Message-ID: <51A64FD3.8000606@redhat.com> Date: Wed, 29 May 2013 14:58:27 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 4/9] xfs: rework dquot CRCs References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-5-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 4/9] xfs: rework dquot CRCs In-Reply-To: <1369636707-15150-5-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369854082 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > Calculating dquot CRCs when the backing buffer is written back just > doesn't work reliably. There are several places which manipulate > dquots directly in the buffers, and they don't calculate CRCs > appropriately, nor do they always set the buffer up to calculate > CRCs appropriately. > > Firstly, if we log a dquot buffer (e.g. during allocation) it gets > logged without valid CRC, and so on recovery we end up with a dquot > that is not valid. > > Secondly, if we recover/repair a dquot, we don't have a verifier > attached to the buffer and hence CRCs arenot calculate don the way > down to disk. > > Thirdly, calculating the CRC after we've changed the contents means > that if we re-read the dquot from the buffer, we cannot verify the > contents of the dquot are valid, as the CRC is invalid. > > So, to avoid all the dquot CRC errors that are being detected by the > read verifier, change to using the same model as for inodes. that > is, dquot CRCs are calculated and written to the backing buffer at > the time the dquot is flushed to the backing buffer. If we modify > the dquuot directly in the backing buffer, calculate the CRC > immediately after the modification is complete. Hence the dquot in > the on-disk buffer should always have a valid CRC. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_dquot.c | 37 ++++++++++++++++--------------------- > fs/xfs/xfs_log_recover.c | 10 ++++++++++ > fs/xfs/xfs_qm.c | 36 ++++++++++++++++++++++++++---------- > fs/xfs/xfs_quota.h | 2 ++ > 4 files changed, 54 insertions(+), 31 deletions(-) > ... > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > index f41702b..d181542 100644 > --- a/fs/xfs/xfs_qm.c > +++ b/fs/xfs/xfs_qm.c > @@ -41,6 +41,7 @@ > #include "xfs_qm.h" > #include "xfs_trace.h" > #include "xfs_icache.h" > +#include "xfs_cksum.h" > > /* > * The global quota manager. There is only one of these for the entire > @@ -839,7 +840,7 @@ xfs_qm_reset_dqcounts( > xfs_dqid_t id, > uint type) > { > - xfs_disk_dquot_t *ddq; > + struct xfs_dqblk *dqb; > int j; > > trace_xfs_reset_dqcounts(bp, _RET_IP_); > @@ -853,8 +854,12 @@ xfs_qm_reset_dqcounts( > do_div(j, sizeof(xfs_dqblk_t)); > ASSERT(mp->m_quotainfo->qi_dqperchunk == j); > #endif > - ddq = bp->b_addr; > + dqb = bp->b_addr; > for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { > + struct xfs_disk_dquot *ddq; > + > + ddq = (struct xfs_disk_dquot *)&dqb[j]; > + > /* > * Do a sanity check, and if needed, repair the dqblk. Don't > * output any warnings because it's perfectly possible to > @@ -871,7 +876,8 @@ xfs_qm_reset_dqcounts( > ddq->d_bwarns = 0; > ddq->d_iwarns = 0; > ddq->d_rtbwarns = 0; > - ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); > + xfs_update_cksum((char *)&dqb[j], sizeof(struct xfs_dqblk), > + XFS_DQUOT_CRC_OFF); Nice cleanup on the cast ugliness even without the crc change. Is there a technical reason for the unconditional crc update here beyond that we're doing a reset? I'm wondering if there's any value in leaving those bits untouched for a filesystem that might have never enabled crc (quotacheck or not). FWIW, the rest of this patch looks sane to me (I'm less familiar with the log recovery code, but the changes seem isolated and straightforward) and I couldn't locate anywhere else we modify the backing buffer for the dquot. Brian > } > } > > @@ -907,19 +913,29 @@ xfs_qm_dqiter_bufs( > XFS_FSB_TO_DADDR(mp, bno), > mp->m_quotainfo->qi_dqchunklen, 0, &bp, > &xfs_dquot_buf_ops); > - if (error) > - break; > > /* > - * XXX(hch): need to figure out if it makes sense to validate > - * the CRC here. > + * CRC and validation errors will return a EFSCORRUPTED here. If > + * this occurs, re-read without CRC validation so that we can > + * repair the damage via xfs_qm_reset_dqcounts(). This process > + * will leave a trace in the log indicating corruption has > + * been detected. > */ > + if (error == EFSCORRUPTED) { > + error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, > + XFS_FSB_TO_DADDR(mp, bno), > + mp->m_quotainfo->qi_dqchunklen, 0, &bp, > + NULL); > + } > + > + if (error) > + break; > + > xfs_qm_reset_dqcounts(mp, bp, firstid, type); > xfs_buf_delwri_queue(bp, buffer_list); > xfs_buf_relse(bp); > - /* > - * goto the next block. > - */ > + > + /* goto the next block. */ > bno++; > firstid += mp->m_quotainfo->qi_dqperchunk; > } > diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h > index c61e31c..c38068f 100644 > --- a/fs/xfs/xfs_quota.h > +++ b/fs/xfs/xfs_quota.h > @@ -87,6 +87,8 @@ typedef struct xfs_dqblk { > uuid_t dd_uuid; /* location information */ > } xfs_dqblk_t; > > +#define XFS_DQUOT_CRC_OFF offsetof(struct xfs_dqblk, dd_crc) > + > /* > * flags for q_flags field in the dquot. > */ > From bpm@sgi.com Wed May 29 14:01:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9009829DFA for ; Wed, 29 May 2013 14:01:26 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5D87B304059; Wed, 29 May 2013 12:01:23 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id F3C12500B51; Wed, 29 May 2013 14:01:22 -0500 (CDT) Date: Wed, 29 May 2013 14:01:22 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 Message-ID: <20130529190122.GE19505@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <20130528175627.GZ20028@sgi.com> <20130528235424.GY29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528235424.GY29466@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Dave, On Wed, May 29, 2013 at 09:54:24AM +1000, Dave Chinner wrote: > On Tue, May 28, 2013 at 12:56:27PM -0500, Ben Myers wrote: > > On Mon, May 27, 2013 at 04:38:18PM +1000, Dave Chinner wrote: > > > This is an update for all the fixes I have for 3,10-rc4. > > > > > > All the comments on the previous patches have been updated in this > > > series, and there are two new patches. The first patch adds support > > > for indicating that the filesystem has CRC enabled to userspace, and > > > the second fixes the missing CRC updates on the unlinked inode list > > > manipulations. > > > > This seems to be getting a bit out of hand for a release candidate pull > > request: > > You don't need to send them all at once. The ones you committed from > my initial -rc2 series could just be sent to Linus immediately, and > that halves the current outstanding queue. Then there's only 8-9 > patches remaining... I am more concerned about the content of the patches than the number of them. > > Fixes for xfs without crcs: > > f648167f xfs: avoid nesting transactions in xfs_qm_scall_setqlim() > > xfs: fix split buffer vector log recovery support > > xfs: kill suid/sgid through the truncate path. > > And the log recovery ordering fix I just sent out. > > > Fixes for xfs with crcs: > > 90253cf1 xfs: remote attribute allocation may be contiguous > > 913e96bc xfs: remote attribute read too short > > 4af3644c xfs: remote attribute tail zeroing does too much > > 6863ef84 xfs: correctly map remote attr buffers during removal > > 8517de2a xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance > > d4c712bc xfs: fully initialise temp leaf in xfs_attr3_leaf_compact > > All of which fix filesystem corruption or - in the case of the > buffer cache coherency problems - can lead to stale data exposure. > > > ad1858d7 xfs: rework remote attr CRCs > > Fixes cache coherency issues via a change in the on-disk format for > remote attributes. We need to get that included before a full > release is made, otherwise we need feature bits to distinguish > between the original and the new formats. > > > 9a5b6dee xfs: fix incorrect remote symlink block count > > xfs: rework dquot CRCs > > More filesystem corruption fixes. > > > xfs: inode unlinked list needs to recalculate the inode CRC * replaced with "2-3 patches" > > Another corruption fix, now with an addition log recovery ordering > fix which prevents log recovery from potentially causing silent > filesystem corruption. > > > xfs: fix dir3 freespace block corruption * maybe this effects filesystems w/o crcs? > > Again, a filesystem corruption, including fixing a problem in the > on-disk format definition. While it probably doesn't affect > non-crc filesystems, it's a landmine that should be removed.... > > > Dev work for xfs with crcs: > > xfs: increase number of ACL entries for V5 superblocks > > On disk format change. We need to get that out before release, > otherwise it needs a feature bit. > > > xfs: don't emit v5 superblock warnings on write > > Fixes a nasty log spamming problem. Certainly not development code. > > > xfs: add fsgeom flag for v5 superblock support. > > Needed for userspace support of CRC filesystems, trivial patch. if > we expect anyone to test this kernel code, we need this patch so > userspace can correctly identify crc-enabled filesystems. > > > xfs: disable swap extents ioctl on CRC enabled filesystems > > Filesystem corruption fix, caused simply by running xfs_fsr. > > But, really, this entire series is not that much change in terms of > volume: > > $ git diff --stat b38958d..bf6331a -- fs/xfs > fs/xfs/xfs_acl.c | 31 ++-- > fs/xfs/xfs_acl.h | 30 +++- > fs/xfs/xfs_attr_leaf.c | 74 ++++++--- > fs/xfs/xfs_attr_remote.c | 408 +++++++++++++++++++++++++++++------------------- > fs/xfs/xfs_attr_remote.h | 10 ++ > fs/xfs/xfs_buf.c | 1 + > fs/xfs/xfs_buf_item.c | 7 +- > fs/xfs/xfs_dfrag.c | 8 + > fs/xfs/xfs_dir2_format.h | 1 + > fs/xfs/xfs_dir2_node.c | 13 +- > fs/xfs/xfs_dquot.c | 37 ++--- > fs/xfs/xfs_fs.h | 1 + > fs/xfs/xfs_fsops.c | 4 +- > fs/xfs/xfs_inode.c | 42 ++++- > fs/xfs/xfs_iops.c | 47 ++++-- > fs/xfs/xfs_log_recover.c | 95 ++++++++++- > fs/xfs/xfs_mount.c | 18 ++- > fs/xfs/xfs_qm.c | 36 +++-- > fs/xfs/xfs_qm_syscalls.c | 40 +++-- > fs/xfs/xfs_quota.h | 2 + > fs/xfs/xfs_symlink.c | 20 +-- > 21 files changed, 612 insertions(+), 313 deletions(-) > > And a large proportion of that change is the single attr CRC rework > patch. > > > We're representing 3 patches which are clearly approprate for a release > > candidate, 11 fixes for CRCs + 2 more for the rework of unlinked lists patch, > > and 4 patches which are development work. > > Most file filesystem corruptions. Without those fixes, CRC enabled > filesystems simple cannot be used without all these patches being > applied. It's not an experimental feature at this point - it's just > broken. If as an experimental feature "it's just broken" in -rc1, maybe I should never have merged it. > > We pulled in the CRC work with the understanding that it is an > > experimental feature that might not be perfect, and with a focus > > upon preventing regression for existing users. This did not imply > > that we're going after perfection for CRCs during the 3.10 release > > candidate series. > > Right, but there was also the understanding that the CRC code would > be usable by release time, and so there would be fixes committed > throughout the -rc series to fix problems with the CRC code so that > it is usable. > > As it is, the result of all these patches is that xfstests is almost > entirely passing on a 4k block size filesystem. The only tests that > aren't passing are those that already fail or require userspace > support that isn't currently available (e.g. xfs-db write support, > metadump). And 1k block size filesystems mostly pass xfstests, too, > though there are random assert failures from time to time. > > IOWs after this patch set is applied, the CRC functionality fits the > definition of the 'experimental' tag. It mostly works, but still > has some lurking issues that need to be flushed out. I'm unlikely to > be posting 2-3 bug fix patches a day from this point onwards.... > > Indeed, the last two days I've been doing 3.11 development work > because xfstests on CRC enabled filesystems is now usable for > regression testing. i.e. the majority of the "easy-to-hit" problems > have been flushed out by this patchset. > > > I'll be happy to review the 17 CRC related patches for inclusion > > in the master branch ASAP, > > That's a good start, but... > > > but I'm afraid 17 patches is a bit much > > to ask for a release candidate, even if it were -rc2. > > ... I think you're being way too conservative here. > > BTRFS in january for an -rc merge: > > https://lkml.org/lkml/2013/1/25/11 > > That was 30 commits and +300/-100 lines. There was a another pull > request 2 weeks later with another 9 commits. The same thing > happened with the RAID5/6 integration into btrfs in 3.9 - the -rc > merges following it had 13, 7 and 15 commits. And for 3.10-rc, the > first post-rc1 merge was 25 commits (+350/-250 lines). You have announced publicly on several occasions that you feel BTRFS is not ready for production use. If it is true that BTRFS is not ready for production, then the concerns for BTRFS are different than those for XFS in this context. > And if you want another example, the ext4 extent status cache fixes > that went into 3.9-rc4: > > https://lkml.org/lkml/2013/3/21/644 > > that was 21 commits and +540/-81 lines. Was extent status cache experimental code when this was merged? > Yup, new filesystem code has bugs, and they get fixed in -rc > releases. What makes new XFS code so special we can't do this? > > The amount of change we are talking about here is not unreasonable > even for an -rc4 release, as evidenced by other filesystems under > development. Hence I don't think "it's too late" is really a viable > reason for not fixing all these filesystem corruption issues in the > CRC code... The 6-8 weeks after -rc1 is not the time to be changing the ondisk format or rewriting swaths of code we didn't get right the first time, unless absolutely necessary. Issues with an experimental feature that are only relevant to the few developers and testers who have the temerity to apply the userspace CRC patches do not merit the level of risk which some of these patches represent to the much larger number of XFS users who will not be using CRCs in 3.10. > > Here we are in 3.11/feature-bit territory. > > I'd much prefer that we don't have to add code to 3.11 to reject any > CRC-enabled filesystem without any feature bits set because we don't > support a broken remote attr format that was fixed weeks before 3.10 > released but was not allowed to be fixed in 3.10. That's just crazy > from any release management perspective you care to look at it from. So would I. > Ben, if the problem is that you can't review all the fixes in a timely > manner, then we can fix that. I'm sure that Mark, Eric and Brian can > help review the code if this is the sticking point. Reviews are always welcome... > There are also > people like Michael who are actively testing the CRC code and > reporting bugs to me all the time, so there's demand for these fixes > to be integrated into the 3.10 tree... I bet Michael can grab sources from the master branch. > Everyone knew there would be fixes for the CRC code coming along in > the -rc period - we discussed it on the weekly concall before the the > CRC code was merged into 3.10. Hence I'm a bit surprised to get what > appears to be a blanket rejection for these fixes to the CRC code this > early in the 3.10-rc cycle. Three (or is it 4 now?) on-disk changes, one of which is completely unrelated to CRCs, along with a bunch of the changes deep in the remote attribute, quota, and inode unlinked list code is not worth the risk in the middle of release candidates. I'm ok with lower risk changes. > Let's not waste all the effort that we put into getting the CRC code into > 3.10 by not fixing known corruptions and on-disk format deficiencies. I don't consider it to be a waste of effort if CRCs weren't quite perfect for 3.10. There is plenty to show for it, such as not having introduced regressions for everyone else. People who want to test CRCs will be coming to the list for the userspace patches anyway. It's easy enough to point them to the master branch to get the kernel fixes too. > Releasing CRC support in a seriously broken state that > we need to add permanent workarounds for in 3.11 is about the worst > possible outcome that could occur right now.... A worse outcome is that I pull in this code and something goes very wrong for the thousands of users of 3.10 with existing non-crc XFS filesystems. A feature bit and some inconvenience for a few XFS developers and testers is a safer choice. Regards, Ben From tinguely@sgi.com Wed May 29 14:21:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E9FC429DF8 for ; Wed, 29 May 2013 14:21:54 -0500 (CDT) Received: from eagdhcp-232-136.americas.sgi.com (eagdhcp-232-136.americas.sgi.com [128.162.232.136]) by relay1.corp.sgi.com (Postfix) with ESMTP id BABA58F8049; Wed, 29 May 2013 12:21:51 -0700 (PDT) Message-ID: <51A65550.50508@sgi.com> Date: Wed, 29 May 2013 14:21:52 -0500 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 5/9] xfs: fix split buffer vector log recovery support References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-6-git-send-email-david@fromorbit.com> In-Reply-To: <1369636707-15150-6-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 05/27/13 01:38, Dave Chinner wrote: > From: Dave Chinner > > A long time ago in a galaxy far away.... > > .. the was a commit made to fix some ilinux specific "fragmented > buffer" log recovery problem: > > http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=b29c0bece51da72fb3ff3b61391a391ea54e1603 > > That problem occurred when a contiguous dirty region of a buffer was > split across across two pages of an unmapped buffer. It's been a > long time since that has been done in XFS, and the changes to log > the entire inode buffers for CRC enabled filesystems has > re-introduced that corner case. > > And, of course, it turns out that the above commit didn't actually > fix anything - it just ensured that log recovery is guaranteed to > fail when this situation occurs. And now for the gory details. > ... Thanks for the great walk through of the problem. Reviewed-by: Mark Tinguely From sandeen@sandeen.net Wed May 29 14:27:20 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0824929DF8 for ; Wed, 29 May 2013 14:27:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E49F78F8052 for ; Wed, 29 May 2013 12:27:19 -0700 (PDT) X-ASG-Debug-ID: 1369855638-04cbb0049c28fe30001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id cQfz72tvkjDyRkUA for ; Wed, 29 May 2013 12:27:18 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6DCC663740D2; Wed, 29 May 2013 14:27:18 -0500 (CDT) Message-ID: <51A65696.1050900@sandeen.net> Date: Wed, 29 May 2013 14:27:18 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Ben Myers CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <20130528175627.GZ20028@sgi.com> <20130528235424.GY29466@dastard> <20130529190122.GE19505@sgi.com> X-ASG-Orig-Subj: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 In-Reply-To: <20130529190122.GE19505@sgi.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369855638 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132392 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/29/13 2:01 PM, Ben Myers wrote: > Hi Dave, > > On Wed, May 29, 2013 at 09:54:24AM +1000, Dave Chinner wrote: >> I'd much prefer that we don't have to add code to 3.11 to reject any >> CRC-enabled filesystem without any feature bits set because we don't >> support a broken remote attr format that was fixed weeks before 3.10 >> released but was not allowed to be fixed in 3.10. That's just crazy >> from any release management perspective you care to look at it from. > > So would I. > >> Ben, if the problem is that you can't review all the fixes in a timely >> manner, then we can fix that. I'm sure that Mark, Eric and Brian can >> help review the code if this is the sticking point. > > Reviews are always welcome... But it won't matter for the sake of this argument, sounds like? > A worse outcome is that I pull in this code and something goes very > wrong for the thousands of users of 3.10 with existing non-crc XFS > filesystems. A feature bit and some inconvenience for a few XFS > developers and testers is a safer choice. Your concern (rightly) seems to be stability for non-crc users, so: I'll review these patches with a special eye towards if/how they affect any non-crc codepaths. If it's wholly contained in crc code, you can merge them without fear. Sound like a deal? -Eric > Regards, > Ben > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From bpm@sgi.com Wed May 29 14:45:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 318047F37 for ; Wed, 29 May 2013 14:45:22 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id DFC078F8054; Wed, 29 May 2013 12:45:21 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id AD7E2500B50; Wed, 29 May 2013 14:45:21 -0500 (CDT) Date: Wed, 29 May 2013 14:45:21 -0500 From: Ben Myers To: Eric Sandeen Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATH 0/9] xfs: fixes for 3.10-rc4 Message-ID: <20130529194521.GF19505@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <20130528175627.GZ20028@sgi.com> <20130528235424.GY29466@dastard> <20130529190122.GE19505@sgi.com> <51A65696.1050900@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A65696.1050900@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) Hey Eric, On Wed, May 29, 2013 at 02:27:18PM -0500, Eric Sandeen wrote: > On 5/29/13 2:01 PM, Ben Myers wrote: > > Hi Dave, > > > > On Wed, May 29, 2013 at 09:54:24AM +1000, Dave Chinner wrote: > > > > >> I'd much prefer that we don't have to add code to 3.11 to reject any > >> CRC-enabled filesystem without any feature bits set because we don't > >> support a broken remote attr format that was fixed weeks before 3.10 > >> released but was not allowed to be fixed in 3.10. That's just crazy > >> from any release management perspective you care to look at it from. > > > > So would I. > > > >> Ben, if the problem is that you can't review all the fixes in a timely > >> manner, then we can fix that. I'm sure that Mark, Eric and Brian can > >> help review the code if this is the sticking point. > > > > Reviews are always welcome... > > But it won't matter for the sake of this argument, sounds like? Reviews will certainly help... > > A worse outcome is that I pull in this code and something goes very > > wrong for the thousands of users of 3.10 with existing non-crc XFS > > filesystems. A feature bit and some inconvenience for a few XFS > > developers and testers is a safer choice. > > Your concern (rightly) seems to be stability for non-crc users, so: > > I'll review these patches with a special eye towards if/how they > affect any non-crc codepaths. If it's wholly contained in crc > code, you can merge them without fear. Sound like a deal? ...but my primary concern is the content of the patches. If we can show that a given patch is relevant, of low risk to non-crc users, and has been adequately tested, I'm game. Thanks, Ben From rjohnston@sgi.com Wed May 29 14:45:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8AD517F50 for ; Wed, 29 May 2013 14:45:49 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id F2538AC00E; Wed, 29 May 2013 12:45:45 -0700 (PDT) Received: from [134.15.0.66] (134.15.0.66) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Wed, 29 May 2013 14:44:22 -0500 Message-ID: <51A65AE8.5010500@sgi.com> Date: Wed, 29 May 2013 14:45:44 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Eryu Guan CC: Subject: Re: [PATCH] xfstests: add missing colon in _filter_ln References: <1369842106-9869-1-git-send-email-eguan@redhat.com> In-Reply-To: <1369842106-9869-1-git-send-email-eguan@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.66] On 05/29/2013 10:41 AM, Eryu Guan wrote: > On distros with older coreutils(eg. RHEL5) generic/294 fails like > > -ln: creating symbolic link `SCRATCH_MNT/294.test/testlink': File exists > +ln: creating symbolic link `SCRATCH_MNT/294.test/testlink'File exists > > _filter_ln ate the ": ". xfs/103 has similar issue. Add ": " back. > > Signed-off-by: Eryu Guan Thanks for the patch, it has been committed: commit 3f09dca681eb0cdd850abbcdb4d6997a0890b09a Author: Eryu Guan Date: Wed May 29 14:42:09 2013 -0500 xfstests: add missing colon in _filter_ln --Rich From yanhua.li@ntu.ac.uk Wed May 29 14:54:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D9A017F37 for ; Wed, 29 May 2013 14:54:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 80E92AC00E for ; Wed, 29 May 2013 12:54:51 -0700 (PDT) X-ASG-Debug-ID: 1369857288-04bdf078172a5480001-NocioJ Received: from rowan.ntu.ac.uk (rowan.ntu.ac.uk [152.71.1.136]) by cuda.sgi.com with ESMTP id msC7krSDSupYdC4H for ; Wed, 29 May 2013 12:54:49 -0700 (PDT) X-Barracuda-Envelope-From: yanhua.li@ntu.ac.uk X-Barracuda-Apparent-Source-IP: 152.71.1.136 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap0KAFVcplGYR5Qp/2dsb2JhbABagncSg2uqNoF0GoR3gRGBRgGKNg0McRZ0bQEBA4EXAQELAQEBAgQBAQEDBTRXASQGGQkEMCYBFwiFQQEBAQEDJoF5AQEBCQMOAYxBjD+OYwiCAgKHbIgugSKLGoEVEIEBgncSJWEDiyKBJokOjgKFI4FYgTeBcTY X-IronPort-AV: E=Sophos;i="4.87,766,1363132800"; d="scan'208";a="946905" Received: from maxwellhouse.ads.ntu.ac.uk ([152.71.148.41]) by rowan1.ads.ntu.ac.uk with ESMTP; 29 May 2013 20:54:47 +0100 Received: from PG-TIPS.ads.ntu.ac.uk ([152.71.2.135]) by MaxwellHouse.ads.ntu.ac.uk ([152.71.202.132]) with mapi id 14.02.0309.002; Wed, 29 May 2013 20:54:47 +0100 From: "Li, Yanhua" Subject: JUMBO Telecom give you a lump sum pay out of 750,000.00 send your name and country, Mr. Marcus, Steve. E-mail: jumbodept@hotmail.co.uk Thread-Topic: JUMBO Telecom give you a lump sum pay out of 750,000.00 send your name and country, Mr. Marcus, Steve. E-mail: jumbodept@hotmail.co.uk X-ASG-Orig-Subj: JUMBO Telecom give you a lump sum pay out of 750,000.00 send your name and country, Mr. Marcus, Steve. E-mail: jumbodept@hotmail.co.uk Thread-Index: Ac5cpdTz+0ec2c27TTGRrZ6/MwX3tg== Date: Wed, 29 May 2013 19:54:46 +0000 Message-ID: Accept-Language: zh-CN, en-GB, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [180.215.193.140] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Barracuda-Connect: rowan.ntu.ac.uk[152.71.1.136] X-Barracuda-Start-Time: 1369857289 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.43 X-Barracuda-Spam-Status: No, SCORE=1.43 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_HEADERS, PR0N_SUBJECT, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132394 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; DQpESVNDTEFJTUVSOiBUaGlzIGVtYWlsIGlzIGludGVuZGVkIHNvbGVseSBmb3IgdGhlIGFkZHJl c3NlZS4gSXQgbWF5IGNvbnRhaW4gcHJpdmF0ZSBhbmQgY29uZmlkZW50aWFsIGluZm9ybWF0aW9u LiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgYWRkcmVzc2VlLCBwbGVhc2UgdGFrZSBubyBh Y3Rpb24gYmFzZWQgb24gaXQgbm9yIHNob3cgYSBjb3B5IHRvIGFueW9uZS4gSW4gdGhpcyBjYXNl LCBwbGVhc2UgcmVwbHkgdG8gdGhpcyBlbWFpbCB0byBoaWdobGlnaHQgdGhlIGVycm9yLiBPcGlu aW9ucyBhbmQgaW5mb3JtYXRpb24gaW4gdGhpcyBlbWFpbCB0aGF0IGRvIG5vdCByZWxhdGUgdG8g dGhlIG9mZmljaWFsIGJ1c2luZXNzIG9mIE5vdHRpbmdoYW0gVHJlbnQgVW5pdmVyc2l0eSBzaGFs bCBiZSB1bmRlcnN0b29kIGFzIG5laXRoZXIgZ2l2ZW4gbm9yIGVuZG9yc2VkIGJ5IHRoZSBVbml2 ZXJzaXR5LiBOb3R0aW5naGFtIFRyZW50IFVuaXZlcnNpdHkgaGFzIHRha2VuIHN0ZXBzIHRvIGVu c3VyZSB0aGF0IHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgdmlydXMtZnJlZSwg YnV0IHdlIGRvIGFkdmlzZSB0aGF0IHRoZSByZWNpcGllbnQgc2hvdWxkIGNoZWNrIHRoYXQgdGhl IGVtYWlsIGFuZCBpdHMgYXR0YWNobWVudHMgYXJlIGFjdHVhbGx5IHZpcnVzIGZyZWUuIFRoaXMg aXMgaW4ga2VlcGluZyB3aXRoIGdvb2QgY29tcHV0aW5nIHByYWN0aWNlLg0K From bfoster@redhat.com Wed May 29 16:09:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3E76F7F37 for ; Wed, 29 May 2013 16:09:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2D07B304062 for ; Wed, 29 May 2013 14:09:02 -0700 (PDT) X-ASG-Debug-ID: 1369861741-04cbb0049e297b10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Ll6RDpElE1oYM5Ka for ; Wed, 29 May 2013 14:09:02 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TL8xJ5014118 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 May 2013 17:08:59 -0400 Received: from laptop.bfoster (vpn-48-118.rdu2.redhat.com [10.10.48.118]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4TL8wtr025588 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 29 May 2013 17:08:58 -0400 Message-ID: <51A66DC0.10405@redhat.com> Date: Wed, 29 May 2013 17:06:08 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-7-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems In-Reply-To: <1369636707-15150-7-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369861742 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > Currently, swapping extents from one inode to another is a simple > act of switching data and attribute forks from one inode to another. > This, unfortunately in no longer so simple with CRC enabled > filesystems as there is owner information embedded into the BMBT > blocks that are swapped between inodes. Hence swapping the forks > between inodes results in the inodes having mapping blocks that > point to the wrong owner and hence are considered corrupt. > > To fix this we need an extent tree block or record based swap > algorithm so that the BMBT block owner information can be updated > atomically in the swap transaction. This is a significant piece of > new work, so for the moment simply don't allow swap extent > operations to succeed on CRC enabled filesystems. > > Signed-off-by: Dave Chinner > --- Pretty straightforward... Reviewed-by: Brian Foster > fs/xfs/xfs_dfrag.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c > index f852b08..c407e1c 100644 > --- a/fs/xfs/xfs_dfrag.c > +++ b/fs/xfs/xfs_dfrag.c > @@ -219,6 +219,14 @@ xfs_swap_extents( > int taforkblks = 0; > __uint64_t tmp; > > + /* > + * We have no way of updating owner information in the BMBT blocks for > + * each inode on CRC enabled filesystems, so to avoid corrupting the > + * this metadata we simply don't allow extent swaps to occur. > + */ > + if (xfs_sb_version_hascrc(&mp->m_sb)) > + return XFS_ERROR(EINVAL); > + > tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL); > if (!tempifp) { > error = XFS_ERROR(ENOMEM); > From bpm@sgi.com Wed May 29 16:43:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 177257F37 for ; Wed, 29 May 2013 16:43:02 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id CECD5304066; Wed, 29 May 2013 14:43:01 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 8F833500B51; Wed, 29 May 2013 16:43:01 -0500 (CDT) Date: Wed, 29 May 2013 16:43:01 -0500 From: Ben Myers To: Eric Sandeen Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Message-ID: <20130529214301.GB20028@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> <51A61A55.1000306@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A61A55.1000306@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) Hi Eric, On Wed, May 29, 2013 at 10:10:13AM -0500, Eric Sandeen wrote: > On 5/27/13 1:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > Currently userspace has no way of determining that a filesystem is > > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > > indicate that the filesystem has v5 superblock support enabled. > > This will allow xfs_info to correctly report the state of the > > filesystem. > > > Looks fine, > > Reviewed-by: Eric Sandeen > > Ben, having this in place for for the next point release will let > userspace work & testing proceed w/o the need for a patched > kernel... if you could consider pulling it in that'd be great. Sounds reasonable. I'll check it out. > Dave, just out of curiosity, most other features sort of match between > the "_has_*" and the flag names, is there a reason for the > crc <-> sbv5 difference? Just semantics, but just curious. > > (i.e. xfs_sb_version_hasprojid32bit checks XFS_SB_VERSION2_PROJID32BIT, > but xfs_sb_version_hascrc checks XFS_SB_VERSION_5) > > Answering my own question maybe, I guess SB_VERSION_5 was conceived > with crc already in place, so there's no need for a feature flag on > top of the sb version, right...? Seems like we're also out of space in xfs_fsop_geom.flags. There may even be people who prefer to use v5 super blocks without crcs turned on, so maybe conflating the two ideas here is undesireable. -Ben From bpm@sgi.com Wed May 29 16:47:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 227B57F37 for ; Wed, 29 May 2013 16:47:03 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2CC99AC003; Wed, 29 May 2013 14:47:02 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id D748E500B51; Wed, 29 May 2013 16:47:01 -0500 (CDT) Date: Wed, 29 May 2013 16:47:01 -0500 From: Ben Myers To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Message-ID: <20130529214701.GC20028@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> <51A61A55.1000306@sandeen.net> <20130529214301.GB20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130529214301.GB20028@sgi.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Wed, May 29, 2013 at 04:43:01PM -0500, Ben Myers wrote: > Hi Eric, > > On Wed, May 29, 2013 at 10:10:13AM -0500, Eric Sandeen wrote: > > On 5/27/13 1:38 AM, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > Currently userspace has no way of determining that a filesystem is > > > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > > > indicate that the filesystem has v5 superblock support enabled. > > > This will allow xfs_info to correctly report the state of the > > > filesystem. > > > > > > Looks fine, > > > > Reviewed-by: Eric Sandeen > > > > Ben, having this in place for for the next point release will let > > userspace work & testing proceed w/o the need for a patched > > kernel... if you could consider pulling it in that'd be great. > > Sounds reasonable. I'll check it out. > > > Dave, just out of curiosity, most other features sort of match between > > the "_has_*" and the flag names, is there a reason for the > > crc <-> sbv5 difference? Just semantics, but just curious. > > > > (i.e. xfs_sb_version_hasprojid32bit checks XFS_SB_VERSION2_PROJID32BIT, > > but xfs_sb_version_hascrc checks XFS_SB_VERSION_5) > > > > Answering my own question maybe, I guess SB_VERSION_5 was conceived > > with crc already in place, so there's no need for a feature flag on > > top of the sb version, right...? > > Seems like we're also out of space in xfs_fsop_geom.flags. > There may even be > people who prefer to use v5 super blocks without crcs turned on, so maybe > conflating the two ideas here is undesireable. Nevermind. That was silly. From sandeen@redhat.com Wed May 29 17:30:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5CCD07F37 for ; Wed, 29 May 2013 17:30:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3D4BA304071 for ; Wed, 29 May 2013 15:30:20 -0700 (PDT) X-ASG-Debug-ID: 1369866619-04cb6c4741292520001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id bYzZZH3y3K4hGAKF for ; Wed, 29 May 2013 15:30:19 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4TMUGl2022992 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 29 May 2013 18:30:18 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4TMUDnH002616 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO) for ; Wed, 29 May 2013 18:30:15 -0400 Message-ID: <51A68175.9020202@redhat.com> Date: Wed, 29 May 2013 17:30:13 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfstests: generic/313, test sgid inheritance on subdirs X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: generic/313, test sgid inheritance on subdirs Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369866619 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On XFS this test fails today due to some over-eager SGID removal in xfs core code; ext4 & btrfs pass. Document it in a test, will send xfs patch in a bit. Signed-off-by: Eric Sandeen --- p.s. I'm going to just flaunt my ignorance and say: I've never understood acls well. I'm hoping someone who does can help me write a better changelog, because this one is no good at all! diff --git a/tests/generic/313 b/tests/generic/313 new file mode 100755 index 0000000..289fd6f --- /dev/null +++ b/tests/generic/313 @@ -0,0 +1,67 @@ +#! /bin/bash +# FS QA Test No. 313 +# +# Test SGID inheritance on subdirectories +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs generic +_require_acls +_require_user +_need_to_be_root + +rm -rf $TEST_DIR/$seq-dir + +# Make dir owned by qa user, and an unrelated group: +mkdir $TEST_DIR/$seq-dir +chown $qa_user:12345 $TEST_DIR/$seq-dir + +# Make parent dir sgid +chmod 2775 $TEST_DIR/$seq-dir + +# Make subdirs before & after acl set +su $qa_user -c "mkdir $TEST_DIR/$seq-dir/subdir" +su $qa_user -c "setfacl -m u:$qa_user:rwx,d:u:$qa_user:rwx $TEST_DIR/$seq-dir" +su $qa_user -c "mkdir $TEST_DIR/$seq-dir/subdir2" + +# Both subdirs should have inherited sgid +ls -ld $TEST_DIR/$seq-dir/subdir* | _filter_test_dir | awk '{print $1,$NF}' + +status=0 +exit diff --git a/tests/generic/313.out b/tests/generic/313.out new file mode 100644 index 0000000..326a929 --- /dev/null +++ b/tests/generic/313.out @@ -0,0 +1,3 @@ +QA output created by 313 +drwxr-sr-x. TEST_DIR/313-dir/subdir +drwxrwsr-x+ TEST_DIR/313-dir/subdir2 diff --git a/tests/generic/group b/tests/generic/group index bd443c1..d5ec8d5 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -115,3 +115,4 @@ 310 auto 311 auto metadata log 312 auto quick prealloc enospc +313 auto quick acl From david@fromorbit.com Wed May 29 19:38:59 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EC0797F37 for ; Wed, 29 May 2013 19:38:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6C7E6AC003 for ; Wed, 29 May 2013 17:38:55 -0700 (PDT) X-ASG-Debug-ID: 1369874332-04cb6c474129a240001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id mVaDPHCw1HRjtEX5 for ; Wed, 29 May 2013 17:38:53 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvgMAC+eplF5La/F/2dsb2JhbABagwm9FYUeBAGBBRd0giMBAQU6HCMQCAMOCgklDwUlAyETiAy6DxaNYIEdB4J2YQOTaoNQihyHJYMhKg Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:08:51 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhqtF-0007Q5-4F; Thu, 30 May 2013 10:38:49 +1000 Date: Thu, 30 May 2013 10:38:49 +1000 From: Dave Chinner To: Paolo Pisati Cc: xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130530003849.GC29466@dastard> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> <20130519011354.GE6495@dastard> <20130520170710.GA2591@luxor.wired.org> <20130521000208.GF24543@dastard> <20130523143456.GB19815@luxor.wired.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130523143456.GB19815@luxor.wired.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369874332 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132412 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 23, 2013 at 04:34:56PM +0200, Paolo Pisati wrote: > On Tue, May 21, 2013 at 10:02:09AM +1000, Dave Chinner wrote: > > > > And that fix I mentioned will be useless if you don't apply the > > patch that avoids the vmap allocation problem.... > > > ok, so i recompiled a kernel+aforementioend fix, i repartitioned my disk and i > ran the swift-bench for 2 days in a row until i got this: > > dmesg: > ... > [163596.605253] updatedb.mlocat: page allocation failure: order:0, mode:0x20 > [163596.605299] [] (unwind_backtrace+0x0/0x104) from [] (dump_stack+0x20/0x24) > [163596.605320] [] (dump_stack+0x20/0x24) from [] (warn_alloc_failed+0xd8/0x118) > [163596.605335] [] (warn_alloc_failed+0xd8/0x118) from [] (__alloc_pages_nodemask+0x524/0x708) > [163596.605354] [] (__alloc_pages_nodemask+0x524/0x708) from [] (new_slab+0x22c/0x248) > [163596.605370] [] (new_slab+0x22c/0x248) from [] (__slab_alloc.constprop.46+0x1a4/0x4c8) > [163596.605383] [] (__slab_alloc.constprop.46+0x1a4/0x4c8) from [] (kmem_cache_alloc+0x158/0x190) > [163596.605402] [] (kmem_cache_alloc+0x158/0x190) from [] (scsi_pool_alloc_command+0x30/0x74) > [163596.605417] [] (scsi_pool_alloc_command+0x30/0x74) from [] (scsi_host_alloc_command+0x24/0x78) > [163596.605428] [] (scsi_host_alloc_command+0x24/0x78) from [] (__scsi_get_command+0x1c/0xa0) > [163596.605439] [] (__scsi_get_command+0x1c/0xa0) from [] (scsi_get_command+0x3c/0xb0) > [163596.605453] [] (scsi_get_command+0x3c/0xb0) from [] (scsi_get_cmd_from_req+0x50/0x60) > [163596.605466] [] (scsi_get_cmd_from_req+0x50/0x60) from [] (scsi_setup_fs_cmnd+0x4c/0xac) ENOMEM deep in the SCSI stack for an order 0 GFP_ATOMIC allocation. That's not an XFS problem - that's a SCSI stack issue. You should probably report that to the scsi list... > [163596.608574] active_anon:26367 inactive_anon:29153 isolated_anon:0 > [163596.608574] active_file:396338 inactive_file:397959 isolated_file:0 > [163596.608574] unevictable:0 dirty:0 writeback:5 unstable:0 > [163596.608574] free:5145 slab_reclaimable:57625 slab_unreclaimable:7729 > [163596.608574] mapped:1703 shmem:10 pagetables:581 bounce:0 > [163596.608602] Normal free:15256kB min:3508kB low:4384kB high:5260kB active_anon:0kB inactive_anon:8kB active_file:848kB inactive_file:1560kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:772160kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:230500kB slab_unreclaimable:30916kB kernel_stack:2208kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no > [163596.608607] lowmem_reserve[]: 0 26423 26423 > [163596.608628] HighMem free:5324kB min:512kB low:4352kB high:8192kB active_anon:105468kB inactive_anon:116604kB active_file:1584504kB inactive_file:1590276kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:3382264kB mlocked:0kB dirty:0kB writeback:20kB mapped:6812kB shmem:40kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:2324kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no > [163596.608634] lowmem_reserve[]: 0 0 0 > [163596.608643] Normal: 216*4kB 215*8kB 216*16kB 216*32kB 36*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 15256kB > [163596.608668] HighMem: 233*4kB 67*8kB 141*16kB 22*32kB 8*64kB 1*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 5324kB Though this says there is plenty of free order 0 pages in both low and high memory.... > [163596.608692] 794329 total pagecache pages > [163596.608697] 12 pages in swap cache > [163596.608703] Swap cache stats: add 79, delete 67, find 9/11 > [163596.608708] Free swap = 8378092kB > [163596.608712] Total swap = 8378364kB > [163596.670667] 1046784 pages of RAM > [163596.670674] 6801 free pages > [163596.670679] 12533 reserved pages > [163596.670683] 36489 slab pages > [163596.670687] 631668 pages shared > [163596.670692] 12 pages swap cached > [163596.670701] SLUB: Unable to allocate memory on node -1 (gfp=0x8020) > [163596.670710] cache: kmalloc-192, object size: 192, buffer size: 192, default order: 0, min order: 0 > [163596.670718] node 0: slabs: 2733, objs: 57393, free: 0 And it was slub that was unable to find a page when it should have been able to, so perhaps this is a VM problem? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 19:42:21 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A7FB87F37 for ; Wed, 29 May 2013 19:42:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 95FDC8F8059 for ; Wed, 29 May 2013 17:42:21 -0700 (PDT) X-ASG-Debug-ID: 1369874536-04cbb0049c2a5560001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id fqRsKM3oVHzPFaiE for ; Wed, 29 May 2013 17:42:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvgMAJafplF5La/F/2dsb2JhbABagwm9FYUeBAGBBRd0giMBAQU6HCMQCAMOCgklDwUlAyETiAy6FhaNRhqBHQeCdmEDlzqKHIclgyEqgS0 Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:12:16 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhqwZ-0007Qc-Fo; Thu, 30 May 2013 10:42:15 +1000 Date: Thu, 30 May 2013 10:42:15 +1000 From: Dave Chinner To: Paolo Pisati Cc: xfs@oss.sgi.com Subject: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages Message-ID: <20130530004215.GD29466@dastard> X-ASG-Orig-Subj: Re: 3.5+, xfs and 32bit armhf - xfs_buf_get: failed to map pages References: <20130517104529.GA12490@luxor.wired.org> <20130519011354.GE6495@dastard> <20130520170710.GA2591@luxor.wired.org> <20130521000208.GF24543@dastard> <20130523143456.GB19815@luxor.wired.org> <20130529135641.GB4889@luxor.wired.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130529135641.GB4889@luxor.wired.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369874536 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132412 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 29, 2013 at 03:56:41PM +0200, Paolo Pisati wrote: > On Thu, May 23, 2013 at 04:34:56PM +0200, Paolo Pisati wrote: > > On Tue, May 21, 2013 at 10:02:09AM +1000, Dave Chinner wrote: > > > > > > And that fix I mentioned will be useless if you don't apply the > > > patch that avoids the vmap allocation problem.... > > > > > > ok, so i recompiled a kernel+aforementioend fix, i repartitioned my disk and i > > ran the swift-bench for 2 days in a row until i got this: > > i'm testing a 3.5.y kernel plus those 3 patches: > > 549142a xfs: don't use speculative prealloc for small files > f0843f4 xfs: limit speculative prealloc size on sparse files > 454da09 xfs: inode allocation should use unmapped buffers. > > and i can confirm that: > > -using a small fs (2G) i cannot reproduce any -ENOSPC or vmalloc() problem > anymore, the benchmark runs until running out of inodes > > -using a bigger fs (~250G), two days and my tests are still running good Ok, good to know. The first patch you list there hasn't even been reviewed yet, so it might take some time before that is ready for -stable backport. Also, there are a bunch of fixes needed to the second patch you have there (f0843f4 xfs: limit speculative prealloc...) that would also be necessary for a -stable backport. i.e: e8108ce xfs: fix xfs_iomap_eof_prealloc_initial_size type e114b5f xfs: increase prealloc size to double that of the previous extent e78c420 xfs: fix potential infinite loop in xfs_iomap_prealloc_size() Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 19:46:06 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B0BBC7F37 for ; Wed, 29 May 2013 19:46:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 34904AC001 for ; Wed, 29 May 2013 17:46:06 -0700 (PDT) X-ASG-Debug-ID: 1369874763-04cbb0049d2a59f0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id EsjMNdMQtGNfCcXu for ; Wed, 29 May 2013 17:46:04 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkMAL+gplF5La/F/2dsb2JhbABagwm9FYUeBAGBBRd0giMBAQU6HCMQCAMOBwMJDBkPBSUDIROIDLoWFo1ggR0HCoJsYQOXOpFBgyEq Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:16:03 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uhr0E-0007Qr-Oy; Thu, 30 May 2013 10:46:02 +1000 Date: Thu, 30 May 2013 10:46:02 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH 2/9] xfs: fix incorrect remote symlink block count Message-ID: <20130530004602.GE29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/9] xfs: fix incorrect remote symlink block count References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-3-git-send-email-david@fromorbit.com> <51A62F45.5000004@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A62F45.5000004@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369874763 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132412 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 29, 2013 at 12:39:33PM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > When CRCs are enabled, the number of blocks needed to hold a remote > > symlink on a 1k block size filesystem may be 2 instead of 1. The > > transaction reservation for the allocated bloks was not taking this > > into account and only allocating one block. hence when trying to > > read or invalidate such symlinks, we are mapping a hole where there > > should be a block and things go bad at that point. > > > > Fix the reservation to use the correct block count, clean up the > > block count calculation similar to the remote attribute calculation, > > and add a debug guard to detect when we don't write the entire > > symlink to disk. > > > > Signed-off-by: Dave Chinner > > --- > > Reviewed-by: Brian Foster > > Unrelated question... I noticed we update di_size in xfs_symlink(). I > presume this is safe because, even in the non-local case, we actually > log the data (the path) in the buffers as well, right? Yes, the remote symlink block allocation and contents is logged in the same transaction so cwit is safe to update di_size directly and log that, too. Cheers, Dave -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 20:00:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 720657F37 for ; Wed, 29 May 2013 20:00:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id DE842AC003 for ; Wed, 29 May 2013 18:00:39 -0700 (PDT) X-ASG-Debug-ID: 1369875637-04cb6c474229b7b0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id swqZ9DKD7QkidWbe for ; Wed, 29 May 2013 18:00:37 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkMAA2kplF5La/F/2dsb2JhbABagwm9DYUeBAGBBRd0giMBAQQBJxMcIwULCAMOBwMJJQ8FJQMhE4gHBboOFo1NE4EdB4J2YQOXOpFBgyEqgS0BHgY Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:30:26 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhrE9-0007Sh-Nl; Thu, 30 May 2013 11:00:25 +1000 Date: Thu, 30 May 2013 11:00:25 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH 4/9] xfs: rework dquot CRCs Message-ID: <20130530010025.GF29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/9] xfs: rework dquot CRCs References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-5-git-send-email-david@fromorbit.com> <51A64FD3.8000606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A64FD3.8000606@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369875637 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132414 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 29, 2013 at 02:58:27PM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > Calculating dquot CRCs when the backing buffer is written back just > > doesn't work reliably. There are several places which manipulate > > dquots directly in the buffers, and they don't calculate CRCs > > appropriately, nor do they always set the buffer up to calculate > > CRCs appropriately. > > > > Firstly, if we log a dquot buffer (e.g. during allocation) it gets > > logged without valid CRC, and so on recovery we end up with a dquot > > that is not valid. > > > > Secondly, if we recover/repair a dquot, we don't have a verifier > > attached to the buffer and hence CRCs arenot calculate don the way > > down to disk. > > > > Thirdly, calculating the CRC after we've changed the contents means > > that if we re-read the dquot from the buffer, we cannot verify the > > contents of the dquot are valid, as the CRC is invalid. > > > > So, to avoid all the dquot CRC errors that are being detected by the > > read verifier, change to using the same model as for inodes. that > > is, dquot CRCs are calculated and written to the backing buffer at > > the time the dquot is flushed to the backing buffer. If we modify > > the dquuot directly in the backing buffer, calculate the CRC > > immediately after the modification is complete. Hence the dquot in > > the on-disk buffer should always have a valid CRC. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_dquot.c | 37 ++++++++++++++++--------------------- > > fs/xfs/xfs_log_recover.c | 10 ++++++++++ > > fs/xfs/xfs_qm.c | 36 ++++++++++++++++++++++++++---------- > > fs/xfs/xfs_quota.h | 2 ++ > > 4 files changed, 54 insertions(+), 31 deletions(-) > > > ... > > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > > index f41702b..d181542 100644 > > --- a/fs/xfs/xfs_qm.c > > +++ b/fs/xfs/xfs_qm.c > > @@ -41,6 +41,7 @@ > > #include "xfs_qm.h" > > #include "xfs_trace.h" > > #include "xfs_icache.h" > > +#include "xfs_cksum.h" > > > > /* > > * The global quota manager. There is only one of these for the entire > > @@ -839,7 +840,7 @@ xfs_qm_reset_dqcounts( > > xfs_dqid_t id, > > uint type) > > { > > - xfs_disk_dquot_t *ddq; > > + struct xfs_dqblk *dqb; > > int j; > > > > trace_xfs_reset_dqcounts(bp, _RET_IP_); > > @@ -853,8 +854,12 @@ xfs_qm_reset_dqcounts( > > do_div(j, sizeof(xfs_dqblk_t)); > > ASSERT(mp->m_quotainfo->qi_dqperchunk == j); > > #endif > > - ddq = bp->b_addr; > > + dqb = bp->b_addr; > > for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { > > + struct xfs_disk_dquot *ddq; > > + > > + ddq = (struct xfs_disk_dquot *)&dqb[j]; > > + > > /* > > * Do a sanity check, and if needed, repair the dqblk. Don't > > * output any warnings because it's perfectly possible to > > @@ -871,7 +876,8 @@ xfs_qm_reset_dqcounts( > > ddq->d_bwarns = 0; > > ddq->d_iwarns = 0; > > ddq->d_rtbwarns = 0; > > - ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); > > + xfs_update_cksum((char *)&dqb[j], sizeof(struct xfs_dqblk), > > + XFS_DQUOT_CRC_OFF); > > Nice cleanup on the cast ugliness even without the crc change. Is there > a technical reason for the unconditional crc update here beyond that > we're doing a reset? I'm wondering if there's any value in leaving those > bits untouched for a filesystem that might have never enabled crc > (quotacheck or not). The dquot might be zeroed and unused, but the buffer it sits in is still allocated and valid. That means if we ever start using that dquot again (either by quotacheck or a new uid/gid/prid), it will be read straight out of the buffer rather than allocated, and hence the constraint that allocated but unused dquots still need to have valid CRCs. FWIW, the dquot buffer read validates the CRC on all dquots in the buffer when it comes off disk as it has no way of knowing what dquots contain valid data or not. Same with the xfs_qm_dqcheck() call - an unused dquot still needs to be a valid dquot to pass those checks... > FWIW, the rest of this patch looks sane to me (I'm less familiar with > the log recovery code, but the changes seem isolated and > straightforward) and I couldn't locate anywhere else we modify the > backing buffer for the dquot. Right, apart from dquot allocation and flushing, there aren't any. Resetting the dquots to zero before a quota check is a special case. Doing it via the buffer avoids needing to initialise all the dquots in memory that *might* be tracked by the quota file. But we don't know what quota IDs are tracked in the quota file with first mapping the quota file and finding all the offsets that contain blocks. And, well, once we have that mapping, why would be do N xfs_qm_dqget() calls per buffer to get initialised, cached dquots from the buffer when we can simply RMW the buffers we've mapped directly? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 20:07:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E8BCE7F37 for ; Wed, 29 May 2013 20:07:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 82BF4AC003 for ; Wed, 29 May 2013 18:07:35 -0700 (PDT) X-ASG-Debug-ID: 1369876050-04bdf078162baaa0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id JokNwkeEUEf9iYEW for ; Wed, 29 May 2013 18:07:31 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkMAHelplF5La/F/2dsb2JhbABagwm9DoUeBAGBBRd0giMBAQQBOhwjBQsIAw4HAwklDwUlAyETiAcFuhMWjWCBHQeDVwOXOpFBgyEqgSwk Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:37:24 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhrKr-0007Tb-W8; Thu, 30 May 2013 11:07:22 +1000 Date: Thu, 30 May 2013 11:07:21 +1000 From: Dave Chinner To: Ben Myers Cc: xfs@oss.sgi.com Subject: Re: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems Message-ID: <20130530010721.GG29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-7-git-send-email-david@fromorbit.com> <20130528214931.GA20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528214931.GA20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369876050 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132414 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, May 28, 2013 at 04:49:31PM -0500, Ben Myers wrote: > On Mon, May 27, 2013 at 04:38:24PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > Currently, swapping extents from one inode to another is a simple > > act of switching data and attribute forks from one inode to another. > > This, unfortunately in no longer so simple with CRC enabled > > filesystems as there is owner information embedded into the BMBT > > blocks that are swapped between inodes. Hence swapping the forks > > between inodes results in the inodes having mapping blocks that > > point to the wrong owner and hence are considered corrupt. > > > > To fix this we need an extent tree block or record based swap > > algorithm so that the BMBT block owner information can be updated > > atomically in the swap transaction. This is a significant piece of > > new work, so for the moment simply don't allow swap extent > > operations to succeed on CRC enabled filesystems. > > > > Signed-off-by: Dave Chinner > > I believe we do want to have functional swap extents for crc enabled > filesystems. Of course. > But this is fine as long as it is temporary. It is. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 20:11:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 380F67F37 for ; Wed, 29 May 2013 20:11:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 245B1304039 for ; Wed, 29 May 2013 18:11:46 -0700 (PDT) X-ASG-Debug-ID: 1369876304-04cb6c474129c2d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id GQOtfRDaqL6WNw4B for ; Wed, 29 May 2013 18:11:44 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkMAKymplF5La/F/2dsb2JhbABagwm9DoUeBAGBBRd0giMBAQUnExwjEAgDFQMJJQ8FJQMhE4gMuhUWjWCBHQeDVwOXOpFBgyEq Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:41:43 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhrP4-0007UE-Sh; Thu, 30 May 2013 11:11:42 +1000 Date: Thu, 30 May 2013 11:11:42 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Message-ID: <20130530011142.GH29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> <51A61A55.1000306@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A61A55.1000306@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369876304 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132414 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 29, 2013 at 10:10:13AM -0500, Eric Sandeen wrote: > On 5/27/13 1:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > Currently userspace has no way of determining that a filesystem is > > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > > indicate that the filesystem has v5 superblock support enabled. > > This will allow xfs_info to correctly report the state of the > > filesystem. > > > Looks fine, > > Reviewed-by: Eric Sandeen > > Ben, having this in place for for the next point release will let > userspace work & testing proceed w/o the need for a patched > kernel... if you could consider pulling it in that'd be great. > > Dave, just out of curiosity, most other features sort of match between > the "_has_*" and the flag names, is there a reason for the > crc <-> sbv5 difference? Just semantics, but just curious. > > (i.e. xfs_sb_version_hasprojid32bit checks XFS_SB_VERSION2_PROJID32BIT, > but xfs_sb_version_hascrc checks XFS_SB_VERSION_5) > > Answering my own question maybe, I guess SB_VERSION_5 was conceived > with crc already in place, so there's no need for a feature flag on > top of the sb version, right...? Exactly. New features that require feature flags will end up following the flag/function name convention, but it's not necessary in this case because V5 sb = CRCs enabled. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 20:28:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A1C4E7F37 for ; Wed, 29 May 2013 20:28:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7C526304043 for ; Wed, 29 May 2013 18:28:35 -0700 (PDT) X-ASG-Debug-ID: 1369877306-04cbb0049d2a8290001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id xHYhDE6Hf66oIX0W for ; Wed, 29 May 2013 18:28:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvkMABmqplF5La/F/2dsb2JhbABagwm9DIUeBAGBAxd0giMBAQQBJxMcIwULCAMOBwMJJQ8FJQMhE4gHBboXFo1ggR0Hg1cDlzqRQYMhKg Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 10:58:26 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhrfF-0007Vg-GN; Thu, 30 May 2013 11:28:25 +1000 Date: Thu, 30 May 2013 11:28:25 +1000 From: Dave Chinner To: Ben Myers Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Message-ID: <20130530012825.GI29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> <51A61A55.1000306@sandeen.net> <20130529214301.GB20028@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130529214301.GB20028@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369877306 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132416 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 29, 2013 at 04:43:01PM -0500, Ben Myers wrote: > Hi Eric, > > On Wed, May 29, 2013 at 10:10:13AM -0500, Eric Sandeen wrote: > > On 5/27/13 1:38 AM, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > Currently userspace has no way of determining that a filesystem is > > > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > > > indicate that the filesystem has v5 superblock support enabled. > > > This will allow xfs_info to correctly report the state of the > > > filesystem. > > > > > > Looks fine, > > > > Reviewed-by: Eric Sandeen > > > > Ben, having this in place for for the next point release will let > > userspace work & testing proceed w/o the need for a patched > > kernel... if you could consider pulling it in that'd be great. > > Sounds reasonable. I'll check it out. > > > Dave, just out of curiosity, most other features sort of match between > > the "_has_*" and the flag names, is there a reason for the > > crc <-> sbv5 difference? Just semantics, but just curious. > > > > (i.e. xfs_sb_version_hasprojid32bit checks XFS_SB_VERSION2_PROJID32BIT, > > but xfs_sb_version_hascrc checks XFS_SB_VERSION_5) > > > > Answering my own question maybe, I guess SB_VERSION_5 was conceived > > with crc already in place, so there's no need for a feature flag on > > top of the sb version, right...? > > Seems like we're also out of space in xfs_fsop_geom.flags. Nowhere near it, actually ;). flags is a __u32, this is only the 16th flag. > There may even be > people who prefer to use v5 super blocks without crcs turned on, so maybe > conflating the two ideas here is undesireable. The flag is indicating that there is a different format on disk, not that crcs are enabled or not. Userspace needs to know about that different format, and right now *userspace* assumes v5 superblocks mean CRCs are enabled because that's part of the definition of the features that a v5 superblock has. If in future that changes (hint: it won't) then we can add a separate flag to indicate whether CRCs are enabled or not when the feature flag to disable them is added to the superblock. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed May 29 20:54:04 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 067777F37 for ; Wed, 29 May 2013 20:54:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A49EDAC001 for ; Wed, 29 May 2013 18:54:00 -0700 (PDT) X-ASG-Debug-ID: 1369878838-04bdf078172bdc20001-w1Z2WR Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id oFhAD9GFJK09Gk8D for ; Wed, 29 May 2013 18:53:59 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ak4QAOqvplF5La/F/2dsb2JhbAA/GoMJMLxfhR4EAYEDF3SCIwEBBAE6HCMFCwgDGAklDwUlAyETiAcFDTK5URaNYIEdB4NXA5c6ihyHJYMhKg Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 11:23:58 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Uhs3v-0007Xy-RB; Thu, 30 May 2013 11:53:55 +1000 Date: Thu, 30 May 2013 11:53:55 +1000 From: Dave Chinner To: kdasu Cc: linux-xfs@oss.sgi.com Subject: Re: Kernel 3.3 XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0 Message-ID: <20130530015355.GJ29466@dastard> X-ASG-Orig-Subj: Re: Kernel 3.3 XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0 References: <1369842978624-35000.post@n7.nabble.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369842978624-35000.post@n7.nabble.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369878838 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085, BSF_SC1_TG172a X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132418 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 1.00 BSF_SC1_TG172a Custom Rule TG172a On Wed, May 29, 2013 at 08:56:18AM -0700, kdasu wrote: > kernel 3.3. instability with > > When writing 3 real-time and 1 regular file on disk simultaneously > (sync is blocking function). the rcu stall detection kicks in every > time when 3rd-4th attempt. Doesn't happen on my test rig running a 3.10-rc3 kernel using default mkfs/mount parameters for a rt fs on x86-64. more information about your system is needed. http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > XFS: Assertion failed: xfs_trans_get_block_res(tp) > 0, file: fs/xfs/xfs_bmap.c, > line: 5203 I don't see that either, but that indicates you are probably using a non-default realtime extent size configuration. That's something xfs_info output will tell us. Cheers, Dave. -- Dave Chinner david@fromorbit.com From will@builderschoicetools.com Wed May 29 21:01:01 2013 Return-Path: X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B6AC87F37 for ; Wed, 29 May 2013 21:01:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9FFCD8F8049 for ; Wed, 29 May 2013 19:00:58 -0700 (PDT) X-ASG-Debug-ID: 1369879253-04cbb0049c2aa130001-w1Z2WR Received: from m128-6p.163.com (mproxyjp5.163.com [176.34.24.136]) by cuda.sgi.com with ESMTP id 9zqVHRfXIsPg0HWF for ; Wed, 29 May 2013 19:00:54 -0700 (PDT) X-Barracuda-Envelope-From: will@builderschoicetools.com X-Barracuda-Apparent-Source-IP: 176.34.24.136 Received: from will$builderschoicetools.com ( [115.204.222.160] ) by ajax-webmail-wmsvr1 (Coremail) ; Thu, 30 May 2013 09:48:41 +0800 (CST) X-Originating-IP: [115.204.222.160] Date: Thu, 30 May 2013 09:48:41 +0800 (CST) From: Will To: linux-xfs@oss.sgi.com Subject: caulking gun&foam gun/Will from Builders Choice Tools X-Priority: 3 X-ASG-Orig-Subj: caulking gun&foam gun/Will from Builders Choice Tools X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 20130424(22035.5339.5325) Copyright (c) 2002-2013 www.mailtech.cn 163-hosting Disposition-Notification-To: will@builderschoicetools.com Content-Type: multipart/mixed; boundary="----=_Part_66459_2061069560.1369878521190" MIME-Version: 1.0 Message-ID: <4c77c931.65d9.13ef31f6566.Coremail.will@builderschoicetools.com> X-CM-TRANSID:yWR4CkCZxUP5r6ZRSv8cAA--.2575W X-CM-SenderInfo: hzlozqhexlzvphuvuxprlfv3prro2hhfrp/1tbiARQssE3HgktJwg AGsH X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== X-Barracuda-Connect: mproxyjp5.163.com[176.34.24.136] X-Barracuda-Start-Time: 1369879253 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 ------=_Part_66459_2061069560.1369878521190 Content-Type: multipart/alternative; boundary="----=_Part_66461_282627883.1369878521190" ------=_Part_66461_282627883.1369878521190 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 RGVhciBGcmllbmQsCgoKV2UgYXJlIHRoZSBwcm9mZXNzaW9uYWwgc3VwcGxpZXIgb2YgY2F1bGtp bmcgZ3VucyBhbmQgb3RoZXIgdG9vbHMgZnJvbSBDaGluYS4gV2Ugd2FudCB0byBpbnRyb2R1Y2Ug b3VyIHF1YWxpdHkgcHJvZHVjdHMgdG8geW91LiBBbnkgbmVlZCBwbHMgZmVlbCBmcmVlIHRvIHRl bGwgbWUuCiAKT3VyIHByb2R1Y3QgbGluZToKYWlyIGNhdWxraW5nIGd1bgptYW51YWwgY2F1bGtp bmcgZ3VuCmZvYW0gZ3VuCm1lYXN1cmUgdGFwZQpnbHVlIGd1biZnbHVlIHN0aWNrCmhhbmQgc2F3 CnBhaW50IG1peGVyCnBsYXN0ZXIgdHJvd2VsCnRvb2wgYm94IGFuZCBzbyBvbi4KIApPRU0vT0RN IGlzIGFsc28gd2VsY29tZWQuCiAKT3VyIGNvbXBhbnkgY2FuIGFsc28gaGVscCB5b3Ugc2VhcmNo IHRoZSBwcm9kdWN0cyBvciBtYWtlIHRoZSBwcm9kdWN0cyBhcyB5b3VyIGRlbWFuZC4KIApIb3Bl IHRvIGhlYXIgZnJvbSB5b3Ugc29vbi4KLS0KQmVzdCBSZWdhcmRzLApXaWxsCkJ1aWxkZXJzIENo b2ljZSBUb29scyBMaW1pdGVkCnd3dy5idWlsZGVyc2Nob2ljZXRvb2xzLmNvbQpNb2JpbGU6IDg2 LTEzNDI5NjI2NDI2ClBob25lOjg2LTE1MDY4MTg5NjYyClNreXBlOmJjdG9vbHMxCk1zbjogYmN0 b29sczFAaG90bWFpbC5jb20KR21haWw6YmN0b29sc3dpbGxAZ21haWwuY29tCllhaG9vIG1lc3Nl bmdlcjpiY3Rvb2xzd2lsbEB5YWhvby5jb20KCgpFbWFpbDp3aWxsQGJ1aWxkZXJzY2hvaWNldG9v bHMuY29tCgoKU2F2ZSBhIHRyZWUuLi5wbGVhc2UgZG9uJ3QgcHJpbnQgdGhpcyBlLW1haWwgdW5s ZXNzIHlvdSByZWFsbHkgbmVlZCB0bw== ------=_Part_66461_282627883.1369878521190 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwLjVwdDsgZm9udC1mYW1pbHk6ICdC b29rbWFuIE9sZCBTdHlsZSc7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsiPkRlYXImbmJzcDs8L3Nw YW4+PGZvbnQ+PGZvbnQgY29sb3I9IiMwMDAwZmYiIGZhY2U9IkJvb2ttYW4gT2xkIFN0eWxlIj5G cmllbmQ8L2ZvbnQ+PGZvbnQgY29sb3I9IiMwMDAwZjAiIGZhY2U9IuWui+S9kyIgc2l6ZT0iMyI+ PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiBub3JtYWw7Ij4sPC9zcGFuPjwvZm9udD48L2ZvbnQ+ PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMC41cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMjU1 KTsgZm9udC1mYW1pbHk6ICdCb29rbWFuIE9sZCBTdHlsZSc7Ij48YnI+PC9kaXY+PGRpdiBzdHls ZT0iZm9udC1zaXplOiAxMC41cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsgZm9udC1mYW1pbHk6 ICdCb29rbWFuIE9sZCBTdHlsZSc7Ij5XZSBhcmUgdGhlIHByb2Zlc3Npb25hbCBzdXBwbGllciBv ZiBjYXVsa2luZyBndW5zIGFuZCBvdGhlciB0b29scyBmcm9tIENoaW5hLiBXZSB3YW50IHRvIGlu dHJvZHVjZSBvdXIgcXVhbGl0eSBwcm9kdWN0cyB0byB5b3UuIEFueSBuZWVkIHBscyBmZWVsIGZy ZWUgdG8gdGVsbCBtZS48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEwLjVwdDsgY29sb3I6 IHJnYigwLCAwLCAyNTUpOyBmb250LWZhbWlseTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPiZuYnNw OzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTAuNXB0OyBjb2xvcjogcmdiKDAsIDAsIDI1 NSk7IGZvbnQtZmFtaWx5OiAnQm9va21hbiBPbGQgU3R5bGUnOyI+T3VyIHByb2R1Y3QgbGluZTo8 L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEwLjVwdDsgZm9udC1mYW1pbHk6ICdCb29rbWFu IE9sZCBTdHlsZSc7Ij48Yj5haXIgY2F1bGtpbmcgZ3VuPC9iPjwvZGl2PjxkaXYgc3R5bGU9ImZv bnQtc2l6ZTogMTAuNXB0OyBjb2xvcjogcmdiKDAsIDAsIDI1NSk7IGZvbnQtZmFtaWx5OiAnQm9v a21hbiBPbGQgU3R5bGUnOyI+bWFudWFsIGNhdWxraW5nIGd1bjwvZGl2PjxkaXYgc3R5bGU9ImZv bnQtc2l6ZTogMTAuNXB0OyBmb250LWZhbWlseTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPjxiPmZv YW0gZ3VuPC9iPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTAuNXB0OyBmb250LWZhbWls eTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPjxiPm1lYXN1cmUgdGFwZTwvYj48L2Rpdj48ZGl2IHN0 eWxlPSJmb250LXNpemU6IDEwLjVwdDsgY29sb3I6IHJnYigwLCAwLCAyNTUpOyBmb250LWZhbWls eTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPmdsdWUgZ3VuJmFtcDtnbHVlIHN0aWNrPC9kaXY+PGRp diBzdHlsZT0iZm9udC1zaXplOiAxMC41cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsgZm9udC1m YW1pbHk6ICdCb29rbWFuIE9sZCBTdHlsZSc7Ij5oYW5kIHNhdzwvZGl2PjxkaXYgc3R5bGU9ImZv bnQtc2l6ZTogMTAuNXB0OyBjb2xvcjogcmdiKDAsIDAsIDI1NSk7IGZvbnQtZmFtaWx5OiAnQm9v a21hbiBPbGQgU3R5bGUnOyI+cGFpbnQgbWl4ZXI8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6 IDEwLjVwdDsgY29sb3I6IHJnYigwLCAwLCAyNTUpOyBmb250LWZhbWlseTogJ0Jvb2ttYW4gT2xk IFN0eWxlJzsiPnBsYXN0ZXIgdHJvd2VsPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMC41 cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsgZm9udC1mYW1pbHk6ICdCb29rbWFuIE9sZCBTdHls ZSc7Ij50b29sIGJveCBhbmQgc28gb24uPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMC41 cHQ7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsgZm9udC1mYW1pbHk6ICdCb29rbWFuIE9sZCBTdHls ZSc7Ij4mbmJzcDs8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEwLjVwdDsgY29sb3I6IHJn YigwLCAwLCAyNTUpOyBmb250LWZhbWlseTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPk9FTS9PRE0g aXMgYWxzbyB3ZWxjb21lZC48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEwLjVwdDsgY29s b3I6IHJnYigwLCAwLCAyNTUpOyBmb250LWZhbWlseTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPiZu YnNwOzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTAuNXB0OyBjb2xvcjogcmdiKDAsIDAs IDI1NSk7IGZvbnQtZmFtaWx5OiAnQm9va21hbiBPbGQgU3R5bGUnOyI+T3VyIGNvbXBhbnkgY2Fu IGFsc28gaGVscCB5b3Ugc2VhcmNoIHRoZSBwcm9kdWN0cyBvciBtYWtlIHRoZSBwcm9kdWN0cyBh cyB5b3VyIGRlbWFuZC48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEwLjVwdDsgY29sb3I6 IHJnYigwLCAwLCAyNTUpOyBmb250LWZhbWlseTogJ0Jvb2ttYW4gT2xkIFN0eWxlJzsiPiZuYnNw OzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTAuNXB0OyBjb2xvcjogcmdiKDAsIDAsIDI1 NSk7IGZvbnQtZmFtaWx5OiAnQm9va21hbiBPbGQgU3R5bGUnOyI+SG9wZSB0byBoZWFyIGZyb20g eW91IHNvb24uPC9kaXY+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsi Pi0tPC9zcGFuPjwvZGl2PjxkaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVy ZGFuYSwgYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsiPjxiPjxmb250IGNvbG9yPSIjMDAw MDAxIiBzaXplPSI0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6IHJnYigwLCAw LCAyNTUpOyI+QmVzdCBSZWdhcmRzLDwvZm9udD48L2I+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1m YW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsiPjxi Pjxmb250IGNvbG9yPSIjMDAwMDAxIiBzaXplPSI0IiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAy NTUpOyI+V2lsbDwvZm9udD48L2I+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IHRhaG9t YSwgdmVyZGFuYSwgYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsiPjxiPjxmb250IGNvbG9y PSIjMDAwMDAxIiBzaXplPSI0IiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAyNTUpOyI+QnVpbGRl cnMgQ2hvaWNlIFRvb2xzIExpbWl0ZWQ8L2ZvbnQ+PC9iPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQt ZmFtaWx5OiB0YWhvbWEsIHZlcmRhbmEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNv bG9yOiByZ2IoMCwgMCwgMjU1KTsiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYnVpbGRlcnNjaG9pY2V0 b29scy5jb20vIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmJ1aWxkZXJzY2hvaWNldG9vbHMuY29tPC9h PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiB0YWhvbWEsIHZlcmRhbmEsIGFyaWFsLCBo ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsiPk1vYmlsZTogODYt MTM0Mjk2MjY0MjY8L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogdGFob21hLCB2ZXJkYW5h LCBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDAsIDAsIDI1NSk7Ij5Q aG9uZTo4Ni0xNTA2ODE4OTY2MjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiB0YWhvbWEs IHZlcmRhbmEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2IoMCwgMCwg MjU1KTsiPlNreXBlOmJjdG9vbHMxPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IHRhaG9t YSwgdmVyZGFuYSwgYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsgY29sb3I6IHJnYigwLCAw LCAyNTUpOyI+TXNuOiZuYnNwOzxhIGhyZWY9Im1haWx0bzpiY3Rvb2xzMUBob3RtYWlsLmNvbSIg dGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDI1NSk7Ij5iY3Rvb2xzMUBo b3RtYWlsLmNvbTwvYT48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogdGFob21hLCB2ZXJk YW5hLCBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDAsIDAsIDI1NSk7 Ij5HbWFpbDo8YSBocmVmPSJtYWlsdG86R29vZ2xlJTNBYmN0b29sc3dpbGxAZ21haWwuY29tIiB0 YXJnZXQ9Il9ibGFuayI+YmN0b29sc3dpbGxAZ21haWwuY29tPC9hPjwvZGl2PjxkaXYgc3R5bGU9 ImZvbnQtZmFtaWx5OiB0YWhvbWEsIHZlcmRhbmEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2Vy aWY7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsiPllhaG9vIG1lc3Nlbmdlcjo8YSBocmVmPSJtYWls dG86YmN0b29sc3dpbGxAeWFob28uY29tIj5iY3Rvb2xzd2lsbEB5YWhvby5jb208L2E+PC9kaXY+ PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgYXJpYWwsIGhlbHZldGlj YSwgc2Fucy1zZXJpZjsgY29sb3I6IHJnYigwLCAwLCAyNTUpOyI+PGJyPjwvZGl2PjxkaXYgc3R5 bGU9ImZvbnQtZmFtaWx5OiB0YWhvbWEsIHZlcmRhbmEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMt c2VyaWY7IGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsiPjxhIGhyZWY9Im1haWx0bzpFbWFpbCUzQXdp bGxAYnVpbGRlcnNjaG9pY2V0b29scy5jb20iIHRhcmdldD0iX2JsYW5rIj5FbWFpbDp3aWxsQGJ1 aWxkZXJzY2hvaWNldG9vbHMuY29tPC9hPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiB0 YWhvbWEsIHZlcmRhbmEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGNvbG9yOiByZ2Io MCwgMCwgMjU1KTsiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogdGFob21hLCB2 ZXJkYW5hLCBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOyI+PGRpdj48c3BhbiBzdHlsZT0i Rk9OVC1GQU1JTFk6ICdDb21pYyBTYW5zIE1TJzsgQ09MT1I6IHJnYigwLDE1OCw3MSk7IEZPTlQt U0laRTogOXB0IiBsYW5nPSJFTi1HQiI+U2F2ZSBhIHRyZWUuLi5wbGVhc2UgZG9uJ3QgcHJpbnQg dGhpcyBlLW1haWwgdW5sZXNzIHlvdSByZWFsbHkgbmVlZCAKdG88L3NwYW4+PC9kaXY+PC9kaXY+ PC9kaXY+ ------=_Part_66461_282627883.1369878521190-- ------=_Part_66459_2061069560.1369878521190 Content-Type: image/jpeg; name="product alert from Will-May 21st.JPG" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="product alert from Will-May 21st.JPG" /9j/4AAQSkZJRgABAQEAYABgAAD/7TYQUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABBnn3mBjEc8 QV6TqczQYqm2OEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAA AAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAA AAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgAB AGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0A AAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA//////// /////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///////// ////////////////////A+gAADhCSU0EAAAAAAAAAgAJOEJJTQQCAAAAAAAUAAAAAAAAAAAAAAAA AAAAAAAAAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0E GgAAAAADPwAAAAYAAAAAAAAAAAAABdwAAA+gAAAABWcqaAeYmAAtADEAAAABAAAAAAAAAAAAAAAA AAAAAAAAAAEAAAAAAAAAAAAAD6AAAAXcAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA AAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAXcAAAAAFJnaHRsb25n AAAPoAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURs b25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4A AAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91 bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAA AAAAAEJ0b21sb25nAAAF3AAAAABSZ2h0bG9uZwAAD6AAAAADdXJsVEVYVAAAAAEAAAAAAABudWxs VEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxU ZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAP RVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0 QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUA AAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90 dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBBEAAAAAAAEBADhC SU0EFAAAAAAABAAAAAo4QklNBAwAAAAAL/QAAAABAAABAAAAAGAAAAMAAAEgAAAAL9gAGAAB/9j/ 4AAQSkZJRgABAgEASABIAAD/7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJ CAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDP/AABEIAGABAAMBIgACEQEDEQH/3QAEABD/xAE/AAABBQEBAQEBAQAAAAAAAAAD AAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwz AQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXC o3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3 EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNz NPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG 1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/AOt699Zuo9O6qcPFGO+GUurx7A/1bnW2ei6qmxr2 1M2t93vYrHTur9bz+qXmqmk9LoyrcOwSRa30mz9p3Odte2yw/wA2yv8A9KJutfVmzqmXfcM4Y+Nk V105NQqDyW0vN/tuc/8ARO3f8GiYf1cysPqr8mnPe3p9mRZluw2t2zba3Y5tlrXe+lv02s2f+lFD WTj68N9CHU4uS+7gDg972zfFHIfVww00jH9bxcfB/wClP8mj6t1P6w43W8Tp+H9j9HqHqeg61tpc 30WNtu9b07GN93+C2NRa/rh0u0XljL3ejBqAYCbw604TXYnv9/6y30/0npK3m9LGR1bp3UjcGDp/ rfoyJ3+sz0/p7hs2bd/0Vj0fUw1MsNWaJaGt6c70wRU1l56i31Pf+sO9Y7PzP0aR9wE1qCTv/d/7 7iWYzyU8WMZfROMYiXBGUeKXu5Pc4zGPq/Uxwf8Ajv8AlErvrfW3Ml1Lm4bcY2PYQBkC8ZLen/Z3 tdYKWbHn3bnf9cW/i3/acdl5qso9QT6Vo2vb/Je2XLnmfVTJa9932yqzIspfXcLKA+t77cgZ9zrK XWbfSsj7Ps/66tno3T/2Z0zH6ebjecdseo7QmSXfRl21jZ2V/wAhOh7l+oaV+LHzQ5T2wcEvWJcN ev1Y/wB/1iL5p1fLsP1jaGjc5+ZY0sM6iy77PH73823clfUbOpy1jtlmWGl0GJ2Ngb/o/Sc9dSz6 q0ZOVfl3V5Atfk3FrrBUS0Cy4B1Jj202+p61X/BrHHSBnPzenbM718HJosfUfQa54fYf1ukgVtc2 qv8ASv8Afv8AT9LfssU0ZESiekTf8v8AFaRAIkP3hSXpjh03PrzXt3CoOhvEuc11Teztv84qH1z+ tHVS/IqbmijpuXj/AKtj0sYbDY0hl7bb7A5/09r2ej/OVXV/8It7N6Zfh9KdYzFy8h+LW50WnHG/ n3WvOQf5rd6u7/glz+P9Ux1eii419RtFvrNtAGOHUPofX6dBozfQrbVd6tr6v8NT6P5/86n5Mglk Mx1r8lmOJjERPS3I6P1C3JwsR2cH1B5NY2e1trGt2VWbfzW+3/ri7b6g5AHSM1+Dj79uUGkTBd+j q3WumVh9S+qX7L6fTkNx+oWNxHQ42vw2Na15duu/V7L7Xek5/spqp33fzK6n/F90+rD6I59XrAZN pc9mRt3tsYG42RXtrazZ6V9NlXp2/pd9ai6snR1T1XIb/O4pr+JcB9/pqTeq7uKwfg//AMxWgspz rHteHvtcWvc8l2KSQ0u9lLfb79n79f6R6SYxMmyM8n/Bj/O/8xUvtjiNGAHsSdJ/zU1WJRZSx0OD iBLoLDPnU/6CjfjMpqfc63ZXW0ve5wmGtG5x9qS06XfRz8XrvU73uq+x1+tW17n1eqQd1fttord6 djX2ep9BXejZ+T1DF+1Wsrrrs/mmscXOgEtd6u5rdv8AJWHX1noIzDl09SrbYdzidljwTtFbv0Wx jtvps936ZXfq5ndHa52BhZ7cov8A0jKwxzXDaGssO4+3sxMGHmIy9UZ8A4vVWlfokrjn5eUahOHG aoCVm/0gG9nZ+TiTIZrJYSABE/vOvbu/zFmv+strDDn4/wApP/UWOXRFrXfSAPxWZk5HTbXOrotw nuqJGQyx7Zb4fQ91f9pSLQLO7nf86n/v0/5lp/IuS699cPrG/OsswMy3GwnbW0OZQ0VP2iLX1Pyq vVf+kbY3+c/wa7iijDyXWDEbhZHpvAOx+6GGf50MDttqxj9Q8vJqp6fnZ4PTcEuOEaWAZB3Eljb7 b/Wq2UMd6Wyqr9J/waBW5IyoUfsLjdI+tv1lDK6bM0X2W2gbrcdjyA5zKpc6u/D/AETXH6Fddt/8 7Z+l9P8AR91X1VxvbXazaHuDI0kOJAa32vs/e+ksfpf1JwMDO92U7IYz3sreW+oXFrqz6uxrG+m1 tjnM2V/+e/0l+vp2TZkkwa66rB6bn8FrHv2tY2d/0PoI6KAIDo5+Z9kp3NbvtdpWyY+LnfyGfnLm s27qV5L7Mq1vg2pxqaPINqLXf9uPetbqxLs5rZ9rKxA7S5xn/wA9sQus1YuL0u3Lr9xx6w6AY3k+ 1jP6z3LC53LzOfNlx4ZcMOXAuIlwSyS+YtrGIxEbGs+p6PK29Y6/0yz1cXMssDdTTkk3Vu/kuNn6 ev8A6zaxdr9Xuu43XumtzqGmpwca76HGTXa2N9e4fT+k19b/APCVPrXB5Fwy6bjLRZS4scGztIjc 2xm/a7Y/83erX+LPILOr9Sw/zLqq74/lVudU4/5ttam+GZ8p/V5STe1m12fGADpRiaL2/VepNwKQ QA66zStp405c5c1f1XPtcS+50H80GB/mtRfrLlB3Ui0GRWwN08dS5ZV+S0sB0GxUPiPNZcmeeMSI xwPBGMToa3lJucpghHHGRiDKWpJ/B0sTrGTQ5xfedrWlzWk8kfRbDv3nLo+k9Uq6lQXtG2xkCxng TwR/JcuANwdqFsfVHKLeqemTpaxzfmPc1SfDuZy48sMZkTjmeEiXeXykK5vl4SxymBUoi9H/0NZ3 Wsl737+n1bnndbtNw3F/6T37HfpPp/8AotSHWcou0wRHcmzJjhreN/8AIaqsdYoDKKc+uobfY2yo uO2sQdW2M/eUmWfWB7HGnqND4PuPoO/q/wCm/kqrKXNXQ5fAfH3Ja+Ne0zicqv3ctf4Vf9JvY3Vc t+TWyvDaHndtL35BrENfv373OZ/N2W/9uKGZ1LIqbdW3Cqc+na0sbbcGgODIdXtsbtb6T/psWZ9p +tJy6sRmbQz1CX23ejpWxutt7/VtdV+jrb+etHIezPwq+rYB/pVbWgkESGPfU/2/mu9Ox7VDHmOY HMjFkx4gJ45HHCB9z9f82P3Jyjj9OWOPL6f9UkzkI8Qy5LsAy4pA8Hh/daj/AK1ZVr7LbMbHY+0g 2Fttjd22B7m79v0W+mlX9Y7to349DoESb7ZI1ndts/luVRnTBW/03WlrgN8Etnb+8XejuR6+nNyJ Ndjn7YmHkRPHFbVd16wj9kf/AFYsGTMBpOfCOvFPb5Y/outV9c+sW1tfTj4r2OJazY4mSzR7Ws9T f7P6q1Pqrmjqou6g+ttVtVllMVl2u/0rLvWZYT+lZbV/1v8AM/nVxtXTsPGyW3Zu/wBHp7ixllbn OJszS5m29rg39BhMe7JssY76H+l/m12n1OxTiYNtJJcWva0vdy4tYxnqOj858bkzFnM55MchRhtU eGNX+/x5Iz/V+1xf31sogAEdXTF2B1SrMwwfWZU92Ll1w5vuLGWWU+4N3bqb6/dX++pMopwvteS3 cRe85FrZkBza66T6TfzdzKG/9d96ljNaLsogAF1oJgRJ9Kka/cpZn9Ev/wCLf/1JUyxiWUZ+NU97 Sa3Gu9rToZY5uRTu2/uWMY9PiYdOILW0yG22vuLSZAdYfUt2futfaX2/8ZY9R6aZ6fjHxqZ/1IS6 j1DF6Zg3Z+Y/08fHaX2O/I1v7z3u9jG/vpKZ5eXjYWNZlZVjaaKRussdoAFxX1n6/n5TaMnpmW7F 6dFZr0dRdZc4vO2LNtluPXX6f/Bf8f8A4PA+sX1myeuXmy79Bg0EuoxSRAj/AA+U76Dr/wDwOj6F P+EttzuqWfWBmPj9Q6jjZDMd4FONdk66NG5tYYf0tTNrdzPUZX6it48UcfDLIQCT8pc/Lnnm9zHh jKQA+aPfv/dfYOlZN+V03GyMhuy62trnjgTH0h/Jf9NT6gwWdPyazoH02Nkc6tcF519W/wDGNZjN rxOoe+kQ1pJ1A/4Oz/0Xb/26vQPtuPndLsycZ2+t9T4PcGD7XBR5MRjPiFcBloY9P6rNhzxyY+A3 7kYeqMt5fvTj+/F42n6pt2tIy4GwNAFYgD6URu/lLS6D0JvT+rU5Au9Qlj27dgZy0O7f1VcpP6Nn wH5ArOMAcykH+UP+gUvckQRpVHaMR+ivMBd3IniB1nOVni/S4pep8k6x1bO631LOvzrL34xuccSj 1HtpbUHGpjGUNcxnvpFfqv2fpVk14ZG4uoxxqYlu8gD4n/ql6N1r/Fg6vbZ9Xrfa7224uXYS0D82 yi/ZZZ7Pz6rN+/8Af/0lCr/Fx1JtgZn9Tw8QxO1u610a+7bZ9k/dcmDhoMlTJNC3D+p9l/TPrJgX UvYDdfXjWCtgYHV3EVWVva1rN3vcx/8AxlS6X/GrldXbnYeFRk2Y+FfjveGsc5jX2ssYLRd6Zb6r WUvq2VrS6N/i46ZVfTmv6lbmnHtbYz0dlde+twe3ds9az6bfo+um/wAa+Gx3R8PqJ0fhZIYT/wAH eDTYP+3PQf8A2EyRHRNSAN6F8ur6WxljbX2S5hDhsaG6j/hPpL2P/F91fJ6p9Xx9rsddkYVz8V9z zLnhoZbS97vzn/Z76WWP/wAJZ71447NxwZA3nxJldF9R/rfk9EznV2UF/Tc+2pt59wNTv5n7TV9J j/a9nrV/8DWmhUbvV9Jy6raM259zXOrudvbcASAIa3Y/bO304VHqVDcnCtobYx1VsCzaWvBbIcW7 J/O/f/wS6m17a2l7jta0SSsfJsw8p5a6hknWTpZH736MtsXP/EeXw8tkOX3zHJkkckIVxS8+L1ej +828cjONGNxAo9nh8jAfQLWVl1oe7eS6N24iHOe+d1m5H+o/TupM+steTUC2iuuxuYR9HY9v6Kpz v3/tDarG/wDFrqaOjdIfaPWbY4O+iDYduvb2bH/9Jb2PRj41Qpx621Vt4Y0QPwU/wvHLJ+u92MgD 6uH5+L+t8vCjJIRjwCNCqHZ4zrmDfjdS/T7349j9zHtjcayd7669/s9Wvc72PWJkbhulrw2dC4Rp Ok/ytq9Ne3FzKSxwZfU7QjRzZH/kVz3VsH6q9Osrbm5Zw33a11B+4kD2y2tzLrNu5O5j4Zk4zLEY yiTxVL0zj/V4v3Gzh56HCBkuJAq46xl/WeQx2MfcwW+r6JPvNTQXxH5m/a36S3fqt0jKvym5Dy6u mogv28OLS17at353vY36K2umdM+rmQXHHt+1urdtex7zLXDlr6R6X/TrW6xjK2BjGhjGiGtaIAHk Anct8OncZZTERB4qh6pT/qyn+4jNzsSCMYkSdLl8sf7sf3n/0ejZYwP/AKVSGTIaWO3R/W3f99U9 weQHZlBiNzQxw0nWHbz+auFzOmfX5mXeMPIs+yvte+kNfoGvc6xrPcxzm7N30ENvTf8AGYOMi0f9 caP++oGlCR/q/YHtX9LZfj5FbshljsoBlzq2lvtH+B9xf+ic76f+kQMcV9K6S7EzH2VVV3B1D6iH OIfq6pzPd7d/6Rec/WLF+tVba7Ou2PsY32V7rATqd21jG7d/7y6T6sWWW/U8bAHmnMcw7iSSHD1G tO6W/wCGUc8UfmEblGXuijwmWSMPb+b/AGf6tdxS7jXTbZ6JnWejtBH2rKE8HZJH9X2qTus9Jg7M vKk6gOYSJnd+77ViNdlTH2SmfNzZ/wCoUjZlnjEpPwcD/wB8UZzZf8xL/HxrgB++P8Vvnq31drxj iZOU51t4eXl7CC91v6N1mv8A1umtdV9Uc2nK6e4MLjbTsZeXNIG8MaDtP5/0V4x9YMm+3qF0UVe2 hldjQ1rxWxu7bsc5o9N7vzNq9V/xcPD+mX2g+x5rcNNoj02+/Z+ZuaFLigBGMjHglRuN8WuQ8c9f 7y2R1Ot6+T0RxMfKsyBe0uDbRAkga1U87C3cmy8HFZRbc1kPZW4tMns1zfozt+ijYrmuvywCCW3A OHgfSod/1LlX6qYpsLrrK6xTZuY1vtJI0c+0N3N2R/pGKRHFKqs12tN0v/kzEPjRX/1LVl/W36v5 f1hxKen13V42NvNt1rmue/c0RQ1lIdWx7Nz3Os32/uKHQspzsjFpH6NpxJdWbDY9xb6XvfS11leI yrdsZuf+l3/Qq9NdCjqDYQK6gGwRr4vF9G+pvS+l5VN95d1Q17jQ63ZUyt1fDjQ9/wCsX7v5u5/8 x6bP+MWj9ZOl5n1iw6sSj0sd1F4stNrw/wBu22puxtG/976FnpLefj4zjvfUxxE+5zQSJgu1P9VY mX9YsDpuc2irHAofLr76wBJ/kNaP0n773ImMsx4fmJHfpFOLLDlRGcAISgdJVY4pHd5/rX+LDBZ0 G09NFl3V6hva4ODW3GRvp9B7vSrZs3+ltd6nqf4W1X/q39WLsXplfUOrVvZ1LHpe2mn1XFtYLHVP dZVU/wCz2W3N/f8AU9npf4RbY+tHRzXvFp0iW7Tp9HcXEe39Hu/Sf8XYlhdTs6hi5NF1Po5dTXNs radwJiIZ/r+5++pIjJCNEGMbiPV+zia+Q48uX3LEslTl6f63zcXC0qT+jb8AreIf12keO7/qVSqZ kNrAdTY0gagscP8Avqu4LLTmUuNb2taHS5zXNAkaauCFb+R/Jde3mPzdhUOr5bMKqm80NvddkUYu sAgZFrMZz92138362/YuMzPr89uS+odSrw7mZRospsxn2V1sbc7Ftd6sUtd6VQbe+37Vs/8APdeH m/X76xZD7KLbMO6vDtF1dtNT3Ne6l7HUbn+s5rad+z1Hf2K7VVhl4rqExR4bkOG/60eL5of1mYiu ofW66qqgRWxrASXENAEk8u0XK/4z3AfVeO5ysYD/ALcaVyh/xjfWQYltz2uFkVlrmtq9Fu8vqcW1 WN+0O/Ss/Qs9X/jLmLawa+s/XboPUeldVvqozOm54rbk11na51G2xzbaPUb+cdm+uz/zN/FsCCLU db1t80NbG2WCpjPUD5AInawgH2t+j9L95WsCh1vUsGu55eb8vHp1PAfbXu2tb/JWvb/i8+ubeoOr ZhMe0kN+0C6v0SNP0nuczJbt/c+zb11H1e/xXvw8vH6h1fNGRdjvbczGx2xWLGOFle6+z9JYxr2s dtrpxkVgBbOb1m6rP6k/Ec+/FzMe3Mprf7mi/CbXjO+z2V76n0ZLfR9Sj1PtGLfV+sUU/aFwtF2P Y+vKfYRmWxb9tDwbS4jbublNd+9/grfQf/gvoL2HI6Th3XvymsFeW8AOuA1MR9Nkhlnta2vd9P0/ 0a4Dqn+L7qGLY4dOyK6MOx5dD2Of6bXEPdVW+v6VO7/B3el7P0f6X+cVHNGMM2XJl4ownCAjmiDM R4OLjxZBHi4Y+rj/AHJt7lc8sVcEY5LNSxzG/wDck7GH154+rt3UrwH3Y1dheI2h1lTvT3R/g/W9 ljv9GrnVesU9Y+pludjufVVY+qrNgw+ur16qeptc5n0duL6/6T/Q/pFUxOh4DOi/sa4ufiBgbcS4 sNkv9a1z3tPs9Wz81rv5v9GuvqxcWvEbhtqYMZrPSFO0bNkbPT2fR2bVU+Ce0Zc17YIHuenThh7M vVi0/e+dbzY9Q04QdeHfh8LeY+sVtH1RfR1PptDMfFyW2YeRjUtDWG30339NyPSZtqa+u2h2LZZ/ oMj3/wAxSvMn19U+zt6rkOdZXlbrH5AcHukPfXZZlD6bN1rHfyF6f9ZOh5dfQsnDw6jm4DKXHHxJ c+5lodV9j+y/nelguFt/87Z6lP6l6C8zbn52JRbh411tDC8jKx2TXa1xHpO/ctq+i31af8NsW01g LIFgWas7B3/qvh4OZg5/Ur3X/aunRZWMaz0nBrWOtD63fnXOfXZ/Or1WixttFdrTua9ocHeMheUf VzCvf9Uuo1YYD8rLubjvbMBlbGs91sfR3V2Wv9q9N6J093TOk4vT32eqcasM3gQNOw/q/QVPlpyn zHM3kJjCYgMR/R9EPWP3I8fu/wB9dIVGOm43f//S7JtFLy+w1ZjXFoLmbHge382ofQ3/AL+z+cR2 spppbtpyXzJANbnP54d+7/aXPssyToM5zRoRNzw6D4s3I4fkgaZziO5N7h/FVjzeAGjM/wCJP/vW WpH9HT+8Fh9W25nULc/qYsyMl5NeHW2l7asaqQ0Nbv8A+1Fu7fl5T/8ArP6BixendMyekN6z0r0S GNy6cvFc8FrHVWh7HtrfDv5m1rKlD60/WDqXS8Nr8fqO11ljGSy19tjWnc62z0p2ta1jfpqqzrnV cz6uUZmRlWFpy668nIY1z9lG7bbltxsgWM9X0drv5tTYpwyDigSY+Rj/ANJZL0n5fpd/9F1W49hO 51FZeQASHHgHidv5qRpvqrdtoYO/scf/ACCvsf8AUxwlvVbHN7ER+X007j9TI16m/wDzv/ME/RXu 9KH2z/755jp3RrbcTKvzKjXfnPc/Y4Q5tbR6ePW5rvo/o/f/ANcW99RCXfVLbeB7MvHx7Q7girIq xzun8z0m+5cJ1z6xZFPWM2nCzXHAotf9ltDGuLgA3ZW536L1K93+ti9I+pTqbun323PLGPsY4hog P3Ve+p9LvV/R+7+bRRueyTo7cFuZjOobjts3Mg1CsPMt97Zq9/57962s/pfq9Qbkb8hzLWObZW0s NQgDbua9v2lvqfuY9zKv9KnxmYuPcbMdhe8gNG5tbQI/Ob6dbX+6Vj9U69Fz67c/Hxmh5Z6TnF1s jTYzEoD73u/P+gmyJA0FrhEXqRVdXS6fg4NFtYNYw30uBYGitnqEhzNrnNNl/wCd9D1Vd6v1np/R sUZWfZsY5wrqY0F9lljv5uiipm59tr/3WrlaJybmubRlX1tLS63I2YdQE/zgotc7Mt2/uelWugze n4X1g6Vd0nqQJDhq9p22NI/msip35trP8z/SforPTSiZH5hSJiN+lzG/Wj7fY/aGNx6yGXsDm2Gp xPtqvdW91V2V/wB163eh/wAJkenZ6d4DHyKB6eyx152U1mHkSf0mRkO/0nt3LhOr9J6r9VbxAZjf VvBafQYx4JzLH7W+lk72+o/qebY1nrX+l6WBg1P+xf0f3w6P9bh9kyuo5DT08YZqa51Dt7H3Xkim qil3va302X3vr/TbKqv+EQlCzYKhLSi96/omNacttdfuqY1tZEgOsht2/a07fp+xyL6LHYGP1LGO y6mppMcOa0bXVvH7zFy/TPrcbsHPzMTKqfj4rGuynOa5pb6jxWx/v2bLP5z+vsUOlfWvp3UMyrpN PUAx2Y4sYypjtgftc9kvsbt9zmfv/pECJyFSJNXvK+H93hVHgibiAL7Rri/e4np35z7MprzVTLmt bb7XPsIBLhw5nsbZ7/TWngMIp3tfTZVbD6nUM2tIIHvn1LfU3/vrxr62/WTrLcvK6M8HBroca8lo J9SzTcC+/wBrvs1rD6lbGfz1f86ux/xVYn1mxsOz7aw1dFsbvwqbpFgeXe5+PX9KnEsbufst+nZs ux/5y31XgUNTZUZk6bDs8bmdVB6lTa6mp1XTep2ZLX7yDe23Kuybm2bx6Fdf6o1n8j/rj1X6u657 cew4f2WzJxC1wFjHmxzrftHr2Nq91Vn6atnpX/pv5tdr9Z+k/UXpnUPRs6OcjKyf1i4C62msVvc8 WPZseWep6jfbjtrrr/l1qdX1Y+rXU3HKxOhZGTTIY+2zIO8lnsc39Nn/AJrdmxRxBjQGoF9VvHAk i/V5PAZXrsyBRa30m3csD/aQ3Ie1nqWNDdranr0X/FRuHT+pse8WWNy2+pY1xeHu9Gnfbvd7v0jl jdV6b9VekuFGZ9X7TmuDHV1nKtDSC525zrqcnK2e7+bbt/nV1nQsv6q9G6BZ1LErs6fiXXP9VuQX uvdewupdW7e/Itfd+i9le9IgmUT0CBMax4gSNyBQeivxcfILTcwPLJ2z2nlNRiY+O57qWBhsjfEw Ynt/aWdT9a+hZFfqUZDrmTBNdVrwHD6VbvTqdtsZ+fX9NiDb9dvq7VlsxH5Dm2PO15NVjRW47PSZ kb2NdV63qfovapE+5pXFp2tD0j66YXUes5XR76jiZNVr68YWH+dFf0/a5rPSv9vq+h/oP0i6EtBE Hg8hYf1j+qHTeuRk64vVKQDjZ1J2Pa9vvp9Tb/O1ssDf+Er/AMBZUs7I+sXVem9Ouweo41mbn1sD BZUW0mzd7LL94DWN9v6Wt+Oz/g/SrsSJH2oJrd6AdFwd5c5pe2ZYxx0af3mx7v6qlj4F+NaPTyXO xv8AQ2N3EH+RdLdrf7CwOhdcyrM7D6a+xlFbW2UV1WP9Wy5uOIbeLXhtjsiytrLn17n+nX6nqepY usUeLFjxx4ccRCNk1HQWd1xnKZuRJ6WVLG+sf1W6b9YMU15DRTlNA9DNY0erXB3bdzvp0v8A8JS7 /wA+fpEbqefZSYY2a2uAsIIbA5e87v3f3GIFdrb6mZWDePeN9VrTureP+EZO2xn73+F/0b61TyfE 8WOfCYyMOIwOQfLxw+eNf1V4xEi78acjo31Gz+n1YtVmewtpyLrrvRbYz1A/+YJHr+k97fTr3MyK b2bP0df+kXRVZWZXmMw8ltdnqBxZcx0HaJ+nQR7f7LtisYeSMrGZdt2OMh7CZ2vaTXYzd+dssa73 I0d+6vQjAC4Aev1WP0uL1cSw316aP//T6ttWJve37fW0kjawlns/N2D+s795WAensBrsyaXPbO6X NBEfvAfR2rZGJpB2meZHKmccEEHaQeRA1+KRXcUa1B/5v/evnP1w6djdS6l0rpFNjYyrnm5tTh9C ljrrGWBn9T85Q+p+LXR0zLwr3hrsTNupDbC0Q1oZc0V/Rd6e271P89dX0qzonXeoP6jjer9swA/F 9O+t1fo7nfrDmVuA/TXOZ6dz93q/o/R/RfpkfG+q9eNmdQym2NsPULmXFj2CK9lbaS1hl271NvqO SBQavrTjjFpDnbBQa2gEHeAZn372z7WtTNxKXtIu9Brx2Y8OERyd38pdIOkNgy2o7vpewa/1tPcg 5XTcbHx7cm5tQqqrc+1wq3nY0eo/9HW1z7Po/wA21qSbjVU+Z5v1do6x1XqVrWjZhhuLUW8Os2et c/2/6P1a6l1P+L4C36qtta4uINZc52p3NHo27v6jty0vq/hdIzunjJ6HkV3YjnumyH7jYTvt9X1t tvquc7c71Ff+rP1e/YeFfhusbdXdfZawAEBrbHOsFUO3fQ3IrerTuw6LLnfbuo3ek+XMxBaMesN8 HfZ/Syb/APrl6pt+r1OJkXHBzcfBxrnepu3N9WHjd6fq/wA4+pn+B/S/zS6/0qv3G6aDQIObdRh4 d2XbWX147HWPaxu521g3O2M/O9rfoILgY9i4mN9ROj13uyco2Zd1gIfucWtM/wAhh3f+CLcw8DEw qzXi1iphJcQJOp83Sm6f1DD6nh152DaLsa4E12AETBLHe14a76bVksu+stN2W52TgX4z8h5xHWPc x1dW1gbjPFVLW+pW9tjv5yx6SuKZFWSOzr52BhdRxbMPOpZk41oh9VgDmnwP9Zv5j/zFyHXv8W3T 7OhHp3SLjgV15Ls1we1+Rvf6bsdjPpfaNtVbv0X87/UsVj61dX+tfTeh5eZinCN2LsssbQ577G1t sr9d3pXVvZ/N+23f/N1fpfpsV/p2Z9auoYWPntZgVVZVTLmMDrbHBtjRY33j0q3v2u/qfy0lu27y 3TvqT1Dp/wBWet9Lfsyc/qtbW432cP2EUt9THbbbkNqZTa99j/5z6H+kWF0f/Fz9aKepY2VkGnAd i213knfe5vpkX+1mNW+mx36P6H2hm/6C9N6FgfWLGvybur9Rbl1XOccfEZUGikF7rG/rE+td7Hen ts+gqvQundS6X0+zHyuqV2Wtvue95O8AWPNlbHOv9zHbD9BNyTlAWISyG64YcHF5/rJY10QCeu38 v0U+T9XPq31frDOqZWH62ZjNDd1jXtYYM1myt4ZTfZT7tm/9/wD4r09xch9aPrO3ojGVZ2Ve2rIb pkYldbjrvmtpedzH7an/AKRrPYtbEo6qeoY2S+91GGani7Df+kc97hWaXPsmz0fQa1/0LP5z99Qw 5icskYHBlgDdzmI8EaHF80JTTKIGoI8uv/cuP9aMejK6tnVvrbZdR0n7VjlzQXB1dth/RuP0d0bH rkcPqHTX2uOdWfSLSWvdD2gu2PpfZVTZXZYz0i6v/g7F1v1xy8nC6o2yj6eRjV0ghzJLBc5+XU6v 3W7LKHfzvp/8H/OLiMhzhjWtqe1jnV2Ma4Oa3k1ei4u9v+jf9JPlEz44kmMdADH0y8ZRaeYwBjqO K5X9vp4k+Q/FabT6D6qQ65vo2AmxjWWNa5lsF3vZ6bd25627xYfqJV6YLHt6laS2SHAi3I3sk+79 5i5zNyKbRZ6VjYe55aC4SGve14DiXfuN2/SXSZVF7f8AF219jd27MfcdpFnsttt2PsNJs2/zrd/+ j/wieBQrXQdd9GPHIETI7E14f3XI/bOb0p/2Lp9npUGybSLXy6xwZ61ntsa332f6P/tpVMzKdf1L DyriG3ZZqF7t7nOsf6noMdY6xzv8HTs9L/B/201vScLKAyLer4dTne4UCpxt1aHV02Pcyqv1PzP0 9nos/fVirPysivp/TG2tdTTk0Nbikuue62m1g9fGe31mVPf7/ZVdXi/Z/Vr/ANEo4xAMRxSMo72Z ni/R+VmJBjrVS2HpfYVxH14pzm9cwL2v/UrMW+qxhOgsaa3sft/e9/8AmV2IOL/jE67lVttq6E01 2AOY45IEtOrHfzH5zUHO6r1HqmVTk5nQq7PSY+t1L8rdXYx4+hbWcdzfa73KeUDVXH/GiySNggA/ YXN6PfgXdY6X1V3Ua3uwMi0Win3HbbW9rvYz3MrbH85/o16gLLHs31sBBEt3OGvhqz1FwQ6i3D6f bjj6s4lGI4h9rKLdpJb/AIRzqsdj9zP9IrHTf8YV1+dh9Ob05ldd1tdAcLi7a1xFe7b6Pu2/1k6G DIRIgiQvvH0+C05oQkIyNE7aHW3Z69g3ZbH4/qOx6cyt7bCI3tLmg12McP8AC0Ws+hv/AMIqP1c6 Rd0bEuqvyvtd2Rc6+xzWCqtrnfS9KlvtZu/PXW2V12tLLGhzT2KpZeDiVY1lja5e1pLA4uI3fme3 d7vesXmPhueRnDFkhHBln7s4yHqjPv8AL6v8eDcjliKJB4gKSdNqfXjEvBabHvs2nQgOcS3/AKPu VtUb8GzIob9mzL8J5AcLKiyzt9HZm15dW3+wgYnTutUXF9/Vn5lRYWtqspprIeS3bb6uPWzdsaH/ AKLYtXHAQhGANiERAX/VHCwk2Se7/9T0Z/Tsx1jnjqmUxrnEisNxtrQT9Bu7Dc/a3+W/eh29K6i9 rhX1rMrcfon08RwH9l2EpPuub6jTfc0te9+77OSAwP8AbU0tr2We36G39LYrtDi6ljiSTAlzmlhJ /eNbo2bkl0okC/2PC5P1Qz68+3EwOp5FmYcezLbdYWhotss9N7bqq6/R/XanZGy7Z63rUer/AINa v1P6l17rHR7My3KqNj/0dLrKw7ZYwuNjrsbH+yu99b6/0X2n/B+r/hV0luNTcyxj26WgCwglpIHi 9m165j6kdE6n0bJ6nTl1OZjWvacWwuYdzWOura5za3u2Wvq9F71HISE41fCb4q/BlhwHDk4q448J hfzHXhmIuucb609uoYH/ALA3f/JVCzMD605GDfjt6li122t2MtpxbKnNB0eWWOzsrZZt+hZ6f6NW rt4tyBGXDvfuZtLQGt27cf8AO9/0tn+lVrEn0QD6mhdrdG8ySfzfzf3FIxGNC7fN+r43/NrCFeRl /qlDm9PrfFrjS8VHPZfQ5j7H41/p3bGOpaz+a/41df0HH+tjujMZ1jLorzZYWW0NFp9PY32ZJdtp fkb92+yj9F/o1R/xkdEf1D6q5TcRlj72WMvbj0s3m2wvrr97K67b3ubSX+ns/wCu/oa1qfVyvN/5 p4NGdQ+vKZiMptpedr5Yz0vc+fY+zalSAld0/rZOnViPL7PWq2V0LreXW6m7rG/HsEWVOxq4cOR7 q31v/rfvq0aDsZ+qXk1w2tvrCYGu57vV/kN+m7etIgOBaeDoUqTKIHW/s/Y8Bl9c+sXRH9FxPUZk VdYa30nMrY2xtjiz9X2WuZT7XZFPpP8AWp/wn6Ov0l1DbMXIy8rBrua3Jxiy2+o0NIrF7Xem3eW+ nY9/pvfv96xv8YH1c6h1CrB6h0fHqfmdLsF2h23OZWWvrx6PZtf7/wBJsfYz/gv5xdM7HzTBGRWH 67nelMj3bG/zn5koC9foiBIJ1A8x/wCguR1LJ6Vhsbg9R6pTjWdRYaN7q2V2vBa9lz97YZU1/s/T WM9H1v0f+ErrWr0vFw+ndPx+nYjnPoxK201lx3uIYNo3u/eXI/4wsDILMLIb02zq2QzJa+sY1Di1 lTXttvqy2V+v9obk1s9Bu/8ArrscavCyMdlzMcMbYJ2WVbHj+TZXY1r2ORTMknWj4gcKDE6x0/q2 DkZHTcmWUOfTbaGGa7KwHWNNVzR72bv3VxX/AI6P1TueXusyqmvILqnY1JJMbfe8Os3L0KnHox2F mPUyppMlrGhoniYb8FRPSax6jasXDazT0AaRoNvu9TbH+F/c/MS0VEkbEDzD5/1766/VLrvSLem5 WZkBlgr91eKwOb6e1z/S3P8AZ6r2/vfzf6Jd30HrnS+p0VVYNz7XV0VvmxjmOLSNrXu3Na3d+9tV ivpGE6nbk4mM55ndsqbtifZAeHfmrH+q3Rc/pHVM+lzXfYAGiq6wsLrjJfXbuqDffW11td/qV0/4 P0/UTwIkSvQjZiySmJwoCQJImQNhWhcP6w9Uz6utZ2VjVsuxzZTgh9rC6tr6WPyHs9Rrm+3fkW/o /wDCWfo/9Kuc6zkU4trc3CY59mRkvutbk0se5zw713O2Oa+v7I+z6LKr/Vq/4NdvlfUS27Lvya84 M9Wy2xrXVucR6zvVs3EXNbu3NZ79n83WlZ9ROkVuayy7OsseAXOrI2buHfmO9L/OVf2Yccp8I4pi pS6yHixgZTLSJIGusv0vDheBzOu9VupeHZjrLLB+kbX6bgS722n7O2qv6bf3PoLaoxn5n1H6P0zF xxkse3JyrGNft2Cux1DLnOc6tztvrW+z/Tf1Fs5H+L2rOrfTTlPbhmB6WVU71JEP/nGvx9zd35zV au+pPUBj49OLmUtbRi/Z3B9RMu33Wyz9J+iZ+sbf7CdDHCAqEIw/uAR/6KT7u0hLS/0uP93954in Gycyqu3DNtTgxjH1txfWbtcXafat1rKvTb/N+p/OMVrojmNzKsbJzH1ZjsujHGM6lgFgbZW70twq rtqsY2yx1r/Z+j9Jb9v+LnBEVW52UXNALgyjcwEiXekQxzP7H00ul/4v8qjqeFnC6o42Hf6jGlll dha06OfW9jf0z9vuUcsMpWJTuPEJAcMeIcHDLh4vllH0/wCbSRMCJ9vh6HXij/6N/hPF9P8ArFnY 2LVj1W1+nS0VsJYC7a32s3H+qrg+s3Uz/wBqWj4MZ/cm6R1HoFWDjVXY7vUrqY2w+k10uDQHu3T+ c5abOqfVr/uO7/tlq0rA/wDA9/RryBP/AIJr6ue/q+Zl1Gq3I9RjvpMhomNfzGhP0doHXumH/u3T /wBWFoXdR+rr6LGsxXOc4Q1uz0pP/Gs91apdKtxnde6Y2rG9P9bp93qvd+e396FNGXolWI49/wB2 P/esE4/rIk5RkOn70jvt+k+wKp1EkUNA7vbPy93/AH1W1z2X1/pmTc1oy6241ZncHNJcY+kNd21i zi6jt4hnFqP8kfkRli9J670+61mAzJrutdPpNYQ520Dc7c1vua1n762klP8A/9k4QklNBCEAAAAA AFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAg AFAAaABvAHQAbwBzAGgAbwBwACAANwAuADAAAAABADhCSU0EBgAAAAAABwAIAAAAAQEAOEJJTQQE AAAAAAA+HAEAAAIABBwBWgADGyVHHAIAAAIABBwCNwAIMjAxMzA1MjEcAjwACzE4MTExNCswODAw HAJQAAZQaWNhc2H/4RfIRXhpZgAASUkqAAgAAAAKABoBBQABAAAAhgAAABsBBQABAAAAjgAAACgB AwABAAAAAgAAADEBAgAUAAAAlgAAADIBAgAUAAAAqgAAADsBAgAHAAAAvgAAAAEQBAABAAAAoA8A AAIQBAABAAAA3AUAAGmHBAABAAAA6AAAACCkAgAhAAAAxgAAAD4BAABIAAAAAQAAAEgAAAABAAAA QWRvYmUgUGhvdG9zaG9wIDcuMAAyMDEzOjA1OjIxIDE4OjIwOjU2AFBpY2FzYQB7YWQ3ZTc1Y2Iy ZmViNDBiYzM2MTIzZWMwYWM3YmUzOWYAnQUAAJAHAAQAAAAwMjIwA5ACABQAAAAqAQAAAaADAAEA AAD//wAAAqAEAAEAAACgDwAAA6AEAAEAAADcBQAAAAAAADIwMTM6MDU6MjEgMTg6MTE6MTQABgAD AQMAAQAAAAYAAAAaAQUAAQAAAIwBAAAbAQUAAQAAAJQBAAAoAQMAAQAAAAIAAAABAgQAAQAAAJwB AAACAgQAAQAAACQWAAAAAAAASAAAAAEAAABIAAAAAQAAAP/Y/+AAEEpGSUYAAQEAAAEAAQAA/9sA QwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMX IiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e Hh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAQACgAwEiAAIRAQMRAf/EABwAAAIDAQEBAQAAAAAA AAAAAAYHBAUIAwIBCf/EADkQAAEDAwMCBQIDBgUFAAAAAAECAwQFBhEAEiEHMRMiQVFhCBQVcYEj MkJSkaEWF0OxwURigqLR/8QAGwEAAgMBAQEAAAAAAAAAAAAAAwQAAgUBBgf/xAAwEQABAwIEAwYG AwEAAAAAAAABAgMRAAQSITFBBVFhE3GBkaGxBhQiwdHwMkLhYv/aAAwDAQACEQMRAD8Aalw3ncjF 512nKuB6DTG5gZckJQ2v7FnxGx4n7uUcKIBUSFZOMbdF13VeswX7bqEGszJDC6bIkvsoYS2mappk OJKklJUjcTyBggcd9Uf+bIKnMQ5KkkkELpwJVz2OHOcdtToPU16c+GBDlFwtqKdkIJUDgckqWRjv xrPXDSVKcXA1kkCN+cV6ZV/brLeBpP0ggiNZTE/wmZz19c6p19VrimKhRmYcFlTqo6lOtFWHEmQE qWCoEBlYG3PcE99ElYrsy4+hU+rqbR929FWlaIyFFIUlzaQnklQ4PIJB7jjQ/P6yRoa0tuRHt6kp U0oQkhBSM+XlzPfHbtjUdHWKjVCOYdVgPOwXQELYaYSjdzxtV4vHONGbCkKlSp8vzS1/cWj7OFho IIMyCSe7+Pd5Umk0urM0WF+JwpbbkVSnXEfbLUooU8nCRgYJwCdGVQrVatCz6pCpKp0NdUbCmpEZ lQkIXtynZxxwO+OMnTGocy0r8v5j7emT4smJBc8Zt5RSh5krHHlWeQvBB9CDzomqtlW1dD9PqsdS XkQ3HmgoPuKSsFfhvNnzcjCXEke+D6afTcEtFOoJmvPKaGMK0jKsYUOZcyo9Tn1yn1CQiVNeW21I ZdKkEo3EqUR5skjA9wf02pY7VeVYduuRJEZhJpMXdHdYKShXhJyPjn0wMa8XFYNsXNR/w5LBQiNI GFpdc3NrQCBg7uO/f2zovhNmLT2WXloy00lKlAYTwME/A0I5maLOUUP/AIpWUP8AgLUw45uKcNpB 5GM/7jXZVTqKEkOjwj2yprtoNl9RIKuodFpVJiqqFNqLxSZzU1RBcyRhCM8pSe57c8dtMmsF0UmW WF7HQw4UK/lVtOD/AF0VTK0RiETQEXTLpUGjOHXymgOl3BcK5MNubVEpzURHfSIyAS2UnCgccAqG CfkaLbkZrikBdHkkKPCkYRx+RVpEsROrYYUoXU+kkbsiQjnj18uo/XLrvddq3O7altxIKXIkFhyR NksqdWt1aNxSgZCRgFPfPJOufJKt/wC+KfSoL0XBP0YY9aZM6pdQIz5aKUrPP/Usf3440iOo1ydQ 5t2mXGrtZabbUW3YlOkLJjeGrb+0SgAJKsFQPYj1Oh6l9f8Aqg3UYsmpP0+ZHQ4lcpt2nMILqR+8 MpGc4yMjGm19RfWS6bIrsGjWdRaUhM+nNzHJkpG5SgoqSEgAgeUJHfPccDVVApGdRwJWMjRh06uK 6GKDAersuRIdku7wJAGS2T74HA5/Uex0S31MqM+W5R6a68220jL/AIJIUs4zjI5AA9tLr6Y+ptVv +oTKXd8SnuVmBGD8eTFb2JU0VbVJKewIJTyO4Pxo4emToNdnPuJSxIU6rKVjCVJzxgnvwB215T4s vFM2qEJJSFqhRTqBBJjv9pp+xSFKJ1jSk3ctbr9nzfxSg1aQ28wrLjC3Stpz3QtBOOf0I7jT5j3t Gm9Mol4xUYEyKhxptXO1xXBSffarI/TWar2hVduXWHHdromuKcCEc7crUrn583caN7WZuRv6dqVH eprjTEWY8CT3U1vKkOY/lypQ/QHWDwi/dt7F9DbmOEkpPLr4Tn3Vq/LofebkRJAMwP3pXSr3BVH3 /uZU95a1+YHf2/IemjPpXfT86tIoU1ZW263+wWs5UFgZIJ9jzpJ1mRIbe8EOFQSrAWEnCvyyNEfS mDWpd6Ux+ntpWWyHXFkKCWk8g7uO+P05GsHgzl1b3iHQskkic5nPPvr0l9bsOWykkAQDGURX1FIq SFfsblnttIUAAmU0An+qc+nbVdUHq1Q5aqiLkqs+NCT4zkdKmz46uyG8hPYnkn+UH30NO9SOqUaS 7HR01mveGsp3oWMLAPBHl9RoevnrR1GpMJozLFapDLiyla5yPES5xwBjbg99fTrjgli+kpLKBP8A yJ67a9dta8M3drEQT5017ltyNPqyHGFuqaKELZbSFAJS55icj886gSrViCGtbgWl5KgGUkKVuVny /wBwNVlSrNTK4jsaXVozL0JhxDcQ+RIU2FYAzx31Bq1yVeLT3pC6lcBDLalgrxgEDjJzxqJcDLQZ IJUBBOFUE8/E5611ISo4o9acfQGiMUu5ZiGoiY6o8T7dQSolKxlKgsA9txKuPjTXgykxo5aRDkrA W4rLTOU8uKP9dZk+iy7K1ct11FdXqMqS43DO7xsDjKCkkDj1Vg+x1qGA6kUxx1str2rdwSrCchau 5Gca0bdjsGw3MxudaCteJRURUe2XPERUF7VJzOc4UMEdu+kX9Rl/1uoXUemVrR5Tq1No++MZJU4+ pfIZTjsnGCr3zjgA6bdn1gvVudT8NKC5UhwqRnAIKOAT37+3/wA1fzaRGeQoMJbjFay45saHnUe5 V7n504y72SwuJik7lj5lot4imdxy3rGd+2j1G6e1G2Zv3yJNUlJUIsSIpS3Y2wp2tg/xfv8A8PAO e+nZ0f6vz7ohzrcuajzo1fiKVGeCIyspVtOVOj+AD1UcDR6qvWjR7lVAqEqMmehJcRIcYACN3dAX zgnHI+Nc6a7ZS7lrUmixY/4xU426TMaTn7nYnaE7vcDHAx6d9N9s+6CXkyNQY08eVJLs7RhSPlFY VDJWchXhsY/djURSDE+C3/xqF1G6G2vfTrFYD8mkVV1KDKlR/OJCQgDCkKO0EYGFDHznXSItfgBB bcCthTjYc5xrrefWKiWfUhQn46X5zDLRUyqW2ytQU1vBSF9xgY7jnjSdw6GQCTEmKdaAWSKHqD9O FixZKEVFiuVJIzuU/NQhB/NLeDg6Cvrrp0enRbQqEONlxtEiHtCv9JKW1JHPfGD/AF1Y0D6lrbTX alUHLdqzaZ4aWBvSvYEI24ISDyTn45Gq7rC9Xeu/TmDcNpW3MSqiTZTMmE44kvLC2WlJW2B+/wAK HHf4OglzFrRlJEZCkL0mvW4rOvyn1mmKitObxHejLTuDzS1pCkKx27DB7gga271D6jW/RKYpx1f3 RMtyGpkM71h1skKTsPr65OBjB9RrLfSzoT1IrtRgTp9E/wAPwWpLTz71S/ZurCFhR2tAbsnHqE6d HWzpJWKrAdqFClrmy0zTK8NwhKykt7CnPbOACD8YwM6y+LJcVbFCCUyQCRqBufydhntTXDw2HQXR IG3OiOz3LRudpFUhw4qw6rYFuNcsuZ7FsnbnPoR6jRbNq6IU80d+rTD4KGvuXkw2iyyl5RQ0HPbc oHsCAMZwOdIvpzY9xybTl0OqzvwiVUJzKiW171stIWnPIwPEOPTgcaeN1W68uDVTDS7MRU6eiFMT uAeygKSh5J4BUAskjjOBj5wvg8JS2+0lYWlK4B3iAczv+7EU/wAVwtujs5g5iQJpTXh1I6S0m6n6 MaG/VZERSm5ciOvwW/FSSFJCcgE5B5GBp1dPJ1BqNATLoFOep8dSsKZfjFlwHGfMDyeCMHJ1+f8A VfDQwimrguJrAmKDkxxSkLUFK7OIIzuyc5VjW4ejrlcdmXCqoNFNPbkMMw3FE5dUhlKXFgfykgYP GedbeBm2vm22mkgqCiTAByw9M5mk1uvOtS4skcpnn5aUOwatbodQsyYu/eVnCnsZx7bf7aF77p1h VeTIqF11qChlyMYkZLxWG42/glAKBlajjKiewAGBnV/TrfUM73IqUZO5XiNnA9+2lT9TdqzplIpl PpMhpyQ666/5UIyENNKWrkDPpj9dMoXclYCmwBzxfbDVFRGft/tTabCCYsOkqmxp8inQmGXjHZLi fKnCF+hGUgHGPfv31EvWirftmXHW99jEWnMl5cRSEttZ85z6cZ5OiSxqdVYNOj1qhVuZT/xWFEck sxihaFKS0AlXmGRgHB/2176jf4nnWHXGaldNSEJyE6iQhSGwpaNvIGB69tPECdKCHHMMbeFVfQBu mG+7jeoMqPJgyqOGkBlWcPoWlJT8ZSU8nj9NOqzKYGbfq6amwqmRHwlvPjBB3AdwW1HHJHPrrP8A 9H9CrVs3NXadMe2yWqY3JTgchLm3I/TbjPxpz3Oi7KvT324y6elSXEkNFfjvOpB5/ewhJI5wQdRU xlXUgHWrS3KhbUC40Ii7ZDzigDIZQolJIwStZ5I/M6ourHVeo2xejltv0xdLpyI6JH4u8QWnUqOM A9h5vJt/eJ54SMn5a1gXi7UG586dAZjoT5EvOKfUlXulLZS2n1HbOmBdtkUW7LYZotwx25xjkORp C0Dew8AQl1HyM9jkHscjVWwqPrM1Z3DMpyoGg122qxGWKi0yw6hCllDqQQtWMJSD8k5J+McY1cNL tqlpmxo82O0oIalRHGlZIdCMEAj3wMj5+NZ9vfob1Nse3IkOzauusl+ovvzH23UsuKBQkMjw3FYP +qpWD3OvF0Uvq3TOuMVNsUyfIoEeTCWl0NIbivpS234wLisAjIXnnVeyMYQrLlXAZOLDnzpyI6t2 lBveBRa5WmI8uc+PDLbSNrSiMDxVY8gUcAEnOcdhzpZ/UPRL1ldbH5lKs+dUacBHW3JTTlPNKJY8 JZKknJCQT5fdOdGVn/TRZ7HUqp3dPqH4zSlSy/T6aoZbaUTuIdVk+IEk4SO2AM51e/Uaqc0uDLh1 eZBRTIjk4tMLKQ4Q603ng90hzg/J1HUjCM9KG88tIJInpWVahZl8uyZzkO0q8jc6Sw21S3U5Tv3E Dk7QMnjnWqfpAo9VovTedGq9MqNPcXVFrbTOZLbi0+E2N2DzjIIB/wC3Spr16JqlsMNRZEaLJeJ8 R2Op9MhGMBSiVLIyod+Oc8fFqzd900jpXaqqTcMxlJmyw8+f2hLbQb2p84J24UrA7dvYaAlYUMZO SZ2I0ypUXiCSEg1qBqnw2Xw+1HQh0Z8w7899AlkXxUZF0zbPvalt0ittuLXAWjP29QYycKaUe6kj GR39cDkBF3H1lr9SNMfodVrFMS3PQ2+h55Cw6CcDJ2DgYPl5zn41o3qtCbkWLVZiYJlzafFdlQwk 7XA6hJUNpHIJxj50whwLBw/ijB0uTX2e1b8qorUIDsuWpa2lIQQhW9GNygFFOSMjzDVhTHlQGksP R6kpokq8aSpB8MegJBz+Xc6zz0TqjzXUymLQthtiR4qZxkyA49uWyVt43EqB3eX9dP2+VOOURwNx 3HEgjckjaFA8f2zrPuXW7K1ceZQMpJA5nUn3NNMuduUhXdQ31H6fWX1HkRfxAORKnHcDjMthCUOO JSQShRIIcTj0PbuMaJKBb8m3Y0eHTJ78qOXlKfErClYUSSoKGCCOBjkaBun7l1OUltm5Woqak3Nx G+2XvBbChsUSB6jP/j303AR76U4HxI8RStTgGJBKZTod8jV7hrsiANDQoJFlNbgqq0cFJwrc61wf nQC/dvTqX1Fk0ypO01lEZrwIVSakBTTheSA4lWBtSodsk/HvprQqsmTJQxsZSVbh5ZCVEKHpgcnQ 31ctRm4LQrAbjMvSvwyQ2w2prIK1bV7hjnfltO0+h1tuSASNaqhH1hCzANcKNaVmUWjwYUWoRRFZ YSlhbrrRUpAGArce/wCeh3qmLLoduRpLsWNVmpU9iKpiPIaQrClcr7HISBuI44B0Q2UxDl9ObclV i3qa1LVEbZdZlxdpbIBBGCgkHcO3ydXbVv0Go0haUUejNKWFpStiMhQQSMbgdo5wdRCsaQrnUdbW 0pQnIGKFbDiWC7ds65aRXm3piacmHKYdWlASyVBaFlJwcHdwrtzjvoycqlotbluVGho/mKn2h/Xn So6A0tiFf3VGLKosVM2nVfw4k1UfcoxHWw4hgLA5SkjJSPVX5abNODMt5Tb8WCpBbBwmKpJz2Odw xjvq2dDSkwSKqbXu+n1mNVIzKokExpLseKWZLai+nHlcQnjBOex/PJB1Wti42qUIIvSQ7MEdLaZL sKMMrKOHFAL9+Tj9NUPVm2XIF6WLcdIov3SIteKZiY0cAoaebDaSojGEBYR3GMnPAzq26mLrlA6X 1iRT50qNLhxFuJqMhpl5QI82SlIyT/CMDjjXAToa63CiZHrUPpxGvu7Ol9NmVi9JlPqUhktyVxoD SFNrbcKFKQVA5zsJCiMEKzjB0R1KEmFcoqqrhqilJpyIRjh1rYVIWVeIQcDxFbuSABgemvNuGp3Z 06pk6JdL0d6dEZd+9jRkBaVYSVAJVlI5BSQR76p+o/T+r3BciarBv+8aK0Y6W/s6U42Gdyc+YhX8 Ss/+uo42lxOFWniPauIMK0qulVm4ah1VVZYnPRYMmkvS4VRYkgrykoSobEjaFhS8gnIwOx51A+oh MtaKdT4UpKpJp7olh1SQXGMpzzxklSewHp6aiVew71tRqFcFL6gXdWih5tuTClKQV+GtQBwEpOSC RnPAGT6ak9ZbFu+6L3aqFLpzTsVpllMeQZKW1MkbieCc91ZOATwnGlV2KW2j2Jgq5kq06E/elLm4 UZThOXLrPTpWeGUuOsvOh+NHbASAl99DRScbv3c57Eeg9NEtRdiP9HLMCnZLzb9Sn+KW2wFJRlKS QVZSRlGATgH9NWlX6D3aufKlNS6bNmyVFK2Y00eJkDk/tEpGBxnnPOrJPSO+2LJolAVQ2VSILZUJ i5baUMKU844sHCieRt5wrRAlYmfCs9LGDVKp7v8AKV9NkQIvj023pbqYMtbbjiZbzK1KUhW4AhPG MgHCRuyMZ03R1Nv6r0x+PPuGzWo8ptSFpEZYUEKBGM+LwcHQ/F6YdQY1wRnosCD4Clo+8XAkpdQW SsFW/cc5IB7D50BU22LYeJdXe0dtalFSk7QMEnJGmuHNqUFdrkMoyxHeZ+1GcUpBI9zh/FMFVeTb cB6bTY9iSJSnG1rMamnx3VpxtUpYcKiRjPtp1fT5e9bv23KpMuBuF4keZ4CEsNFCSjYDyCTnk6zN Jty3osBx2NeLMlxONre3dnn2Tzp2/SdHkOWlWhT6oG0pqfmUY2d37JP8x1qvsMi1JAkzqRH2pe3d Wq8SkqgRpMj3JpvzIFOhzoXgRkNreeKSQog4we3PHJGuzdEKJv3LdYqwG4nwVSN7fPpgjOP10N16 sIYuJjxaxGdahq3ON7UJJJI8oOe4x/xo1hSo8yM3KiuoeZcG5C0HII1hstNspwNJAHICK3Fkk5ma /9n/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAXcD6ADASIAAhEBAxEB/8QAHwAAAQUBAQEB AQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh ByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAEC AwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAa+AjZ 6YNecx3dpLNerHuyjMcAcZr0WXHltkcYNedIkYeZoU8seYxbcMZAo8g9DK1+4sLzRobLUZxbc5KD qRWBPqugNaw6XbQSStEMRqR39a2NSl0PVtQ+1XkLzzp8qhBgDFVb69sbfRr2eHT0t5YxtWQrzRd7 Dsjj76afVvFNjBOCjRsqtgcKK9QNlbXGooix+ZHb4UNnjjvXMeGNRWXw1fXtxZReZGh2TEfM341N 4Ivr54Lqe4ObdFZgScnNUIy79v7T+IYCJ5iQsFPsKpePpTeeJVtYEdzCowFGR9KveDphd+K7m8MW RuYk56VEviSaPV9Q8myRsyH9+y5yKNgOZhgWa7O+QrIo+aMdqlLTxX0QVz5PqKsCezub6a7gIExB EvpmoEIgR9xJhbqD1Wq5raoTXRnSWeoW97lYSSU4NWiBWHoEcFoJMyD5z8p9a3iK9bDzc6abPOqw UZWQ3FGKXvSjkgdM9a2bMzRt7e8KxYkAXeuF9eas3lrp1x4lQz3DeerALGPUUyytCLm2YXO6QNnb ntU1q2nzeIXbyWe5Lk7z0BrwajvNtHrQ0ihovbxvEnlR2v7kPhnx2rLk8PNd+MXvZdWSOMyZSAHm tjTm1STWneRStshbqMZFYmm6Po0vimS5OpvJdySErEG+6aykXEytfudQXXLmzkgDJuA84jqKoapb 6i+pzxWpaKzVArSA8EYq7qVzqn9sy2t1kwRzAByP4c+tU9egvm1W5Ad4tN+7uDcFcdRUI6b6GDLb pY2Jggm+0MGBLiug0HzmZw0Z8ryycn1rAkjt7W2WCwkeZA3+sI5NdBoouT5rlT5AjPGa6o/CcT+I zdOFy1+UtgS/m5z6DNb/AMQTIPEGn7Bki2AbHrWHpcVxNeqlvuGZc5zjvW549Ev/AAkVmIxkrbgH 60PdCS0ZBJoWoW/hi61CQqFGCq5yTWfp41WWz3SQ7YymeT2rqpILq2+Hl+J33SsQUw2cVzOnwas9 hG8rcbMnc2P0qJO7dyklYxH5w3Tk8Vp6AR9tlA5O3rWZI275v9o8Vo+HyDfvs4BWt8PpNGVb4GdD 7UlPxQRXtHmoZSYp9JigY3FGKdikoJY3FBBp2OaKYDMYPSkxzTyKMUgH2F09prdiAcRysVatLWXu Le+kWKYKCeFA5rn75zDHDOOsUytn8a6PxBdy2/kXNvHGfNQEs4zXi46Fqyt1PSw0r07GdJcG4aMR C5bA/ecd6wbrwpr19dTyJKUtn+4GNaEmu3+/yxMFJ6hErK1f/hJbyVBYXcvlbfn+tctrHQe/eCLO Sw8HWFtMwaREwSO/NbYHpWD4DhuYPBWnR3blpxGd7HqTmt8VSIaDFBooNO4uUB6UtAxiikOwUvSm iloGFA60UmaAHd6Q0UGgAooFFAAaKD1ozQAyZd1vKvqhA/Kvm7VLd01G6VmAIkI5NfSo9Pb86+df FcIHim/Zo1ixIcLnr+Fb4ebi3YxrRTRR0jSH1fUo7KGRWbO6THZa3/G2rxwCPRrJQYkQCQ5/Sruk wweD/DUmpT7Re3Y445A9K4J3immklcPLLIxYljWzm6ju+hiopbEZZ5Rt3E9gkY4pht2QgsyxA9Qv Jq8qS+X8sexcdAMVHLAfspcMFY9aUq9OHXU1jhqk1e2nmeleDJ5dB+H19duMJO22D1Yms2xjZIfM f78h3NR56zaDo+n2zk20Y3yZ7tU/+7xXFJ8zudMY2VjG8T4Nlaqe868fjW0gAx/KsPxFE8p05EBI 88Fj6CrWoX81uGNuFKjjcaaTtcFq7F29lSC2ZpWCA+pqpFLFPHG0bZjA4PrXMQRXmuzs88rG3Rvm Pb6CuhKJC6xxAKirwtZU5ym72sjorUoUkknd/gWNwH40oIIyeKiZxtAJGO9PTnG3pXQcpZwNinGT Sorb8A8t1qN7iG2TfM+CP4ayLvWTIQIAVT9ahsZuXFzHaoSXBfsorHu9ZkPCcY/hHWsmW835JY57 45NQea82fLGxe7N1qHJFJXLjzSv80pCKecd6py3UiKfKTGP4j1qMuI13M5Zu2afFHPcnEUbc9yKz cnLYuyW5QYyzsS5LE809QWbG07uhxW9HoqwoJLyZYV6/McVVudf0PTAVt4zcyjqccZpqk95MPafy oqx2VzMcRxn3NLNYfZlL3MqIB2JrKvPFupXeVgVbdD/dHNZLR3d2xaeR5Cf7xotBbDSkzWn1S0hO 2LMh/Ss+61i7ljIjwi+gFTW2kSOMhGI+nFXG0+GCM+Y6KfQcmpu3sitFuz6k8OMW8OaczdTbpn/v kVqVm6AANAsAOnkJ/IVpV0I5gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACik5ozQAtFJk+ lITzjFFwHUVWub22s0L3NxFCo5zIwWuevPiH4dtMhb03Lj+G3Qv+vSs51YQ+J2Got7HVUma85uvi ovIstHmf0aZwv6DNZM/xJ8Qyj91b2NsD0JVnP865ZZhQj1NFRmz1zNJmvEp/GvimUEHUhGD08uFR /SqbeJvEjHJ1q7/BgP5CsXmlFFKhI95z7UZr5+fX/EJPza1f49pTSDxF4iRTt1m+GfWY0f2pT7D+ ry7n0Fn2pc18/p4t8Tp01m6/4EwP8xVqL4g+Kof+X9X9nhU/0q1mVJidCR7rnNOFeLwfFTxBCQJr axn/AOAsp/Q1r2nxeZiBdaI/u0MwP6HFbQxtKWzIdKSPUaK4yz+Jvh25IEss1q3/AE1iOPzGRXRW eu6ZqH/Hpf202cYCyDP5V0KpF7MhxaNGim7uaXNVcQtFJmlpgFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RSUALRSZqKS4iiHzOBUuSjuCTexNSZrOk1VFOFGfrVGXVJGzh8ewrkqY6lDqbxw85dDdaRVGWYD6 1C97CvG7J9q5x71mPLE/jUDXZPGa8+pnCXwo6I4LudE+qRjoKgfVm524FYBuCe9MM5Jrhnm9R7M2 WDguhttqch/jxUTX8h/5aN+dZBmNN81q55ZjUe7NVh4roapvGJ5c/nQbsj+I1k+ax70nmNmsnjp9 ylRia/2v/apRdn+8fzrI8w0vmHjmhY2fcfsUbC3n+2akW9bs5/OsQS9acJT2q1j5rqS6ETeXUJB/ Hmpl1Ju+DXPib3p4mPY10QzOa6mTw0X0OkXUFPVfyqZb2Fh97H1rmFuGHepVuTxXZTzZ9TKWEXQ6 hZFboQfpTq5xLsgggkVaj1B1HLZHvXfTzGEtznlhZLY2qKox6gjfeGPpVpJUcfKwNdsK0J7MwlCU d0SUUmaO9aki0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFADX6HPTFec3EtxHLfzxW32pQ5VUXtXosgzG2emDXnE9nqtvaytpM6Ro8zFzIeetCAzli1dE MsemxW4wW5HIrjPElzdGw8ydgUuXx5Y/nXU38Oox2kks+qh5FH3Q1cdfwrLqlrbJKZlbDMc/xelN bgbM0gsvAKW6LsMj7Rx1FXNPQ6X4Du5twIlHy496peM5GWPTLFVI2LllH1qfxUf7P8H2lnG2fMbc BntTF5h4QgWx8O6hqO4AGNs/Wseyub+10OR5rVUtGJbfjlga19slh8OmBOXunCoPesTUF1PSdEj+ 1Si5BAHlKcgCi2ozItEhEE8sSEQyHgHrSRGcsUVRJH/cPXFPBP2AEDbvOcf3ahhtxJIWhudtwo6Z 4NNIVy5bhFdMZ+z9HU9UNdHZy+YhUSeYB91h6VyMdyyXLB1wzDa69mrofDlpJb20zucozfJzXThr qpZGNazhdmtj2pyqGZQxwD1NGKfGE3jfnZ3xXpyfus4I7o1NPhtftcRhlzIgLN7jFSaTexT6hOkN qFIViZPQ07Tns2kkkt4yHiiOfeixu1jsLm5nC21uw2bsYOa+fk7ts9iOyGaPBqS309xdS4gVW+Ut zj1xWDoFl4YOsTNb3byXjljuJ4U1uaQbJmvGhvjcEREPzwAapaPpGhwRXCW1vtkkQ/OeuTUt3Gjm 5Xv4r2VNQDyRRTZTPdf61QvrZ7uS5u7uUxad0Zt/IH0q5aJfHVYE1DzSI5iqBv7vaqWoaKfPupdW lEFo5I+V8k/hULVnR0ZkukUdpFFYsZIFf5XPVhXRaMlwVmZhshKYGDWE8SJb28dov7hGwvuK6PSR NsnBdURo8cdq6V8Bxv4ibRvC8UdzbtLrEXmSPlY0bnr0qHxvceZ4sVAMeRGEPPU1e8P6BpdlqNrO +orLc+ZuCZzzWF4wleXxrM5UcHkVEZNyLaSidTJaXEHw7v8AfIGd8MhU5xXL6dZ6qbJHkZANuTub tVvT727m8M6pabz5RGVX0NVNLsNSNnG8sigbf4m5oas2JNWMOfJboM7jkVo6D/yFCBx8vSqE5yze u85q9oRP9sLuGPlwPcVvQ+NGVX4WdQVwabipMHJzSba9s8voMxRT8Um2gdiPBoxUmKQjFAhuKMU7 FJigBhFGKfikxQBU1CPfYTAdhu/Kt+eWN/DlldmETFYwMMeBWU6B4pE/vKRV7RPLuvCXkybiIpCp A6nmvLzGPwyO7BvdFW21VZLqOPybaAPxvIzim+K9Q1HSNKjuNNnjuHeTYyoo496Vm02OdohpzvNG PmBPSprq5NroF5qkWmxhbYZMTHJNef8AI61Y9U8CXFxdeDNOmuhiZ48sPxrfA4rn/AeoHVPBWnXp i8rzY87B25roBVCCkxTqQ0AGKMUtFADcUuKKWgBMUgFLQKADBoxxSF0VsM6g+hbmlJXaW3DaOrZ4 oAMcUYqAXtnsZ/tUBVepDjiqsWv6RPvEeo27FevzigDQIpHdYkaSRwqKMsx6AUyC5guk3W88co/2 GBry74zeMbfTtDk0G1umXUpwCwTsnfNCA2fE3xW8P6Lp0zWN0t5e4Ijjj5+b3ryfwVLqXjfxdNqe ohfsVu2+dvU9hXmcFvPcXUNrbgtPMwRccnnvXrniCa2+HHgGPRrSXOoXi5fbwST1Jq1oRLVWMDx9 41W+8SvZwxg2Vqdo2nvVLTtZinA8rax7o3WuGDED58ljyxPUmlV9rh1Yqw7ile+jLi3HY9RW/jun WLaY2zypqtdJiV44zuViAo965C11yRmRLjn+7IDXVaPcR3OpWJnP7sSguR3FYypKOqOqNduNmdst i+mrZ2r/AHvK3t+NWJpUt0Mkx2r6dzT/ABFqls+tNPaN5qbAqewrj9U1gQEtIxlmb7qDnmumFJJc 0zjlUcnaJoalqq4LyMI4l5ArNs5r3XXeO3QpbEYMrd/pVG206e81mzTVFIS4BZY89veu8gSOCERR IEReABxSnU5ttEEI216lJbWPTtMitIuQp5b1NRTYNx06Lj61auZEYBF+bnnFZt80is/lEbscVkmX qTu0cUW6VgF6nms648RRxjy7aM+gesO9kuoxvuXJTOB9aqwsxkPy7s9FFJ1OhXIzSMl3eyFuXOef anqTbSfvCPw5rU07w/f3lv5jyLaw/XGadM/hrRAy3N39qm7qnOTRZiujMJDSbo4fv9gKsQWUhlZp CAmOBVG78XmUGPS7FY1PAYjJrS0EXU2mtcXmS7P3pRjG422SRWtjarvnR5pOuAOKp3/iG5jPkWcK wD1xzXTGaONuVVvwrntanVLwNHAm5xjNJyeyGorqc3dpe3xLTSSSE+pqOHQpmIJAX61v2qO8gMjA A9hW9bwWwAOzcfU0KF9xufLsctb6AvBIaQ+iitSHRHXBSFE92610SgAfKAPoKUjNaqnEzdRsx10c N/rZS3sOBTm0+2hQlYVz6nmtRgOarT/dqrWFds9x0f8A5A9p2/cr/Kr1UtI/5BFp/wBcl/lV2oAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACkJAGSQB71h+Mbp7LwlqU0UjJIItqspwQSQOPzr5wudf1WZ2Mt/c vng5lJz9eaDOdTlPqssF6kD60zzothfzE2jqdwxXyg2t6jIux7y4YehkJxTP7TvNu03M2PTeaCPb rsfWIuIT0ljP/AhTPt1oH2faod2cY8wZr5OW9uFBAnlCnqA5waQ3UzNu81g3rk5/OgXt/I+s0u7e TdsnibaCx2uDgDvVSbXtIgUmXUrRcdcyrxXy5D4im0a3v5sysbi0mtvlboXUqCfocGqiTu8ERwfu jvQN1tL2Pq0+IdGVFc6rZ7G6N5y4P61HH4o0KVmVNXsyy9QZQK+VvOkBo8x/Tj0oJ9v5H1N/wlvh /ft/te0yf+mgofxb4ejYK2sWYJ6fvRz+NfLO+RiMZJoLyCgPbvsfU0nizQIs79XtBjsJAanj8Q6P JaC6TU7UwtnD+aBnHWvlISPjHOKqvdzDVoY97FBEflPQc0DVa59bJ4j0WRtqaraE4zxKMfnS/wDC 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 Yc47+9USZOrRq9uQQCMjFR22kz28PmxlS2MjNT6pgW4ViN24YAq4S3kIM/wVnbUu7sczcz6lcKUm vGC5xsQ1HZaLA8gZkZ2Pc1ZtYwVkbHJc9a07FDv9q0Ub7ktmvpHh2AJlgqgd8VsXllHa6aqR9N1S 6Yv7qptWGLFB6tVWSM1dvU59h82KwtZAN/CtdJs+auf1ZN2rRD2rKxvcZCNvOK1YGKqDWfCv71V9 612QBRitI6GciVJM1JvBFUCSp609JfU1RBbJzUE/3aPMB71HK42UFHuukf8AIItP+uS/yq7VLSP+ QRaf9cl/lV2pAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKa7rGhdyFVRkkngVky eJNOQ4Ejv/urQFzYorFHifTyM/vs+mymr4osCTkSgdjs607MVzcorCPimyyAI5vypzeKLEfdWZv+ A0WYXRt0ViHxRYgZCyk/7tIPFFiVyUmDem2izC6NyisIeKbPd/qpguOuB/KhvFNmGIEUxHY4oswu jdorCbxTZgcRTE/Qf40HxRZgA+XMfUbelFmF0btFYC+KrU53QTA9uhzR/wAJTbZH+jygY9qLMLo3 6KwD4ptg3EEpX14FDeKbYA7YJT+Qoswujfornx4qt9uTby5z0yKF8UwHO63kHpgg0WYXR0FFc+PF UGf+PeTH1FDeKocfLbSH6kUWYXR0FFc+fFMOBi2kJ+ooHimHbzayBvTcMUWYXR0FFc8PFMWTm1kx 7MM0h8UpnAtW+paizC6OiornT4pTHy2j/iwpT4pQAf6K+e/zDiiwXR0NFc6PFKbfmtGDezZFJ/wl I3f8eh24/v8AP8qLMLo6OiucPikZOLQ4zxl6RvFQ/htDn3eizC6OkornP+EqXA/0Rs9/npq+Kjg7 rT6YaiwXR0tFc1/wlLbh/oox3+ag+KmzxafL7vzRZhdHS0VzTeKWP3bX8S1A8Uvt5tRu/wB/iizD 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 PY0AeFWerTt4htb2aUtKLlXL55zmvtq1m8+zhm7uit+Yr4asrGca7bWTxkT/AGlYymOQd1fctpD9 ns4If+ecar+QoAnopAc0tABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRWRF4k0yfxJPoEczHUYIxJJH5ZwFwp69OjCtegqUJRtzK19QooooJCiiigAooooAK KyL/AMSafput2GkXDSC7vs+SFTIOPU9q16CpQlFJtbhRRRQSFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSUtFAEZijZQCgwDkDH eq9xp0FxDOjAjzxh2HXFXKKAMpNFgghSGABYo4yqJ7+pqnbeHTZxRRRyFiSTM56kmuhooA5OLRNQ jvpppJNyySbY0/uL6mori11L+03jSMC2gUF5D/Fn0rsaQgEcjNAHE3V3NC0MYtZDJLyox29fakuL +K3017yX5Y1wCfc9q7VokZtxQbsYzjtVZ9Ms3thbvbo0QYPtI4JHegDjYbqK4gEm7ZkbsNxxWeNX ha8tTFICfNABPGee1dzfaDZX1tcQum3zwAzL1A9vSqn/AAiGlm7t5jD8ttF5cSdh7n1NAG8rbkB9 RTqZEnlxKmc7RjNPoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwfFnha18XaVFp95PNDHHM Jg0OMkhWGOQePmreooLp1JU5KcHZoZFGIokjBJCqFGfauf8ADPg+z8L3epXFrcTytfuryCXGFILH jAH9810dFARqzjFxT0e5xmvfDjTdX1U6raXV1peoNkvNaNt3n1I9foRmqlj8MIhqVvf6xr2p6rNb OJIRNIdoIORnJJ6gdCK76ig6FjsQo8qlpt/T3Oah8G2S+MJPEtzc3F1eFSsSS42QjoNoA7DI/Enr TvFfg7T/ABdb26Xjywy277o54SA656jkHjofwro6KDJYmqpqalqtF5EFrC9vaQwyTvO8aBTK+Nz4 HU47mkvrVL6wubSRmVJ4miYr1AYY4/OrFFBld3uY3hjw5b+FtGXTLWaWWJXZ90uN2T9BWcngWxtf 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 3OKYxx/nSUZ9uKTNAw9M0oOTTSaFOOcU7CZJnNKM5qMGnZ4pWEPzS54pgNKD6GlYQvTijvTcjNJu JosBKCOlHU8VFmnBqLCFcY9KiySKlYhl5/Ojj0qgvYiK8VA7bTgmr4VTztrPuBvuCF4xVxKi7grB qUg+9CRBTk8mnM6qOTT9BshdscUzJzSyOrtwfzqIsT34q0ikh+eaeO3NQE/WpI2Oc8HFNoLEwGaC DnNPjIYZ/Oh8Cs7kEJBphHapSOelRuOapMY3bTsEelJuxwKGPemAc0ZpM/lR/hTGLxjrR6Ume1FI LC9fpSGlJ/Sk4NABxjmkPtS/zpM0wDPWm5Gen5UpJA4pOcUxid6XPak5780uePemAoGaUdabTs0g Hcf/AF6dwMfWmA80o/lUiZYRgatRniqUTZ4qyjED601uZSNG0b98n+9Xo2jPush7GvNbXmVPrmvQ tCfMJFe/k8rSZ5GOWhs96Wk70tfSHlhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADW+8tebfHO3lm+HFw8 a7vLlVm9hzXpLfeWuJ+LiyP8NtVWOMyMU6AZ49aAPkYT5UfSvU/gxrC2N7fqTy6ivKFiYKMq/T0r v/hEpm8WGxWFnedMg44GPWgD35PERHTpU48Rpj5jTU8M3Q6olSf8I1cf3EpAA8Qp60v/AAkKAdaX /hGp/wC6lL/wjU+eiUwFGvqR1pRryDvSf8I3OBxspf8AhG7j1SkA4a+g70o8Qp60z/hGpz3SnDw3 Nn7yUAP/ALfjI60p1+MdCaZ/wjc395KP+Ebmx99PyoAkHiBPel/4SCMd6i/4RuY/8tE/KkPhqc9J E/KmBy/xL8QRyeAdSgBw0iYH518wiYgYr374xWd9pXhqKJLdrhLltrPGudn1rwNtNvh0tLg/SM0A RSz9sZyMCug8Iafc6t4r0vT7glIpJlBI64zXXfDf4QN4w0a71HUZp7Mq2y2G3GT6kelUdc8FeK/A 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 UgqwBBFPoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQ8ilrkPiVqGq6Z4Hv 7nR2CXCpy56qO5FAHzx8RorL/hZupGw2iGMgPt6b+9eofAPSymmahqzrzPJsQ+wrweyklvE53PcT SYJPJZia+u/AuhDw74QsNPxiRYwz/wC8eaAOjooooAKgu7aO8tJraVQ0cqFGB7g1PRQB8d61pb6N ruoaXIObeZlGfQ8j+ddJ8DtZOkeP5dMdsQ3qEAZ/iHStr46aL/ZniSy1mGM+Vep5Un++Oc/livLb a/fRvEmm6tGSDBMrHHpnmmB9r0oqrp94l/p1tdxkFZo1cEe4qyKQC0UUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFJRQAH2pMnNI7 rGpd2CqBkknGK8w8ZfEsReZYaE6s/KyXPZfpV06cqjtExrV4UY802d/ea9pdhMIbm9hjkP8ACW5q zbX1reLvtriOUf7LZr5hmuJLiczTSPJIxyWY5JrR0rWLzTrhZbed42Xpg8V2/UbrR6nkvN2pXcND 6VyccCivBLzxH4hmnW/t9UkDDrGOg/Cu+8HfEBNWK2Gq7IbzGEk6LJ/9esauDqU1d6nVh80oV5cq 0fmd+OlFNB4HNLXKekLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAeZ/F/8A48LL/fNeZ6WT/aMRAyw6CvS/i/xYWX++a8qikaGVJEOGQ5Br3sHH mw3L3ufNZhJQxak+liq6fatbkjuWZN8hDsBkitQ+F/OLm0uvlBwokGCa17PY5a7t7bFxc5BlIyFf 2q5arfyTtHrFkI1Vd3nLxuNfMzwdSlJRqLf/AIbfp3P01cQRxNN1MLKyile9u17qL37bnHWeg39/ fyWsCqTG213zwK6u00KDR18wSObhhscEcE+1H/CPiW4N5Yaj9jRhzEpO4n3qwTeCI2z3ZLY/1jrW lDC1lNScG7f11OXNM8oV6Xs414pSW1n+LV0Sapcw2sM8dy4iIXK5P3uK5PSnaTRr0MP3QkBX61Jq HhvUp51cXH2oMcM5P3aW6aG1tU0+2zsQ5kY/xtXThKVWri4vl5VHf+vM4czr4LB5ROEKqqSq2tby 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 Tb6U/jkUH36UXCw0DnpSbRnIp3IPpRjAoDoM6Hn8qMZIpw5+tAPrRcSuNI7U3nnPTtUhx1JxTV9R 0oQ7CAVv+CBjxjY/8D/lWF0Oe9b/AIJ58Y2JP+3/ACpPZgj2migUVzmgUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAAabSnpR1oA8P8A jBpT2WuQ6ov+quV2t7EV5VJqFu8phZj6c19QeOPD6+IvC9zahQZkG+I4/iFfJF9Eba9likG0qSCD 2INdcar5FboeTVw0fbNvrqbcFx9ikGSTE3T2rft5g/ze2RXNaPY3E6l5iRbngA9TW8zJZ7BnaOg9 K9Cg5ON3seTi4x5uVas14ZVZfLk5Q/pVeeA27DA3I3Iao1fOCBwepq7BMpTypOVP6V2J30Z5bTg7 op9ec9aMfpUk9sYXx1Q9DUealq2haaaug3YX3p4z7ZFR4yaeKBMkDfKV9eaVQCw9ajXB6VLGCSBT RL0NLTxtYkk5AyuK9o8Lag2paFBK5zIvyt+FeMQ/Ih9fWvSfhvc77C5tyeUfdXLmFO9Hm7Ho5JX5 cTydHf8AA7qikpa8M+vCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKQ0tB6UAcF8SrVLm1tC4JKtkAetcYZLpVTF1MuOB6CvQvG9vFNBbmUsNrcYrlAkITaHJA9a9TD RbpI8jFyUarOZk0qOSZ5ZX3MxySaVIZrVBHa3BSPOStdpDp0UsaySAYPQAVYTTLLOTbgn1pzxEfh buKGFb95JI89uLf7UQLhxI68ZJ6VFa2z2dwzRuIjjqD1Ferf2Npbaez/AGRN56msaTwzp9xnapQn oaX1iNrO5f1SSd1a5xMkhuYmV5y6fxKTxVaOCzt9r5VGHQjqK7uDwjYW/wDrWaTmrq6DpIx/oatj 1pe3itEx/Vm9WkefM9w+StyzA9Oeopn2KKXGIFz6+pr1QaDpLWjMLNQ3YismTw5ZycwkxkUKvFdw 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 N1+jf4/nXlGsaJeaPcvDdQSRsnUOMEf59a+hbeezvITqWkXKh2ADITkgD+HaTwelVde0a08XaOS0 Yivo1Pl5Iz/ut7Gu7AZ1WoSUMS7x2bfxRfn3Xn/wxvKlGorw36W2Z882LfvSvqMV1Hg/A8Y6STjH 2gfyNc7d2jaZqZjIIUHjPb2rf8L/AC+LtLBIA+1J1r6vEa0Z+j/I5I/Ej3PSsf2/b4x/x8L0P+1X pleY6Xx4jgHH/HwvI/3hXp1eXkn8OXr+hvifiCiiivbOYKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK53xp4ij8Oe Hbi5Mm2d1KQ46hsfe/Dr9cetdFXjPxwvJfMsbNV+Tyy5OOSScf0prcDgdMukla4nkLGW4b5mJydv 1PetWWxS4iJQZGPqRXG2dyYWFdXp998pyc7vQ1SEYF7bGGQoy8+1VYpnhOCeO9dJqVqk4V1YbsZr nZ4gjZIORxVbiL8UyuMZyKJIgckDis1JDEc9j29KuwXIlUAtU2HcSORo2wT9DXeeDfHF1oMqW8jm awLfPEf4c919D7dK4OVAc4piTMjAelG+gH1fZ3lvf2sd1azLLDIMqynrVivnzwX42m8PXo3BpLOU /vYQevuPeveNO1G21WwhvLSTfDKuVPceoPuKlqwy3RRRSAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAayq6lWUMp4IIyDXHyx2lre3VrYWyWsCTB5FjjCK8hXBPHWuyrjZZ/tN7dvghPO YJnvjjNJgQyRhuckfSoHt2Y58z/x2rTEDpSAg/WkBUisYkk8xl3tnPzc1azjk076ioiCz4HNAHTa HAsdiJAMmQ5z7dK1KgtYhDaxRjoqgVPVAFFFFAHmtp4cvofiPfa8zQ/Y54BGgDHfnag6Y/2TT/Hv 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 EQyUYnJJ/HnnjnFegFcA01csTxgUGn1+bqynNXUlZrpbpb0POdVvrvx1Nbadp1jcw2SSCSeedcY4 x2yOhPGea6rXru+0bSreTSrI3XlSKjwqpJ8vaemOeoHNbuOfakxzQTPFxlyRULQj0733uzg5PiE8 sBittFuzekYVCMgH8Bk/TFX/AAVoN1pdpcXd+CLu8YMynqoGevuSSfyrrGBJ4oxxmiw6mLh7N0qM OVPfW97DO/TikxxxT+BSHpQcI3HFNPWpCDSEZPSgBuMj3pAMinAYprkduuaYCsMdqTHFJgtzuxTt vTmmgGMMCo5BgCpSCDzyKjftRcCuw465qtL05q0ykHI6d6qTnANIbM+c84rH1S4W1sp5ycbEJzWt OQOtcT49vTbaEY1PzTtjFCJep5k0hllmuHOS7E1AOetSMNkCr39KjJOOOvarNDtvAFjuluNQdeAN iV3qJzmsjw7Y/YdBtYduHYb2981vxIMZpGbdx6JUzxjaOORSxx5/xqwseV21IIrKmR0oeMVY2AHm goB7mgZkzx1RlU9OmK2Z1GDkc1mzoTT3IZzPi62M2imQDmNs1wIGR15xXqWow/aNMuYTzlDjPtXl sakAqeoOMU7mtJ3Vim4Ow+qtXbeAboLqEkJPDx5H1riHDGSQH61s+E7lrbX7Ns/KSUP40Ictj2JM 9DVlOgFVx94+lTpnGetBk7k69uKkbOw49KamcZNPJ+Q444p3JsesaR/yB7T/AK5L/KrtUtI/5A9p /wBcl/lV2oNEIaKWkxQMy9YiLxBh2rKHQetdHdRebAymubHyOy+lMpMdRQTS4zQMB0paMUUALRQK MUAAp1IB704CgAApcUYpRSAKPxpcijNAABS4ozSigBMUYNOxR9aAACloFLQAlLRS0CACjHNLkUmD uNADWWszUbQSoTjJrWINQyrkY60DOQa1KSEYpyWw69K6FtPMhyqHmrEOhM2PMXFAXOaS2OcAE1Zi sXY4EZ/Kush0eCLtmrkdvGg4QUC5jmbfQZJACQQK07fQ4Y1+cZrXA54GBTiPagTZWisoIfuoKsAA cDGKCPagDHagQY5p1IAc9aWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig 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 FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEFxZ290uJ4EkH+0uazG8N2iyeZbSz2zf8ATN+P1rao oC5w+u+CNQ1NxJb63cxMBj922zP14INTeHvDOsaRE0U99HdZORLcgO6+wwBXZUUD5mZkGjQpdC7u GNxcAYVnAAUewrToooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFRzTRW0LyzOEjQFmZjgAVJXCfFrVk0zwTMhfD3LrEoHcZ5pMEUtT+ NHhqxmaODzrvacFoxgVRj+PXhwuFltbqMepGcV4jbquo3UVhYwFp2O1VLYya2bj4d+K4AXfRJiOv yfNWalJmrjGx7zpHxQ8J6yypBqiJIf4JRtrrYbiG4QNDKki+qMDXx7PpFxZybLq2lt39Jk21t6Pq mraYVNpqU8OOwk4oc7bk8h9WUV4ronxR1q2KpfxR3kY6kfK1ehaL480XWNsYmNvOf4JhtyfY96tS TE4tHUUUgIIBByDzmlqiQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKa7rGjO7BVUZJPQCgB1FcxdfEPwpZyFJtatQwODh80lv8RfCNywVNesgT2aQCgDqKKr2t7a3 0YktbiKZD/FGwYVYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKAErmfEHjjTPD139lnDyzBdzKnYV0kjFYnZRkgEgetfNfinWzJqN1Lfu8c80pXa Bkj2oA9Xsvi94eu5SjCeLHUsua6yw8Q6TqUe+2vomB7FsH9a+dNLtHKuYYzIEQuw9qfDrenXoEdt cKs2cbWO0g1kpPqB9N5BHHSlrz/wpd6hYWEVtdTyvK/zK0zZG30Broh4q06K+FleSfZp2OF8zhW+ hrS4rm9RTVYMoZSCDyCO9OpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigCOWNJY2jkUMjDBU 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 KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+ffjbrjX3i i00iFiyWab2Ud3bt+lfQJz2r5X8dWd3beONTa/zFNJOXjZ+AydsGpnsVHcw9Q0HWPC+oQNqUD200 yiWKUfdYdevrXrngb4qXqw/Z9bjaa3ThbhR8y/WvOJ/EuuXGkHS9QlW/ssfIs43NH/ukVn6fqtxp ljPaxgPHJ/C46fSs27aoq1zvvjX4ysNWt7HS9KkimDHzppFXkY6DNeVWAnkcKZWCk8c0yVZJbh5n BO48ZNXtPCLcIWOBnvQ5XQ0rHT2dle2Nq13M4ltEGW9QK39Nlsb+JHtX80MOTjBU1m+KtQt4fClt YWs6ST3LDeEP3R71seE9Ke1s4kVBtC7mOKyZaZ19jrt74chDCZrm1H/LFzkj6Gu80TX7DX7Tz7KU Ej76H7yn3rza/ITR5bm7sXfTG+QXcZ+aFh3I9K53StSm8OXiX9rKGXIztPyyLmtoya0Zk1fY+gKK gtLhbuzhuFGBIgYA+9T1qQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc L8V9WXS/BkymUxmdhGCDg13VeI/tAX+ItJ09WOWcyEewoA8Tv4WuGLIgYZ71ltbMpIaLFal1a6hO pvRbzNbr8vmqpwCKpi8LcSfNjjI60EkthqGp2jAWV/dReySkCux0v4keNNCi41GSaMnIWdNw/OuE nlVyvlrs29x3q5/bN6unC0aUyRZzhgKAPb9A/aDtWRIvEGmyQydGmt/mX6mvVdB8WaH4mt/O0nUI bgDqob5h9RXxcS0qbgnAODS21zc6fOs1rPNbTKQQ0bFSKB3PuvvRXz38Pvjfdwzw6Z4nzPG7BVvR 1X/eHevoCGaO4hSaF1eNxuVlOQRQMkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA 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 UjtVNiK9+M4zV4nzsoSg7SViJuf8aZ7U9sVGT+dBIjc5I/KmMcj604nHrTW5IoAZz34pM06m/SkA 09TSY4px6cU2kMQikPSlNIaAGkflQMUEHtSjpnHWgYY4pp607FJ+FIBBX0X8N/8Akn+k/wC6/wD6 MavnXt719FfDf/kn+lf7sn/oxq48b/DXqd+X/wAR+h1VFFFeYewFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUCCiiigAooooAKKKKACiiigArjtafztfkx/yzRU+vf+v6V2BOBk1wau Li9uJv8AnpKzD6ZqZbDRbRc1MBx3FMQdql9qhAyOQUac/k6tbMRwzGPIHTI/+tTmHFVwxhmjlH/L Nw5Hrg0+ojtKKKK0AKKKKACiiigAooooGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAVka74Z0jxJa+RqlnHOo+6xHzL9DWvRQB4h4g+Bs0Aefw7qRUDJ+z3HP/ AI9Xkk32iGaSCYKXRijY9a+u9ZS5k0W8SzdUuTCwjZugOK+Qbi4ntpnE1sWw5DMDnJzWc0aQ1Laa Y8kCsrDpkimCwcyLEUYMxwDVu01GGZV25Q9wRXVeELVb3XPtEqh7a0UyuT09v1rC7NrNbnPf2A2l zwy3xVYw4L7eSB3Neu2y6ZB4auNX03Uobq1ghLOARuU46EVwHid0kE9zwFck47D2rN+GejT6r49t 7dS62KL508ak7XHoR0qoJvciTORuvFerXb3KDUbqO3mcn7OGO3B7YrqPh5p+o6/rVrp0McslkGDz OQdqAe9fR0/g/wAPXMpll0i1L57RgfyrTstOs9Oi8qztooE9I0C5/Kt+Uy5ieNFiiSNBhVAUD2p9 JS1RIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV4V8Z/DmrXeuwaqkfmW aR7AB2Ne61FPbxXUDQzIrxsMEMM0AfKOk+JNT0WFrGEI8LNloJVzz9Ki1D+xdVV3n082V2eQ8XCk +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 T3zU2r+HPHGuWQtb+70+SEOHAGF5GR1C+5qjqcoxrOnOUPZrTl62+69/megRTpdWsU8R3RyoHQ+x GRQRVXRbSbT9DsbO4ZTLBAkbbTkZAxxVs9fei585JJTaWxYsOJZP+uTY/KtjQf8AkC2/OfvdsfxG sSzO15T6RtW3oIxodr67efzNStxGlRRRVCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKBhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTJEEkbI2cMCDin0UAeaap8GtJvbiWa3u7 i3aQksc7ic+9S6D8GvDejuJJlku3Bz+8bgn3FejUUrId2RxRRwRLFEioiDCqowAKk/GiimIKKKSg BaKxvEniXT/C2m/btQZxGW2qEGSxryrU/jXf3zPFoenLEvaW4PP5VnOrCCvJnRRwtWt8Cue1swRS zEKo6knAFczrHxC8M6ICLnU4nkH/ACzhO9vyFeD6nrviHXDnUtWndT/yziOwD8qzo7KJGz5Yz/eb k1xVMwgvhVz1KWSy3qP7jvPFvxXvNf06bTdAtJLWKX5XupeG29wB2rze00dLYhn+dhWzGqDGe1JI EA4JxXBVxlSpp0PVoYOlQ0iiskeATjr2p22lTLnA5q9LYrbRBrmZVdhkRjr+NczZ1mfSgjNNdkEm A3PagU7AXoHJYCu08B6udJ8QJG74t7n5G9j2NcLC+HHPFakDldrqSGU5BrONR0qimjKtSVam6b6n 0kOefWlrK8O3/wDaeg2l1uyzxjd9a1a+qjJSSkup8VKLi3F9AoooqiQooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oo7UAJXlXxU1gW1pdsp/1cewY9TXoeratDplszFgZSPlQHnNeJ68l14t1WPRrEedcSy75WHRBnqf pSY13E+CfhSS5vW1a4jHlwuHDEcl8dPpg19AVmaDo0Gg6Nb6fABiJRuIH3m7mtOmIKKKKACuF+LW mnUfAd3hctDiQV3VZ2uWYvtDvbYjPmRMMfhQB8a27sFeMHrkYqFSWXB428VcuYvsWszwSfLtcjnt zVJWy0rDpu4oEQzjdg5qEdqlb5s+1RDkGgC3GfkFQ3C5TPpToW3Lj0qSQAoR60AfSXwM106p4I+x O2ZbCTy+epB5Feo181/ALWxY+KrnTHJ2Xkfy/wC8K+lKBoKKKKACiiigAooooAKKKKACiiigArmP EXjzRPC+oR2WpyTrNJEJVEcRYbSSP5qa6evLfFEUc3xw8OxyxrIjWYyrgEHmbtQdeCowqzaqbJN6 eSNiL4u+EZZArXdxED/E9u2B+WTXZWd5bahaRXdnOk9vKu5JEOQwrnvFdj4at/Dt8dTtbCKMQsVJ RFfdg42992emK5b4d3F34c+Feoapdo2xWlubaN+MrtAH4Fgf596DeWHo1KPtKKad0rPW9+2iOv8A EfjjQvC7CLULom5IyLeFd749SOg/EisC0+Mvha5mEcq39qp/jmhBX/x1mP6Vm/C7w1DqdrP4r1mN by+u52MLTKGCgHBYA8ZLZHsF4r0fUdJsNXtmttQs4bmFhjbIucfQ9QfcUDqwwlCfspJya3adtfJW /Mls7y21C0iu7OdJ7eUbkkQ5DCrFZ+jaTb6FpMGm2hc28GQm85IBYnGfxrQoPOny8z5dugx3WNGd 2CqoySTgAVm+H/EFh4l0432nM7QCQx5dNpyMdvxFYPjjwjJ4ghmujrd9awRWpDWkT/upCu5skZxk 5x+ArP8Agz/yIz/9fkn/AKCtB1rD0/qrrKV5JrTte/3nX69r1j4c0xtQ1BnWBWCEou45PTiuW/4X B4T/AOe13/34NHxg/wCRBl/6+Iv51f8AD114Wm0bTbfz9He6+zRK8e+Ivu2Dgjrmg1pUaKw6qzi5 NtrR9reTNXw54n03xTZy3WmNI0UUnlt5ibTuwD/WsjXviToGg6g2nyG5u7tDiSK0jDlD6EkgZ9ga 3dReHRNC1C8tbeKMW9vJPtRAoJVSecfSuI+DenRjw7davKA97eXLhpm5baMcZ+u4n8KCKdKg4Try T5U0kr9X3dv0Oq8NeMdH8VxOdNmbzYxmSCVdsiD1x0I9wTS+JfGGk+FPsv8Aajyr9p3eX5ce77uM 5/76FcP4lSPw78ZNBv7RViGo7Yp1XgOWYoSfzU/UZqX4smMa/wCDjMUEQu33l/u43RZzntQbwwdK dena/JNN+eiel/VGr/wuDwn/AM9rv/vwa7HS9St9Y0y31C0LG3nTehYYOPpVCzfwxqL7LJtIuX/u wGJz+lbEcaQxrHGioijAVRgD8KDixHsbWhBp+b/4CH0UUUHMFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFZfiG9TT/D1/cyHCpC3J9SMVqV5b8XvFtta6WfDNrun1K/H+qjGSi56n8RQBj/B/TXvNXn1Q geTAm0Z7s1e1Vxfww0GfQfB0EV3D5VzKTI6nqAemfwrs6mKsgFoooqgCuJ+IfxBtvAlhC727T3Nw SIkHA49TXbVj694Z0jxNbJBq9klzHG25d3UGhid+h806/wDFjX/EDbXvjaW//PKA7fzPeuNk1JSx bzApPVu5r6q/4VL4JH/MEi/M04fCjwUv/MDh/M1i6V92Yuhd3kz5QhnRpNzMTnvVlzuJx0ruPi78 OrfwdqNvqGkRummXR2shORFJ6D2NcJG37sAhicc1lUhZ6GNWnyvQZLG5KgMVHtTIwYrhck4PGank IZFZc8HvUMrfMrDkA1Kb2Ii3axbLxAACedcetWNOuvs+qWVwszExzoRntyKql2OAZ0Ax90jpSln8 s5ljOORgc0mSfaVtKJ7WKVSCHQMD9RU1cz8P77+0fAukzltzeQqsfcV01dqd1c9FO6uFFFFMYUUU UAJimSwxzptlRXX0IqSigCk2kaew5s4v++ahHh/SRKJBYQbx0O2tOigBgRQoXaMDoMdKXy1/uinU UAM8pPSjyk9KfRQAzyl9KTyRUlFAERhFNMFT0UAU3tsiq72Rx0rT/Cj8KAMOWxJXpWfLYsT92uqd QR0qjJHyeBSZSZzb2B9KhfT2IPHSujMYyeBUTRgZ4qSjx34k6FIEgvY42ZQMMVGcVwUOmyXSkwfM wGcd6+k7i3iliaOWNZI24KsK8l+I9lD4ZuLa70tPKdmBZOzVaJaPOJEKyMjKVdeoNM2jFdTrFrBr ukx63YKFmUAXEY7VzHUZFUSMIB7UFRTsc80YoGMYKB0q3DpNxPAZlX5KgVNzgV1vh6xn1W8h0+Fi EY/OfagRn6HopvL6GzX/AFjsPm9K9ht/B7R2q2xumwBjOasaV4P07TJlmjUmZO59a6aOMjBOMmhp PcV30OTb4eWE+0zXEu8d1fFJ/wAK0tc/utSuU/7aGu3CdOKkWPnOK0VRrYhxucIfhzcj/U63cDHT LmlHgbxBGuIdekz2ya77yxTwmF70/bSDkR57/wAI14ztx+71YSfWnfYvHsP3ZYpPqBXoO33NPCn1 P50Oq+ociPPVuPHsLfNZwyD2ApG17xrCcNoiOB6CvRwD60YPrS9quyDk8zzf/hLvFCD5/DpP0FOH jfW1GH8OSZ9hXo2Of/rUm0H+Ffyo9ov5Q5H3PO/+E81Efe8OT/lQfHtz/F4duPyr0Mon9xfypDGv /PNP++aPaR/lDkfc86bx3OwwPDtx+VQyeMbqQYXw9MD9K9JMQ/55p/3zTSnoif8AfNPnj/KLkfc8 pm1nVblSE8PMVPZhWd/ZutXL7ovD0KZ7lRXshVs8Bf8Avmoykh7/AKU+ePSI+V9zyiHwr4jlYEQW 9v6EKMirV18Or/UbctqWoNcTAfu1J4Br0vym7k0oi56Ue2a2Dk7ngj/CnxCszMIEOTxg1bi+E/iD YCUQMevPSvd4w4HBqwucZJNZSk27s0tY4jwL8PrfworXMzebfSj5n/u/Su4opagAooooAKKKKACk NLQelADP4s1y3i3wrJrkDvZyiK4ZNpNdTxmgdaE7CcVJWZ89P+z/AKi7M5vV3scms2++A3iK3INt LHMpPIzX0vnmgHk0+ZiULHzWvwG18whzLGHI+7npXQ6J8AIxaltVu8zHsvavdAfek6mjmYcp48fg DpB/5eX/ADoHwB0jvcv+dewjHNAxRzMORHkH/CgtH/5+X/Oj/hQOj9rl/wA69fB5oB5NHMw5EePf 8KB0j/n5f86P+FAaR/z9P+dewCl70czDkR48PgBpH/P0/wCZpP8AhQGkf8/T/ma9iGMmgY9aOZi5 EeO/8M/6T/z9v+ZpD+z9pX/P2/517HxzQO9HMx8iPGx+z9pX/P3J+dA/Z+0r/n7f869k4oBFF2HI jxs/s/aV/wA/b/nR/wAM/aV/z9v+dex560oo5mLkR43/AMM/aV/z9v8AnSH9n3S+14/517KCDmjp RzMORHjX/DPul4/4/H/M0n/DPumf8/j/AJ17KMUoNF2PkR4x/wAM+aZ/z+v+dH/DPmmdr1/zNezd 6Ud6LsORHi//AAz5pv8Az+v+dIf2e9O/5/X/ADr2kYoFF2HIjxRv2erA/dv3pn/DPNkf+X969uGP egYouw5EfM+rfBLxBDdtBYQq8K9JC3Wsxvgt4tA4tgfxr6rBOOtAPvT5g5fM+TH+DfjMfdsx+dNP wd8aAf8AHiD+NfW2T0zzSBj3pcwWfc+Y9A+COuzCa71nbbQwqWWMHJaq8elpBI0an5QxH0r6gnMf kOszqqMpBLHHFfM940Vl4x1GwjuBLHv3IVORXVhZatM8/MoSdO66Crpmf4hQdMA/iBrSjRDjNW0g hK8D616DSPnVOXcw/wCzRs6g1HNppWFjkdK6XyIMcDmlNrb7enJ7UaFKcjrfhBNZnSpoQqi8Rjuz 1xXpWOK+fdE1N/DPiyC5ViIJWCyDtXv8MyTwpPGQUkUMK8zEw5Z37n0eX1lUpW6okxjijtR1FAA5 rnO8VadTVp1ABRRRQAUUUUAUtVuhZaTd3J/5ZxMw+uOK8GJLOTXrfj+8+zeGmiBw08ip+HU/yryV ehPqalnn4uXvJFLVY1lsJUboyEfpXmNtKUcoTzmvRNcuPLiC56mvOp0xfybem/IpIMJs0eu/Ca9I XUoG5UiNwPfkV6vFMF8pgFAySfwFeQfDW3e0srq5kRgZmUKMdQP/ANdd3d6mIrdjnBVDxUyep3xW hyXj/wAdXJaaG2kaK1VsKqnBc+9eSxzy6tqcCXMjFZJACM9ATV/xXffbL9UU/IoJ/E1j2DEajbbO W81cfnVpaEy2Z6vGqJEiRgKigKqjoBS4AoACgAUtSeGJSUcUdqACkzRRQAU0tgEk4A9acaqXQMrJ F/CeW9/akAjzvK2yA/L3cj+Qp50+U2zGdmaJmGd5zz24qRpRYxo6gFz90HtWfcXMkxLSOTnk5NMp RuWzZ2ULlN8ZIA5HSkKWQ/un6CssyrnrTllXsaCvZmkY7H1H5UGOxHcf981QEi+vFLuX1oDkLvk2 J7/+O0qwWJ6sox7VSDj1oLjHWgOQum3sQeo9uKFt7FmxlR7kVR8zPGaN47GgOQvfZ7D+8uPpQtvY tnLKMdMjrVDeo78Ubl9aA5C+1tYqoJZcnsOak+zWAlEZlj6ZLY4FZZkT1pplX1FA+Q03gsFj3F1J 7ADrStbWiyBE+ckA8DpWQ0y+tNFxsYFXwfUUWDkNr+zYZ1/dnnGSDwR+dVZILuyYmNi6jrG1VluG c7jIxb1J5rRt7lpsxyHccZDUCcbC2863Ee9QQejKeoNS1Wij8u7cr0deR71azSIegfhSGlpKBBRS ZpaYC/nUV1j7BcBhkFCDUlVtTk2adMfagpbnmRkCsRuIIp6T4/jFQXEZWV/941EK0PbTujTS7IHD D86d9qJ71lgntThu9aB3Lv2kkkV2mgIE02LAxlRXDWyFtxPpXoGirtsIh/sj+VRI4cZK6SNNc4J6 VJY83n/AjUfOKn0z5rtfdjSRxxPoGxXZYWy+kSj9BTdQu0sNOubxyNsETSHPsM1PCNsMa+igVyXx K1D7F4QliU4e6kWEfTqf0H61bPYk+WNzxUyNNM80p+d3LsT3PWpfBC+Zqusaq/SFPKTjv1P9KgiA Zhu+6Bk1o6BG1j4TlJGDeXbleMHb0/oKUdzz6W7Og0g+XZ3t0OqxkA/X/IpdOjSOyvZ2H3ISo/EV LLczNoEfmsv70qiqqBcAden0qa6S3g0KQW8ryCR1DM67cnjp+FLe/mdiVreSM6wU3lvdNNGHjhgO 0HgB8cH9DU2gQkTzXMjY8qM4PoSOv5ZqWMfZvDkzdGuJNo+nT/GnpHJZ6NcPJG0ZlwF3DGe39abd 7kxVmvvINBtEN4ZmGRGpbJ9fWjSo1a/EuOFJcf0/nVq3MNtos8scjNKyYYFcBewAPeorWd49LkAE YVBjIX5mJ96H1KivhXzMfXJI5LKZJM/vM8Hvubp+SmucEMKx7VhQADgBRgUniu/b+1bSxRiAX5x3 xgD9d1PPHFKRx178xEbeBusMZ+qCmGytCebWD/v2KsAA9SABySewqEi4uzttQyL/AHsZJ9/YVJhd koAUYAAA7Cg47iqk1jgJ5t22WXcD5namraED5bx/++6LAXgPalqibWcfdvn/AAenLZ3wxtu2P4g0 WGWZYkmjKSIroeoYZFaqa09j4b1dZJjva3EcWTz8xAP6Vh/ZdTXpJn6oDUV1aX1zAYZ4VdD6KQQf XiufEYaFdLn6NP8AE6sLip0G7PR7mI2qy7AAu1QOB6VbtIru8t9+Cuehc4zSQ6I1tcCVopLjH3Vm yAv4d60/NvNvNsn/AH1XU32KqYr+QxrmC8thl4CV/vAbh+lRJcRsOR+Vb/2i8H/Lsv8A33VeW3ju DmbTEyf4lbBouKOLf2kZoeEn72D7in+Zbr1ZatHRrZs4ilj+kpP8xUL+H1Y5SaTHoSP8KLo1WKpk JuIB0cUhuoD/ABD8ql/4Rxv+ez/99D/Cnjw+FXnc31k/+tTuh/WaZHHPE5O1h+VSNKpUKZMgdic0 Q2VjDcLDPbukjcKzSEq1ai2dsnCwRj/gNK5LxUVsjGaxtrlTkKT/ALPWq0uj3E5WKFdqHq7jAFdO qKvQAfQUtK5jPEt7Ip2FhHYWwiTk9WY9Sakm5uIF9y35CrGKhYZu0PohP60HPdt3ZYVtkUrei1zW tn540/uxqK6OU4tJD3OBXM62c38gHYgfkKEVT3JUImtgnYLwKopEnmfMin8KktmdItw6kY+lNYOT nNUdSY27ZVj2KAuewFdBpiYi+igVzUqs2zP94CursVwjflSZnWehoWQ3apCOuMf1r6M0iPytGskP UQp/KvnjSU36uo9B/Svo61XZaQpjG1FH6U4mmEW7Jq+HPM5NfcdfCXmc9a6KU+W5rWjzWLYfpW7a aHJLCJJmKk8hR2HvVDw3Zf2jqahhmOIb2/pXfGHAraVVpGKpX3OW/sDJ+WQ/lTh4eP8Az1P5V1Kw cZp/k8VPt5D9jE5UeH3x/rT+VOHh98/60/lXVeRTlg9qPrEhewicoNAb/nt+lO/4R98f679K6wQC nC2prESD6vE5IeHn/wCev6U4eHX/AOe36V1vkD8acLfFL6xIPq0TkP8AhHX/AOex/Knf8I4//Pb/ AMdrrvI560v2f2o+sTH9Wgch/wAI4+P9d+lOHht/+e5/Kuv8gDtSiD2p/WJC+qwOP/4Rx/8AnueP al/4Rx+036V1/kU77PS+syD6rDscf/wjj4/1x/Kl/wCEbf8A57fpXX/ZxSi3HpR9ZkH1WBx//CNv /wA9z+VKfDbckzn/AL5rsPs49KX7OPSj6zPuH1WBx/8Awjb8/vz/AN80v/CNv/z2J/4DXYC368Uf Z/aj6zPuH1SByA8Nvn/X/wDjtA8Nvn/Xkf8AAa6/yB6Uv2en9Zn3D6rDscf/AMI0/wDz3z+FL/wj TZ/15/75rrvI9qd5HtR9ZmH1SByH/CNtn/Xn/vmj/hG3/wCe5/75rr/s49KUW46UfWp9w+qQOP8A +Eab/nuf++aP+Ebb/nufyrsPs+O1H2celL61PuH1SHY4/wD4Rtv+e5/Kl/4Rtsf648e1df8AZ8Uv 2f2p/Wp9w+qQ7HHjw23/AD3P/fNH/CON/wA9j+Vdf9n9qDb4GaPrMxfVIHIf8I43/Pc5/wB2j/hH Gznzm/KuvFuD2o+z+1H1mfcf1SHY5IeHmGP3xP4U4aCwP+uP5V1gg9qTyOlP6zPuS8HDscwNHYD/ AFn6Uv8AZL4+/wDpXS/Z+aQwc9KaxU+4vqUOxzq6S4ODJ9OKS702W1h80NuQY3HHTPQ/Sul8jK9O anjtFuIJYG5DqV/McfrTji5qSu9BSwUOV2Wpw27jng0biPrSMChIJ5HBpuTzzXqHjjt/fFAbjp+F MzntRnJoAeG9aC36U2kDc8daQDwe1BOKZnjnrSZx16UDH5wPWkLZ4ApucikzQA/2pCaQnmjigANN zxSnpQeBSAYTSe1B44pMUDQmfrX0V8N/+Sf6V/uyf+jGr50Jr6L+G/8AyT/Sv92T/wBGNXFjfgXq ehl/8R+h1VeYfHD/AJFjTv8Ar8/9kavT68w+OH/Isad/1+f+yNXmH02V/wC+U/UTQvi54dtdCs7a 7jvYZ7eBImURBgxVQMgg+3fFYUE1z8VPiBa3a2ssOiaeQTv9Ac4J6bmOBgdB9M16Rpvh3RdU8P6T Nf6VZXMos4f3ksKs33B3xmt+1tLayt1gtLeK3hX7scSBFH0A4oN5YuhRcpUYNTd1dvb0PMPjl/yB dK/6+G/9BqX4maTdaj8OtMubZHcWQjllRf7hTBbHtx+Ga9Kntbe6ULcQRTAHIEiBsfnUgUKoUABQ MAAcYoMaePdONJRWsG363PL9D+L2gW/h+0hvYrqO6ghWNo44gwYqAMqcgYOO+K5SbXLnxF8WdC1K ewkso5JYPIjk+80e44Y/Xn/6/WvZV8K+H0vPta6Jp4nzu3i3XOfXp1960XtLaSdZ3t4mmXG2RkBY fQ0G0cdhqUpSpU3eSa1e1+xyXivx/H4Q161tb6yllsbiDf50P3kfcQRg8EYx3BHvVHVPix4TbSLh Yp5rqSSJlFv9nYZJGMEsAMfia7y5tbe8hMN1BFPEeqSoGU/gazIPCXh22uBPDoenJKDkMtsnyn24 4/Cg5qVXCcq9pB8y7Pf+vI4n4R+H7u28K6jLeRtCmpECJXGCUCkbvodxx9K5z4deKLLwPd6to3iH zLR/OB3+WWCsuQQQATjoQRXuVZ2o6DpGrOr6jplpdOowHmhVmA9ASM4oNv7QjUlU9tH3Z223Vtji fGXiPTvE/wAK9cvNMd5IIpYoSzoVywkiPAPOMMKk8FaSmu/Bi30uRtouYp0Df3W818H8Dg129vpW nWlmbO3sLWG1Y5MMcKqhPrtAxngflViKGKCIRQxpHGvRUUAD8BQZPFxjR9lSTVpcyfyseL+C/GL+ AZLnw34mtp4Y45C8ciru2Z68d1OMgj19+Oovvi5ozTQWmjRz3t1PKsaFoisa5YAk5wTx2A/Ku4v9 K0/VIxHqFjbXSDoJ4lfH0yOKi0/QNI0py+n6XZ2rnq8UKqx/EDNBrUxWFqy9rOm+Z72ejffuaNFF FB5Z498Jf+Rz8Sfj/wCjDXe/ED/kQda/69z/ADFbsNpbW7s8NvFG7feZEAJ+uKkkjSaNo5UV0bgq wyD+FB3V8YquJVe21tPQ8++FlpFf/DN7OYExXDzxOB/dbg/oa5bwt4gk+GOs6h4f16Gb7FJL5kU6 JxnGN4HcMAvTpj617TDBDbx+XBEkSddqKFH5Cob7TbHU4RFf2VvdRjkJPEHA/A0Gix0ZTqe0jeE3 e19V6HlnjT4l2Wt6Q+h+G0uLu5vv3LOIiuFPUKDySenT1rZtA/ww+FvmTRiS/J3sg5UTPwAfYAAH 1xXZ6foOkaSxfT9MtLVzwXhhVWP4gZq7NBDcR+XPEkqddrqGH5GgU8XRUY0qcPcTu7vVngXgTxZo Gh395rWuNeXWsXDth1iDBFPJOSR8xP5D6mvRtP8Ai14c1LUrWxgjvhNczJCm6FQNzEAZ+bpk1139 kab/ANA60/78L/hTk0vT43V0sbVXU5VlhUEH1HFBeIxmGryc5Qd/XRfgfP8A448WJ4l8XbLsyppN lIY44VHLYOGbr1OPwGK6m0+J3h+2so4Fiu1CLgKsK4H05rs/Gmn2CaZA4tLdWa6XcwiUE8N14rJi Ww8lUjsbfPdzEv6cVEjSeNw1SEYSg7RWmv8AwDmfGeqW+s/D8ahahxDLMu0OMHhiD+oNaGlaWus/ Da3sGYKZrXCsegYHKn8wK30toGgELQRmMdI9o2j8KtRRpEgREVEA4UDAFCZzSxaVJU6ataXMv0PN PCvixvCIk0LXreeNInJjdRnZnnGO6k5II9a3tR+J2h28B+wie8mI+VQhRc+5PP5A11N1YWV+gW8t ILhR0EsYbH5iobTRNJsZBJaabaQydnSIBvzxTua1MThKsva1Kb5nuk9G/wAyXTbmS80mzup0CSzQ JI6AEbWKgkYPuamYZ9qf0Oc0xueDRc82TTbaJbQHZc88+Sa29D/5AloexTP5nNYVvN5UU6BNzyJt XJ6Ctrw/Msuh2oDhmjTY4HYjjBoRJqUUUVQBRRSUALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFAwooooAKKKKACiiigAoorlvE3j3R/Cd7Daait0ZJY/MXyYwwxkjuR6UGlKlOrLlg rs6mivP4fjF4Vkfa7XsQ/vPBkfoSa7aw1C01SyivLG4Se2lGUkQ5B/8Ar+1BdXDVqOtSLRaormfE njvQvCziG/uHe6Iz9ngXe+PU8gD8SKwLf4y+HpJ1S6tNRtEb7skkQK49ThifyBoLp4LEVI88YNo9 FoqtY31tqVlFeWcyzW8q7kkXowqzQczTTswopkkiQxvLIwREUszMcAAdSayvDniOx8UaYdQ08SiE SGP96oU5GD6n1oGoScXJLRGxRWT4h8QWfhnSm1K/EpgV1QiJQzZPTjIrkv8Ahc/hf/nnqP8A35X/ AOKoNqWEr1o81OLaPQ6KxfDXiaw8V6dJfacswhjmMJ85Qp3AA9ieMMKxda+Jmi6RqcmmxQ3moXcR IkSzjDBCOoJJHI9s0Cjha0pumou638jtKK57wz4y0jxZFKdOlkWaL/WW8yhZFHrjJBH0Jqv4m8f6 H4UuVtb555LpkDiGCPJ2nocnA7HvQCw1Z1PZKL5ux1NFcJpHxX8Panfx2UyXdhPIQqm6jAUk9BkE 4/HFd3QTWoVaLtUjYKKKKDIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigDP1fRrHXLE2eoQLNCecHsfUVzA+FXhpc+XBImf7rV29GKiVOM/iVzWnXqU/gk0cK3wr0LOU e4X/AIEP8KqT/CTTHRvLvblWx8pJGAa9Fo7Vn9Vo/wAqNVjsSvts+Y/EllfeEdZOm6vApik5t7pB 8sg/xqgbiKRfkYV7d8W/Do1/wPcvGoNzZ/v4jjnjqK+Zre5ddmCa8/EYKEXeGh7uAx0q0bT3Ous2 23Semc0XBZ5mZjuZjyTUFnKdqOOtWZxtkP8AtcivNatI9UzL5Sqhx1U1OrAqCO4onTdGw9ar2rFo ACeVOK13iLqXFyCK17VsqMGsZD3rSsmziuastBo9f+Gd+XsriwY8xHeoPoa74dK8h+HtyYfEqR54 mQqfwr16vey2pz4dX6aHyeZ0+TEy89RaKKK7zzwooooAKKKKACiiigAqG6JFpMQSCI2II+lTVDd/ 8eU//XNv5UDjujxTwN4Z1bxhok2oSeK9TtTHctBsWR3zhVbOdw/vfpVvVH8TfDTWtMkfX59V067k KNFcFicAjIwScHB4IPUdKzvh3q/i+w8PzxaBoUF/aG6ZnlkbBD7EBX7w7BT+NT3ur6hN4x0y7+Id hPZ2Vu2bWOGL9yHyDljkkjgZwT09KR9TUjUeInGXK4a+7pfbot7noPxA8YHwnoyG2VZNRumMdsjD IHqxHfGRx6kVzVj8M9W1yBb7xR4iv/tUo3eRE/EWe2Tx+AAAqPxqq3vxi8L20hD24jjlC9QT5jn8 jtFesUzyZVHhKFP2WkpK7fXfRHnGleEfE/hbxBYmw1ue/wBFeULcQTHmNcHnBJGM45XB9sV6PRXF z/FTwlbzyQyX8oeNijD7O55Bwe1BzSdfGO6jdrey/Ox2LsUjZlUsQCQB3rxjxb4y8R32o6Pby6Re 6HbG6U5d2DTHIBGcDgA9OetetaNrNlr+mR6hp0hktpCwVihUkg4PB9xXAfF3/j98Lf8AX6f5pQdG WpRxPs6kNdd+lk+n+Z6fXkGvWeo6/wDFy60WHW72wg+zrIPJkbAIQH7oIHevX6811vwp4rf4hXPi DQpbGEPCsSPctn+AA8AH0oIy6cYTm20nyuzffQX/AIVbqX/Q76t/49/8XWn8S/E934e0KGHTSRqN /J5MLAZKjuR78gD61if8Jt4o8Ka1a2fjC0tXsrptq3dtxt9T7gZGRgGofikxbxl4QiYEoLjPPQ5k TP8AIUHZCnVqYin9YalHVq1rOy8vNE8vwsuodKa9h8Rao2vrHv8ANE/yNJjOBxu9s5/DtXQfDfxR N4o8MLLeMGvbZzDM2Mb+AQ2PcH8wa7CvGfh3rEXh628bX0ys9vZyxuI16k7pABn34FBjGdTGYepz 6yi42+btY9C8Y+K4fC+mqUj+0ajcny7O1UZMj9Og5wMj9B3rifhrd643jzWrTWryaa4jgLSRtKWR HLKcAdBjOOKPCOpaNe6rJ4s8Ta3p/wDac3FtatMuLSPtx2OPyyc8k4g8La/pMHxW8RXsuo2yWtwh WGVpAFkO5eAe/Skbww/sqNWko3dtXbrdaLyX4nsNFFFM8IKKKKACiiigAooooAKKKKACiiigAqrq ENxPZyR2swhmI+VyOlWsUUAeW3vgXxbq1y6XGtQwWzHlkUlyPzrsvDHhHTfCtoY7NC878yzycu5+ tdBSYoAWiiigAoopkkscMbSSuqIoyWY4AoAdVHWNRt9L0u4urqVUjRCeT1OK4bxV8W9K0ZZINOxd 3IyN2cIvvnvXiviLx3qviGZmmd5s9FHCL+FNIRzniW4N5rc9wBjzGJAqikbJBlhgnmnyCRrjzZ2B b0HalmcuCzdT6UmBTJ5qPocVIfpS7goGcCgB0XyjJ71N1quHVsYNTL0xQM0/CGpPo3jLTbyNtpjn XP0PFfaAYMAwOQeQa+F3JjmSQEgqwP5Gvs/wle/2j4S0u7LbjLboxPvigRtUUUUDCiiigAooooAK KKKACiiigAryDx/o9vr/AMW9E0u6eVILiyCu0RAYYaU8ZBHb0r1+vKfHS6tYfE3SdcsNDvtSitbM AiCJypbdIMbgpwcMDQejljarPldnyu3rbQnuPglohgb7JqWoxXGPkeVkdQfcBQf1rIs9c1XXPh54 r0TU38690pP9b3ZFYkg+uNh59DWxN468bahG0Gm+B7u0nYbVludxCk9/mVR+ZxWv4C8FSeH9KvW1 Zknv9SObkA7gF5+XPc/M2T7+2aR2yrVadJyxUk5JpxV03o9duliT4V3Mdx8PNOWPG6EyRuB2bex/ kQfxrs68gt9P8T/DHVrr+y9Pl1jQbh9/lx5Lp9cAlSBwTjBwPw0ZfiXruop9n0PwhfG6YY3zqxRD 6nAH6kUzmxGCnWqyq0WnGTve60v37WOj8Xp4xeW0PhaW2RAref5wXk8bcZB96p+GI/H66yp8RT2j 6fsbIiCbt3boAa6Hw3HqkXh+0XWn36ltLTnIPzFiccccAgccVrUHK6/JB0eWLtdXtr63/Ip6t/yB r7/r3k/9BNcR8Gf+RGf/AK/JP/QVrS8Y+JdS0uR9Ns/DWoamlxakm4tkYqhbcu04U8jAPXvXG+Ad a13wxpUekTeD9XlElyXM/kuiqG2jkFO2M0HVRw9R4OaVtWmtVsr+Z6lrWiWHiDTzY6lCZrYuHKBy uSOnIINcrq3wn8MXemyxWVibO6CHypo5XOGxxkMSCM9e/vWr4w1bXdFtrW70XSzqKiQi5hVSW244 IxznPsfpXIX/AMRtc1fT5dO0nwpqEWoTqYi7gkRZ4J+6PzOAKCMJTxfKpUZWjfva3qrlfwjq17rn wj8QWl1K8stnBNHG7HLFPL3BT685H0x6V0PwgYN4AgAAG2eUHHfnPP51d8CeEf8AhGvCjafehJLi 6ZpLkA5AyMbc9wAPzJrkdFu9X+GF1faVeaPeahpEsxmtrm1XdjIxz2yQBkEjBB65oOmq4YhVqVH+ ZNefR2/Mn+JQNx8QPCFsg+fz1OfYyr/ga7zXfCujeJXtm1e0+0/Zt3lDzGUDdjP3SM/dFcToWn6v 4w8exeKtU06XT9Psk2WkE4w7kZwcEA9WLZ+g5rZ8U+KPEfhzXFNtoEmpaO0SkvCp3o+TnkA4GMdR +NBnUjUvSo0pWnFPrbVva/c5/wAffD/RtH8PTa5occmn3lkyyAxysQw3AdycEZyCK7rwdqk+teEd M1C5wZ5Yf3hH8TAlSfxxn8a8817xB4i+IVmND0fw/dWdtK6m4uLnIXAOcE4wBnB7k46V6homlRaH olnpkB3R20Qj3EY3HufxOT+NBOMc44aMK7vO/e7St1+ZoUUUUHlBRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABXP2XgzRLLX7rW1tBJf3By0snzFfp6V0FFACCloooAKKKKACiiigAooooA8z+Odq1x8Op nVc+TKrk+lfONpIdmDdCIe65r648daadX8E6rZAZMkBx+HP9K+RLJ3Viv7vIyD5grCstjnroklO7 cDMsvcEDFVnHyHrVyYOQwPkf8Aqp/Bj86x6nMiWN28sFQhyP4qkBcggxRnjqDVaH5o/9XvOfWpUQ ZGbZ/qDQ0No+jfgdqQuvBJtGbL20zDHoD0r0+vCPgFfKmoavYsSC6o6qfbOa937V1U3eKOyk7wQU UUVZoFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAHkVXeME9KsUhAoGnYoPH1IqFkG2t CRBtqq69sVJaZTePJAx3rxb4w3iS6vbWaHJQZNe3NwQxHSvIviR4G1O/1gappwEyMvzL3FO4M878 OaodL1LypebSf5XU9Kfr+mDTdRIj5gk+ZCPQ1BP4d1mIlGsZNwPYV0k2mXOoeFFW4jKX1uOFbqRT RBxxwOKQ0Ifl+Ycjgg+tBzVCJIuHya9X+Etgs9xcXbAEoMCvKEYg/hXtPwYZW0+8XHzZFCA9FWDq fWp0h5GBTwMVMoGaBDRHjFPCDNPUc07HNFwIwlKEyKf07U7GKVxkW3FOUYp2KWi4BRRRSAKKKKAC iiigBMUbRS0UAN2ijYKdRRcBnlrQIwKfRRcBMAdqWiigAooooAKKKKACiiigAoNFBoAZznpQOvSg E560c5oABnPSgZ9KBnPWjPPWgBRnPSgZz0ozz1pBwTjmgABPPFKufSgcigfWgBMHPSgZyeKATmlB OTQAgz6UAe1KCaOc0AICc9KBnnilGcmkGcmgBRn0pPoKUGkGfWgAGfSlH0pBn1oGaAAZ5oGfSjJo oABn0o5z0peeeaQE880AAznpSjPpSAnNKCTQAnOelAz6Uc5NAzQAo7nFAz6Ugz60ZOOtACjOOlIM +lAzSj60AIM+lA4PNKM803npQB4X8T5fHPhXXP7bstSkfSywwi9F9jWnYfHTTj4QN1cxk6ui7RAB 98+teoa/pcOtaFd2E6BkljIGR0NfG95p7aZrl3ZkDfBIQM+lWlchto6PWvGPiXxNO0uo6hJDCxyk EbY2ismzkWHVYOWLk8sxyTTY3DuPXvTbn93fWz5GdwrWDs0YzvOLi+p6LE3yqfarcbYFZ9s5MKnu RVqNuPevTZ8na25cDZHTinBvlJqsCQuTTsnHB470DTKuqQefaFgPmXkV6h8MdeOq6D9jmbM9txye orzmQZjOe4p/gjU20XxlGhYiKc7SO1YYiHPT9DvwFb2VXyZ74M4pRnHSjrkg9aATivLPpRVz3p1I tLQAUUUUAFFFFAHm/wATLwNcWdmG+4pkYfXj+lcEuNoro/H0jP4luG5O1QoGfQVyttIsm5gTtJP4 e1Qzya8rzZz3iKYAH2qr4L0q21LXY5LlBIoO4IenHrWtrOgy6gubedEJ6hwak8OafeaDc+cfJkbG MBjj+VCNcPOEVqz1SCFFJCxqoUYGBjFJdWME8TCZflwcn2rm4fEl5ETmGJgevNTXHieWaxnhECrI 8bIrBuhI61Njr+sU+54p4gjQ6jL5P3d5A+mal8OWXm6vb5GQrbj+Fadx4Rv53ybiAZPJyf8ACt3R tEh0eM/vDLOwwZCMAD0Aqr6GFavHlsmaueaTvRmgUjzRQB60lBNFACUUH6UUAIarnm7b/ZAFSzTp CuWPPZe5NRW6NtLv99jk0ARX8bEJIM4Xg+1ZsjZFb5HaqkunQS5OCh/2aRpCaW5hM/NOV61DosRJ /ev+QoGjRD/lq/6UzTniUFenh6vDSY/+er/lTv7Lj/56NQLniUd3egN6Vf8A7NT/AJ6N+VL/AGen 98/lQHPEz91IX5q//Zyf89Go/s5P77UC54lDdTSxFaP9mx/32pp0yM/8tHoHzxM4tkVGWrVOlRH/ AJaP+lNOkRf89H/SgOeJkF6YW54rZOjQkf62QflSDRbfPLyH8QKLj9pEzI3zW1ZQtEhkcYZhgD0F PhsoLc5SMbh3JyanNBnKd9iNBumY+gxUuMVU8/yLja/CPwG7A1az70iWLSUtJTJEpRRRigYVU1CF riykiT7xHHuat0EUB1PNru2dGYSIUYZyCMVmlOTXq0kMcgw8at/vDNQHTrInm0h/74FPmOuGL5Vq jzALmpAMCvS/7Nsf+fOH/vgUo06yHItIf++BRzF/W0+hw+lWE15lY0OD1bsK7u1gEEKRjsOtSJGi KAiBR6AYqQCluc1So5sOtWdETzb2Bf7zj+dULmcRoqqwLHoo71seF4i2qWinr5iD9RTQoLU98AwA K8p+Lt4WvtOsR91I2mP1Y4H/AKCa9Xrx34s/8jRaD/pzX/0N6p7Hp4h2ps4KV/LtJpO+MCujli8q y060H/LKBSR7kZrnnia5e0tVGfOmUH6Zya6pkMmrfOCEMoQH6cUR7nHRX4lvVsRmztlH+rj3H69P 8an1N1hhsbRhuRfndc4z/nmoJh9r17P/ACzaRI1btinX4a71sIASgKxA9uvNJLY62/ia9CbWHUWt nGkIhQksqZzx6/jmodQd/sFqjyO7udx3HOABxS6uzT6mqqp2qoUHtyf/ANVGr5FzGig7YkxnsP8A OKF0CT+J/ILkmPQoIv8AnrJuI9h/kUwrt0+GPjMr5P0z/wDWp+qcPbxLyscQ5HTkVHKx2x8cRxZ/ HH/6qXRFdX5Kxw+rWEUuswXpaTzBkbSRjHJz+Zp5NW9XVF1N40UYi43Bs5PGapZNEmm9Dzql+bVi TDdGE7MwzRdXLRIttEdqlQz47n0prN+/RfQZqtqZBuWK5xtHX6UiYq7KMkg8zGfzNPDgjqPzqk5w 9SI/FM35dC4Dx979acJGHRj+dVg1LkUCsWhO4/iP51ILmTqJWH41SyKN3vQHKXReTDpK350/7fcA D94TWfu9zSmQ46mgXKi//aE/94H6ikN/KD0X8qz959TSFz60ByovnUZueE/75pn9ozgdV/75qgXP qajMh/vGgfIjQbUrggjzMZ9BQdZusgeYAAMYA68Y5rJeQ/3jUW87s5NBSgjocpfWLiQfMvf0PUGr aBgig9cDNUbFCNO3Z5kJP9K0u5pGMtNBNvGaTNO/hxSbTQQIAD1qJRm6f/ZQD+dTgYqCE5urgdxt /LFA0Sy/6pF/vSAVymqtvvpj6ua6yYgTQR/xDMh+nauNu233DH1OaaNKe5aWMCFB3xRsNWlXai9+ KaU9OKDdFIx/vol65cV01lwhPqawVUm9gH+0T+lbunyxzQIyHvg59aGZ1TZ8Mx+brZHX5gP1xX0a OBXgHgOMTa3GcfemUf8Aj1e/1SOjCr3WFfBWTmvvWvgruapHQz0TwJY7dLmuiOZZNoPsP/1mupMe SKq+GLT7P4cskI5MYY/jz/WtQJ83Srk9SIogEOAOKd5XGKtCPnpThHUXKSKYj9qURn0q35dL5fPS i4WK6xmnhOKnEdSeXQOxXEfOcUuw1YEfFO8ugCts9qUJ6VZ8ul8v2pXAriPtil8s96shKUR0DKwj OaXYas7KXy/agCsEOKUR5FWAntS7PagCt5dKEqzs9qBHSArhKNlWRHS+VQBV8ul2H0q15f50eXx0 pgVQmO1Ls9qtCOl8s+lAFXy8ijyyDVry/ajyqAKuzil2GrIj9qXy/agCrsNHl1a8v2o8v2oAq7M0 eXzVoR0eXRcCp5XpS+VVvy/ak8sUgKvl0nl1c8vjpSCOmBU8qjyqueXnijyqLgVBFz0qxZx7blAR wcj+tSCOl27XQjj5xSbA861WLydVu4v7szD9apV13iDQJJpI7u0TLyljNlv4s9awH0bUEHMBJ/2T k17lOtCUE7nz9WhOM2rFHt6Gk61Y+wXWf9S1J9huh/yyatOePcy9nLsQUnQ5qf7Hcg/6pqY8MqHD RsPwzRzR7hyS7DDR1oII6g/lSZwKdybMD/8AqoNITk+1FMA59KUUmTg4oGcUABx1zSdKUnt3pppA NPU4pCM45pepoIpDE719FfDf/kn+lf7sn/oxq+dOtfRfw35+H+lf7sn/AKMauLG/AvU9DL/4j9Dq qpajpOn6vCkOo2UF1GjblWZAwB6Z5q7RXmnsRk4u6dmMiijghSGJFSONQqKowFA4AFPoooEFFFFA BRRRQIKKKKACiiigAooooAKO9HSigAooooAKKKKACiiigAooooAKKK57xLrv9nQfZLVx9umHB6+W v97/AAFAGT4svo9RvItOiG5Ld98jjoW/u/h3qpbxbQBVazgEaAY+pPJP41pRgDkVDd2NIkRQPWpB 1FNU07tQDHflR+NJxjFIWAOCeT0piHHkcdKYenSnZ9qbnigXUYSQeCasQzvYO2pW6kwji7hXkkf3 gPWoD9KltZ/ss4fGUPDL6igo6uGaO4hSWJw8bjKsO4qSuctZ/wCxrxYy2dMuTmJjk+Wx7ewroqoQ tFFFABRRRQAUUUUAFBoooAKKKKACiiigAooooAKKKKACiiigAooooGFFFFABRRRQAUUUUAFeW+Mt n/C4PC/mbdnlDO7p9569SryP4i6Xb6z8TvD2nXRcQXEARyhw2NzdDQehllvbO+3LL8juPEz+Go9C uzqn2Aw+U2A+zcTj+HvuzjGOa5D4cyXfhr4Yalqt2hEe6S5t4343AIAPoCw/rVq4+C3h14HWC61C GXHyuZFYA+42jP5isLS9a1bVfBPi/wAP6jM11c6XCwSY8syqTuBPfGzvzzQddKFOVB06UuZc0ea+ lle2m/z1NL4V+HYtRtp/FmroLu/u53MTyru2gHlgPUtkewHHWvSr7T7PU7Vra+toriBhgpKgYf8A 6/euS+E1zHP8PLGONstBJLHIPRt5b+TD867eg4sfUm8VO72dl5JbWKOkaVbaJpcOnWYcW0O4Rh2y QCxOM/jV6ua8WQeLJvsn/CL3VpBjf9o+0AHP3duMqf8Aaqj4btvHkWrq3iC+sJrDY2UhUBt3boo/ nQZex54Oq5q+9r6/kL428HReIYprybVL+BIbUj7NDIBE5Xc2SuOTzj8BWd8Gf+RGf/r8k/8AQVrt 9W/5A19/17yf+gmuI+DP/IjP/wBfkn/oK0HVGrOWBnGT0TVvxJvjB/yIMv8A18RfzrQ8O634afRd Mtv7S0o3ItolMfnR7t2wZGM5zW9q2jWGu2JstStxPblg+wsy5I6dCDXK638MfDF1pFwltp62lwsR MU0TNlSBxkZwR65oIo1qEqEaNRtO7d1brbzOl1y6XR/DmpXsKqjW9tJKoUYG4KcfriuP+DunxweE ZNQI3XN7cOzyHliFOAM/UMfxNY3hTVLzWPg1r0Fw7SvZwzRRsxyfLEYYD8Mn8MCul+EjA/D2zAPS WUH2+c0G1Wi8PhqlNvXmSfpZtGDryp4f+NejXlsvlpqSCOcKMB2YlDn8dh+or0n+ybA6odTNpE18 UEfnsuWCjOAM9Op6V5v4/Bn+KnhCBBl0likP083P/spr0rUtStNI0+a+vp1htoV3O7fy9yewoM8V zOnRa3cbeuuh5/8AGmKyPhS3mmRPtguVWB8DdjB3DPp/XFd1oBnPh3TDdA/aDaRebnru2DP615zp enXnxL8Sx+INVhaLw/ZsRZWzj/XYPUj0yBk98Ac4Ner0CxbVOjDDt3krt+V+n+fmFFFFB5wUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUGiigCKeFJ7eSFwGR 1KkHuDXx1r+mNoniTUdNcc287Bfp1H86+yq+ePjloYsvE1rqsa4jvEKOe28f/WrGtG8TuwFTlq27 nF6VJuj2k1rS/PAjdxwa5zSpgkoUniukhw0br+IrwMRHlnc+rpy5olVgOlUYx5d5InZuRWgwOemK z7r5Jo5R0BwadPW6Gy4tXrE4as8H8qu2PLisai90pHaeFZvI8RWMn+3j869xrwXRiV1K0I6iVf51 7yvKj6V6OTSvTkvM+dzuNqsX5C0UUV7J4oUUUUAFFFFABRRRQAVDd/8AHlP/ANc2/lU1MdBJGyN9 1gQfpQNOzPLfg7qunWPhG6ivNQtbeQ37sEmmVCR5cfOCenBqL4reJdI1fR7bRNMuItQv5blGUWze YE4I6jjJJxj610f/AAqXwf8A8+Ev/gS/+Na+i+CvD3h6bz9O02OOfGBK7F3H0LE4/Cg9ieKwixDx MeZyvdLRK/rdnA+P9E1HRtM8MeIIF8260eKGG5I6ZXaQT7btwP8AvCvQtB8V6R4h09LuzvIslQZI XcB4z6MP69D2rZkjSWNo5EV0YFWVhkEHqCK4i/8AhL4Uvrhpltp7UsclbeXC/kQcfQUHOsRRr01C vdNXs1ro9bNfkbNz4z0SDWbPSYryO5vbqQRiOBg+z3YjgfTrV9vD+iuxdtIsGZjkk2yEk/lWXoPg Lw74clWeysQ1yvS4mYu4+meB+AFdNQc1WVOLSoN26t9fuILe2t7KAQ20EUEK5ISNQqj14FeX/Fe9 tLi88MmG6hkCXhLFJAdoynXFeqOgkjZG+6wIP0ri/wDhUvg//nwl/wDAl/8AGg2wNalSq+1qt3XZ X3TXc7CC8tbosLe5hmK9fLcNj8qo23iPR7u9uLOLUbf7VbyNHJC7hXDA4PB6j3HFVvD/AIQ0bwu8 76VbvE04USbpWfOM46n3NZmtfDPw1rl9Lez280NzKxaSSCUjefUg5H5CgzjHDc7UpO3R2X4q/wCp yfxc1G21qbSfDumyR3WoPcbisbBtmRtAJHQnOcegq38WrKWyt/D2tRoZF024CyEe+0qfblCPxrq/ DvgLQPDE5uLG1Z7nGBPO291Ht2H4Ct+8s7e/tJbS7hSa3lXa8bjIYUHUsbTpSpxppuML77u+/wDw CnN4g0yLQG1v7XE1iIjKJAwwwxnA9+2OueK8/wDhPoUd/wCF9WutTt1lg1S4AMbjh1TnP03FvyrX Hwg8Ji787ybspnPkGc7Pp/e/Wu3t7eG0to7e2iSKGJQqRoMKoHQAUGcq1GlSlToNtya1atZLbrvf qYH/AAr/AMJ/9AK0/I/41wHhfw3o1x8U/EFhNp8L2lqhaCIg4Q7l5H517JWRZeG9M0/XLzWLeFlv bwYmcuSGGQemcDoKBUcdOEJqcm21Za9bo16KKKDgCiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAK8v8Ai9pXifUre0XRVlltORNDEcHPqfavUKKAPklPAHjKeUn+wrlyem7AH8607b4Q+OL3 G63gtlPZzjH5V9R0UAfHPi3wTqPhK7W11CTMrLuDJ91voa5yGUn5G5r6k+MWgx6t4Qa6x++s23KQ Ox618suDHP8AjQArjYCTVcfO241ZuOEI9earqpcYHFAEqRbxx0qeMEDB7VNa26heCeafPH5eDQIp XA+UH0r6k+Cuqf2l8O7VCfntnaE/QV8vS8oe9e3/ALO+pny9V0tjwpEq/j1oA93ooooGFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAENzH5trLH13IR+lfGOq2cmneJNQ s5YgWhnZSp4719qV8pfFqw+w/Eu/JBxcYm496zqfCZVl7pyhwcEWmw+oNViSWYAVODF/dmwB2NQS nEvAIDVzHGlqNgKhmV9xHovWpwIlbhpwaqrlZ+vXv6Vb3pwftRz7rVMqR3PwjvxY/EWz+clJ0aMk 8ZJHFfUVfHfhi++w+LdIu2kDBLlMkccZr7CRg6hlOQQCDWtF6WN8O/daPMv+Fma7c6nf2umeFJL5 LOdoXeKRj0JAzheM4qzZfFGWDVbfT/Efh+60g3Bwk0jEqcnqQVHHQZGa57wd4v0bwvrvihNVuHia e/Yx7YmfOGfPQe9P8S63p3xN1rSdC0qQRwRTGSa4uGWPKnAwgJyxxnj6duRqfUywlL2jhKjaFvi1 7X9Nz1PW9asfD+lTajqEvlwR9gMs57Ko7k1wkPjzxfrSfatC8IlrEn5JLiTBceo5Uflmq3xFjOu/ ELw14blLfZGAnlUHG4FiD+O1D9M16jFEkMSRRIqRooVVUYAA6AUzz7UsPRhKUeaUtdb2S+Xc43wz 47udW1s6Hq2iXGmakIzIAxyjAdTyAR7dR7121RPbwyTRzPEjSx52OV+Zc9cH3qWg4606c5Xpx5fL cr3d5a2Fu1xeXMNvAuN0szhFGemSeK5fSvHtprfjWbQtPWOe1itzL9rR8hmBGQBjkc9c10uo6bZ6 tZPZ39ulxbuQWjfocHIrzbQdNstJ+N19Z2FulvbpYZWNOgJCE0HThaVGdOpzX5km126HqlY3iXxH ZeF9Gk1G9bIHyxxA/NK/ZR/ngVc1TVLTRtNn1C+lEVvCu5m/kAO5PQCuC0fS7vxjev4u12Ipaxxt /Zdi3IRccSMO5Pb8+gFBnh6MZfvKvwL8X2X9aI6LwN4rfxhok2oSWi2pjuWg2K+/OFVs5wP736Vm az471BvEM2geF9H/ALTvrcEzyPIFjjPp1Hr3I54qj8Ev+RMvP+wg/wD6LjqD4NZurXXdUkwZrq8G 9icnoW/m5oO6ph6VKpWny3ULJLW2v4m34d8b3V3r7eHvEGlnTNW2b4wH3JKMZ4P0B6Ejg88V2teX fE9vsHi7whqUSkSrclWYDqoeMgf+PN+dbvjLxNdx3UXhrw+PM1y9GCwPFrGersexx0/P0BDCphVV 9nOkrKSd+ys7N+hU8SfE+10bxHBotlbLeymRY7h/M2rExIG0YByR39Onrjv68U8Z+GbTwta+FLO3 PmTPel7i4YfNM+UyT7eg7fma9roFjKVGFKnKj1vr3s7XCuX8XeNrLwqsMHkSXuo3H+os4fvN2yeu BnjoSfTrXUV4jYeJreP4pa5qt1ZXmo3cTtbWNvaxF3AB25A7fKP/AB40E4HDKtKUpK6ir279l/md roviLxpe6zbR6l4XSz06UkPLvy0fBIJ59Rjp3rX8X+LLbwnpsc8kL3N1O/l21shwZG/wHHY9R61l aT8SbG91mPSdS02+0i8lwIlvI9ocnoPUE9uMe9Yvixhe/GbwvYyENFDEJgp5w+52/wDZFoN1h+eu lVp8qSbsuqXndk9x478VaIkd94i8LLBpbsAZYJgzxg+oyf1xXYXWr2Fvozaw86mxEPniUc5QjII+ vFR+NbeO58E63HIAVFlK4Huqlh+oFeTX2pyN8CLGIyElrv7M3uA7OB+QH5UmVRoU8VGMox5XzJO1 9n11udDH408V6rbnUtK8KiXSwTtaSX95Io7gZH6A10fh3xHbeJdIF9aBomDFJYWOTG47e454NaWi W6WugadBGMJHbRqP++RXBeBcW3jnxZp8ZAh84yKnph2HH/fWPypClGlWp1OSHK4bb6q9tTsZ13El kQn/AHRXKeKdInmSPULNgssXDL0DCu0lQc1manaSXelzQwnbLglfeqTPMaPnrWECapI3l+WW5K47 1S5Irp/FEXmRK06bLuA7Xx3Fcx16VRIqt8wFep/Bq/EWsT2jHhxkV5WBg11XgPUP7O8V2cmcKzBT QB9KsMMRjvT1HNI5BIYdGANOU0CHgd6WgGg1IC0tIaWgAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACg0UUARjGaXvS59qQZz0oAOM0d6B16UZ56UAAxmgEZNLnnpSd zxQAAjmgda4G4+Lmh219c2Z0/VpJLeVo3McKEZBI/v8ATirGj/FPw7quopYn7VZTOcJ9sjVFJPQZ DHH40HW8BiVHmcHY7bvQMZNQ3l5b2FpLd3cqQ28Slnkc4CiuCb4tWU9xIulaJqmoxIcGWKLA/Lk4 +uKDOjhqta7pxukehLilHX2rk/DHxB0nxNetYQxXNrfqpYwTx4JA64IyPzwa6wE56UEVaM6UuWor MBjJpBjmlB5PFYUfi3TZfFp8OReZJeiIys6BTGuP4Sc5z04x3oFCnKd+ ------=_Part_66459_2061069560.1369878521190-- From qcai@redhat.com Wed May 29 22:45:41 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0AB7A7F37 for ; Wed, 29 May 2013 22:45:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B00F5304043 for ; Wed, 29 May 2013 20:45:37 -0700 (PDT) X-ASG-Debug-ID: 1369885531-04bdf078162c4b00001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id TaoXTHFspLutJnPQ for ; Wed, 29 May 2013 20:45:31 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4U3jStA004479; Wed, 29 May 2013 23:45:29 -0400 Date: Wed, 29 May 2013 23:45:28 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: xfs@oss.sgi.com, stable@vger.kernel.org Message-ID: <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> In-Reply-To: <20130527053608.GS29466@dastard> References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> Subject: Re: 3.9.3: Oops running xfstests MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: U89E9vta+wuphV5fyBHYs9Xc0cMyuA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1369885531 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132424 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Also reproduced this on 3.9.4 on several different machines. [ 312.686504] BUG: unable to handle kernel paging request at ffff880077434000 [ 312.693518] IP: [] memmove+0x55/0x1a0 [ 312.698771] PGD 1ddf067 PUD 1de2067 PMD 7748a063 PTE 8000000077434161 [ 312.705284] Oops: 0003 [#1] SMP [ 312.708550] Modules linked in: lockd sunrpc nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6table_nat nf_nat_ipv6 ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter ip_tables sg snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device e1000e hp_wmi sparse_keymap snd_pcm rfkill ptp iTCO_wdt iTCO_vendor_support pps_core pcspkr mei snd_page_alloc i2c_i801 snd_timer snd lpc_ich soundcore mfd_core microcode xfs libcrc32c sr_mod sd_mod cdrom crc_t10dif nouveau ata_generic video mxm_wmi i2c_algo_bit drm_kms_helper ahci pata_acpi ttm libahci drm libata i2c_core wmi dm_mirror dm_region_hash dm_log dm_mod [ 312.784678] CPU 3 [ 312.786522] Pid: 19267, comm: attr Not tainted 3.9.4 #1 Hewlett-Packard HP Z210 Workstation/1587h [ 312.795590] RIP: 0010:[] [] memmove+0x55/0x1a0 [ 312.803273] RSP: 0018:ffff880051d63ad8 EFLAGS: 00010282 [ 312.808596] RAX: ffff880077325688 RBX: ffff880063c00000 RCX: 000000000000d00b [ 312.815739] RDX: ffffffffffef1658 RSI: ffff8800774343e0 RDI: ffff880077433fe8 [ 312.822883] RBP: ffff880051d63b30 R08: 8941c085e1178b44 R09: e8a049a0e0c7c748 [ 312.830020] R10: e0be6090e8c03100 R11: 000001bfa049909d R12: ffff880077325668 [ 312.837160] R13: 00000000000003d8 R14: 0000000000001800 R15: 000000000000007b [ 312.844297] FS: 00007ff3eddd1740(0000) GS:ffff88007d180000(0000) knlGS:0000000000000000 [ 312.852397] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 312.858150] CR2: ffff880077434000 CR3: 0000000063c96000 CR4: 00000000000407e0 [ 312.865285] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 312.872423] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 312.879565] Process attr (pid: 19267, threadinfo ffff880051d62000, task ffff880051a19ac0) [ 312.887750] Stack: [ 312.889764] ffffffffa02651a1 0000000000000000 0000000000000000 ffff880077325688 [ 312.897233] ffff880077325668 0000000000000018 ffff880077325668 0000000000000000 [ 312.904700] ffff8800626e1bd8 ffff880051bccdc0 ffff88004ec26f80 ffff880051d63b68 [ 312.912167] Call Trace: [ 312.914641] [] ? xfs_attr_leaf_moveents.isra.2+0x91/0x280 [xfs] [ 312.922240] [] xfs_attr_leaf_compact+0xd7/0x130 [xfs] [ 312.928969] [] xfs_attr_leaf_add+0xce/0x170 [xfs] [ 312.935348] [] xfs_attr_leaf_addname+0xc0/0x3d0 [xfs] [ 312.942068] [] ? xfs_bmap_one_block+0x3e/0xa0 [xfs] [ 312.948613] [] xfs_attr_set_int+0x30c/0x420 [xfs] [ 312.954976] [] ? setxattr+0xa4/0x1c0 [ 312.960224] [] xfs_attr_set+0x7f/0x90 [xfs] [ 312.966077] [] xfs_xattr_set+0x42/0x70 [xfs] [ 312.972001] [] generic_setxattr+0x62/0x80 [ 312.977670] [] __vfs_setxattr_noperm+0x63/0x1b0 [ 312.983859] [] vfs_setxattr+0xb5/0xc0 [ 312.989179] [] setxattr+0x126/0x1c0 [ 312.994327] [] ? kmem_cache_free+0x1cd/0x1e0 [ 313.000256] [] ? final_putname+0x22/0x50 [ 313.005834] [] ? putname+0x2b/0x40 [ 313.010893] [] ? user_path_at_empty+0x5f/0x90 [ 313.016908] [] ? __sb_start_write+0x49/0x100 [ 313.022835] [] sys_lsetxattr+0x8f/0xd0 [ 313.028241] [] system_call_fastpath+0x16/0x1b [ 313.034252] Code: 40 38 fe 74 41 48 83 ea 20 48 83 ea 20 4c 8b 1e 4c 8b 56 08 4c 8b 4e 10 4c 8b 46 18 48 8d 76 20 4c 89 1f 4c 89 57 08 4c 89 4f 10 <4c> 89 47 18 48 8d 7f 20 73 d4 48 83 c2 20 e9 a8 00 00 00 0f 1f [ 313.054228] RIP [] memmove+0x55/0x1a0 [ 313.059557] RSP [ 313.063045] CR2: ffff880077434000 [ 313.066362] ---[ end trace 76a02834e4697b82 ]--- [ 313.066368] general protection fault: 0000 [#2] SMP [ 313.066397] Modules linked in: lockd sunrpc nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6table_nat nf_nat_ipv6 ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter ip_tables sg snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device e1000e hp_wmi sparse_keymap snd_pcm rfkill ptp iTCO_wdt iTCO_vendor_support pps_core pcspkr mei snd_page_alloc i2c_i801 snd_timer snd lpc_ich soundcore mfd_core microcode xfs libcrc32c sr_mod sd_mod cdrom crc_t10dif nouveau ata_generic video mxm_wmi i2c_algo_bit drm_kms_helper ahci pata_acpi ttm libahci drm libata i2c_core wmi dm_mirror dm_region_hash dm_log dm_mod [ 313.066403] CPU 0 [ 313.066404] Pid: 0, comm: swapper/0 Tainted: G D 3.9.4 #1 Hewlett-Packard HP Z210 Workstation/1587h [ 313.066409] RIP: 0010:[] [] timerqueue_add+0x20/0xb0 [ 313.066411] RSP: 0018:ffff88007d003eb0 EFLAGS: 00010002 [ 313.066412] RAX: 53544155415641e5 RBX: ffff88007d00e900 RCX: ffffffffa059ec30 [ 313.066413] RDX: ffffffffa059ec38 RSI: 878b427400407f83 RDI: ffff88007d00e710 [ 313.066414] RBP: ffff88007d003ec0 R08: 00000048a96ae400 R09: 0000000000000000 [ 313.066415] R10: 0000000000000000 R11: 0000000000000005 R12: ffff88007d00e710 [ 313.066416] R13: ffff88007d00e700 R14: ffff88007d00e700 R15: 0000000000000001 [ 313.066417] FS: 0000000000000000(0000) GS:ffff88007d000000(0000) knlGS:0000000000000000 [ 313.066419] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 313.066420] CR2: 0000000000c057a0 CR3: 00000000018fa000 CR4: 00000000000407f0 [ 313.066421] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 313.066422] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 313.066424] Process swapper/0 (pid: 0, threadinfo ffffffff818ee000, task ffffffff81901440) [ 313.066424] Stack: [ 313.066427] ffff88007d00e900 ffff88007d00e900 ffff88007d003ee8 ffffffff81087605 [ 313.066429] ffff88007d00e900 ffff88007d003f58 ffff88007d00e6c0 ffff88007d003f28 [ 313.066431] ffffffff81087b1f ffffffff810ba200 ffff88007d00e6c0 ffff88007d00e6c0 [ 313.066431] Call Trace: [ 313.066433] [ 313.066437] [] enqueue_hrtimer+0x25/0x80 [ 313.066440] [] __run_hrtimer+0x9f/0x1d0 [ 313.066443] [] ? tick_sched_handle.isra.13+0x60/0x60 [ 313.066446] [] hrtimer_interrupt+0xe7/0x220 [ 313.066449] [] ? cpufreq_p4_cpu_init+0x290/0x290 [ 313.066452] [] smp_apic_timer_interrupt+0x69/0x9c [ 313.066455] [] apic_timer_interrupt+0x6d/0x80 [ 313.066457] [ 313.066459] [] ? cpuidle_wrap_enter+0x41/0x80 [ 313.066461] [] cpuidle_enter_tk+0x10/0x20 [ 313.066463] [] cpuidle_idle_call+0xb2/0x1e0 [ 313.066467] [] cpu_idle+0xe5/0x140 [ 313.066470] [] rest_init+0x72/0x80 [ 313.066475] [] start_kernel+0x3fd/0x409 [ 313.066477] [] ? repair_env_string+0x5c/0x5c [ 313.066481] [] ? early_idt_handlers+0x120/0x120 [ 313.066484] [] x86_64_start_reservations+0x2a/0x2c [ 313.066486] [] x86_64_start_kernel+0xf3/0x100 [ 313.066505] Code: 31 db eb c6 0f 0b 90 90 90 90 90 55 48 89 e5 41 54 49 89 fc 53 48 3b 36 48 89 f3 75 6c 4c 89 e2 31 c9 eb 1e 0f 1f 80 00 00 00 00 <48> 8b 70 18 48 39 73 18 48 8d 48 08 48 8d 50 10 48 0f 4d d1 48 [ 313.066508] RIP [] timerqueue_add+0x20/0xb0 [ 313.066509] RSP [ 313.066511] ---[ end trace 76a02834e4697b83 ]--- [ 313.066515] Kernel panic - not syncing: Fatal exception in interrupt [ 313.066516] general protection fault: 0000 [#3] SMP [ 313.066544] Modules linked in: lockd sunrpc nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6table_nat nf_nat_ipv6 ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter ip_tables sg snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device e1000e hp_wmi sparse_keymap snd_pcm rfkill ptp iTCO_wdt iTCO_vendor_support pps_core pcspkr mei snd_page_alloc i2c_i801 snd_timer snd lpc_ich soundcore mfd_core microcode xfs libcrc32c sr_mod sd_mod cdrom crc_t10dif nouveau ata_generic video mxm_wmi i2c_algo_bit drm_kms_helper ahci pata_acpi ttm libahci drm libata i2c_core wmi dm_mirror dm_region_hash dm_log dm_mod [ 313.066550] CPU 1 [ 313.066550] Pid: 0, comm: swapper/1 Tainted: G D 3.9.4 #1 Hewlett-Packard HP Z210 Workstation/1587h [ 313.066556] RIP: 0010:[] [] leave_mm+0x26/0x70 [ 313.066558] RSP: 0018:ffff880079991e38 EFLAGS: 00010002 [ 313.066559] RAX: 5a5a5a5a5a5a5a5a RBX: ffff88007d09b170 RCX: 0000000000000004 [ 313.066560] RDX: ffff8800773aa1c0 RSI: ffffffff8199a7a0 RDI: 0000000000000001 [ 313.066561] RBP: ffff880079991e38 R08: 0000000000000068 R09: 00000000000003d6 [ 313.066562] R10: 0000000000000000 R11: 00000000000003d8 R12: 0000000000000004 [ 313.066563] R13: 0000000000000020 R14: 0000000000000003 R15: ffffffff814b8800 [ 313.066564] FS: 0000000000000000(0000) GS:ffff88007d080000(0000) knlGS:0000000000000000 [ 313.066565] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 313.066566] CR2: 00007fc2b88c6e00 CR3: 00000000018fa000 CR4: 00000000000407e0 [ 313.066568] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 313.066569] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 313.066570] Process swapper/1 (pid: 0, threadinfo ffff880079990000, task ffff88007996b580) [ 313.066571] Stack: [ 313.066573] ffff880079991e70 ffffffff81358c35 0000000179991e58 ffff88007d09b170 [ 313.066575] ffffffff8199a7a0 00000048a96b3734 0000000000000004 ffff880079991e80 [ 313.066577] ffffffff814b8819 ffff880079991eb8 ffffffff814b9172 0000000000000004 [ 313.066578] Call Trace: [ 313.066582] [] intel_idle+0xf5/0x100 [ 313.066584] [] cpuidle_enter+0x19/0x20 [ 313.066586] [] cpuidle_wrap_enter+0x32/0x80 [ 313.066588] [] cpuidle_enter_tk+0x10/0x20 [ 313.066590] [] cpuidle_idle_call+0xb2/0x1e0 [ 313.066593] [] cpu_idle+0xe5/0x140 [ 313.066597] [] start_secondary+0x24f/0x251 [ 313.066616] Code: 5d c3 0f 1f 00 66 66 66 66 90 55 65 48 8b 14 25 c0 3c 01 00 65 8b 04 25 c8 3c 01 00 83 f8 01 48 89 e5 74 4c 48 8b 82 c0 02 00 00 <0f> a3 38 19 d2 85 d2 75 09 5d c3 0f 1f 80 00 00 00 00 f0 0f b3 [ 313.066619] RIP [] leave_mm+0x26/0x70 [ 313.066620] RSP [ 313.066622] ---[ end trace 76a02834e4697b84 ]--- [ 313.066625] BUG: unable to handle kernel paging request at ffffebe000000020 [ 313.066631] IP: [] __list_del_entry+0x1/0xd0 [ 313.066632] PGD 0 [ 313.066634] Oops: 0000 [#4] SMP [ 313.066663] Modules linked in: lockd sunrpc nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE ip6table_nat nf_nat_ipv6 ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter ip_tables sg snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device e1000e hp_wmi sparse_keymap snd_pcm rfkill ptp iTCO_wdt iTCO_vendor_support pps_core pcspkr mei snd_page_alloc i2c_i801 snd_timer snd lpc_ich soundcore mfd_core microcode xfs libcrc32c sr_mod sd_mod cdrom crc_t10dif nouveau ata_generic video mxm_wmi i2c_algo_bit drm_kms_helper ahci pata_acpi ttm libahci drm libata i2c_core wmi dm_mirror dm_region_hash dm_log dm_mod [ 313.066668] CPU 2 [ 313.066669] Pid: 17, comm: watchdog/2 Tainted: G D 3.9.4 #1 Hewlett-Packard HP Z210 Workstation/1587h [ 313.066673] RIP: 0010:[] [] __list_del_entry+0x1/0xd0 [ 313.066674] RSP: 0018:ffff880079b21d78 EFLAGS: 00010206 [ 313.066675] RAX: 000001e000000000 RBX: ffffebe000000020 RCX: 000000000000f142 [ 313.066676] RDX: ffffea0000000000 RSI: 0000000000000000 RDI: ffffebe000000020 [ 313.066677] RBP: ffff880079b21d90 R08: ffff880079b20000 R09: 0000000000000001 [ 313.066678] R10: 0000000000000000 R11: 0000000000000001 R12: ffff8800773af2c0 [ 313.066679] R13: ffff8800773af2c0 R14: 0000000000000000 R15: ffff8800799b3580 [ 313.066681] FS: 0000000000000000(0000) GS:ffff88007d100000(0000) knlGS:0000000000000000 [ 313.066682] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 313.066683] CR2: ffffebe000000020 CR3: 00000000018fa000 CR4: 00000000000407e0 [ 313.066684] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 313.066685] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 313.066687] Process watchdog/2 (pid: 17, threadinfo ffff880079b20000, task ffff8800799b3580) [ 313.066687] Stack: [ 313.066690] ffff880079b21d90 ffffffff8130aabd 0000000000000000 ffff880079b21db0 [ 313.066692] ffffffff8104acd7 0000000000000000 ffff8800773af2c0 ffff880079b21dd8 [ 313.066694] ffffffff8105de13 0000000000000000 ffff8800773af2c0 ffff880079998000 [ 313.066694] Call Trace: [ 313.066698] [] ? list_del+0xd/0x30 [ 313.066701] [] pgd_free+0x57/0x80 [ 313.066705] [] __mmdrop+0x23/0xa0 [ 313.066709] [] finish_task_switch+0xba/0xe0 [ 313.066712] [] __schedule+0x3b0/0x7d0 [ 313.066715] [] schedule+0x29/0x70 [ 313.066719] [] smpboot_thread_fn+0xd3/0x1a0 [ 313.066722] [] ? lg_local_lock_cpu+0x40/0x40 [ 313.066724] [] kthread+0xc0/0xd0 [ 313.066726] [] ? insert_kthread_work+0x40/0x40 [ 313.066729] [] ret_from_fork+0x7c/0xb0 [ 313.066731] [] ? insert_kthread_work+0x40/0x40 [ 313.066750] Code: f5 84 81 be 21 00 00 00 48 c7 c7 41 ea 84 81 31 c0 e8 b4 65 d5 ff e9 73 ff ff ff 66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 55 <48> 8b 17 48 b9 00 01 10 00 00 00 ad de 48 8b 47 08 48 89 e5 48 [ 313.066753] RIP [] __list_del_entry+0x1/0xd0 [ 313.066754] RSP [ 313.066754] CR2: ffffebe000000020 [ 313.066756] ---[ end trace 76a02834e4697b85 ]--- [ 314.133075] Shutting down cpus with NMI [ 314.136923] drm_kms_helper: panic occurred, switching back to text console [ 314.143850] ============================================================================= [ 314.152039] BUG kmalloc-4096 (Tainted: G D ): Padding overwritten. 0xffff880077327c28-0xffff880077327fff [ 314.162310] ----------------------------------------------------------------------------- [ 314.162310] [ 314.171975] INFO: Slab 0xffffea0001dcc800 objects=7 used=7 fp=0x (null) flags=0x10000000004080 [ 314.181380] Pid: 0, comm: swapper/0 Tainted: G B D 3.9.4 #1 [ 314.187656] Call Trace: [ 314.190104] [] slab_err+0xc2/0xf0 [ 314.195717] [] ? is_module_text_address+0xe/0x20 [ 314.201991] [] slab_pad_check.part.41+0xf5/0x170 [ 314.208269] [] ? drm_crtc_helper_set_config+0x12c/0xb30 [drm_kms_helper] [ 314.216625] [] check_slab+0x73/0x100 [ 314.221859] [] ? offline_memory_block_cb+0x7/0x30 [ 314.228222] [] alloc_debug_processing+0x21/0x118 [ 314.234498] [] __slab_alloc+0x3b8/0x4a2 [ 314.239995] [] ? drm_crtc_helper_set_config+0x12c/0xb30 [drm_kms_helper] [ 314.248353] [] ? wait_for_xmitr+0x3b/0xa0 [ 314.254021] [] ? delay_tsc+0x4a/0x80 [ 314.259254] [] ? __const_udelay+0x28/0x30 [ 314.264926] [] __kmalloc+0x1da/0x220 [ 314.270161] [] drm_crtc_helper_set_config+0x12c/0xb30 [drm_kms_helper] [ 314.278342] [] ? wake_up_klogd+0x34/0x50 [ 314.283925] [] ? console_unlock+0x207/0x3f0 [ 314.289775] [] drm_mode_set_config_internal+0x23/0x50 [drm] [ 314.297005] [] drm_fb_helper_restore_fbdev_mode+0x57/0x80 [drm_kms_helper] [ 314.305538] [] drm_fb_helper_force_kernel_mode+0x45/0x80 [drm_kms_helper] [ 314.313981] [] drm_fb_helper_panic+0x2b/0x30 [drm_kms_helper] [ 314.321382] [] notifier_call_chain+0x4c/0x70 [ 314.327309] [] atomic_notifier_call_chain+0x1a/0x20 [ 314.333846] [] panic+0xf6/0x1d7 [ 314.338648] [] oops_end+0xdb/0xe0 [ 314.343624] [] die+0x4b/0x70 [ 314.348160] [] do_general_protection+0xda/0x160 [ 314.354349] [] general_protection+0x28/0x30 [ 314.360201] [] ? cache_release_pipefs+0x30/0x30 [sunrpc] [ 314.367177] [] ? sunrpc_cache_pipe_upcall+0x8/0x1e0 [sunrpc] [ 314.374489] [] ? timerqueue_add+0x20/0xb0 [ 314.380158] [] enqueue_hrtimer+0x25/0x80 [ 314.385738] [] __run_hrtimer+0x9f/0x1d0 [ 314.391231] [] ? tick_sched_handle.isra.13+0x60/0x60 [ 314.397855] [] hrtimer_interrupt+0xe7/0x220 [ 314.403698] [] ? cpufreq_p4_cpu_init+0x290/0x290 [ 314.409975] [] smp_apic_timer_interrupt+0x69/0x9c [ 314.416340] [] apic_timer_interrupt+0x6d/0x80 [ 314.422355] [] ? cpuidle_wrap_enter+0x41/0x80 [ 314.428997] [] cpuidle_enter_tk+0x10/0x20 [ 314.434667] [] cpuidle_idle_call+0xb2/0x1e0 [ 314.440504] [] cpu_idle+0xe5/0x140 [ 314.445567] [] rest_init+0x72/0x80 [ 314.450629] [] start_kernel+0x3fd/0x409 [ 314.456122] [] ? repair_env_string+0x5c/0x5c [ 314.462055] [] ? early_idt_handlers+0x120/0x120 [ 314.468246] [] x86_64_start_reservations+0x2a/0x2c [ 314.474697] [] x86_64_start_kernel+0xf3/0x100 [ 314.480716] Padding ffff8800773278f8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.490117] Padding ffff880077327908: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.499518] Padding ffff880077327918: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.508918] Padding ffff880077327928: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.518312] Padding ffff880077327938: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.527715] Padding ffff880077327948: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.537116] Padding ffff880077327958: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.546511] Padding ffff880077327968: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.555911] Padding ffff880077327978: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.565303] Padding ffff880077327988: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.574700] Padding ffff880077327998: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.584099] Padding ffff8800773279a8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.593491] Padding ffff8800773279b8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.602885] Padding ffff8800773279c8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.612278] Padding ffff8800773279d8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.621680] Padding ffff8800773279e8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.631080] Padding ffff8800773279f8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.640473] Padding ffff880077327a08: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.649868] Padding ffff880077327a18: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.659263] Padding ffff880077327a28: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.668663] Padding ffff880077327a38: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.678055] Padding ffff880077327a48: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.687453] Padding ffff880077327a58: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.696858] Padding ffff880077327a68: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.706252] Padding ffff880077327a78: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.715649] Padding ffff880077327a88: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.725044] Padding ffff880077327a98: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.734442] Padding ffff880077327aa8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.743846] Padding ffff880077327ab8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.753251] Padding ffff880077327ac8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.762646] Padding ffff880077327ad8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.772043] Padding ffff880077327ae8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.781440] Padding ffff880077327af8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.790844] Padding ffff880077327b08: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.800250] Padding ffff880077327b18: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.809656] Padding ffff880077327b28: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.819058] Padding ffff880077327b38: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.828454] Padding ffff880077327b48: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.837858] Padding ffff880077327b58: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.847260] Padding ffff880077327b68: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.856666] Padding ffff880077327b78: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.866059] Padding ffff880077327b88: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.875452] Padding ffff880077327b98: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.884847] Padding ffff880077327ba8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.894248] Padding ffff880077327bb8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.903641] Padding ffff880077327bc8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.913036] Padding ffff880077327bd8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.922435] Padding ffff880077327be8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.931835] Padding ffff880077327bf8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.941229] Padding ffff880077327c08: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.950625] Padding ffff880077327c18: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ [ 314.960029] Padding ffff880077327c28: 58 44 32 44 00 b8 00 08 00 e8 00 08 01 a0 00 08 XD2D............ [ 314.969430] Padding ffff880077327c38: 00 00 00 00 0c 00 00 8a 01 2e 00 01 00 00 00 10 ................ [ 314.978827] Padding ffff880077327c48: 00 00 00 00 00 00 00 9d 02 2e 2e 00 00 00 00 20 ............... [ 314.988230] Padding ffff880077327c58: 00 00 00 00 0c 02 46 f8 09 67 65 74 73 65 62 6f ......F..getsebo [ 314.997632] Padding ffff880077327c68: 6f 6c 00 00 00 00 00 30 00 00 00 00 0c 04 3e 14 ol.....0......>. [ 315.007034] Padding ffff880077327c78: 05 70 61 72 74 78 00 48 00 00 00 00 0c 00 05 bf .partx.H........ [ 315.016429] Padding ffff880077327c88: 14 62 75 69 6c 64 2d 6c 6f 63 61 6c 65 2d 61 72 .build-locale-ar [ 315.025833] Padding ffff880077327c98: 63 68 69 76 65 00 00 58 00 00 00 00 0c 04 0f 98 chive..X........ [ 315.035237] Padding ffff880077327ca8: 03 6c 69 64 6f 75 00 78 00 00 00 00 0c 04 46 6f .lidou.x......Fo [ 315.044633] Padding ffff880077327cb8: 04 68 61 6c 74 00 00 88 00 00 00 00 0c 00 05 c0 .halt........... [ 315.054031] Padding ffff880077327cc8: 05 7a 64 75 6d 70 00 98 00 00 00 00 0c 04 3e 07 .zdump........>. [ 315.063435] Padding ffff880077327cd8: 04 66 73 63 6b 00 00 a8 ff ff 00 08 00 00 00 b8 .fsck........... [ 315.072838] Padding ffff880077327ce8: 00 00 00 00 0c 00 05 c1 03 7a 69 63 00 00 00 c0 .........zic.... [ 315.082240] Padding ffff880077327cf8: 00 00 00 00 0c 04 0f 97 09 6c 67 72 6f 75 70 6d .........lgroupm [ 315.091642] Padding ffff880077327d08: 6f 64 00 00 00 00 00 d0 ff ff 00 08 00 00 00 e8 od.............. [ 315.101043] Padding ffff880077327d18: 00 00 00 00 0c 00 05 c6 08 6c 64 63 6f 6e 66 69 .........ldconfi [ 315.110435] Padding ffff880077327d28: 67 00 00 00 00 00 00 f0 00 00 00 00 0c 04 3e 08 g.............>. [ 315.119827] Padding ffff880077327d38: 0b 66 73 63 6b 2e 63 72 61 6d 66 73 00 00 01 08 .fsck.cramfs.... [ 315.129218] Padding ffff880077327d48: 00 00 00 00 0c 00 05 c7 03 73 6c 6e 00 00 01 20 .........sln... [ 315.138611] Padding ffff880077327d58: 00 00 00 00 0c 02 46 f7 0a 67 65 74 65 6e 66 6f ......F..getenfo [ 315.148004] Padding ffff880077327d68: 72 63 65 00 00 00 01 30 00 00 00 00 0c 04 3e 09 rce....0......>. [ 315.157397] Padding ffff880077327d78: 0a 66 73 63 6b 2e 6d 69 6e 69 78 00 00 00 01 48 .fsck.minix....H [ 315.166793] Padding ffff880077327d88: 00 00 00 00 0c 00 05 c8 19 67 6c 69 62 63 5f 70 .........glibc_p [ 315.176195] Padding ffff880077327d98: 6f 73 74 5f 75 70 67 72 61 64 65 2e 78 38 36 5f ost_upgrade.x86_ [ 315.185589] Padding ffff880077327da8: 36 34 00 00 00 00 01 60 00 00 00 00 0c 04 0f 99 64.....`........ [ 315.194981] Padding ffff880077327db8: 09 6c 6e 65 77 75 73 65 72 73 64 63 61 3b 01 88 .lnewusersdca;.. [ 315.204374] Padding ffff880077327dc8: ff ff 00 08 63 61 01 a0 00 00 00 00 0c 02 46 f9 ....ca........F. [ 315.213777] Padding ffff880077327dd8: 0c 6d 61 74 63 68 70 61 74 68 63 6f 6e 76 01 a8 .matchpathconv.. [ 315.223179] Padding ffff880077327de8: 00 00 00 00 0c 04 46 70 04 69 6e 69 74 00 01 c0 ......Fp.init... [ 315.232581] Padding ffff880077327df8: 00 00 00 00 0c 00 05 d5 0b 69 63 6f 6e 76 63 6f .........iconvco [ 315.241976] Padding ffff880077327e08: 6e 66 69 67 00 00 01 d0 00 00 00 00 0c 00 05 d5 nfig............ [ 315.251375] Padding ffff880077327e18: 12 69 63 6f 6e 76 63 6f 6e 66 69 67 2e 78 38 36 .iconvconfig.x86 [ 315.260771] Padding ffff880077327e28: 5f 36 34 be 00 00 01 e8 00 00 00 00 0c 04 0f 9a _64............. [ 315.270170] Padding ffff880077327e38: 07 6c 70 61 73 73 77 64 72 73 3b 35 31 61 02 08 .lpasswdrs;51a.. [ 315.279568] Padding ffff880077327e48: ff ff 00 08 00 00 02 20 00 00 00 00 0c 00 05 da ....... ........ [ 315.288971] Padding ffff880077327e58: 05 63 61 70 73 68 02 28 00 00 00 00 0c 04 0f 9b .capsh.(........ [ 315.298369] Padding ffff880077327e68: 08 6c 75 73 65 72 61 64 64 35 31 61 32 38 02 38 .luseradd51a28.8 [ 315.307774] Padding ffff880077327e78: ff ff 00 08 00 00 02 50 00 00 00 00 0c 00 05 db .......P........ [ 315.317179] Padding ffff880077327e88: 06 67 65 74 63 61 70 00 00 00 00 00 00 00 02 58 .getcap........X [ 315.326576] Padding ffff880077327e98: 00 00 00 00 0c 04 0f 9c 08 6c 75 73 65 72 64 65 .........luserde [ 315.335979] Padding ffff880077327ea8: 6c 3b 35 31 61 32 02 70 ff ff 00 08 00 00 02 88 l;51a2.p........ [ 315.345383] Padding ffff880077327eb8: 00 00 00 00 0c 00 05 dc 08 67 65 74 70 63 61 70 .........getpcap [ 315.354787] Padding ffff880077327ec8: 73 00 00 00 00 00 02 90 00 00 00 00 0c 04 0f 9d s............... [ 315.364190] Padding ffff880077327ed8: 08 6c 75 73 65 72 6d 6f 64 3b 35 31 61 32 02 a8 .lusermod;51a2.. [ 315.373588] Padding ffff880077327ee8: ff ff 00 08 00 00 02 c0 00 00 00 00 0c 00 05 dd ................ [ 315.382993] Padding ffff880077327ef8: 06 73 65 74 63 61 70 00 00 00 00 00 00 00 02 c8 .setcap......... [ 315.392390] Padding ffff880077327f08: 00 00 00 00 0c 03 0e fe 09 76 70 64 64 65 63 6f .........vpddeco [ 315.401794] Padding ffff880077327f18: 64 65 6e 6c 69 73 02 e0 00 00 00 00 0c 04 48 ac denlis........H. [ 315.411199] Padding ffff880077327f28: 05 63 72 6f 6e 64 02 f8 00 00 00 00 0c 00 a8 c1 .crond.......... [ 315.420603] Padding ffff880077327f38: 12 73 65 66 63 6f 6e 74 65 78 74 5f 63 6f 6d 70 .sefcontext_comp [ 315.430006] Padding ffff880077327f48: 69 6c 65 00 00 00 03 08 00 00 00 00 0c 04 2d a7 ile...........-. [ 315.439405] Padding ffff880077327f58: 06 63 68 72 6f 6f 74 6f 64 3b 35 31 61 32 03 28 .chrootod;51a2.( [ 315.448807] Padding ffff880077327f68: ff ff 00 08 63 61 03 40 00 00 00 00 0c 00 a8 c2 ....ca.@........ [ 315.458205] Padding ffff880077327f78: 0c 69 6e 73 74 61 6c 6c 2d 69 6e 66 6f 00 03 48 .install-info..H [ 315.467609] Padding ffff880077327f88: 00 00 00 00 0c 04 2d c9 08 66 61 69 6c 6c 6f 63 ......-..failloc [ 315.477012] Padding ffff880077327f98: 6b 31 61 32 38 64 03 60 ff ff 00 08 00 00 03 78 k1a28d.`.......x [ 315.486408] Padding ffff880077327fa8: 00 00 00 00 0c 00 a8 cb 09 63 68 6b 63 6f 6e 66 .........chkconf [ 315.495804] Padding ffff880077327fb8: 69 67 00 00 00 00 03 80 00 00 00 00 0c 04 2d cb ig............-. [ 315.505209] Padding ffff880077327fc8: 11 70 61 6d 5f 63 6f 6e 73 6f 6c 65 5f 61 70 70 .pam_console_app [ 315.514605] Padding ffff880077327fd8: 6c 79 38 64 63 61 03 98 00 00 00 00 0c 00 a8 cc ly8dca.......... [ 315.524008] Padding ffff880077327fe8: 0c 61 6c 74 65 72 6e 61 74 69 76 65 73 00 03 b8 .alternatives... [ 315.533408] Padding ffff880077327ff8: 00 00 00 00 0c 02 46 fa ......F. [ 315.542107] FIX kmalloc-4096: Restoring 0xffff8800773278f8-0xffff880077327fff=0x5a System information is below: + cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=1984960k,nr_inodes=496240,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs rw,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 /dev/mapper/rhel_hp--xw9400--02-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=32,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 tmpfs /tmp tmpfs rw,seclabel 0 0 /dev/mapper/rhel_hp--xw9400--02-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0 binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0 + echo + lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 12 On-line CPU(s) list: 0-11 Thread(s) per core: 1 Core(s) per socket: 6 Socket(s): 2 NUMA node(s): 2 Vendor ID: AuthenticAMD CPU family: 16 Model: 8 Model name: Six-Core AMD Opteron(tm) Processor 2427 Stepping: 0 CPU MHz: 800.000 BogoMIPS: 4400.02 Virtualization: AMD-V L1d cache: 64K L1i cache: 64K L2 cache: 512K L3 cache: 6144K NUMA node0 CPU(s): 0,2,4,6,8,10 NUMA node1 CPU(s): 1,3,5,7,9,11 + echo + cat /proc/partitions major minor #blocks name 11 0 1536 sr0 8 0 39082680 sda 8 1 512000 sda1 8 2 38568960 sda2 253 0 4063232 dm-0 8 16 35566480 sdb 8 17 35564544 sdb1 253 1 47079424 dm-1 253 2 22986752 dm-2 + echo + pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name rhel_hp-xw9400-02 PV Size 36.78 GiB / not usable 0 Allocatable yes (but full) PE Size 4.00 MiB Total PE 9416 Free PE 0 Allocated PE 9416 PV UUID 8MvTYN-OaUs-a7K4-yF0W-k1G6-eItC-ndZDel --- Physical volume --- PV Name /dev/sdb1 VG Name rhel_hp-xw9400-02 PV Size 33.92 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 8682 Free PE 0 Allocated PE 8682 PV UUID 43zey8-rZMQ-VCO3-PnTM-fb8v-3IJF-LA9FvI + echo + vgdisplay --- Volume group --- VG Name rhel_hp-xw9400-02 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 2 Act PV 2 VG Size 70.70 GiB PE Size 4.00 MiB Total PE 18098 Alloc PE / Size 18098 / 70.70 GiB Free PE / Size 0 / 0 VG UUID 923eYU-qAJR-kRbj-MYwR-zBeh-2lP8-ZyhOfF + echo + lvdisplay --- Logical volume --- LV Path /dev/rhel_hp-xw9400-02/swap LV Name swap VG Name rhel_hp-xw9400-02 LV UUID FvWm56-fypL-T2du-CxVW-riyL-tO06-8dLBUH LV Write Access read/write LV Status available # open 2 LV Size 3.88 GiB Current LE 992 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/rhel_hp-xw9400-02/home LV Name home VG Name rhel_hp-xw9400-02 LV UUID 8VXYot-OHHf-WaXA-RlFj-I9b5-7qhc-zGZ5Qx LV Write Access read/write LV Status available # open 1 LV Size 21.92 GiB Current LE 5612 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Path /dev/rhel_hp-xw9400-02/root LV Name root VG Name rhel_hp-xw9400-02 LV UUID R5qalV-W0Dw-3C0S-JfUE-ubnB-plP9-j6Gf8D LV Write Access read/write LV Status available # open 1 LV Size 44.90 GiB Current LE 11494 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 CAI Qian From sammy@zms2.com Thu May 30 00:03:54 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 789E37F37 for ; Thu, 30 May 2013 00:03:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 67D7E304043 for ; Wed, 29 May 2013 22:03:51 -0700 (PDT) X-ASG-Debug-ID: 1369890228-04cb6c47422a9e40001-NocioJ Received: from zms2.com ([118.244.229.214]) by cuda.sgi.com with SMTP id YFkls07nqOlEcuXx for ; Wed, 29 May 2013 22:03:49 -0700 (PDT) X-Barracuda-Envelope-From: sammy@zms2.com X-Barracuda-Apparent-Source-IP: 118.244.229.214 Received: from Bkbnk ([124.42.215.127]) by zms2.com ; Thu, 30 May 2013 13:03:06 +0800 Date: Thu, 30 May 2013 13:03:48 +0800 X-Mailer: wpp v6.1.0.70996010 Message-ID: <20130530050348384.04E6087158BA105C@Pguaiqvpfmsa> To: From: Reply-To: Subject: TABLET PC ORDER MIME-Version: 1.0 X-ASG-Orig-Subj: TABLET PC ORDER Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: UNKNOWN[118.244.229.214] X-Barracuda-Start-Time: 1369890228 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, NO_REAL_NAME, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132430 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Hi Good morning. This is Chuck, Sales manager of WitPIay Co. ltd., We are tablet pc and smart phone manufacture in Shenzhen, China. Here is our website: http: // witplay.com I saw you on http://lxr.free-electrons.com/source/MAINTAINERS , and get to know you were doing business of computer products. So, I wonder if you are still interested in Tablet PC NEW PRODUCTS. IF YOU ARE INTERESTED, plese check our new products below: 1, 7 inch and 8 inch QUAD CORE 1G RAM, 1024*768 screen tablet pc(about 85$) ----- WP- 8729 2, HD 1280*800 screen 1G RAM Galaxy S3 Phone (512m/4G version about 125$)and quadcore CPU HTC butterfly style smart phone(about 200$). ----- WP- 5003, 5201 3, 9.7 inch tablet pc with 3G/GPS/FM ---- WP- 9501 4, 7 inch lowest price 42$ 800*480 screen with HDMI port. ---- WP- 7003 Good screen good quanlity. Call me at +86 131 295 70279 , let's talk about BIG BUSINESS. Not only sample order but also any questions are graetly welcome. IF YOU ARE NOT INTERESTED, sorry to bother you, please reply to let us know, NO MIALs will be sent to you in the future. Best regards, Chuck Chuck / Sales Manager Shenzhen WitPIay Technology, Co., Ltd. Telphone:+ 86 755 3284 5640 Fax:+ 86 755 3284 5641 Website: http: // witplay.com From david@fromorbit.com Thu May 30 00:21:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E14497F37 for ; Thu, 30 May 2013 00:21:33 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7BFFEAC003 for ; Wed, 29 May 2013 22:21:30 -0700 (PDT) X-ASG-Debug-ID: 1369891288-04cb6c47412aad70001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 4euvA6Y2ES8g2LVd for ; Wed, 29 May 2013 22:21:28 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2013 14:51:00 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UhvI9-0007tm-NE; Thu, 30 May 2013 15:20:49 +1000 Date: Thu, 30 May 2013 15:20:49 +1000 From: Dave Chinner To: CAI Qian Cc: xfs@oss.sgi.com, stable@vger.kernel.org Subject: Re: 3.9.3: Oops running xfstests Message-ID: <20130530052049.GK29466@dastard> X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1369891288 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132432 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, May 29, 2013 at 11:45:28PM -0400, CAI Qian wrote: > Also reproduced this on 3.9.4 on several different machines. How? what workload are you running that causes it to occur? > System information is below: > > + cat /proc/mounts .... > /dev/mapper/rhel_hp--xw9400--02-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 > /dev/mapper/rhel_hp--xw9400--02-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 > /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 Which of these filesystems did it happen on? Or some other filesystem not mounted when you took this snapshot? And can you post the xfs_info output of the filesystems under test, too? Cheers, Dave. -- Dave Chinner david@fromorbit.com From qcai@redhat.com Thu May 30 00:40:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 412997F37 for ; Thu, 30 May 2013 00:40:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id DCE61AC003 for ; Wed, 29 May 2013 22:40:35 -0700 (PDT) X-ASG-Debug-ID: 1369892434-04bdf063bd273590001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 2JLry0TSCZUTyHc0 for ; Wed, 29 May 2013 22:40:34 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4U5eWJu022033; Thu, 30 May 2013 01:40:32 -0400 Date: Thu, 30 May 2013 01:40:32 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: xfs@oss.sgi.com, stable@vger.kernel.org Message-ID: <1824023060.8558101.1369892432333.JavaMail.root@redhat.com> In-Reply-To: <20130530052049.GK29466@dastard> References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> <20130530052049.GK29466@dastard> Subject: Re: 3.9.3: Oops running xfstests MIME-Version: 1.0 X-ASG-Orig-Subj: Re: 3.9.3: Oops running xfstests Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: ZbdgR+krknWTju4fuxZ38z6XOhGjeg== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1369892434 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132432 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Dave Chinner" > To: "CAI Qian" > Cc: xfs@oss.sgi.com, stable@vger.kernel.org > Sent: Thursday, May 30, 2013 1:20:49 PM > Subject: Re: 3.9.3: Oops running xfstests > > On Wed, May 29, 2013 at 11:45:28PM -0400, CAI Qian wrote: > > Also reproduced this on 3.9.4 on several different machines. > > How? what workload are you running that causes it to occur? I have been running the following workloads, trinity, ltp (including oom tests and some filesystem tests), some hugetlbfs tests, selinux test suite, tracepoint tests, connectathon tests and then xfstests. I am still trying to narrow down the minimal workload that could reproduce this. > > xfs_attr_leaf_compact/xfs_attr_leaf_moveents> > > > System information is below: > > > > + cat /proc/mounts > .... > > /dev/mapper/rhel_hp--xw9400--02-root / xfs > > rw,seclabel,relatime,attr2,inode64,noquota 0 0 > > /dev/mapper/rhel_hp--xw9400--02-home /home xfs > > rw,seclabel,relatime,attr2,inode64,noquota 0 0 > > /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 > > Which of these filesystems did it happen on? Or some other > filesystem not mounted when you took this snapshot? + export TEST_DEV=/dev/mapper/rhel_hp--bl495cg5--02-swap + TEST_DEV=/dev/mapper/rhel_hp--bl495cg5--02-swap + export TEST_DIR=/mnt/testarea/test + TEST_DIR=/mnt/testarea/test + export SCRATCH_DEV=/dev/mapper/rhel_hp--bl495cg5--02-home + SCRATCH_DEV=/dev/mapper/rhel_hp--bl495cg5--02-home + export SCRATCH_MNT=/mnt/testarea/scratch + SCRATCH_MNT=/mnt/testarea/scratch + mkdir -p /mnt/testarea/test home = /dev/mapper/rhel_hp--bl495cg5--02-home + mkdir -p /mnt/testarea/scratch + mkfs.xfs -f /dev/mapper/rhel_hp--bl495cg5--02-swap meta-data=/dev/mapper/rhel_hp--bl495cg5--02-swap isize=256 agcount=4, agsize=510976 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=2043904, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 + mkfs.xfs -f /dev/mapper/rhel_hp--bl495cg5--02-home meta-data=/dev/mapper/rhel_hp--bl495cg5--02-home isize=256 agcount=4, agsize=1103872 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=4415488, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 > > And can you post the xfs_info output of the filesystems under test, > too? xfs_info: /dev/mapper/rhel_hp--bl495cg5--02-swap is not a mounted XFS filesystem + echo + xfs_info /dev/mapper/rhel_hp--bl495cg5--02-home meta-data=/dev/mapper/rhel_hp--bl495cg5--02-home isize=256 agcount=4, agsize=1103872 blks = sectsz=512 attr=2 data = bsize=4096 blocks=4415488, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 CAI Qian > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > From alexander.tsvetkov@oracle.com Thu May 30 03:07:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 38CFC7F37 for ; Thu, 30 May 2013 03:07:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B9E91AC003 for ; Thu, 30 May 2013 01:07:23 -0700 (PDT) X-ASG-Debug-ID: 1369901239-04cbb0049c2beff0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id aQw7oLMEpb4HrhNG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 30 May 2013 01:07:19 -0700 (PDT) X-Barracuda-Envelope-From: alexander.tsvetkov@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r4U87IBx003195 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 30 May 2013 08:07:19 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4U87HBa001854 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 30 May 2013 08:07:18 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r4U87HsX006277 for ; Thu, 30 May 2013 08:07:17 GMT Received: from [10.162.81.61] (/10.162.81.61) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 30 May 2013 01:07:17 -0700 Message-ID: <51A708B2.2080701@oracle.com> Date: Thu, 30 May 2013 12:07:14 +0400 From: alexander.tsvetkov@oracle.com Organization: Oracle Corporation User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110621 Oracle/3.1.11-2.0.1.el6_1 Lightning/1.0b2 OracleBeehiveExtension/1.0.0.2-OracleInternal ObetStats/CATLAF_1360077495220-530802236 Thunderbird/3.1.11 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: XFStest suite problem Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: XFStest suite problem Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1369901239 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132441 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name Hello, There is a problem found in XFS tests suite: attempt to run XFS tests with some tests excluded from run, for example, "./check -g auto -X 231" causes the unexpected exclusion of some other tests (for example generic/127 in this case). Looking into suite's created exclude list indicates that it was incorrectly built by including some garbage together with correct test numbers records, so /tmp/30535.xlist looks like: "generic/#! generic//bin/bash generic/# generic/FSQA generic/Test generic/No. generic/231 generic/# generic/# generic/Run generic/fsx generic/with generic/quotas generic/enabled generic/and generic/verify generic/accounted generic/quotas generic/in generic/the generic/end generic/# generic/# generic/Derived generic/from generic/test generic/127 generic/#----------------------------------------------------------------------- generic/# generic/Copyright generic/(c) generic/2006 generic/Silicon generic/Graphics, ..." I think the following code of "check" script incorrectly builds this exclude list: "-X) xfile=$2; shift ; for d in $SRC_GROUPS $FSTYP; do [ -f $SRC_DIR/$d/$xfile ] || continue for f in `cat $SRC_DIR/$d/$xfile`; do echo $d/$f >> $tmp.xlist done done ;;" Used XFStests suite version from 2013-05-22. Thanks, Alexander Tsvetkov From bfoster@redhat.com Thu May 30 07:05:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 67CC07F37 for ; Thu, 30 May 2013 07:05:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id DBD05AC004 for ; Thu, 30 May 2013 05:05:07 -0700 (PDT) X-ASG-Debug-ID: 1369915506-04cb6c473f2bedb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gQw5THAeY88apMbA for ; Thu, 30 May 2013 05:05:06 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UC5434004877 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 08:05:04 -0400 Received: from laptop.bfoster (vpn-63-41.rdu2.redhat.com [10.10.63.41]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4UC52gx001318 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 30 May 2013 08:05:03 -0400 Message-ID: <51A73FC4.5080700@redhat.com> Date: Thu, 30 May 2013 08:02:12 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 4/9] xfs: rework dquot CRCs References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-5-git-send-email-david@fromorbit.com> <51A64FD3.8000606@redhat.com> <20130530010025.GF29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/9] xfs: rework dquot CRCs In-Reply-To: <20130530010025.GF29466@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369915506 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/29/2013 09:00 PM, Dave Chinner wrote: > On Wed, May 29, 2013 at 02:58:27PM -0400, Brian Foster wrote: >> On 05/27/2013 02:38 AM, Dave Chinner wrote: >>> From: Dave Chinner >>> >>> Calculating dquot CRCs when the backing buffer is written back just >>> doesn't work reliably. There are several places which manipulate >>> dquots directly in the buffers, and they don't calculate CRCs >>> appropriately, nor do they always set the buffer up to calculate >>> CRCs appropriately. >>> >>> Firstly, if we log a dquot buffer (e.g. during allocation) it gets >>> logged without valid CRC, and so on recovery we end up with a dquot >>> that is not valid. >>> >>> Secondly, if we recover/repair a dquot, we don't have a verifier >>> attached to the buffer and hence CRCs arenot calculate don the way >>> down to disk. >>> >>> Thirdly, calculating the CRC after we've changed the contents means >>> that if we re-read the dquot from the buffer, we cannot verify the >>> contents of the dquot are valid, as the CRC is invalid. >>> >>> So, to avoid all the dquot CRC errors that are being detected by the >>> read verifier, change to using the same model as for inodes. that >>> is, dquot CRCs are calculated and written to the backing buffer at >>> the time the dquot is flushed to the backing buffer. If we modify >>> the dquuot directly in the backing buffer, calculate the CRC >>> immediately after the modification is complete. Hence the dquot in >>> the on-disk buffer should always have a valid CRC. >>> >>> Signed-off-by: Dave Chinner >>> --- >>> fs/xfs/xfs_dquot.c | 37 ++++++++++++++++--------------------- >>> fs/xfs/xfs_log_recover.c | 10 ++++++++++ >>> fs/xfs/xfs_qm.c | 36 ++++++++++++++++++++++++++---------- >>> fs/xfs/xfs_quota.h | 2 ++ >>> 4 files changed, 54 insertions(+), 31 deletions(-) >>> >> ... >>> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c >>> index f41702b..d181542 100644 >>> --- a/fs/xfs/xfs_qm.c >>> +++ b/fs/xfs/xfs_qm.c >>> @@ -41,6 +41,7 @@ >>> #include "xfs_qm.h" >>> #include "xfs_trace.h" >>> #include "xfs_icache.h" >>> +#include "xfs_cksum.h" >>> >>> /* >>> * The global quota manager. There is only one of these for the entire >>> @@ -839,7 +840,7 @@ xfs_qm_reset_dqcounts( >>> xfs_dqid_t id, >>> uint type) >>> { >>> - xfs_disk_dquot_t *ddq; >>> + struct xfs_dqblk *dqb; >>> int j; >>> >>> trace_xfs_reset_dqcounts(bp, _RET_IP_); >>> @@ -853,8 +854,12 @@ xfs_qm_reset_dqcounts( >>> do_div(j, sizeof(xfs_dqblk_t)); >>> ASSERT(mp->m_quotainfo->qi_dqperchunk == j); >>> #endif >>> - ddq = bp->b_addr; >>> + dqb = bp->b_addr; >>> for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { >>> + struct xfs_disk_dquot *ddq; >>> + >>> + ddq = (struct xfs_disk_dquot *)&dqb[j]; >>> + >>> /* >>> * Do a sanity check, and if needed, repair the dqblk. Don't >>> * output any warnings because it's perfectly possible to >>> @@ -871,7 +876,8 @@ xfs_qm_reset_dqcounts( >>> ddq->d_bwarns = 0; >>> ddq->d_iwarns = 0; >>> ddq->d_rtbwarns = 0; >>> - ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); >>> + xfs_update_cksum((char *)&dqb[j], sizeof(struct xfs_dqblk), >>> + XFS_DQUOT_CRC_OFF); >> >> Nice cleanup on the cast ugliness even without the crc change. Is there >> a technical reason for the unconditional crc update here beyond that >> we're doing a reset? I'm wondering if there's any value in leaving those >> bits untouched for a filesystem that might have never enabled crc >> (quotacheck or not). > > The dquot might be zeroed and unused, but the buffer it sits in is > still allocated and valid. That means if we ever start using that > dquot again (either by quotacheck or a new uid/gid/prid), it will be > read straight out of the buffer rather than allocated, and hence the > constraint that allocated but unused dquots still need to have valid > CRCs. > The constraint makes sense when CRCs are enabled... > FWIW, the dquot buffer read validates the CRC on all dquots in the > buffer when it comes off disk as it has no way of knowing what > dquots contain valid data or not. Same with the xfs_qm_dqcheck() > call - an unused dquot still needs to be a valid dquot to pass those > checks... > Yeah, that part makes sense. I've followed through and grokked most of the dquot buffer read and dquot CRC validation code, I think. My question is more why is the code above (in xfs_qm_reset_dqcounts()) not the following? if (xfs_sb_version_hascrc(&mp->m_sb)) xfs_update_cksum(...); ... because it currently looks like that if CRCs are not enabled, you're writing what is effectively a padded area (in terms of the semantics of the on-disk structure, not necessarily the kernel code). It was never a valid CRC and won't be as soon as the dquot is used again, no? >> FWIW, the rest of this patch looks sane to me (I'm less familiar with >> the log recovery code, but the changes seem isolated and >> straightforward) and I couldn't locate anywhere else we modify the >> backing buffer for the dquot. > > Right, apart from dquot allocation and flushing, there aren't any. > Resetting the dquots to zero before a quota check is a special case. > Doing it via the buffer avoids needing to initialise all the dquots > in memory that *might* be tracked by the quota file. But we don't > know what quota IDs are tracked in the quota file with first mapping > the quota file and finding all the offsets that contain blocks. And, > well, once we have that mapping, why would be do N xfs_qm_dqget() > calls per buffer to get initialised, cached dquots from the buffer > when we can simply RMW the buffers we've mapped directly? > I walked through a bit of the quota check code and that makes sense. Thanks for the explanation. Brian > Cheers, > > Dave. > From jack@suse.cz Thu May 30 07:45:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5D58B7F37 for ; Thu, 30 May 2013 07:45:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id E01B7AC003 for ; Thu, 30 May 2013 05:45:48 -0700 (PDT) X-ASG-Debug-ID: 1369917947-04cb6c47402c1b30001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id FSbRkidBk2QGuFYx for ; Thu, 30 May 2013 05:45:47 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 8D5D3A4EB7; Thu, 30 May 2013 14:45:46 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id E8FCF80780; Thu, 30 May 2013 14:45:45 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 2/3] 285: Fix file syncing Date: Thu, 30 May 2013 14:45:38 +0200 X-ASG-Orig-Subj: [PATCH 2/3] 285: Fix file syncing Message-Id: <1369917939-22660-2-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1369917939-22660-1-git-send-email-jack@suse.cz> References: <1369917939-22660-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369917947 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132459 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The intention of tests 08 and 09 in test generic/285 is to sync the whole file before checking for data and holes. However the helper is called with nbytes argument set to 0 which results in not syncing anything. Set nbytes properly. Signed-off-by: Jan Kara --- src/seek_sanity_test.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index eec6903..7d5868b 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -229,7 +229,7 @@ static int test09(int fd, int testnum) * Sync out dirty pages from bufsz * 100, this will convert * the dirty page to writeback. */ - ret = do_sync_dirty_pages(fd, bufsz * 100, 0); + ret = do_sync_dirty_pages(fd, bufsz * 100, filsz); if (ret) goto out; @@ -269,7 +269,7 @@ static int test08(int fd, int testnum) goto out; /* Sync out all file */ - ret = do_sync_dirty_pages(fd, 0, 0); + ret = do_sync_dirty_pages(fd, 0, filsz); if (ret) goto out; -- 1.8.1.4 From jack@suse.cz Thu May 30 07:45:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 944997F50 for ; Thu, 30 May 2013 07:45:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 31596AC001 for ; Thu, 30 May 2013 05:45:52 -0700 (PDT) X-ASG-Debug-ID: 1369917947-04bdf078182e2d20001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id AqXblCIMF1pEkGeV for ; Thu, 30 May 2013 05:45:47 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 8EA63A50E4; Thu, 30 May 2013 14:45:46 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id E9D3080781; Thu, 30 May 2013 14:45:45 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 3/3] 285: Test offsets over 4GB Date: Thu, 30 May 2013 14:45:39 +0200 X-ASG-Orig-Subj: [PATCH 3/3] 285: Test offsets over 4GB Message-Id: <1369917939-22660-3-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1369917939-22660-1-git-send-email-jack@suse.cz> References: <1369917939-22660-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369917947 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132459 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over 4GB. Signed-off-by: Jan Kara --- src/seek_sanity_test.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index 7d5868b..55e7ed6 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -18,6 +18,7 @@ */ #define _XOPEN_SOURCE 500 +#define _FILE_OFFSET_BITS 64 #include #include #include @@ -191,6 +192,42 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, return ret; } +/* test a huge file to check for 4G overflows */ +static int test10(int fd, int testnum) +{ + char *buf = NULL; + int bufsz = alloc_size; + off_t filsz = 8ULL << 30; /* 8G */ + off_t off = filsz - 2*bufsz; + int ret = -1; + + buf = do_malloc(bufsz); + if (!buf) + goto out; + memset(buf, 'a', bufsz); + + ret = do_pwrite(fd, buf, bufsz, 0); + if (ret) + goto out; + ret = do_pwrite(fd, buf, bufsz, off); + if (ret) + goto out; + + /* offset at the beginning */ + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); + + /* offset around eof */ + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); + +out: + do_free(buf); + return ret; +} /* * test file with unwritten extents, have both dirty and * writeback pages in page cache. @@ -577,6 +614,7 @@ struct testrec seek_tests[] = { { 7, test07, "Test file with unwritten extents, only have dirty pages" }, { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, + { 10, test10, "Test a huge file" }, }; static int run_test(struct testrec *tr) -- 1.8.1.4 From jack@suse.cz Thu May 30 07:45:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0D1697F51 for ; Thu, 30 May 2013 07:45:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id DD6BD304064 for ; Thu, 30 May 2013 05:45:52 -0700 (PDT) X-ASG-Debug-ID: 1369917951-04bdf078182e2d40001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 48RQRcdlV2vGBdPJ for ; Thu, 30 May 2013 05:45:51 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 8FB0CA51CB; Thu, 30 May 2013 14:45:46 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id E424881DC1; Thu, 30 May 2013 14:45:45 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 1/3] 285: Fix test for ext4 in some configurations Date: Thu, 30 May 2013 14:45:37 +0200 X-ASG-Orig-Subj: [PATCH 1/3] 285: Fix test for ext4 in some configurations Message-Id: <1369917939-22660-1-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369917951 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132459 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In some configurations (e.g. 1 KB block size), ext4 can decide it is better to zero out several blocks rather than splitting unwritten extent. This changes results SEEK_HOLE / SEEK_DATA returns and thus the test fails. Fix the problem by disabling the feature for this test. Signed-off-by: Jan Kara --- tests/generic/285 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/generic/285 b/tests/generic/285 index b700a15..8078b1c 100755 --- a/tests/generic/285 +++ b/tests/generic/285 @@ -46,6 +46,12 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" +# Disable extent zeroing for ext4 as that change where holes are created +if [ "$FSTYP" = "ext4" ]; then + DEV=`basename $TEST_DEV` + echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb +fi + _cleanup() { eval "rm -f $BASE_TEST_FILE.*" -- 1.8.1.4 From pde@yen.gr Thu May 30 07:59:47 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE, T_KHOP_FOREIGN_CLICK autolearn=ham version=3.3.1 X-Original-To: linux-xfs@oss.sgi.com Delivered-To: linux-xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1C39D7F37 for ; Thu, 30 May 2013 07:59:47 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id EC3448F8050 for ; Thu, 30 May 2013 05:59:46 -0700 (PDT) X-ASG-Debug-ID: 1369918783-04cb6c473f2c2a60001-w1Z2WR Received: from mail.hcg.gr (mail.hcg.gr [195.167.19.151]) by cuda.sgi.com with ESMTP id m6Ng9xBouof6CbpX for ; Thu, 30 May 2013 05:59:44 -0700 (PDT) X-Barracuda-Envelope-From: pde@yen.gr X-Barracuda-Apparent-Source-IP: 195.167.19.151 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.hcg.gr (Postfix) with ESMTP id EC9AB5E0089; Thu, 30 May 2013 15:59:58 +0300 (EEST) X-Virus-Scanned: amavisd-new at hcg.gr Received: from mail.hcg.gr ([127.0.0.1]) by localhost (mail.hcg.gr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0bf+flDDsQoM; Thu, 30 May 2013 15:59:51 +0300 (EEST) Received: from mail.hcg.gr (mail.hcg.gr [195.167.19.151]) by mail.hcg.gr (Postfix) with ESMTP id A03845E0057; Thu, 30 May 2013 15:59:46 +0300 (EEST) Date: Thu, 30 May 2013 15:59:46 +0300 (EEST) From: KBC Online Message-ID: <1406999057.148170.1369918786558.JavaMail.root@mail.hcg.gr> Subject: MIME-Version: 1.0 X-ASG-Orig-Subj: Content-Type: multipart/alternative; boundary="----=_Part_148169_1260054932.1369918786550" X-Originating-IP: [178.73.198.10] X-Mailer: Zimbra 6.0.5_GA_2213.RHEL5_64 (zclient/6.0.5_GA_2213.RHEL5_64) To: undisclosed-recipients:; X-Barracuda-Connect: mail.hcg.gr[195.167.19.151] X-Barracuda-Start-Time: 1369918783 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.80 X-Barracuda-Spam-Status: No, SCORE=1.80 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA578_CH, HTML_MESSAGE, MISSING_SUBJECT, MISSING_SUBJECT_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132461 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 MISSING_SUBJECT Missing Subject: header 1.28 MISSING_SUBJECT_2 Missing Subject: header 0.50 BSF_SC7_SA578_CH Custom Rule SA578_CH ------=_Part_148169_1260054932.1369918786550 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable KBC-Online Belgi=C3=AB toont grote zorg en aandacht voor de veiligheid en i= ntegriteit van al onze bankrekeningen. Wij willen graag uw aandacht vestige= n op het volgende. Vorig jaar, KBC Belgi=C3=AB en vele andere Belgische ban= ken hebben een Internet fraude op grote schaal. Oplichters hebben altijd ha= rd gewerkt om uw bankrekeningen openen. Als preventieve maatregel, KBC-Online lanceert een verbeterde Trusteer Rapp= ort beveiligingssoftware. Het is helemaal gratis en detecteert verdachte in= uw bankrekeningen online activiteiten. Verslag werkt naast uw anti-virus e= n firewall software bestaat om maximale bescherming van uw online banking g= egevens te garanderen, zelfs als uw computer is ge=C3=AFnfecteerd met een v= irus. Het lijkt erop dat uw online bankrekening KBC nog niet is uitgerust met de = nieuwe beveiligingssoftware Trusteer Rapport. Slechts 5 minuten van uw tijd= nodig om te waken tegen identiteitsdiefstal online bankieren en online ban= kieren fraude Om dit proces te beginnen, kunt u gebruik maken van de volgende link: klik = hier U wordt gecontacteerd door een vertegenwoordiger van de KBC-bank, na de upd= ate om het hele proces te voltooien. Wanneer het proces voltooid is, je bli= jft onze online bankieren te gebruiken, met de steun van een systeem van ve= rbeterde beveiliging. Wij willen u alvast bedanken voor uw medewerking. Hoogachtend,=20 Klantenservice. ------=_Part_148169_1260054932.1369918786550 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable



KBC-Online Belgi=C3=AB toont grote zorg en aandacht voor de veiligheid e= n integriteit van al onze bankrekeningen. Wij willen graag uw aandacht vest= igen op het volgende. Vorig jaar, KBC Belgi=C3=AB en vele andere Belgische = banken hebben een Internet fraude op grote schaal. Oplichters hebben altijd= hard gewerkt om uw bankrekeningen openen.

Als preventieve maatregel, KBC-Online lanceert een verbeterde Trusteer R= apport beveiligingssoftware. Het is helemaal gratis en detecteert verdachte= in uw bankrekeningen online activiteiten. Verslag werkt naast uw anti-viru= s en firewall software bestaat om maximale bescherming van uw online bankin= g gegevens te garanderen, zelfs als uw computer is ge=C3=AFnfecteerd met ee= n virus.

Het lijkt erop dat uw online bankrekening KBC nog niet is uitgerust met = de nieuwe beveiligingssoftware Trusteer Rapport. Slechts 5 minuten van uw t= ijd nodig om te waken tegen identiteitsdiefstal online bankieren en online = bankieren fraude

Om dit proces te beginnen, kunt u gebruik maken van de volgende link: klik hier

U wordt gecontacteerd door een vertegenwoordiger van de KBC-bank, na de = update om het hele proces te voltooien. Wanneer het proces voltooid is, je = blijft onze online bankieren te gebruiken, met de steun van een systeem van= verbeterde beveiliging.

Wij willen u alvast bedanken voor uw medewerking.
Hoogachtend,
Kl= antenservice.

------=_Part_148169_1260054932.1369918786550-- From sandeen@sandeen.net Thu May 30 08:42:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8F7607F37 for ; Thu, 30 May 2013 08:42:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6B8EE8F8033 for ; Thu, 30 May 2013 06:42:31 -0700 (PDT) X-ASG-Debug-ID: 1369921349-04bdf078162e7ce0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id TcLRldCNNPRbwHY4 for ; Thu, 30 May 2013 06:42:29 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 78AF763740D2; Thu, 30 May 2013 08:42:29 -0500 (CDT) Message-ID: <51A75745.7090805@sandeen.net> Date: Thu, 30 May 2013 08:42:29 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: alexander.tsvetkov@oracle.com CC: xfs@oss.sgi.com Subject: Re: XFStest suite problem References: <51A708B2.2080701@oracle.com> X-ASG-Orig-Subj: Re: XFStest suite problem In-Reply-To: <51A708B2.2080701@oracle.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369921349 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132463 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 5/30/13 3:07 AM, alexander.tsvetkov@oracle.com wrote: > I think the following code of "check" script incorrectly builds this exclude list: > > "-X) xfile=$2; shift ; > for d in $SRC_GROUPS $FSTYP; do > [ -f $SRC_DIR/$d/$xfile ] || continue > for f in `cat $SRC_DIR/$d/$xfile`; do > echo $d/$f >> $tmp.xlist Well, it is perhaps unexpected, but: -X file exclude individual tests I think it's designed to actually exclude tests contained in that file, not test numbers. It's not very obvious. :( But from the commit log: commit 0b1e8abd4a6dbce54bcc5d0467e58966e41e7eb8 Author: Dave Chinner Date: Fri Mar 15 12:28:05 2013 +0000 xfstests: Reintroduce configurable test expunging. It is definitely handy to be able to disabdle certain tests (e.g. tests that are known to hang or crash the test machine on certain kernels), so re-introducing the capability of avoiding certain tests just by placing them in a file is useful. Introduce a command line option to specify the expunged file name. The file will exist in each tests/* sub-directory so that only the testname is required, and can be managed independently. The use of a command line parameter allows multiple expunge files to exist simultaneously in the one xfstests tree which simplifies management of a source repository used for multiple versions of a distro. Typical usage: $ cat tests/generic/3.0-stable-avoid 280 $ sudo ./check -X 3.0-stable-avoid generic/280 FSTYP -- xfs (debug) PLATFORM -- Linux/x86_64 test-1 3.0.39-dgc+ MKFS_OPTIONS -- -f -bsize=4096 /dev/vdb MOUNT_OPTIONS -- /dev/vdb /mnt/scratch generic/280 [expunged] Passed all 0 tests $ From sandeen@redhat.com Thu May 30 08:45:36 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5103A7F50 for ; Thu, 30 May 2013 08:45:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3BD748F8033 for ; Thu, 30 May 2013 06:45:36 -0700 (PDT) X-ASG-Debug-ID: 1369921535-04cb6c47422c65e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id RZg0jv5drtMwAbGh for ; Thu, 30 May 2013 06:45:35 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UDjY8t010572 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 09:45:34 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UDjXBv027786 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 09:45:34 -0400 Message-ID: <51A757FD.1040104@redhat.com> Date: Thu, 30 May 2013 08:45:33 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 1/3] 285: Fix test for ext4 in some configurations References: <1369917939-22660-1-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/3] 285: Fix test for ext4 in some configurations In-Reply-To: <1369917939-22660-1-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369921535 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/30/13 7:45 AM, Jan Kara wrote: > In some configurations (e.g. 1 KB block size), ext4 can decide it is > better to zero out several blocks rather than splitting unwritten > extent. This changes results SEEK_HOLE / SEEK_DATA returns and thus the > test fails. Fix the problem by disabling the feature for this test. > > Signed-off-by: Jan Kara > --- > tests/generic/285 | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/tests/generic/285 b/tests/generic/285 > index b700a15..8078b1c 100755 > --- a/tests/generic/285 > +++ b/tests/generic/285 > @@ -46,6 +46,12 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile > > [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" > > +# Disable extent zeroing for ext4 as that change where holes are created > +if [ "$FSTYP" = "ext4" ]; then > + DEV=`basename $TEST_DEV` > + echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb > +fi > + > _cleanup() > { > eval "rm -f $BASE_TEST_FILE.*" > When the test dev is unmounted & remounted this will be reset, right? So: Reviewed-by: Eric Sandeen From sandeen@redhat.com Thu May 30 08:47:37 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 04E567F3F for ; Thu, 30 May 2013 08:47:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8746CAC001 for ; Thu, 30 May 2013 06:47:33 -0700 (PDT) X-ASG-Debug-ID: 1369921652-04cbb0049c2d2b20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id OtKrZE7pqd8QodD1 for ; Thu, 30 May 2013 06:47:32 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UDlWvC009426 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 09:47:32 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4UDlUj0029049 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 30 May 2013 09:47:31 -0400 Message-ID: <51A75872.4080909@redhat.com> Date: Thu, 30 May 2013 08:47:30 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 2/3] 285: Fix file syncing References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-2-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/3] 285: Fix file syncing In-Reply-To: <1369917939-22660-2-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369921652 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/30/13 7:45 AM, Jan Kara wrote: > The intention of tests 08 and 09 in test generic/285 is to sync the > whole file before checking for data and holes. However the helper is > called with nbytes argument set to 0 which results in not syncing > anything. Set nbytes properly. Hm, are you sure? (Is the man page wrong, or is the sync_file_range implementation wrong?) DESCRIPTION sync_file_range() permits fine control when synchronizing the open file referred to by the file descriptor fd with disk. offset is the starting byte of the file range to be synchro- nized. nbytes specifies the length of the range to be synchro- nized, in bytes; if nbytes is zero, then all bytes from offset through to the end of file are synchronized. -Eric > Signed-off-by: Jan Kara > --- > src/seek_sanity_test.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index eec6903..7d5868b 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -229,7 +229,7 @@ static int test09(int fd, int testnum) > * Sync out dirty pages from bufsz * 100, this will convert > * the dirty page to writeback. > */ > - ret = do_sync_dirty_pages(fd, bufsz * 100, 0); > + ret = do_sync_dirty_pages(fd, bufsz * 100, filsz); > if (ret) > goto out; > > @@ -269,7 +269,7 @@ static int test08(int fd, int testnum) > goto out; > > /* Sync out all file */ > - ret = do_sync_dirty_pages(fd, 0, 0); > + ret = do_sync_dirty_pages(fd, 0, filsz); > if (ret) > goto out; > > From sandeen@redhat.com Thu May 30 08:48:28 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 68F5C7F3F for ; Thu, 30 May 2013 08:48:28 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id DE8A7AC004 for ; Thu, 30 May 2013 06:48:27 -0700 (PDT) X-ASG-Debug-ID: 1369921706-04cbb0049c2d2c30001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id eUr8uhCOfZNDPXRQ for ; Thu, 30 May 2013 06:48:26 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UDmQ3G009699 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 09:48:26 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UDmPfl005082 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 09:48:26 -0400 Message-ID: <51A758A8.80502@redhat.com> Date: Thu, 30 May 2013 08:48:24 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3] 285: Test offsets over 4GB References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-3-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] 285: Test offsets over 4GB In-Reply-To: <1369917939-22660-3-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369921706 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/30/13 7:45 AM, Jan Kara wrote: > Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over > 4GB. Hm, should we add 2T as well while we're at it? (and does this cause any new failures?) -Eric > Signed-off-by: Jan Kara > --- > src/seek_sanity_test.c | 38 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 38 insertions(+) > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index 7d5868b..55e7ed6 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -18,6 +18,7 @@ > */ > > #define _XOPEN_SOURCE 500 > +#define _FILE_OFFSET_BITS 64 > #include > #include > #include > @@ -191,6 +192,42 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, > return ret; > } > > +/* test a huge file to check for 4G overflows */ > +static int test10(int fd, int testnum) > +{ > + char *buf = NULL; > + int bufsz = alloc_size; > + off_t filsz = 8ULL << 30; /* 8G */ > + off_t off = filsz - 2*bufsz; > + int ret = -1; > + > + buf = do_malloc(bufsz); > + if (!buf) > + goto out; > + memset(buf, 'a', bufsz); > + > + ret = do_pwrite(fd, buf, bufsz, 0); > + if (ret) > + goto out; > + ret = do_pwrite(fd, buf, bufsz, off); > + if (ret) > + goto out; > + > + /* offset at the beginning */ > + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); > + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); > + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); > + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); > + > + /* offset around eof */ > + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); > + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); > + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); > + > +out: > + do_free(buf); > + return ret; > +} > /* > * test file with unwritten extents, have both dirty and > * writeback pages in page cache. > @@ -577,6 +614,7 @@ struct testrec seek_tests[] = { > { 7, test07, "Test file with unwritten extents, only have dirty pages" }, > { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, > { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, > + { 10, test10, "Test a huge file" }, > }; > > static int run_test(struct testrec *tr) > From bfoster@redhat.com Thu May 30 09:20:31 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BC9BE7F37 for ; Thu, 30 May 2013 09:20:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A15508F8040 for ; Thu, 30 May 2013 07:20:28 -0700 (PDT) X-ASG-Debug-ID: 1369923627-04cb6c47412c9450001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 7EdqH9y7aYv7WJ40 for ; Thu, 30 May 2013 07:20:27 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UEKOoE029100 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 10:20:25 -0400 Received: from laptop.bfoster (vpn-63-41.rdu2.redhat.com [10.10.63.41]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UEKNEO002333 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 10:20:24 -0400 Message-ID: <51A75F7A.6040302@redhat.com> Date: Thu, 30 May 2013 10:17:30 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-8-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. In-Reply-To: <1369636707-15150-8-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369923627 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > XFS has failed to kill suid/sgid bits correctly when truncating > files of non-zero size since commit c4ed4243 ("xfs: split > xfs_setattr") introduced in the 3.1 kernel. Fix it. > The code makes sense and I can easily hit an assert when truncating (extending) a suid file on a debug kernel without this patch (and I see the suid dropped with the patch). The changelog seems slightly misleading (implying any truncate of a zero sized file should work, when really only 0->0 size truncates work), but not a big deal... Reviewed-by: Brian Foster > Fix it. > > cc: stable kernel > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_iops.c | 47 ++++++++++++++++++++++++++++++++--------------- > 1 file changed, 32 insertions(+), 15 deletions(-) > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index d82efaa..ca9ecaa 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -455,6 +455,28 @@ xfs_vn_getattr( > return 0; > } > > +static void > +xfs_setattr_mode( > + struct xfs_trans *tp, > + struct xfs_inode *ip, > + struct iattr *iattr) > +{ > + struct inode *inode = VFS_I(ip); > + umode_t mode = iattr->ia_mode; > + > + ASSERT(tp); > + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > + > + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) > + mode &= ~S_ISGID; > + > + ip->i_d.di_mode &= S_IFMT; > + ip->i_d.di_mode |= mode & ~S_IFMT; > + > + inode->i_mode &= S_IFMT; > + inode->i_mode |= mode & ~S_IFMT; > +} > + > int > xfs_setattr_nonsize( > struct xfs_inode *ip, > @@ -606,18 +628,8 @@ xfs_setattr_nonsize( > /* > * Change file access modes. > */ > - if (mask & ATTR_MODE) { > - umode_t mode = iattr->ia_mode; > - > - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) > - mode &= ~S_ISGID; > - > - ip->i_d.di_mode &= S_IFMT; > - ip->i_d.di_mode |= mode & ~S_IFMT; > - > - inode->i_mode &= S_IFMT; > - inode->i_mode |= mode & ~S_IFMT; > - } > + if (mask & ATTR_MODE) > + xfs_setattr_mode(tp, ip, iattr); > > /* > * Change file access or modified times. > @@ -714,9 +726,8 @@ xfs_setattr_size( > return XFS_ERROR(error); > > ASSERT(S_ISREG(ip->i_d.di_mode)); > - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| > - ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| > - ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); > + ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| > + ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); > > if (!(flags & XFS_ATTR_NOLOCK)) { > lock_flags |= XFS_IOLOCK_EXCL; > @@ -860,6 +871,12 @@ xfs_setattr_size( > xfs_inode_clear_eofblocks_tag(ip); > } > > + /* > + * Change file access modes. > + */ > + if (mask & ATTR_MODE) > + xfs_setattr_mode(tp, ip, iattr); > + > if (mask & ATTR_CTIME) { > inode->i_ctime = iattr->ia_ctime; > ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; > From bfoster@redhat.com Thu May 30 09:20:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EFB487F50 for ; Thu, 30 May 2013 09:20:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 814CBAC001 for ; Thu, 30 May 2013 07:20:34 -0700 (PDT) X-ASG-Debug-ID: 1369923633-04cbb0049a2d5660001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id EGIFdO3BwKqGHu8c for ; Thu, 30 May 2013 07:20:33 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UEKVuq015982 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 10:20:31 -0400 Received: from laptop.bfoster (vpn-63-41.rdu2.redhat.com [10.10.63.41]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UEKTCh016579 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 10:20:30 -0400 Message-ID: <51A75F83.90500@redhat.com> Date: Thu, 30 May 2013 10:17:39 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. In-Reply-To: <1369636707-15150-9-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369923633 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2013 02:38 AM, Dave Chinner wrote: > From: Dave Chinner > > Currently userspace has no way of determining that a filesystem is > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > indicate that the filesystem has v5 superblock support enabled. > This will allow xfs_info to correctly report the state of the > filesystem. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster > fs/xfs/xfs_fs.h | 1 + > fs/xfs/xfs_fsops.c | 4 +++- > 2 files changed, 4 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h > index 6dda3f9..d046955 100644 > --- a/fs/xfs/xfs_fs.h > +++ b/fs/xfs/xfs_fs.h > @@ -236,6 +236,7 @@ typedef struct xfs_fsop_resblks { > #define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */ > #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ > #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ > +#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */ > > > /* > diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c > index 87595b2..3c3644e 100644 > --- a/fs/xfs/xfs_fsops.c > +++ b/fs/xfs/xfs_fsops.c > @@ -99,7 +99,9 @@ xfs_fs_geometry( > (xfs_sb_version_hasattr2(&mp->m_sb) ? > XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | > (xfs_sb_version_hasprojid32bit(&mp->m_sb) ? > - XFS_FSOP_GEOM_FLAGS_PROJID32 : 0); > + XFS_FSOP_GEOM_FLAGS_PROJID32 : 0) | > + (xfs_sb_version_hascrc(&mp->m_sb) ? > + XFS_FSOP_GEOM_FLAGS_V5SB : 0); > geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? > mp->m_sb.sb_logsectsize : BBSIZE; > geo->rtsectsize = mp->m_sb.sb_blocksize; > From bfoster@redhat.com Thu May 30 09:20:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9197B7F55 for ; Thu, 30 May 2013 09:20:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0892BAC001 for ; Thu, 30 May 2013 07:20:41 -0700 (PDT) X-ASG-Debug-ID: 1369923640-04cb6c47402c9490001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cPR2FQB4zq5uwENY; Thu, 30 May 2013 07:20:40 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UEKdcf025416 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 10:20:39 -0400 Received: from laptop.bfoster (vpn-63-41.rdu2.redhat.com [10.10.63.41]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UEKcAI007492 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 10:20:38 -0400 Message-ID: <51A75F8B.8000507@redhat.com> Date: Thu, 30 May 2013 10:17:47 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com, bpm@sgi.com Subject: Re: [PATCH 2/2] xfs: inode unlinked list needs to recalculate the inode CRC References: <1369636707-15150-10-git-send-email-david@fromorbit.com> <1369773373-26697-1-git-send-email-david@fromorbit.com> <1369773373-26697-3-git-send-email-david@fromorbit.com> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: inode unlinked list needs to recalculate the inode CRC In-Reply-To: <1369773373-26697-3-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369923640 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/28/2013 04:36 PM, Dave Chinner wrote: > From: Dave Chinner > > The inode unlinked list manipulations operate directly on the inode > buffer, and so bypass the inode CRC calculation mechanisms. Hence an > inode on the unlinked list has an invalid CRC. Fix this by > recalculating the CRC whenever we modify an unlinked list pointer in > an inode, ncluding during log recovery. This is trivial to do and > results in unlinked list operations always leaving a consistent > inode in the buffer. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_inode.c | 42 ++++++++++++++++++++++++++++++++++++++---- > fs/xfs/xfs_log_recover.c | 9 +++++++++ > 2 files changed, 47 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index efbe1ac..2d993e7 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1579,6 +1579,23 @@ out_bmap_cancel: > } > > /* > + * Helper function to calculate range of the inode to log and recalculate the > + * on-disk inode crc if necessary. > + */ > +static int > +xfs_iunlink_dinode_calc_crc( > + struct xfs_mount *mp, > + struct xfs_dinode *dip) > +{ > + if (dip->di_version < 3) > + return sizeof(xfs_agino_t); > + > + xfs_dinode_calc_crc(mp, dip); > + return offsetof(struct xfs_dinode, di_changecount) - > + offsetof(struct xfs_dinode, di_next_unlinked); > +} > + So we've added a new helper, the return value for which is either the size of an inode number or an inode number + crc, depending on format. I also notice that the return value doesn't appear to be used anywhere this helper is called. > +/* > * This is called when the inode's link count goes to 0. > * We place the on-disk inode on a list in the AGI. It > * will be pulled from this list when the inode is freed. > @@ -1638,10 +1655,15 @@ xfs_iunlink( > dip->di_next_unlinked = agi->agi_unlinked[bucket_index]; > offset = ip->i_imap.im_boffset + > offsetof(xfs_dinode_t, di_next_unlinked); > + > + /* need to recalc the inode CRC if appropriate */ > + xfs_iunlink_dinode_calc_crc(mp, dip); > + > xfs_trans_inode_buf(tp, ibp); > xfs_trans_log_buf(tp, ibp, offset, > - (offset + sizeof(xfs_agino_t) - 1)); > + offset + sizeof(xfs_agino_t) - 1); > xfs_inobp_check(mp, ibp); > + > } So IIUC, offset is set to the offset of the di_next_unlinked value of this inode in the backing buffer of the inode (which we've just updated directly via dip). We call the helper to update the CRC then call xfs_trans_log_buf() to log a range of the buffer. From the original code, I surmise that we're logging the range that represents the di_next_unlinked value and from the addition of the helper, I surmise we intend to now include the crc in that logged region. But we haven't utilized the return value and I'm speculating on the intent here. So I see that we're updating the CRC, but is it actually logged? Perhaps I'm missing something, but if so, then why even have the xfs_iunlink_dinode_calc_crc() helper? /me goes back to read the original 9/9 and followup: http://oss.sgi.com/archives/xfs/2013-05/msg00867.html OK, so in that case, perhaps the helper is now unnecessary and we could just call xfs_dinode_calc_crc()? BTW, I was also going to ask here whether the fact that we update the CRC on recovery rather than logging it exposed items in the log to risk if they happened to become corrupted before that update occurs, but IIUC, we're still protected in that recovery itself should validate the existing on-disk CRC prior to the update. Correct? Brian > > /* > @@ -1723,9 +1745,13 @@ xfs_iunlink_remove( > dip->di_next_unlinked = cpu_to_be32(NULLAGINO); > offset = ip->i_imap.im_boffset + > offsetof(xfs_dinode_t, di_next_unlinked); > + > + /* need to recalc the inode CRC if appropriate */ > + xfs_iunlink_dinode_calc_crc(mp, dip); > + > xfs_trans_inode_buf(tp, ibp); > xfs_trans_log_buf(tp, ibp, offset, > - (offset + sizeof(xfs_agino_t) - 1)); > + offset + sizeof(xfs_agino_t) - 1); > xfs_inobp_check(mp, ibp); > } else { > xfs_trans_brelse(tp, ibp); > @@ -1796,9 +1822,13 @@ xfs_iunlink_remove( > dip->di_next_unlinked = cpu_to_be32(NULLAGINO); > offset = ip->i_imap.im_boffset + > offsetof(xfs_dinode_t, di_next_unlinked); > + > + /* need to recalc the inode CRC if appropriate */ > + xfs_iunlink_dinode_calc_crc(mp, dip); > + > xfs_trans_inode_buf(tp, ibp); > xfs_trans_log_buf(tp, ibp, offset, > - (offset + sizeof(xfs_agino_t) - 1)); > + offset + sizeof(xfs_agino_t) - 1); > xfs_inobp_check(mp, ibp); > } else { > xfs_trans_brelse(tp, ibp); > @@ -1809,9 +1839,13 @@ xfs_iunlink_remove( > last_dip->di_next_unlinked = cpu_to_be32(next_agino); > ASSERT(next_agino != 0); > offset = last_offset + offsetof(xfs_dinode_t, di_next_unlinked); > + > + /* need to recalc the inode CRC if appropriate */ > + xfs_iunlink_dinode_calc_crc(mp, dip); > + > xfs_trans_inode_buf(tp, last_ibp); > xfs_trans_log_buf(tp, last_ibp, offset, > - (offset + sizeof(xfs_agino_t) - 1)); > + offset + sizeof(xfs_agino_t) - 1); > xfs_inobp_check(mp, last_ibp); > } > return 0; > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 83088d9..45a85ff 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -1912,6 +1912,15 @@ xlog_recover_do_inode_buffer( > buffer_nextp = (xfs_agino_t *)xfs_buf_offset(bp, > next_unlinked_offset); > *buffer_nextp = *logged_nextp; > + > + /* > + * If necessary, recalculate the CRC in the on-disk inode. We > + * have to leave the inode in a consistent state for whoever > + * reads it next.... > + */ > + xfs_dinode_calc_crc(mp, (struct xfs_dinode *) > + xfs_buf_offset(bp, i * mp->m_sb.sb_inodesize)); > + > } > > return 0; > From bpm@sgi.com Thu May 30 10:52:11 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 891247F37 for ; Thu, 30 May 2013 10:52:11 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 57588304051; Thu, 30 May 2013 08:52:08 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 1C2AC500B4B; Thu, 30 May 2013 10:52:08 -0500 (CDT) Date: Thu, 30 May 2013 10:52:08 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. Message-ID: <20130530155208.GD20028@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-8-git-send-email-david@fromorbit.com> <51A75F7A.6040302@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A75F7A.6040302@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) Hey Brian, On Thu, May 30, 2013 at 10:17:30AM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > XFS has failed to kill suid/sgid bits correctly when truncating > > files of non-zero size since commit c4ed4243 ("xfs: split > > xfs_setattr") introduced in the 3.1 kernel. Fix it. > > > > The code makes sense and I can easily hit an assert when truncating > (extending) a suid file on a debug kernel without this patch (and I see > the suid dropped with the patch). What commands did you use? It seems like this is dealing with S_ISGID, correct? Thanks, Ben From bfoster@redhat.com Thu May 30 11:05:39 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 142AC7F37 for ; Thu, 30 May 2013 11:05:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D9F5E8F8049 for ; Thu, 30 May 2013 09:05:35 -0700 (PDT) X-ASG-Debug-ID: 1369929935-04bdf078172f5700001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id oTcwSzhpEy5Ip8b9; Thu, 30 May 2013 09:05:35 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UG5WYj026996 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 12:05:32 -0400 Received: from laptop.bfoster (vpn-63-41.rdu2.redhat.com [10.10.63.41]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UG5UWU031470 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 12:05:31 -0400 Message-ID: <51A77820.2070804@redhat.com> Date: Thu, 30 May 2013 12:02:40 -0400 From: Brian Foster User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 MIME-Version: 1.0 To: Ben Myers CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-8-git-send-email-david@fromorbit.com> <51A75F7A.6040302@redhat.com> <20130530155208.GD20028@sgi.com> X-ASG-Orig-Subj: Re: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. In-Reply-To: <20130530155208.GD20028@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369929935 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/30/2013 11:52 AM, Ben Myers wrote: > Hey Brian, > > On Thu, May 30, 2013 at 10:17:30AM -0400, Brian Foster wrote: >> On 05/27/2013 02:38 AM, Dave Chinner wrote: >>> From: Dave Chinner >>> >>> XFS has failed to kill suid/sgid bits correctly when truncating >>> files of non-zero size since commit c4ed4243 ("xfs: split >>> xfs_setattr") introduced in the 3.1 kernel. Fix it. >>> >> >> The code makes sense and I can easily hit an assert when truncating >> (extending) a suid file on a debug kernel without this patch (and I see >> the suid dropped with the patch). > > What commands did you use? It seems like this is dealing with S_ISGID, correct? > Hi Ben, Yeah, that confused me at first as well. I believe the vfs interprets the ATTR_KILL_SUID/SGIT bits prior to the setattr call and wipes out the associated mode bits if necessary. What I did was basically create a zero sized file as root, chmod to a+s and a+rwx and then as a regular user, truncate that file to something larger than zero. Without the patch I hit the assert and with the patch the assert doesn't fire and the setuid bit is dropped. Brian > Thanks, > Ben > From bpm@sgi.com Thu May 30 12:07:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 31DCE7F37 for ; Thu, 30 May 2013 12:07:52 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0D2DB8F8035; Thu, 30 May 2013 10:07:49 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id D0806500B50; Thu, 30 May 2013 12:07:48 -0500 (CDT) Date: Thu, 30 May 2013 12:07:48 -0500 From: Ben Myers To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH 7/9] xfs: kill suid/sgid through the truncate path. Message-ID: <20130530170748.GA20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-8-git-send-email-david@fromorbit.com> <51A75F7A.6040302@redhat.com> <20130530155208.GD20028@sgi.com> <51A77820.2070804@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A77820.2070804@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, May 30, 2013 at 12:02:40PM -0400, Brian Foster wrote: > On 05/30/2013 11:52 AM, Ben Myers wrote: > > Hey Brian, > > > > On Thu, May 30, 2013 at 10:17:30AM -0400, Brian Foster wrote: > >> On 05/27/2013 02:38 AM, Dave Chinner wrote: > >>> From: Dave Chinner > >>> > >>> XFS has failed to kill suid/sgid bits correctly when truncating > >>> files of non-zero size since commit c4ed4243 ("xfs: split > >>> xfs_setattr") introduced in the 3.1 kernel. Fix it. > >>> > >> > >> The code makes sense and I can easily hit an assert when truncating > >> (extending) a suid file on a debug kernel without this patch (and I see > >> the suid dropped with the patch). > > > > What commands did you use? It seems like this is dealing with S_ISGID, correct? > > > > Hi Ben, > > Yeah, that confused me at first as well. I believe the vfs interprets > the ATTR_KILL_SUID/SGIT bits prior to the setattr call and wipes out the > associated mode bits if necessary. > > What I did was basically create a zero sized file as root, chmod to a+s > and a+rwx and then as a regular user, truncate that file to something > larger than zero. Without the patch I hit the assert and with the patch > the assert doesn't fire and the setuid bit is dropped. Perfect, thanks. I'm able to hit this on 3.10-rc3, but not 3.10-rc1. Interesting. -Ben From bpm@sgi.com Thu May 30 12:49:19 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4D47E7F4C for ; Thu, 30 May 2013 12:49:19 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id AD376AC00D; Thu, 30 May 2013 10:49:15 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 2DFDF500B50; Thu, 30 May 2013 12:49:15 -0500 (CDT) Date: Thu, 30 May 2013 12:49:15 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 1/9] xfs: don't emit v5 superblock warnings on write Message-ID: <20130530174915.GB20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-2-git-send-email-david@fromorbit.com> <51A62F2F.6040807@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A62F2F.6040807@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Wed, May 29, 2013 at 12:39:11PM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > We write the superblock every 30s or so which results in the > > verifier being called. Right now that results in this output > > every 30s: > > > > XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! > > Use of these features in this kernel is at your own risk! > > > > And spamming the logs. > > > > We don't need to check for whether we support v5 superblocks or > > whether there are feature bits we don't support set as these are > > only relevant when we first mount the filesytem. i.e. on superblock > > read. Hence for the write verification we can just skip all the > > checks (and hence verbose output) altogether. > > > > Signed-off-by: Dave Chinner > > --- > > Reviewed-by: Brian Foster Applied. From bpm@sgi.com Thu May 30 12:49:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5E01C7F52 for ; Thu, 30 May 2013 12:49:33 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 198E58F8033; Thu, 30 May 2013 10:49:33 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id DCB7B500B52; Thu, 30 May 2013 12:49:32 -0500 (CDT) Date: Thu, 30 May 2013 12:49:32 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 2/9] xfs: fix incorrect remote symlink block count Message-ID: <20130530174932.GC20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-3-git-send-email-david@fromorbit.com> <51A62F45.5000004@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A62F45.5000004@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Wed, May 29, 2013 at 12:39:33PM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > When CRCs are enabled, the number of blocks needed to hold a remote > > symlink on a 1k block size filesystem may be 2 instead of 1. The > > transaction reservation for the allocated bloks was not taking this > > into account and only allocating one block. hence when trying to > > read or invalidate such symlinks, we are mapping a hole where there > > should be a block and things go bad at that point. > > > > Fix the reservation to use the correct block count, clean up the > > block count calculation similar to the remote attribute calculation, > > and add a debug guard to detect when we don't write the entire > > symlink to disk. > > > > Signed-off-by: Dave Chinner > > --- > > Reviewed-by: Brian Foster Applied. From bpm@sgi.com Thu May 30 12:49:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 305C77F58 for ; Thu, 30 May 2013 12:49:48 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id A1CDFAC00E; Thu, 30 May 2013 10:49:47 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 68969500B50; Thu, 30 May 2013 12:49:47 -0500 (CDT) Date: Thu, 30 May 2013 12:49:47 -0500 From: Ben Myers To: Mark Tinguely Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 5/9] xfs: fix split buffer vector log recovery support Message-ID: <20130530174947.GD20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-6-git-send-email-david@fromorbit.com> <51A65550.50508@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A65550.50508@sgi.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Wed, May 29, 2013 at 02:21:52PM -0500, Mark Tinguely wrote: > On 05/27/13 01:38, Dave Chinner wrote: > >From: Dave Chinner > > > >A long time ago in a galaxy far away.... > > > >.. the was a commit made to fix some ilinux specific "fragmented > >buffer" log recovery problem: > > > >http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=b29c0bece51da72fb3ff3b61391a391ea54e1603 > > > >That problem occurred when a contiguous dirty region of a buffer was > >split across across two pages of an unmapped buffer. It's been a > >long time since that has been done in XFS, and the changes to log > >the entire inode buffers for CRC enabled filesystems has > >re-introduced that corner case. > > > >And, of course, it turns out that the above commit didn't actually > >fix anything - it just ensured that log recovery is guaranteed to > >fail when this situation occurs. And now for the gory details. > > > ... > > Thanks for the great walk through of the problem. > > Reviewed-by: Mark Tinguely Applied. From bpm@sgi.com Thu May 30 12:56:03 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 817347F37 for ; Thu, 30 May 2013 12:56:03 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 59BB4304051; Thu, 30 May 2013 10:56:00 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 3959D500B50; Thu, 30 May 2013 12:56:00 -0500 (CDT) Date: Thu, 30 May 2013 12:56:00 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 6/9] xfs: disable swap extents ioctl on CRC enabled filesystems Message-ID: <20130530175600.GE20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-7-git-send-email-david@fromorbit.com> <51A66DC0.10405@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A66DC0.10405@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Wed, May 29, 2013 at 05:06:08PM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > Currently, swapping extents from one inode to another is a simple > > act of switching data and attribute forks from one inode to another. > > This, unfortunately in no longer so simple with CRC enabled > > filesystems as there is owner information embedded into the BMBT > > blocks that are swapped between inodes. Hence swapping the forks > > between inodes results in the inodes having mapping blocks that > > point to the wrong owner and hence are considered corrupt. > > > > To fix this we need an extent tree block or record based swap > > algorithm so that the BMBT block owner information can be updated > > atomically in the swap transaction. This is a significant piece of > > new work, so for the moment simply don't allow swap extent > > operations to succeed on CRC enabled filesystems. > > > > Signed-off-by: Dave Chinner > > --- > > Pretty straightforward... > > Reviewed-by: Brian Foster Applied. From bpm@sgi.com Thu May 30 12:57:40 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CD2487F37 for ; Thu, 30 May 2013 12:57:40 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 976808F8052; Thu, 30 May 2013 10:57:40 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 77E6A500B51; Thu, 30 May 2013 12:57:40 -0500 (CDT) Date: Thu, 30 May 2013 12:57:40 -0500 From: Ben Myers To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 8/9] xfs: add fsgeom flag for v5 superblock support. Message-ID: <20130530175740.GF20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <1369636707-15150-9-git-send-email-david@fromorbit.com> <51A75F83.90500@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A75F83.90500@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, May 30, 2013 at 10:17:39AM -0400, Brian Foster wrote: > On 05/27/2013 02:38 AM, Dave Chinner wrote: > > From: Dave Chinner > > > > Currently userspace has no way of determining that a filesystem is > > CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to > > indicate that the filesystem has v5 superblock support enabled. > > This will allow xfs_info to correctly report the state of the > > filesystem. > > > > Signed-off-by: Dave Chinner > > --- > > Reviewed-by: Brian Foster Applied. From bpm@oss.sgi.com Thu May 30 13:55:51 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 7E6D57F3F; Thu, 30 May 2013 13:55:51 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.10-rc1-22-g56c19e8 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: ad1858d77771172e08016890f0eb2faedec3ecee X-Git-Newrev: 56c19e89b38618390addfc743d822f99519055c6 Message-Id: <20130530185551.7E6D57F3F@oss.sgi.com> Date: Thu, 30 May 2013 13:55:51 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 56c19e8 xfs: kill suid/sgid through the truncate path. 74137ff xfs: add fsgeom flag for v5 superblock support. 02f7540 xfs: disable swap extents ioctl on CRC enabled filesystems 709da6a xfs: fix split buffer vector log recovery support 321a958 xfs: fix incorrect remote symlink block count 3451018 xfs: don't emit v5 superblock warnings on write from ad1858d77771172e08016890f0eb2faedec3ecee (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 56c19e89b38618390addfc743d822f99519055c6 Author: Dave Chinner Date: Mon May 27 16:38:25 2013 +1000 xfs: kill suid/sgid through the truncate path. XFS has failed to kill suid/sgid bits correctly when truncating files of non-zero size since commit c4ed4243 ("xfs: split xfs_setattr") introduced in the 3.1 kernel. Fix it. Fix it. cc: stable kernel Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 74137fff067961c9aca1e14d073805c3de8549bd Author: Dave Chinner Date: Mon May 27 16:38:26 2013 +1000 xfs: add fsgeom flag for v5 superblock support. Currently userspace has no way of determining that a filesystem is CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to indicate that the filesystem has v5 superblock support enabled. This will allow xfs_info to correctly report the state of the filesystem. Signed-off-by: Dave Chinner Reviewed-by: Eric Sandeen Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 02f75405a75eadfb072609f6bf839e027de6a29a Author: Dave Chinner Date: Mon May 27 16:38:24 2013 +1000 xfs: disable swap extents ioctl on CRC enabled filesystems Currently, swapping extents from one inode to another is a simple act of switching data and attribute forks from one inode to another. This, unfortunately in no longer so simple with CRC enabled filesystems as there is owner information embedded into the BMBT blocks that are swapped between inodes. Hence swapping the forks between inodes results in the inodes having mapping blocks that point to the wrong owner and hence are considered corrupt. To fix this we need an extent tree block or record based swap algorithm so that the BMBT block owner information can be updated atomically in the swap transaction. This is a significant piece of new work, so for the moment simply don't allow swap extent operations to succeed on CRC enabled filesystems. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 709da6a61aaf12181a8eea8443919ae5fc1b731d Author: Dave Chinner Date: Mon May 27 16:38:23 2013 +1000 xfs: fix split buffer vector log recovery support A long time ago in a galaxy far away.... .. the was a commit made to fix some ilinux specific "fragmented buffer" log recovery problem: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=b29c0bece51da72fb3ff3b61391a391ea54e1603 That problem occurred when a contiguous dirty region of a buffer was split across across two pages of an unmapped buffer. It's been a long time since that has been done in XFS, and the changes to log the entire inode buffers for CRC enabled filesystems has re-introduced that corner case. And, of course, it turns out that the above commit didn't actually fix anything - it just ensured that log recovery is guaranteed to fail when this situation occurs. And now for the gory details. xfstest xfs/085 is failing with this assert: XFS (vdb): bad number of regions (0) in inode log format XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 1583 Largely undocumented factoid #1: Log recovery depends on all log buffer format items starting with this format: struct foo_log_format { __uint16_t type; __uint16_t size; .... As recoery uses the size field and assumptions about 32 bit alignment in decoding format items. So don't pay much attention to the fact log recovery thinks that it decoding an inode log format item - it just uses them to determine what the size of the item is. But why would it see a log format item with a zero size? Well, luckily enough xfs_logprint uses the same code and gives the same error, so with a bit of gdb magic, it turns out that it isn't a log format that is being decoded. What logprint tells us is this: Oper (130): tid: a0375e1a len: 28 clientid: TRANS flags: none BUF: #regs: 2 start blkno: 144 (0x90) len: 16 bmap size: 2 flags: 0x4000 Oper (131): tid: a0375e1a len: 4096 clientid: TRANS flags: none BUF DATA ---------------------------------------------------------------------------- Oper (132): tid: a0375e1a len: 4096 clientid: TRANS flags: none xfs_logprint: unknown log operation type (4e49) ********************************************************************** * ERROR: data block=2 * ********************************************************************** That we've got a buffer format item (oper 130) that has two regions; the format item itself and one dirty region. The subsequent region after the buffer format item and it's data is them what we are tripping over, and the first bytes of it at an inode magic number. Not a log opheader like there is supposed to be. That means there's a problem with the buffer format item. It's dirty data region is 4096 bytes, and it contains - you guessed it - initialised inodes. But inode buffers are 8k, not 4k, and we log them in their entirety. So something is wrong here. The buffer format item contains: (gdb) p /x *(struct xfs_buf_log_format *)in_f $22 = {blf_type = 0x123c, blf_size = 0x2, blf_flags = 0x4000, blf_len = 0x10, blf_blkno = 0x90, blf_map_size = 0x2, blf_data_map = {0xffffffff, 0xffffffff, .... }} Two regions, and a signle dirty contiguous region of 64 bits. 64 * 128 = 8k, so this should be followed by a single 8k region of data. And the blf_flags tell us that the type of buffer is a XFS_BLFT_DINO_BUF. It contains inodes. And because it doesn't have the XFS_BLF_INODE_BUF flag set, that means it's an inode allocation buffer. So, it should be followed by 8k of inode data. But we know that the next region has a header of: (gdb) p /x *ohead $25 = {oh_tid = 0x1a5e37a0, oh_len = 0x100000, oh_clientid = 0x69, oh_flags = 0x0, oh_res2 = 0x0} and so be32_to_cpu(oh_len) = 0x1000 = 4096 bytes. It's simply not long enough to hold all the logged data. There must be another region. There is - there's a following opheader for another 4k of data that contains the other half of the inode cluster data - the one we assert fail on because it's not a log format header. So why is the second part of the data not being accounted to the correct buffer log format structure? It took a little more work with gdb to work out that the buffer log format structure was both expecting it to be there but hadn't accounted for it. It was at that point I went to the kernel code, as clearly this wasn't a bug in xfs_logprint and the kernel was writing bad stuff to the log. First port of call was the buffer item formatting code, and the discontiguous memory/contiguous dirty region handling code immediately stood out. I've wondered for a long time why the code had this comment in it: vecp->i_addr = xfs_buf_offset(bp, buffer_offset); vecp->i_len = nbits * XFS_BLF_CHUNK; vecp->i_type = XLOG_REG_TYPE_BCHUNK; /* * You would think we need to bump the nvecs here too, but we do not * this number is used by recovery, and it gets confused by the boundary * split here * nvecs++; */ vecp++; And it didn't account for the extra vector pointer. The case being handled here is that a contiguous dirty region lies across a boundary that cannot be memcpy()d across, and so has to be split into two separate operations for xlog_write() to perform. What this code assumes is that what is written to the log is two consecutive blocks of data that are accounted in the buf log format item as the same contiguous dirty region and so will get decoded as such by the log recovery code. The thing is, xlog_write() knows nothing about this, and so just does it's normal thing of adding an opheader for each vector. That means the 8k region gets written to the log as two separate regions of 4k each, but because nvecs has not been incremented, the buf log format item accounts for only one of them. Hence when we come to log recovery, we process the first 4k region and then expect to come across a new item that starts with a log format structure of some kind that tells us whenteh next data is going to be. Instead, we hit raw buffer data and things go bad real quick. So, the commit from 2002 that commented out nvecs++ is just plain wrong. It breaks log recovery completely, and it would seem the only reason this hasn't been since then is that we don't log large contigous regions of multi-page unmapped buffers very often. Never would be a closer estimate, at least until the CRC code came along.... So, lets fix that by restoring the nvecs accounting for the extra region when we hit this case..... .... and there's the problemin log recovery it is apparently working around: XFS: Assertion failed: i == item->ri_total, file: fs/xfs/xfs_log_recover.c, line: 2135 Yup, xlog_recover_do_reg_buffer() doesn't handle contigous dirty regions being broken up into multiple regions by the log formatting code. That's an easy fix, though - if the number of contiguous dirty bits exceeds the length of the region being copied out of the log, only account for the number of dirty bits that region covers, and then loop again and copy more from the next region. It's a 2 line fix. Now xfstests xfs/085 passes, we have one less piece of mystery code, and one more important piece of knowledge about how to structure new log format items.. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 321a95839e65db3759a07a3655184b0283af90fe Author: Dave Chinner Date: Mon May 27 16:38:20 2013 +1000 xfs: fix incorrect remote symlink block count When CRCs are enabled, the number of blocks needed to hold a remote symlink on a 1k block size filesystem may be 2 instead of 1. The transaction reservation for the allocated blocks was not taking this into account and only allocating one block. Hence when trying to read or invalidate such symlinks, we are mapping a hole where there should be a block and things go bad at that point. Fix the reservation to use the correct block count, clean up the block count calculation similar to the remote attribute calculation, and add a debug guard to detect when we don't write the entire symlink to disk. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 34510185abeaa5be9b178a41c0a03d30aec3db7e Author: Dave Chinner Date: Mon May 27 16:38:19 2013 +1000 xfs: don't emit v5 superblock warnings on write We write the superblock every 30s or so which results in the verifier being called. Right now that results in this output every 30s: XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! Use of these features in this kernel is at your own risk! And spamming the logs. We don't need to check for whether we support v5 superblocks or whether there are feature bits we don't support set as these are only relevant when we first mount the filesytem. i.e. on superblock read. Hence for the write verification we can just skip all the checks (and hence verbose output) altogether. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_buf_item.c | 7 +------ fs/xfs/xfs_dfrag.c | 8 ++++++++ fs/xfs/xfs_fs.h | 1 + fs/xfs/xfs_fsops.c | 4 +++- fs/xfs/xfs_iops.c | 47 ++++++++++++++++++++++++++++++++--------------- fs/xfs/xfs_log_recover.c | 11 +++++++++++ fs/xfs/xfs_mount.c | 18 +++++++++++------- fs/xfs/xfs_symlink.c | 20 ++++++-------------- 8 files changed, 73 insertions(+), 43 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Thu May 30 13:56:00 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 925AA7F51; Thu, 30 May 2013 13:56:00 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. v3.10-rc1-22-g56c19e8 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: ad1858d77771172e08016890f0eb2faedec3ecee X-Git-Newrev: 56c19e89b38618390addfc743d822f99519055c6 Message-Id: <20130530185600.925AA7F51@oss.sgi.com> Date: Thu, 30 May 2013 13:56:00 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 56c19e8 xfs: kill suid/sgid through the truncate path. 74137ff xfs: add fsgeom flag for v5 superblock support. 02f7540 xfs: disable swap extents ioctl on CRC enabled filesystems 709da6a xfs: fix split buffer vector log recovery support 321a958 xfs: fix incorrect remote symlink block count 3451018 xfs: don't emit v5 superblock warnings on write from ad1858d77771172e08016890f0eb2faedec3ecee (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 56c19e89b38618390addfc743d822f99519055c6 Author: Dave Chinner Date: Mon May 27 16:38:25 2013 +1000 xfs: kill suid/sgid through the truncate path. XFS has failed to kill suid/sgid bits correctly when truncating files of non-zero size since commit c4ed4243 ("xfs: split xfs_setattr") introduced in the 3.1 kernel. Fix it. Fix it. cc: stable kernel Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 74137fff067961c9aca1e14d073805c3de8549bd Author: Dave Chinner Date: Mon May 27 16:38:26 2013 +1000 xfs: add fsgeom flag for v5 superblock support. Currently userspace has no way of determining that a filesystem is CRC enabled. Add a flag to the XFS_IOC_FSGEOMETRY ioctl output to indicate that the filesystem has v5 superblock support enabled. This will allow xfs_info to correctly report the state of the filesystem. Signed-off-by: Dave Chinner Reviewed-by: Eric Sandeen Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 02f75405a75eadfb072609f6bf839e027de6a29a Author: Dave Chinner Date: Mon May 27 16:38:24 2013 +1000 xfs: disable swap extents ioctl on CRC enabled filesystems Currently, swapping extents from one inode to another is a simple act of switching data and attribute forks from one inode to another. This, unfortunately in no longer so simple with CRC enabled filesystems as there is owner information embedded into the BMBT blocks that are swapped between inodes. Hence swapping the forks between inodes results in the inodes having mapping blocks that point to the wrong owner and hence are considered corrupt. To fix this we need an extent tree block or record based swap algorithm so that the BMBT block owner information can be updated atomically in the swap transaction. This is a significant piece of new work, so for the moment simply don't allow swap extent operations to succeed on CRC enabled filesystems. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 709da6a61aaf12181a8eea8443919ae5fc1b731d Author: Dave Chinner Date: Mon May 27 16:38:23 2013 +1000 xfs: fix split buffer vector log recovery support A long time ago in a galaxy far away.... .. the was a commit made to fix some ilinux specific "fragmented buffer" log recovery problem: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=archive/xfs-import.git;a=commitdiff;h=b29c0bece51da72fb3ff3b61391a391ea54e1603 That problem occurred when a contiguous dirty region of a buffer was split across across two pages of an unmapped buffer. It's been a long time since that has been done in XFS, and the changes to log the entire inode buffers for CRC enabled filesystems has re-introduced that corner case. And, of course, it turns out that the above commit didn't actually fix anything - it just ensured that log recovery is guaranteed to fail when this situation occurs. And now for the gory details. xfstest xfs/085 is failing with this assert: XFS (vdb): bad number of regions (0) in inode log format XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 1583 Largely undocumented factoid #1: Log recovery depends on all log buffer format items starting with this format: struct foo_log_format { __uint16_t type; __uint16_t size; .... As recoery uses the size field and assumptions about 32 bit alignment in decoding format items. So don't pay much attention to the fact log recovery thinks that it decoding an inode log format item - it just uses them to determine what the size of the item is. But why would it see a log format item with a zero size? Well, luckily enough xfs_logprint uses the same code and gives the same error, so with a bit of gdb magic, it turns out that it isn't a log format that is being decoded. What logprint tells us is this: Oper (130): tid: a0375e1a len: 28 clientid: TRANS flags: none BUF: #regs: 2 start blkno: 144 (0x90) len: 16 bmap size: 2 flags: 0x4000 Oper (131): tid: a0375e1a len: 4096 clientid: TRANS flags: none BUF DATA ---------------------------------------------------------------------------- Oper (132): tid: a0375e1a len: 4096 clientid: TRANS flags: none xfs_logprint: unknown log operation type (4e49) ********************************************************************** * ERROR: data block=2 * ********************************************************************** That we've got a buffer format item (oper 130) that has two regions; the format item itself and one dirty region. The subsequent region after the buffer format item and it's data is them what we are tripping over, and the first bytes of it at an inode magic number. Not a log opheader like there is supposed to be. That means there's a problem with the buffer format item. It's dirty data region is 4096 bytes, and it contains - you guessed it - initialised inodes. But inode buffers are 8k, not 4k, and we log them in their entirety. So something is wrong here. The buffer format item contains: (gdb) p /x *(struct xfs_buf_log_format *)in_f $22 = {blf_type = 0x123c, blf_size = 0x2, blf_flags = 0x4000, blf_len = 0x10, blf_blkno = 0x90, blf_map_size = 0x2, blf_data_map = {0xffffffff, 0xffffffff, .... }} Two regions, and a signle dirty contiguous region of 64 bits. 64 * 128 = 8k, so this should be followed by a single 8k region of data. And the blf_flags tell us that the type of buffer is a XFS_BLFT_DINO_BUF. It contains inodes. And because it doesn't have the XFS_BLF_INODE_BUF flag set, that means it's an inode allocation buffer. So, it should be followed by 8k of inode data. But we know that the next region has a header of: (gdb) p /x *ohead $25 = {oh_tid = 0x1a5e37a0, oh_len = 0x100000, oh_clientid = 0x69, oh_flags = 0x0, oh_res2 = 0x0} and so be32_to_cpu(oh_len) = 0x1000 = 4096 bytes. It's simply not long enough to hold all the logged data. There must be another region. There is - there's a following opheader for another 4k of data that contains the other half of the inode cluster data - the one we assert fail on because it's not a log format header. So why is the second part of the data not being accounted to the correct buffer log format structure? It took a little more work with gdb to work out that the buffer log format structure was both expecting it to be there but hadn't accounted for it. It was at that point I went to the kernel code, as clearly this wasn't a bug in xfs_logprint and the kernel was writing bad stuff to the log. First port of call was the buffer item formatting code, and the discontiguous memory/contiguous dirty region handling code immediately stood out. I've wondered for a long time why the code had this comment in it: vecp->i_addr = xfs_buf_offset(bp, buffer_offset); vecp->i_len = nbits * XFS_BLF_CHUNK; vecp->i_type = XLOG_REG_TYPE_BCHUNK; /* * You would think we need to bump the nvecs here too, but we do not * this number is used by recovery, and it gets confused by the boundary * split here * nvecs++; */ vecp++; And it didn't account for the extra vector pointer. The case being handled here is that a contiguous dirty region lies across a boundary that cannot be memcpy()d across, and so has to be split into two separate operations for xlog_write() to perform. What this code assumes is that what is written to the log is two consecutive blocks of data that are accounted in the buf log format item as the same contiguous dirty region and so will get decoded as such by the log recovery code. The thing is, xlog_write() knows nothing about this, and so just does it's normal thing of adding an opheader for each vector. That means the 8k region gets written to the log as two separate regions of 4k each, but because nvecs has not been incremented, the buf log format item accounts for only one of them. Hence when we come to log recovery, we process the first 4k region and then expect to come across a new item that starts with a log format structure of some kind that tells us whenteh next data is going to be. Instead, we hit raw buffer data and things go bad real quick. So, the commit from 2002 that commented out nvecs++ is just plain wrong. It breaks log recovery completely, and it would seem the only reason this hasn't been since then is that we don't log large contigous regions of multi-page unmapped buffers very often. Never would be a closer estimate, at least until the CRC code came along.... So, lets fix that by restoring the nvecs accounting for the extra region when we hit this case..... .... and there's the problemin log recovery it is apparently working around: XFS: Assertion failed: i == item->ri_total, file: fs/xfs/xfs_log_recover.c, line: 2135 Yup, xlog_recover_do_reg_buffer() doesn't handle contigous dirty regions being broken up into multiple regions by the log formatting code. That's an easy fix, though - if the number of contiguous dirty bits exceeds the length of the region being copied out of the log, only account for the number of dirty bits that region covers, and then loop again and copy more from the next region. It's a 2 line fix. Now xfstests xfs/085 passes, we have one less piece of mystery code, and one more important piece of knowledge about how to structure new log format items.. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers commit 321a95839e65db3759a07a3655184b0283af90fe Author: Dave Chinner Date: Mon May 27 16:38:20 2013 +1000 xfs: fix incorrect remote symlink block count When CRCs are enabled, the number of blocks needed to hold a remote symlink on a 1k block size filesystem may be 2 instead of 1. The transaction reservation for the allocated blocks was not taking this into account and only allocating one block. Hence when trying to read or invalidate such symlinks, we are mapping a hole where there should be a block and things go bad at that point. Fix the reservation to use the correct block count, clean up the block count calculation similar to the remote attribute calculation, and add a debug guard to detect when we don't write the entire symlink to disk. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Reviewed-by: Brian Foster Signed-off-by: Ben Myers commit 34510185abeaa5be9b178a41c0a03d30aec3db7e Author: Dave Chinner Date: Mon May 27 16:38:19 2013 +1000 xfs: don't emit v5 superblock warnings on write We write the superblock every 30s or so which results in the verifier being called. Right now that results in this output every 30s: XFS (vda): Version 5 superblock detected. This kernel has EXPERIMENTAL support enabled! Use of these features in this kernel is at your own risk! And spamming the logs. We don't need to check for whether we support v5 superblocks or whether there are feature bits we don't support set as these are only relevant when we first mount the filesytem. i.e. on superblock read. Hence for the write verification we can just skip all the checks (and hence verbose output) altogether. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_buf_item.c | 7 +------ fs/xfs/xfs_dfrag.c | 8 ++++++++ fs/xfs/xfs_fs.h | 1 + fs/xfs/xfs_fsops.c | 4 +++- fs/xfs/xfs_iops.c | 47 ++++++++++++++++++++++++++++++++--------------- fs/xfs/xfs_log_recover.c | 11 +++++++++++ fs/xfs/xfs_mount.c | 18 +++++++++++------- fs/xfs/xfs_symlink.c | 20 ++++++-------------- 8 files changed, 73 insertions(+), 43 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Thu May 30 14:15:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 147437F37 for ; Thu, 30 May 2013 14:15:58 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 87E94AC003; Thu, 30 May 2013 12:15:54 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id E2811500B50; Thu, 30 May 2013 14:15:53 -0500 (CDT) Date: Thu, 30 May 2013 14:15:53 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/9] xfs: fix dir3 freespace block corruption Message-ID: <20130530191553.GG20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <20130528083717.GU29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130528083717.GU29466@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) On Tue, May 28, 2013 at 06:37:17PM +1000, Dave Chinner wrote: > From: Dave Chinner > > When the directory freespace index grows to a second block (2017 > 4k data blocks in the directory), the initialisation of the second > new block header goes wrong. The write verifier fires a corruption > error indicating that the block number in the header is zero. This > was being tripped by xfs/110. > > The problem is that the initialisation of the new block is done just > fine in xfs_dir3_free_get_buf(), but the caller then users a dirv2 > structure to zero on-disk header fields that xfs_dir3_free_get_buf() > has already zeroed. These lined up with the block number in the dir > v3 header format. > > While looking at this, I noticed that the struct xfs_dir3_free_hdr() > had 4 bytes of padding in it that wasn't defined as padding or being > zeroed by the initialisation. Add a pad field declaration and fully > zero the on disk and in-core headers in xfs_dir3_free_get_buf() so > that this is never an issue in the future. Note that this doesn't > change the on-disk layout, just makes the 32 bits of padding in the > layout explicit. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_dir2_format.h | 1 + > fs/xfs/xfs_dir2_node.c | 13 ++++++------- > 2 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/fs/xfs/xfs_dir2_format.h b/fs/xfs/xfs_dir2_format.h > index a3b1bd8..995f1f5 100644 > --- a/fs/xfs/xfs_dir2_format.h > +++ b/fs/xfs/xfs_dir2_format.h > @@ -715,6 +715,7 @@ struct xfs_dir3_free_hdr { > __be32 firstdb; /* db of first entry */ > __be32 nvalid; /* count of valid entries */ > __be32 nused; /* count of used entries */ > + __be32 pad; /* 64 bit alignment. */ Yeah, my count also puts nused short of 64 bit alignment. Looks ok. Reviewed-by: Ben Myers From bpm@oss.sgi.com Thu May 30 14:40:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id ACC377F3F; Thu, 30 May 2013 14:40:02 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.10-rc1-23-g5ae6e6a X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 56c19e89b38618390addfc743d822f99519055c6 X-Git-Newrev: 5ae6e6a401957698f2bd8c9f4a86d86d02199fea Message-Id: <20130530194002.ACC377F3F@oss.sgi.com> Date: Thu, 30 May 2013 14:40:02 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 5ae6e6a xfs: fix dir3 freespace block corruption from 56c19e89b38618390addfc743d822f99519055c6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5ae6e6a401957698f2bd8c9f4a86d86d02199fea Author: Dave Chinner Date: Tue May 28 18:37:17 2013 +1000 xfs: fix dir3 freespace block corruption When the directory freespace index grows to a second block (2017 4k data blocks in the directory), the initialisation of the second new block header goes wrong. The write verifier fires a corruption error indicating that the block number in the header is zero. This was being tripped by xfs/110. The problem is that the initialisation of the new block is done just fine in xfs_dir3_free_get_buf(), but the caller then users a dirv2 structure to zero on-disk header fields that xfs_dir3_free_get_buf() has already zeroed. These lined up with the block number in the dir v3 header format. While looking at this, I noticed that the struct xfs_dir3_free_hdr() had 4 bytes of padding in it that wasn't defined as padding or being zeroed by the initialisation. Add a pad field declaration and fully zero the on disk and in-core headers in xfs_dir3_free_get_buf() so that this is never an issue in the future. Note that this doesn't change the on-disk layout, just makes the 32 bits of padding in the layout explicit. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_dir2_format.h | 1 + fs/xfs/xfs_dir2_node.c | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Thu May 30 14:40:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 46323) id 1B5B07F51; Thu, 30 May 2013 14:40:13 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. v3.10-rc1-23-g5ae6e6a X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 56c19e89b38618390addfc743d822f99519055c6 X-Git-Newrev: 5ae6e6a401957698f2bd8c9f4a86d86d02199fea Message-Id: <20130530194013.1B5B07F51@oss.sgi.com> Date: Thu, 30 May 2013 14:40:12 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 5ae6e6a xfs: fix dir3 freespace block corruption from 56c19e89b38618390addfc743d822f99519055c6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5ae6e6a401957698f2bd8c9f4a86d86d02199fea Author: Dave Chinner Date: Tue May 28 18:37:17 2013 +1000 xfs: fix dir3 freespace block corruption When the directory freespace index grows to a second block (2017 4k data blocks in the directory), the initialisation of the second new block header goes wrong. The write verifier fires a corruption error indicating that the block number in the header is zero. This was being tripped by xfs/110. The problem is that the initialisation of the new block is done just fine in xfs_dir3_free_get_buf(), but the caller then users a dirv2 structure to zero on-disk header fields that xfs_dir3_free_get_buf() has already zeroed. These lined up with the block number in the dir v3 header format. While looking at this, I noticed that the struct xfs_dir3_free_hdr() had 4 bytes of padding in it that wasn't defined as padding or being zeroed by the initialisation. Add a pad field declaration and fully zero the on disk and in-core headers in xfs_dir3_free_get_buf() so that this is never an issue in the future. Note that this doesn't change the on-disk layout, just makes the 32 bits of padding in the layout explicit. Signed-off-by: Dave Chinner Reviewed-by: Ben Myers Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_dir2_format.h | 1 + fs/xfs/xfs_dir2_node.c | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) hooks/post-receive -- XFS development tree From jack@suse.cz Thu May 30 14:57:29 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 52EF17F37 for ; Thu, 30 May 2013 14:57:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 206BF304066 for ; Thu, 30 May 2013 12:57:26 -0700 (PDT) X-ASG-Debug-ID: 1369943844-04bdf0233d0aaf0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id HGxPe71RQcreDosI for ; Thu, 30 May 2013 12:57:24 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 173C7A52BF; Thu, 30 May 2013 21:57:24 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id A339A80781; Thu, 30 May 2013 21:57:23 +0200 (CEST) Date: Thu, 30 May 2013 21:57:23 +0200 From: Jan Kara To: Eric Sandeen Cc: Jan Kara , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 2/3] 285: Fix file syncing Message-ID: <20130530195723.GB586@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/3] 285: Fix file syncing References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-2-git-send-email-jack@suse.cz> <51A75872.4080909@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A75872.4080909@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369943844 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 30-05-13 08:47:30, Eric Sandeen wrote: > On 5/30/13 7:45 AM, Jan Kara wrote: > > The intention of tests 08 and 09 in test generic/285 is to sync the > > whole file before checking for data and holes. However the helper is > > called with nbytes argument set to 0 which results in not syncing > > anything. Set nbytes properly. > > Hm, are you sure? (Is the man page wrong, or is the sync_file_range > implementation wrong?) > > DESCRIPTION > sync_file_range() permits fine control when synchronizing the > open file referred to by the file descriptor fd with disk. > > offset is the starting byte of the file range to be synchro- > nized. nbytes specifies the length of the range to be synchro- > nized, in bytes; if nbytes is zero, then all bytes from offset > through to the end of file are synchronized. My fault that I didn't read the manpage carefully enough. Scratch this patch. Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu May 30 15:01:24 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0A1BC7F37 for ; Thu, 30 May 2013 15:01:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id EDA8F304043 for ; Thu, 30 May 2013 13:01:20 -0700 (PDT) X-ASG-Debug-ID: 1369944079-04cbb0468e0b7f0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id nB53eAdC2lWlFVCT for ; Thu, 30 May 2013 13:01:19 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 0ED0AA52BF; Thu, 30 May 2013 22:01:18 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 5F43580781; Thu, 30 May 2013 22:01:18 +0200 (CEST) Date: Thu, 30 May 2013 22:01:18 +0200 From: Jan Kara To: Eric Sandeen Cc: Jan Kara , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3] 285: Test offsets over 4GB Message-ID: <20130530200118.GC586@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] 285: Test offsets over 4GB References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-3-git-send-email-jack@suse.cz> <51A758A8.80502@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A758A8.80502@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369944079 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 30-05-13 08:48:24, Eric Sandeen wrote: > On 5/30/13 7:45 AM, Jan Kara wrote: > > Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over > > 4GB. > > > Hm, should we add 2T as well while we're at it? > > (and does this cause any new failures?) Yes, ext4 is broken. I've sent fixes for it yesterday. I'm not sure what exactly would overflow at 2T ... block counts if signed int is used and blocksize is 1KB? Honza > > Signed-off-by: Jan Kara > > --- > > src/seek_sanity_test.c | 38 ++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 38 insertions(+) > > > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > > index 7d5868b..55e7ed6 100644 > > --- a/src/seek_sanity_test.c > > +++ b/src/seek_sanity_test.c > > @@ -18,6 +18,7 @@ > > */ > > > > #define _XOPEN_SOURCE 500 > > +#define _FILE_OFFSET_BITS 64 > > #include > > #include > > #include > > @@ -191,6 +192,42 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, > > return ret; > > } > > > > +/* test a huge file to check for 4G overflows */ > > +static int test10(int fd, int testnum) > > +{ > > + char *buf = NULL; > > + int bufsz = alloc_size; > > + off_t filsz = 8ULL << 30; /* 8G */ > > + off_t off = filsz - 2*bufsz; > > + int ret = -1; > > + > > + buf = do_malloc(bufsz); > > + if (!buf) > > + goto out; > > + memset(buf, 'a', bufsz); > > + > > + ret = do_pwrite(fd, buf, bufsz, 0); > > + if (ret) > > + goto out; > > + ret = do_pwrite(fd, buf, bufsz, off); > > + if (ret) > > + goto out; > > + > > + /* offset at the beginning */ > > + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); > > + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); > > + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); > > + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); > > + > > + /* offset around eof */ > > + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); > > + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); > > + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); > > + > > +out: > > + do_free(buf); > > + return ret; > > +} > > /* > > * test file with unwritten extents, have both dirty and > > * writeback pages in page cache. > > @@ -577,6 +614,7 @@ struct testrec seek_tests[] = { > > { 7, test07, "Test file with unwritten extents, only have dirty pages" }, > > { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, > > { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, > > + { 10, test10, "Test a huge file" }, > > }; > > > > static int run_test(struct testrec *tr) > > > -- Jan Kara SUSE Labs, CR From sandeen@sandeen.net Thu May 30 15:02:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 818B77F37 for ; Thu, 30 May 2013 15:02:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0DA9BAC00E for ; Thu, 30 May 2013 13:02:09 -0700 (PDT) X-ASG-Debug-ID: 1369944127-04cb6c5afa0ab50001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id UKD9EdsMXX68CQND for ; Thu, 30 May 2013 13:02:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id A976363740D2; Thu, 30 May 2013 15:02:06 -0500 (CDT) Message-ID: <51A7B03E.2080909@sandeen.net> Date: Thu, 30 May 2013 15:02:06 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss Subject: [PATCH V2] xfstests: generic/313, test sgid inheritance on subdirs References: <51A68175.9020202@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: generic/313, test sgid inheritance on subdirs In-Reply-To: <51A68175.9020202@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369944127 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words On XFS this test fails today due to some over-eager SGID removal in xfs core code; ext4 & btrfs pass. Document it in a test, will send xfs patch in a bit. Signed-off-by: Eric Sandeen --- p.s. I'm going to just flaunt my ignorance and say: I've never understood acls well. I'm hoping someone who does can help me write a better changelog, because this one is no good at all! V2: add missing source of "attr" file for _require_acls diff --git a/tests/generic/313 b/tests/generic/313 new file mode 100755 index 0000000..3dee609 --- /dev/null +++ b/tests/generic/313 @@ -0,0 +1,68 @@ +#! /bin/bash +# FS QA Test No. 313 +# +# Test SGID inheritance on subdirectories +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/attr + +# real QA test starts here +_supported_fs generic +_require_acls +_require_user +_need_to_be_root + +rm -rf $TEST_DIR/$seq-dir + +# Make dir owned by qa user, and an unrelated group: +mkdir $TEST_DIR/$seq-dir +chown $qa_user:12345 $TEST_DIR/$seq-dir + +# Make parent dir sgid +chmod 2775 $TEST_DIR/$seq-dir + +# Make subdirs before & after acl set +su $qa_user -c "mkdir $TEST_DIR/$seq-dir/subdir" +su $qa_user -c "setfacl -m u:$qa_user:rwx,d:u:$qa_user:rwx $TEST_DIR/$seq-dir" +su $qa_user -c "mkdir $TEST_DIR/$seq-dir/subdir2" + +# Both subdirs should have inherited sgid +ls -ld $TEST_DIR/$seq-dir/subdir* | _filter_test_dir | awk '{print $1,$NF}' + +status=0 +exit diff --git a/tests/generic/313.out b/tests/generic/313.out new file mode 100644 index 0000000..326a929 --- /dev/null +++ b/tests/generic/313.out @@ -0,0 +1,3 @@ +QA output created by 313 +drwxr-sr-x. TEST_DIR/313-dir/subdir +drwxrwsr-x+ TEST_DIR/313-dir/subdir2 diff --git a/tests/generic/group b/tests/generic/group index bd443c1..d5ec8d5 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -115,3 +115,4 @@ 310 auto 311 auto metadata log 312 auto quick prealloc enospc +313 auto quick acl From sandeen@redhat.com Thu May 30 15:05:09 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E1CAA7F37 for ; Thu, 30 May 2013 15:05:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B4BCF8F8039 for ; Thu, 30 May 2013 13:05:09 -0700 (PDT) X-ASG-Debug-ID: 1369944304-04bdf0233e0b3e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id VHGXgd9sbwXHTXe9 for ; Thu, 30 May 2013 13:05:05 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UK54lw004832 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 May 2013 16:05:04 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4UK52uk029676 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Thu, 30 May 2013 16:05:03 -0400 Message-ID: <51A7B0EE.1010300@redhat.com> Date: Thu, 30 May 2013 15:05:02 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3] 285: Test offsets over 4GB References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-3-git-send-email-jack@suse.cz> <51A758A8.80502@redhat.com> <20130530200118.GC586@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] 285: Test offsets over 4GB In-Reply-To: <20130530200118.GC586@quack.suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1369944304 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/30/13 3:01 PM, Jan Kara wrote: > On Thu 30-05-13 08:48:24, Eric Sandeen wrote: >> On 5/30/13 7:45 AM, Jan Kara wrote: >>> Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over >>> 4GB. >> >> >> Hm, should we add 2T as well while we're at it? >> >> (and does this cause any new failures?) > Yes, ext4 is broken. I've sent fixes for it yesterday. I'm not sure what Argh, sorry I forgot that. I just want to be careful about more rigorous tests making it look like we have regressions in the code. > exactly would overflow at 2T ... block counts if signed int is used and > blocksize is 1KB? Hum ok, where'd I come up with 2T? :) never mind that maybe, unless there are other potential trouble points we should add (8T? 16T for filesystems that can handle it?) -Eric > Honza > >>> Signed-off-by: Jan Kara >>> --- >>> src/seek_sanity_test.c | 38 ++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 38 insertions(+) >>> >>> diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c >>> index 7d5868b..55e7ed6 100644 >>> --- a/src/seek_sanity_test.c >>> +++ b/src/seek_sanity_test.c >>> @@ -18,6 +18,7 @@ >>> */ >>> >>> #define _XOPEN_SOURCE 500 >>> +#define _FILE_OFFSET_BITS 64 >>> #include >>> #include >>> #include >>> @@ -191,6 +192,42 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, >>> return ret; >>> } >>> >>> +/* test a huge file to check for 4G overflows */ >>> +static int test10(int fd, int testnum) >>> +{ >>> + char *buf = NULL; >>> + int bufsz = alloc_size; >>> + off_t filsz = 8ULL << 30; /* 8G */ >>> + off_t off = filsz - 2*bufsz; >>> + int ret = -1; >>> + >>> + buf = do_malloc(bufsz); >>> + if (!buf) >>> + goto out; >>> + memset(buf, 'a', bufsz); >>> + >>> + ret = do_pwrite(fd, buf, bufsz, 0); >>> + if (ret) >>> + goto out; >>> + ret = do_pwrite(fd, buf, bufsz, off); >>> + if (ret) >>> + goto out; >>> + >>> + /* offset at the beginning */ >>> + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); >>> + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); >>> + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); >>> + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); >>> + >>> + /* offset around eof */ >>> + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); >>> + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); >>> + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); >>> + >>> +out: >>> + do_free(buf); >>> + return ret; >>> +} >>> /* >>> * test file with unwritten extents, have both dirty and >>> * writeback pages in page cache. >>> @@ -577,6 +614,7 @@ struct testrec seek_tests[] = { >>> { 7, test07, "Test file with unwritten extents, only have dirty pages" }, >>> { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, >>> { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, >>> + { 10, test10, "Test a huge file" }, >>> }; >>> >>> static int run_test(struct testrec *tr) >>> >> From david@fromorbit.com Thu May 30 15:27:22 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 62E4E7F37 for ; Thu, 30 May 2013 15:27:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D5F49AC010 for ; Thu, 30 May 2013 13:27:21 -0700 (PDT) X-ASG-Debug-ID: 1369945639-04cbb046910d650001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id BvxdexYDawirHG7V for ; Thu, 30 May 2013 13:27:19 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkkNAC61p1F5La/F/2dsb2JhbABZgwkwglK6H4UhBAF9F3SCIwEBBAEnExwjBQsIAw4HAwklDwUlAyETiAcFDbsaFo1pgR0Hg1cDlz2RQYMhKoEuJA Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail05.adl6.internode.on.net with ESMTP; 31 May 2013 05:57:17 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ui9RL-0001OW-JO; Fri, 31 May 2013 06:27:15 +1000 Date: Fri, 31 May 2013 06:27:15 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com, bpm@sgi.com Subject: Re: [PATCH 2/2] xfs: inode unlinked list needs to recalculate the inode CRC Message-ID: <20130530202715.GO29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: inode unlinked list needs to recalculate the inode CRC References: <1369636707-15150-10-git-send-email-david@fromorbit.com> <1369773373-26697-1-git-send-email-david@fromorbit.com> <1369773373-26697-3-git-send-email-david@fromorbit.com> <51A75F8B.8000507@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A75F8B.8000507@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369945639 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132491 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 10:17:47AM -0400, Brian Foster wrote: > On 05/28/2013 04:36 PM, Dave Chinner wrote: > > From: Dave Chinner > > > > The inode unlinked list manipulations operate directly on the inode > > buffer, and so bypass the inode CRC calculation mechanisms. Hence an > > inode on the unlinked list has an invalid CRC. Fix this by > > recalculating the CRC whenever we modify an unlinked list pointer in > > an inode, ncluding during log recovery. This is trivial to do and > > results in unlinked list operations always leaving a consistent > > inode in the buffer. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_inode.c | 42 ++++++++++++++++++++++++++++++++++++++---- > > fs/xfs/xfs_log_recover.c | 9 +++++++++ > > 2 files changed, 47 insertions(+), 4 deletions(-) > > > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > > index efbe1ac..2d993e7 100644 > > --- a/fs/xfs/xfs_inode.c > > +++ b/fs/xfs/xfs_inode.c > > @@ -1579,6 +1579,23 @@ out_bmap_cancel: > > } > > > > /* > > + * Helper function to calculate range of the inode to log and recalculate the > > + * on-disk inode crc if necessary. > > + */ > > +static int > > +xfs_iunlink_dinode_calc_crc( > > + struct xfs_mount *mp, > > + struct xfs_dinode *dip) > > +{ > > + if (dip->di_version < 3) > > + return sizeof(xfs_agino_t); > > + > > + xfs_dinode_calc_crc(mp, dip); > > + return offsetof(struct xfs_dinode, di_changecount) - > > + offsetof(struct xfs_dinode, di_next_unlinked); > > +} > > + > > So we've added a new helper, the return value for which is either the > size of an inode number or an inode number + crc, depending on format. I > also notice that the return value doesn't appear to be used anywhere > this helper is called. Because I forgot to remove it. ;) > > > +/* > > * This is called when the inode's link count goes to 0. > > * We place the on-disk inode on a list in the AGI. It > > * will be pulled from this list when the inode is freed. > > @@ -1638,10 +1655,15 @@ xfs_iunlink( > > dip->di_next_unlinked = agi->agi_unlinked[bucket_index]; > > offset = ip->i_imap.im_boffset + > > offsetof(xfs_dinode_t, di_next_unlinked); > > + > > + /* need to recalc the inode CRC if appropriate */ > > + xfs_iunlink_dinode_calc_crc(mp, dip); > > + > > xfs_trans_inode_buf(tp, ibp); > > xfs_trans_log_buf(tp, ibp, offset, > > - (offset + sizeof(xfs_agino_t) - 1)); > > + offset + sizeof(xfs_agino_t) - 1); > > xfs_inobp_check(mp, ibp); > > + > > } > > So IIUC, offset is set to the offset of the di_next_unlinked value of > this inode in the backing buffer of the inode (which we've just updated > directly via dip). > > We call the helper to update the CRC then call xfs_trans_log_buf() to > log a range of the buffer. From the original code, I surmise that we're > logging the range that represents the di_next_unlinked value and from > the addition of the helper, I surmise we intend to now include the crc > in that logged region. > > But we haven't utilized the return value and I'm speculating on the > intent here. So I see that we're updating the CRC, but is it actually > logged? Perhaps I'm missing something, but if so, then why even have the > xfs_iunlink_dinode_calc_crc() helper? > > /me goes back to read the original 9/9 and followup: > > http://oss.sgi.com/archives/xfs/2013-05/msg00867.html > > OK, so in that case, perhaps the helper is now unnecessary and we could > just call xfs_dinode_calc_crc()? Yup, exactly. > BTW, I was also going to ask here whether the fact that we update the > CRC on recovery rather than logging it exposed items in the log to risk > if they happened to become corrupted before that update occurs, but > IIUC, we're still protected in that recovery itself should validate the > existing on-disk CRC prior to the update. Correct? No, recovery doesn't check it yet. Recovery is a complex dance, so there's further work there needed allow recovery to do CRC checking on read (as the buffer initialisation migh be what is being replayed). Cheers, Dave. -- Dave Chinner david@fromorbit.com From jack@suse.cz Thu May 30 15:49:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4ABCE7F37 for ; Thu, 30 May 2013 15:49:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BFE78AC003 for ; Thu, 30 May 2013 13:49:24 -0700 (PDT) X-ASG-Debug-ID: 1369946962-04cb6c5afa0eaa0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id rUpnz6SxD4GWS6DF for ; Thu, 30 May 2013 13:49:22 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 67E0DA50DE; Thu, 30 May 2013 22:49:22 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id E44A280781; Thu, 30 May 2013 22:49:21 +0200 (CEST) Date: Thu, 30 May 2013 22:49:21 +0200 From: Jan Kara To: Eric Sandeen Cc: Jan Kara , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3] 285: Test offsets over 4GB Message-ID: <20130530204921.GD586@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] 285: Test offsets over 4GB References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-3-git-send-email-jack@suse.cz> <51A758A8.80502@redhat.com> <20130530200118.GC586@quack.suse.cz> <51A7B0EE.1010300@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A7B0EE.1010300@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369946962 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132493 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 30-05-13 15:05:02, Eric Sandeen wrote: > On 5/30/13 3:01 PM, Jan Kara wrote: > > On Thu 30-05-13 08:48:24, Eric Sandeen wrote: > >> On 5/30/13 7:45 AM, Jan Kara wrote: > >>> Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over > >>> 4GB. > >> > >> > >> Hm, should we add 2T as well while we're at it? > >> > >> (and does this cause any new failures?) > > Yes, ext4 is broken. I've sent fixes for it yesterday. I'm not sure what > > Argh, sorry I forgot that. I just want to be careful about more rigorous > tests making it look like we have regressions in the code. > > > exactly would overflow at 2T ... block counts if signed int is used and > > blocksize is 1KB? > > Hum ok, where'd I come up with 2T? :) never mind that maybe, unless > there are other potential trouble points we should add (8T? 16T for > filesystems that can handle it?) Yeah, so 8T + something might be interesting and both ext4 & xfs should handle that fine. 16T + something might be interesting for xfs if it supports that size. I'll update this patch with these checks. Honza > >>> Signed-off-by: Jan Kara > >>> --- > >>> src/seek_sanity_test.c | 38 ++++++++++++++++++++++++++++++++++++++ > >>> 1 file changed, 38 insertions(+) > >>> > >>> diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > >>> index 7d5868b..55e7ed6 100644 > >>> --- a/src/seek_sanity_test.c > >>> +++ b/src/seek_sanity_test.c > >>> @@ -18,6 +18,7 @@ > >>> */ > >>> > >>> #define _XOPEN_SOURCE 500 > >>> +#define _FILE_OFFSET_BITS 64 > >>> #include > >>> #include > >>> #include > >>> @@ -191,6 +192,42 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, > >>> return ret; > >>> } > >>> > >>> +/* test a huge file to check for 4G overflows */ > >>> +static int test10(int fd, int testnum) > >>> +{ > >>> + char *buf = NULL; > >>> + int bufsz = alloc_size; > >>> + off_t filsz = 8ULL << 30; /* 8G */ > >>> + off_t off = filsz - 2*bufsz; > >>> + int ret = -1; > >>> + > >>> + buf = do_malloc(bufsz); > >>> + if (!buf) > >>> + goto out; > >>> + memset(buf, 'a', bufsz); > >>> + > >>> + ret = do_pwrite(fd, buf, bufsz, 0); > >>> + if (ret) > >>> + goto out; > >>> + ret = do_pwrite(fd, buf, bufsz, off); > >>> + if (ret) > >>> + goto out; > >>> + > >>> + /* offset at the beginning */ > >>> + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); > >>> + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); > >>> + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); > >>> + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); > >>> + > >>> + /* offset around eof */ > >>> + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); > >>> + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); > >>> + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); > >>> + > >>> +out: > >>> + do_free(buf); > >>> + return ret; > >>> +} > >>> /* > >>> * test file with unwritten extents, have both dirty and > >>> * writeback pages in page cache. > >>> @@ -577,6 +614,7 @@ struct testrec seek_tests[] = { > >>> { 7, test07, "Test file with unwritten extents, only have dirty pages" }, > >>> { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, > >>> { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, > >>> + { 10, test10, "Test a huge file" }, > >>> }; > >>> > >>> static int run_test(struct testrec *tr) > >>> > >> > -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu May 30 16:21:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9FC3B7F37 for ; Thu, 30 May 2013 16:21:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8FEEB8F8033 for ; Thu, 30 May 2013 14:21:49 -0700 (PDT) X-ASG-Debug-ID: 1369948908-04cb6c5af811730001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id GN7m1mmzZaoFVuYg for ; Thu, 30 May 2013 14:21:48 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id D4F74A52D7; Thu, 30 May 2013 23:21:47 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 61EE780783; Thu, 30 May 2013 23:21:47 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 3/3 v2] 285: Test offsets over 4GB Date: Thu, 30 May 2013 23:21:45 +0200 X-ASG-Orig-Subj: [PATCH 3/3 v2] 285: Test offsets over 4GB Message-Id: <1369948905-6693-3-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1369948905-6693-1-git-send-email-jack@suse.cz> References: <1369948905-6693-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369948908 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132495 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over 4GB, 8TB, and 16TB. Signed-off-by: Jan Kara --- src/seek_sanity_test.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index 748eec2..cd3b1ee 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -18,6 +18,7 @@ */ #define _XOPEN_SOURCE 500 +#define _FILE_OFFSET_BITS 64 #include #include #include @@ -125,6 +126,9 @@ static ssize_t do_pwrite(int fd, const void *buf, size_t count, off_t offset) while (count > written) { ret = pwrite(fd, buf + written, count - written, offset + written); if (ret < 0) { + /* Don't warn about too large file. It's fs dependent. */ + if (errno == EFBIG) + return ret; fprintf(stderr, " ERROR %d: Failed to write %ld " "bytes\n", errno, (long)count); return ret; @@ -191,6 +195,77 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, return ret; } +static int huge_file_test(int fd, int testnum, off_t filsz) +{ + char *buf = NULL; + int bufsz = alloc_size * 16; /* XFS seems to round allocated size */ + off_t off = filsz - 2*bufsz; + int ret = -1; + + buf = do_malloc(bufsz); + if (!buf) + goto out; + memset(buf, 'a', bufsz); + + ret = do_pwrite(fd, buf, bufsz, 0); + if (ret) + goto out; + ret = do_pwrite(fd, buf, bufsz, off); + if (ret) { + /* + * Report success. Filesystem just cannot handle so large + * offsets and correctly reports it. + */ + if (errno == EFBIG) { + fprintf(stdout, "Test skipped as fs doesn't support so large files.\n"); + ret = 0; + } + goto out; + } + + /* offset at the beginning */ + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); + + /* offset around eof */ + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); + ret += do_lseek(testnum, 8, fd, filsz, SEEK_DATA, off - bufsz, off); + +out: + do_free(buf); + return ret; +} + +/* + * Test huge file to check for overflows of block counts due to usage of + * 32-bit types. + */ +static int test12(int fd, int testnum) +{ + return huge_file_test(fd, testnum, + ((long long)alloc_size << 32) + (1 << 20)); +} + +/* + * Test huge file to check for overflows of block counts due to usage of + * signed types + */ +static int test11(int fd, int testnum) +{ + return huge_file_test(fd, testnum, + ((long long)alloc_size << 31) + (1 << 20)); +} + +/* Test an 8G file to check for offset overflows at 1 << 32 */ +static int test10(int fd, int testnum) +{ + return huge_file_test(fd, testnum, 8ULL << 30); +} + /* * test file with unwritten extents, have both dirty and * writeback pages in page cache. @@ -577,6 +652,9 @@ struct testrec seek_tests[] = { { 7, test07, "Test file with unwritten extents, only have dirty pages" }, { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, + { 10, test10, "Test a huge file for offset overflow" }, + { 11, test11, "Test a huge file for block number signed" }, + { 12, test12, "Test a huge file for block number overflow" }, }; static int run_test(struct testrec *tr) -- 1.8.1.4 From jack@suse.cz Thu May 30 16:21:49 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BE0067F3F for ; Thu, 30 May 2013 16:21:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9F3B4304062 for ; Thu, 30 May 2013 14:21:49 -0700 (PDT) X-ASG-Debug-ID: 1369948908-04bdf0233d11bf0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Mya8hdfQ8OKN5HBp for ; Thu, 30 May 2013 14:21:48 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id C875EA52BF; Thu, 30 May 2013 23:21:47 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 5FC5480780; Thu, 30 May 2013 23:21:47 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 2/3 v2] 285: Fix indentation of do_pwrite Date: Thu, 30 May 2013 23:21:44 +0200 X-ASG-Orig-Subj: [PATCH 2/3 v2] 285: Fix indentation of do_pwrite Message-Id: <1369948905-6693-2-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1369948905-6693-1-git-send-email-jack@suse.cz> References: <1369948905-6693-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369948908 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132495 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Signed-off-by: Jan Kara --- src/seek_sanity_test.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index eec6903..748eec2 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -120,19 +120,19 @@ static int do_sync_dirty_pages(int fd, off64_t offset, off64_t nbytes) static ssize_t do_pwrite(int fd, const void *buf, size_t count, off_t offset) { - ssize_t ret, written = 0; - - while (count > written) { - ret = pwrite(fd, buf + written, count - written, offset + written); - if (ret < 0) { - fprintf(stderr, " ERROR %d: Failed to write %ld " - "bytes\n", errno, (long)count); - return ret; - } - written += ret; - } - - return 0; + ssize_t ret, written = 0; + + while (count > written) { + ret = pwrite(fd, buf + written, count - written, offset + written); + if (ret < 0) { + fprintf(stderr, " ERROR %d: Failed to write %ld " + "bytes\n", errno, (long)count); + return ret; + } + written += ret; + } + + return 0; } #define do_close(x) do { if ((x) > -1) close(x); } while(0); -- 1.8.1.4 From jack@suse.cz Thu May 30 16:21:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 58E7B7F3F for ; Thu, 30 May 2013 16:21:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 486308F8033 for ; Thu, 30 May 2013 14:21:49 -0700 (PDT) X-ASG-Debug-ID: 1369948908-04cb6c5af711730001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id B6BCE8jTmEnCp3uf for ; Thu, 30 May 2013 14:21:48 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id CAD6AA52C6; Thu, 30 May 2013 23:21:47 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 5C2A080781; Thu, 30 May 2013 23:21:47 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 1/3 v2] 285: Fix test for ext4 in some configurations Date: Thu, 30 May 2013 23:21:43 +0200 X-ASG-Orig-Subj: [PATCH 1/3 v2] 285: Fix test for ext4 in some configurations Message-Id: <1369948905-6693-1-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.8.1.4 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369948908 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132495 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In some configurations (e.g. 1 KB block size), ext4 can decide it is better to zero out several blocks rather than splitting unwritten extent. This changes results SEEK_HOLE / SEEK_DATA returns and thus the test fails. Fix the problem by disabling the feature for this test. Reviewed-by: Eric Sandeen Signed-off-by: Jan Kara --- tests/generic/285 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/generic/285 b/tests/generic/285 index b700a15..8078b1c 100755 --- a/tests/generic/285 +++ b/tests/generic/285 @@ -46,6 +46,12 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" +# Disable extent zeroing for ext4 as that change where holes are created +if [ "$FSTYP" = "ext4" ]; then + DEV=`basename $TEST_DEV` + echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb +fi + _cleanup() { eval "rm -f $BASE_TEST_FILE.*" -- 1.8.1.4 From sandeen@sandeen.net Thu May 30 16:25:13 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 79BB27F37 for ; Thu, 30 May 2013 16:25:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4A533304064 for ; Thu, 30 May 2013 14:25:13 -0700 (PDT) X-ASG-Debug-ID: 1369949111-04bdf0233c12040001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id unmcpSrSGOyqZlxM for ; Thu, 30 May 2013 14:25:11 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6E9946129728; Thu, 30 May 2013 16:25:11 -0500 (CDT) Message-ID: <51A7C3B7.4090204@sandeen.net> Date: Thu, 30 May 2013 16:25:11 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 2/3 v2] 285: Fix indentation of do_pwrite References: <1369948905-6693-1-git-send-email-jack@suse.cz> <1369948905-6693-2-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/3 v2] 285: Fix indentation of do_pwrite In-Reply-To: <1369948905-6693-2-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369949111 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132495 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/30/13 4:21 PM, Jan Kara wrote: > Signed-off-by: Jan Kara > --- > src/seek_sanity_test.c | 26 +++++++++++++------------- > 1 file changed, 13 insertions(+), 13 deletions(-) mmm, whitespace. Reviewed-by: Eric Sandeen > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index eec6903..748eec2 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -120,19 +120,19 @@ static int do_sync_dirty_pages(int fd, off64_t offset, off64_t nbytes) > > static ssize_t do_pwrite(int fd, const void *buf, size_t count, off_t offset) > { > - ssize_t ret, written = 0; > - > - while (count > written) { > - ret = pwrite(fd, buf + written, count - written, offset + written); > - if (ret < 0) { > - fprintf(stderr, " ERROR %d: Failed to write %ld " > - "bytes\n", errno, (long)count); > - return ret; > - } > - written += ret; > - } > - > - return 0; > + ssize_t ret, written = 0; > + > + while (count > written) { > + ret = pwrite(fd, buf + written, count - written, offset + written); > + if (ret < 0) { > + fprintf(stderr, " ERROR %d: Failed to write %ld " > + "bytes\n", errno, (long)count); > + return ret; > + } > + written += ret; > + } > + > + return 0; > } > > #define do_close(x) do { if ((x) > -1) close(x); } while(0); > From rjohnston@sgi.com Thu May 30 17:02:23 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8D40D7F37 for ; Thu, 30 May 2013 17:02:23 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6E8B9304062 for ; Thu, 30 May 2013 15:02:20 -0700 (PDT) Received: from [134.15.0.136] (134.15.0.136) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 30 May 2013 17:00:52 -0500 Message-ID: <51A7CC6B.3030607@sgi.com> Date: Thu, 30 May 2013 17:02:19 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: xfstests Subject: [PATCH] xfstests: Fix test wildcard expansion. Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.136] Before commit 38d58591 "xfstests: fix typo in check", check xfs/[0-9]?? would execute all tests/xfs/[0-9]?? because: 'if grep "^$testname" $group_file >/dev/null' returns the contents of $group_file because $testname="". Therefore xfs/[0-9]?? was echoed to $tmp.list Fix the parsing in check to expand the regular expressions for test names. Signed-off-by: Rich Johnston --- diff --git a/check b/check index 8d32486..eb5d9be 100755 --- a/check +++ b/check @@ -242,13 +242,15 @@ if $have_test_arg; then test_name=`basename $1` group_file=$SRC_DIR/$test_dir/group - if grep "^$test_name" $group_file >/dev/null ; then - # in group file ... OK - echo $SRC_DIR/$1 >>$tmp.list - else - # oops - echo "$1 - unknown test, ignored" - fi + for f in `cd $SRC_DIR/$test_dir; ls $test_name`; do + if grep "^$f" $group_file >/dev/null ; then + # in group file ... OK + echo $SRC_DIR/$test_dir/$f >>$tmp.list + else + # oops + echo "$test_dir/$f - unknown test, ignored" + fi + done ;; esac From david@fromorbit.com Thu May 30 17:12:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 76F017F37 for ; Thu, 30 May 2013 17:12:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5351F304064 for ; Thu, 30 May 2013 15:12:15 -0700 (PDT) X-ASG-Debug-ID: 1369951933-04bdf0233e15f90001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id tkD4nZRE1PsGrfRh for ; Thu, 30 May 2013 15:12:13 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUNAOnNp1F5La/F/2dsb2JhbABagwmDArdrhSEEAX0XdIIjAQEFOhwjEAgDDgoJJQ8FJQMhE4gMuzAWjWmBHQeDVwOXPZFBgyEq Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail05.adl6.internode.on.net with ESMTP; 31 May 2013 07:42:13 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UiB4t-0001dp-5X; Fri, 31 May 2013 08:12:11 +1000 Date: Fri, 31 May 2013 08:12:11 +1000 From: Dave Chinner To: Rich Johnston Cc: xfstests Subject: Re: [PATCH] xfstests: Fix test wildcard expansion. Message-ID: <20130530221211.GP29466@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: Fix test wildcard expansion. References: <51A7CC6B.3030607@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A7CC6B.3030607@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369951933 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132497 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 05:02:19PM -0500, Rich Johnston wrote: > > Before commit 38d58591 "xfstests: fix typo in check", > check xfs/[0-9]?? would execute all tests/xfs/[0-9]?? because: > > 'if grep "^$testname" $group_file >/dev/null' > returns the contents of $group_file because $testname="". > > Therefore xfs/[0-9]?? was echoed to $tmp.list > > Fix the parsing in check to expand the regular expressions for test names. I just fixed this locally myself: - if grep "^$test_name" $group_file >/dev/null ; then + if egrep "^$test_name" $group_file >/dev/null ; then Which just tells grep to treat the pattern as an extended regex.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 30 17:30:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9D9D37F37 for ; Thu, 30 May 2013 17:30:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8D4268F8049 for ; Thu, 30 May 2013 15:30:27 -0700 (PDT) X-ASG-Debug-ID: 1369953025-04cbb0469117d30001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id SxAOucf744bBYLMy for ; Thu, 30 May 2013 15:30:26 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUNALPSp1F5La/F/2dsb2JhbABagwmDArdnhSEEAXwXdIIjAQEFOhwjEAgDDgoJJQ8FJQMhE4gMuzUWjWmBHQeDVwOXPZFBgyEq Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail05.adl6.internode.on.net with ESMTP; 31 May 2013 08:00:01 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UiBM8-0001fc-Bb; Fri, 31 May 2013 08:30:00 +1000 Date: Fri, 31 May 2013 08:30:00 +1000 From: Dave Chinner To: Jan Kara Cc: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 1/3] 285: Fix test for ext4 in some configurations Message-ID: <20130530223000.GQ29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/3] 285: Fix test for ext4 in some configurations References: <1369917939-22660-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369917939-22660-1-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369953025 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132499 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 02:45:37PM +0200, Jan Kara wrote: > In some configurations (e.g. 1 KB block size), ext4 can decide it is > better to zero out several blocks rather than splitting unwritten > extent. This changes results SEEK_HOLE / SEEK_DATA returns and thus the > test fails. Fix the problem by disabling the feature for this test. > > Signed-off-by: Jan Kara > --- > tests/generic/285 | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/tests/generic/285 b/tests/generic/285 > index b700a15..8078b1c 100755 > --- a/tests/generic/285 > +++ b/tests/generic/285 > @@ -46,6 +46,12 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile > > [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" > > +# Disable extent zeroing for ext4 as that change where holes are created > +if [ "$FSTYP" = "ext4" ]; then > + DEV=`basename $TEST_DEV` > + echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb > +fi would that be better going into _require_seek_data_hole so that 286 also picks up this behaviour for ext4? Cheers, Dave. -- Dave Chinner david@fromorbit.com From rjohnston@sgi.com Thu May 30 17:32:53 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DA9D77F37 for ; Thu, 30 May 2013 17:32:53 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5B5CDAC001 for ; Thu, 30 May 2013 15:32:50 -0700 (PDT) Received: from [134.15.0.136] (134.15.0.136) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Thu, 30 May 2013 17:31:22 -0500 Message-ID: <51A7D390.3040108@sgi.com> Date: Thu, 30 May 2013 17:32:48 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: xfstests Subject: Re: [PATCH V2] xfstests: Fix test wildcard expansion. References: <51A7CC6B.3030607@sgi.com> In-Reply-To: <51A7CC6B.3030607@sgi.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.136] Before commit 38d58591 "xfstests: fix typo in check", check xfs/[0-9]?? would execute all tests/xfs/[0-9]?? because: Change to use egrep to fix the parsing. Signed-off-by: Rich Johnston --- V1-V2 Use egrep instead of my bulky method diff --git a/check b/check index 8d32486..ff8fbcf 100755 --- a/check +++ b/check @@ -242,7 +242,7 @@ if $have_test_arg; then test_name=`basename $1` group_file=$SRC_DIR/$test_dir/group - if grep "^$test_name" $group_file >/dev/null ; then + if egrep "^$test_name" $group_file >/dev/null ; then # in group file ... OK echo $SRC_DIR/$1 >>$tmp.list else From david@fromorbit.com Thu May 30 17:34:17 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5F1A37F53 for ; Thu, 30 May 2013 17:34:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4EA298F8049 for ; Thu, 30 May 2013 15:34:17 -0700 (PDT) X-ASG-Debug-ID: 1369953255-04cb6c5af9178c0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id rPCceOcVLS59ABID for ; Thu, 30 May 2013 15:34:15 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUNALPSp1F5La/F/2dsb2JhbABagwmDArdnhSEEAXwXdIIjAQEFOhwjEAgDDgoJJQ8FJQMhE4gMuzUWjWmBHQeDVwOXPZFBgyEq Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail05.adl6.internode.on.net with ESMTP; 31 May 2013 08:04:15 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UiBQE-0001gJ-C5; Fri, 31 May 2013 08:34:14 +1000 Date: Fri, 31 May 2013 08:34:14 +1000 From: Dave Chinner To: Jan Kara Cc: Eric Sandeen , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3] 285: Test offsets over 4GB Message-ID: <20130530223414.GR29466@dastard> X-ASG-Orig-Subj: Re: [PATCH 3/3] 285: Test offsets over 4GB References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-3-git-send-email-jack@suse.cz> <51A758A8.80502@redhat.com> <20130530200118.GC586@quack.suse.cz> <51A7B0EE.1010300@redhat.com> <20130530204921.GD586@quack.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130530204921.GD586@quack.suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369953255 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132499 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 10:49:21PM +0200, Jan Kara wrote: > On Thu 30-05-13 15:05:02, Eric Sandeen wrote: > > On 5/30/13 3:01 PM, Jan Kara wrote: > > > On Thu 30-05-13 08:48:24, Eric Sandeen wrote: > > >> On 5/30/13 7:45 AM, Jan Kara wrote: > > >>> Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over > > >>> 4GB. > > >> > > >> > > >> Hm, should we add 2T as well while we're at it? > > >> > > >> (and does this cause any new failures?) > > > Yes, ext4 is broken. I've sent fixes for it yesterday. I'm not sure what > > > > Argh, sorry I forgot that. I just want to be careful about more rigorous > > tests making it look like we have regressions in the code. > > > > > exactly would overflow at 2T ... block counts if signed int is used and > > > blocksize is 1KB? > > > > Hum ok, where'd I come up with 2T? :) never mind that maybe, unless > > there are other potential trouble points we should add (8T? 16T for > > filesystems that can handle it?) > Yeah, so 8T + something might be interesting and both ext4 & xfs should > handle that fine. 16T + something might be interesting for xfs if it > supports that size. I'll update this patch with these checks. What boundary traversal are we trying to test at these high offsets? I mean, I can understand wanting to confirm they work, but there's no 32 bit variable boundary in the seek code at 8/16TB that needs to be specifically test is there? i.e. is it just testing the same case as the 8GB case? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 30 17:38:26 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ADE747F53 for ; Thu, 30 May 2013 17:38:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8E6A8304059 for ; Thu, 30 May 2013 15:38:26 -0700 (PDT) X-ASG-Debug-ID: 1369953504-04cbb0468f188d0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id saMk7fKhttQrKixe for ; Thu, 30 May 2013 15:38:24 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUNAK3Tp1F5La/F/2dsb2JhbABagwmDArdnhSEEAXwXdIIjAQEFOhwjEAgDDgoJJQ8FJQMhE4gMuzYWjWmBHQeDVwOXPZFBgyEq Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail05.adl6.internode.on.net with ESMTP; 31 May 2013 08:08:24 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UiBUF-0001h0-Al; Fri, 31 May 2013 08:38:23 +1000 Date: Fri, 31 May 2013 08:38:23 +1000 From: Dave Chinner To: Rich Johnston Cc: xfstests Subject: Re: [PATCH V2] xfstests: Fix test wildcard expansion. Message-ID: <20130530223823.GS29466@dastard> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: Fix test wildcard expansion. References: <51A7CC6B.3030607@sgi.com> <51A7D390.3040108@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A7D390.3040108@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369953504 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132499 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 05:32:48PM -0500, Rich Johnston wrote: > > Before commit 38d58591 "xfstests: fix typo in check", > check xfs/[0-9]?? would execute all tests/xfs/[0-9]?? because: > > Change to use egrep to fix the parsing. > > Signed-off-by: Rich Johnston > --- > V1-V2 > Use egrep instead of my bulky method looks like you lost a bit of the commit message. Otherwise it works fine here ;) Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu May 30 17:44:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 451D47F51 for ; Thu, 30 May 2013 17:44:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C390CAC00E for ; Thu, 30 May 2013 15:44:01 -0700 (PDT) X-ASG-Debug-ID: 1369953839-04cbb0469118f20001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id a4K6t3N93lfhs66c for ; Thu, 30 May 2013 15:44:00 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUNAAjVp1F5La/F/2dsb2JhbABagwmDArdkhSEEAXwXdIIjAQEFOhwjEAgDGAklDwUlAyETiAy7LhaNaYEdB4NXA5c9kUGDISo Received: from ppp121-45-175-197.lns20.syd6.internode.on.net (HELO dastard) ([121.45.175.197]) by ipmail05.adl6.internode.on.net with ESMTP; 31 May 2013 08:13:59 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UiBZe-0001hb-OV; Fri, 31 May 2013 08:43:58 +1000 Date: Fri, 31 May 2013 08:43:58 +1000 From: Dave Chinner To: Eric Sandeen Cc: alexander.tsvetkov@oracle.com, xfs@oss.sgi.com Subject: Re: XFStest suite problem Message-ID: <20130530224358.GT29466@dastard> X-ASG-Orig-Subj: Re: XFStest suite problem References: <51A708B2.2080701@oracle.com> <51A75745.7090805@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A75745.7090805@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1369953839 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132499 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 08:42:29AM -0500, Eric Sandeen wrote: > On 5/30/13 3:07 AM, alexander.tsvetkov@oracle.com wrote: > > I think the following code of "check" script incorrectly builds this exclude list: > > > > "-X) xfile=$2; shift ; > > for d in $SRC_GROUPS $FSTYP; do > > [ -f $SRC_DIR/$d/$xfile ] || continue > > for f in `cat $SRC_DIR/$d/$xfile`; do > > echo $d/$f >> $tmp.xlist > > Well, it is perhaps unexpected, but: > > -X file exclude individual tests > > I think it's designed to actually exclude tests contained in that > file, not test numbers. It's not very obvious. :( Right, it's a file full of test numbers to expunged. Two things can be done here: 1. improve the description 2. change the `cat $file` to `egrep ^$SUPPORTED_TESTS $file` so that it requires files in the same format as group files. Cheers, Dave. -- Dave Chinner david@fromorbit.com From qcai@redhat.com Thu May 30 22:03:52 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C5FED7F37 for ; Thu, 30 May 2013 22:03:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A5C36304043 for ; Thu, 30 May 2013 20:03:49 -0700 (PDT) X-ASG-Debug-ID: 1369969422-04cb6c5af82bee0001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 7PXjknkpYxRlPnfb for ; Thu, 30 May 2013 20:03:42 -0700 (PDT) X-Barracuda-Envelope-From: qcai@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail14.collab.prod.int.phx2.redhat.com (zmail14.collab.prod.int.phx2.redhat.com [10.5.83.16]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4V33aE5006937; Thu, 30 May 2013 23:03:36 -0400 Date: Thu, 30 May 2013 23:03:35 -0400 (EDT) From: CAI Qian To: Dave Chinner Cc: xfs@oss.sgi.com, stable@vger.kernel.org, LKML , linux-mm Message-ID: <1462663454.9294499.1369969415681.JavaMail.root@redhat.com> In-Reply-To: <1824023060.8558101.1369892432333.JavaMail.root@redhat.com> References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> <20130530052049.GK29466@dastard> <1824023060.8558101.1369892432333.JavaMail.root@redhat.com> Subject: 3.9.4 Oops running xfstests (WAS Re: 3.9.3: Oops running xfstests) MIME-Version: 1.0 X-ASG-Orig-Subj: 3.9.4 Oops running xfstests (WAS Re: 3.9.3: Oops running xfstests) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - FF20 (Linux)/8.0.3_GA_5664) Thread-Topic: 3.9.3: Oops running xfstests Thread-Index: ZbdgR+krknWTju4fuxZ38z6XOhGjeisF5TeU X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1369969422 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.34 X-Barracuda-Spam-Status: No, SCORE=0.34 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC, URI_HEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132517 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.32 URI_HEX URI: URI hostname has long hexadecimal sequence OK, so the minimal workload to trigger this I found so far was to run trinity, ltp and then xfstests. I have been able to easily reproduced on 3 servers so far, and I'll post full logs here for LKML and linux-mm as this may unrelated to XFS only. As far as I can tell from the previous testing results, this has never been reproduced back in 3.9 GA time. This seems also been reproduced on 3.10-rc3 mostly on s390x so far. CAI Qian 1) [10948.104344] XFS (dm-2): Mounting Filesystem=20 [10948.257335] XFS (dm-2): Ending clean mount=20 [10949.753951] XFS (dm-0): Mounting Filesystem=20 [10950.012824] XFS (dm-0): Ending clean mount=20 [10951.115722] BUG: unable to handle kernel paging request at ffff88003a9ca= 478=20 [10951.122727] IP: [] __call_rcu.constprop.47+0x77/0x230= =20 [10951.129372] PGD 1ddf067 PUD 1de0067 PMD 3da02063 PTE 889b2731bac1a751=20 [10951.135887] Oops: 000b [#1] SMP =20 [10951.139157] Modules linked in: binfmt_misc(F) fuse(F) snd_seq_dummy(F) r= fcomm(F) hidp(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) cmtp(F) kernelcap= i(F) tun(F) bnep(F) ipt_ULOG(F) scsi_transport_iscsi(F) nfnetlink(F) rds(F)= bluetooth(F) af_key(F) pppoe(F) pppox(F) ppp_generic(F) slhc(F) atm(F) nfc= (F) af_802154(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack= _broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_man= gle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F)= nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4= (F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebt= ables(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg= (F) snd_hda_codec_hdmi(F) snd_hda_codec_realtek(F) snd_hda_intel(F) snd_hda= _codec(F) snd_hwdep(F) snd_seq(F) snd_seq_device(F) snd_pcm(F) hp_wmi(F) sp= arse_keymap(F) e1000e(F) rfkill(F) iTCO_wdt(F) snd_page_alloc(F) snd_timer(= F) snd(F) iTCO_vendor_support(F) soundcore(F) mei(F) ptp(F) i2c_i801(F) pps= _core(F) lpc_ich(F) pcspkr(F) mfd_core(F) microcode(F) xfs(F) libcrc32c(F) = sr_mod(F) sd_mod(F) cdrom(F) crc_t10dif(F) nouveau(F) video(F) mxm_wmi(F) i= 2c_algo_bit(F) drm_kms_helper(F) ata_generic(F) ttm(F) ahci(F) libahci(F) p= ata_acpi(F) drm(F) libata(F) i2c_core(F) wmi(F) dm_mirror(F) dm_region_hash= (F) dm_log(F) dm_mod(F)=20 [10951.260278] CPU 1 =20 [10951.262122] Pid: 0, comm: swapper/1 Tainted: GF 3.9.4 #1 Hewl= ett-Packard HP Z210 Workstation/1587h=20 [10951.272238] RIP: 0010:[] [] __call_= rcu.constprop.47+0x77/0x230=20 [10951.281307] RSP: 0018:ffff88007d083e00 EFLAGS: 00010046=20 [10951.286620] RAX: ffff88003a9ca478 RBX: ffff88007d08ec80 RCX: 00000000000= 00000=20 [10951.293763] RDX: ffffffff81947c80 RSI: ffffffff8108a350 RDI: ffff88005db= cd890=20 [10951.300909] RBP: ffff88007d083e28 R08: 0000000000000000 R09: 00000000000= 00000=20 [10951.308051] R10: ffff88007cc2c480 R11: ffffea000106ab00 R12: ffff88005db= cd890=20 [10951.315187] R13: 0000000000000246 R14: ffff880041aad520 R15: ffff88007d0= 8ec80=20 [10951.322324] FS: 0000000000000000(0000) GS:ffff88007d080000(0000) knlGS:= 0000000000000000=20 [10951.330422] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10951.336176] CR2: ffff88003a9ca478 CR3: 00000000018fa000 CR4: 00000000000= 407e0=20 [10951.343319] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10951.350463] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10951.357604] Process swapper/1 (pid: 0, threadinfo ffff880079990000, task= ffff88007996b580)=20 [10951.365872] Stack:=20 [10951.367885] ffff88007996b580 000000010012000b ffff880079955040 ffff8800= 79955040=20 [10951.375347] ffff8800799559f8 ffff88007d083e38 ffffffff810f8157 ffff8800= 7d083e48=20 [10951.382812] ffffffff8108a4af ffff88007d083e60 ffffffff8108a958 ffff8800= 79955040=20 [10951.390276] Call Trace:=20 [10951.392723] =20 [10951.394658] [] call_rcu_sched+0x17/0x20=20 [10951.400353] [] __put_cred+0x3f/0x50=20 [10951.405499] [] exit_creds+0x58/0x60=20 [10951.410647] [] __put_task_struct+0x4a/0x140=20 [10951.416485] [] delayed_put_task_struct+0x3c/0x80=20 [10951.422759] [] rcu_process_callbacks+0x1dd/0x550=20 [10951.429035] [] __do_softirq+0xef/0x230=20 [10951.434442] [] ? cpufreq_p4_cpu_init+0x290/0x290=20 [10951.440718] [] irq_exit+0xa5/0xb0=20 [10951.445691] [] smp_apic_timer_interrupt+0x6e/0x9c=20 [10951.452055] [] apic_timer_interrupt+0x6d/0x80=20 [10951.458065] =20 [10951.459995] [] ? cpuidle_wrap_enter+0x41/0x80=20 [10951.466218] [] cpuidle_enter_tk+0x10/0x20=20 [10951.471885] [] cpuidle_idle_call+0xb2/0x1e0=20 [10951.477730] [] cpu_idle+0xe5/0x140=20 [10951.482790] [] start_secondary+0x24f/0x251=20 [10951.488542] Code: c8 db 00 00 48 83 7b 48 00 0f 84 f1 00 00 00 48 8b 43 = 78 48 83 c0 01 84 c9 48 89 43 78 74 05 48 83 43 70 01 0f ae f0 48 8b 43 48 = <4c> 89 20 4c 89 63 48 48 c7 c1 20 eb 00 00 65 48 03 0c 25 c8 db =20 [10951.508531] RIP [] __call_rcu.constprop.47+0x77/0x230= =20 [10951.515258] RSP =20 [10951.518748] CR2: ffff88003a9ca478=20 [10951.527448] ---[ end trace 1dba1edcdfef3999 ]---=20 [10951.527453] BUG: unable to handle kernel paging request at ffff88003db52= 000=20 [10951.527459] IP: [] memmove+0x51/0x1a0=20 [10951.527462] PGD 1ddf067 PUD 1de0067 PMD 626ab063 PTE 800000003db52161=20 [10951.527464] Oops: 0003 [#2] SMP =20 [10951.527487] Modules linked in: binfmt_misc(F) fuse(F) snd_seq_dummy(F) r= fcomm(F) hidp(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) cmtp(F) kernelcap= i(F) tun(F) bnep(F) ipt_ULOG(F) scsi_transport_iscsi(F) nfnetlink(F) rds(F)= bluetooth(F) af_key(F) pppoe(F) pppox(F) ppp_generic(F) slhc(F) atm(F) nfc= (F) af_802154(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack= _broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_man= gle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F)= nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4= (F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebt= ables(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg= (F) snd_hda_codec_hdmi(F) snd_hda_codec_realtek(F) snd_hda_intel(F) snd_hda= _codec(F) snd_hwdep(F) snd_seq(F) snd_seq_device(F) snd_pcm(F) hp_wmi(F) sp= arse_keymap(F) e1000e(F) rfkill(F) iTCO_wdt(F) snd_page_alloc(F) snd_timer(= F) snd(F) iTCO_vendor_support(F) soundcore(F) mei(F) ptp(F) i2c_i801(F) pps= _core(F) lpc_ich(F) pcspkr(F) mfd_core(F) microcode(F) xfs(F) libcrc32c(F) = sr_mod(F) sd_mod(F) cdrom(F) crc_t10dif(F) nouveau(F) video(F) mxm_wmi(F) i= 2c_algo_bit(F) drm_kms_helper(F) ata_generic(F) ttm(F) ahci(F) libahci(F) p= ata_acpi(F) drm(F) libata(F) i2c_core(F) wmi(F) dm_mirror(F) dm_region_hash= (F) dm_log(F) dm_mod(F)=20 [10951.527508] CPU 0 =20 [10951.527509] Pid: 8341, comm: attr Tainted: GF D 3.9.4 #1 Hewlet= t-Packard HP Z210 Workstation/1587h=20 [10951.527513] RIP: 0010:[] [] memmove= +0x51/0x1a0=20 [10951.527514] RSP: 0018:ffff88003106fad8 EFLAGS: 00010286=20 [10951.527515] RAX: ffff88003d95a2b0 RBX: ffff880042652000 RCX: 00000000000= 0d00b=20 [10951.527516] RDX: ffffffffffe08278 RSI: ffff88003db523e8 RDI: ffff88003db= 51ff0=20 [10951.527517] RBP: ffff88003106fb30 R08: 15e8a066d060c7c7 R09: 48197403000= 0012c=20 [10951.527518] R10: b883660a74c08548 R11: a066db00dd048b48 R12: ffff88003d9= 5a290=20 [10951.527519] R13: 00000000000003d8 R14: 0000000000001800 R15: 00000000000= 0007b=20 [10951.527521] FS: 00007feda92ea740(0000) GS:ffff88007d000000(0000) knlGS:= 0000000000000000=20 [10951.527522] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10951.527523] CR2: ffff88003db52000 CR3: 000000005ab9f000 CR4: 00000000000= 407f0=20 [10951.527524] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10951.527525] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10951.527527] Process attr (pid: 8341, threadinfo ffff88003106e000, task f= fff88003a9c8000)=20 [10951.527527] Stack:=20 [10951.527530] ffffffffa028c1a1 0000000000000000 0000000000000000 ffff8800= 3d95a2b0=20 [10951.527532] ffff88003d95a290 0000000000000018 ffff88003d95a290 00000000= 00000000=20 [10951.527534] ffff880077bd4a40 ffff880063fe63c0 ffff880042c9fb60 ffff8800= 3106fb68=20 [10951.527535] Call Trace:=20 [10951.527563] [] ? xfs_attr_leaf_moveents.isra.2+0x91/0= x280 [xfs]=20 [10951.527582] [] xfs_attr_leaf_compact+0xd7/0x130 [xfs]= =20 [10951.527602] [] xfs_attr_leaf_add+0xce/0x170 [xfs]=20 [10951.527619] [] xfs_attr_leaf_addname+0xc0/0x3d0 [xfs]= =20 [10951.527638] [] ? xfs_bmap_one_block+0x3e/0xa0 [xfs]= =20 [10951.527656] [] xfs_attr_set_int+0x30c/0x420 [xfs]=20 [10951.527660] [] ? setxattr+0xa4/0x1c0=20 [10951.527678] [] xfs_attr_set+0x7f/0x90 [xfs]=20 [10951.527696] [] xfs_xattr_set+0x42/0x70 [xfs]=20 [10951.527699] [] generic_setxattr+0x62/0x80=20 [10951.527702] [] __vfs_setxattr_noperm+0x63/0x1b0=20 [10951.527705] [] vfs_setxattr+0xb5/0xc0=20 [10951.527707] [] setxattr+0x126/0x1c0=20 [10951.527711] [] ? kmem_cache_free+0x1cd/0x1e0=20 [10951.527713] [] ? final_putname+0x22/0x50=20 [10951.527715] [] ? putname+0x2b/0x40=20 [10951.527717] [] ? user_path_at_empty+0x5f/0x90=20 [10951.527720] [] ? __sb_start_write+0x49/0x100=20 [10951.527723] [] sys_lsetxattr+0x8f/0xd0=20 [10951.527727] [] system_call_fastpath+0x16/0x1b=20 [10951.527746] Code: 00 00 72 05 40 38 fe 74 41 48 83 ea 20 48 83 ea 20 4c = 8b 1e 4c 8b 56 08 4c 8b 4e 10 4c 8b 46 18 48 8d 76 20 4c 89 1f 4c 89 57 08 = <4c> 89 4f 10 4c 89 47 18 48 8d 7f 20 73 d4 48 83 c2 20 e9 a8 00 =20 [10951.527749] RIP [] memmove+0x51/0x1a0=20 [10951.527750] RSP =20 [10951.527750] CR2: ffff88003db52000=20 [10951.527752] ---[ end trace 1dba1edcdfef399a ]---=20 [10951.527814] BUG: unable to handle kernel paging request at ffff88003a9d2= 018=20 [10951.527819] IP: [] try_to_wake_up+0x52/0x2d0=20 [10951.527824] PGD 1ddf067 PUD 1de0067 PMD 3da02063 PTE 2d00000000000000=20 [10951.527826] Oops: 0000 [#3] SMP =20 [10951.527847] Modules linked in: binfmt_misc(F) fuse(F) snd_seq_dummy(F) r= fcomm(F) hidp(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) cmtp(F) kernelcap= i(F) tun(F) bnep(F) ipt_ULOG(F) scsi_transport_iscsi(F) nfnetlink(F) rds(F)= bluetooth(F) af_key(F) pppoe(F) pppox(F) ppp_generic(F) slhc(F) atm(F) nfc= (F) af_802154(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack= _broadcast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_man= gle(F) ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F)= nf_nat_ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4= (F) nf_defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebt= ables(F) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg= (F) snd_hda_codec_hdmi(F) snd_hda_codec_realtek(F) snd_hda_intel(F) snd_hda= _codec(F) snd_hwdep(F) snd_seq(F) snd_seq_device(F) snd_pcm(F) hp_wmi(F) sp= arse_keymap(F) e1000e(F) rfkill(F) iTCO_wdt(F) snd_page_alloc(F) snd_timer(= F) snd(F) iTCO_vendor_support(F) soundcore(F) mei(F) ptp(F) i2c_i801(F) pps= _core(F) lpc_ich(F) pcspkr(F) mfd_core(F) microcode(F) xfs(F) libcrc32c(F) = sr_mod(F) sd_mod(F) cdrom(F) crc_t10dif(F) nouveau(F) video(F) mxm_wmi(F) i= 2c_algo_bit(F) drm_kms_helper(F) ata_generic(F) ttm(F) ahci(F) libahci(F) p= ata_acpi(F) drm(F) libata(F) i2c_core(F) wmi(F) dm_mirror(F) dm_region_hash= (F) dm_log(F) dm_mod(F)=20 [10951.527868] CPU 0 =20 [10951.527868] Pid: 8341, comm: attr Tainted: GF D 3.9.4 #1 Hewlet= t-Packard HP Z210 Workstation/1587h=20 [10951.527871] RIP: 0010:[] [] try_to_= wake_up+0x52/0x2d0=20 [10951.527873] RSP: 0018:ffff88007d003d98 EFLAGS: 00010046=20 [10951.527874] RAX: ffff88003a9d2000 RBX: ffff8800647f8000 RCX: 00000000000= 00000=20 [10951.527875] RDX: 000000003e463e46 RSI: 0000000000000003 RDI: ffff8800647= f87ec=20 [10951.527876] RBP: ffff88007d003dd8 R08: ffff88007d013d10 R09: ffffffff81c= 75303=20 [10951.527877] R10: 0000000000000000 R11: 000000000000000c R12: ffff8800647= f87ec=20 [10951.527878] R13: 0000000000000000 R14: 0000000000000046 R15: 00000000000= 14400=20 [10951.527879] FS: 00007feda92ea740(0000) GS:ffff88007d000000(0000) knlGS:= 0000000000000000=20 [10951.527880] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10951.527881] CR2: ffff88003a9d2018 CR3: 000000005ab9f000 CR4: 00000000000= 407f0=20 [10951.527882] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10951.527883] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10951.527884] Process attr (pid: 8341, threadinfo ffff88003106e000, task f= fff88003a9c8000)=20 [10951.527885] Stack:=20 [10951.527887] 0000008000000001 ffff88007d003db0 0000000000000003 ffff8800= 647f8000=20 [10951.527889] ffff88007d017e00 ffff88007d010f08 0000000000000000 ffff8800= 7cc428a0=20 [10951.527891] ffff88007d003df0 ffffffff81095333 ffff88007d013d00 ffff8800= 7d003e00=20 [10951.527892] Call Trace:=20 [10951.527893] =20 [10951.527896] [] wake_up_process+0x23/0x40=20 [10951.527899] [] wake_up_worker+0x24/0x30=20 [10951.527901] [] insert_work+0x43/0x50=20 [10951.527904] [] __queue_work+0x118/0x270=20 [10951.527906] [] ? __queue_work+0x270/0x270=20 [10951.527909] [] delayed_work_timer_fn+0x18/0x20=20 [10951.527911] [] call_timer_fn+0x36/0x110=20 [10951.527913] [] ? __queue_work+0x270/0x270=20 [10951.527916] [] run_timer_softirq+0x151/0x290=20 [10951.527920] [] __do_softirq+0xef/0x230=20 [10951.527923] [] irq_exit+0xa5/0xb0=20 [10951.527925] [] smp_apic_timer_interrupt+0x6e/0x9c=20 [10951.527928] [] apic_timer_interrupt+0x6d/0x80=20 [10951.527929] =20 [10951.527932] [] ? acct_collect+0x16f/0x1b0=20 [10951.527934] [] do_exit+0x7e1/0xa20=20 [10951.527937] [] ? printk+0x67/0x69=20 [10951.527941] [] oops_end+0xa4/0xe0=20 [10951.527943] [] no_context+0x263/0x270=20 [10951.527945] [] __bad_area_nosemaphore+0x73/0x1cc=20 [10951.527947] [] bad_area_nosemaphore+0x13/0x15=20 [10951.527949] [] __do_page_fault+0x31e/0x510=20 [10951.527967] [] ? kmem_alloc+0x67/0xf0 [xfs]=20 [10951.527971] [] ? save_stack_trace+0x2b/0x50=20 [10951.527974] [] ? set_track+0x61/0x1b0=20 [10951.527976] [] ? init_object+0x3d/0x70=20 [10951.527979] [] do_page_fault+0xe/0x10=20 [10951.527982] [] page_fault+0x28/0x30=20 [10951.527985] [] ? memmove+0x51/0x1a0=20 [10951.528003] [] ? xfs_attr_leaf_moveents.isra.2+0x91/0= x280 [xfs]=20 [10951.528020] [] xfs_attr_leaf_compact+0xd7/0x130 [xfs]= =20 [10951.528038] [] xfs_attr_leaf_add+0xce/0x170 [xfs]=20 [10951.528055] [] xfs_attr_leaf_addname+0xc0/0x3d0 [xfs]= =20 [10951.528073] [] ? xfs_bmap_one_block+0x3e/0xa0 [xfs]= =20 [10951.528090] [] xfs_attr_set_int+0x30c/0x420 [xfs]=20 [10951.528093] [] ? setxattr+0xa4/0x1c0=20 [10951.528111] [] xfs_attr_set+0x7f/0x90 [xfs]=20 [10951.528128] [] xfs_xattr_set+0x42/0x70 [xfs]=20 [10951.528131] [] generic_setxattr+0x62/0x80=20 [10951.528134] [] __vfs_setxattr_noperm+0x63/0x1b0=20 [10951.528137] [] vfs_setxattr+0xb5/0xc0=20 [10951.528140] [] setxattr+0x126/0x1c0=20 [10951.528142] [] ? kmem_cache_free+0x1cd/0x1e0=20 [10951.528144] [] ? final_putname+0x22/0x50=20 [10951.528146] [] ? putname+0x2b/0x40=20 [10951.528148] [] ? user_path_at_empty+0x5f/0x90=20 [10951.528150] [] ? __sb_start_write+0x49/0x100=20 [10951.528154] [] sys_lsetxattr+0x8f/0xd0=20 [10951.528157] [] system_call_fastpath+0x16/0x1b=20 [10951.528175] Code: 31 ff 4c 89 e7 e8 3f bd 57 00 8b 75 d0 49 89 c6 48 8b = 03 85 c6 0f 84 9f 01 00 00 8b 4b 2c 48 8b 43 08 49 c7 c7 00 44 01 00 85 c9 = <44> 8b 48 18 74 7a 49 c7 c7 00 44 01 00 44 89 c8 4c 89 fa 48 89 =20 [10951.528178] RIP [] try_to_wake_up+0x52/0x2d0=20 [10951.528179] RSP =20 [10951.528180] CR2: ffff88003a9d2018=20 [10951.528181] ---[ end trace 1dba1edcdfef399b ]---=20 [10951.528182] Kernel panic - not syncing: Fatal exception in interrupt=20 [10952.594747] Shutting down cpus with NMI=20 [10952.598598] drm_kms_helper: panic occurred, switching back to text conso= le=20 2) [20914.575680] XFS (dm-2): Mounting Filesystem=20 [20914.653966] XFS (dm-2): Ending clean mount=20 [20915.812263] XFS (dm-0): Mounting Filesystem=20 [20916.628209] XFS (dm-0): Ending clean mount=20 [20917.997069] divide error: 0000 [#1] SMP =20 [20917.998029] Modules linked in: binfmt_misc(F) cmtp(F) kernelcapi(F) tun(= F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) bnep(F) hidp(F) nfnetlink(F) sc= si_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) rds(F) af_key(F) blue= tooth(F) rfkill(F) pppoe(F) pppox(F) ppp_generic(F) slhc(F) nfc(F) lockd(F)= sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadcast(F) ipt_MASQUER= ADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) ip6t_REJECT(F) nf_= conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat_ipv4(F) nf_nat(F)= iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_defrag_ipv4(F) xt_= conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F) ip6table_filter(= F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) bnx2(F) kvm_amd(F) am= d64_edac_mod(F) edac_mce_amd(F) kvm(F) pcspkr(F) serio_raw(F) shpchp(F) i2c= _piix4(F) edac_core(F) k8temp(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F= ) radeon(F) i2c_algo_bit(F) drm_kms_helper(F) mptsas(F) ttm(F) scsi_transpo= rt_sas(F) drm(F) mptscsih(F) i2c_core(F) mptbase(F) dm_mirror(F) dm_region_= hash(F) dm_log(F) dm_mod(F)=20 [20917.998029] CPU 0 =20 [20917.998029] Pid: 10, comm: rcu_sched Tainted: GF 3.9.4 #1 IBM= BladeCenter LS41 -[7972AC1]-/Server Blade=20 [20917.998029] RIP: 0010:[] [] update_= sd_lb_stats+0x2bb/0x5b0=20 [20917.998029] RSP: 0018:ffff88013a35fa60 EFLAGS: 00010016=20 [20917.998029] RAX: 0000000000044800 RBX: 0000000000000000 RCX: ffff880439f= 5ba18=20 [20917.998029] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00000000000= 00008=20 [20917.998029] RBP: ffff88013a35fb28 R08: 0000000000000112 R09: 00000000000= 00000=20 [20917.998029] R10: 0000000000000000 R11: 0000000000000001 R12: 00000000000= 00008=20 [20917.998029] R13: 0000000000000000 R14: 0000000000000001 R15: ffff88013a3= 5fc50=20 [20917.998029] FS: 00007fb8dd06e740(0000) GS:ffff88013bc00000(0000) knlGS:= 0000000000000000=20 [20917.998029] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b=20 [20917.998029] CR2: 0000000001890840 CR3: 00000002205ce000 CR4: 00000000000= 007f0=20 [20917.998029] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [20917.998029] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [20917.998029] Process rcu_sched (pid: 10, threadinfo ffff88013a35e000, tas= k ffff88013a365040)=20 [20917.998029] Stack:=20 [20917.998029] 0100000000000000 ffff88013a35fce4 ffff88013a35fb38 00000000= ffffffff=20 [20917.998029] ffff880139c21fb0 0000000000014400 0000000000014400 00000000= 00000000=20 [20917.998029] 0000000000000001 0000000000000112 ffff880139c21fc8 00000000= 00000000=20 [20917.998029] Call Trace:=20 [20917.998029] [] find_busiest_group+0x36/0x4b0=20 [20917.998029] [] load_balance+0x108/0x7d0=20 [20917.998029] [] ? update_rq_clock.part.67+0x1c/0x170= =20 [20917.998029] [] idle_balance+0x182/0x2f0=20 [20917.998029] [] __schedule+0x7bc/0x7d0=20 [20917.998029] [] schedule+0x29/0x70=20 [20917.998029] [] schedule_timeout+0x172/0x2c0=20 [20917.998029] [] ? rcu_report_qs_rnp+0x7a/0x130=20 [20917.998029] [] ? __internal_add_timer+0x130/0x130=20 [20917.998029] [] rcu_gp_kthread+0x313/0x560=20 [20917.998029] [] ? wake_up_bit+0x30/0x30=20 [20917.998029] [] ? rcu_gp_fqs+0x80/0x80=20 [20917.998029] [] kthread+0xc0/0xd0=20 [20917.998029] [] ? insert_kthread_work+0x40/0x40=20 [20917.998029] [] ret_from_fork+0x7c/0xb0=20 [20917.998029] [] ? insert_kthread_work+0x40/0x40=20 [20917.998029] Code: b5 50 ff ff ff 49 8b 3f e8 b3 fb ff ff 0f 1f 00 48 8b = 85 58 ff ff ff 48 8b 48 10 4c 8b 45 a0 8b 71 04 31 d2 4c 89 c0 48 c1 e0 0a = <48> f7 f6 48 8b 75 a8 48 85 f6 48 89 c7 49 89 c1 48 89 45 98 0f =20 [20917.998029] RIP [] update_sd_lb_stats+0x2bb/0x5b0=20 [20917.998029] RSP =20 [20917.998029] ---[ end trace 9d1c03412e3d1bf5 ]---=20 [20918.017044] divide error: 0000 [#2] SMP =20 [20918.017044] Modules linked in: binfmt_misc(F) cmtp(F) kernelcapi(F) tun(= F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) bnep(F) hidp(F) nfnetlink(F) sc= si_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) rds(F) af_key(F) blue= tooth(F) rfkill(F) pppoe(F) pppox(F) ppp_generic(F) slhc(F) nfc(F) lockd(F)= sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadcast(F) ipt_MASQUER= ADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) ip6t_REJECT(F) nf_= conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat_ipv4(F) nf_nat(F)= iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_defrag_ipv4(F) xt_= conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F) ip6table_filter(= F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) bnx2(F) kvm_amd(F) am= d64_edac_mod(F) edac_mce_amd(F) kvm(F) pcspkr(F) serio_raw(F) shpchp(F) i2c= _piix4(F) edac_core(F) k8temp(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F= ) radeon(F) i2c_algo_bit(F) drm_kms_helper(F) mptsas(F) ttm(F) scsi_transpo= rt_sas(F) drm(F) mptscsih(F) i2c_core(F) mptbase(F) dm_mirror(F) dm_region_= hash(F) dm_log(F) dm_mod(F)=20 [20918.017044] CPU 2 =20 [20918.017044] Pid: 0, comm: swapper/2 Tainted: GF D 3.9.4 #1 IBM = BladeCenter LS41 -[7972AC1]-/Server Blade=20 [20918.017044] RIP: 0010:[] [] update_= sd_lb_stats+0x2bb/0x5b0=20 [20918.017044] RSP: 0018:ffff88033bc03c00 EFLAGS: 00010216=20 [20918.017044] RAX: 0000000000040800 RBX: 0000000000000000 RCX: ffff880439f= 5ba18=20 [20918.017044] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00000000000= 00008=20 [20918.017044] RBP: ffff88033bc03cc8 R08: 0000000000000102 R09: 00000000000= 00005=20 [20918.017044] R10: 0000000000000000 R11: 0000000000000001 R12: 00000000000= 00008=20 [20918.017044] R13: 0000000000000000 R14: 0000000000000001 R15: ffff88033bc= 03df0=20 [20918.017044] FS: 00007fb8dd06e740(0000) GS:ffff88033bc00000(0000) knlGS:= 0000000000000000=20 [20918.017044] CS: 0010 DS: 0000 ES: 0000 CR[-- MARK -- Thu May 30 10:40:0= 0 2013]=20 3) [10721.161888] XFS (dm-0): Ending clean mount=20 [10722.090855] XFS (dm-2): Mounting Filesystem=20 [10722.143682] XFS (dm-2): Ending clean mount=20 [10722.584327] XFS (dm-0): Mounting Filesystem=20 [10722.949519] XFS (dm-0): Ending clean mount=20 [10723.579704] BUG: unable to handle kernel paging request at ffff8801b55cc= 000=20 [10723.619185] IP: [] memmove+0x55/0x1a0=20 [10723.647690] PGD 1ddf067 PUD 20bdfa067 PMD 1b5734063 PTE 80000001b55cc161= =20 [10723.685013] Oops: 0003 [#1] SMP =20 [10723.701968] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F)[10724.128502] sleep[6604]: segfault at 0 ip (null) sp 0000= 7fff96b37a30 error 14 in sleep[400000+6000]=20 [10724.128757] ------------[ cut here ]------------=20 [10724.128760] WARNING: at mm/mmap.c:2711 exit_mmap+0x166/0x170()=20 [10724.128761] Hardware name: ProLiant DL120 G7=20 [10724.128761] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10724.128795] Pid: 6604, comm: sleep Tainted: GF 3.9.4 #1=20 [10724.128796] Call Trace:=20 [10724.128796] [] warn_slowpath_common+0x70/0xa0=20 [10724.128800] traps: auditd[520] general protection ip:7f9a89363be5 sp:7f9= a8801f680 error:0 [] warn_slowpath_null+0x1a/0x20=20 [10724.128802] [] exit_mmap+0x166/0x170=20 [10724.128804] in libc-2.17.so[7f9a8931c000+1b5000] [] m= mput+0x67/0xf0=20 [10724.128806] =20 [10724.128806] [] do_exit+0x278/0xa20=20 [10724.128816] [] do_group_exit+0x3f/0xa0=20 [10724.128817] [] get_signal_to_deliver+0x1ad/0x5c0=20 [10724.128820] [] do_signal+0x48/0x5a0=20 [10724.128823] [] ? __do_page_fault+0x45c/0x510=20 [10724.128825] [] ? hrtimer_try_to_cancel+0x48/0xe0=20 [10724.128827] [] ? hrtimer_nanosleep+0xad/0x170=20 [10724.128829] [] ? hrtimer_get_res+0x50/0x50=20 [10724.128830] [] do_notify_resume+0x70/0xa0=20 [10724.128831] [] retint_signal+0x48/0x8c=20 [10724.128834] ---[ end trace aa0156eab31509fc ]---=20 [10724.128901] BUG: Bad rss-counter state mm:ffff8801fb90af40 idx:0 val:5= =20 [10724.128901] BUG: Bad rss-counter state mm:ffff8801fb90af40 idx:1 val:3= =20 [10724.128927] rhts-test-runne[48621]: segfault at 19cc ip 00000000004401c4= sp 00007fff27f840e0 error 6 in bash[400000+db000]=20 [10724.129726] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=20 [10724.129727] BUG kmalloc-4096 (Tainted: GF W ): Padding overwritt= en. 0xffff88019152fc28-0xffff88019152ffff=20 [10724.129727] ------------------------------------------------------------= -----------------=20 [10724.129727] =20 [10724.129728] INFO: Slab 0xffffea0006454a00 objects=3D7 used=3D7 fp=3D0x = (null) flags=3D0x20000000004080=20 [10724.129729] Pid: 43729, comm: kworker/0:0 Tainted: GF B W 3.9.4 #= 1=20 [10724.129729] Call Trace:=20 [10724.129730] [] slab_err+0xc2/0xf0=20 [10724.129733] [] ? kset_init+0x27/0x40=20 [10724.129735] [] slab_pad_check.part.41+0xf5/0x170=20 [10724.129736] [] ? cgroup_release_agent+0x42/0x180=20 [10724.129739] [] check_slab+0x73/0x100=20 [10724.129740] [] alloc_debug_processing+0x21/0x118=20 [10724.129742] [] __slab_alloc+0x3b8/0x4a2=20 [10724.129744] [] ? load_balance+0x108/0x7d0=20 [10724.129746] [] ? cgroup_release_agent+0x42/0x180=20 [10724.129747] [] ? update_rq_clock.part.67+0x1c/0x170= =20 [10724.129749] [] kmem_cache_alloc_trace+0x1b1/0x200=20 [10724.129751] [] cgroup_release_agent+0x42/0x180=20 [10724.129752] [] ? __schedule+0x3b0/0x7d0=20 [10724.129754] [] process_one_work+0x16f/0x3f0=20 [10724.129756] [] worker_thread+0x110/0x3d0=20 [10724.129757] [] ? __alloc_workqueue_key+0x500/0x500=20 [10724.129758] [] kthread+0xc0/0xd0=20 [10724.129759] [] ? insert_kthread_work+0x40/0x40=20 [10724.129760] [] ret_from_fork+0x7c/0xb0=20 [10724.129762] [] ? insert_kthread_work+0x40/0x40=20 [10724.129765] Padding ffff88019152f8f8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129765] Padding ffff88019152f908: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129766] Padding ffff88019152f918: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129766] Padding ffff88019152f928: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129767] Padding ffff88019152f938: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129767] Padding ffff88019152f948: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129768] Padding ffff88019152f958: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129768] Padding ffff88019152f968: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129769] Padding ffff88019152f978: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129769] Padding ffff88019152f988: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129770] Padding ffff88019152f998: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129770] Padding ffff88019152f9a8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129771] Padding ffff88019152f9b8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129771] Padding ffff88019152f9c8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129772] Padding ffff88019152f9d8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129772] Padding ffff88019152f9e8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129773] Padding ffff88019152f9f8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129773] Padding ffff88019152fa08: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129774] Padding ffff88019152fa18: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129774] Padding ffff88019152fa28: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129775] Padding ffff88019152fa38: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129775] Padding ffff88019152fa48: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129776] Padding ffff88019152fa58: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129776] Padding ffff88019152fa68: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129777] Padding ffff88019152fa78: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129777] Padding ffff88019152fa88: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129778] Padding ffff88019152fa98: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129778] Padding ffff88019152faa8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129779] Padding ffff88019152fab8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129779] Padding ffff88019152fac8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129780] Padding ffff88019152fad8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129780] Padding ffff88019152fae8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129781] Padding ffff88019152faf8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129781] Padding ffff88019152fb08: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129782] Padding ffff88019152fb18: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129782] Padding ffff88019152fb28: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129783] Padding ffff88019152fb38: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129783] Padding ffff88019152fb48: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129784] Padding ffff88019152fb58: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129784] Padding ffff88019152fb68: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129785] Padding ffff88019152fb78: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129785] Padding ffff88019152fb88: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129786] Padding ffff88019152fb98: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129786] Padding ffff88019152fba8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129787] Padding ffff88019152fbb8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129787] Padding ffff88019152fbc8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129788] Padding ffff88019152fbd8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129788] Padding ffff88019152fbe8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129789] Padding ffff88019152fbf8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129789] Padding ffff88019152fc08: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129790] Padding ffff88019152fc18: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5= a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ=20 [10724.129790] Padding ffff88019152fc28: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129791] Padding ffff88019152fc38: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129792] Padding ffff88019152fc48: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129792] Padding ffff88019152fc58: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129793] Padding ffff88019152fc68: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129793] Padding ffff88019152fc78: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129794] Padding ffff88019152fc88: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129794] Padding ffff88019152fc98: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129795] Padding ffff88019152fca8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129795] Padding ffff88019152fcb8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129796] Padding ffff88019152fcc8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129796] Padding ffff88019152fcd8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129797] Padding ffff88019152fce8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129797] Padding ffff88019152fcf8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129798] Padding ffff88019152fd08: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129798] Padding ffff88019152fd18: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129799] Padding ffff88019152fd28: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129799] Padding ffff88019152fd38: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129800] Padding ffff88019152fd48: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129800] Padding ffff88019152fd58: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129801] Padding ffff88019152fd68: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129801] Padding ffff88019152fd78: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129802] Padding ffff88019152fd88: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129802] Padding ffff88019152fd98: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129803] Padding ffff88019152fda8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129803] Padding ffff88019152fdb8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129804] Padding ffff88019152fdc8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129804] Padding ffff88019152fdd8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129805] Padding ffff88019152fde8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129805] Padding ffff88019152fdf8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129806] Padding ffff88019152fe08: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129806] Padding ffff88019152fe18: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129807] Padding ffff88019152fe28: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129807] Padding ffff88019152fe38: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129808] Padding ffff88019152fe48: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129808] Padding ffff88019152fe58: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129809] Padding ffff88019152fe68: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129809] Padding ffff88019152fe78: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129810] Padding ffff88019152fe88: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129810] Padding ffff88019152fe98: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129811] Padding ffff88019152fea8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129811] Padding ffff88019152feb8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129812] Padding ffff88019152fec8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129812] Padding ffff88019152fed8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129813] Padding ffff88019152fee8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129813] Padding ffff88019152fef8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129814] Padding ffff88019152ff08: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129814] Padding ffff88019152ff18: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129815] Padding ffff88019152ff28: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129815] Padding ffff88019152ff38: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129816] Padding ffff88019152ff48: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129816] Padding ffff88019152ff58: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129817] Padding ffff88019152ff68: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129817] Padding ffff88019152ff78: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129818] Padding ffff88019152ff88: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129818] Padding ffff88019152ff98: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129819] Padding ffff88019152ffa8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129819] Padding ffff88019152ffb8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129820] Padding ffff88019152ffc8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129820] Padding ffff88019152ffd8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129821] Padding ffff88019152ffe8: c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c6 c= 6 c6 c6 c6 c6 ................=20 [10724.129821] Padding ffff88019152fff8: c6 c6 c6 c6 c6 c6 c6 c6 = ........=20 [10724.129822] FIX kmalloc-4096: Restoring 0xffff88019152f8f8-0xffff8801915= 2ffff=3D0x5a=20 [10724.129822] =20 [10724.135254] systemd[1]: segfault at 45 ip 00007f93e348c780 sp 00007fff4d= eb3a9e error 4 in libdbus-1.so.3.7.2[7f93e3479000+45000]=20 [10724.135272] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7ff= f4deb34f8 error:0 in systemd[7f93e496d000+f6000]=20 [10724.135281] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7ff= f4deb2f38 error:0 in systemd[7f93e496d000+f6000]=20 [10724.135289] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7ff= f4deb2978 error:0 in systemd[7f93e496d000+f6000]=20 [10724.135297] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7ff= f4deb23b8 error:0 in systemd[7f93e496d000+f6000]=20 [10724.135304] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7ff= f4deb1df8 error:0 in systemd[7f93e496d000+f6000]=20 [10724.135312] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7ff= f4deb1838 error:0 in systemd[7f93e496d000+f6000]=20 [10724.169488] audit: *NO* daemon at audit_pid=3D505=20 =20 [10732.129639] i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_p= iix(F) drm(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) = dm_log(F) dm_mod(F)=20 [10732.206898] CPU 3 =20 [10732.215891] Pid: 6911, comm: attr Tainted: GF B W 3.9.4 #1 HP Pro= Liant DL120 G7=20 [10732.256496] RIP: 0010:[] [] memmove= +0x55/0x1a0=20 [10732.296932] RSP: 0018:ffff8801bbe15ad8 EFLAGS: 00010282=20 [10732.325205] RAX: ffff880191529168 RBX: ffff8801e687b000 RCX: 00000000000= 0d00b=20 [10732.363603] RDX: ffffffffdbf5d138 RSI: ffff8801b55cc3e0 RDI: ffff8801b55= cbfe8=20 [10732.401581] RBP: ffff8801bbe15b30 R08: 38408bffffff4085 R09: 8b48dceb000= 000b8=20 [10732.440757] R10: 9f89498eeb000000 R11: 20befffffc65e9e2 R12: ffff8801915= 29148=20 [10732.475959] R13: 00000000000003d8 R14: 0000000000001800 R15: 00000000000= 0007b=20 [10732.512079] FS: 00007fc626dc9740(0000) GS:ffff88020b460000(0000) knlGS:= 0000000000000000=20 [10732.553296] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10732.581757] CR2: ffff8801b55cc000 CR3: 00000001e169c000 CR4: 00000000000= 407e0=20 [10732.617759] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10732.653908] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10732.689045] Process attr (pid: 6911, threadinfo ffff8801bbe14000, task f= fff8801e6b71ac0)=20 [10732.729564] Stack:=20 [10732.739413] ffffffffa01651a1 0000000000000000 0000000000000000 ffff8801= 91529168=20 [10732.776436] ffff880191529148 0000000000000018 ffff880191529148 00000000= 00000000=20 [10732.813437] ffff8801de8237b0 ffff8801c491d280 ffff8801e2c776c0 ffff8801= bbe15b68=20 [10732.852979] Call Trace:=20 [10732.865992] [] ? xfs_attr_leaf_moveents.isra.2+0x91/0= x280 [xfs]=20 [10732.906399] [] xfs_attr_leaf_compact+0xd7/0x130 [xfs]= =20 [10732.942002] [] xfs_attr_leaf_add+0xce/0x170 [xfs]=20 [10732.975905] [] xfs_attr_leaf_addname+0xc0/0x3d0 [xfs]= =20 [10733.009452] [] ? xfs_bmap_one_block+0x3e/0xa0 [xfs]= =20 [10733.042797] [] xfs_attr_set_int+0x30c/0x420 [xfs]=20 [10733.074645] [] ? setxattr+0xa4/0x1c0=20 [10733.100539] [] xfs_attr_set+0x7f/0x90 [xfs]=20 [10733.129870] [] xfs_xattr_set+0x42/0x70 [xfs]=20 [10733.159595] [] generic_setxattr+0x62/0x80=20 [10733.188208] [] __vfs_setxattr_noperm+0x63/0x1b0=20 [10733.218633] [] vfs_setxattr+0xb5/0xc0=20 [10733.245380] [] setxattr+0x126/0x1c0=20 [10733.270691] [] ? kmem_cache_free+0x1cd/0x1e0=20 [10733.300416] [] ? final_putname+0x22/0x50=20 [10733.327832] [] ? putname+0x2b/0x40=20 [10733.354383] [] ? user_path_at_empty+0x5f/0x90=20 [10733.385198] [] ? __sb_start_write+0x49/0x100=20 [10733.416587] [] sys_lsetxattr+0x8f/0xd0=20 [10733.445421] [] system_call_fastpath+0x16/0x1b=20 [10733.477008] Code: 40 38 fe 74 41 48 83 ea 20 48 83 ea 20 4c 8b 1e 4c 8b = 56 08 4c 8b 4e 10 4c 8b 46 18 48 8d 76 20 4c 89 1f 4c 89 57 08 4c 89 4f 10 = <4c> 89 47 18 48 8d 7f 20 73 d4 48 83 c2 20 e9 a8 00 00 00 0f 1f =20 [10733.575487] RIP [] memmove+0x55/0x1a0=20 [10733.602350] RSP =20 [10733.620195] CR2: ffff8801b55cc000=20 [10733.693452] ---[ end trace aa0156eab31509fd ]---=20 [10733.693454] general protection fault: 0000 [#2] SMP =20 [10733.693468] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10733.693475] CPU 1 =20 [10733.693475] Pid: 48621, comm: rhts-test-runne Tainted: GF B D W 3.9= .4 #1 HP ProLiant DL120 G7=20 [10733.693478] RIP: 0010:[] [] vma_int= erval_tree_remove+0x3e/0x240=20 [10733.693479] RSP: 0000:ffff8801fcdcfba0 EFLAGS: 00010206=20 [10733.693479] RAX: 0000be0f00000000 RBX: ffff8801e0abda00 RCX: ffff8801a65= ca058=20 [10733.693480] RDX: 0000be0f00000000 RSI: ffff8801f74b0760 RDI: ffff8801e0a= bda00=20 [10733.693480] RBP: ffff8801fcdcfbb8 R08: ffff8801a65cb800 R09: 00000000000= 17700=20 [10733.693481] R10: ffff8801e0abda58 R11: 000000000000000e R12: ffff8801e0a= bda00=20 [10733.693481] R13: ffff8801f74b0778 R14: ffff8801f74b0740 R15: ffff8801e0a= bda00=20 [10733.693482] FS: 0000000000000000(0000) GS:ffff88020b420000(0000) knlGS:= 0000000000000000=20 [10733.693483] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10733.693483] CR2: 00000000000019cc CR3: 00000001fbc0b000 CR4: 00000000000= 407e0=20 [10733.693484] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10733.693484] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10733.693485] Process rhts-test-runne (pid: 48621, threadinfo ffff8801fcdc= e000, task ffff8801e54f3580)=20 [10733.693485] Stack:=20 [10733.693487] ffffffff811613e6 ffff8801c4a68480 ffff8801e0abda00 ffff8801= fcdcfbe8=20 [10733.693488] ffffffff811619a0 ffff8801dc1c1000 00007f9810be3000 00000000= 00000000=20 [10733.693489] ffff8801fcdcfc40 ffff8801fcdcfc28 ffffffff8115a240 00000000= 00000000=20 [10733.693489] Call Trace:=20 [10733.693491] [] ? __remove_shared_vm_struct+0x46/0x70= =20 [10733.693492] [] unlink_file_vma+0x40/0x60=20 [10733.693493] [] free_pgtables+0xb0/0x120=20 [10733.693495] [] exit_mmap+0xb2/0x170=20 [10733.693498] [] mmput+0x67/0xf0=20 [10733.693500] [] do_exit+0x278/0xa20=20 [10733.693501] [] do_group_exit+0x3f/0xa0=20 [10733.693503] [] get_signal_to_deliver+0x1ad/0x5c0=20 [10733.693506] [] do_signal+0x48/0x5a0=20 [10733.693507] [] ? __do_page_fault+0x45c/0x510=20 [10733.693510] [] ? list_del+0xd/0x30=20 [10733.693511] [] ? remove_wait_queue+0x31/0x40=20 [10733.693513] [] ? sys_wait4+0x6e/0xe0=20 [10733.693514] [] do_notify_resume+0x70/0xa0=20 [10733.693516] [] retint_signal+0x48/0x8c=20 [10733.693525] Code: d2 0f 84 9f 01 00 00 48 85 c9 0f 84 bd 01 00 00 48 8b = 41 10 49 89 c8 48 85 c0 75 0f e9 cb 01 00 00 0f 1f 40 00 49 89 c0 48 89 d0 = <48> 8b 50 10 48 85 d2 75 f1 4c 8b 58 08 4d 89 58 10 48 89 48 08 =20 [10733.693526] RIP [] vma_interval_tree_remove+0x3e/0x24= 0=20 [10733.693527] RSP =20 [10733.693529] general protection fault: 0000 [#3] SMP =20 [10733.693549] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10733.693557] CPU 0 =20 [10733.693557] Pid: 43729, comm: kworker/0:0 Tainted: GF B D W 3.9.4 #= 1 HP ProLiant DL120 G7=20 [10733.693559] RIP: 0010:[] [] deactiv= ate_slab+0x119/0x510=20 [10733.693562] RSP: 0000:ffff8801fdfd5bb8 EFLAGS: 00010006=20 [10733.693563] RAX: 0000000000001008 RBX: ffff88019152e7b0 RCX: 00000001800= 70006=20 [10733.693564] RDX: 0000000180070007 RSI: ffffea0006454a00 RDI: ffff880202c= 0ee40=20 [10733.693565] RBP: ffff8801fdfd5ca8 R08: 0000000000000000 R09: ffff8801915= 29000=20 [10733.693567] R10: 0000000000000000 R11: ffff880202c00c40 R12: ffffea00064= 54a00=20 [10733.693567] R13: ffff880202c0ee40 R14: 5a5a5a5a5a5a5a5a R15: 00000000fff= fffff=20 [10733.693568] FS: 0000000000000000(0000) GS:ffff88020b400000(0000) knlGS:= 0000000000000000=20 [10733.693569] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10733.693569] CR2: 0000000000000000 CR3: 00000000018fa000 CR4: 00000000000= 407f0=20 [10733.693570] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10733.693570] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10733.693572] Process kworker/0:0 (pid: 43729, threadinfo ffff8801fdfd4000= , task ffff8801b575d040)=20 [10733.693572] Stack:=20 [10733.693576] ffffffff810154cf ffff8801fdfd5bf4 0000000f00000001 ffff8802= 0b403fc0=20 [10733.693578] 0000000000000000 ffff8801fdfd4000 ffff8801fdfd5c50 00000000= 811817db=20 [10733.693580] ffffea0006454a00 ffff8801fdfd5c50 ffffffff810ce4d2 ffff8801= 91528000=20 [10733.693581] Call Trace:=20 [10733.693584] [] ? dump_trace+0x16f/0x2b0=20 [10733.693586] [] ? cgroup_release_agent+0x42/0x180=20 [10733.693589] [] ? save_stack_trace+0x2b/0x50=20 [10733.693590] [] ? set_track+0x61/0x1b0=20 [10733.693592] [] ? init_object+0x3d/0x70=20 [10733.693593] ---[ end trace aa0156eab31509fe ]---=20 [10733.693595] [] __slab_alloc+0x3df/0x4a2=20 [10733.693595] Fixing recursive fault but reboot is needed!=20 [10733.693597] [] ? load_balance+0x108/0x7d0=20 [10733.693599] [] ? cgroup_release_agent+0x42/0x180=20 [10733.693601] [] ? update_rq_clock.part.67+0x1c/0x170= =20 [10733.693603] [] kmem_cache_alloc_trace+0x1b1/0x200=20 [10733.693605] [] cgroup_release_agent+0x42/0x180=20 [10733.693607] [] ? __schedule+0x3b0/0x7d0=20 [10733.693610] [] process_one_work+0x16f/0x3f0=20 [10733.693612] [] worker_thread+0x110/0x3d0=20 [10733.693613] [] ? __alloc_workqueue_key+0x500/0x500=20 [10733.693615] [] kthread+0xc0/0xd0=20 [10733.693616] [] ? insert_kthread_work+0x40/0x40=20 [10733.693618] [] ret_from_fork+0x7c/0xb0=20 [10733.693620] [] ? insert_kthread_work+0x40/0x40=20 [10733.693642] Code: 40 00 49 3b 54 24 18 75 ed 49 89 5c 24 10 49 89 4c 24 = 18 41 0f ba 34 24 00 66 0f 1f 84 00 00 00 00 00 4d 85 f6 74 1d 49 63 45 20 = <49> 8b 14 06 48 85 d2 74 10 4c 89 f3 4d 8b 44 24 10 49 89 d6 e9 =20 [10733.693643] RIP [] deactivate_slab+0x119/0x510=20 [10733.693644] RSP =20 [10733.693645] ---[ end trace aa0156eab31509ff ]---=20 [10733.693673] audit_printk_skb: 5695 callbacks suppressed=20 [10733.693674] type=3D1701 audit(1369899862.224:50838): auid=3D4294967295 u= id=3D0 gid=3D0 ses=3D4294967295 subj=3Dsystem_u:system_r:syslogd_t:s0 pid= =3D38988 comm=3D"in:imklog" reason=3D"memory violation" sig=3D11=20 [10733.693771] general protection fault: 0000 [#4] SMP =20 [10733.693783] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10733.693790] CPU 2 =20 [10733.693790] Pid: 38988, comm: in:imklog Tainted: GF B D W 3.9.4 #1 = HP ProLiant DL120 G7=20 [10733.693792] RIP: 0010:[] [] acct_co= llect+0x60/0x1b0=20 [10733.693793] RSP: 0000:ffff8801e7977cd0 EFLAGS: 00010206=20 [10733.693793] RAX: 0000be0d00000000 RBX: ffff8801deb93c80 RCX: ffff8801e79= 77fd8=20 [10733.693794] RDX: 0000000000021000 RSI: 0000000000000001 RDI: ffff8801de9= 00de8=20 [10733.693794] RBP: ffff8801e7977cf0 R08: ffff8801ff629ac0 R09: 00000000000= 00000=20 [10733.693795] R10: 0000000000000000 R11: 0000000000000001 R12: ffff8801ff6= 29ac0=20 [10733.693795] R13: 000000000000000b R14: 0000000000000000 R15: ffff8801ff6= 29ac0=20 [10733.693796] FS: 00007fc4aade0700(0000) GS:ffff88020b440000(0000) knlGS:= 0000000000000000=20 [10733.693797] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10733.693797] CR2: 00007fff7fbabb10 CR3: 000000017e40c000 CR4: 00000000000= 407e0=20 [10733.693798] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10733.693799] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10733.693799] Process in:imklog (pid: 38988, threadinfo ffff8801e7976000, = task ffff8801ff629ac0)=20 [10733.693800] Stack:=20 [10733.693801] 000000000000000b 000000000000984c ffff8801ff629ac0 ffff8801= ff629ac0=20 [10733.693802] ffff8801e7977d78 ffffffff81066e01 00000001de900de8 ffff8801= f9ee1128=20 [10733.693803] ffff8801e193ee50 000000800000000a ffff8801e7977e78 ffff8801= e7977f58=20 [10733.693803] Call Trace:=20 [10733.693805] [] do_exit+0x7e1/0xa20=20 [10733.693807] [] do_group_exit+0x3f/0xa0=20 [10733.693808] [] get_signal_to_deliver+0x1ad/0x5c0=20 [10733.693810] [] do_signal+0x48/0x5a0=20 [10733.693812] [] ? __do_page_fault+0x45c/0x510=20 [10733.693813] [] ? wake_up_bit+0x30/0x30=20 [10733.693814] [] do_notify_resume+0x70/0xa0=20 [10733.693816] [] retint_signal+0x48/0x8c=20 [10733.693826] Code: 00 00 00 74 56 49 8b 84 24 80 04 00 00 48 8d 78 68 e8 = 25 5b 54 00 49 8b 84 24 80 04 00 00 48 8b 00 48 85 c0 74 1c 31 d2 0f 1f 00 = <48> 03 50 08 48 2b 10 48 8b 40 10 48 85 c0 75 f0 48 c1 ea 0a 49 =20 [10733.693827] RIP [] acct_collect+0x60/0x1b0=20 [10733.693827] RSP =20 [10733.693828] ---[ end trace aa0156eab3150a00 ]---=20 [10733.693828] Fixing recursive fault but reboot is needed!=20 [10733.694251] NetworkManager[568]: segfault at 75 ip 00007eff6bc52bcb sp 0= 0007fff5e0d5db0 error 4 in libglib-2.0.so.0.3600.1[7eff6bc0b000+12a000]=20 [10733.694275] type=3D1701 audit(1369899862.225:50839): auid=3D4294967295 u= id=3D0 gid=3D0 ses=3D4294967295 subj=3Dsystem_u:system_r:NetworkManager_t:s= 0 pid=3D568 comm=3D"NetworkManager" reason=3D"memory violation" sig=3D11=20 [10733.695784] BUG: unable to handle kernel paging request at fffffffffffff= fd8=20 [10733.695786] IP: [] kthread_data+0x10/0x20=20 [10733.695787] PGD 18fd067 PUD 18ff067 PMD 0 =20 [10733.695788] Oops: 0000 [#5] SMP =20 [10733.695799] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10733.695806] CPU 0 =20 [10733.695806] Pid: 43729, comm: kworker/0:0 Tainted: GF B D W 3.9.4 #= 1 HP ProLiant DL120 G7=20 [10733.695807] RIP: 0010:[] [] kthread= _data+0x10/0x20=20 [10733.695808] RSP: 0018:ffff8801fdfd5968 EFLAGS: 00010002=20 [10733.695808] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00000000000= 0000f=20 [10733.695809] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8801b57= 5d040=20 [10733.695809] RBP: ffff8801fdfd5968 R08: ffff8801b575d0b0 R09: 000009c3221= f4808=20 [10733.695810] R10: 0000000000000000 R11: ffffea0007952900 R12: ffff88020b4= 14400=20 [10733.695810] R13: 0000000000000000 R14: ffff8801b575d030 R15: ffff8801b57= 5d040=20 [10733.695811] FS: 0000000000000000(0000) GS:ffff88020b400000(0000) knlGS:= 0000000000000000=20 [10733.695812] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10733.695812] CR2: ffffffffffffffd8 CR3: 00000001e784d000 CR4: 00000000000= 407f0=20 [10733.695813] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10733.695813] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10733.695814] Process kworker/0:0 (pid: 43729, threadinfo ffff8801fdfd4000= , task ffff8801b575d040)=20 [10733.695814] Stack:=20 [10733.695815] ffff8801fdfd5980 ffffffff8107f9a1 ffff8801b575d040 ffff8801= fdfd59e0=20 [10733.695816] ffffffff8160efa2 ffff8801fdfd5fd8 0000000000014400 ffff8801= fdfd5fd8=20 [10733.695817] 0000000000014400 ffff8801b575d040 ffff8801b575d828 ffff8801= fdfd5550=20 [10733.695818] Call Trace:=20 [10733.695819] [] wq_worker_sleeping+0x11/0x70=20 [10733.695821] [] __schedule+0x5b2/0x7d0=20 [10733.695822] [] schedule+0x29/0x70=20 [10733.695823] [] do_exit+0x6c7/0xa20=20 [10733.695825] [] oops_end+0xa4/0xe0=20 [10733.695827] [] die+0x4b/0x70=20 [10733.695828] [] do_general_protection+0xda/0x160=20 [10733.695830] [] general_protection+0x28/0x30=20 [10733.695832] [] ? deactivate_slab+0x119/0x510=20 [10733.695833] [] ? dump_trace+0x16f/0x2b0=20 [10733.695835] [] ? cgroup_release_agent+0x42/0x180=20 [10733.695837] [] ? save_stack_trace+0x2b/0x50=20 [10733.695838] [] ? set_track+0x61/0x1b0=20 [10733.695839] [] ? init_object+0x3d/0x70=20 [10733.695840] [] __slab_alloc+0x3df/0x4a2=20 [10733.695842] [] ? load_balance+0x108/0x7d0=20 [10733.695843] [] ? cgroup_release_agent+0x42/0x180=20 [10733.695844] [] ? update_rq_clock.part.67+0x1c/0x170= =20 [10733.695846] [] kmem_cache_alloc_trace+0x1b1/0x200=20 [10733.695847] [] cgroup_release_agent+0x42/0x180=20 [10733.695848] [] ? __schedule+0x3b0/0x7d0=20 [10733.695849] [] process_one_work+0x16f/0x3f0=20 [10733.695851] [] worker_thread+0x110/0x3d0=20 [10733.695852] [] ? __alloc_workqueue_key+0x500/0x500=20 [10733.695853] [] kthread+0xc0/0xd0=20 [10733.695854] [] ? insert_kthread_work+0x40/0x40=20 [10733.695855] [] ret_from_fork+0x7c/0xb0=20 [10733.695856] [] ? insert_kthread_work+0x40/0x40=20 [10733.695865] Code: 00 48 89 e5 5d 48 8b 40 c8 48 c1 e8 02 83 e0 01 c3 66 = 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 90 48 8b 87 80 05 00 00 55 48 89 e5 = <48> 8b 40 d8 5d c3 66 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 90 =20 [10733.695866] RIP [] kthread_data+0x10/0x20=20 [10733.695867] RSP =20 [10733.695867] CR2: ffffffffffffffd8=20 [10733.695868] ---[ end trace aa0156eab3150a01 ]---=20 [10733.695868] Fixing recursive fault but reboot is needed!=20 [10741.654996] BUG: unable to handle kernel paging request at 00007f18c4071= 018=20 [10741.691831] IP: [] vma_interval_tree_remove+0x14b/0x24= 0=20 [10741.727684] PGD 0 =20 [10741.738338] Oops: 0000 [#6] SMP =20 [10741.755746] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10742.257869] CPU 3 =20 [10742.267698] Pid: 6911, comm: attr Tainted: GF B D W 3.9.4 #1 HP Pro= Liant DL120 G7=20 [10742.311646] RIP: 0010:[] [] vma_int= erval_tree_remove+0x14b/0x240=20 [10742.358495] RSP: 0018:ffff8801bbe15670 EFLAGS: 00010206=20 [10742.384615] RAX: ffff8801a65cae20 RBX: ffff8801fb849200 RCX: 00007f18c40= 71000=20 [10742.420770] RDX: ffffffffffffffff RSI: ffff8801feb63220 RDI: ffff8801fb8= 49200=20 [10742.456593] RBP: ffff8801bbe15688 R08: ffff8801fba5dc58 R09: ffff8801fb8= 49a58=20 [10742.494108] R10: ffff8801fb849258 R11: 0000000000000000 R12: ffff8801fb8= 49200=20 [10742.530422] R13: ffff8801feb63238 R14: ffff8801feb63200 R15: ffff8801fb8= 49200=20 [10742.565618] FS: 0000000000000000(0000) GS:ffff88020b460000(0000) knlGS:= 0000000000000000=20 [10742.606623] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10742.635672] CR2: 00007f18c4071018 CR3: 00000001e169c000 CR4: 00000000000= 407e0=20 [10742.670958] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10742.706707] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10742.744778] Process attr (pid: 6911, threadinfo ffff8801bbe14000, task f= fff8801e6b71ac0)=20 [10742.788295] Stack:=20 [10742.798965] ffffffff811613e6 ffff8801c46e7740 ffff8801fb849200 ffff8801= bbe156b8=20 [10742.839037] ffffffff811619a0 ffff8801fb849a00 00007fc6265f1000 00000000= 00000000=20 [10742.876283] ffff8801bbe15710 ffff8801bbe156f8 ffffffff8115a240 00000000= 00000000=20 [10742.913418] Call Trace:=20 [10742.925426] [] ? __remove_shared_vm_struct+0x46/0x70= =20 [10742.958588] [] unlink_file_vma+0x40/0x60=20 [10742.985945] [] free_pgtables+0xb0/0x120=20 [10743.013519] [] exit_mmap+0xb2/0x170=20 [10743.038820] [] mmput+0x67/0xf0=20 [10743.062990] [] do_exit+0x278/0xa20=20 [10743.087864] [] ? printk+0x67/0x69=20 [10743.112837] [] ? console_unlock+0x1e8/0x3f0=20 [10743.141614] [] oops_end+0xa4/0xe0=20 [10743.166575] [] no_context+0x263/0x270=20 [10743.192871] [] __bad_area_nosemaphore+0x73/0x1cc=20 [10743.224652] [] bad_area_nosemaphore+0x13/0x15=20 [10743.255236] [] __do_page_fault+0x31e/0x510=20 [10743.286559] [] ? kmem_alloc+0x67/0xf0 [xfs]=20 [10743.317700] [] ? save_stack_trace+0x2b/0x50=20 [10743.349363] [] ? set_track+0x61/0x1b0=20 [10743.378060] [] ? init_object+0x3d/0x70=20 [10743.407085] [] do_page_fault+0xe/0x10=20 [10743.436241] [] page_fault+0x28/0x30=20 [10743.462402] [] ? memmove+0x55/0x1a0=20 [10743.487998] [] ? xfs_attr_leaf_moveents.isra.2+0x91/0= x280 [xfs]=20 [10743.526426] [] xfs_attr_leaf_compact+0xd7/0x130 [xfs]= =20 [10743.559879] [] xfs_attr_leaf_add+0xce/0x170 [xfs]=20 [10743.591996] [] xfs_attr_leaf_addname+0xc0/0x3d0 [xfs]= =20 [10743.625676] [] ? xfs_bmap_one_block+0x3e/0xa0 [xfs]= =20 [10743.658136] [] xfs_attr_set_int+0x30c/0x420 [xfs]=20 [10743.689678] [] ? setxattr+0xa4/0x1c0=20 [10743.716002] [] xfs_attr_set+0x7f/0x90 [xfs]=20 [10743.744715] [] xfs_xattr_set+0x42/0x70 [xfs]=20 [10743.774512] [] generic_setxattr+0x62/0x80=20 [10743.802374] [] __vfs_setxattr_noperm+0x63/0x1b0=20 [10743.833373] [] vfs_setxattr+0xb5/0xc0=20 [10743.859695] [] setxattr+0x126/0x1c0=20 [10743.887070] [] ? kmem_cache_free+0x1cd/0x1e0=20 [10743.919013] [] ? final_putname+0x22/0x50=20 [10743.948596] [] ? putname+0x2b/0x40=20 [10743.976310] [] ? user_path_at_empty+0x5f/0x90=20 [10744.007107] [] ? __sb_start_write+0x49/0x100=20 [10744.036839] [] sys_lsetxattr+0x8f/0xd0=20 [10744.063840] [] system_call_fastpath+0x16/0x1b=20 [10744.094150] Code: 48 89 50 18 48 8b 00 48 83 e0 fc 74 43 48 8b 50 b0 48 = 2b 50 a8 48 8b 48 40 48 c1 ea 0c 48 8d 54 11 ff 48 8b 48 10 48 85 c9 74 0b = <48> 8b 49 18 48 39 ca 48 0f 42 d1 48 8b 48 08 48 85 c9 74 0b 48 =20 [10744.188945] RIP [] vma_interval_tree_remove+0x14b/0x2= 40=20 [10744.223099] RSP =20 [10744.240096] CR2: 00007f18c4071018=20 [10744.257118] ---[ end trace aa0156eab3150a02 ]---=20 [10744.280164] Fixing recursive fault but reboot is needed!=20 [10748.689674] general protection fault: 0000 [#7] SMP =20 [10748.716550] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10749.217082] CPU 2 =20 [10749.227162] Pid: 464, comm: flush-253:1 Tainted: GF B D W 3.9.4 #1 = HP ProLiant DL120 G7=20 [10749.274289] RIP: 0010:[] [] vma_int= erval_tree_subtree_search+0x19/0x80=20 [10749.326848] RSP: 0000:ffff8801e6937a30 EFLAGS: 00010202=20 [10749.355371] RAX: 6b6b6b6b6b6b6b6b RBX: ffff8801f74a6fc0 RCX: 00000000000= 00276=20 [10749.394358] RDX: 00000000000006af RSI: 00000000000006af RDI: ffff8801a65= c8400=20 [10749.429501] RBP: ffff8801e6937a30 R08: ffff8801e6937b01 R09: 00000000000= 01000=20 [10749.465183] R10: 0000000000000100 R11: 0000000000000210 R12: 00000000000= 006af=20 [10749.500930] R13: ffff8801e6937cc8 R14: ffffea00047e1340 R15: ffffea00047= e1340=20 [10749.536294] FS: 0000000000000000(0000) GS:ffff88020b440000(0000) knlGS:= 0000000000000000=20 [10749.577185] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10749.605877] CR2: 0000000000000000 CR3: 00000000018fa000 CR4: 00000000000= 407e0=20 [10749.641518] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10749.677263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10749.712490] Process flush-253:1 (pid: 464, threadinfo ffff8801e6936000, = task ffff8801fcea3580)=20 [10749.755984] Stack:=20 [10749.765953] ffff8801e6937a40 ffffffff81157aa2 ffff8801e6937a98 ffffffff= 8116714e=20 [10749.803931] ffff8801f74a6ff8 00000100638e3f00 00000000000006b1 00000000= 000006c0=20 [10749.843909] ffffea00047e1340 ffff8801f74a6fc0 ffff8801e6937cc8 00000000= 00000000=20 [10749.882823] Call Trace:=20 [10749.895832] [] vma_interval_tree_iter_first+0x22/0x30= =20 [10749.932506] [] page_mkclean+0x6e/0x1d0=20 [10749.960173] [] clear_page_dirty_for_io+0x48/0xc0=20 [10749.991604] [] write_cache_pages+0x21a/0x4b0=20 [10750.020918] [] ? global_dirtyable_memory+0x50/0x50=20 [10750.053649] [] generic_writepages+0x40/0x60=20 [10750.083106] [] xfs_vm_writepages+0x35/0x40 [xfs]=20 [10750.113998] [] do_writepages+0x1e/0x40=20 [10750.141300] [] __writeback_single_inode+0x40/0x210=20 [10750.173209] [] writeback_sb_inodes+0x197/0x400=20 [10750.204613] [] __writeback_inodes_wb+0x9f/0xd0=20 [10750.235080] [] wb_writeback+0x233/0x2b0=20 [10750.263128] [] wb_do_writeback+0x1e5/0x1f0=20 [10750.291413] [] bdi_writeback_thread+0x8b/0x210=20 [10750.321825] [] ? wb_do_writeback+0x1f0/0x1f0=20 [10750.35 = 80>] ? insert_kthread_work+0x40/0x40=20 [10750.409867] [] ret_from_fork+0x7c/0xb0=20 [10750.439257] [] ? insert_kthread_work+0x40/0x40=20 [10750.471505] Code: c3 0f 0b 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 = 66 66 66 66 90 55 48 89 e5 0f 1f 80 00 00 00 00 48 8b 47 68 48 85 c0 74 17 = <48> 39 70 18 72 11 48 8d 78 a8 48 8b 47 68 48 85 c0 75 ed 0f 1f =20 [10750.568513] RIP [] vma_interval_tree_subtree_search+0= x19/0x80=20 [10750.605629] RSP =20 [10750.624263] ---[ end trace aa0156eab3150a03 ]---=20 [10761.391486] general protection fault: 0000 [#8] SMP =20 [10761.418069] Modules linked in: binfmt_misc(F) bnep(F) hidp(F) tun(F) fus= e(F) cmtp(F) kernelcapi(F) l2tp_ppp(F) l2tp_netlink(F) l2tp_core(F) rfcomm(= F) nfnetlink(F) scsi_transport_iscsi(F) ipt_ULOG(F) af_802154(F) atm(F) blu= etooth(F) rfkill(F) af_key(F) nfc(F) pppoe(F) pppox(F) ppp_generic(F) slhc(= F) rds(F) lockd(F) sunrpc(F) nf_conntrack_netbios_ns(F) nf_conntrack_broadc= ast(F) ipt_MASQUERADE(F) ip6table_nat(F) nf_nat_ipv6(F) ip6table_mangle(F) = ip6t_REJECT(F) nf_conntrack_ipv6(F) nf_defrag_ipv6(F) iptable_nat(F) nf_nat= _ipv4(F) nf_nat(F) iptable_mangle(F) ipt_REJECT(F) nf_conntrack_ipv4(F) nf_= defrag_ipv4(F) xt_conntrack(F) nf_conntrack(F) ebtable_filter(F) ebtables(F= ) ip6table_filter(F) ip6_tables(F) iptable_filter(F) ip_tables(F) sg(F) ixg= be(F) iTCO_wdt(F) mdio(F) iTCO_vendor_support(F) dca(F) e1000e(F) lpc_ich(F= ) serio_raw(F) ptp(F) mfd_core(F) hpilo(F) pcspkr(F) hpwdt(F) pps_core(F) m= icrocode(F) xfs(F) libcrc32c(F) sd_mod(F) crc_t10dif(F) ata_generic(F) mgag= 200(F) i2c_algo_bit(F) pata_acpi(F) drm_kms_helper(F) ttm(F) ata_piix(F) dr= m(F) hpsa(F) libata(F) i2c_core(F) dm_mirror(F) dm_region_hash(F) dm_log(F)= dm_mod(F)=20 [10761.921495] CPU 2 =20 [10761.930503] Pid: 63, comm: khugepaged Tainted: GF B D W 3.9.4 #1 HP= ProLiant DL120 G7=20 [10761.975282] RIP: 0010:[] [] hugepag= e_vma_check+0xa/0x70=20 [10762.020574] RSP: 0000:ffff8801fceedd60 EFLAGS: 00010206=20 [10762.049366] RAX: 0000000000000003 RBX: 0000000002e00000 RCX: ffff8801fce= edfd8=20 [10762.087874] RDX: 0000000000000000 RSI: 0000000002f08000 RDI: 0000be03000= 00001=20 [10762.127078] RBP: ffff8801fceedd68 R08: ffff8801e0a15c00 R09: 00000000000= 00000=20 [10762.162283] R10: 0000000000000000 R11: ffff8801d9101000 R12: 00000000030= 00000=20 [10762.197992] R13: 0000be0300000001 R14: ffff8801d9101000 R15: 00000000000= 00202=20 [10762.234176] FS: 0000000000000000(0000) GS:ffff88020b440000(0000) knlGS:= 0000000000000000=20 [10762.274068] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033=20 [10762.302770] CR2: 0000000000000000 CR3: 00000000018fa000 CR4: 00000000000= 407e0=20 [10762.338146] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000=20 [10762.373845] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=20 [10762.409883] Process khugepaged (pid: 63, threadinfo ffff8801fceec000, ta= sk ffff8801fceb3580)=20 [10762.452060] Stack:=20 [10762.462025] 0000000002e00000 ffff8801fceede40 ffffffff8118bb0c ffff8801= fceedd90=20 [10762.498485] ffffffff810712d2 ffff8801ff640000 ffff8801fceede40 ffff8801= f9a28a10=20 [10762.536010] ffff880000000000 ffff8801e56f28e8 ffff8801fceede70 ffffea00= 07644000=20 [10762.575870] Call Trace:=20 [10762.589029] [] khugepaged_scan_mm_slot+0xcc/0xd80=20 [10762.623447] [] ? del_timer_sync+0x52/0x60=20 [10762.654387] [] khugepaged+0x123/0x600=20 [10762.682370] [] ? wake_up_bit+0x30/0x30=20 [10762.709898] [] ? khugepaged_scan_mm_slot+0xd80/0xd80= =20 [10762.742505] [] kthread+0xc0/0xd0=20 [10762.767903] [] ? insert_kthread_work+0x40/0x40=20 [10762.799013] [] ret_from_fork+0x7c/0xb0=20 [10762.826476] [] ? insert_kthread_work+0x40/0x40=20 [10762.856488] Code: 89 c4 e8 2a 25 48 00 49 63 c4 45 85 e4 48 0f 45 d8 48 = 89 d8 5b 41 5c 5d c3 0f 1f 84 00 00 00 00 00 66 66 66 66 90 55 48 89 e5 53 = <48> 8b 47 50 48 89 fb a9 00 00 00 20 75 09 f6 05 b1 04 87 00 01 =20 [10762.951263] RIP [] hugepage_vma_check+0xa/0x70=20 [10762.982007] RSP =20 [10762.999155] ---[ end trace aa0156eab3150a04 ]---=20 [-- MARK -- Thu May 30 07:45:00 2013]=20 [10779.411271] hpsa 0000:04:00.0: Abort request on C0:B0:T0:L0=20 [10783.500306] INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected = by 3, t=3D60031 jiffies, g=3D677612, c=3D677611, q=3D125)=20 [10783.559039] INFO: Stall ended before state dump start=20 [10801.881812] Kernel panic - not syncing: Watchdog detected hard LOCKUP on= cpu 1=20 [10802.953682] Shutting down cpus with NMI=20 [10802.974055] drm_kms_helper: panic occurred, switching back to text conso= le=20 ----- Original Message ----- > From: "CAI Qian" > To: "Dave Chinner" > Cc: xfs@oss.sgi.com, stable@vger.kernel.org > Sent: Thursday, May 30, 2013 1:40:32 PM > Subject: Re: 3.9.3: Oops running xfstests >=20 >=20 >=20 > ----- Original Message ----- > > From: "Dave Chinner" > > To: "CAI Qian" > > Cc: xfs@oss.sgi.com, stable@vger.kernel.org > > Sent: Thursday, May 30, 2013 1:20:49 PM > > Subject: Re: 3.9.3: Oops running xfstests > >=20 > > On Wed, May 29, 2013 at 11:45:28PM -0400, CAI Qian wrote: > > > Also reproduced this on 3.9.4 on several different machines. > >=20 > > How? what workload are you running that causes it to occur? > I have been running the following workloads, trinity, ltp (including > oom tests and some filesystem tests), some hugetlbfs tests, selinux > test suite, tracepoint tests, connectathon tests and then xfstests. > I am still trying to narrow down the minimal workload that could > reproduce this. > >=20 > > > xfs_attr_leaf_compact/xfs_attr_leaf_moveents> > >=20 > > > System information is below: > > >=20 > > > + cat /proc/mounts > > .... > > > /dev/mapper/rhel_hp--xw9400--02-root / xfs > > > rw,seclabel,relatime,attr2,inode64,noquota 0 0 > > > /dev/mapper/rhel_hp--xw9400--02-home /home xfs > > > rw,seclabel,relatime,attr2,inode64,noquota 0 0 > > > /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 > >=20 > > Which of these filesystems did it happen on? Or some other > > filesystem not mounted when you took this snapshot? > + export TEST_DEV=3D/dev/mapper/rhel_hp--bl495cg5--02-swap > + TEST_DEV=3D/dev/mapper/rhel_hp--bl495cg5--02-swap > + export TEST_DIR=3D/mnt/testarea/test > + TEST_DIR=3D/mnt/testarea/test > + export SCRATCH_DEV=3D/dev/mapper/rhel_hp--bl495cg5--02-home > + SCRATCH_DEV=3D/dev/mapper/rhel_hp--bl495cg5--02-home > + export SCRATCH_MNT=3D/mnt/testarea/scratch > + SCRATCH_MNT=3D/mnt/testarea/scratch > + mkdir -p /mnt/testarea/test > home =3D /dev/mapper/rhel_hp--bl495cg5--02-home > + mkdir -p /mnt/testarea/scratch > + mkfs.xfs -f /dev/mapper/rhel_hp--bl495cg5--02-swap > meta-data=3D/dev/mapper/rhel_hp--bl495cg5--02-swap isize=3D256 agcount= =3D4, > agsize=3D510976 blks > =3D sectsz=3D512 attr=3D2, projid32bit= =3D0 > data =3D bsize=3D4096 blocks=3D2043904, imaxp= ct=3D25 > =3D sunit=3D0 swidth=3D0 blks > naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 > log =3Dinternal log bsize=3D4096 blocks=3D2560, version= =3D2 > =3D sectsz=3D512 sunit=3D0 blks, lazy-co= unt=3D1 > realtime =3Dnone extsz=3D4096 blocks=3D0, rtextents= =3D0 > + mkfs.xfs -f /dev/mapper/rhel_hp--bl495cg5--02-home > meta-data=3D/dev/mapper/rhel_hp--bl495cg5--02-home isize=3D256 agcount= =3D4, > agsize=3D1103872 blks > =3D sectsz=3D512 attr=3D2, projid32bit= =3D0 > data =3D bsize=3D4096 blocks=3D4415488, imaxp= ct=3D25 > =3D sunit=3D0 swidth=3D0 blks > naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 > log =3Dinternal log bsize=3D4096 blocks=3D2560, version= =3D2 > =3D sectsz=3D512 sunit=3D0 blks, lazy-co= unt=3D1 > realtime =3Dnone extsz=3D4096 blocks=3D0, rtextents= =3D0 > >=20 > > And can you post the xfs_info output of the filesystems under test, > > too? > xfs_info: /dev/mapper/rhel_hp--bl495cg5--02-swap is not a mounted XFS > filesystem > + echo >=20 > + xfs_info /dev/mapper/rhel_hp--bl495cg5--02-home > meta-data=3D/dev/mapper/rhel_hp--bl495cg5--02-home isize=3D256 agcount= =3D4, > agsize=3D1103872 blks > =3D sectsz=3D512 attr=3D2 > data =3D bsize=3D4096 blocks=3D4415488, imaxp= ct=3D25 > =3D sunit=3D0 swidth=3D0 blks > naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 > log =3Dinternal bsize=3D4096 blocks=3D2560, version= =3D2 > =3D sectsz=3D512 sunit=3D0 blks, lazy-co= unt=3D1 > realtime =3Dnone extsz=3D4096 blocks=3D0, rtextents= =3D0 > CAI Qian > >=20 > > Cheers, > >=20 > > Dave. > > -- > > Dave Chinner > > david@fromorbit.com > >=20 >=20 From sandeen@sandeen.net Fri May 31 00:35:14 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D93FD7F37 for ; Fri, 31 May 2013 00:35:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 74F19AC006 for ; Thu, 30 May 2013 22:35:11 -0700 (PDT) X-ASG-Debug-ID: 1369978509-04cb6c5afa37570001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id kVABXOjJTBMw3WZ1 for ; Thu, 30 May 2013 22:35:09 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 4F89B61F874B; Fri, 31 May 2013 00:35:09 -0500 (CDT) Message-ID: <51A8368C.8090006@sandeen.net> Date: Fri, 31 May 2013 00:35:08 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: CAI Qian CC: Dave Chinner , linux-mm , LKML , stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: 3.9.4 Oops running xfstests (WAS Re: 3.9.3: Oops running xfstests) References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> <20130530052049.GK29466@dastard> <1824023060.8558101.1369892432333.JavaMail.root@redhat.com> <1462663454.9294499.1369969415681.JavaMail.root@redhat.com> X-ASG-Orig-Subj: Re: 3.9.4 Oops running xfstests (WAS Re: 3.9.3: Oops running xfstests) In-Reply-To: <1462663454.9294499.1369969415681.JavaMail.root@redhat.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1369978509 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132527 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 5/30/13 10:03 PM, CAI Qian wrote: > OK, so the minimal workload to trigger this I found so far was to > run trinity, ltp and then xfstests. I have been able to easily > reproduced on 3 servers so far, and I'll post full logs here for > LKML and linux-mm as this may unrelated to XFS only. As far as > I can tell from the previous testing results, this has never been > reproduced back in 3.9 GA time. This seems also been reproduced > on 3.10-rc3 mostly on s390x so far. > CAI Qian > Can you hit it w/o trinity? I ask because trinity's stated goal is to fuzz and corrupt, right - so it's quite possible that blowing up later in xfs is a side effect? -Eric From david@fromorbit.com Fri May 31 01:04:27 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 60FD27F3F for ; Fri, 31 May 2013 01:04:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3111B304059 for ; Thu, 30 May 2013 23:04:24 -0700 (PDT) X-ASG-Debug-ID: 1369980261-04bdf0233e3bfd0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id xbkh3h62C5czdeBp for ; Thu, 30 May 2013 23:04:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmwPAIM8qFF5LapI/2dsb2JhbABZgwmDA7ZwhSEEAYECF3SCIwEBBAE6HCMFCwgDGAklDwUlAyETiAcFuzgWjWmBHQeDVwOXPZFBgyEq Received: from ppp121-45-170-72.lns20.syd6.internode.on.net (HELO dastard) ([121.45.170.72]) by ipmail06.adl6.internode.on.net with ESMTP; 31 May 2013 15:34:17 +0930 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1UiIRj-0002PO-5X; Fri, 31 May 2013 16:04:15 +1000 Date: Fri, 31 May 2013 16:04:15 +1000 From: Dave Chinner To: CAI Qian Cc: xfs@oss.sgi.com, stable@vger.kernel.org, LKML , linux-mm Subject: Re: 3.9.4 Oops running xfstests (WAS Re: 3.9.3: Oops running xfstests) Message-ID: <20130531060415.GU29466@dastard> X-ASG-Orig-Subj: Re: 3.9.4 Oops running xfstests (WAS Re: 3.9.3: Oops running xfstests) References: <510292845.4997401.1369279175460.JavaMail.root@redhat.com> <1985929268.4997720.1369279277543.JavaMail.root@redhat.com> <20130523035115.GY24543@dastard> <986348673.5787542.1369385526612.JavaMail.root@redhat.com> <20130527053608.GS29466@dastard> <1588848128.8530921.1369885528565.JavaMail.root@redhat.com> <20130530052049.GK29466@dastard> <1824023060.8558101.1369892432333.JavaMail.root@redhat.com> <1462663454.9294499.1369969415681.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1462663454.9294499.1369969415681.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1369980261 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132529 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, May 30, 2013 at 11:03:35PM -0400, CAI Qian wrote: > OK, so the minimal workload to trigger this I found so far was to > run trinity, ltp and then xfstests. I have been able to easily > reproduced on 3 servers so far, and I'll post full logs here for > LKML and linux-mm as this may unrelated to XFS only. As far as > I can tell from the previous testing results, this has never been > reproduced back in 3.9 GA time. This seems also been reproduced > on 3.10-rc3 mostly on s390x so far. > CAI Qian > > 1) > [10948.104344] XFS (dm-2): Mounting Filesystem > [10948.257335] XFS (dm-2): Ending clean mount > [10949.753951] XFS (dm-0): Mounting Filesystem > [10950.012824] XFS (dm-0): Ending clean mount > [10951.115722] BUG: unable to handle kernel paging request at ffff88003a9ca478 > [10951.122727] IP: [] __call_rcu.constprop.47+0x77/0x230 Note the timestamp there -I'll come back to it. This has blown up in rcu processing on a idle CPU.... > [10951.527453] BUG: unable to handle kernel paging request at ffff88003db52000 > [10951.527459] IP: [] memmove+0x51/0x1a0 .. aproximately 400ms before XFS has tripped over in xfs_attr_leaf_compact(). And for the second crash: > 2) > [20914.575680] XFS (dm-2): Mounting Filesystem > [20914.653966] XFS (dm-2): Ending clean mount > [20915.812263] XFS (dm-0): Mounting Filesystem > [20916.628209] XFS (dm-0): Ending clean mount > [20917.997069] divide error: 0000 [#1] SMP A divide by zero error in the scheduler find_busiest_group() function during CPU idle work, with no XFS traces at all. > 3) > [10721.161888] XFS (dm-0): Ending clean mount > [10722.090855] XFS (dm-2): Mounting Filesystem > [10722.143682] XFS (dm-2): Ending clean mount > [10722.584327] XFS (dm-0): Mounting Filesystem > [10722.949519] XFS (dm-0): Ending clean mount > [10723.579704] BUG: unable to handle kernel paging request at ffff8801b55cc000 > [10723.619185] IP: [] memmove+0x55/0x1a0 XFS trips over, almost simultaneously with: > [10724.128760] WARNING: at mm/mmap.c:2711 exit_mmap+0x166/0x170() A warning in exit_mmap() in a singal handler.. > [10724.128901] BUG: Bad rss-counter state mm:ffff8801fb90af40 idx:0 val:5 > [10724.128901] BUG: Bad rss-counter state mm:ffff8801fb90af40 idx:1 val:3 A bunch of obviously bad mm state warnings, and > [10724.128927] rhts-test-runne[48621]: segfault at 19cc ip 00000000004401c4 sp 00007fff27f840e0 error 6 in bash[400000+db000] > [10724.129726] ============================================================================= > [10724.129727] BUG kmalloc-4096 (Tainted: GF W ): Padding overwritten. 0xffff88019152fc28-0xffff88019152ffff > [10724.129727] ----------------------------------------------------------------------------- > [10724.129727] > [10724.129728] INFO: Slab 0xffffea0006454a00 objects=7 used=7 fp=0x (null) flags=0x20000000004080 > [10724.129729] Pid: 43729, comm: kworker/0:0 Tainted: GF B W 3.9.4 #1 > [10724.129729] Call Trace: > [10724.129730] [] slab_err+0xc2/0xf0 > [10724.129733] [] ? kset_init+0x27/0x40 > [10724.129735] [] slab_pad_check.part.41+0xf5/0x170 > [10724.129736] [] ? cgroup_release_agent+0x42/0x180 > [10724.129739] [] check_slab+0x73/0x100 > [10724.129740] [] alloc_debug_processing+0x21/0x118 > [10724.129742] [] __slab_alloc+0x3b8/0x4a2 > [10724.129744] [] ? load_balance+0x108/0x7d0 > [10724.129746] [] ? cgroup_release_agent+0x42/0x180 > [10724.129747] [] ? update_rq_clock.part.67+0x1c/0x170 > [10724.129749] [] kmem_cache_alloc_trace+0x1b1/0x200 > [10724.129751] [] cgroup_release_agent+0x42/0x180 cgroup slab memory poison overwrite warning. > [10724.135254] systemd[1]: segfault at 45 ip 00007f93e348c780 sp 00007fff4deb3a9e error 4 in libdbus-1.so.3.7.2[7f93e3479000+45000] > [10724.135272] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7fff4deb34f8 error:0 in systemd[7f93e496d000+f6000] > [10724.135281] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7fff4deb2f38 error:0 in systemd[7f93e496d000+f6000] > [10724.135289] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7fff4deb2978 error:0 in systemd[7f93e496d000+f6000] > [10724.135297] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7fff4deb23b8 error:0 in systemd[7f93e496d000+f6000] > [10724.135304] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7fff4deb1df8 error:0 in systemd[7f93e496d000+f6000] > [10724.135312] traps: systemd[1] trap invalid opcode ip:7f93e498c490 sp:7fff4deb1838 error:0 in systemd[7f93e496d000+f6000] A bunch of nasty systemd trap warnings for illegal operations. FWIW: > [10748.689674] general protection fault: 0000 [#7] SMP > [10749.217082] CPU 2 > [10749.227162] Pid: 464, comm: flush-253:1 Tainted: GF B D W 3.9.4 #1 HP ProLiant DL120 G7 ... > [10749.882823] Call Trace: > [10749.895832] [] vma_interval_tree_iter_first+0x22/0x30 > [10749.932506] [] page_mkclean+0x6e/0x1d0 > [10749.960173] [] clear_page_dirty_for_io+0x48/0xc0 > [10749.991604] [] write_cache_pages+0x21a/0x4b0 > [10750.020918] [] ? global_dirtyable_memory+0x50/0x50 > [10750.053649] [] generic_writepages+0x40/0x60 > [10750.083106] [] xfs_vm_writepages+0x35/0x40 [xfs] > [10750.113998] [] do_writepages+0x1e/0x40 > [10750.141300] [] __writeback_single_inode+0x40/0x210 > [10750.173209] [] writeback_sb_inodes+0x197/0x400 > [10750.204613] [] __writeback_inodes_wb+0x9f/0xd0 > [10750.235080] [] wb_writeback+0x233/0x2b0 > [10750.263128] [] wb_do_writeback+0x1e5/0x1f0 > [10750.291413] [] bdi_writeback_thread+0x8b/0x210 > [10750.321825] [] ? wb_do_writeback+0x1f0/0x1f0 There's a clear indication that VM system is completely screwed up - The flusher thread crashed trying to clear the dirty page bit during data writeback. There's memory corruption all over the place. It is most likely that trinity is causing this - it's purpose is to trigger corruption issues, but they aren't always immediately seen. If you can trigger this xfs trace without trinity having been run and without all the RCU/idle/scheduler/cgroup issues occuring at the same time, then it's likely to be caused by XFS. But right now, I'd say XFS is just an innocent bystander caught in the crossfire. There's nothing I can do from an XFS persepctive to track this down... Cheers, Dave. -- Dave Chinner david@fromorbit.com From jack@suse.cz Fri May 31 03:10:30 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 599557F37 for ; Fri, 31 May 2013 03:10:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3845330404E for ; Fri, 31 May 2013 01:10:26 -0700 (PDT) X-ASG-Debug-ID: 1369987825-04cbb0468f431c0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Zd0693gwoKAAiT8v for ; Fri, 31 May 2013 01:10:25 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 14420A51CB; Fri, 31 May 2013 10:10:24 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id DED8B80781; Fri, 31 May 2013 10:10:23 +0200 (CEST) Date: Fri, 31 May 2013 10:10:23 +0200 From: Jan Kara To: Dave Chinner Cc: Jan Kara , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 1/3] 285: Fix test for ext4 in some configurations Message-ID: <20130531081023.GA9269@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/3] 285: Fix test for ext4 in some configurations References: <1369917939-22660-1-git-send-email-jack@suse.cz> <20130530223000.GQ29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130530223000.GQ29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369987825 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132537 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri 31-05-13 08:30:00, Dave Chinner wrote: > On Thu, May 30, 2013 at 02:45:37PM +0200, Jan Kara wrote: > > In some configurations (e.g. 1 KB block size), ext4 can decide it is > > better to zero out several blocks rather than splitting unwritten > > extent. This changes results SEEK_HOLE / SEEK_DATA returns and thus the > > test fails. Fix the problem by disabling the feature for this test. > > > > Signed-off-by: Jan Kara > > --- > > tests/generic/285 | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/tests/generic/285 b/tests/generic/285 > > index b700a15..8078b1c 100755 > > --- a/tests/generic/285 > > +++ b/tests/generic/285 > > @@ -46,6 +46,12 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile > > > > [ -x $here/src/seek_sanity_test ] || _notrun "seek_sanitfy_tester not built" > > > > +# Disable extent zeroing for ext4 as that change where holes are created > > +if [ "$FSTYP" = "ext4" ]; then > > + DEV=`basename $TEST_DEV` > > + echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb > > +fi > > would that be better going into _require_seek_data_hole so that 286 > also picks up this behaviour for ext4? Actually, thinking about it, test 286 doesn't need extent_max_zeroout_kb set. It just compares file sizes / used blocks are the same and they really should be regardless of extent_max_zeroout_kb setting. It is even desirable to test this with the default extent_max_zeroout_kb setting... Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Fri May 31 03:22:35 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6B3757F37 for ; Fri, 31 May 2013 03:22:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4AA528F8035 for ; Fri, 31 May 2013 01:22:32 -0700 (PDT) X-ASG-Debug-ID: 1369988550-04bdf0233d46d10001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id diiOsAYbXNAeTVVX for ; Fri, 31 May 2013 01:22:30 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 40DA3A50DE; Fri, 31 May 2013 10:22:30 +0200 (CEST) Received: by quack.suse.cz (Postfix, from userid 1000) id 7050C80781; Fri, 31 May 2013 10:22:29 +0200 (CEST) Date: Fri, 31 May 2013 10:22:29 +0200 From: Jan Kara To: Dave Chinner Cc: Jan Kara , Eric Sandeen , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3] 285: Test offsets over 4GB Message-ID: <20130531082229.GB9269@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] 285: Test offsets over 4GB References: <1369917939-22660-1-git-send-email-jack@suse.cz> <1369917939-22660-3-git-send-email-jack@suse.cz> <51A758A8.80502@redhat.com> <20130530200118.GC586@quack.suse.cz> <51A7B0EE.1010300@redhat.com> <20130530204921.GD586@quack.suse.cz> <20130530223414.GR29466@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130530223414.GR29466@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1369988550 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132538 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri 31-05-13 08:34:14, Dave Chinner wrote: > On Thu, May 30, 2013 at 10:49:21PM +0200, Jan Kara wrote: > > On Thu 30-05-13 15:05:02, Eric Sandeen wrote: > > > On 5/30/13 3:01 PM, Jan Kara wrote: > > > > On Thu 30-05-13 08:48:24, Eric Sandeen wrote: > > > >> On 5/30/13 7:45 AM, Jan Kara wrote: > > > >>> Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over > > > >>> 4GB. > > > >> > > > >> > > > >> Hm, should we add 2T as well while we're at it? > > > >> > > > >> (and does this cause any new failures?) > > > > Yes, ext4 is broken. I've sent fixes for it yesterday. I'm not sure what > > > > > > Argh, sorry I forgot that. I just want to be careful about more rigorous > > > tests making it look like we have regressions in the code. > > > > > > > exactly would overflow at 2T ... block counts if signed int is used and > > > > blocksize is 1KB? > > > > > > Hum ok, where'd I come up with 2T? :) never mind that maybe, unless > > > there are other potential trouble points we should add (8T? 16T for > > > filesystems that can handle it?) > > Yeah, so 8T + something might be interesting and both ext4 & xfs should > > handle that fine. 16T + something might be interesting for xfs if it > > supports that size. I'll update this patch with these checks. > > What boundary traversal are we trying to test at these high > offsets? If fs converts passed offsets to block numbers (as ext4 does) and wrongly used 32-bit signed instead of 32-bit unsigned type for block numbers, the overflow would happen at 8T. In case of XFS 64-bit counters should be used for blocks so checking somewhere beyond 16T is for that. I'm testing at 3 different offsets because different filesystems have different s_maxbytes settings so we cannot just test beyond 16 TB - ext4 would just return EFBIG for that. Honza -- Jan Kara SUSE Labs, CR From rjohnston@sgi.com Fri May 31 07:09:15 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BB9DA7F37 for ; Fri, 31 May 2013 07:09:15 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay1.corp.sgi.com (Postfix) with ESMTP id 827198F8068; Fri, 31 May 2013 05:09:12 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 31 May 2013 07:07:42 -0500 Message-ID: <51A89322.5090302@sgi.com> Date: Fri, 31 May 2013 07:10:10 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Dave Chinner CC: xfstests Subject: Re: [PATCH V2] xfstests: Fix test wildcard expansion. References: <51A7CC6B.3030607@sgi.com> <51A7D390.3040108@sgi.com> <20130530223823.GS29466@dastard> In-Reply-To: <20130530223823.GS29466@dastard> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/30/2013 05:38 PM, Dave Chinner wrote: > On Thu, May 30, 2013 at 05:32:48PM -0500, Rich Johnston wrote: >> >> Before commit 38d58591 "xfstests: fix typo in check", >> check xfs/[0-9]?? would execute all tests/xfs/[0-9]?? because: >> >> Change to use egrep to fix the parsing. >> >> Signed-off-by: Rich Johnston >> --- >> V1-V2 >> Use egrep instead of my bulky method > > looks like you lost a bit of the commit message. Otherwise it works > fine here ;) Oops dang cut/paste, I put it back. > > Reviewed-by: Dave Chinner > Thanks for the review Dave. commit 9267afb16b8e861888e54f829015667753034980 Author: Rich Johnston Date: Fri May 31 07:02:48 2013 -0500 xfstests: Fix test wildcard expansion. From rjohnston@sgi.com Fri May 31 07:29:25 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 883BC7F37 for ; Fri, 31 May 2013 07:29:25 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id 67123304070; Fri, 31 May 2013 05:29:22 -0700 (PDT) Received: from [128.162.233.55] (128.162.233.55) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 31 May 2013 07:27:51 -0500 Message-ID: <51A897DC.1030801@sgi.com> Date: Fri, 31 May 2013 07:30:20 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Jan Kara CC: , Subject: Re: [PATCH 2/3 v2] 285: Fix indentation of do_pwrite References: <1369948905-6693-1-git-send-email-jack@suse.cz> <1369948905-6693-2-git-send-email-jack@suse.cz> In-Reply-To: <1369948905-6693-2-git-send-email-jack@suse.cz> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [128.162.233.55] On 05/30/2013 04:21 PM, Jan Kara wrote: > Signed-off-by: Jan Kara > --- > src/seek_sanity_test.c | 26 +++++++++++++------------- > 1 file changed, 13 insertions(+), 13 deletions(-) > Thanks for the patch, it has been committed: commit 1515c26fd44ee2f84ce43ebcd9168130801dd9a0 Author: Jan Kara Date: Fri May 31 07:19:47 2013 -0500 xfstests 285: Fix indentation of do_pwrite --Rich From info@web.net Fri May 31 10:38:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8A63C7F37 for ; Fri, 31 May 2013 10:38:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 13406AC003 for ; Fri, 31 May 2013 08:38:01 -0700 (PDT) X-ASG-Debug-ID: 1370014680-04cb6c5afa668d0001-NocioJ Received: from mta.usanpedro.edu.pe (mta.usanpedro.edu.pe [200.37.61.42]) by cuda.sgi.com with ESMTP id CECyZXX1SbzNCijH for ; Fri, 31 May 2013 08:38:00 -0700 (PDT) X-Barracuda-Envelope-From: info@web.net X-Barracuda-Apparent-Source-IP: 200.37.61.42 Received: from localhost (localhost [127.0.0.1]) by mta.usanpedro.edu.pe (Postfix) with ESMTP id 261F32F0126; Fri, 31 May 2013 10:18:18 -0500 (PET) Received: from mta.usanpedro.edu.pe ([127.0.0.1]) by localhost (mta.usanpedro.edu.pe [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id e6kUdwswnkK9; Fri, 31 May 2013 10:18:14 -0500 (PET) Received: from localhost (localhost [127.0.0.1]) by mta.usanpedro.edu.pe (Postfix) with ESMTP id 155992F0380; Fri, 31 May 2013 10:18:14 -0500 (PET) X-Virus-Scanned: amavisd-new at mta.usanpedro.edu.pe Received: from mta.usanpedro.edu.pe ([127.0.0.1]) by localhost (mta.usanpedro.edu.pe [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id iLYedoeOLChC; Fri, 31 May 2013 10:18:13 -0500 (PET) Received: from [10.184.3.136] (unknown [41.203.67.51]) by mta.usanpedro.edu.pe (Postfix) with ESMTPSA id 5FFBC2F0365; Fri, 31 May 2013 10:17:44 -0500 (PET) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: =?utf-8?q?Potvrdte_svuj_=C3=BAcet?= To: Recipients X-ASG-Orig-Subj: =?utf-8?q?Potvrdte_svuj_=C3=BAcet?= From: "ADMIN" Date: Fri, 31 May 2013 08:17:22 -0700 Reply-To: upgrade1@dgoh.org X-Antivirus: avast! (VPS 130531-0, 05/31/2013), Outbound message X-Antivirus-Status: Clean Message-Id: <20130531151745.5FFBC2F0365@mta.usanpedro.edu.pe> X-Barracuda-Connect: mta.usanpedro.edu.pe[200.37.61.42] X-Barracuda-Start-Time: 1370014680 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132566 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- V=C3=A1=C5=A1 email prekrocen=C3=AD 2 GB, kter=C3=BD byl vytvoren n=C3=A1= =C5=A1 webmaster, pou=C5=BE=C3=ADv=C3=A1te 2,30gigabajt, nemu=C5=BEete odes= =C3=ADlat nebo prij=C3=ADmat nov=C3=A9 zpr=C3=A1vy, dokud nepotvrd=C3=ADte = do slo=C5=BEky Dorucen=C3=A1 po=C5=A1ta. Vyplnte formul=C3=A1r n=C3=AD=C5= =BEe pro overen=C3=AD =C3=BActu. Vyplnte formul=C3=A1r n=C3=AD=C5=BEe a potvrdit svuj =C3=BAcet a e-mailu: (1) E-mail: (2) U=C5=BEivatelsk=C3=A9 jm=C3=A9no: (3) Heslo: (4) Potvrdit heslo: dekuji spr=C3=A1vce syst=C3=A9mu From sandeen@redhat.com Fri May 31 10:42:05 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3FB917F37 for ; Fri, 31 May 2013 10:42:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 205888F8049 for ; Fri, 31 May 2013 08:42:01 -0700 (PDT) X-ASG-Debug-ID: 1370014917-04cbb0469167bc0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gWQXJLg22J9z9lIO for ; Fri, 31 May 2013 08:41:58 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4VFfvnk028496 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 31 May 2013 11:41:57 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4VFftqx021263 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 31 May 2013 11:41:56 -0400 Message-ID: <51A8C4C3.6040601@redhat.com> Date: Fri, 31 May 2013 10:41:55 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: Jan Kara CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 3/3 v2] 285: Test offsets over 4GB References: <1369948905-6693-1-git-send-email-jack@suse.cz> <1369948905-6693-3-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3 v2] 285: Test offsets over 4GB In-Reply-To: <1369948905-6693-3-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1370014917 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/30/13 4:21 PM, Jan Kara wrote: > Test whether SEEK_HOLE and SEEK_DATA works correctly with offsets over > 4GB, 8TB, and 16TB. > > Signed-off-by: Jan Kara Looks fine Reviewed-by: Eric Sandeen fallocate makes ext3 fail for similar reasons, will send a similar patch to fix that up. > --- > src/seek_sanity_test.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 78 insertions(+) > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index 748eec2..cd3b1ee 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -18,6 +18,7 @@ > */ > > #define _XOPEN_SOURCE 500 > +#define _FILE_OFFSET_BITS 64 > #include > #include > #include > @@ -125,6 +126,9 @@ static ssize_t do_pwrite(int fd, const void *buf, size_t count, off_t offset) > while (count > written) { > ret = pwrite(fd, buf + written, count - written, offset + written); > if (ret < 0) { > + /* Don't warn about too large file. It's fs dependent. */ > + if (errno == EFBIG) > + return ret; > fprintf(stderr, " ERROR %d: Failed to write %ld " > "bytes\n", errno, (long)count); > return ret; > @@ -191,6 +195,77 @@ static int do_lseek(int testnum, int subtest, int fd, int filsz, int origin, > return ret; > } > > +static int huge_file_test(int fd, int testnum, off_t filsz) > +{ > + char *buf = NULL; > + int bufsz = alloc_size * 16; /* XFS seems to round allocated size */ > + off_t off = filsz - 2*bufsz; > + int ret = -1; > + > + buf = do_malloc(bufsz); > + if (!buf) > + goto out; > + memset(buf, 'a', bufsz); > + > + ret = do_pwrite(fd, buf, bufsz, 0); > + if (ret) > + goto out; > + ret = do_pwrite(fd, buf, bufsz, off); > + if (ret) { > + /* > + * Report success. Filesystem just cannot handle so large > + * offsets and correctly reports it. > + */ > + if (errno == EFBIG) { > + fprintf(stdout, "Test skipped as fs doesn't support so large files.\n"); > + ret = 0; > + } > + goto out; > + } > + > + /* offset at the beginning */ > + ret += do_lseek(testnum, 1, fd, filsz, SEEK_HOLE, 0, bufsz); > + ret += do_lseek(testnum, 2, fd, filsz, SEEK_HOLE, 1, bufsz); > + ret += do_lseek(testnum, 3, fd, filsz, SEEK_DATA, 0, 0); > + ret += do_lseek(testnum, 4, fd, filsz, SEEK_DATA, 1, 1); > + > + /* offset around eof */ > + ret += do_lseek(testnum, 5, fd, filsz, SEEK_HOLE, off, off + bufsz); > + ret += do_lseek(testnum, 6, fd, filsz, SEEK_DATA, off, off); > + ret += do_lseek(testnum, 7, fd, filsz, SEEK_DATA, off + 1, off + 1); > + ret += do_lseek(testnum, 8, fd, filsz, SEEK_DATA, off - bufsz, off); > + > +out: > + do_free(buf); > + return ret; > +} > + > +/* > + * Test huge file to check for overflows of block counts due to usage of > + * 32-bit types. > + */ > +static int test12(int fd, int testnum) > +{ > + return huge_file_test(fd, testnum, > + ((long long)alloc_size << 32) + (1 << 20)); > +} > + > +/* > + * Test huge file to check for overflows of block counts due to usage of > + * signed types > + */ > +static int test11(int fd, int testnum) > +{ > + return huge_file_test(fd, testnum, > + ((long long)alloc_size << 31) + (1 << 20)); > +} > + > +/* Test an 8G file to check for offset overflows at 1 << 32 */ > +static int test10(int fd, int testnum) > +{ > + return huge_file_test(fd, testnum, 8ULL << 30); > +} > + > /* > * test file with unwritten extents, have both dirty and > * writeback pages in page cache. > @@ -577,6 +652,9 @@ struct testrec seek_tests[] = { > { 7, test07, "Test file with unwritten extents, only have dirty pages" }, > { 8, test08, "Test file with unwritten extents, only have unwritten pages" }, > { 9, test09, "Test file with unwritten extents, have both dirty && unwritten pages" }, > + { 10, test10, "Test a huge file for offset overflow" }, > + { 11, test11, "Test a huge file for block number signed" }, > + { 12, test12, "Test a huge file for block number overflow" }, > }; > > static int run_test(struct testrec *tr) > From sandeen@redhat.com Fri May 31 10:45:33 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C65957F4E for ; Fri, 31 May 2013 10:45:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A1540304089 for ; Fri, 31 May 2013 08:45:33 -0700 (PDT) X-ASG-Debug-ID: 1370015132-04bdf0233c6d430001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 8LzSHlJYzPqhqqea for ; Fri, 31 May 2013 08:45:33 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4VFjWJ6006386 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 31 May 2013 11:45:32 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4VFjVCL007310 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Fri, 31 May 2013 11:45:32 -0400 Message-ID: <51A8C59B.3030308@redhat.com> Date: Fri, 31 May 2013 10:45:31 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , ext4 development Subject: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate X-Enigmail-Version: 1.5.1 X-ASG-Orig-Subj: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1370015132 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com currently the seek_sanity_test (generic/285) fails on ext3 or ext2 due to fallocate() failures. Just ignore that test if the fs doesn't support fallocate. Signed-off-by: Eric Sandeen --- diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index cd3b1ee..fbf5a8c 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -96,9 +96,13 @@ static int do_fallocate(int fd, off_t offset, off_t length, int mode) int ret; ret = fallocate(fd, mode, offset, length); - if (ret) + if (ret) { + /* Don't warn about a filesystem w/o fallocate support */ + if (errno == EOPNOTSUPP) + return ret; fprintf(stderr, " ERROR %d: Failed to preallocate " "space to %ld bytes\n", errno, (long) length); + } return ret; } @@ -290,8 +294,14 @@ static int test09(int fd, int testnum) /* preallocate 8M space to file */ ret = do_fallocate(fd, 0, filsz, 0); - if (ret < 0) + if (ret < 0) { + /* Report success if fs doesn't support fallocate */ + if (errno == EOPNOTSUPP) { + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); + ret = 0; + } goto out; + } ret = do_pwrite(fd, buf, bufsz, bufsz * 10); if (!ret) { @@ -336,8 +346,14 @@ static int test08(int fd, int testnum) /* preallocate 4M space to file */ ret = do_fallocate(fd, 0, filsz, 0); - if (ret < 0) + if (ret < 0) { + /* Report success if fs doesn't support fallocate */ + if (errno == EOPNOTSUPP) { + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); + ret = 0; + } goto out; + } ret = do_pwrite(fd, buf, bufsz, bufsz * 10); if (ret) @@ -379,8 +395,14 @@ static int test07(int fd, int testnum) /* preallocate 4M space to file */ ret = do_fallocate(fd, 0, filsz, 0); - if (ret < 0) + if (ret < 0) { + /* Report success if fs doesn't support fallocate */ + if (errno == EOPNOTSUPP) { + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); + ret = 0; + } goto out; + } ret = do_pwrite(fd, buf, bufsz, bufsz * 10); if (ret) From gnehzuil.liu@gmail.com Fri May 31 12:07:02 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AC2967F37 for ; Fri, 31 May 2013 12:07:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 707D630404E for ; Fri, 31 May 2013 10:07:02 -0700 (PDT) X-ASG-Debug-ID: 1370020017-04cb6c5af770600001-NocioJ Received: from mail-pd0-f176.google.com (mail-pd0-f176.google.com [209.85.192.176]) by cuda.sgi.com with ESMTP id g4tVfDfMSBMDiXB7 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 31 May 2013 10:06:58 -0700 (PDT) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.176 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.176] Received: by mail-pd0-f176.google.com with SMTP id r11so2502250pdi.7 for ; Fri, 31 May 2013 10:06:57 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.176] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.176] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=/+uNEaBhyjKyayecvrq2J/vGfzbLOYDI0uAjkXi2BuE=; b=isQkD4o32i/1/EQjgTUL2McT47GuoAgu8GhZD79H4pTFonqnA20Y/PpvuYh1RQjt7R 7lkAupkzCHVNj7SYDqr/CDYvm4VzWqtQqxgmzyQGWGjbnQWv/R/PgtqmAVu1zzzbCem9 VxJqIb+oQ6RI0EDKGLRB8g3VUwqb3V2D0r/y4QHMlSPWmMcEgXlp3550+KMU/5Ra8SQq OYO/RwFrCauxtIvFozUVMneI/oqvljmgbN2tPqvGvQUC5PtVGO1cpMB0xkIa+/Ah4DpY KKdiBXngjikZJTrUzWh7oSN7D5APb99DlV2bq513K8zXDzg/PPHt5OCVo83d8qoAal1K 8pTg== X-Received: by 10.69.12.65 with SMTP id eo1mr13719840pbd.205.1370020017778; Fri, 31 May 2013 10:06:57 -0700 (PDT) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPSA id ri8sm47478080pbc.3.2013.05.31.10.06.54 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 31 May 2013 10:06:57 -0700 (PDT) Date: Sat, 1 Jun 2013 01:24:56 +0800 From: Zheng Liu To: Eric Sandeen Cc: xfs-oss , ext4 development Subject: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate Message-ID: <20130531172456.GB6915@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate Mail-Followup-To: Eric Sandeen , xfs-oss , ext4 development References: <51A8C59B.3030308@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51A8C59B.3030308@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-pd0-f176.google.com[209.85.192.176] X-Barracuda-Start-Time: 1370020018 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132572 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Fri, May 31, 2013 at 10:45:31AM -0500, Eric Sandeen wrote: > currently the seek_sanity_test (generic/285) fails on ext3 > or ext2 due to fallocate() failures. Just ignore that test > if the fs doesn't support fallocate. Hi Eric, I remember that my patch had been applied [1]. But stranger I couldn't find it in xfstests tree. However, I think that your patch is better. 1. http://oss.sgi.com/archives/xfs/2013-05/msg00534.html - Zheng > > Signed-off-by: Eric Sandeen > --- > > diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c > index cd3b1ee..fbf5a8c 100644 > --- a/src/seek_sanity_test.c > +++ b/src/seek_sanity_test.c > @@ -96,9 +96,13 @@ static int do_fallocate(int fd, off_t offset, off_t length, int mode) > int ret; > > ret = fallocate(fd, mode, offset, length); > - if (ret) > + if (ret) { > + /* Don't warn about a filesystem w/o fallocate support */ > + if (errno == EOPNOTSUPP) > + return ret; > fprintf(stderr, " ERROR %d: Failed to preallocate " > "space to %ld bytes\n", errno, (long) length); > + } > > return ret; > } > @@ -290,8 +294,14 @@ static int test09(int fd, int testnum) > > /* preallocate 8M space to file */ > ret = do_fallocate(fd, 0, filsz, 0); > - if (ret < 0) > + if (ret < 0) { > + /* Report success if fs doesn't support fallocate */ > + if (errno == EOPNOTSUPP) { > + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); > + ret = 0; > + } > goto out; > + } > > ret = do_pwrite(fd, buf, bufsz, bufsz * 10); > if (!ret) { > @@ -336,8 +346,14 @@ static int test08(int fd, int testnum) > > /* preallocate 4M space to file */ > ret = do_fallocate(fd, 0, filsz, 0); > - if (ret < 0) > + if (ret < 0) { > + /* Report success if fs doesn't support fallocate */ > + if (errno == EOPNOTSUPP) { > + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); > + ret = 0; > + } > goto out; > + } > > ret = do_pwrite(fd, buf, bufsz, bufsz * 10); > if (ret) > @@ -379,8 +395,14 @@ static int test07(int fd, int testnum) > > /* preallocate 4M space to file */ > ret = do_fallocate(fd, 0, filsz, 0); > - if (ret < 0) > + if (ret < 0) { > + /* Report success if fs doesn't support fallocate */ > + if (errno == EOPNOTSUPP) { > + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); > + ret = 0; > + } > goto out; > + } > > ret = do_pwrite(fd, buf, bufsz, bufsz * 10); > if (ret) > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@redhat.com Fri May 31 12:15:58 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 67CBD7F37 for ; Fri, 31 May 2013 12:15:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 45A49304070 for ; Fri, 31 May 2013 10:15:58 -0700 (PDT) X-ASG-Debug-ID: 1370020557-04cb6c5afa714e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id uauHxqItTcd2lws2 for ; Fri, 31 May 2013 10:15:57 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4VHFunx002296 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 31 May 2013 13:15:57 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4VHFtxr021549 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 31 May 2013 13:15:56 -0400 Message-ID: <51A8DACB.2030806@redhat.com> Date: Fri, 31 May 2013 12:15:55 -0500 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 To: xfs-oss , ext4 development Subject: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate References: <51A8C59B.3030308@redhat.com> <20130531172456.GB6915@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate In-Reply-To: <20130531172456.GB6915@gmail.com> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1370020557 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 5/31/13 12:24 PM, Zheng Liu wrote: > On Fri, May 31, 2013 at 10:45:31AM -0500, Eric Sandeen wrote: >> currently the seek_sanity_test (generic/285) fails on ext3 >> or ext2 due to fallocate() failures. Just ignore that test >> if the fs doesn't support fallocate. > > Hi Eric, > > I remember that my patch had been applied [1]. But stranger I couldn't > find it in xfstests tree. However, I think that your patch is better. > > 1. http://oss.sgi.com/archives/xfs/2013-05/msg00534.html Oh, right, I had forgotten about that. Rich, any idea? I don't care which patch goes in.... -Eric > - Zheng > >> >> Signed-off-by: Eric Sandeen >> --- >> >> diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c >> index cd3b1ee..fbf5a8c 100644 >> --- a/src/seek_sanity_test.c >> +++ b/src/seek_sanity_test.c >> @@ -96,9 +96,13 @@ static int do_fallocate(int fd, off_t offset, off_t length, int mode) >> int ret; >> >> ret = fallocate(fd, mode, offset, length); >> - if (ret) >> + if (ret) { >> + /* Don't warn about a filesystem w/o fallocate support */ >> + if (errno == EOPNOTSUPP) >> + return ret; >> fprintf(stderr, " ERROR %d: Failed to preallocate " >> "space to %ld bytes\n", errno, (long) length); >> + } >> >> return ret; >> } >> @@ -290,8 +294,14 @@ static int test09(int fd, int testnum) >> >> /* preallocate 8M space to file */ >> ret = do_fallocate(fd, 0, filsz, 0); >> - if (ret < 0) >> + if (ret < 0) { >> + /* Report success if fs doesn't support fallocate */ >> + if (errno == EOPNOTSUPP) { >> + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); >> + ret = 0; >> + } >> goto out; >> + } >> >> ret = do_pwrite(fd, buf, bufsz, bufsz * 10); >> if (!ret) { >> @@ -336,8 +346,14 @@ static int test08(int fd, int testnum) >> >> /* preallocate 4M space to file */ >> ret = do_fallocate(fd, 0, filsz, 0); >> - if (ret < 0) >> + if (ret < 0) { >> + /* Report success if fs doesn't support fallocate */ >> + if (errno == EOPNOTSUPP) { >> + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); >> + ret = 0; >> + } >> goto out; >> + } >> >> ret = do_pwrite(fd, buf, bufsz, bufsz * 10); >> if (ret) >> @@ -379,8 +395,14 @@ static int test07(int fd, int testnum) >> >> /* preallocate 4M space to file */ >> ret = do_fallocate(fd, 0, filsz, 0); >> - if (ret < 0) >> + if (ret < 0) { >> + /* Report success if fs doesn't support fallocate */ >> + if (errno == EOPNOTSUPP) { >> + fprintf(stdout, "Test skipped as fs doesn't support fallocate.\n"); >> + ret = 0; >> + } >> goto out; >> + } >> >> ret = do_pwrite(fd, buf, bufsz, bufsz * 10); >> if (ret) >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs From rjohnston@sgi.com Fri May 31 14:02:42 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C447B7F37 for ; Fri, 31 May 2013 14:02:42 -0500 (CDT) Received: from xmail.sgi.com (pv-excas2-dc21.corp.sgi.com [137.38.106.9]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7E011304075; Fri, 31 May 2013 12:02:39 -0700 (PDT) Received: from [134.15.0.113] (134.15.0.113) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.2.318.1; Fri, 31 May 2013 14:01:30 -0500 Message-ID: <51A8F3CE.4030801@sgi.com> Date: Fri, 31 May 2013 14:02:38 -0500 From: Rich Johnston User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , ext4 development Subject: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate References: <51A8C59B.3030308@redhat.com> <20130531172456.GB6915@gmail.com> <51A8DACB.2030806@redhat.com> In-Reply-To: <51A8DACB.2030806@redhat.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.0.113] On 05/31/2013 12:15 PM, Eric Sandeen wrote: > On 5/31/13 12:24 PM, Zheng Liu wrote: >> On Fri, May 31, 2013 at 10:45:31AM -0500, Eric Sandeen wrote: >>> currently the seek_sanity_test (generic/285) fails on ext3 >>> or ext2 due to fallocate() failures. Just ignore that test >>> if the fs doesn't support fallocate. >> >> Hi Eric, >> >> I remember that my patch had been applied [1]. But stranger I couldn't >> find it in xfstests tree. However, I think that your patch is better. >> >> 1. http://oss.sgi.com/archives/xfs/2013-05/msg00534.html > > Oh, right, I had forgotten about that. Rich, any idea? No other than it was a Friday. My apologies Zheng. Zheng as your's should have been committed, what do you want me to do? --Rich > > I don't care which patch goes in.... > > -Eric > From bpm@sgi.com Fri May 31 14:26:16 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 59EB77F37 for ; Fri, 31 May 2013 14:26:16 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9820EAC00E; Fri, 31 May 2013 12:26:15 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 2D48D500B4B; Fri, 31 May 2013 14:26:15 -0500 (CDT) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS fixes for 3.10-rc4 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20130531192615.2D48D500B4B@whiskey.americas.sgi.com> Date: Fri, 31 May 2013 14:26:15 -0500 (CDT) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull these XFS fixes for-rc4. There are fixes for a nested transaction in quota code, clearing of suid/sgid bits on truncate, and a fix for recovery. There are also some fixes for CRC enabled filesystems: a fix for the reserved block count of remote symlinks, and a fix for corruption in freespace blocks. We're adding support for userspace detection of CRC enabled filesystems with a fsgeom flag, and disabling the swap extents ioctl on CRC enabled filesystems since it is unimplemented and causes corruption. Thanks, Ben The following changes since commit 7ae077802c9f12959a81fa1a16c1ec2842dbae05: xfs: remote attribute lookups require the value length (2013-05-24 16:31:20 -0500) are available in the git repository at: git://oss.sgi.com/xfs/xfs tags/for-linus-v3.10-rc4 for you to fetch changes up to e400d27d1690d609f203f2d7d8efebc98cbc3089: xfs: fix dir3 freespace block corruption (2013-05-30 17:22:54 -0500) ---------------------------------------------------------------- xfs: fixes for 3.10-rc4 - Fix nested transactions in xfs_qm_scall_setqlim - Clear suid/sgid bits when we truncate with size update - Fix recovery for split buffers - Fix block count on remote symlinks - Add fsgeom flag for v5 superblock support - Disable XFS_IOC_SWAPEXT for CRC enabled filesystems - Fix dirv3 freespace block corruption ---------------------------------------------------------------- Dave Chinner (7): xfs: avoid nesting transactions in xfs_qm_scall_setqlim() xfs: kill suid/sgid through the truncate path. xfs: fix split buffer vector log recovery support xfs: fix incorrect remote symlink block count xfs: add fsgeom flag for v5 superblock support. xfs: disable swap extents ioctl on CRC enabled filesystems xfs: fix dir3 freespace block corruption fs/xfs/xfs_buf_item.c | 7 +------ fs/xfs/xfs_dfrag.c | 8 ++++++++ fs/xfs/xfs_dir2_format.h | 1 + fs/xfs/xfs_dir2_node.c | 13 ++++++------- fs/xfs/xfs_fs.h | 1 + fs/xfs/xfs_fsops.c | 4 +++- fs/xfs/xfs_iops.c | 47 ++++++++++++++++++++++++++++++++--------------- fs/xfs/xfs_log_recover.c | 11 +++++++++++ fs/xfs/xfs_qm_syscalls.c | 40 +++++++++++++++++++++++----------------- fs/xfs/xfs_symlink.c | 20 ++++++-------------- 10 files changed, 92 insertions(+), 60 deletions(-) From bpm@sgi.com Fri May 31 16:03:07 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 941417F37 for ; Fri, 31 May 2013 16:03:07 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3D88D8F808F; Fri, 31 May 2013 14:03:04 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id EDAE1500B4B; Fri, 31 May 2013 16:03:03 -0500 (CDT) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS fixes #2 for 3.10-rc4 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20130531210303.EDAE1500B4B@whiskey.americas.sgi.com> Date: Fri, 31 May 2013 16:03:03 -0500 (CDT) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull these fixes for XFS. Here are several fixes that are relevant on CRC enabled XFS filesystems. They are followed by a rework of the remote attribute code so that each block of the attribute contains a header with a CRC. Previously there was a CRC header per extent in the remote attribute code, but this was untenable because it was not possible to know how many extents would be allocated for the attribute until after the allocation has completed, due to the fragmentation of free space. This became complicated because the size of the headers needs to be added to the length of the payload to get the overall length required for the allocation. With a header per block, things are less complicated at the cost of a little space. I would have preferred to defer this and the rest of the CRC queue to 3.11 to mitigate risk for existing non-crc users in 3.10. Doing so would require setting a feature bit for the on-disk changes, and so I have been pressured into sending this pull request by Eric Sandeen and David Chinner from Red Hat. I'll send another pull request or two with the rest of the CRC queue next week. Thanks, Ben The following changes since commit e400d27d1690d609f203f2d7d8efebc98cbc3089: xfs: fix dir3 freespace block corruption (2013-05-30 17:22:54 -0500) are available in the git repository at: git://oss.sgi.com/xfs/xfs tags/for-linus-v3.10-rc4-crc-xattr-fixes for you to fetch changes up to 7bc0dc271e494e12be3afd3c6431e5216347c624: xfs: rework remote attr CRCs (2013-05-30 17:26:31 -0500) ---------------------------------------------------------------- xfs: extended attribute fixes for CRCs - Remove assert on count of remote attribute CRC headers - Fix the number of blocks read in for remote attributes - Zero remote attribute tails properly - Fix mapping of remote attribute buffers to have correct length - initialize temp leaf properly in xfs_attr3_leaf_unbalance, and xfs_attr3_leaf_compact - Rework remote atttributes to have a header per block ---------------------------------------------------------------- Dave Chinner (7): xfs: remote attribute allocation may be contiguous xfs: remote attribute read too short xfs: remote attribute tail zeroing does too much xfs: correctly map remote attr buffers during removal xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance xfs: fully initialise temp leaf in xfs_attr3_leaf_compact xfs: rework remote attr CRCs fs/xfs/xfs_attr_leaf.c | 71 ++++++--- fs/xfs/xfs_attr_remote.c | 408 +++++++++++++++++++++++++++++------------------ fs/xfs/xfs_attr_remote.h | 10 ++ fs/xfs/xfs_buf.c | 1 + 4 files changed, 307 insertions(+), 183 deletions(-) From bpm@sgi.com Fri May 31 16:54:12 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 117707F37 for ; Fri, 31 May 2013 16:54:12 -0500 (CDT) Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 73E59AC006; Fri, 31 May 2013 14:54:11 -0700 (PDT) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id CDF9D500B4B; Fri, 31 May 2013 16:54:10 -0500 (CDT) Date: Fri, 31 May 2013 16:54:10 -0500 From: Ben Myers To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/9] xfs: fix dir3 freespace block corruption Message-ID: <20130531215410.GH20932@sgi.com> References: <1369636707-15150-1-git-send-email-david@fromorbit.com> <20130528083717.GU29466@dastard> <20130530191553.GG20932@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130530191553.GG20932@sgi.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Thu, May 30, 2013 at 02:15:53PM -0500, Ben Myers wrote: > On Tue, May 28, 2013 at 06:37:17PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > When the directory freespace index grows to a second block (2017 > > 4k data blocks in the directory), the initialisation of the second > > new block header goes wrong. The write verifier fires a corruption > > error indicating that the block number in the header is zero. This > > was being tripped by xfs/110. > > > > The problem is that the initialisation of the new block is done just > > fine in xfs_dir3_free_get_buf(), but the caller then users a dirv2 > > structure to zero on-disk header fields that xfs_dir3_free_get_buf() > > has already zeroed. These lined up with the block number in the dir > > v3 header format. > > > > While looking at this, I noticed that the struct xfs_dir3_free_hdr() > > had 4 bytes of padding in it that wasn't defined as padding or being > > zeroed by the initialisation. Add a pad field declaration and fully > > zero the on disk and in-core headers in xfs_dir3_free_get_buf() so > > that this is never an issue in the future. Note that this doesn't > > change the on-disk layout, just makes the 32 bits of padding in the > > layout explicit. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/xfs_dir2_format.h | 1 + > > fs/xfs/xfs_dir2_node.c | 13 ++++++------- > > 2 files changed, 7 insertions(+), 7 deletions(-) > > > > diff --git a/fs/xfs/xfs_dir2_format.h b/fs/xfs/xfs_dir2_format.h > > index a3b1bd8..995f1f5 100644 > > --- a/fs/xfs/xfs_dir2_format.h > > +++ b/fs/xfs/xfs_dir2_format.h > > @@ -715,6 +715,7 @@ struct xfs_dir3_free_hdr { > > __be32 firstdb; /* db of first entry */ > > __be32 nvalid; /* count of valid entries */ > > __be32 nused; /* count of used entries */ > > + __be32 pad; /* 64 bit alignment. */ > > Yeah, my count also puts nused short of 64 bit alignment. Looks ok. > > Reviewed-by: Ben Myers Applied this. From bounce@directsourceincome.com Fri May 31 20:29:48 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=2.0 required=5.0 tests=HTML_IMAGE_ONLY_16, HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C68DB7F37 for ; Fri, 31 May 2013 20:29:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8B34A8F8039 for ; Fri, 31 May 2013 18:29:45 -0700 (PDT) X-ASG-Debug-ID: 1370050182-04bdf0233da0320001-NocioJ Received: from gateway07.websitewelcome.com (gateway07.websitewelcome.com [69.56.224.23]) by cuda.sgi.com with ESMTP id AL8Q9FQEIA9ThhCN for ; Fri, 31 May 2013 18:29:43 -0700 (PDT) X-Barracuda-Envelope-From: bounce@directsourceincome.com X-Barracuda-Apparent-Source-IP: 69.56.224.23 Received: by gateway07.websitewelcome.com (Postfix, from userid 5007) id ABB2C6905711B; Fri, 31 May 2013 20:29:35 -0500 (CDT) Received: from ham01.websitewelcome.com (ham.websitewelcome.com [173.192.111.52]) by gateway07.websitewelcome.com (Postfix) with ESMTP id 960D9690570E1 for ; Fri, 31 May 2013 20:29:35 -0500 (CDT) Received: by ham01.websitewelcome.com (Postfix, from userid 666) id 8074F43AD827F; Fri, 31 May 2013 20:29:52 -0500 (CDT) Received: from gator1757.hostgator.com (gator1757.hostgator.com [184.173.215.183]) by ham01.websitewelcome.com (Postfix) with ESMTP id 6B50943A741A3 for ; Fri, 31 May 2013 20:25:18 -0500 (CDT) Received: from robert by gator1757.hostgator.com with local (Exim 4.80) (envelope-from ) id 1UiaZ9-0000tE-L1 for xfs@oss.sgi.com; Fri, 31 May 2013 20:25:07 -0500 To: xfs@oss.sgi.com Subject: Get returns while using a true internet suite with video email, autoresponse, and conference Message-ID: X-ASG-Orig-Subj: Get returns while using a true internet suite with video email, autoresponse, and conference Date: Fri, 31 May 2013 19:32:03 -0500 From: "Todd" Reply-To: info@directsourceincome.com MIME-Version: 1.0 X-Mailer-LID: 7 List-Unsubscribe: X-Mailer-RecptId: 12545 X-Mailer-SID: 17 X-Mailer-Sent-By: 1 Content-Type: multipart/alternative; charset="UTF-8"; boundary="b1_843a9da84683159d674abb1c6c1b422d" Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator1757.hostgator.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [1026 32007] / [47 12] X-AntiAbuse: Sender Address Domain - directsourceincome.com X-BWhitelist: no X-Source: /usr/bin/php X-Source-Args: php /home/robert/public_html/Interspire_Email_Marketer_1_User-6.1.0/emailmarketer/admin/cron/cron.php X-Source-Dir: directsourceincome.com:/public_html/Interspire_Email_Marketer_1_User-6.1.0/emailmarketer/admin/cron X-Source-Sender: X-Source-Auth: robert X-Email-Count: 188 X-Source-Cap: cm9iZXJ0O3JvYmVydDtnYXRvcjE3NTcuaG9zdGdhdG9yLmNvbQ== X-Barracuda-Connect: gateway07.websitewelcome.com[69.56.224.23] X-Barracuda-Start-Time: 1370050183 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.63 X-Barracuda-Spam-Status: No, SCORE=0.63 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_IMAGE_ONLY_16, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132606 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.63 HTML_IMAGE_ONLY_16 BODY: HTML: images with 1200-1600 bytes of words 0.00 HTML_MESSAGE BODY: HTML included in message --b1_843a9da84683159d674abb1c6c1b422d Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit Your email client cannot read this email. To view it online, please go here: http://directsourceincome.com/Interspire_Email_Marketer_1_User-6.1.0/emailmarketer/display.php?M=12545&C=8a7fa2e0bee05cb9e7d801568118a6d9&S=17&L=7&N=5 Hello, Please check out this NEW "Instant Reseller" program! Loaded with true internet based products that pays you and your friends 100% in residual commissions! Plus they have a 100% commission quick start program. Look at these amazing and powerful Marketing Tools you get to resell... - A professional auto responder service, better than aweber or getresponse! - An amazing video email service - A conference system, similar to GoTomeeting Plus so much more... YES! And the company is paying out 100% commissions on all product sales! Check it out now, as the quicker you get started the sooner you can be in immediate profit with your peeps! Check out this life changing offer now! >>> http://directsourceincome.com/Interspire_Email_Marketer_1_User-6.1.0/emailmarketer/link.php?M=12545&N=17&L=7&F=T To stop receiving these emails:http://directsourceincome.com/Interspire_Email_Marketer_1_User-6.1.0/emailmarketer/unsubscribe.php?M=12545&C=8a7fa2e0bee05cb9e7d801568118a6d9&L=7&N=17


Direct Source
Office 22394 N 77th Street
Scottsdale AZ --b1_843a9da84683159d674abb1c6c1b422d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 8bit Hello,

Please check out this NEW "Instant Reseller" program!
Loaded with true internet based products that
pays you and your friends 100% in residual commissions!

Plus they have a 100% commission quick start program.

Look at these amazing and powerful Marketing Tools you get to resell...

- A professional auto responder service, better than aweber or getresponse!
- An amazing video email service
- A conference system, similar to GoTomeeting

Plus so much more...

YES!

And the company is paying out 100% commissions on all product sales!

Check it out now, as the quicker you get started the sooner
you can be in immediate profit with your peeps!

Check out this life changing offer now!

>>> CLICK HERE



Business Solutions
Office 22394 N 77th Street Scottsdale AZ Phone
Click here to unsubscribe --b1_843a9da84683159d674abb1c6c1b422d-- From sandeen@sandeen.net Fri May 31 23:51:38 2013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D2F797F37 for ; Fri, 31 May 2013 23:51:38 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B44E58F8033 for ; Fri, 31 May 2013 21:51:35 -0700 (PDT) X-ASG-Debug-ID: 1370062294-04bdf0233fab9e0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 8no2T3EXDPpXe1hA for ; Fri, 31 May 2013 21:51:34 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.77] (eric-iphone.sandeen.net [10.0.0.77]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id C968461F8727; Fri, 31 May 2013 23:51:33 -0500 (CDT) References: <51A8C59B.3030308@redhat.com> <20130531172456.GB6915@gmail.com> <51A8DACB.2030806@redhat.com> <51A8F3CE.4030801@sgi.com> Mime-Version: 1.0 (1.0) In-Reply-To: <51A8F3CE.4030801@sgi.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Message-Id: <5E41AE1A-97B8-4746-84DA-A6C0B9A714B3@sandeen.net> Cc: Eric Sandeen , ext4 development , xfs-oss X-Mailer: iPhone Mail (10A523) From: Eric Sandeen Subject: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate Date: Fri, 31 May 2013 23:51:32 -0500 X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix seek_sanity_test for fs w/o fallocate To: Rich Johnston X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1370062294 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.132620 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars On May 31, 2013, at 2:02 PM, Rich Johnston wrote: > On 05/31/2013 12:15 PM, Eric Sandeen wrote: >> On 5/31/13 12:24 PM, Zheng Liu wrote: >>> On Fri, May 31, 2013 at 10:45:31AM -0500, Eric Sandeen wrote: >>>> currently the seek_sanity_test (generic/285) fails on ext3 >>>> or ext2 due to fallocate() failures. Just ignore that test >>>> if the fs doesn't support fallocate. >>>=20 >>> Hi Eric, >>>=20 >>> I remember that my patch had been applied [1]. But stranger I couldn't >>> find it in xfstests tree. However, I think that your patch is better. >>>=20 >>> 1. http://oss.sgi.com/archives/xfs/2013-05/msg00534.html >>=20 >> Oh, right, I had forgotten about that. Rich, any idea? >=20 > No other than it was a Friday. My apologies Zheng. > Zheng as your's should have been committed, what do you want me to do? >=20 Actually let's merge mine since it allows testing on ext2/3. The other just= disables those filesystems... -Eric > --Rich >=20 >>=20 >> I don't care which patch goes in.... >>=20 >> -Eric >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs >=20