From owner-xfs@oss.sgi.com Mon Sep 1 21:39:43 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m824dfum005288 for ; Mon, 1 Sep 2008 21:39:42 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA02593 for ; Tue, 2 Sep 2008 14:41:06 +1000 Message-ID: <48BCC5B1.7080300@sgi.com> Date: Tue, 02 Sep 2008 14:48:49 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Filesystem corruption writing out unlinked inodes Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean I've been looking into a case of filesystem corruption and found that we are flushing unlinked inodes after the inode cluster has been freed - and potentially reallocated as something else. The case happens when we unlink the last inode in a cluster and that triggers the cluster to be released. The code path of interest here is: xfs_fs_clear_inode() ->xfs_inactive() ->xfs_ifree() ->xfs_ifree_cluster() ->xfs_reclaim() -> queues inode on deleted inodes list ... and later on xfs_syncsub() ->xfs_finish_reclaim_all() ->xfs_finish_reclaim() ->xfs_iflush() When the inode is unlinked it gets logged in a transaction so xfs_iflush() considers it dirty and writes it out but by this time the cluster has been reallocated. If the cluster is reallocated as user data then the checks in xfs_imap_to_bp will complain because the inode magic will be incorrect but if the cluster is reallocated as another inode cluster then these checks wont detect that. I modified xfs_iflush() to bail out if we try to flush an unlinked inode (ie nlink == 0) and that avoids the corruption but xfs_repair now has problems with inodes marked as free but with non-zero nlink counts. Do we really want to write out unlinked inodes? Seems a bit redundant. Other options could be to delay the release of the inode cluster until the inode has been flushed or move the flush into xfs_ifree() before releasing the cluster. Looking at xfs_ifree_cluster() it scans the inodes in a cluster and tries to lock them and mark them stale - maybe we can leverage this and avoid flushing staled inodes. If so we'd need to tighten up the locking. Does anyone have suggestions which direction we should take? Lachlan From owner-xfs@oss.sgi.com Mon Sep 1 21:52:50 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,UPPERCASE_50_75 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m824ql6q006479 for ; Mon, 1 Sep 2008 21:52:49 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA02799; Tue, 2 Sep 2008 14:54:12 +1000 Message-ID: <48BCC8C2.7040103@sgi.com> Date: Tue, 02 Sep 2008 15:01:54 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH] buffer flag NONE is actually DONE Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean Amazing but true. --- a/fs/xfs/xfsidbg.c 2008-09-02 14:52:11.000000000 +1000 +++ b/fs/xfs/xfsidbg.c 2008-09-02 14:51:04.000000000 +1000 @@ -1926,7 +1926,7 @@ static int kdbm_iptraceaddr( static char *bp_flag_vals[] = { /* 0 */ "READ", "WRITE", "MAPPED", "PARTIAL", "ASYNC", -/* 5 */ "NONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", +/* 5 */ "DONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", /* 10 */ "FORCEIO", "FLUSH", "READ_AHEAD", "DIRECTIO", "LOCK", /* 15 */ "TRYLOCK", "DONT_BLOCK", "PAGE_CACHE", "KMEM_ALLOC", "RUN_QUEUES", /* 20 */ "PRIVATE_BH", "DELWRI_Q", From owner-xfs@oss.sgi.com Mon Sep 1 22:14:04 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m825E4em008385 for ; Mon, 1 Sep 2008 22:14:04 -0700 X-ASG-Debug-ID: 1220332528-65d6024e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 089791BCD1A3 for ; Mon, 1 Sep 2008 22:15:28 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id MoCHrFWjHc5kTIpL for ; Mon, 01 Sep 2008 22:15:28 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEAHhovEh5LD0i/2dsb2JhbACyL4Fp X-IronPort-AV: E=Sophos;i="4.32,313,1217773800"; d="scan'208";a="195568151" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 02 Sep 2008 14:45:26 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KaOEe-0002Qa-TO; Tue, 02 Sep 2008 15:15:24 +1000 Date: Tue, 2 Sep 2008 15:15:24 +1000 From: Dave Chinner To: Lachlan McIlroy Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Filesystem corruption writing out unlinked inodes Subject: Re: Filesystem corruption writing out unlinked inodes Message-ID: <20080902051524.GC15962@disturbed> Mail-Followup-To: Lachlan McIlroy , xfs@oss.sgi.com References: <48BCC5B1.7080300@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BCC5B1.7080300@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220332530 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4407 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 02:48:49PM +1000, Lachlan McIlroy wrote: > I've been looking into a case of filesystem corruption and found > that we are flushing unlinked inodes after the inode cluster has > been freed - and potentially reallocated as something else. The > case happens when we unlink the last inode in a cluster and that > triggers the cluster to be released. > > The code path of interest here is: > > xfs_fs_clear_inode() > ->xfs_inactive() > ->xfs_ifree() > ->xfs_ifree_cluster() Which should be marking the buffer as XBF_STALE, right? Which means the buffer is torn down at transaction completion rather than queued into the AIL for writeback? > ->xfs_reclaim() > -> queues inode on deleted inodes list > > ... and later on > > xfs_syncsub() > ->xfs_finish_reclaim_all() > ->xfs_finish_reclaim() > ->xfs_iflush() And here we re-read the buffer because it had been marked as stale and completely torn down when released... > When the inode is unlinked it gets logged in a transaction so > xfs_iflush() considers it dirty and writes it out but by this > time the cluster has been reallocated. If the cluster is > reallocated as user data then the checks in xfs_imap_to_bp will > complain because the inode magic will be incorrect but if the > cluster is reallocated as another inode cluster then these checks > wont detect that. Right, because we've allowed the extent to be reused before we've really finished with it.... > I modified xfs_iflush() to bail out if we try to flush an > unlinked inode (ie nlink == 0) and that avoids the corruption but > xfs_repair now has problems with inodes marked as free but with > non-zero nlink counts. You also break subtly break bulkstat by not writing out unlinked inodes. That is, bulkstat gets a bunch of inode data from the AGI btree and puts it into a temporary buffer. It then unlocks the AGI to read the inode buffers it found in the AGI. This can then race with unlink and cluster frees. If we have memory pressure, then the buffer pages can be freed, resulting in reading the inode buffers back from disk during bulkstat. Bulkstat will now see inode buffers with linked inodes that have actually been freed.... > Do we really want to write out unlinked > inodes? Seems a bit redundant. The bulkstat problem makes it necessary. Otherwise, we could rely totally on the contents of the AGI and the AGI unlinked lists to determine what inodes are linked or unlinked during recovery or repair without problems. > Other options could be to delay the release of the inode cluster > until the inode has been flushed or move the flush into xfs_ifree() > before releasing the cluster. Looking at xfs_ifree_cluster() it > scans the inodes in a cluster and tries to lock them and mark them > stale - maybe we can leverage this and avoid flushing staled inodes. > If so we'd need to tighten up the locking. Why aren't all inodes in memory marked XFS_ISTALE by the time xfs_ifree_cluster() completes? That is what is supposed to be used to avoid writeback of inodes in freed cluster buffers. Basically xfs_ifree_cluster does: loop over in memory inodes: did we get the flush lock on them? yes - mark them XFS_ISTALE no - they must be locked for flush and attached to the cluster buffer get the cluster buffer loop over log items on cluster buffer if XFS_LI_INODE mark it XFS_ISTALE loop over all in memory inodes that were locked attach them to the cluster buffer This is supposed to catch all the inodes in memory and mark them XFS_ISTALE to prevent them from being written back once the transaction is committed. The question is - how are dirty inodes slipping through this? If we are freeing the cluster buffer, then there can be no other active references to any of the inodes, so if they are dirty it has to be due to inactivation transactions and so should be in the log and attached to the buffer due to removal from the unlinked list. The question is - which bit of this is not working? i.e. what is the race condition that is allowing dirty inodes to slip through the locking here? Hmmm - I see that xfs_iflush() doesn't check for XFS_ISTALE when flushing out inodes. Perhaps you could check to see if we are writing an inode marked as such..... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Mon Sep 1 22:15:52 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m825FpBq008894 for ; Mon, 1 Sep 2008 22:15:51 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA03384; Tue, 2 Sep 2008 15:17:15 +1000 Message-ID: <48BCCE29.3070707@sgi.com> Date: Tue, 02 Sep 2008 15:24:57 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH] Don't do I/O beyond eof when unreserving space Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean When unreserving space with boundaries that are not block aligned we round up the start and round down the end boundaries and then use this function, xfs_zero_remaining_bytes(), to zero the parts of the blocks that got dropped during the rounding. The problem is we don't consider if these blocks are beyond eof. Worse still is if we encounter delayed allocations beyond eof we will try to use the magic delayed allocation block number as a real block number. If the file size is ever extended to expose these blocks then we'll go through xfs_zero_eof() to zero them anyway. --- a/fs/xfs/xfs_vnodeops.c 2008-09-02 14:54:24.000000000 +1000 +++ b/fs/xfs/xfs_vnodeops.c 2008-09-02 14:51:03.000000000 +1000 @@ -3176,6 +3176,12 @@ xfs_zero_remaining_bytes( int nimap; int error = 0; + if (startoff >= ip->i_size) + return 0; + + if (endoff > ip->i_size) + endoff = ip->i_size; + bp = xfs_buf_get_noaddr(mp->m_sb.sb_blocksize, XFS_IS_REALTIME_INODE(ip) ? mp->m_rtdev_targp : mp->m_ddev_targp); From owner-xfs@oss.sgi.com Mon Sep 1 22:39:41 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m825ddvk010703 for ; Mon, 1 Sep 2008 22:39:40 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA03732; Tue, 2 Sep 2008 15:41:04 +1000 Message-ID: <48BCD3BE.5040107@sgi.com> Date: Tue, 02 Sep 2008 15:48:46 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH] Tweak tracing allocation sizes Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean The size of a single ktrace entry is 16 pointers so 128 bytes. For the case of XFS_RW_KTRACE_SIZE which is 128 entries this equates to 16KB and on a system with 4KB pages that is under memory pressure this can stall that process for a significant time while it hunts for 4 free pages. Cutting this value back to 32 means it will only need one page. Initialize the ktrace system with a zone size of 32 so calls to ktrace_alloc() that want 32 trace entries (ie 1 page) will go through the ktrace entry zone. Bump INODE_TRACE_SIZE from 16 to 32 since if we are going to allocate half a page we might as well give it a full page and have it allocate from the zone too. More can be done here but these changes reduce the liklihood of hitting deadlocks due to memory pressure. --- a/fs/xfs/linux-2.6/xfs_lrw.h 2008-09-02 15:28:27.000000000 +1000 +++ b/fs/xfs/linux-2.6/xfs_lrw.h 2008-08-22 14:50:55.000000000 +1000 @@ -28,7 +28,7 @@ struct xfs_iomap; /* * Defines for the trace mechanisms in xfs_lrw.c. */ -#define XFS_RW_KTRACE_SIZE 128 +#define XFS_RW_KTRACE_SIZE 32 #define XFS_READ_ENTER 1 #define XFS_WRITE_ENTER 2 --- a/fs/xfs/linux-2.6/xfs_super.c 2008-09-02 15:28:27.000000000 +1000 +++ b/fs/xfs/linux-2.6/xfs_super.c 2008-08-22 14:52:58.000000000 +1000 @@ -2151,7 +2151,7 @@ init_xfs_fs(void) printk(message); - ktrace_init(64); + ktrace_init(32); vn_init(); xfs_dir_startup(); --- a/fs/xfs/linux-2.6/xfs_vnode.h 2008-09-02 15:28:27.000000000 +1000 +++ b/fs/xfs/linux-2.6/xfs_vnode.h 2008-08-22 14:52:14.000000000 +1000 @@ -126,7 +126,7 @@ static inline void vn_atime_to_time_t(st */ #if defined(XFS_INODE_TRACE) -#define INODE_TRACE_SIZE 16 /* number of trace entries */ +#define INODE_TRACE_SIZE 32 /* number of trace entries */ #define INODE_KTRACE_ENTRY 1 #define INODE_KTRACE_EXIT 2 #define INODE_KTRACE_HOLD 3 From owner-xfs@oss.sgi.com Mon Sep 1 22:49:51 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m825no4C011832 for ; Mon, 1 Sep 2008 22:49:51 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA03976 for ; Tue, 2 Sep 2008 15:51:15 +1000 Message-ID: <48BCD622.1080406@sgi.com> Date: Tue, 02 Sep 2008 15:58:58 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: Filesystem corruption writing out unlinked inodes References: <48BCC5B1.7080300@sgi.com> <20080902051524.GC15962@disturbed> In-Reply-To: <20080902051524.GC15962@disturbed> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean Dave Chinner wrote: > On Tue, Sep 02, 2008 at 02:48:49PM +1000, Lachlan McIlroy wrote: >> I've been looking into a case of filesystem corruption and found >> that we are flushing unlinked inodes after the inode cluster has >> been freed - and potentially reallocated as something else. The >> case happens when we unlink the last inode in a cluster and that >> triggers the cluster to be released. >> >> The code path of interest here is: >> >> xfs_fs_clear_inode() >> ->xfs_inactive() >> ->xfs_ifree() >> ->xfs_ifree_cluster() > > Which should be marking the buffer as XBF_STALE, right? > Which means the buffer is torn down at transaction completion > rather than queued into the AIL for writeback? > >> ->xfs_reclaim() >> -> queues inode on deleted inodes list >> >> ... and later on >> >> xfs_syncsub() >> ->xfs_finish_reclaim_all() >> ->xfs_finish_reclaim() >> ->xfs_iflush() > > And here we re-read the buffer because it had been marked as > stale and completely torn down when released... > >> When the inode is unlinked it gets logged in a transaction so >> xfs_iflush() considers it dirty and writes it out but by this >> time the cluster has been reallocated. If the cluster is >> reallocated as user data then the checks in xfs_imap_to_bp will >> complain because the inode magic will be incorrect but if the >> cluster is reallocated as another inode cluster then these checks >> wont detect that. > > Right, because we've allowed the extent to be reused before we've > really finished with it.... > >> I modified xfs_iflush() to bail out if we try to flush an >> unlinked inode (ie nlink == 0) and that avoids the corruption but >> xfs_repair now has problems with inodes marked as free but with >> non-zero nlink counts. > > You also break subtly break bulkstat by not writing out unlinked > inodes. That is, bulkstat gets a bunch of inode data from the AGI > btree and puts it into a temporary buffer. It then unlocks the AGI > to read the inode buffers it found in the AGI. This can then race > with unlink and cluster frees. If we have memory pressure, then the > buffer pages can be freed, resulting in reading the inode buffers > back from disk during bulkstat. Bulkstat will now see inode buffers > with linked inodes that have actually been freed.... > >> Do we really want to write out unlinked >> inodes? Seems a bit redundant. > > The bulkstat problem makes it necessary. Otherwise, we could rely > totally on the contents of the AGI and the AGI unlinked lists to > determine what inodes are linked or unlinked during recovery or > repair without problems. > >> Other options could be to delay the release of the inode cluster >> until the inode has been flushed or move the flush into xfs_ifree() >> before releasing the cluster. Looking at xfs_ifree_cluster() it >> scans the inodes in a cluster and tries to lock them and mark them >> stale - maybe we can leverage this and avoid flushing staled inodes. >> If so we'd need to tighten up the locking. > > Why aren't all inodes in memory marked XFS_ISTALE by the > time xfs_ifree_cluster() completes? That is what is supposed to be > used to avoid writeback of inodes in freed cluster buffers. > > Basically xfs_ifree_cluster does: > > loop over in memory inodes: > > did we get the flush lock on them? > yes - mark them XFS_ISTALE > no - they must be locked for flush and > attached to the cluster buffer > > get the cluster buffer > > loop over log items on cluster buffer > if XFS_LI_INODE > mark it XFS_ISTALE > > loop over all in memory inodes that were locked > attach them to the cluster buffer > > This is supposed to catch all the inodes in memory and mark them > XFS_ISTALE to prevent them from being written back once the > transaction is committed. The question is - how are dirty inodes > slipping through this? > > If we are freeing the cluster buffer, then there can be no other > active references to any of the inodes, so if they are dirty it > has to be due to inactivation transactions and so should be in > the log and attached to the buffer due to removal from the > unlinked list. > > The question is - which bit of this is not working? i.e. what is the > race condition that is allowing dirty inodes to slip through the > locking here? > > Hmmm - I see that xfs_iflush() doesn't check for XFS_ISTALE when > flushing out inodes. Perhaps you could check to see if we are > writing an inode marked as such..... That's what I was suggesting. I'm just not sure about the assumption that if the flush lock cannot be acquired in xfs_ifree_cluster() then the inode must be in the process of being flushed. The flush could be aborted due to the inode being pinned or some other case and the inode never gets marked as stale. From owner-xfs@oss.sgi.com Mon Sep 1 22:53:46 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m825rjvi012505 for ; Mon, 1 Sep 2008 22:53:46 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA04033; Tue, 2 Sep 2008 15:55:05 +1000 Message-ID: <48BCD707.206@sgi.com> Date: Tue, 02 Sep 2008 16:02:47 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Fix use-after-free with buffers References: <48ABA9EC.5040902@sgi.com> <20080820125033.GA29680@infradead.org> In-Reply-To: <20080820125033.GA29680@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Wed, Aug 20, 2008 at 03:21:48PM +1000, Lachlan McIlroy wrote: >> XB_TRACE(bp, "rele", bp->b_relse); >> >> + ASSERT(atomic_read(&bp->b_hold) > 0); >> + >> if (unlikely(!hash)) { >> ASSERT(!bp->b_relse); >> if (atomic_dec_and_test(&bp->b_hold)) >> @@ -838,7 +840,6 @@ xfs_buf_rele( >> return; >> } >> >> - ASSERT(atomic_read(&bp->b_hold) > 0); > > Makes sense, but how is this related to the other bits of the > patch? All but log and iozero buffers should always be hashed. Okay, not specifically related. I'll split it out of this change. > >> @@ -732,6 +732,7 @@ xfs_buf_item_init( >> bip->bli_item.li_ops = &xfs_buf_item_ops; >> bip->bli_item.li_mountp = mp; >> bip->bli_buf = bp; >> + xfs_buf_hold(bp); > > These refcount changes look good to me. > >> +void >> +xfs_buf_item_free( >> + xfs_buf_log_item_t *bip) >> +{ >> +#ifdef XFS_TRANS_DEBUG >> + kmem_free(bip->bli_orig); >> + bip->bli_orig = NULL; >> + kmem_free(bip->bli_logged); >> + bip->bli_logged = NULL; >> +#endif /* XFS_TRANS_DEBUG */ >> + >> +#ifdef XFS_BLI_TRACE >> + ktrace_free(bip->bli_trace); >> +#endif >> + kmem_zone_free(xfs_buf_item_zone, bip); >> +} > > Faktoring this out makes sense, although you might want to remove the > zeroing of bip->bli_orig and bip->bli_logged while you're at it, so that > slab poisoning can do it's work. Okay, thanks, I'll post a V2. From owner-xfs@oss.sgi.com Mon Sep 1 22:54:44 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m825shMI012905 for ; Mon, 1 Sep 2008 22:54:43 -0700 X-ASG-Debug-ID: 1220334967-41bd00f80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 21F1B12FE216 for ; Mon, 1 Sep 2008 22:56:08 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id jLTNWMJIkms7Dpxt for ; Mon, 01 Sep 2008 22:56:08 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEAH9vvEh5LD0i/2dsb2JhbACyLoFp X-IronPort-AV: E=Sophos;i="4.32,313,1217773800"; d="scan'208";a="195597263" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 02 Sep 2008 15:26:05 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KaOs0-0003IM-U4; Tue, 02 Sep 2008 15:56:04 +1000 Date: Tue, 2 Sep 2008 15:56:04 +1000 From: Dave Chinner To: Lachlan McIlroy Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes Message-ID: <20080902055604.GD15962@disturbed> Mail-Followup-To: Lachlan McIlroy , xfs-dev , xfs-oss References: <48BCD3BE.5040107@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BCD3BE.5040107@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220334970 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 03:48:46PM +1000, Lachlan McIlroy wrote: > The size of a single ktrace entry is 16 pointers so 128 bytes. For the case > of XFS_RW_KTRACE_SIZE which is 128 entries this equates to 16KB and on a system > with 4KB pages that is under memory pressure this can stall that process for a > significant time while it hunts for 4 free pages. Cutting this value back to > 32 means it will only need one page. That will effectively render that type of tracing useless - 32 entries is not enough history to capture enough read/write/map/invalidate trace events to be meaningful. In the past I've often had to increase this to 256 or 512 entries to be able to capture the events necessary to debug problems... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Mon Sep 1 22:56:09 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m825u87W013384 for ; Mon, 1 Sep 2008 22:56:08 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA04118; Tue, 2 Sep 2008 15:57:32 +1000 Message-ID: <48BCD79B.1070100@sgi.com> Date: Tue, 02 Sep 2008 16:05:15 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH V2] Fix use-after-free with buffers Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean We have a use-after-free issue where log completions access buffers via the buffer log item and the buffer has already been freed. Fix this by taking a reference on the buffer when attaching the buffer log item and release the hold when the buffer log item is detached and we no longer need the buffer. Also create a new function xfs_buf_item_free() to combine some common code and move an ASSERT in xfs_buf_rele() so that we can catch more cases. --- a/fs/xfs/xfs_buf_item.c 2008-09-02 15:56:20.000000000 +1000 +++ b/fs/xfs/xfs_buf_item.c 2008-08-22 13:23:53.000000000 +1000 @@ -732,6 +732,7 @@ xfs_buf_item_init( bip->bli_item.li_ops = &xfs_buf_item_ops; bip->bli_item.li_mountp = mp; bip->bli_buf = bp; + xfs_buf_hold(bp); bip->bli_format.blf_type = XFS_LI_BUF; bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); @@ -867,6 +868,21 @@ xfs_buf_item_dirty( return (bip->bli_flags & XFS_BLI_DIRTY); } +void +xfs_buf_item_free( + xfs_buf_log_item_t *bip) +{ +#ifdef XFS_TRANS_DEBUG + kmem_free(bip->bli_orig); + kmem_free(bip->bli_logged); +#endif /* XFS_TRANS_DEBUG */ + +#ifdef XFS_BLI_TRACE + ktrace_free(bip->bli_trace); +#endif + kmem_zone_free(xfs_buf_item_zone, bip); +} + /* * This is called when the buf log item is no longer needed. It should * free the buf log item associated with the given buffer and clear @@ -887,18 +903,8 @@ xfs_buf_item_relse( (XFS_BUF_IODONE_FUNC(bp) != NULL)) { XFS_BUF_CLR_IODONE_FUNC(bp); } - -#ifdef XFS_TRANS_DEBUG - kmem_free(bip->bli_orig); - bip->bli_orig = NULL; - kmem_free(bip->bli_logged); - bip->bli_logged = NULL; -#endif /* XFS_TRANS_DEBUG */ - -#ifdef XFS_BLI_TRACE - ktrace_free(bip->bli_trace); -#endif - kmem_zone_free(xfs_buf_item_zone, bip); + xfs_buf_rele(bp); + xfs_buf_item_free(bip); } @@ -1120,6 +1126,7 @@ xfs_buf_iodone( ASSERT(bip->bli_buf == bp); + xfs_buf_rele(bp); mp = bip->bli_item.li_mountp; /* @@ -1136,18 +1143,7 @@ xfs_buf_iodone( * xfs_trans_delete_ail() drops the AIL lock. */ xfs_trans_delete_ail(mp, (xfs_log_item_t *)bip); - -#ifdef XFS_TRANS_DEBUG - kmem_free(bip->bli_orig); - bip->bli_orig = NULL; - kmem_free(bip->bli_logged); - bip->bli_logged = NULL; -#endif /* XFS_TRANS_DEBUG */ - -#ifdef XFS_BLI_TRACE - ktrace_free(bip->bli_trace); -#endif - kmem_zone_free(xfs_buf_item_zone, bip); + xfs_buf_item_free(bip); } #if defined(XFS_BLI_TRACE) From owner-xfs@oss.sgi.com Mon Sep 1 23:03:09 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m82638XH014342 for ; Mon, 1 Sep 2008 23:03:09 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA04324; Tue, 2 Sep 2008 16:04:32 +1000 Message-ID: <48BCD93E.9040407@sgi.com> Date: Tue, 02 Sep 2008 16:12:14 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: Lachlan McIlroy , xfs-dev , xfs-oss Subject: Re: [PATCH] Tweak tracing allocation sizes References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> In-Reply-To: <20080902055604.GD15962@disturbed> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean Dave Chinner wrote: > On Tue, Sep 02, 2008 at 03:48:46PM +1000, Lachlan McIlroy wrote: >> The size of a single ktrace entry is 16 pointers so 128 bytes. For the case >> of XFS_RW_KTRACE_SIZE which is 128 entries this equates to 16KB and on a system >> with 4KB pages that is under memory pressure this can stall that process for a >> significant time while it hunts for 4 free pages. Cutting this value back to >> 32 means it will only need one page. > > That will effectively render that type of tracing useless - 32 > entries is not enough history to capture enough > read/write/map/invalidate trace events to be meaningful. In the past > I've often had to increase this to 256 or 512 entries to be able to > capture the events necessary to debug problems... A system that constantly locks up and/or stalls is useless too. Allocating 4 or more pages for every inode just taxes the system. Can you offer an alternative - maybe a very large global trace buffer that is allocated at mount time and shared by all inodes? From owner-xfs@oss.sgi.com Mon Sep 1 23:20:40 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m826Kd0G016182 for ; Mon, 1 Sep 2008 23:20:39 -0700 X-ASG-Debug-ID: 1220336523-77a803a10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8B5571BCD806 for ; Mon, 1 Sep 2008 23:22:04 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id y4IiHRZcm8Tttr7l for ; Mon, 01 Sep 2008 23:22:04 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEAIh2vEh5LD0i/2dsb2JhbACyIIFp X-IronPort-AV: E=Sophos;i="4.32,313,1217773800"; d="scan'208";a="195615134" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 02 Sep 2008 15:51:57 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KaPH1-0003pn-2y; Tue, 02 Sep 2008 16:21:55 +1000 Date: Tue, 2 Sep 2008 16:21:55 +1000 From: Dave Chinner To: Lachlan McIlroy Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Filesystem corruption writing out unlinked inodes Subject: Re: Filesystem corruption writing out unlinked inodes Message-ID: <20080902062155.GE15962@disturbed> Mail-Followup-To: Lachlan McIlroy , xfs@oss.sgi.com References: <48BCC5B1.7080300@sgi.com> <20080902051524.GC15962@disturbed> <48BCD622.1080406@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BCD622.1080406@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220336525 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1289 1.0000 -1.2221 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.22 X-Barracuda-Spam-Status: No, SCORE=-1.22 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4413 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 03:58:58PM +1000, Lachlan McIlroy wrote: > Dave Chinner wrote: >> On Tue, Sep 02, 2008 at 02:48:49PM +1000, Lachlan McIlroy wrote: >> This is supposed to catch all the inodes in memory and mark them >> XFS_ISTALE to prevent them from being written back once the >> transaction is committed. The question is - how are dirty inodes >> slipping through this? >> >> If we are freeing the cluster buffer, then there can be no other >> active references to any of the inodes, so if they are dirty it >> has to be due to inactivation transactions and so should be in >> the log and attached to the buffer due to removal from the >> unlinked list. >> >> The question is - which bit of this is not working? i.e. what is the >> race condition that is allowing dirty inodes to slip through the >> locking here? >> >> Hmmm - I see that xfs_iflush() doesn't check for XFS_ISTALE when >> flushing out inodes. Perhaps you could check to see if we are >> writing an inode marked as such..... > > That's what I was suggesting. I'm not suggesting that as a fix. I'm suggesting that you determine whether the inode being flushed has that flag set or not. If it is not set, then we need to determine how it slipped through xfs_ifree_cluster() without being marked XFS_ISTALE, and if it is set, why it was not marked clean by xfs_istale_done() when the buffer callbacks are made and the flush lock dropped.... > I'm just not sure about the assumption > that if the flush lock cannot be acquired in xfs_ifree_cluster() then > the inode must be in the process of being flushed. The flush could > be aborted due to the inode being pinned or some other case and the > inode never gets marked as stale. Did that happen? Basically I'm asking what the sequence of events is that leads up to this problem - we need to identify the actual race condition before speculating on potential fixes.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Mon Sep 1 23:26:13 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m826QDLC016975 for ; Mon, 1 Sep 2008 23:26:13 -0700 X-ASG-Debug-ID: 1220336858-41bd02510000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EB8D012FE3DD for ; Mon, 1 Sep 2008 23:27:39 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id k3FByMjEWSeunL7n for ; Mon, 01 Sep 2008 23:27:39 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEABd6vEh5LD0i/2dsb2JhbACyLIFp X-IronPort-AV: E=Sophos;i="4.32,313,1217773800"; d="scan'208";a="195619930" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 02 Sep 2008 15:57:26 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KaPMI-0003y4-LV; Tue, 02 Sep 2008 16:27:22 +1000 Date: Tue, 2 Sep 2008 16:27:22 +1000 From: Dave Chinner To: Lachlan McIlroy Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes Message-ID: <20080902062722.GF15962@disturbed> Mail-Followup-To: Lachlan McIlroy , xfs-dev , xfs-oss References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> <48BCD93E.9040407@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BCD93E.9040407@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220336859 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4412 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 04:12:14PM +1000, Lachlan McIlroy wrote: > Dave Chinner wrote: >> On Tue, Sep 02, 2008 at 03:48:46PM +1000, Lachlan McIlroy wrote: >>> The size of a single ktrace entry is 16 pointers so 128 bytes. For the case >>> of XFS_RW_KTRACE_SIZE which is 128 entries this equates to 16KB and on a system >>> with 4KB pages that is under memory pressure this can stall that process for a >>> significant time while it hunts for 4 free pages. Cutting this value back to >>> 32 means it will only need one page. >> >> That will effectively render that type of tracing useless - 32 >> entries is not enough history to capture enough >> read/write/map/invalidate trace events to be meaningful. In the past >> I've often had to increase this to 256 or 512 entries to be able to >> capture the events necessary to debug problems... > > A system that constantly locks up and/or stalls is useless too. Allocating > 4 or more pages for every inode just taxes the system. Can you offer an > alternative Buy more memory for your test machine? (I can't beleive I'm saying that to an SGI guy ;) How about using the SLUB allocator rather than SLAB and tweaking it's settings to do order 2 allocations for every slab so most allocations are doing order 2 allocations? > - maybe a very large global trace buffer that is allocated at mount > time and shared by all inodes? Sure, we've got that for various other trace types (e.g. the "vnode" trace). You'd need to add idbg stuff for filtering based on the inode the buffer belongs to.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Mon Sep 1 23:49:31 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m826nSYR018946 for ; Mon, 1 Sep 2008 23:49:30 -0700 X-ASG-Debug-ID: 1220338252-2c18039f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from one.firstfloor.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5D1247A5322 for ; Mon, 1 Sep 2008 23:50:52 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id mlZjEl8XIWN82I0i for ; Mon, 01 Sep 2008 23:50:52 -0700 (PDT) Received: from basil.firstfloor.org (g224156004.adsl.alicedsl.de [92.224.156.4]) by one.firstfloor.org (Postfix) with ESMTP id 3DFE51AD0020; Tue, 2 Sep 2008 08:53:54 +0200 (CEST) Received: by basil.firstfloor.org (Postfix, from userid 1000) id 197E93E69FF; Tue, 2 Sep 2008 08:50:52 +0200 (CEST) To: lachlan@sgi.com Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes From: Andi Kleen References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> <48BCD93E.9040407@sgi.com> Date: Tue, 02 Sep 2008 08:50:52 +0200 In-Reply-To: <48BCD93E.9040407@sgi.com> (Lachlan McIlroy's message of "Tue, 02 Sep 2008 16:12:14 +1000") Message-ID: <87fxojvy5v.fsf@basil.nowhere.org> User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1220338254 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4415 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean Lachlan McIlroy writes: > Dave Chinner wrote: >> On Tue, Sep 02, 2008 at 03:48:46PM +1000, Lachlan McIlroy wrote: >>> The size of a single ktrace entry is 16 pointers so 128 bytes. For the case >>> of XFS_RW_KTRACE_SIZE which is 128 entries this equates to 16KB and on a system >>> with 4KB pages that is under memory pressure this can stall that process for a >>> significant time while it hunts for 4 free pages. Cutting this value back to >>> 32 means it will only need one page. >> That will effectively render that type of tracing useless - 32 >> entries is not enough history to capture enough >> read/write/map/invalidate trace events to be meaningful. In the past >> I've often had to increase this to 256 or 512 entries to be able to >> capture the events necessary to debug problems... > > A system that constantly locks up and/or stalls is useless too. Allocating > 4 or more pages for every inode just taxes the system. Can you offer an > alternative - maybe a very large global trace buffer that is allocated at mount > time and shared by all inodes? You could use vmalloc(). While that is also not fast it will at least not stall. -Andi -- ak@linux.intel.com From owner-xfs@oss.sgi.com Tue Sep 2 00:03:11 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m82739wS022591 for ; Tue, 2 Sep 2008 00:03:10 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA05336; Tue, 2 Sep 2008 17:04:04 +1000 Message-ID: <48BCE564.5070408@sgi.com> Date: Tue, 02 Sep 2008 17:04:04 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.16 (Macintosh/20080707) MIME-Version: 1.0 To: lachlan@sgi.com CC: xfs-dev , xfs-oss Subject: Re: [PATCH] buffer flag NONE is actually DONE References: <48BCC8C2.7040103@sgi.com> In-Reply-To: <48BCC8C2.7040103@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8137/Mon Sep 1 19:07:16 2008 on oss.sgi.com X-Virus-Status: Clean Lachlan McIlroy wrote: > Amazing but true. > > --- a/fs/xfs/xfsidbg.c 2008-09-02 14:52:11.000000000 +1000 > +++ b/fs/xfs/xfsidbg.c 2008-09-02 14:51:04.000000000 +1000 > @@ -1926,7 +1926,7 @@ static int kdbm_iptraceaddr( > > static char *bp_flag_vals[] = { > /* 0 */ "READ", "WRITE", "MAPPED", "PARTIAL", "ASYNC", > -/* 5 */ "NONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", > +/* 5 */ "DONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", > /* 10 */ "FORCEIO", "FLUSH", "READ_AHEAD", "DIRECTIO", "LOCK", > /* 15 */ "TRYLOCK", "DONT_BLOCK", "PAGE_CACHE", "KMEM_ALLOC", "RUN_QUEUES", > /* 20 */ "PRIVATE_BH", "DELWRI_Q", Looks good. Quick look at possible mismatching names: 11 "FLUSH" vs "ORDERED" 18 "KMEM_ALLOC" vs "PAGES" 22 NULL vs "PAGE_LOCKED" --Tim From owner-xfs@oss.sgi.com Tue Sep 2 14:48:42 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m82Lmerf028099 for ; Tue, 2 Sep 2008 14:48:42 -0700 X-ASG-Debug-ID: 1220392205-4a58009f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 24D5D125C731; Tue, 2 Sep 2008 14:50:05 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id hZTD5lpjjfrDRwAH; Tue, 02 Sep 2008 14:50:05 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KadlF-0002q3-3i; Tue, 02 Sep 2008 21:50:05 +0000 Date: Tue, 2 Sep 2008 17:50:05 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH V2] Fix use-after-free with buffers Subject: Re: [PATCH V2] Fix use-after-free with buffers Message-ID: <20080902215005.GB9204@infradead.org> References: <48BCD79B.1070100@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BCD79B.1070100@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220392207 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4474 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/8141/Tue Sep 2 08:52:21 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 04:05:15PM +1000, Lachlan McIlroy wrote: > We have a use-after-free issue where log completions access buffers via the > buffer log item and the buffer has already been freed. Fix this by taking > a reference on the buffer when attaching the buffer log item and release > the hold when the buffer log item is detached and we no longer need the > buffer. Also create a new function xfs_buf_item_free() to combine some > common code and move an ASSERT in xfs_buf_rele() so that we can catch more > cases. Looks good, but please mark xfs_buf_item_free static. > > --- a/fs/xfs/xfs_buf_item.c 2008-09-02 15:56:20.000000000 +1000 > +++ b/fs/xfs/xfs_buf_item.c 2008-08-22 13:23:53.000000000 +1000 > @@ -732,6 +732,7 @@ xfs_buf_item_init( > bip->bli_item.li_ops = &xfs_buf_item_ops; > bip->bli_item.li_mountp = mp; > bip->bli_buf = bp; > + xfs_buf_hold(bp); > bip->bli_format.blf_type = XFS_LI_BUF; > bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); > bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); > @@ -867,6 +868,21 @@ xfs_buf_item_dirty( > return (bip->bli_flags & XFS_BLI_DIRTY); > } > > +void > +xfs_buf_item_free( > + xfs_buf_log_item_t *bip) > +{ > +#ifdef XFS_TRANS_DEBUG > + kmem_free(bip->bli_orig); > + kmem_free(bip->bli_logged); > +#endif /* XFS_TRANS_DEBUG */ > + > +#ifdef XFS_BLI_TRACE > + ktrace_free(bip->bli_trace); > +#endif > + kmem_zone_free(xfs_buf_item_zone, bip); > +} > + > /* > * This is called when the buf log item is no longer needed. It should > * free the buf log item associated with the given buffer and clear > @@ -887,18 +903,8 @@ xfs_buf_item_relse( > (XFS_BUF_IODONE_FUNC(bp) != NULL)) { > XFS_BUF_CLR_IODONE_FUNC(bp); > } > - > -#ifdef XFS_TRANS_DEBUG > - kmem_free(bip->bli_orig); > - bip->bli_orig = NULL; > - kmem_free(bip->bli_logged); > - bip->bli_logged = NULL; > -#endif /* XFS_TRANS_DEBUG */ > - > -#ifdef XFS_BLI_TRACE > - ktrace_free(bip->bli_trace); > -#endif > - kmem_zone_free(xfs_buf_item_zone, bip); > + xfs_buf_rele(bp); > + xfs_buf_item_free(bip); > } > > > @@ -1120,6 +1126,7 @@ xfs_buf_iodone( > > ASSERT(bip->bli_buf == bp); > > + xfs_buf_rele(bp); > mp = bip->bli_item.li_mountp; > > /* > @@ -1136,18 +1143,7 @@ xfs_buf_iodone( > * xfs_trans_delete_ail() drops the AIL lock. > */ > xfs_trans_delete_ail(mp, (xfs_log_item_t *)bip); > - > -#ifdef XFS_TRANS_DEBUG > - kmem_free(bip->bli_orig); > - bip->bli_orig = NULL; > - kmem_free(bip->bli_logged); > - bip->bli_logged = NULL; > -#endif /* XFS_TRANS_DEBUG */ > - > -#ifdef XFS_BLI_TRACE > - ktrace_free(bip->bli_trace); > -#endif > - kmem_zone_free(xfs_buf_item_zone, bip); > + xfs_buf_item_free(bip); > } > > #if defined(XFS_BLI_TRACE) > > ---end quoted text--- From owner-xfs@oss.sgi.com Tue Sep 2 14:50:32 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m82LoVEK028434 for ; Tue, 2 Sep 2008 14:50:32 -0700 X-ASG-Debug-ID: 1220392317-789602640000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1A2B1122CB2B; Tue, 2 Sep 2008 14:51:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id XUZ7gY6FIVtPwM7k; Tue, 02 Sep 2008 14:51:57 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Kadn3-0002rl-G7; Tue, 02 Sep 2008 21:51:57 +0000 Date: Tue, 2 Sep 2008 17:51:57 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Don't do I/O beyond eof when unreserving space Subject: Re: [PATCH] Don't do I/O beyond eof when unreserving space Message-ID: <20080902215157.GC9204@infradead.org> References: <48BCCE29.3070707@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BCCE29.3070707@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220392318 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4475 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8141/Tue Sep 2 08:52:21 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 03:24:57PM +1000, Lachlan McIlroy wrote: > When unreserving space with boundaries that are not block aligned we round > up the start and round down the end boundaries and then use this function, > xfs_zero_remaining_bytes(), to zero the parts of the blocks that got dropped > during the rounding. The problem is we don't consider if these blocks are > beyond eof. Worse still is if we encounter delayed allocations beyond eof > we will try to use the magic delayed allocation block number as a real block > number. If the file size is ever extended to expose these blocks then we'll > go through xfs_zero_eof() to zero them anyway. Makes sense. Would be nice to have a comment above the check explaining why these first strange checks are there. Something like the first setence of the patch description here. From owner-xfs@oss.sgi.com Tue Sep 2 14:52:38 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m82Lqb3U029049 for ; Tue, 2 Sep 2008 14:52:38 -0700 X-ASG-Debug-ID: 1220392441-026e01ea0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 24B0F122CB73; Tue, 2 Sep 2008 14:54:01 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 7N1B6Mnfu7Y3cq40; Tue, 02 Sep 2008 14:54:01 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Kadp3-0002tc-Pw; Tue, 02 Sep 2008 21:54:01 +0000 Date: Tue, 2 Sep 2008 17:54:01 -0400 From: Christoph Hellwig To: Lachlan McIlroy , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes Message-ID: <20080902215401.GD9204@infradead.org> References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> <48BCD93E.9040407@sgi.com> <20080902062722.GF15962@disturbed> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080902062722.GF15962@disturbed> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220392444 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4475 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8141/Tue Sep 2 08:52:21 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 04:27:22PM +1000, Dave Chinner wrote: > > - maybe a very large global trace buffer that is allocated at mount > > time and shared by all inodes? > > Sure, we've got that for various other trace types (e.g. the "vnode" > trace). You'd need to add idbg stuff for filtering based on the > inode the buffer belongs to.... That's probably the best idea. Currently all these per-object ktrace buffers do really large no-MAYFAIL allocation all over. They are in fact the remaining reason not to simply directly call vmalloc for large allocations instead of all our current mess in the kmem_ functions. From owner-xfs@oss.sgi.com Tue Sep 2 14:53:53 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m82Lrp7f029496 for ; Tue, 2 Sep 2008 14:53:52 -0700 X-ASG-Debug-ID: 1220392517-24c100540000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 618DA3F77B6; Tue, 2 Sep 2008 14:55:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9zdx6Ml3i6twaDrb; Tue, 02 Sep 2008 14:55:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KadqG-0003IL-Vo; Tue, 02 Sep 2008 21:55:16 +0000 Date: Tue, 2 Sep 2008 17:55:16 -0400 From: Christoph Hellwig To: Andi Kleen Cc: lachlan@sgi.com, xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes Message-ID: <20080902215516.GE9204@infradead.org> References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> <48BCD93E.9040407@sgi.com> <87fxojvy5v.fsf@basil.nowhere.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87fxojvy5v.fsf@basil.nowhere.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220392518 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4475 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8141/Tue Sep 2 08:52:21 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 08:50:52AM +0200, Andi Kleen wrote: > > alternative - maybe a very large global trace buffer that is allocated at mount > > time and shared by all inodes? > > You could use vmalloc(). While that is also not fast it will at least > not stall. In fact kmem_alloc first tries vmalloc, and then falls back to slab when it fails. See fs/xfs/linux-2.6/kmem.c:kmem_alloc(). Yes, it's all a big mess.. From owner-xfs@oss.sgi.com Tue Sep 2 20:54:58 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m833suR6001302 for ; Tue, 2 Sep 2008 20:54:58 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA27280; Wed, 3 Sep 2008 13:56:21 +1000 Message-ID: <48BE0CB7.6050206@sgi.com> Date: Wed, 03 Sep 2008 14:04:07 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: Timothy Shimmin CC: xfs-dev , xfs-oss Subject: Re: [PATCH] buffer flag NONE is actually DONE References: <48BCC8C2.7040103@sgi.com> <48BCE564.5070408@sgi.com> In-Reply-To: <48BCE564.5070408@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8143/Tue Sep 2 17:21:31 2008 on oss.sgi.com X-Virus-Status: Clean How's this then? There's a few flags that don't exist anymore. --- a/fs/xfs/xfsidbg.c 2008-09-03 13:53:12.000000000 +1000 +++ b/fs/xfs/xfsidbg.c 2008-09-03 13:59:47.000000000 +1000 @@ -1925,11 +1925,11 @@ static int kdbm_iptraceaddr( static char *bp_flag_vals[] = { -/* 0 */ "READ", "WRITE", "MAPPED", "PARTIAL", "ASYNC", -/* 5 */ "NONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", -/* 10 */ "FORCEIO", "FLUSH", "READ_AHEAD", "DIRECTIO", "LOCK", -/* 15 */ "TRYLOCK", "DONT_BLOCK", "PAGE_CACHE", "KMEM_ALLOC", "RUN_QUEUES", -/* 20 */ "PRIVATE_BH", "DELWRI_Q", +/* 0 */ "READ", "WRITE", "MAPPED", "", "ASYNC", +/* 5 */ "DONE", "DELWRI", "STALE", "FS_MANAGED", "", +/* 10 */ "", "ORDERED", "READ_AHEAD", "", "LOCK", +/* 15 */ "TRYLOCK", "DONT_BLOCK", "PAGE_CACHE", "PAGES", "RUN_QUEUES", +/* 20 */ "", "DELWRI_Q", "PAGE_LOCKED", NULL }; static char *iomap_flag_vals[] = { Timothy Shimmin wrote: > Lachlan McIlroy wrote: >> Amazing but true. >> >> --- a/fs/xfs/xfsidbg.c 2008-09-02 14:52:11.000000000 +1000 >> +++ b/fs/xfs/xfsidbg.c 2008-09-02 14:51:04.000000000 +1000 >> @@ -1926,7 +1926,7 @@ static int kdbm_iptraceaddr( >> >> static char *bp_flag_vals[] = { >> /* 0 */ "READ", "WRITE", "MAPPED", "PARTIAL", "ASYNC", >> -/* 5 */ "NONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", >> +/* 5 */ "DONE", "DELWRI", "STALE", "FS_MANAGED", "FS_DATAIOD", >> /* 10 */ "FORCEIO", "FLUSH", "READ_AHEAD", "DIRECTIO", "LOCK", >> /* 15 */ "TRYLOCK", "DONT_BLOCK", "PAGE_CACHE", "KMEM_ALLOC", "RUN_QUEUES", >> /* 20 */ "PRIVATE_BH", "DELWRI_Q", > > Looks good. > > Quick look at possible mismatching names: > > 11 "FLUSH" vs "ORDERED" > 18 "KMEM_ALLOC" vs "PAGES" > 22 NULL vs "PAGE_LOCKED" > > --Tim > From owner-xfs@oss.sgi.com Tue Sep 2 20:59:16 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m833xF2i001903 for ; Tue, 2 Sep 2008 20:59:15 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA27477; Wed, 3 Sep 2008 14:00:39 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id E2F7E58C52AB; Wed, 3 Sep 2008 14:00:38 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: TAKE 985757 - Fix use-after-free with buffers Message-Id: <20080903040038.E2F7E58C52AB@chook.melbourne.sgi.com> Date: Wed, 3 Sep 2008 14:00:38 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/8143/Tue Sep 2 17:21:31 2008 on oss.sgi.com X-Virus-Status: Clean Fix use-after-free with buffers We have a use-after-free issue where log completions access buffers via the buffer log item and the buffer has already been freed. Fix this by taking a reference on the buffer when attaching the buffer log item and release the hold when the buffer log item is detached and we no longer need the buffer. Also create a new function xfs_buf_item_free() to combine some common code and move an ASSERT in xfs_buf_rele() so that we can catch more cases. Date: Wed Sep 3 13:59:35 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-tot Inspected by: hch Author: lachlan The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:32025a fs/xfs/xfs_buf_item.c - 1.169 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_buf_item.c.diff?r1=text&tr1=1.169&r2=text&tr2=1.168&f=h - Fix use-after-free with buffers From owner-xfs@oss.sgi.com Tue Sep 2 21:29:14 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m834TDf0004376 for ; Tue, 2 Sep 2008 21:29:13 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA27992; Wed, 3 Sep 2008 14:30:38 +1000 Message-ID: <48BE14BF.2010906@sgi.com> Date: Wed, 03 Sep 2008 14:38:23 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH V2] Don't do I/O beyond eof when unreserving space Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8143/Tue Sep 2 17:21:31 2008 on oss.sgi.com X-Virus-Status: Clean When unreserving space with boundaries that are not block aligned we round up the start and round down the end boundaries and then use this function, xfs_zero_remaining_bytes(), to zero the parts of the blocks that got dropped during the rounding. The problem is we don't consider if these blocks are beyond eof. Worse still is if we encounter delayed allocations beyond eof we will try to use the magic delayed allocation block number as a real block number. If the file size is ever extended to expose these blocks then we'll go through xfs_zero_eof() to zero them anyway. Version 2 adds some comments. --- a/fs/xfs/xfs_vnodeops.c 2008-09-03 14:28:09.000000000 +1000 +++ b/fs/xfs/xfs_vnodeops.c 2008-09-03 14:20:10.000000000 +1000 @@ -3160,6 +3162,13 @@ error1: /* Just cancel transaction */ /* * Zero file bytes between startoff and endoff inclusive. * The iolock is held exclusive and no blocks are buffered. + * + * This function is used by xfs_free_file_space() to zero + * partial blocks when the range to free is not block aligned. + * When unreserving space with boundaries that are not block + * aligned we round up the start and round down the end + * boundaries and then use this function to zero the parts of + * the blocks that got dropped during the rounding. */ STATIC int xfs_zero_remaining_bytes( @@ -3176,6 +3185,17 @@ xfs_zero_remaining_bytes( int nimap; int error = 0; + /* + * Avoid doing I/O beyond eof - it's not necessary + * since nothing can read beyond eof. The space will + * be zeroed when the file is extended anyway. + */ + if (startoff >= ip->i_size) + return 0; + + if (endoff > ip->i_size) + endoff = ip->i_size; + bp = xfs_buf_get_noaddr(mp->m_sb.sb_blocksize, XFS_IS_REALTIME_INODE(ip) ? mp->m_rtdev_targp : mp->m_ddev_targp); From owner-xfs@oss.sgi.com Tue Sep 2 23:34:51 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m836YnPM013735 for ; Tue, 2 Sep 2008 23:34:49 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA00281 for ; Wed, 3 Sep 2008 16:36:14 +1000 Date: Wed, 03 Sep 2008 16:38:34 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: Improve caching in libxfs From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: User-Agent: Opera Mail/9.51 (Win32) X-Virus-Scanned: ClamAV 0.91.2/8145/Tue Sep 2 23:00:57 2008 on oss.sgi.com X-Virus-Status: Clean An old patch I wrote a while ago which speeds up a libxfs cache full of referenced blocks when trying to find a free/unused node. The old/current mechanisms stores all buffers, referenced and unreferenced in an MRU list. When a new buffer is needed, and there are a lot of referenced blocks (multi-threaded AG prefetch with lots of out-of-order seeks), a lot of CPU time can be spent trying to find a block (and even failing). This patch changes the MRU to only store unreferenced blocks so the searching doesn't scan through referenced blocks. The buffer priority mechanism has been tweaked too to stop prefetching jamming with small cache sizes. --- xfsprogs/include/cache.h | 2 - xfsprogs/libxfs/cache.c | 68 ++++++++++++++++++++++----------------------- xfsprogs/libxfs/rdwr.c | 6 +-- xfsprogs/repair/prefetch.c | 18 +++++------ 4 files changed, 47 insertions(+), 47 deletions(-) Index: xfs-cmds/xfsprogs/include/cache.h =================================================================== --- xfs-cmds.orig/xfsprogs/include/cache.h +++ xfs-cmds/xfsprogs/include/cache.h @@ -95,7 +95,7 @@ void cache_purge(struct cache *); void cache_flush(struct cache *); int cache_node_get(struct cache *, cache_key_t, struct cache_node **); -void cache_node_put(struct cache_node *); +void cache_node_put(struct cache *, struct cache_node *); void cache_node_set_priority(struct cache *, struct cache_node *, int); int cache_node_get_priority(struct cache_node *); int cache_node_purge(struct cache *, cache_key_t, struct cache_node *); Index: xfs-cmds/xfsprogs/libxfs/cache.c =================================================================== --- xfs-cmds.orig/xfsprogs/libxfs/cache.c +++ xfs-cmds/xfsprogs/libxfs/cache.c @@ -201,11 +201,11 @@ cache_shake( continue; hash = cache->c_hash + node->cn_hashidx; - if (node->cn_count > 0 || - pthread_mutex_trylock(&hash->ch_mutex) != 0) { + if (pthread_mutex_trylock(&hash->ch_mutex) != 0) { pthread_mutex_unlock(&node->cn_mutex); continue; } + ASSERT(node->cn_count == 0); ASSERT(node->cn_priority == priority); node->cn_priority = -1; @@ -264,6 +264,7 @@ cache_node_allocate( return NULL; } pthread_mutex_init(&node->cn_mutex, NULL); + list_head_init(&node->cn_mru); node->cn_count = 1; node->cn_priority = 0; return node; @@ -309,16 +310,21 @@ cache_node_get( if (!cache->compare(node, key)) continue; /* - * node found, bump node's reference count, move it to the - * top of its MRU list, and update stats. + * node found, bump node's reference count, remove it + * from its MRU list, and update stats. */ pthread_mutex_lock(&node->cn_mutex); - node->cn_count++; - mru = &cache->c_mrus[node->cn_priority]; - pthread_mutex_lock(&mru->cm_mutex); - list_move(&node->cn_mru, &mru->cm_list); - pthread_mutex_unlock(&mru->cm_mutex); + if (node->cn_count == 0) { + ASSERT(node->cn_priority >= 0); + ASSERT(!list_empty(&node->cn_mru)); + mru = &cache->c_mrus[node->cn_priority]; + pthread_mutex_lock(&mru->cm_mutex); + mru->cm_count--; + list_del_init(&node->cn_mru); + pthread_mutex_unlock(&mru->cm_mutex); + } + node->cn_count++; pthread_mutex_unlock(&node->cn_mutex); pthread_mutex_unlock(&hash->ch_mutex); @@ -342,16 +348,11 @@ cache_node_get( node->cn_hashidx = hashidx; - /* add new node to appropriate hash and lowest priority MRU */ - mru = &cache->c_mrus[0]; - pthread_mutex_lock(&mru->cm_mutex); + /* add new node to appropriate hash */ pthread_mutex_lock(&hash->ch_mutex); hash->ch_count++; - mru->cm_count++; list_add(&node->cn_hash, &hash->ch_list); - list_add(&node->cn_mru, &mru->cm_list); pthread_mutex_unlock(&hash->ch_mutex); - pthread_mutex_unlock(&mru->cm_mutex); *nodep = node; return 1; @@ -359,8 +360,11 @@ cache_node_get( void cache_node_put( + struct cache * cache, struct cache_node * node) { + struct cache_mru * mru; + pthread_mutex_lock(&node->cn_mutex); #ifdef CACHE_DEBUG if (node->cn_count < 1) { @@ -368,8 +372,23 @@ cache_node_put( __FUNCTION__, node->cn_count, node); cache_abort(); } + if (!list_empty(&node->cn_mru)) { + fprintf(stderr, "%s: node put on node (%p) in MRU list\n", + __FUNCTION__, node); + cache_abort(); + } #endif node->cn_count--; + + if (node->cn_count == 0) { + /* add unreferenced node to appropriate MRU for shaker */ + mru = &cache->c_mrus[node->cn_priority]; + pthread_mutex_lock(&mru->cm_mutex); + mru->cm_count++; + list_add(&node->cn_mru, &mru->cm_list); + pthread_mutex_unlock(&mru->cm_mutex); + } + pthread_mutex_unlock(&node->cn_mutex); } @@ -379,33 +398,14 @@ cache_node_set_priority( struct cache_node * node, int priority) { - struct cache_mru * mru; - if (priority < 0) priority = 0; else if (priority > CACHE_MAX_PRIORITY) priority = CACHE_MAX_PRIORITY; pthread_mutex_lock(&node->cn_mutex); - ASSERT(node->cn_count > 0); - if (priority == node->cn_priority) { - pthread_mutex_unlock(&node->cn_mutex); - return; - } - mru = &cache->c_mrus[node->cn_priority]; - pthread_mutex_lock(&mru->cm_mutex); - list_del_init(&node->cn_mru); - mru->cm_count--; - pthread_mutex_unlock(&mru->cm_mutex); - - mru = &cache->c_mrus[priority]; - pthread_mutex_lock(&mru->cm_mutex); - list_add(&node->cn_mru, &mru->cm_list); node->cn_priority = priority; - mru->cm_count++; - pthread_mutex_unlock(&mru->cm_mutex); - pthread_mutex_unlock(&node->cn_mutex); } Index: xfs-cmds/xfsprogs/libxfs/rdwr.c =================================================================== --- xfs-cmds.orig/xfsprogs/libxfs/rdwr.c +++ xfs-cmds/xfsprogs/libxfs/rdwr.c @@ -393,7 +393,7 @@ libxfs_getbuf(dev_t device, xfs_daddr_t if (use_xfs_buf_lock) pthread_mutex_lock(&bp->b_lock); cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, - cache_node_get_priority((struct cache_node *)bp) - 4); + cache_node_get_priority((struct cache_node *)bp) - 8); #ifdef XFS_BUF_TRACING pthread_mutex_lock(&libxfs_bcache->c_mutex); lock_buf_count++; @@ -422,7 +422,7 @@ libxfs_putbuf(xfs_buf_t *bp) #endif if (use_xfs_buf_lock) pthread_mutex_unlock(&bp->b_lock); - cache_node_put((struct cache_node *)bp); + cache_node_put(libxfs_bcache, (struct cache_node *)bp); } void @@ -794,7 +794,7 @@ libxfs_iget(xfs_mount_t *mp, xfs_trans_t void libxfs_iput(xfs_inode_t *ip, uint lock_flags) { - cache_node_put((struct cache_node *)ip); + cache_node_put(libxfs_icache, (struct cache_node *)ip); } static struct cache_node * Index: xfs-cmds/xfsprogs/repair/prefetch.c =================================================================== --- xfs-cmds.orig/xfsprogs/repair/prefetch.c +++ xfs-cmds/xfsprogs/repair/prefetch.c @@ -38,16 +38,16 @@ static void pf_read_inode_dirs(prefetch /* buffer priorities for the libxfs cache */ #define B_DIR_BMAP 15 -#define B_DIR_META_2 13 /* metadata in secondary queue */ -#define B_DIR_META_H 11 /* metadata fetched for PF_META_ONLY */ -#define B_DIR_META_S 9 /* single block of metadata */ -#define B_DIR_META 7 -#define B_DIR_INODE 6 -#define B_BMAP 5 -#define B_INODE 4 +#define B_DIR_META_2 14 /* metadata in secondary queue */ +#define B_DIR_META_H 13 /* metadata fetched for PF_META_ONLY */ +#define B_DIR_META_S 12 /* single block of metadata */ +#define B_DIR_META 11 +#define B_DIR_INODE 10 +#define B_BMAP 9 +#define B_INODE 8 -#define B_IS_INODE(b) (((b) & 1) == 0) -#define B_IS_META(b) (((b) & 1) != 0) +#define B_IS_INODE(f) (((f) & 5) == 0) +#define B_IS_META(f) (((f) & 5) != 0) #define DEF_BATCH_BYTES 0x10000 From owner-xfs@oss.sgi.com Tue Sep 2 23:47:32 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m836lTM2015022 for ; Tue, 2 Sep 2008 23:47:30 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA00534 for ; Wed, 3 Sep 2008 16:48:55 +1000 Date: Wed, 03 Sep 2008 16:51:19 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: Zero rest of superblock sector always From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: User-Agent: Opera Mail/9.51 (Win32) X-Virus-Scanned: ClamAV 0.91.2/8145/Tue Sep 2 23:00:57 2008 on oss.sgi.com X-Virus-Status: Clean I found that zeroing the "garbage" beyond the end of the superblock in the first sector of each AG rather inconsistant. It depended on some obscure combination of version bits to be set. The following code zeroes the unused portion of all superblocks if there is any garbage at all in them. --- xfsprogs/repair/agheader.c | 196 ++++++++++++++++----------------------------- 1 file changed, 74 insertions(+), 122 deletions(-) Index: ci/xfsprogs/repair/agheader.c =================================================================== --- ci.orig/xfsprogs/repair/agheader.c +++ ci/xfsprogs/repair/agheader.c @@ -213,82 +213,66 @@ compare_sb(xfs_mount_t *mp, xfs_sb_t *sb * * And everything else in the buffer beyond either sb_width, * sb_dirblklog (v2 dirs), or sb_logsectsize can be zeroed. - * - * Note: contrary to the name, this routine is called for all - * superblocks, not just the secondary superblocks. */ -int -secondary_sb_wack(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, - xfs_agnumber_t i) +static int +sb_whack( + xfs_mount_t *mp, + xfs_sb_t *sb, /* translated superblock */ + xfs_buf_t *sbuf, /* disk buffer with superblock */ + xfs_agnumber_t agno) { - int do_bzero; - int size; - char *ip; - int rval; - - rval = do_bzero = 0; + int rval = 0; + int do_zero = 0; + int size; + char *ip; /* - * mkfs's that stamped a feature bit besides the ones in the mask - * (e.g. were pre-6.5 beta) could leave garbage in the secondary - * superblock sectors. Anything stamping the shared fs bit or better - * into the secondaries is ok and should generate clean secondary - * superblock sectors. so only run the zero check on the - * potentially garbaged secondaries. + * Check for garbage beyond the last field. + * Use field addresses instead so this code will still + * work against older filesystems when the superblock + * gets rev'ed again with new fields appended. */ - if (pre_65_beta || - (sb->sb_versionnum & XR_GOOD_SECSB_VNMASK) == 0 || - sb->sb_versionnum < XFS_SB_VERSION_4) { - /* - * Check for garbage beyond the last field. - * Use field addresses instead so this code will still - * work against older filesystems when the superblock - * gets rev'ed again with new fields appended. - */ - if (XFS_SB_VERSION_HASMOREBITS(sb)) - size = (__psint_t)&sb->sb_features2 - + sizeof(sb->sb_features2) - (__psint_t)sb; - else if (XFS_SB_VERSION_HASLOGV2(sb)) - size = (__psint_t)&sb->sb_logsunit + if (xfs_sb_version_hasmorebits(sb)) + size = (__psint_t)&sb->sb_bad_features2 + + sizeof(sb->sb_bad_features2) - (__psint_t)sb; + else if (xfs_sb_version_haslogv2(sb)) + size = (__psint_t)&sb->sb_logsunit + sizeof(sb->sb_logsunit) - (__psint_t)sb; - else if (XFS_SB_VERSION_HASSECTOR(sb)) - size = (__psint_t)&sb->sb_logsectsize + else if (xfs_sb_version_hassector(sb)) + size = (__psint_t)&sb->sb_logsectsize + sizeof(sb->sb_logsectsize) - (__psint_t)sb; - else if (XFS_SB_VERSION_HASDIRV2(sb)) - size = (__psint_t)&sb->sb_dirblklog + else if (xfs_sb_version_hasdirv2(sb)) + size = (__psint_t)&sb->sb_dirblklog + sizeof(sb->sb_dirblklog) - (__psint_t)sb; - else - size = (__psint_t)&sb->sb_width + else + size = (__psint_t)&sb->sb_width + sizeof(sb->sb_width) - (__psint_t)sb; - for (ip = (char *)((__psint_t)sb + size); - ip < (char *)((__psint_t)sb + mp->m_sb.sb_sectsize); - ip++) { - if (*ip) { - do_bzero = 1; - break; - } - } - if (do_bzero) { - rval |= XR_AG_SB_SEC; - if (!no_modify) { - do_warn( - _("zeroing unused portion of %s superblock (AG #%u)\n"), - !i ? _("primary") : _("secondary"), i); - memset((void *)((__psint_t)sb + size), 0, - mp->m_sb.sb_sectsize - size); - } else - do_warn( - _("would zero unused portion of %s superblock (AG #%u)\n"), - !i ? _("primary") : _("secondary"), i); + for (ip = XFS_BUF_PTR(sbuf) + size; + ip < XFS_BUF_PTR(sbuf) + mp->m_sb.sb_sectsize; ip++) { + if (*ip) { + do_zero = 1; + break; } } + if (do_zero) { + rval |= XR_AG_SB_SEC; + if (!no_modify) { + do_warn(_("zeroing unused portion of %s superblock " + "(AG #%u)\n"), !agno ? _("primary") : + _("secondary"), agno); + memset(XFS_BUF_PTR(sbuf) + size, 0, + mp->m_sb.sb_sectsize - size); + } else + do_warn(_("would zero unused portion of %s superblock " + "(AG #%u)\n"), !agno ? _("primary") : + _("secondary"), agno); + } + /* - * now look for the fields we can manipulate directly. - * if we did a zero and that zero could have included - * the field in question, just silently reset it. otherwise, - * complain. + * now look for the fields we can manipulate directly that + * may not have been zeroed above. * * for now, just zero the flags field since only * the readonly flag is used @@ -296,11 +280,8 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b if (sb->sb_flags) { if (!no_modify) sb->sb_flags = 0; - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn(_("bad flags field in superblock %d\n"), i); - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("bad flags field in superblock %d\n"), agno); } /* @@ -312,38 +293,24 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b if (sb->sb_inprogress == 1 && sb->sb_uquotino) { if (!no_modify) sb->sb_uquotino = 0; - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn( - _("non-null user quota inode field in superblock %d\n"), - i); - - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("non-null user quota inode field in superblock %d\n"), + agno); } if (sb->sb_inprogress == 1 && sb->sb_gquotino) { if (!no_modify) sb->sb_gquotino = 0; - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn( - _("non-null group quota inode field in superblock %d\n"), - i); - - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("non-null group quota inode field in superblock %d\n"), + agno); } if (sb->sb_inprogress == 1 && sb->sb_qflags) { if (!no_modify) sb->sb_qflags = 0; - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn(_("non-null quota flags in superblock %d\n"), - i); - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("non-null quota flags in superblock %d\n"), agno); } /* @@ -352,44 +319,31 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b * written at mkfs time (and the corresponding sb version bits * are set). */ - if (!XFS_SB_VERSION_HASSHARED(sb) && sb->sb_shared_vn != 0) { + if (!xfs_sb_version_hasshared(sb) && sb->sb_shared_vn) { if (!no_modify) sb->sb_shared_vn = 0; - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn( - _("bad shared version number in superblock %d\n"), - i); - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("bad shared version number in superblock %d\n"), + agno); } - if (!XFS_SB_VERSION_HASALIGN(sb) && sb->sb_inoalignmt != 0) { + if (!xfs_sb_version_hasalign(sb) && sb->sb_inoalignmt) { if (!no_modify) sb->sb_inoalignmt = 0; - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn( - _("bad inode alignment field in superblock %d\n"), - i); - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("bad inode alignment field in superblock %d\n"), + agno); } - if (!XFS_SB_VERSION_HASDALIGN(sb) && - (sb->sb_unit != 0 || sb->sb_width != 0)) { + if (!xfs_sb_version_hasdalign(sb) && (sb->sb_unit || sb->sb_width)) { if (!no_modify) sb->sb_unit = sb->sb_width = 0; - if (sb->sb_versionnum & XR_GOOD_SECSB_VNMASK || !do_bzero) { - rval |= XR_AG_SB; - do_warn( - _("bad stripe unit/width fields in superblock %d\n"), - i); - } else - rval |= XR_AG_SB_SEC; + rval |= XR_AG_SB; + do_warn(_("bad stripe unit/width fields in superblock %d\n"), + agno); } - if (!XFS_SB_VERSION_HASSECTOR(sb) && + if (!xfs_sb_version_hassector(sb) && (sb->sb_sectsize != BBSIZE || sb->sb_sectlog != BBSHIFT || sb->sb_logsectsize != 0 || sb->sb_logsectlog != 0)) { if (!no_modify) { @@ -398,13 +352,11 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b sb->sb_logsectsize = 0; sb->sb_logsectlog = 0; } - if (sb->sb_versionnum & XR_GOOD_SECSB_VNMASK || !do_bzero) { + if (!do_zero) { rval |= XR_AG_SB; - do_warn( - _("bad log/data device sector size fields in superblock %d\n"), - i); - } else - rval |= XR_AG_SB_SEC; + do_warn(_("bad log/data device sector size fields in " + "superblock %d\n"), agno); + } } return(rval); @@ -463,7 +415,7 @@ verify_set_agheader(xfs_mount_t *mp, xfs rval |= XR_AG_SB; } - rval |= secondary_sb_wack(mp, sbuf, sb, i); + rval |= sb_whack(mp, sb, sbuf, i); rval |= verify_set_agf(mp, agf, i); rval |= verify_set_agi(mp, agi, i); From owner-xfs@oss.sgi.com Tue Sep 2 23:48:21 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m836mJBc015349 for ; Tue, 2 Sep 2008 23:48:19 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA00568 for ; Wed, 3 Sep 2008 16:49:45 +1000 To: "xfs@oss.sgi.com" Subject: Re: REVIEW: Zero rest of superblock sector always From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: Content-Transfer-Encoding: 7bit Date: Wed, 03 Sep 2008 16:52:09 +1000 Message-ID: In-Reply-To: User-Agent: Opera Mail/9.51 (Win32) X-Virus-Scanned: ClamAV 0.91.2/8145/Tue Sep 2 23:00:57 2008 on oss.sgi.com X-Virus-Status: Clean BTW. If it wasn't obvious, it's for xfs_repair :) On Wed, 03 Sep 2008 16:51:19 +1000, Barry Naujok wrote: > I found that zeroing the "garbage" beyond the end of the superblock in > the first sector of each AG rather inconsistant. It depended on some > obscure combination of version bits to be set. > > The following code zeroes the unused portion of all superblocks if > there is any garbage at all in them. > > --- > xfsprogs/repair/agheader.c | 196 > ++++++++++++++++----------------------------- > 1 file changed, 74 insertions(+), 122 deletions(-) > > Index: ci/xfsprogs/repair/agheader.c > =================================================================== > --- ci.orig/xfsprogs/repair/agheader.c > +++ ci/xfsprogs/repair/agheader.c > @@ -213,82 +213,66 @@ compare_sb(xfs_mount_t *mp, xfs_sb_t *sb > * > * And everything else in the buffer beyond either sb_width, > * sb_dirblklog (v2 dirs), or sb_logsectsize can be zeroed. > - * > - * Note: contrary to the name, this routine is called for all > - * superblocks, not just the secondary superblocks. > */ > -int > -secondary_sb_wack(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, > - xfs_agnumber_t i) > +static int > +sb_whack( > + xfs_mount_t *mp, > + xfs_sb_t *sb, /* translated superblock */ > + xfs_buf_t *sbuf, /* disk buffer with superblock */ > + xfs_agnumber_t agno) > { > - int do_bzero; > - int size; > - char *ip; > - int rval; > - > - rval = do_bzero = 0; > + int rval = 0; > + int do_zero = 0; > + int size; > + char *ip; > > /* > - * mkfs's that stamped a feature bit besides the ones in the mask > - * (e.g. were pre-6.5 beta) could leave garbage in the secondary > - * superblock sectors. Anything stamping the shared fs bit or better > - * into the secondaries is ok and should generate clean secondary > - * superblock sectors. so only run the zero check on the > - * potentially garbaged secondaries. > + * Check for garbage beyond the last field. > + * Use field addresses instead so this code will still > + * work against older filesystems when the superblock > + * gets rev'ed again with new fields appended. > */ > - if (pre_65_beta || > - (sb->sb_versionnum & XR_GOOD_SECSB_VNMASK) == 0 || > - sb->sb_versionnum < XFS_SB_VERSION_4) { > - /* > - * Check for garbage beyond the last field. > - * Use field addresses instead so this code will still > - * work against older filesystems when the superblock > - * gets rev'ed again with new fields appended. > - */ > - if (XFS_SB_VERSION_HASMOREBITS(sb)) > - size = (__psint_t)&sb->sb_features2 > - + sizeof(sb->sb_features2) - (__psint_t)sb; > - else if (XFS_SB_VERSION_HASLOGV2(sb)) > - size = (__psint_t)&sb->sb_logsunit > + if (xfs_sb_version_hasmorebits(sb)) > + size = (__psint_t)&sb->sb_bad_features2 > + + sizeof(sb->sb_bad_features2) - (__psint_t)sb; > + else if (xfs_sb_version_haslogv2(sb)) > + size = (__psint_t)&sb->sb_logsunit > + sizeof(sb->sb_logsunit) - (__psint_t)sb; > - else if (XFS_SB_VERSION_HASSECTOR(sb)) > - size = (__psint_t)&sb->sb_logsectsize > + else if (xfs_sb_version_hassector(sb)) > + size = (__psint_t)&sb->sb_logsectsize > + sizeof(sb->sb_logsectsize) - (__psint_t)sb; > - else if (XFS_SB_VERSION_HASDIRV2(sb)) > - size = (__psint_t)&sb->sb_dirblklog > + else if (xfs_sb_version_hasdirv2(sb)) > + size = (__psint_t)&sb->sb_dirblklog > + sizeof(sb->sb_dirblklog) - (__psint_t)sb; > - else > - size = (__psint_t)&sb->sb_width > + else > + size = (__psint_t)&sb->sb_width > + sizeof(sb->sb_width) - (__psint_t)sb; > - for (ip = (char *)((__psint_t)sb + size); > - ip < (char *)((__psint_t)sb + mp->m_sb.sb_sectsize); > - ip++) { > - if (*ip) { > - do_bzero = 1; > - break; > - } > - } > > - if (do_bzero) { > - rval |= XR_AG_SB_SEC; > - if (!no_modify) { > - do_warn( > - _("zeroing unused portion of %s superblock (AG #%u)\n"), > - !i ? _("primary") : _("secondary"), i); > - memset((void *)((__psint_t)sb + size), 0, > - mp->m_sb.sb_sectsize - size); > - } else > - do_warn( > - _("would zero unused portion of %s superblock (AG #%u)\n"), > - !i ? _("primary") : _("secondary"), i); > + for (ip = XFS_BUF_PTR(sbuf) + size; > + ip < XFS_BUF_PTR(sbuf) + mp->m_sb.sb_sectsize; ip++) { > + if (*ip) { > + do_zero = 1; > + break; > } > } > > + if (do_zero) { > + rval |= XR_AG_SB_SEC; > + if (!no_modify) { > + do_warn(_("zeroing unused portion of %s superblock " > + "(AG #%u)\n"), !agno ? _("primary") : > + _("secondary"), agno); > + memset(XFS_BUF_PTR(sbuf) + size, 0, > + mp->m_sb.sb_sectsize - size); > + } else > + do_warn(_("would zero unused portion of %s superblock " > + "(AG #%u)\n"), !agno ? _("primary") : > + _("secondary"), agno); > + } > + > /* > - * now look for the fields we can manipulate directly. > - * if we did a zero and that zero could have included > - * the field in question, just silently reset it. otherwise, > - * complain. > + * now look for the fields we can manipulate directly that > + * may not have been zeroed above. > * > * for now, just zero the flags field since only > * the readonly flag is used > @@ -296,11 +280,8 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b > if (sb->sb_flags) { > if (!no_modify) > sb->sb_flags = 0; > - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn(_("bad flags field in superblock %d\n"), i); > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("bad flags field in superblock %d\n"), agno); > } > > /* > @@ -312,38 +293,24 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b > if (sb->sb_inprogress == 1 && sb->sb_uquotino) { > if (!no_modify) > sb->sb_uquotino = 0; > - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn( > - _("non-null user quota inode field in superblock %d\n"), > - i); > - > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("non-null user quota inode field in superblock %d\n"), > + agno); > } > > if (sb->sb_inprogress == 1 && sb->sb_gquotino) { > if (!no_modify) > sb->sb_gquotino = 0; > - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn( > - _("non-null group quota inode field in superblock %d\n"), > - i); > - > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("non-null group quota inode field in superblock %d\n"), > + agno); > } > > if (sb->sb_inprogress == 1 && sb->sb_qflags) { > if (!no_modify) > sb->sb_qflags = 0; > - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn(_("non-null quota flags in superblock %d\n"), > - i); > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("non-null quota flags in superblock %d\n"), agno); > } > > /* > @@ -352,44 +319,31 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b > * written at mkfs time (and the corresponding sb version bits > * are set). > */ > - if (!XFS_SB_VERSION_HASSHARED(sb) && sb->sb_shared_vn != 0) { > + if (!xfs_sb_version_hasshared(sb) && sb->sb_shared_vn) { > if (!no_modify) > sb->sb_shared_vn = 0; > - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn( > - _("bad shared version number in superblock %d\n"), > - i); > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("bad shared version number in superblock %d\n"), > + agno); > } > > - if (!XFS_SB_VERSION_HASALIGN(sb) && sb->sb_inoalignmt != 0) { > + if (!xfs_sb_version_hasalign(sb) && sb->sb_inoalignmt) { > if (!no_modify) > sb->sb_inoalignmt = 0; > - if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn( > - _("bad inode alignment field in superblock %d\n"), > - i); > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("bad inode alignment field in superblock %d\n"), > + agno); > } > > - if (!XFS_SB_VERSION_HASDALIGN(sb) && > - (sb->sb_unit != 0 || sb->sb_width != 0)) { > + if (!xfs_sb_version_hasdalign(sb) && (sb->sb_unit || sb->sb_width)) { > if (!no_modify) > sb->sb_unit = sb->sb_width = 0; > - if (sb->sb_versionnum & XR_GOOD_SECSB_VNMASK || !do_bzero) { > - rval |= XR_AG_SB; > - do_warn( > - _("bad stripe unit/width fields in superblock %d\n"), > - i); > - } else > - rval |= XR_AG_SB_SEC; > + rval |= XR_AG_SB; > + do_warn(_("bad stripe unit/width fields in superblock %d\n"), > + agno); > } > > - if (!XFS_SB_VERSION_HASSECTOR(sb) && > + if (!xfs_sb_version_hassector(sb) && > (sb->sb_sectsize != BBSIZE || sb->sb_sectlog != BBSHIFT || > sb->sb_logsectsize != 0 || sb->sb_logsectlog != 0)) { > if (!no_modify) { > @@ -398,13 +352,11 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_b > sb->sb_logsectsize = 0; > sb->sb_logsectlog = 0; > } > - if (sb->sb_versionnum & XR_GOOD_SECSB_VNMASK || !do_bzero) { > + if (!do_zero) { > rval |= XR_AG_SB; > - do_warn( > - _("bad log/data device sector size fields in superblock %d\n"), > - i); > - } else > - rval |= XR_AG_SB_SEC; > + do_warn(_("bad log/data device sector size fields in " > + "superblock %d\n"), agno); > + } > } > > return(rval); > @@ -463,7 +415,7 @@ verify_set_agheader(xfs_mount_t *mp, xfs > rval |= XR_AG_SB; > } > > - rval |= secondary_sb_wack(mp, sbuf, sb, i); > + rval |= sb_whack(mp, sb, sbuf, i); > > rval |= verify_set_agf(mp, agf, i); > rval |= verify_set_agi(mp, agi, i); From owner-xfs@oss.sgi.com Tue Sep 2 23:53:42 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, LONGWORDS autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m836rdfD016127 for ; Tue, 2 Sep 2008 23:53:41 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA00718 for ; Wed, 3 Sep 2008 16:55:05 +1000 Date: Wed, 03 Sep 2008 16:57:30 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: Change mkfs.xfs to set primary superblock inodes in ALL secondaries From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: User-Agent: Opera Mail/9.51 (Win32) X-Virus-Scanned: ClamAV 0.91.2/8145/Tue Sep 2 23:00:57 2008 on oss.sgi.com X-Virus-Status: Clean One peculiarity of mkfs.xfs that no-one has yet been able to explain to me is that all the secondary superblocks do not contain the primary superblock's root inode, realtime inodes and quota inodes. The root inode is stored in the middle and last AG as well to make things more unexpected. The following makes all the secondaries the same as the primary (other than the global counters). --- xfsprogs/mkfs/xfs_mkfs.c | 45 +++++++++++++++------------------------------ xfstests/030.out.linux | 12 ------------ xfstests/178.out | 12 ------------ 3 files changed, 15 insertions(+), 54 deletions(-) Index: ci/xfsprogs/mkfs/xfs_mkfs.c =================================================================== --- ci.orig/xfsprogs/mkfs/xfs_mkfs.c +++ ci/xfsprogs/mkfs/xfs_mkfs.c @@ -2397,33 +2397,20 @@ an AG size that is one stripe unit small } /* - * Write out multiple secondary superblocks with rootinode field set + * Write out secondary superblocks with inode fields set */ - if (mp->m_sb.sb_agcount > 1) { - /* - * the last superblock - */ - buf = libxfs_readbuf(mp->m_dev, - XFS_AGB_TO_DADDR(mp, mp->m_sb.sb_agcount-1, - XFS_SB_DADDR), - XFS_FSS_TO_BB(mp, 1), - LIBXFS_EXIT_ON_FAILURE); - INT_SET((XFS_BUF_TO_SBP(buf))->sb_rootino, - ARCH_CONVERT, mp->m_sb.sb_rootino); - libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); - /* - * and one in the middle for luck - */ - if (mp->m_sb.sb_agcount > 2) { - buf = libxfs_readbuf(mp->m_dev, - 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); - INT_SET((XFS_BUF_TO_SBP(buf))->sb_rootino, - ARCH_CONVERT, mp->m_sb.sb_rootino); - libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); - } + buf = libxfs_getsb(mp, LIBXFS_EXIT_ON_FAILURE); + XFS_BUF_TO_SBP(buf)->sb_inprogress = 0; + + for (agno = 1; agno < mp->m_sb.sb_agcount; agno++) { + xfs_buf_t *sbuf; + + sbuf = libxfs_getbuf(mp->m_dev, + XFS_AGB_TO_DADDR(mp, agno, XFS_SB_DADDR), + XFS_FSS_TO_BB(mp, 1)); + memcpy(XFS_BUF_PTR(sbuf), XFS_BUF_PTR(buf), + XFS_BUF_SIZE(sbuf)); + libxfs_writebuf(sbuf, LIBXFS_EXIT_ON_FAILURE); } /* @@ -2432,13 +2419,11 @@ an AG size that is one stripe unit small */ libxfs_rtmount_destroy(mp); libxfs_icache_purge(); - libxfs_bcache_purge(); + libxfs_bcache_flush(); /* - * Mark the filesystem ok. + * Finalize the filesystem (sb_inprogress = 0 from above). */ - buf = libxfs_getsb(mp, LIBXFS_EXIT_ON_FAILURE); - (XFS_BUF_TO_SBP(buf))->sb_inprogress = 0; libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); libxfs_umount(mp); Index: ci/xfstests/030.out.linux =================================================================== --- ci.orig/xfstests/030.out.linux +++ ci/xfstests/030.out.linux @@ -14,12 +14,6 @@ attempting to find secondary superblock. found candidate secondary superblock... verified secondary superblock... writing modified primary superblock -sb root inode value INO inconsistent with calculated value INO -resetting superblock root inode pointer to INO -sb realtime bitmap inode INO inconsistent with calculated value INO -resetting superblock realtime bitmap ino pointer to INO -sb realtime summary inode INO inconsistent with calculated value INO -resetting superblock realtime summary ino pointer to INO Phase 2 - using log - zero log... - scan filesystem freespace and inode maps... @@ -132,12 +126,6 @@ attempting to find secondary superblock. found candidate secondary superblock... verified secondary superblock... writing modified primary superblock -sb root inode value INO inconsistent with calculated value INO -resetting superblock root inode pointer to INO -sb realtime bitmap inode INO inconsistent with calculated value INO -resetting superblock realtime bitmap ino pointer to INO -sb realtime summary inode INO inconsistent with calculated value INO -resetting superblock realtime summary ino pointer to INO Phase 2 - using log - zero log... - scan filesystem freespace and inode maps... Index: ci/xfstests/178.out =================================================================== --- ci.orig/xfstests/178.out +++ ci/xfstests/178.out @@ -12,12 +12,6 @@ attempting to find secondary superblock. found candidate secondary superblock... verified secondary superblock... writing modified primary superblock -sb root inode value INO inconsistent with calculated value INO -resetting superblock root inode pointer to INO -sb realtime bitmap inode INO inconsistent with calculated value INO -resetting superblock realtime bitmap ino pointer to INO -sb realtime summary inode INO inconsistent with calculated value INO -resetting superblock realtime summary ino pointer to INO Phase 2 - using log - zero log... - scan filesystem freespace and inode maps... @@ -48,12 +42,6 @@ attempting to find secondary superblock. found candidate secondary superblock... verified secondary superblock... writing modified primary superblock -sb root inode value INO inconsistent with calculated value INO -resetting superblock root inode pointer to INO -sb realtime bitmap inode INO inconsistent with calculated value INO -resetting superblock realtime bitmap ino pointer to INO -sb realtime summary inode INO inconsistent with calculated value INO -resetting superblock realtime summary ino pointer to INO Phase 2 - using log - zero log... - scan filesystem freespace and inode maps... From owner-xfs@oss.sgi.com Wed Sep 3 00:02:26 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m8372NLT019385 for ; Wed, 3 Sep 2008 00:02:26 -0700 X-ASG-Debug-ID: 1220425429-24a6006f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from one.firstfloor.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 91BB51008379 for ; Wed, 3 Sep 2008 00:03:50 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id Xa8Iu7pIVeKukiZT for ; Wed, 03 Sep 2008 00:03:50 -0700 (PDT) Received: by one.firstfloor.org (Postfix, from userid 503) id CDC221AD0020; Wed, 3 Sep 2008 09:06:54 +0200 (CEST) Date: Wed, 3 Sep 2008 09:06:54 +0200 From: Andi Kleen To: Christoph Hellwig Cc: Andi Kleen , lachlan@sgi.com, xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes Message-ID: <20080903070654.GP18288@one.firstfloor.org> References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> <48BCD93E.9040407@sgi.com> <87fxojvy5v.fsf@basil.nowhere.org> <20080902215516.GE9204@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080902215516.GE9204@infradead.org> User-Agent: Mutt/1.4.2.1i X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1220425430 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4508 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8145/Tue Sep 2 23:00:57 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Sep 02, 2008 at 05:55:16PM -0400, Christoph Hellwig wrote: > On Tue, Sep 02, 2008 at 08:50:52AM +0200, Andi Kleen wrote: > > > alternative - maybe a very large global trace buffer that is allocated at mount > > > time and shared by all inodes? > > > > You could use vmalloc(). While that is also not fast it will at least > > not stall. > > In fact kmem_alloc first tries vmalloc, and then falls back to slab > when it fails. See fs/xfs/linux-2.6/kmem.c:kmem_alloc(). You mean the other way around? Anyways it sounds like like MAX_SLAB_SIZE is just too big. -Andi From owner-xfs@oss.sgi.com Wed Sep 3 05:05:11 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83C59Mt021776 for ; Wed, 3 Sep 2008 05:05:10 -0700 X-ASG-Debug-ID: 1220443595-2af203ce0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4B5353F9C2E; Wed, 3 Sep 2008 05:06:35 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Hxgsqm5jOTjLiiNS; Wed, 03 Sep 2008 05:06:35 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Kar87-0005Bn-34; Wed, 03 Sep 2008 12:06:35 +0000 Date: Wed, 3 Sep 2008 08:06:35 -0400 From: Christoph Hellwig To: Andi Kleen Cc: Christoph Hellwig , lachlan@sgi.com, xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Tweak tracing allocation sizes Subject: Re: [PATCH] Tweak tracing allocation sizes Message-ID: <20080903120635.GA14662@infradead.org> References: <48BCD3BE.5040107@sgi.com> <20080902055604.GD15962@disturbed> <48BCD93E.9040407@sgi.com> <87fxojvy5v.fsf@basil.nowhere.org> <20080902215516.GE9204@infradead.org> <20080903070654.GP18288@one.firstfloor.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080903070654.GP18288@one.firstfloor.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220443596 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4529 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8145/Tue Sep 2 23:00:57 2008 on oss.sgi.com X-Virus-Status: Clean On Wed, Sep 03, 2008 at 09:06:54AM +0200, Andi Kleen wrote: > On Tue, Sep 02, 2008 at 05:55:16PM -0400, Christoph Hellwig wrote: > > On Tue, Sep 02, 2008 at 08:50:52AM +0200, Andi Kleen wrote: > > > > alternative - maybe a very large global trace buffer that is allocated at mount > > > > time and shared by all inodes? > > > > > > You could use vmalloc(). While that is also not fast it will at least > > > not stall. > > > > In fact kmem_alloc first tries vmalloc, and then falls back to slab > > when it fails. See fs/xfs/linux-2.6/kmem.c:kmem_alloc(). > > You mean the other way around? No, take a look at the function. I guess the intent is that vmalloc can fail due to a full vmalloc area and kmalloc could theoretically still scucceed. From owner-xfs@oss.sgi.com Wed Sep 3 05:14:57 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83CEuVb022835 for ; Wed, 3 Sep 2008 05:14:56 -0700 X-ASG-Debug-ID: 1220444182-0d4103ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 42F0A1A6E82D; Wed, 3 Sep 2008 05:16:22 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 5R5z0UxK1CuGPqa9; Wed, 03 Sep 2008 05:16:22 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KarHa-0003JY-LE; Wed, 03 Sep 2008 12:16:22 +0000 Date: Wed, 3 Sep 2008 08:16:22 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH V2] Don't do I/O beyond eof when unreserving space Subject: Re: [PATCH V2] Don't do I/O beyond eof when unreserving space Message-ID: <20080903121622.GA5980@infradead.org> References: <48BE14BF.2010906@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BE14BF.2010906@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220444183 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4529 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8146/Wed Sep 3 03:45:02 2008 on oss.sgi.com X-Virus-Status: Clean On Wed, Sep 03, 2008 at 02:38:23PM +1000, Lachlan McIlroy wrote: > When unreserving space with boundaries that are not block aligned we round > up the start and round down the end boundaries and then use this function, > xfs_zero_remaining_bytes(), to zero the parts of the blocks that got dropped > during the rounding. The problem is we don't consider if these blocks are > beyond eof. Worse still is if we encounter delayed allocations beyond eof > we will try to use the magic delayed allocation block number as a real block > number. If the file size is ever extended to expose these blocks then we'll > go through xfs_zero_eof() to zero them anyway. Version 2 adds some comments. Looks good. From owner-xfs@oss.sgi.com Wed Sep 3 05:17:18 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83CHIU8023319 for ; Wed, 3 Sep 2008 05:17:18 -0700 X-ASG-Debug-ID: 1220444324-577902bb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D0461125E98D; Wed, 3 Sep 2008 05:18:44 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id euS0EXwEfO8eZnQu; Wed, 03 Sep 2008 05:18:44 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KarJs-0002fh-0o; Wed, 03 Sep 2008 12:18:44 +0000 Date: Wed, 3 Sep 2008 08:18:44 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Zero rest of superblock sector always Subject: Re: REVIEW: Zero rest of superblock sector always Message-ID: <20080903121844.GB5980@infradead.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220444324 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4530 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8146/Wed Sep 3 03:45:02 2008 on oss.sgi.com X-Virus-Status: Clean On Wed, Sep 03, 2008 at 04:51:19PM +1000, Barry Naujok wrote: > I found that zeroing the "garbage" beyond the end of the superblock in > the first sector of each AG rather inconsistant. It depended on some > obscure combination of version bits to be set. > > The following code zeroes the unused portion of all superblocks if > there is any garbage at all in them. Looks good. And we'll always need the rest of the sector zeroed once the superblock grows a crc field. From owner-xfs@oss.sgi.com Wed Sep 3 05:18:30 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83CIUsa023723 for ; Wed, 3 Sep 2008 05:18:30 -0700 X-ASG-Debug-ID: 1220444397-396f03850000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 986D5125E99C; Wed, 3 Sep 2008 05:19:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id wFLTuYL5NbFGYGyy; Wed, 03 Sep 2008 05:19:57 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KarL2-00055L-VT; Wed, 03 Sep 2008 12:19:56 +0000 Date: Wed, 3 Sep 2008 08:19:56 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Change mkfs.xfs to set primary superblock inodes in ALL secondaries Subject: Re: REVIEW: Change mkfs.xfs to set primary superblock inodes in ALL secondaries Message-ID: <20080903121956.GC5980@infradead.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220444397 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4530 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8146/Wed Sep 3 03:45:02 2008 on oss.sgi.com X-Virus-Status: Clean On Wed, Sep 03, 2008 at 04:57:30PM +1000, Barry Naujok wrote: > One peculiarity of mkfs.xfs that no-one has yet been able to explain > to me is that all the secondary superblocks do not contain the > primary superblock's root inode, realtime inodes and quota inodes. > > The root inode is stored in the middle and last AG as well to > make things more unexpected. > > The following makes all the secondaries the same as the primary > (other than the global counters). Looks good to me, but I'd really love to know the original reason behind it, too.. From owner-xfs@oss.sgi.com Wed Sep 3 07:10:40 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83EAdko000428 for ; Wed, 3 Sep 2008 07:10:39 -0700 X-ASG-Debug-ID: 1220451121-1200015d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 34E291232E73 for ; Wed, 3 Sep 2008 07:12:01 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id qnxA5LxFLKh5A6jJ for ; Wed, 03 Sep 2008 07:12:01 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 62EE8A9C525; Wed, 3 Sep 2008 09:12:00 -0500 (CDT) Message-ID: <48BE9B2F.30606@sandeen.net> Date: Wed, 03 Sep 2008 09:11:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.16 (Macintosh/20080707) MIME-Version: 1.0 To: Barry Naujok CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Change mkfs.xfs to set primary superblock inodes in ALL secondaries Subject: Re: REVIEW: Change mkfs.xfs to set primary superblock inodes in ALL secondaries References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1220451122 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4537 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8147/Wed Sep 3 05:59:48 2008 on oss.sgi.com X-Virus-Status: Clean Barry Naujok wrote: > One peculiarity of mkfs.xfs that no-one has yet been able to explain > to me is that all the secondary superblocks do not contain the > primary superblock's root inode, realtime inodes and quota inodes. > > The root inode is stored in the middle and last AG as well to > make things more unexpected. > > The following makes all the secondaries the same as the primary > (other than the global counters). Also looks good to me. I've always wondered, too, if writing a single backup superblock in the last sector(s) of the device at mkfs/growfs time might be sane? When the primary is corrupt you could quickly get the size of the device, seek to the end, read on the last 1k boundary, see if it's a superblock, and use that as the first easily-findable backup. Just a thought :) -Eric From owner-xfs@oss.sgi.com Wed Sep 3 10:50:50 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_50,HS_INDEX_PARAM, RDNS_NONE,URIBL_GREY autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83HonFu020475 for ; Wed, 3 Sep 2008 10:50:50 -0700 X-ASG-Debug-ID: 1220464333-4e0c00430000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from vanquish.turboservers.com.au (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 24C201233A7B for ; Wed, 3 Sep 2008 10:52:13 -0700 (PDT) Received: from vanquish.turboservers.com.au (vanquish.turboservers.com.au [122.201.85.5]) by cuda.sgi.com with ESMTP id P5AnFqzEsCLavLNN for ; Wed, 03 Sep 2008 10:52:13 -0700 (PDT) Received: from VANQUISH [122.201.85.5] by vanquish.turboservers.com.au with SMTP; Thu, 4 Sep 2008 03:50:57 +1000 mime-version: 1.0 From: projectquickcash@operamail.com to: linux-xfs@oss.sgi.com date: 4 Sep 2008 03:50:57 +1000 X-ASG-Orig-Subj: =?utf-8?B?SW50ZXJlc3RpbmcgUGFnZQ==?= subject: =?utf-8?B?SW50ZXJlc3RpbmcgUGFnZQ==?= content-type: text/plain; charset=utf-8 X-Barracuda-Connect: vanquish.turboservers.com.au[122.201.85.5] X-Barracuda-Start-Time: 1220464335 Message-Id: <20080903175213.24C201233A7B@cuda.sgi.com> X-Barracuda-Bayes: INNOCENT GLOBAL 0.5009 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HS_INDEX_PARAM, MIME_BASE64_BLANKS, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HS_INDEX_PARAM URI: Link contains a common tracker pattern. 0.00 MIME_BASE64_BLANKS RAW: Extra blank lines in base64 encoding X-Virus-Scanned: ClamAV 0.91.2/8147/Wed Sep 3 05:59:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by oss.sgi.com id m83HooFu020477 http://www.boema.com.au/Default.aspx?tabid=242 QUICK CASH Got a minute? Encash it.... http://www.wapurl.co.uk/?2BNA8JC Greetings! Hard Work is Passe. Smart Thinking is In... Insider Reveals Five Quick, Slick & Zero-Cost 'Secret Techniques' That Earns Him As Much As $13,150 For Just 2 Hours Of Smart Work! Internet Marketing Is All About Quick, Easy Cash And Project Quick Cash Is Going To Prove Just That... Here's what they say - "Can't afford it mate. I put in 5 hours a day on my online efforts. Even if I go full time, I will earn about 2500 bucks a month. That ain't enough", replied Jack. Will Introducing... "Project Quick Cash" Project Quick Cash is a collection of 5 quick, slick, devoid-of-hard-work, zero/low cost methods to make healthy profits on the Internet. Each of these 5 techniques can be implemented in under an hour. No technical skills required. The methods have been described in an easy to understand, step by step format. You can get started right away. "Discover The Tricks That Separate The Success Stories From The Failures." Click over here: projectquickcash-> http://www.wapurl.co.uk/?2BNA8JC -> http://www.wapurl.co.uk/?2BNA8JC -> http://www.wapurl.co.uk/?2BNA8JC To Your Quick Success, Alok Jain & Associates P.S. This is your only chance to get this awesome product for such a low price. I reserve the right to limit the number of copies sold. And I will definitely increase the price very soon. The launch price is ridiculously low for an amazing product like Project Quick Cash. However, I wanted this to be within everyone's reach; at least for the first few days. ------------------------------------- If anytime you wish to be remove, please add "remove" to this email: removeme@ebiz.com From owner-xfs@oss.sgi.com Wed Sep 3 11:24:17 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53, J_CHICKENPOX_63,J_CHICKENPOX_71,J_CHICKENPOX_73,J_CHICKENPOX_91, J_CHICKENPOX_93 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83IOHBP023169 for ; Wed, 3 Sep 2008 11:24:17 -0700 X-ASG-Debug-ID: 1220466343-287b03740000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from coraid.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3F6A53FBF27 for ; Wed, 3 Sep 2008 11:25:43 -0700 (PDT) Received: from coraid.com (baron.coraid.com [12.51.113.4]) by cuda.sgi.com with ESMTP id lyrMtzBAgGjVmb8X for ; Wed, 03 Sep 2008 11:25:43 -0700 (PDT) Received: from kokone.coraid.com ([68.16.104.79]) by coraid.com; Wed Sep 3 14:25:20 EDT 2008 Date: Wed, 3 Sep 2008 14:27:02 -0400 From: Ed Cashin To: xfs@oss.sgi.com, Adrian Bunk X-ASG-Orig-Subj: Re: xfs_growfs fix backport for 2.6.16.y Subject: Re: xfs_growfs fix backport for 2.6.16.y Message-ID: <20080903182701.GA29192@coraid.com> References: <20080825153931.GD7575@coraid.com> <20080826020101.GU5706@disturbed> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080826020101.GU5706@disturbed> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: baron.coraid.com[12.51.113.4] X-Barracuda-Start-Time: 1220466344 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4555 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8148/Wed Sep 3 09:07:44 2008 on oss.sgi.com X-Virus-Status: Clean On Tue, Aug 26, 2008 at 12:01:01PM +1000, Dave Chinner wrote: > On Mon, Aug 25, 2008 at 11:39:31AM -0400, Ed Cashin wrote: ... > > I backported your fix, > > > > commit 20f4ebf2bf2f57c1a9abb3655391336cc90314b3 ... > > ... to the 2.6.16.y git tree, and the result is included below. When > > I apply this backported fix to 2.6.16.62, I can grow an online XFS by > > 10 terabytes without any trouble. ... > I suggest you make sure it passes test 078 in the xfsqa suite (part > of the xfs-cmds tree) as that tests all the nasty growfs corner > cases. You'll need to test it on 32 bit and 64 bit machines.... > > If it passes that then I don't see any problems - SGI backported > this for sles10 which is based on 2.6.16 a long time ago. On a 64-bit system running 2.6.16.62 with this patch, test 078 does not succeed because of one difference in the output file, the line in the diff below. Instead of a new size of 4194304001 blocks, the new size is 4194304000 blocks. Maybe this looks familiar to you and suggests that I missed something. If so, please let me know. ellijay:/mnt/makki/ecashin/opt-amd64/xfstests# diff -U15 078.out 078.out.bad --- 078.out 2008-03-05 00:25:08.000000000 -0500 +++ 078.out.bad 2008-08-29 16:41:34.537888000 -0400 @@ -194,18 +194,18 @@ === GROWFS (from 1t to 16000g, 4096 blocksize) *** mkfs loop file (size=1t) meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks data = bsize=XXX blocks=XXX, imaxpct=PCT = sunit=XXX swidth=XXX, unwritten=X naming =VERN bsize=XXX log =LDEV bsize=XXX blocks=XXX realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** extend loop file wrote 4096/4096 bytes at offset 17179869184000 *** mount loop filesystem *** grow loop filesystem xfs_growfs --BlockSize=4096 --Blocks=268435456 -data blocks changed from 268435456 to 4194304001 +data blocks changed from 268435456 to 4194304000 *** unmount *** all done ellijay:/mnt/makki/ecashin/opt-amd64/xfstests# -- Ed Cashin From owner-xfs@oss.sgi.com Wed Sep 3 16:11:13 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83NBBF0014421 for ; Wed, 3 Sep 2008 16:11:13 -0700 X-ASG-Debug-ID: 1220483556-090a02420000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7D900125FE14 for ; Wed, 3 Sep 2008 16:12:36 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id PUSqMQRJwz5iwUFI for ; Wed, 03 Sep 2008 16:12:36 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmEFANu2vkh5LD0iXWdsb2JhbACSRx6lKoFn X-IronPort-AV: E=Sophos;i="4.32,320,1217773800"; d="scan'208";a="197101522" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 04 Sep 2008 08:42:22 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1Kb1WO-0005f5-CM; Thu, 04 Sep 2008 09:12:20 +1000 Date: Thu, 4 Sep 2008 09:12:20 +1000 From: Dave Chinner To: Barry Naujok Cc: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Zero rest of superblock sector always Subject: Re: REVIEW: Zero rest of superblock sector always Message-ID: <20080903231220.GB15950@disturbed> Mail-Followup-To: Barry Naujok , "xfs@oss.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.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220483558 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4574 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8152/Wed Sep 3 14:17:58 2008 on oss.sgi.com X-Virus-Status: Clean On Wed, Sep 03, 2008 at 04:51:19PM +1000, Barry Naujok wrote: > I found that zeroing the "garbage" beyond the end of the superblock in > the first sector of each AG rather inconsistant. It depended on some > obscure combination of version bits to be set. Just for filling out hte history, that isfixing a bug in an old, old mkfs.xfs on Irix where a certain version failed to zero the superblock(s) before initialising them. Every XFS filesystem made in the last 10 years should have properly initialised superblocks. But still, doing it unconditionally is fine as it will fix stuff like fsfuzzer damage.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Wed Sep 3 16:46:34 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_14 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m83NkXIP021924 for ; Wed, 3 Sep 2008 16:46:33 -0700 X-ASG-Debug-ID: 1220485679-586200bb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 387253FDB95; Wed, 3 Sep 2008 16:47:59 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IERCwDfQotaQpoKG; Wed, 03 Sep 2008 16:47:59 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Kb24s-00045a-SG; Wed, 03 Sep 2008 23:47:58 +0000 Date: Wed, 3 Sep 2008 19:47:58 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Improve caching in libxfs Subject: Re: REVIEW: Improve caching in libxfs Message-ID: <20080903234758.GA18368@infradead.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220485680 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/8152/Wed Sep 3 14:17:58 2008 on oss.sgi.com X-Virus-Status: Clean > hash = cache->c_hash + node->cn_hashidx; > - if (node->cn_count > 0 || > - pthread_mutex_trylock(&hash->ch_mutex) != 0) { > + if (pthread_mutex_trylock(&hash->ch_mutex) != 0) { > pthread_mutex_unlock(&node->cn_mutex); > continue; > } > + ASSERT(node->cn_count == 0); Remove code to check if it's reference but instead assert that it isn't because it's not added to the list in that case. Makes sense. > /* > - * node found, bump node's reference count, move it to the > - * top of its MRU list, and update stats. > + * node found, bump node's reference count, remove it > + * from its MRU list, and update stats. > */ The comment formatting is still b0rked, all the * should line up. > pthread_mutex_lock(&node->cn_mutex); > - node->cn_count++; > > - mru = &cache->c_mrus[node->cn_priority]; > - pthread_mutex_lock(&mru->cm_mutex); > - list_move(&node->cn_mru, &mru->cm_list); > - pthread_mutex_unlock(&mru->cm_mutex); > + if (node->cn_count == 0) { > + ASSERT(node->cn_priority >= 0); > + ASSERT(!list_empty(&node->cn_mru)); > + mru = &cache->c_mrus[node->cn_priority]; > + pthread_mutex_lock(&mru->cm_mutex); > + mru->cm_count--; > + list_del_init(&node->cn_mru); > + pthread_mutex_unlock(&mru->cm_mutex); > + } > + node->cn_count++; Instead of moving it around, remove it from the list whe it was cn_count == 0 and now is rferenced. Makes sense. > - /* add new node to appropriate hash and lowest priority MRU */ > - mru = &cache->c_mrus[0]; > - pthread_mutex_lock(&mru->cm_mutex); > + /* add new node to appropriate hash */ > pthread_mutex_lock(&hash->ch_mutex); > hash->ch_count++; > - mru->cm_count++; > list_add(&node->cn_hash, &hash->ch_list); > - list_add(&node->cn_mru, &mru->cm_list); > pthread_mutex_unlock(&hash->ch_mutex); > - pthread_mutex_unlock(&mru->cm_mutex); Don't add it to the mru list in cache_Get - makes sense. > void > cache_node_put( > + struct cache * cache, > struct cache_node * node) > { > + struct cache_mru * mru; > + > pthread_mutex_lock(&node->cn_mutex); > #ifdef CACHE_DEBUG > if (node->cn_count < 1) { > @@ -368,8 +372,23 @@ cache_node_put( > __FUNCTION__, node->cn_count, node); > cache_abort(); > } > + if (!list_empty(&node->cn_mru)) { > + fprintf(stderr, "%s: node put on node (%p) in MRU list\n", > + __FUNCTION__, node); > + cache_abort(); > + } Assert that we don't put a node that's already on the mru list, okay. Shouldn't this be ASSERT? > #endif > node->cn_count--; > + > + if (node->cn_count == 0) { > + /* add unreferenced node to appropriate MRU for shaker */ > + mru = &cache->c_mrus[node->cn_priority]; > + pthread_mutex_lock(&mru->cm_mutex); > + mru->cm_count++; > + list_add(&node->cn_mru, &mru->cm_list); > + pthread_mutex_unlock(&mru->cm_mutex); > + } And add it to the list, good. > @@ -379,33 +398,14 @@ cache_node_set_priority( > struct cache_node * node, > int priority) > { > - struct cache_mru * mru; > - > if (priority < 0) > priority = 0; > else if (priority > CACHE_MAX_PRIORITY) > priority = CACHE_MAX_PRIORITY; > > pthread_mutex_lock(&node->cn_mutex); > - > ASSERT(node->cn_count > 0); > - if (priority == node->cn_priority) { > - pthread_mutex_unlock(&node->cn_mutex); > - return; > - } > - mru = &cache->c_mrus[node->cn_priority]; > - pthread_mutex_lock(&mru->cm_mutex); > - list_del_init(&node->cn_mru); > - mru->cm_count--; > - pthread_mutex_unlock(&mru->cm_mutex); > - > - mru = &cache->c_mrus[priority]; > - pthread_mutex_lock(&mru->cm_mutex); > - list_add(&node->cn_mru, &mru->cm_list); > node->cn_priority = priority; > - mru->cm_count++; > - pthread_mutex_unlock(&mru->cm_mutex); > - > pthread_mutex_unlock(&node->cn_mutex); Set priority now simply sets the priority and doesn't fuzz with the mru list, good. > cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, > - cache_node_get_priority((struct cache_node *)bp) - 4); > + cache_node_get_priority((struct cache_node *)bp) - 8); ??? > #define B_DIR_BMAP 15 > -#define B_DIR_META_2 13 /* metadata in secondary queue */ > -#define B_DIR_META_H 11 /* metadata fetched for PF_META_ONLY */ > -#define B_DIR_META_S 9 /* single block of metadata */ > -#define B_DIR_META 7 > -#define B_DIR_INODE 6 > -#define B_BMAP 5 > -#define B_INODE 4 > +#define B_DIR_META_2 14 /* metadata in secondary queue */ > +#define B_DIR_META_H 13 /* metadata fetched for PF_META_ONLY */ > +#define B_DIR_META_S 12 /* single block of metadata */ > +#define B_DIR_META 11 > +#define B_DIR_INODE 10 > +#define B_BMAP 9 > +#define B_INODE 8 Changing priorities, this could use some explanation in the patch description.. > -#define B_IS_INODE(b) (((b) & 1) == 0) > -#define B_IS_META(b) (((b) & 1) != 0) > +#define B_IS_INODE(f) (((f) & 5) == 0) > +#define B_IS_META(f) (((f) & 5) != 0) And these two macros really want some comments describing them. From owner-xfs@oss.sgi.com Wed Sep 3 17:54:29 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m840sRhj026324 for ; Wed, 3 Sep 2008 17:54:28 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA22231; Thu, 4 Sep 2008 10:55:52 +1000 Message-ID: <48BF33EC.7080406@sgi.com> Date: Thu, 04 Sep 2008 11:03:40 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: Lachlan McIlroy , xfs@oss.sgi.com Subject: Re: Filesystem corruption writing out unlinked inodes References: <48BCC5B1.7080300@sgi.com> <20080902051524.GC15962@disturbed> <48BCD622.1080406@sgi.com> <20080902062155.GE15962@disturbed> In-Reply-To: <20080902062155.GE15962@disturbed> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/8152/Wed Sep 3 14:17:58 2008 on oss.sgi.com X-Virus-Status: Clean Dave Chinner wrote: > On Tue, Sep 02, 2008 at 03:58:58PM +1000, Lachlan McIlroy wrote: >> Dave Chinner wrote: >>> On Tue, Sep 02, 2008 at 02:48:49PM +1000, Lachlan McIlroy wrote: >>> This is supposed to catch all the inodes in memory and mark them >>> XFS_ISTALE to prevent them from being written back once the >>> transaction is committed. The question is - how are dirty inodes >>> slipping through this? >>> >>> If we are freeing the cluster buffer, then there can be no other >>> active references to any of the inodes, so if they are dirty it >>> has to be due to inactivation transactions and so should be in >>> the log and attached to the buffer due to removal from the >>> unlinked list. >>> >>> The question is - which bit of this is not working? i.e. what is the >>> race condition that is allowing dirty inodes to slip through the >>> locking here? >>> >>> Hmmm - I see that xfs_iflush() doesn't check for XFS_ISTALE when >>> flushing out inodes. Perhaps you could check to see if we are >>> writing an inode marked as such..... >> That's what I was suggesting. > > I'm not suggesting that as a fix. I'm suggesting that you determine > whether the inode being flushed has that flag set or not. If it is > not set, then we need to determine how it slipped through > xfs_ifree_cluster() without being marked XFS_ISTALE, and if it is > set, why it was not marked clean by xfs_istale_done() when the > buffer callbacks are made and the flush lock dropped.... > >> I'm just not sure about the assumption >> that if the flush lock cannot be acquired in xfs_ifree_cluster() then >> the inode must be in the process of being flushed. The flush could >> be aborted due to the inode being pinned or some other case and the >> inode never gets marked as stale. > > Did that happen? > > Basically I'm asking what the sequence of events is that leads up > to this problem - we need to identify the actual race condition > before speculating on potential fixes.... > In the trace below pid 7731 is unlinking an inode and it's not the last inode so it doesn't go through xfs_ifree_cluster() and mark the other inodes as stale. At the same time pid 12269 unlinks the final inode in the cluster and calls xfs_ifree_cluster() but fails to lock the inode held by pid 7731 so it skips it. Pid 12269 deallocates the inode cluster and the disk space is reallocated as user data (the data "temp28/file00006" is what the test writes into it's files). Meanwhile pid 7731 finally continues and tries to flush the inode. Looks like xfs_ifree_cluster() should do a blocking wait on the ilock and maybe move the setting of XFS_ISTALE outside the flock. <1>00000000: 74 65 6d 70 32 38 2f 66 69 6c 65 30 30 30 30 36 temp28/file00006 <1>Filesystem "dm-0": XFS internal error xfs_imap_to_bp at line 187 of file fs/xfs/xfs_inode.c. Caller 0xffffffff8038e599 <4>Pid: 7723, comm: bulkstat_unlink Not tainted 2.6.26 #128 <4> <4>Call Trace: <4> [] xfs_itobp+0xee/0x177 <4> [] xfs_imap_to_bp+0x15d/0x20e <4> [] xfs_itobp+0xee/0x177 <4> [] _xfs_itrace_entry+0xa9/0xae <4> [] xfs_itobp+0xee/0x177 <4> [] xfs_iflush+0x25/0x3f2 <4> [] xfs_iflush+0x299/0x3f2 <4> [] xfs_finish_reclaim+0x43/0x1a9 <4> [] xfs_finish_reclaim+0x143/0x1a9 <4> [] xfs_sync_inodes+0x23a/0x929 <4> [] xfs_syncsub+0x5c/0x23b <4> [] xfs_fs_sync_super+0x33/0xdd <4> [] _spin_unlock_irq+0x1f/0x22 <4> [] __down_read+0x34/0x9e <4> [] sync_filesystems+0xb6/0x108 <4> [] do_sync+0x25/0x50 <4> [] sys_sync+0xe/0x16 <4> [] system_call_after_swapgs+0x7b/0x80 [5]more> <4> <7>xfs_imap_to_bp: ip 0xffff811006853670, bp 0xffff810ff4ffc008 <0>Device dm-0 - bad inode magic/vsn daddr 645205376 #0 (magic=7465) <0>------------[ cut here ]------------ <2>kernel BUG at fs/xfs/support/debug.c:54! [5]kdb> [5]kdb> xnode 0xffff811006853670 mount 0xffff81102322e188 mnext 0xffff811025f01570 mprev 0xffff810ff788d360 vnode 0x0000000000000000 dev fe00000 ino 1610663688[c:c70:8] blkno 0x26750d80 len 0x10 boffset 0x800 transp 0x0000000000000000 &itemp 0xffff810ffc954be0 &lock 0xffff811006853720 &iolock 0xffff811006853788 &flush 0xffff8110068537f0 (0) pincount 0x0 udquotp 0x0000000000000000 gdquotp 0x0000000000000000 new_size 0 flags 0x28 update_core 0 update size 0 gen 0x0 delayed blks 0size 0 trace 0xffff810fea462590 bmap_trace 0xffff810fea462560 bmbt trace 0xffff810fea462800 rw trace 0xffff810fea462230 ilock trace 0xffff810fea462200 dir trace 0xffff810fea4621d0 data fork bytes 0x0 real_bytes 0x0 lastex 0x0 u1:extents 0x0000000000000000 broot 0x0000000000000000 broot_bytes 0x0 ext_max 9 flags 0x2 u2 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 attr fork empty [5]more> magic 0x494e mode 00 (?------------) version 0x2 format 0x2 (extents) nlink 0 uid 0 gid 0 projid 0 flushiter 0 atime 1220486941:196143812 mtime 1220486941d:196143812 ctime 1220486941:196143812 size 0 nblocks 0 extsize 0x0 nextents 0x0 anextents 0x0 forkoff 0 aformat 0x2 (extents) dmevmask 0x0 dmstate 0x0 flags 0x0 <> gen 0xd251038e --> itrace @ 0xffff811006853670/0xffff810fea462590 entry to xfs_iput i_count = 3 cpu = 6 pid = 7722 ra = xfs_trans_unlock_chunk+0x77 entry to xfs_iunlock i_count = 3 cpu = 6 pid = 7722 ra = xfs_iput+0x29 rele @fs/xfs/xfs_iget.c:406(xfs_iput+0x42) i_count 3 => 2 cpu = 6 pid = 7722 ra = xfs_trans_unlock_chunk+0x77 exit from xfs_remove i_count = 2 cpu = 6 pid = 7722 ra = xfs_vn_unlink+0x37 entry to xfs_ilock i_count = 1 cpu = 1 pid = 7731 ra = xfs_iomap+0x14a entry to xfs_iunlock i_count = 1 cpu = 1 pid = 7731 ra = xfs_iomap+0x2eb entry to xfs_ilock i_count = 1 cpu = 1 pid = 7731 ra = xfs_iomap_write_allocate+0x179 entry to xfs_iunlock i_count = 1 cpu = 1 pid = 7731 ra = xfs_iomap_write_allocate+0x302 entry to xfs_fs_write_inode i_count = 1 cpu = 1 pid = 7731 ra = __writeback_single_inode+0x18b entry to xfs_ilock_nowait i_count = 1 cpu = 1 pid = 7731 ra = xfs_inode_flush+0x9b exit from success i_count = 1 cpu = 1 pid = 7731 ra = xfs_inode_flush+0x9b entry to xfs_iunlock i_count = 1 cpu = 1 pid = 7731 ra = xfs_inode_flush+0x132 entry to xfs_ilock i_count = 0 cpu = 3 pid = 381 ra = xfs_setfilesize+0x7c entry to xfs_iunlock i_count = 0 cpu = 3 pid = 381 ra = xfs_end_bio_delalloc+0x10 entry to xfs_fs_clear_inode i_count = 0 cpu = 1 pid = 7731 ra = clear_inode+0x9c entry to xfs_inactive i_count = 0 cpu = 1 pid = 7731 ra = xfs_fs_clear_inode+0xbd entry to xfs_ilock i_count = 0 cpu = 1 pid = 7731 ra = xfs_inactive+0x1c2 entry to xfs_ilock i_count = 0 cpu = 1 pid = 7731 ra = xfs_inactive+0x23d entry to xfs_ifree i_count = 0 cpu = 1 pid = 7731 ra = xfs_inactive+0x3f8 entry to xfs_itobp i_count = 0 cpu = 1 pid = 7731 ra = xfs_iunlink_remove+0x251 entry to xfs_itobp i_count = 0 cpu = 1 pid = 7731 ra = xfs_ifree+0x1ce entry to xfs_ilock_nowait i_count = 0 cpu = 3 pid = 12269 ra = xfs_ifree_cluster+0x2ee exit from fail i_count = 0 cpu = 3 pid = 12269 ra = xfs_ifree_cluster+0x2ee entry to xfs_iunlock i_count = 0 cpu = 1 pid = 7731 ra = xfs_inactive+0x4ea entry to xfs_reclaim i_count = 0 cpu = 1 pid = 7731 ra = xfs_fs_clear_inode+0xde entry to xfs_ilock_nowait i_count = -1 cpu = 6 pid = 7723 ra = xfs_sync_inodes+0x161 exit from success i_count = 18446744073709551615 cpu = 6 pid = 7723 ra = xfs_sync_inodes+0x161 entry to xfs_iflock_nowait i_count = -1 cpu = 6 pid = 7723 ra = xfs_syncsub+0x5c exit from success i_count = 18446744073709551615 cpu = 6 pid = 7723 ra = xfs_syncsub+0x5c entry to xfs_finish_reclaim i_count = -1 cpu = 6 pid = 7723 ra = xfs_sync_inodes+0x23a entry to xfs_iflush i_count = -1 cpu = 6 pid = 7723 ra = xfs_finish_reclaim+0x143 entry to xfs_itobp i_count = -1 cpu = 6 pid = 7723 ra = xfs_iflush+0x299 From owner-xfs@oss.sgi.com Wed Sep 3 22:53:10 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m845r7Ft019742 for ; Wed, 3 Sep 2008 22:53:09 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA27306; Thu, 4 Sep 2008 15:54:30 +1000 Date: Thu, 04 Sep 2008 15:56:35 +1000 To: "Christoph Hellwig" Subject: Re: REVIEW: Improve caching in libxfs From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080903234758.GA18368@infradead.org> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <20080903234758.GA18368@infradead.org> User-Agent: Opera Mail/9.51 (Win32) X-Virus-Scanned: ClamAV 0.91.2/8153/Wed Sep 3 19:27:59 2008 on oss.sgi.com X-Virus-Status: Clean Yeah, I'm not suprised by those comments :) Been trying to work out how to "describe" them better... On Thu, 04 Sep 2008 09:47:58 +1000, Christoph Hellwig wrote: >> cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, >> - cache_node_get_priority((struct cache_node *)bp) - 4); >> + cache_node_get_priority((struct cache_node *)bp) - 8); > > ??? > >> #define B_DIR_BMAP 15 >> -#define B_DIR_META_2 13 /* metadata in secondary queue */ >> -#define B_DIR_META_H 11 /* metadata fetched for PF_META_ONLY */ >> -#define B_DIR_META_S 9 /* single block of metadata */ >> -#define B_DIR_META 7 >> -#define B_DIR_INODE 6 >> -#define B_BMAP 5 >> -#define B_INODE 4 >> +#define B_DIR_META_2 14 /* metadata in secondary queue */ >> +#define B_DIR_META_H 13 /* metadata fetched for PF_META_ONLY */ >> +#define B_DIR_META_S 12 /* single block of metadata */ >> +#define B_DIR_META 11 >> +#define B_DIR_INODE 10 >> +#define B_BMAP 9 >> +#define B_INODE 8 > > Changing priorities, this could use some explanation in the > patch description.. > >> -#define B_IS_INODE(b) (((b) & 1) == 0) >> -#define B_IS_META(b) (((b) & 1) != 0) >> +#define B_IS_INODE(f) (((f) & 5) == 0) >> +#define B_IS_META(f) (((f) & 5) != 0) > > And these two macros really want some comments describing them. > > How's this snippet of the patch then? Index: xfs-cmds/xfsprogs/include/cache.h =================================================================== --- xfs-cmds.orig/xfsprogs/include/cache.h +++ xfs-cmds/xfsprogs/include/cache.h @@ -20,6 +20,17 @@ #define HASH_CACHE_RATIO 8 +/* + * Cache priorities range from BASE to MAX. + * + * For prefetch support, the top half of the range starts at + * CACHE_PREFETCH_PRIORITY and everytime the buffer is fetched + * and is at or above this priority level, it is reduced to + * below this level (refer to libxfs_getbuf). + */ + +#define CACHE_BASE_PRIORITY 0 +#define CACHE_PREFETCH_PRIORITY 8 #define CACHE_MAX_PRIORITY 15 /* Index: xfs-cmds/xfsprogs/libxfs/rdwr.c =================================================================== --- xfs-cmds.orig/xfsprogs/libxfs/rdwr.c +++ xfs-cmds/xfsprogs/libxfs/rdwr.c @@ -393,7 +393,8 @@ libxfs_getbuf(dev_t device, xfs_daddr_t if (use_xfs_buf_lock) pthread_mutex_lock(&bp->b_lock); cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, - cache_node_get_priority((struct cache_node *)bp) - 4); + cache_node_get_priority((struct cache_node *)bp) - + CACHE_PREFETCH_PRIORITY); #ifdef XFS_BUF_TRACING pthread_mutex_lock(&libxfs_bcache->c_mutex); lock_buf_count++; Index: xfs-cmds/xfsprogs/repair/prefetch.c =================================================================== --- xfs-cmds.orig/xfsprogs/repair/prefetch.c +++ xfs-cmds/xfsprogs/repair/prefetch.c @@ -35,19 +35,36 @@ static int pf_batch_fsbs; static void pf_read_inode_dirs(prefetch_args_t *, xfs_buf_t *); -/* buffer priorities for the libxfs cache */ +/* + * Buffer priorities for the libxfs cache + * + * Directory metadata is ranked higher than other metadata as it's used + * in phases 3, 4 and 6, while other metadata is only used in 3 & 4. + */ -#define B_DIR_BMAP 15 -#define B_DIR_META_2 13 /* metadata in secondary queue */ -#define B_DIR_META_H 11 /* metadata fetched for PF_META_ONLY */ -#define B_DIR_META_S 9 /* single block of metadata */ -#define B_DIR_META 7 -#define B_DIR_INODE 6 -#define B_BMAP 5 -#define B_INODE 4 +/* intermediate directory btree nodes - can't be queued */ +#define B_DIR_BMAP CACHE_PREFETCH_PRIORITY + 7 +/* directory metadata in secondary queue */ +#define B_DIR_META_2 CACHE_PREFETCH_PRIORITY + 6 +/* dir metadata that had to fetched from the primary queue to avoid stalling */ +#define B_DIR_META_H CACHE_PREFETCH_PRIORITY + 5 +/* single block of directory metadata (can't batch read) */ +#define B_DIR_META_S CACHE_PREFETCH_PRIORITY + 4 +/* dir metadata with more than one block fetched in a single I/O */ +#define B_DIR_META CACHE_PREFETCH_PRIORITY + 3 +/* inode clusters with directory inodes */ +#define B_DIR_INODE CACHE_PREFETCH_PRIORITY + 2 +/* intermediate extent btree nodes */ +#define B_BMAP CACHE_PREFETCH_PRIORITY + 1 +/* inode clusters without any directory entries */ +#define B_INODE CACHE_PREFETCH_PRIORITY -#define B_IS_INODE(b) (((b) & 1) == 0) -#define B_IS_META(b) (((b) & 1) != 0) +/* + * Test if bit 0 or 2 is set in the "priority tag" of the buffer to see if + * the buffer is for an inode or other metadata. + */ +#define B_IS_INODE(f) (((f) & 5) == 0) +#define B_IS_META(f) (((f) & 5) != 0) #define DEF_BATCH_BYTES 0x10000 From owner-xfs@oss.sgi.com Wed Sep 3 22:58:45 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m845wi9W020486 for ; Wed, 3 Sep 2008 22:58:45 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA27480; Thu, 4 Sep 2008 16:00:08 +1000 Date: Thu, 04 Sep 2008 16:02:14 +1000 To: "Christoph Hellwig" Subject: Re: REVIEW: Improve caching in libxfs From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080903234758.GA18368@infradead.org> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <20080903234758.GA18368@infradead.org> User-Agent: Opera Mail/9.51 (Win32) X-Virus-Scanned: ClamAV 0.91.2/8153/Wed Sep 3 19:27:59 2008 on oss.sgi.com X-Virus-Status: Clean On Thu, 04 Sep 2008 09:47:58 +1000, Christoph Hellwig wrote: >> void >> cache_node_put( >> + struct cache * cache, >> struct cache_node * node) >> { >> + struct cache_mru * mru; >> + >> pthread_mutex_lock(&node->cn_mutex); >> #ifdef CACHE_DEBUG >> if (node->cn_count < 1) { >> @@ -368,8 +372,23 @@ cache_node_put( >> __FUNCTION__, node->cn_count, node); >> cache_abort(); >> } >> + if (!list_empty(&node->cn_mru)) { >> + fprintf(stderr, "%s: node put on node (%p) in MRU list\n", >> + __FUNCTION__, node); >> + cache_abort(); >> + } > > Assert that we don't put a node that's already on the mru list, okay. > Shouldn't this be ASSERT? I chose to make this always abort as it can be triggered outside of libxfs by xfsprogs usage of it (ie. doing a "put" on a buffer that has already been "put"). So, I thought this needs to always work, debug or non-debug and halt immediately if it happens. From owner-xfs@oss.sgi.com Thu Sep 4 02:07:16 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m8497EP5010790 for ; Thu, 4 Sep 2008 02:07:16 -0700 X-ASG-Debug-ID: 1220519319-28e603290000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 92FA711C7E7D for ; Thu, 4 Sep 2008 02:08:39 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id T3lAmD73XgctCE4B for ; Thu, 04 Sep 2008 02:08:39 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhIFAGBBv0h5LD0iXWdsb2JhbACSSx6lB4Fn X-IronPort-AV: E=Sophos;i="4.32,320,1217773800"; d="scan'208";a="197541545" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 04 Sep 2008 18:38:37 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KbApP-0001Y2-M1; Thu, 04 Sep 2008 19:08:35 +1000 Date: Thu, 4 Sep 2008 19:08:35 +1000 From: Dave Chinner To: Lachlan McIlroy Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Filesystem corruption writing out unlinked inodes Subject: Re: Filesystem corruption writing out unlinked inodes Message-ID: <20080904090835.GE15950@disturbed> Mail-Followup-To: Lachlan McIlroy , xfs@oss.sgi.com References: <48BCC5B1.7080300@sgi.com> <20080902051524.GC15962@disturbed> <48BCD622.1080406@sgi.com> <20080902062155.GE15962@disturbed> <48BF33EC.7080406@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48BF33EC.7080406@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220519321 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4614 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8155/Thu Sep 4 00:16:44 2008 on oss.sgi.com X-Virus-Status: Clean On Thu, Sep 04, 2008 at 11:03:40AM +1000, Lachlan McIlroy wrote: > Dave Chinner wrote: >> On Tue, Sep 02, 2008 at 03:58:58PM +1000, Lachlan McIlroy wrote: >>> I'm just not sure about the assumption >>> that if the flush lock cannot be acquired in xfs_ifree_cluster() then >>> the inode must be in the process of being flushed. The flush could >>> be aborted due to the inode being pinned or some other case and the >>> inode never gets marked as stale. >> >> Did that happen? >> >> Basically I'm asking what the sequence of events is that leads up >> to this problem - we need to identify the actual race condition >> before speculating on potential fixes.... >> > > In the trace below pid 7731 is unlinking an inode and it's not the last > inode so it doesn't go through xfs_ifree_cluster() and mark the other > inodes as stale. At the same time pid 12269 unlinks the final inode in > the cluster and calls xfs_ifree_cluster() but fails to lock the inode > held by pid 7731 so it skips it. Pid 12269 deallocates the inode cluster > and the disk space is reallocated as user data (the data "temp28/file00006" > is what the test writes into it's files). Meanwhile pid 7731 finally > continues and tries to flush the inode. Ah - how are we unlinking two inodes in the one AG at the same time? That's supposed to be serialised by the AGI buffer lock.... Ah - I see - we hold the inode across the transaction commit in xfs_inactive(). That means that the AGI is unlocked well before the inode is unlocked, which allows the racing inode inactivate to lock the AGI and call xfs_icluster_free() before the inode is unlocked after the transaction commit. Ok, now we understand the race condition.... > Looks like xfs_ifree_cluster() should do a blocking wait on the ilock and > maybe move the setting of XFS_ISTALE outside the flock. No, we can't do a blocking wait on the ilock - we already hold the ilock on other inodes and so we could deadlock by doing that. Hmmmm - I wonder what the reason for the holding of the inode lock over the transaction commit is.... Perhaps it is to make the detatching of the dquots atomic with the inactivation (seems like a valid reason to me). Perhap we should also hold the AGI buffer across the transaction commit as well and only release that after the inode is unlocked so the cluster free does not make progress until after the inode inactivation of all inodes in the cluster is complete.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Thu Sep 4 09:58:10 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m84Gw81X030781 for ; Thu, 4 Sep 2008 09:58:10 -0700 X-ASG-Debug-ID: 1220547575-3960015b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 92FC7130115B for ; Thu, 4 Sep 2008 09:59:35 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id yAPM2VASVgzSbFEJ for ; Thu, 04 Sep 2008 09:59:35 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id m84GtWs0028277; Thu, 4 Sep 2008 12:55:57 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m84GtKJq000709; Thu, 4 Sep 2008 12:55:20 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id m84GtGk8028190; Thu, 4 Sep 2008 12:55:16 -0400 Message-ID: <48C012F3.3000408@redhat.com> Date: Thu, 04 Sep 2008 11:55:15 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (X11/20080501) MIME-Version: 1.0 To: Takashi Sato CC: Andrew Morton , "linux-fsdevel@vger.kernel.org" , "dm-devel@redhat.com" , "viro@ZenIV.linux.org.uk" , "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , Christoph Hellwig , "axboe@kernel.dk" , "mtk.manpages@googlemail.com" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: Re: [PATCH 1/3] Implement generic freeze feature Subject: Re: [PATCH 1/3] Implement generic freeze feature References: <20080818212819t-sato@mail.jp.nec.com> In-Reply-To: <20080818212819t-sato@mail.jp.nec.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1220547575 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4644 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/8161/Thu Sep 4 08:49:45 2008 on oss.sgi.com X-Virus-Status: Clean Takashi Sato wrote: > @@ -141,6 +142,57 @@ static int ioctl_fioasync(unsigned int f > } > > /* > + * ioctl_freeze - Freeze the filesystem. > + * > + * @filp: target file > + * > + * Call freeze_bdev() to freeze the filesystem. > + */ > +static int ioctl_freeze(struct file *filp) > +{ > + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; > + > + if (!capable(CAP_SYS_ADMIN)) > + return -EPERM; > + > + /* If filesystem doesn't support freeze feature, return. */ > + if (sb->s_op->write_super_lockfs == NULL) > + return -EOPNOTSUPP; > + > + /* If a regular file or a directory isn't specified, return. */ > + if (sb->s_bdev == NULL) > + return -EINVAL; > + > + /* Freeze */ > + sb = freeze_bdev(sb->s_bdev); > + if (IS_ERR(sb)) > + return PTR_ERR(sb); > + return 0; > +} Not a problem with your patch exactly, but I was just wondering; you check here whether the sb returned from freeze_bdev is an ERR_PTR (as does lock_fs()) - but, freeze_bdev never returns an error, does it? ->write_super_lockfs is a void... It really seems that at least we should be able to handle IO errors on the freeze request, and tell the user "No, your filesystem was not frozen..."? Maybe I'll whip up a patch to see about propagating freeze errors up from the filesystems that implement it, unless I'm missing some reason not to do so...? Also, should this be checking for a NULL returned from freeze_bdev as well? I guess this should never happen if we have a file open on which we are calling the ioctl ... -Eric From owner-xfs@oss.sgi.com Thu Sep 4 10:13:44 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m84HDfED000431 for ; Thu, 4 Sep 2008 10:13:44 -0700 X-ASG-Debug-ID: 1220548507-4f08038f0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ciao.gmane.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E95E3401EC8 for ; Thu, 4 Sep 2008 10:15:07 -0700 (PDT) Received: from ciao.gmane.org (main.gmane.org [80.91.229.2]) by cuda.sgi.com with ESMTP id vYPCudZEACc5YGjR for ; Thu, 04 Sep 2008 10:15:07 -0700 (PDT) Received: from root by ciao.gmane.org with local (Exim 4.43) id 1KbIQA-0001z2-N7 for linux-xfs@oss.sgi.com; Thu, 04 Sep 2008 17:15:02 +0000 Received: from ns1.q-leap.de ([153.94.51.193]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 04 Sep 2008 17:15:02 +0000 Received: from bs by ns1.q-leap.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 04 Sep 2008 17:15:02 +0000 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Bernd Schubert X-ASG-Orig-Subj: xfs corruptions Subject: xfs corruptions Date: Thu, 04 Sep 2008 19:11:48 +0200 Organization: q-leap networks GmbH Lines: 110 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: ns1.q-leap.de User-Agent: KNode/0.10.9 Sender: news X-Barracuda-Connect: main.gmane.org[80.91.229.2] X-Barracuda-Start-Time: 1220548508 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4645 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8161/Thu Sep 4 08:49:45 2008 on oss.sgi.com X-Virus-Status: Clean Hello, I'm presently debugging the error handler of the MPT fusion driver and therefore causing errors on the disk (Infortrend scsi hardware raids). When I later on try to delete files and directories having been created before and during the failures, "rm -fr" simply says directory not empty. No message in dmesg about it, but xfs_repair reports errors, see below. Once xfs_repair has done its jobs, removing these directories works fine. But this shouldn't happen, should it? This is with 2.6.26 root@beo-11:~# xfs_repair /dev/inf/box-3a/disc Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 imap claims a free inode 1073741964 is in use, correcting imap and clearing inode cleared inode 1073741964 - agno = 2 imap claims a free inode 2147483788 is in use, correcting imap and clearing inode cleared inode 2147483788 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - 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 entry "9B769A18" in shortform directory 1073741962 references free inode 1073741964 junking entry "9B769A18" in directory inode 1073741962 - agno = 2 entry "E95A1D2D" in shortform directory 2147483786 references free inode 2147483788 junking entry "E95A1D2D" in directory inode 2147483786 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Thanks, Bernd From owner-xfs@oss.sgi.com Thu Sep 4 11:38:10 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m84Ic9ie007059 for ; Thu, 4 Sep 2008 11:38:10 -0700 X-ASG-Debug-ID: 1220553575-37ad00ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 828BB1243570; Thu, 4 Sep 2008 11:39:35 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id V0DLOoRvK5DaLC0A; Thu, 04 Sep 2008 11:39:35 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KbJjz-0002nd-If; Thu, 04 Sep 2008 18:39:35 +0000 Date: Thu, 4 Sep 2008 14:39:35 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Improve caching in libxfs Subject: Re: REVIEW: Improve caching in libxfs Message-ID: <20080904183935.GA25890@infradead.org> References: <20080903234758.GA18368@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220553576 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4651 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8162/Thu Sep 4 09:38:45 2008 on oss.sgi.com X-Virus-Status: Clean Looks much better, thanks. On Thu, Sep 04, 2008 at 03:56:35PM +1000, Barry Naujok wrote: > Index: xfs-cmds/xfsprogs/include/cache.h > =================================================================== > --- xfs-cmds.orig/xfsprogs/include/cache.h > +++ xfs-cmds/xfsprogs/include/cache.h > @@ -20,6 +20,17 @@ > > #define HASH_CACHE_RATIO 8 > > +/* > + * Cache priorities range from BASE to MAX. > + * > + * For prefetch support, the top half of the range starts at > + * CACHE_PREFETCH_PRIORITY and everytime the buffer is fetched > + * and is at or above this priority level, it is reduced to > + * below this level (refer to libxfs_getbuf). > + */ > + > +#define CACHE_BASE_PRIORITY 0 > +#define CACHE_PREFETCH_PRIORITY 8 > #define CACHE_MAX_PRIORITY 15 > > /* > Index: xfs-cmds/xfsprogs/libxfs/rdwr.c > =================================================================== > --- xfs-cmds.orig/xfsprogs/libxfs/rdwr.c > +++ xfs-cmds/xfsprogs/libxfs/rdwr.c > @@ -393,7 +393,8 @@ libxfs_getbuf(dev_t device, xfs_daddr_t > if (use_xfs_buf_lock) > pthread_mutex_lock(&bp->b_lock); > cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, > - cache_node_get_priority((struct cache_node *)bp) - 4); > + cache_node_get_priority((struct cache_node *)bp) - > + CACHE_PREFETCH_PRIORITY); > #ifdef XFS_BUF_TRACING > pthread_mutex_lock(&libxfs_bcache->c_mutex); > lock_buf_count++; > Index: xfs-cmds/xfsprogs/repair/prefetch.c > =================================================================== > --- xfs-cmds.orig/xfsprogs/repair/prefetch.c > +++ xfs-cmds/xfsprogs/repair/prefetch.c > @@ -35,19 +35,36 @@ static int pf_batch_fsbs; > > static void pf_read_inode_dirs(prefetch_args_t *, xfs_buf_t *); > > -/* buffer priorities for the libxfs cache */ > +/* > + * Buffer priorities for the libxfs cache > + * > + * Directory metadata is ranked higher than other metadata as it's used > + * in phases 3, 4 and 6, while other metadata is only used in 3 & 4. > + */ > > -#define B_DIR_BMAP 15 > -#define B_DIR_META_2 13 /* metadata in secondary queue */ > -#define B_DIR_META_H 11 /* metadata fetched for PF_META_ONLY */ > -#define B_DIR_META_S 9 /* single block of metadata */ > -#define B_DIR_META 7 > -#define B_DIR_INODE 6 > -#define B_BMAP 5 > -#define B_INODE 4 > +/* intermediate directory btree nodes - can't be queued */ > +#define B_DIR_BMAP CACHE_PREFETCH_PRIORITY + 7 > +/* directory metadata in secondary queue */ > +#define B_DIR_META_2 CACHE_PREFETCH_PRIORITY + 6 > +/* dir metadata that had to fetched from the primary queue to avoid > stalling */ > +#define B_DIR_META_H CACHE_PREFETCH_PRIORITY + 5 > +/* single block of directory metadata (can't batch read) */ > +#define B_DIR_META_S CACHE_PREFETCH_PRIORITY + 4 > +/* dir metadata with more than one block fetched in a single I/O */ > +#define B_DIR_META CACHE_PREFETCH_PRIORITY + 3 > +/* inode clusters with directory inodes */ > +#define B_DIR_INODE CACHE_PREFETCH_PRIORITY + 2 > +/* intermediate extent btree nodes */ > +#define B_BMAP CACHE_PREFETCH_PRIORITY + 1 > +/* inode clusters without any directory entries */ > +#define B_INODE CACHE_PREFETCH_PRIORITY > > -#define B_IS_INODE(b) (((b) & 1) == 0) > -#define B_IS_META(b) (((b) & 1) != 0) > +/* > + * Test if bit 0 or 2 is set in the "priority tag" of the buffer to see if > + * the buffer is for an inode or other metadata. > + */ > +#define B_IS_INODE(f) (((f) & 5) == 0) > +#define B_IS_META(f) (((f) & 5) != 0) > > #define DEF_BATCH_BYTES 0x10000 > ---end quoted text--- From owner-xfs@oss.sgi.com Thu Sep 4 11:38:50 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m84IcmoE007183 for ; Thu, 4 Sep 2008 11:38:49 -0700 X-ASG-Debug-ID: 1220553614-1eeb03840000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D67CB4027C7; Thu, 4 Sep 2008 11:40:14 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id wxeQHDtDCblsxt0Z; Thu, 04 Sep 2008 11:40:14 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1KbJkc-0004Hy-1m; Thu, 04 Sep 2008 18:40:14 +0000 Date: Thu, 4 Sep 2008 14:40:14 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Improve caching in libxfs Subject: Re: REVIEW: Improve caching in libxfs Message-ID: <20080904184014.GB25890@infradead.org> References: <20080903234758.GA18368@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1220553615 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4651 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/8162/Thu Sep 4 09:38:45 2008 on oss.sgi.com X-Virus-Status: Clean On Thu, Sep 04, 2008 at 04:02:14PM +1000, Barry Naujok wrote: >> Assert that we don't put a node that's already on the mru list, okay. >> Shouldn't this be ASSERT? > > I chose to make this always abort as it can be triggered outside of > libxfs by xfsprogs usage of it (ie. doing a "put" on a buffer that has > already been "put"). > > So, I thought this needs to always work, debug or non-debug and > halt immediately if it happens. Ok, makes sense. From owner-xfs@oss.sgi.com Thu Sep 4 16:00:52 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m84N0qQC027978 for ; Thu, 4 Sep 2008 16:00:52 -0700 X-ASG-Debug-ID: 1220569338-453c02a50000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B22963F1783 for ; Thu, 4 Sep 2008 16:02:18 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id JtcF9CGbBlcjVglo for ; Thu, 04 Sep 2008 16:02:18 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ag4FAEAGwEh5LD0iXWdsb2JhbACSKh6lTIFl X-IronPort-AV: E=Sophos;i="4.32,320,1217773800"; d="scan'208";a="197948627" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 05 Sep 2008 08:32:11 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KbNq6-0002lP-8y; Fri, 05 Sep 2008 09:02:10 +1000 Date: Fri, 5 Sep 2008 09:02:10 +1000 From: Dave Chinner To: Bernd Schubert Cc: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs corruptions Subject: Re: xfs corruptions Message-ID: <20080904230210.GA5991@disturbed> Mail-Followup-To: Bernd Schubert , linux-xfs@oss.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.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220569339 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0003 1.0000 -2.0192 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Sep 04, 2008 at 07:11:48PM +0200, Bernd Schubert wrote: > Hello, > > I'm presently debugging the error handler of the MPT fusion driver and > therefore causing errors on the disk (Infortrend scsi hardware raids). > When I later on try to delete files and directories having been created > before and during the failures, "rm -fr" simply says directory not empty. > No message in dmesg about it, but xfs_repair reports errors, see below. > Once xfs_repair has done its jobs, removing these directories works fine. > But this shouldn't happen, should it? This is with 2.6.26 So we have an inode that is marked free in the AGI btree, but apparently still in use according to the shortform directory that referenced it. There are two possibilities here: The first possibility is the inode btree buffer containing the record indicating the inode is free/used never got written to disk while the other metadata blocks made it to disk. Seeing as the filesystem didn't hang here, it implies that the buffer was written so that on I/O completion the tail of the log could move forward. That is, the I/O was issued, no error was reported, but the I/O never made it to disk. If there was an error, you should see something like: Warning: Device , XFS metadata write error, block 0x456 in in the syslog indicating a write error. In this case it woul dbe non-fatal and XFS would try to write it again a little later. The second possibility is that the write of the inode containing the shortform directory to disk did not actually hit the disk, but that implies unlinks had already taken place well before the 'rm -rf' was executed. Perhaps your workload does that.... However, both cases imply that an I/O was indicated as completing successfully when they did not get written to disk, and that points to a bug in the error handling in the underlying driver. That being said - it could be a bug in the XFS error handling that is causing this, but XFS tends to be pretty noisy when errors occur. I guess that you need to add more tracing to indicate when errors are induced so we can check if errors are being created against the same buffers that the inconsistent state is being found in. That will help point out if the errors are being reported to XFS or not correctly. Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Thu Sep 4 16:12:58 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m84NCubt028760 for ; Thu, 4 Sep 2008 16:12:58 -0700 X-ASG-Debug-ID: 1220570061-75a7000c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3AFAA404295 for ; Thu, 4 Sep 2008 16:14:21 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id 9E0fDc3bI6DGCEQg for ; Thu, 04 Sep 2008 16:14:21 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ag4FAEAGwEh5LD0iXWdsb2JhbACSKh6lTIFl X-IronPort-AV: E=Sophos;i="4.32,320,1217773800"; d="scan'208";a="197957630" Received: from ppp121-44-61-34.lns10.syd7.internode.on.net (HELO disturbed) ([121.44.61.34]) by ipmail05.adl2.internode.on.net with ESMTP; 05 Sep 2008 08:44:20 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1KbO1q-000318-5Z; Fri, 05 Sep 2008 09:14:18 +1000 Date: Fri, 5 Sep 2008 09:14:18 +1000 From: Dave Chinner To: Ed Cashin Cc: xfs@oss.sgi.com, Adrian Bunk X-ASG-Orig-Subj: Re: xfs_growfs fix backport for 2.6.16.y Subject: Re: xfs_growfs fix backport for 2.6.16.y Message-ID: <20080904231418.GB5991@disturbed> Mail-Followup-To: Ed Cashin , xfs@oss.sgi.com, Adrian Bunk References: <20080825153931.GD7575@coraid.com> <20080826020101.GU5706@disturbed> <20080903182701.GA29192@coraid.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080903182701.GA29192@coraid.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1220570064 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0200 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Sep 03, 2008 at 02:27:02PM -0400, Ed Cashin wrote: > On Tue, Aug 26, 2008 at 12:01:01PM +1000, Dave Chinner wrote: > > On Mon, Aug 25, 2008 at 11:39:31AM -0400, Ed Cashin wrote: > ... > > > I backported your fix, > > > > > > commit 20f4ebf2bf2f57c1a9abb3655391336cc90314b3 > ... > > > ... to the 2.6.16.y git tree, and the result is included below. When > > > I apply this backported fix to 2.6.16.62, I can grow an online XFS by > > > 10 terabytes without any trouble. > > ... > > I suggest you make sure it passes test 078 in the xfsqa suite (part > > of the xfs-cmds tree) as that tests all the nasty growfs corner > > cases. You'll need to test it on 32 bit and 64 bit machines.... > > > > If it passes that then I don't see any problems - SGI backported > > this for sles10 which is based on 2.6.16 a long time ago. > > On a 64-bit system running 2.6.16.62 with this patch, test 078 does > not succeed because of one difference in the output file, the line in > the diff below. Instead of a new size of 4194304001 blocks, the new > size is 4194304000 blocks. Ah, yes. That. I think Barry can try to explain that one because: http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/078.out.diff?r1=1.3;r2=1.4 The test golden output was changed instead of someone understanding why the fixes to growfs changed the size that the filesystem was grown to. ISTR being opposed to changing the golden output because it was the wrong thing to do and would break QA on older kernels, not to mention that it indicated some possible off-by-one bug in a change that had been made at some point... Other than that, the backport should be fine given it passed all the other parts of the test.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Thu Sep 4 18:25:54 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m851PqGQ008804 for ; Thu, 4 Sep 2008 18:25:53 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21587; Fri, 5 Sep 2008 11:27:19 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 51B6A58C52AB; Fri, 5 Sep 2008 11:27:19 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 986491 - Improve caching in libxfs Message-Id: <20080905012719.51B6A58C52AB@chook.melbourne.sgi.com> Date: Fri, 5 Sep 2008 11:27:19 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) Change the libxfs cache MRU to only store unreferenced blocks so the searching doesn't scan through referenced blocks. Date: Fri Sep 5 11:26:21 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:32049a xfsprogs/libxfs/rdwr.c - 1.39 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/rdwr.c.diff?r1=text&tr1=1.39&r2=text&tr2=1.38&f=h - Improve libxfs cache xfsprogs/include/cache.h - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/cache.h.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h - Improve libxfs cache xfsprogs/libxfs/cache.c - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/cache.c.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h xfsprogs/repair/prefetch.c - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/prefetch.c.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h - Improve libxfs cache From owner-xfs@oss.sgi.com Thu Sep 4 18:54:17 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m851sFpN010516 for ; Thu, 4 Sep 2008 18:54:16 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22216; Fri, 5 Sep 2008 11:55:42 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id A68ED58C52AB; Fri, 5 Sep 2008 11:55:42 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 983923 - xfs_repair - inode di_size not checked for validity with directories Message-Id: <20080905015542.A68ED58C52AB@chook.melbourne.sgi.com> Date: Fri, 5 Sep 2008 11:55:42 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) Check for invalid di_size in xfs_repair Date: Fri Sep 5 11:54:59 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:32051a xfsprogs/repair/dinode.c - 1.32 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/dinode.c.diff?r1=text&tr1=1.32&r2=text&tr2=1.31&f=h - Check for invalid inode di_size From owner-xfs@oss.sgi.com Thu Sep 4 19:28:10 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m852S8CZ012694 for ; Thu, 4 Sep 2008 19:28:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA22875; Fri, 5 Sep 2008 12:29:35 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 8D81F58C52AB; Fri, 5 Sep 2008 12:29:35 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 986494 - xfs_repair - restoring missing ".." entries doesn't work Message-Id: <20080905022935.8D81F58C52AB@chook.melbourne.sgi.com> Date: Fri, 5 Sep 2008 12:29:35 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) Make sure xfs_repair can restore bad or missing ".." entries Date: Fri Sep 5 12:28:57 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:32054a xfsprogs/VERSION - 1.182 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/VERSION.diff?r1=text&tr1=1.182&r2=text&tr2=1.181&f=h xfsprogs/doc/CHANGES - 1.255 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/doc/CHANGES.diff?r1=text&tr1=1.255&r2=text&tr2=1.254&f=h - Bump to version 2.10.1 xfsprogs/repair/phase6.c - 1.44 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase6.c.diff?r1=text&tr1=1.44&r2=text&tr2=1.43&f=h - Make sure xfs_repair can restore bad or missing ".." entries From owner-xfs@oss.sgi.com Thu Sep 4 20:49:44 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m853nfa4021887 for ; Thu, 4 Sep 2008 20:49:43 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA24350; Fri, 5 Sep 2008 13:51:08 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id D2BBD58C52AB; Fri, 5 Sep 2008 13:51:07 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: TAKE 983683 - Don't do I/O beyond eof when unreserving space Message-Id: <20080905035107.D2BBD58C52AB@chook.melbourne.sgi.com> Date: Fri, 5 Sep 2008 13:51:07 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) Don't do I/O beyond eof when unreserving space When unreserving space with boundaries that are not block aligned we round up the start and round down the end boundaries and then use this function, xfs_zero_remaining_bytes(), to zero the parts of the blocks that got dropped during the rounding. The problem is we don't consider if these blocks are beyond eof. Worse still is if we encounter delayed allocations beyond eof we will try to use the magic delayed allocation block number as a real block number. If the file size is ever extended to expose these blocks then we'll go through xfs_zero_eof() to zero them anyway. Date: Fri Sep 5 13:50:14 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-xfs Inspected by: hch Author: lachlan The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:32055a fs/xfs/xfs_vnodeops.c - 1.774 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.774&r2=text&tr2=1.773&f=h - Don't do I/O beyond eof when unreserving space From owner-xfs@oss.sgi.com Thu Sep 4 20:57:28 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m853vPfV022501 for ; Thu, 4 Sep 2008 20:57:27 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA24429 for ; Fri, 5 Sep 2008 13:58:52 +1000 Date: Fri, 05 Sep 2008 14:00:31 +1000 To: "xfs@oss.sgi.com" Subject: xfsprogs 2.10.1 source tarball released From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: User-Agent: Opera Mail/9.51 (Win32) ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_2.10.1-1.tar.gz Changelog since 2.9.8: xfsprogs-2.10.1 (5 September 2008) - Improve xfs_repair -P option to disable xfs_buf_t locking. - Fix inode cluster I/O size for > 8KB block size filesystems. - Fix up ASCII CI output for mkfs.xfs and xfs_growfs. - Fix buffer handling in error cases in xfs_db (includes xfs_check and xfs_metadump). - Add packed on-disk shortform directory for ARM's old ABI, thanks to Eric Sandeen. - Increase default valid block count for a directory extent in xfs_metadump (from 20 to 1000). - Fix up mkfs.xfs -N option with "-d file" so it doesn't resize the target file (thanks to Michal Marek). - Improve libxfs cache handling with (un)referenced blocks. - Check that directory size is not too big in xfs_repair. - Improve xfs_repair to restore bad or missing ".." entries. xfsprogs-2.10.0 (26 May 2008) - Add ASCII case-insensitive support to xfsprogs. From owner-xfs@oss.sgi.com Thu Sep 4 23:13:56 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m856DrSJ029332 for ; Thu, 4 Sep 2008 23:13:55 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA26969; Fri, 5 Sep 2008 16:15:18 +1000 Message-ID: <48C0D04E.1010708@sgi.com> Date: Fri, 05 Sep 2008 16:23:10 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: Lachlan McIlroy , xfs@oss.sgi.com Subject: Re: Filesystem corruption writing out unlinked inodes References: <48BCC5B1.7080300@sgi.com> <20080902051524.GC15962@disturbed> <48BCD622.1080406@sgi.com> <20080902062155.GE15962@disturbed> <48BF33EC.7080406@sgi.com> <20080904090835.GE15950@disturbed> In-Reply-To: <20080904090835.GE15950@disturbed> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Dave Chinner wrote: > On Thu, Sep 04, 2008 at 11:03:40AM +1000, Lachlan McIlroy wrote: >> Dave Chinner wrote: >>> On Tue, Sep 02, 2008 at 03:58:58PM +1000, Lachlan McIlroy wrote: >>>> I'm just not sure about the assumption >>>> that if the flush lock cannot be acquired in xfs_ifree_cluster() then >>>> the inode must be in the process of being flushed. The flush could >>>> be aborted due to the inode being pinned or some other case and the >>>> inode never gets marked as stale. >>> Did that happen? >>> >>> Basically I'm asking what the sequence of events is that leads up >>> to this problem - we need to identify the actual race condition >>> before speculating on potential fixes.... >>> >> In the trace below pid 7731 is unlinking an inode and it's not the last >> inode so it doesn't go through xfs_ifree_cluster() and mark the other >> inodes as stale. At the same time pid 12269 unlinks the final inode in >> the cluster and calls xfs_ifree_cluster() but fails to lock the inode >> held by pid 7731 so it skips it. Pid 12269 deallocates the inode cluster >> and the disk space is reallocated as user data (the data "temp28/file00006" >> is what the test writes into it's files). Meanwhile pid 7731 finally >> continues and tries to flush the inode. > > Ah - how are we unlinking two inodes in the one AG at the same time? > That's supposed to be serialised by the AGI buffer lock.... > > Ah - I see - we hold the inode across the transaction commit in > xfs_inactive(). That means that the AGI is unlocked well before the > inode is unlocked, which allows the racing inode inactivate to lock > the AGI and call xfs_icluster_free() before the inode is unlocked > after the transaction commit. > > Ok, now we understand the race condition.... > >> Looks like xfs_ifree_cluster() should do a blocking wait on the ilock and >> maybe move the setting of XFS_ISTALE outside the flock. > > No, we can't do a blocking wait on the ilock - we already hold the > ilock on other inodes and so we could deadlock by doing that. > > Hmmmm - I wonder what the reason for the holding of the inode lock > over the transaction commit is.... Perhaps it is to make the > detatching of the dquots atomic with the inactivation (seems like > a valid reason to me). > > Perhap we should also hold the AGI buffer across the transaction > commit as well and only release that after the inode is > unlocked so the cluster free does not make progress until after > the inode inactivation of all inodes in the cluster is complete.... > Okay, I think I understand what you are saying and it makes some sense. I think there is still a chance that the xfs_ilock_nowait() will fail in xfs_ifree_cluster() if the inode it is trying to lock has just been locked before entering xfs_finish_reclaim() and consequently we wont mark it stale. The thread in xfs_ifree_cluster() may also grab the lock on the inode cluster buffer before the xfs_finish_reclaim() thread so we wont find the inode's log item attached to the buffer either. From owner-xfs@oss.sgi.com Fri Sep 5 09:27:01 2008 X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m85GR1U0013290 for ; Fri, 5 Sep 2008 09:27:01 -0700 X-ASG-Debug-ID: 1220632107-75d703650000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from coraid.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 77EC9124CBBC for ; Fri, 5 Sep 2008 09:28:27 -0700 (PDT) Received: from coraid.com (baron.coraid.com [12.51.113.4]) by cuda.sgi.com with ESMTP id 5UGMkogN6Fy5YBGu for ; Fri, 05 Sep 2008 09:28:27 -0700 (PDT) Received: from kokone.coraid.com ([68.16.104.79]) by coraid.com; Fri Sep 5 12:27:27 EDT 2008 Date: Fri, 5 Sep 2008 12:29:21 -0400 From: Ed Cashin To: xfs@oss.sgi.com, Adrian Bunk X-ASG-Orig-Subj: Re: xfs_growfs fix backport for 2.6.16.y Subject: Re: xfs_growfs fix backport for 2.6.16.y Message-ID: <20080905162921.GA8000@coraid.com> References: <20080825153931.GD7575@coraid.com> <20080826020101.GU5706@disturbed> <20080903182701.GA29192@coraid.com> <20080904231418.GB5991@disturbed> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080904231418.GB5991@disturbed> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: baron.coraid.com[12.51.113.4] X-Barracuda-Start-Time: 1220632108 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0053 1.0000 -1.9865 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.99 X-Barracuda-Spam-Status: No, SCORE=-1.99 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.4737 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Sep 05, 2008 at 09:14:18AM +1000, Dave Chinner wrote: ... > Ah, yes. That. I think Barry can try to explain that one because: > > http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/078.out.diff?r1=1.3;r2=1.4 > > The test golden output was changed instead of someone understanding > why the fixes to growfs changed the size that the filesystem was > grown to. ISTR being opposed to changing the golden output because > it was the wrong thing to do and would break QA on older kernels, > not to mention that it indicated some possible off-by-one bug in > a change that had been made at some point... > > Other than that, the backport should be fine given it passed all the > other parts of the test.... Oh, that's good news, thanks. I just need to test the patch on a 32-bit O.S. now, but I am having a difficult time building xfs-cmds/xfstests on a CentOS 5 VM. Does anyone have a recommendation for an O.S. I can use to build and run the xfsqa test 078? It would be running the 2.6.16.62 kernel with the patch in question, not the stock distro kernel. -- Ed Cashin From owner-xfs@oss.sgi.com Fri Sep 5 18:58:49 2008 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m861w22m025845 for ; Fri, 5 Sep 2008 18:58:02 -0700 X-ASG-Debug-ID: 1220666291-2fa4011d0003-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from qb-out-1314.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B74C81A9F5E6 for ; Fri, 5 Sep 2008 18:59:13 -0700 (PDT) Received: from qb-out-1314.google.com (qb-out-1314.google.com [72.14.204.170]) by cuda.sgi.com with ESMTP id 348nLE2z6rXsQ0Sk for ; Fri, 05 Sep 2008 18:59:13 -0700 (PDT) Received: by qb-out-1314.google.com with SMTP id c6so1085118qbc.8 for ; Fri, 05 Sep 2008 18:59:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type:references; bh=DhTjMRVQ4xZW7W5Lg5euDDduVf54LfVOMcN0CbTSM9U=; b=sOBqpCfXVAtdI+Ew3dv2OavX57E445oOsqkyG6hiS01oRbNzqjp5F/cLNWUf8U6DBQ SO3jlngWvCTLEVj5iZfu7dvtWKWa9SQX0Q2z9EFzTKNs3iXjxe77LrbfLk0r6IZ8djHm d1BiapJoQxsUb9in59b2Gg0kSpyxTI3c3MONs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:references; b=S+ve8h1txEgUeJ0ojpcavPx6Yeq3HB1le+9JTYRtS0oKsyw9bS7UqB5DlA44CuBG6X VNmNDluTbaEbbxL2137j/Ifl7BINJsMX6rSh37OD7xUSxhIyr08EwhGpY+LqFJhb/YW7 s1lv0GiB/aEfcXnsy8yRy+0sxXMNnApSE2Sr8= Received: by 10.180.255.1 with SMTP id c1mr9655589bki.23.1220666282503; Fri, 05 Sep 2008 18:58:02 -0700 (PDT) Received: by 10.180.225.15 with HTTP; Fri, 5 Sep 2008 18:57:59 -0700 (PDT) Message-ID: Date: Fri, 5 Sep 2008 21:57:59 -0400 From: "rocio delcielo" To: "rocio del cielo" X-ASG-Orig-Subj: ONLY ONE WAY Subject: ONLY ONE WAY In-Reply-To: <48BDAA7B.7070207@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_37439_11064291.1220666281769" References: <48BDAA7B.7070207@gmail.com> X-Barracuda-Connect: qb-out-1314.google.com[72.14.204.170] X-Barracuda-Start-Time: 1220666358 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 ------=_Part_37439_11064291.1220666281769 Content-Type: multipart/alternative; boundary="----=_Part_37440_28256366.1220666281769" ------=_Part_37440_28256366.1220666281769 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline *ONLY ONE WAY* One way to heaven, one truth forever, only one possibility of eternal life (John 14: 6). There is only one Saviour for mankind; only one Lord for all. "*Neither is there salvation in any other: for there is none other name under heaven given among men, whereby we must be saved", *(Acts 4: 12) except that of Jesus Christ, our Lord. God, the celestial Father, decided this to be so, and for love He gave us His only begotten Son (Jesus), so that all who believe in Him, don't perish (in hell), but have eternal life (in heaven) (John 3: 16). Now, wherever you are and in whatever situation you are, confess with your mouth that Jesus is the Lord, and believe in your heart that God raised him from the dead, so that you are saved. (Romans 10: 9). His plan of salvation is this easy!! Without denomination, without deeds, without being good, (no one is). He loves you just the way you are, and he gives you unmerited salvation. As it is written in Ephesians 2: 8 and 9: *"For by grace are ye saved through faith; and that not of yourselves: it is the gift of God: Not of works, lest any man should boast." * In other words: without moving a finger to obtain salvation. Ask him for this sincerely, and proclaim yourself saved by faith, for he said you would be. He is God, and he cannot lie (Numbers 23: 19). Say*:** **Lord Jesus, I am a sinner and I repent; I ask you to forgive me. Come to my heart and give me eternal life; also anoint me with your Spirit of love, to love you as much as I should and also to love everybody. * * * *My Lord and my God, thank you for saving me! * *Read the Bible to be wise, believe it to be saved and practice it to be holy. * *Join a Christian church, where the authority is the Bible and Jesus Christ is preached.* * * *INTERACTIVE BIBLE, KING JAMES VERSION** *** http://www.fourmilab.ch/etexts/www/Bible/Bible.html * * *SEND TO EVERY BODY!!! ADD YOUR NAME TO THE LIST **(At the end of this message)** AND SEND IT!!! WHEN THE LIST GET TO THE NUMBER 100, SEND IT TO THIS E-MAIL:* *salvacion.por.amor@gmail.com* *PLEASE, DON'T LET THIS MESSAGE STOP IN YOU, AND BELIEVE IT, BECAUSE IT' S THE TRUTH, AND THE TRUTH SHALL MAKE YOU FREE (JOHN 8: 32).* * GOD BLESS YOU GREATLY!!!* ****************************************** *UN SOLO CAMINO* Un camino al cielo, una verdad para siempre; solamente una posibilidad de vida eterna (Juan 14: 6). Hay un =FAnico Salvador para los seres humanos, solo un Se=F1or para todos.= *"Y en ning=FAn otro hay salvaci=F3n; porque no hay otro nombre bajo el cielo, = dado a los hombres, en que podamos ser salvos" **(Hechos 4: 12)* mas que el de Cristo Jes=FAs, Se=F1or nuestro. Dios, el Padre celestial, decidi=F3 que as=ED fuera, y por amor nos dio a s= u Hijo unig=E9nito (Jes=FAs), para que todo aquel que en =E9l cree, no se pie= rda (en el infierno), mas tenga vida eterna (en el cielo) (Juan 3: 16). Ahora, donde sea que te encuentres y en la situaci=F3n que est=E9s, confies= a con tu boca que Jes=FAs es el Se=F1or, y cree con tu coraz=F3n que Dios lo leva= nt=F3 de los muertos, para que seas salvo (Romanos 10: 9). =A1As=ED de sencillo es su plan de salvaci=F3n! Sin denominaci=F3n, sin obr= as, sin ser bueno (nadie lo es). Tal como eres te ama, y te regala salvaci=F3n inmerecida. Como est=E1 escrito en Efesios 2: 8 y 9: *"Porque por gracia sois salvos po= r medio de la fe; y esto no de vosotros, pues es don (regalo) de Dios; no por obras para que nadie se glor=EDe". * En otras palabras, sin mover un dedo para obtener la salvaci=F3n, p=EDdesel= a sinceramente, y procl=E1mate salvado por fe, pues =E9l ha dicho que as=ED l= o ser=EDas. Es Dios, y no puede mentir (N=FAmeros 23: 19). Di:* Se=F1or Jes=FAs, soy pecador y me arrepiento; te pido perd=F3n. Ven a = mi coraz=F3n y dame la vida eterna; tambi=E9n =FAngeme con tu Esp=EDritu de am= or, para amarte tanto como debo a ti y a los dem=E1s. * * * *=A1Gracias por salvarme, Se=F1or m=EDo y Dios m=EDo!. Amen** * *Lee la Biblia para ser sabio, cr=E9ela para ser salvo y pract=EDcala para = ser santo. * *Asiste a una iglesia cristiana, cuya autoridad sea la Biblia y Jesucristo sea predicado. * * * *BIBLIA INTERACTIVA, VERSI=D3N EXACTA A LA ORIGINAL. REINA-VALERA DE 1960 * http://www.gentle.org/biblia/ *M=C1NDALO A TODO EL MUNDO!!! **AGREGA TU NOMBRE A LA LISTA **(al final del mensaje) **Y ENV=CDALO!!!. **CUANDO LA LISTA LLEGUE AL N=DAMERO 100 ENV=CDA= LO A:* *salvacion.por.amor@gmail.com ** * *POR FAVOR, QUE NO SE PARE EN TI Y CREELO PORQUE ES LA VERDAD QUE TE HAR=C1 LIBRE (JUAN 8: 32).* * * *DIOS TE BENDIGA MUCHO!!!* *LISTA-LIST:* *001. Isa=EDas Arjarjai, M=E9xico * *002. Maria Ester, CHILE, South America* ------=_Part_37440_28256366.1220666281769 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline


ONLY ONE WAY

 

One way to heaven, one truth forever, only one possibility o= f eternal life (John 14: 6).

 

There is only one Saviour for mankind; only one Lord for all. "Ne= ither is there salvation in any other: for there is none other name under h= eaven given among men, whereby we must be saved", (Acts 4: 12) ex= cept that of Jesus Christ, our Lord.

 

God, the celestial Father, decided this to be so, and for lo= ve He gave us His only begotten Son (Jesus), so that all who believe in Him= , don&#= 39;t pe= rish (in hell), but have eternal life (in heaven) (John 3: 16).

 

Now, wherever you are and in whatever situation you are, con= fess with your mouth that Jesus is the Lord, and believe in your heart that= God raised him from the dead, so that you are saved. (Romans 10: 9).

 

His plan of salvation is this easy!! Without denomination, w= ithout deeds, without being good, (no one is). He loves you just the way yo= u are, and he gives you unmerited salvation.

 

As it is written in Ephesians 2: 8 and 9: "For by gr= ace are ye saved through faith; and that not of yourselves: it is the gift = of God: Not of works, lest any man should boast."

 

In other words: without moving a finger to obtain salvation.= Ask him for this sincerely, and proclaim yourself saved by faith, for he s= aid you would be. He is God, and he cannot lie (Numbers 23: 19).

=  

Say: Lord Jesus, I am a sinner and I repent; I ask y= ou to forgive me. Come to my heart and give me eternal life; also anoint me= with your Spirit of love, to love you as much as I should and also to love= everybody.

 

My Lord and my God, thank you for saving me!

 <= /p>

Read the Bible to be wise, believe it to be saved and practice = it to be holy.

Join a Christian church, where the authority is the Bible and J= esus Christ is preached.

 

INTERACTIVE BIBLE, KING JAMES VERSION

http://www.fourmilab.ch/= etexts/www/Bible/Bible.html

 

SEND TO EVERY BODY!!! ADD YOUR NAME TO THE LIST (At the end of this message) AND SEND IT!!! WHEN THE LIST GET TO THE NUMBER 100, SEND IT TO THIS&= nbsp;E-MAIL:

 <= /p>

salvacion.por.amor@gmail.com=

 <= /p>

PLEASE, DON'T LET THIS MESSAGE STOP IN YOU, AND BELIEVE IT, BEC= AUSE IT' S THE TRUTH, AND THE TRUTH SHALL MAKE YOU FREE (JOHN 8: 32).

 <= /p>

 GOD BLESS YOU GREATLY!!!

******************************************

UN SOLO CAMINO

 

Un camino al cielo, una verdad para siempre; solamente una posibilid= ad de vida eterna  (Juan 14: 6).

 

Hay un =FAnico Salvador para los seres humanos, solo un Se=F1or para= todos. "Y en ning=FAn otro hay salvaci=F3n; porque no hay otro no= mbre bajo el cielo, dado a los hombres, en que podamos ser salvos" (Hechos 4: 12) mas que= el de Cristo Jes=FAs, Se=F1or nuestro.

 

Dios, el Padre celestial, decidi=F3 que as=ED fuera, y por amor nos = dio a su Hijo unig=E9nito (Jes=FAs), para que todo aquel que en =E9l cree, = no se pierda (en el infierno), mas tenga vida eterna (en el cielo) (Juan 3:= 16).

 

Ahora, donde sea que te encuentres y en la situaci=F3n que est=E9s, = confiesa con tu boca que Jes=FAs es el Se=F1or, y cree con tu coraz=F3n que= Dios lo levant=F3 de los muertos, para que seas salvo (Romanos 10: 9).

 

=A1As=ED de sencillo es su plan de salvaci=F3n! Sin denominaci=F3n, = sin obras, sin ser bueno (nadie lo es). Tal como eres te ama, y te reg= ala salvaci=F3n inmerecida.

 

Como est=E1 escrito en Efesios 2: 8 y 9: "Porque por gracia = sois salvos por medio de la fe; y esto no de vosotros, pues es don (regalo)= de Dios; no por obras para que nadie se glor=EDe".

 

En otras palabras, sin mover un dedo para obtener la salvaci=F3n, p= =EDdesela sinceramente, y procl=E1mate salvado por fe, pues =E9l ha dicho q= ue as=ED lo ser=EDas. Es Dios, y no puede mentir (N=FAmeros 23: 19).

 

Di: Se=F1or Jes=FAs, soy pecador y me arrepiento; te pido pe= rd=F3n. Ven a mi coraz=F3n y dame la vida eterna; tambi=E9n =FAngeme con tu= Esp=EDritu de amor, para amarte tanto como debo a ti y a los dem=E1s.

 

=A1Gracias por salvarme, Se=F1or m=EDo y Dios m=EDo!. Amen

=  

Lee= la Biblia para ser sabio, cr=E9ela para ser salvo y pract=EDcala para ser = santo.

Asi= ste a una iglesia cristiana, cuya autoridad sea la Biblia y Jesucristo sea = predicado. 

 <= /span>

BIBLIA INTERACTIVA, VERSI=D3N EXACTA A LA ORIGINAL. REINA-VALERA DE 1960=

http://www.gentle.org/biblia/ = ; 

 

M=C1NDA= LO A TODO EL MUNDO!!! AGREGA TU NOMBRE A LA LISTA <= /tt>(al final del mensaje) Y ENV=CDALO!!!. CUANDO LA LISTA LLEGUE AL N=DAMERO 100 ENV=CDALO A:

 

<= u>salvacion.por.amor@gmail.com=

 

POR FAV= OR, QUE NO SE PARE EN TI Y CREELO PORQUE ES LA VERDAD QUE TE HAR=C1 LIBRE (= JUAN 8: 32).

 <= /span>

<= b>DIOS TE = BENDIGA MUCHO!!!

LISTA-LIST:

001. Isa=EDas Arjarjai, M= =E9xico

002. Maria Ester, CHILE, So= uth America


------=_Part_37440_28256366.1220666281769-- ------=_Part_37439_11064291.1220666281769 Content-Type: application/vnd.ms-powerpoint; name="&HIS_PRECIOUS_BLOOD__(_Chinese_).pps" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkrl2n35 Content-Disposition: attachment; filename="&HIS_PRECIOUS_BLOOD__(_Chinese_).pps" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAjAAAAKREAAAAAAAAA EAAALBEAAAEAAAD+////AAAAAAQRAAAFEQAABhEAAAcRAAAIEQAACREAAAoRAAALEQAADBEAAA0R AAAOEQAADxEAABARAAAREQAAEhEAABMRAAAUEQAAFREAABYRAAAXEQAAGBEAABkRAAAaEQAAGxEA ABwRAAAdEQAAHhEAAB8RAAAgEQAAIREAACIRAAAjEQAAJBEAACsRAAAqEQAA//////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////+g Rh3wR1MCAMhr6AQOuvmKgbDz9DTn6Zr//9j/4AAQSkZJRgABAQEAlgCWAAD/2wBDAAoHBwgHBgoI CAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/ 2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozv/wAARCAXcBGUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQF BgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4 eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi 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 N1No91pd037St0L3csux3CsqE8Zz9M1TVaM5RbOSdVarHrHUFxdQtmEYWMnzAreCpFJUiFyaoZig ApAFABQAUwFqoyCgAoAKACgAoAKAChAajtQUaN3oGjWgApAFIZk896BhQAUAFIAoAKACmAUwFjxT MgoAKACgDFAGaACgAoA0oKNW+KgaNaGAUhhSAzQMKACgAoAKACgAoAxmmI//2aBGHfDoVQAA3bRX cyQJ+lqjdBEhqDY9h///2P/gABBKRklGAAECAQBIAEgAAP/+AQKASNcEHR4fICEiIyQlJicoKSor LC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNk ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5yd np+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW 19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v////////////////////// /////////////8AAEQgBqQE/AwEiAAIRAQMRAf/bAIQABQMDBAMDBQQEBAUFBQYHDQgHBwcHEAsM CQ0TEBQTEhASEhUXHhkVFhwWEhIaIxocHyAhIiEUGSUnJCAnHiEhIAEFBQUHBgcPCAgPIBUSFRUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/8QBogAAAQUB AQEBAQEAAAAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEH InEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFla Y2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbH yMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foBAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYH CAkKCxEAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLR 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 4ieOQx/OazLhZAdjAV13ib/Vr9aoW3+rT61UbrQb8jmYrYlyzLwlN2MpO0V0d19xv97+lZT/AOtP 1pxfMgl7rKDxkleKr3Ee37q1fl6ii06y/wC7VbOxPmc+45ZNtMjHzfIrflXTGqD/AOrkq1G2gc12 Y8jPFyVqrPffZ2xtbmt21/1Rph/10X1pWa2HG1zn47x5JPucelWHuFRAidfTFXdQ/wBYf981C3+o H0aktNRy2MWbLyZZNtNeSWPGFGKmk+9TJOi0PXQiKsRpdSF/uYx3qTz/ADG+ZaB0pG/pUcppHVWF MgHQGnRsHOMUxulPj6iizQrKxJ5e0c8CoJGYAhcVdl/1Qql3NS27DtZH/9mgRh3wv7QBAIWsevDK tFU8Et4HzpQs0qz//9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAASUkqAAgAAAAAAAAAAAD/ 2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAFrAckDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ ytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3 eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna 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 eelQr4k09Jh5kkhG4PuWPcVGCoVVBBkOSO